2024 Class
Changes 2
C

BRepBuilder

Description:
A class that allows direct construction of geometry objects (solids, open shells, etc.).
Inheritance Hierarchy:
System.Object
  Autodesk.Revit.DB.ShapeBuilder
    Autodesk.Revit.DB.BRepBuilder
public class BRepBuilder : ShapeBuilder
private void CreateDirectShapeFromCylinder(Document doc)
{
    // Naming convention for faces and edges: we assume that x is to the left and pointing down, y is horizontal and pointing to the right, z is up
    BRepBuilder brepBuilder = new BRepBuilder(BRepType.Solid);

    // The surfaces of the four faces.
    Frame basis = new Frame(new XYZ(50, -100, 0), new XYZ(0, 1, 0), new XYZ(-1, 0, 0), new XYZ(0, 0, 1));
    CylindricalSurface cylSurf = CylindricalSurface.Create(basis, 50);
    Plane top = Plane.CreateByNormalAndOrigin(new XYZ(0, 0, 1), new XYZ(0, 0, 100));  // normal points outside the cylinder
    Plane bottom = Plane.CreateByNormalAndOrigin(new XYZ(0, 0, 1), new XYZ(0, 0, 0)); // normal points inside the cylinder

    // Add the four faces
    BRepBuilderGeometryId frontCylFaceId = brepBuilder.AddFace(BRepBuilderSurfaceGeometry.Create(cylSurf, null), false);
    BRepBuilderGeometryId backCylFaceId = brepBuilder.AddFace(BRepBuilderSurfaceGeometry.Create(cylSurf, null), false);
    BRepBuilderGeometryId topFaceId = brepBuilder.AddFace(BRepBuilderSurfaceGeometry.Create(top, null), false);
    BRepBuilderGeometryId bottomFaceId = brepBuilder.AddFace(BRepBuilderSurfaceGeometry.Create(bottom, null), true);

    // Geometry for the four semi-circular edges and two vertical linear edges
    BRepBuilderEdgeGeometry frontEdgeBottom = BRepBuilderEdgeGeometry.Create(Arc.Create(new XYZ(0, -100, 0), new XYZ(100, -100, 0), new XYZ(50, -50, 0)));
    BRepBuilderEdgeGeometry backEdgeBottom = BRepBuilderEdgeGeometry.Create(Arc.Create(new XYZ(100, -100, 0), new XYZ(0, -100, 0), new XYZ(50, -150, 0)));

    BRepBuilderEdgeGeometry frontEdgeTop = BRepBuilderEdgeGeometry.Create(Arc.Create(new XYZ(0, -100, 100), new XYZ(100, -100, 100), new XYZ(50, -50, 100)));
    BRepBuilderEdgeGeometry backEdgeTop = BRepBuilderEdgeGeometry.Create(Arc.Create(new XYZ(0, -100, 100), new XYZ(100, -100, 100), new XYZ(50, -150, 100)));

    BRepBuilderEdgeGeometry linearEdgeFront = BRepBuilderEdgeGeometry.Create(new XYZ(100, -100, 0), new XYZ(100, -100, 100));
    BRepBuilderEdgeGeometry linearEdgeBack = BRepBuilderEdgeGeometry.Create(new XYZ(0, -100, 0), new XYZ(0, -100, 100));

    // Add the six edges
    BRepBuilderGeometryId frontEdgeBottomId = brepBuilder.AddEdge(frontEdgeBottom);
    BRepBuilderGeometryId frontEdgeTopId = brepBuilder.AddEdge(frontEdgeTop);
    BRepBuilderGeometryId linearEdgeFrontId = brepBuilder.AddEdge(linearEdgeFront);
    BRepBuilderGeometryId linearEdgeBackId = brepBuilder.AddEdge(linearEdgeBack);
    BRepBuilderGeometryId backEdgeBottomId = brepBuilder.AddEdge(backEdgeBottom);
    BRepBuilderGeometryId backEdgeTopId = brepBuilder.AddEdge(backEdgeTop);

    // Loops of the four faces
    BRepBuilderGeometryId loopId_Top = brepBuilder.AddLoop(topFaceId);
    BRepBuilderGeometryId loopId_Bottom = brepBuilder.AddLoop(bottomFaceId);
    BRepBuilderGeometryId loopId_Front = brepBuilder.AddLoop(frontCylFaceId);
    BRepBuilderGeometryId loopId_Back = brepBuilder.AddLoop(backCylFaceId);

    // Add coedges for the loop of the front face
    brepBuilder.AddCoEdge(loopId_Front, linearEdgeBackId, false);
    brepBuilder.AddCoEdge(loopId_Front, frontEdgeTopId, false);
    brepBuilder.AddCoEdge(loopId_Front, linearEdgeFrontId, true);
    brepBuilder.AddCoEdge(loopId_Front, frontEdgeBottomId, true);
    brepBuilder.FinishLoop(loopId_Front);
    brepBuilder.FinishFace(frontCylFaceId);

    // Add coedges for the loop of the back face
    brepBuilder.AddCoEdge(loopId_Back, linearEdgeBackId, true);
    brepBuilder.AddCoEdge(loopId_Back, backEdgeBottomId, true);
    brepBuilder.AddCoEdge(loopId_Back, linearEdgeFrontId, false);
    brepBuilder.AddCoEdge(loopId_Back, backEdgeTopId, true);
    brepBuilder.FinishLoop(loopId_Back);
    brepBuilder.FinishFace(backCylFaceId);

    // Add coedges for the loop of the top face
    brepBuilder.AddCoEdge(loopId_Top, backEdgeTopId, false);
    brepBuilder.AddCoEdge(loopId_Top, frontEdgeTopId, true);
    brepBuilder.FinishLoop(loopId_Top);
    brepBuilder.FinishFace(topFaceId);

    // Add coedges for the loop of the bottom face
    brepBuilder.AddCoEdge(loopId_Bottom, frontEdgeBottomId, false);
    brepBuilder.AddCoEdge(loopId_Bottom, backEdgeBottomId, false);
    brepBuilder.FinishLoop(loopId_Bottom);
    brepBuilder.FinishFace(bottomFaceId);

    brepBuilder.Finish();

    using (Transaction tr = new Transaction(doc, "Create a DirectShape"))
    {
        tr.Start();
        DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));
        ds.SetShape(brepBuilder);
        tr.Commit();
    }
}
Name Return Type Description Inherited From
C BRepBuilder(BRepType) None Construct a BRepBuilder to use in constructing geometry.
Name Return Type Description Inherited From
M AddCoEdge(BRepBuilderGeometryId, BRepBuilderGeometryId, Boolean) BRepBuilderGeometryId Add a co-edge associated to a previously added edge. A co-edge represents the use of an edge on one of the edge's faces.
M AddEdge(BRepBuilderEdgeGeometry) BRepBuilderGeometryId Add a new edge to the geometry being built. The BRepBuilder uses edges only to store edge geometry and to track pairs of co-edges that share an edge.
M AddFace(BRepBuilderSurfaceGeometry, Boolean) BRepBuilderGeometryId Creates an empty face in the geometry being built. Other BRepBuilder methods are used to add loops to the face.
M AddLoop(BRepBuilderGeometryId) BRepBuilderGeometryId Creates an empty loop in a given face of the geometry being built. Other BRepBuilder methods are used to add co-edges to the loop.
M AllowRemovalOfProblematicFaces() None Allow BRepBuilder to remove problematic faces (e.g., due to inaccurate edge geometry).
M CanAddGeometry() bool A validator function that checks the state of this BRepBuilder object. Returns true if this BRepBuilder object is accepting b-rep data, false otherwise.
M FinishFace(BRepBuilderGeometryId) None Indicates that the caller has finished defining the given face.
M FinishLoop(BRepBuilderGeometryId) None Indicates that the caller has finished defining the given loop.
M Finish() BRepBuilderOutcome Complete construction of the geometry. The geometry will be validated and, if valid, stored in this Builder. Otherwise it will be deleted.
M GetResult() Solid Get the Geometry object built by this BRepBuilder. This will clear the built Geometry stored in the BRepBuilder. This function will throw if this BRepBuilder hasn't completed building the b-rep.
M GetResult(ExternalGeometryId, BRepBuilderPersistentIds) ExternallyTaggedBRep Get the Geometry object built by this BRepBuilder. This will clear the built Geometry stored in the BRepBuilder. This function will throw if this BRepBuilder hasn't completed building the b-rep.
M IsPermittedSurfaceType(Surface) bool A validator function that checks whether the surface object is of type supported as face surface by BRepBuilder.
M IsResultAvailable() bool A validator function that checks the state of this BRepBuilder object. Returns true if this BRepBuilder object has successfully built a b-rep.
M IsValidEdgeId(BRepBuilderGeometryId) bool A validator function that checks whether the edge id corresponds to an edge previously added to this BRepBuilder object.
M IsValidFaceId(BRepBuilderGeometryId) bool A validator function that checks whether the face id corresponds to a face previously added to this BRepBuilder object.
M IsValidLoopId(BRepBuilderGeometryId) bool A validator function that checks whether the loop id corresponds to a loop previously added to this BRepBuilder object.
M IsValidPersistentIdsMap(BRepBuilderPersistentIds) bool A validator function that makes sure that all BRepBuilderGeometryIds in the input map can be found in this BRepBuilder object.
M RemovedSomeFaces() bool Returns 'true' if BRepBuilder removed some problematic faces from the output geometry, 'false' if not. If allowRemovalOfProblematicFaces was not called to enable removal of problematic faces, this function will return 'false'.
M SetAllowShortEdges() None Make BRepBuilder allow edges that it would normally disallow as being too short for Revit geometry.
M SetFaceMaterialId(BRepBuilderGeometryId, ElementId) None Sets material id to a face.
M Dispose() None Releases all resources used by the ShapeBuilder
Name Return Type Description Inherited From
P IsValidObject bool Specifies whether the .NET object represents a valid Revit entity. ShapeBuilder