private TessellatedShapeBuilderResult TessellateSolid(Solid solid)
{
var builder = new TessellatedShapeBuilder();
var vertices = new List<XYZ>(3);
builder.OpenConnectedFaceSet(false);
var controls = new SolidOrShellTessellationControls()
{
Accuracy = 0.03,
LevelOfDetail = 0.5,
MinAngleInTriangle = 3 * Math.PI / 180.0,
MinExternalAngleBetweenTriangles = 0.2 * Math.PI
};
var shell = SolidUtils.TessellateSolidOrShell(solid, controls);
var component = shell.GetShellComponent(0);
for (var i = 0; i < component.TriangleCount; ++i)
{
var t = component.GetTriangle(i);
vertices.Clear();
vertices.Add(component.GetVertex(t.VertexIndex0));
vertices.Add(component.GetVertex(t.VertexIndex1));
vertices.Add(component.GetVertex(t.VertexIndex2));
var tf = new TessellatedFace(vertices, ElementId.InvalidElementId);
if (builder.DoesFaceHaveEnoughLoopsAndVertices(tf))
{
builder.AddFace(tf);
}
}
builder.CloseConnectedFaceSet();
builder.Target = TessellatedShapeBuilderTarget.AnyGeometry;
builder.Fallback = TessellatedShapeBuilderFallback.Mesh;
builder.Build();
return builder.GetBuildResult();
}