我正在尝试使用Eyeshot在Autodesk naviswork上创建导航网格。
在使用Solid.FromTriangles()
创建实体之后,将顶点和IndexTriangle转换为顶点三角形。
var solidList = new List();
var Solid = Solid.FromTriangles(item.vertices, item.triangles);
但是我认为布尔运算符不起作用。
所以我想提取区域以使用布尔运算符。
我如何提取区域以划分网格或实体(或顶点三角形)?
答案 0 :(得分:1)
这很容易做到。您必须确保对区域vertese进行了排序,否则可能会遇到一些问题,但这是一个简单的参数。如果形状不是空心的,请参考以下示例:
// the verteses has to be in order and direction doesn't matter here
// i simply assume it's drawn on X/Y for the purpose of the example
public static Region CreateRegion(List<Point3D> verteses)
{
// create a curve list representing
var curves = new List<ICurve>();
// for each vertex we add them to the list
for (int i = 1; i < verteses.Count; i++)
{
curves.Add(new Line(verteses[i - 1], verteses[i]));
}
// close the region
curves.Add(new Line(verteses.Last(), verteses[0]));
return new Region(new CompositeCurve(curves, true), Plane.XY, true);
}
// this extrude in Z the region
public static Solid CreateSolidFromRegion(Region region, double extrudedHeight)
{
// extrude toward Z by the amount
return region.ExtrudeAsSolid(new Vector3D(0, 0, 1), extrudedHeight);
}
一个简单的示例,该示例从vertese创建10×10×10的多维数据集(有一种更简单的方法可以创建多维数据集,但为简单起见,我将创建一个多维数据集)
// create the 4 verteses
var verteses = new List<Point3D>()
{
new Point3D(0, 0, 0),
new Point3D(10, 0, 0),
new Point3D(10, 10, 0),
new Point3D(0, 10, 0)
}
// create the region on the XY plane using the static method
var region = CreateRegion(verteses);
// extrude the region in Z by 10 units
var solid = CreateSolidFromRegion(region, 10d);