Public Sub CreateRectangleFace()
Dim oTransBRep As TransientBRep
Set oTransBRep = ThisApplication.TransientBRep
Dim oSurfaceBodyDef As SurfaceBodyDefinition
Set oSurfaceBodyDef = oTransBRep.CreateSurfaceBodyDefinition
' Create a lump.
Dim oLumpDef As LumpDefinition
Set oLumpDef = oSurfaceBodyDef.LumpDefinitions.Add
' Create a shell.
Dim oShell As FaceShellDefinition
Set oShell = oLumpDef.FaceShellDefinitions.Add
Dim oTG As TransientGeometry
Set oTG = ThisApplication.TransientGeometry
' Create transient points representing the four corners.
Dim oPoint1 As Point
Set oPoint1 = oTG.CreatePoint(-1, -1, 1)
Dim oPoint2 As Point
Set oPoint2 = oTG.CreatePoint(1, -1, 1)
Dim oPoint3 As Point
Set oPoint3 = oTG.CreatePoint(1, 1, 1)
Dim oPoint4 As Point
Set oPoint4 = oTG.CreatePoint(-1, 1, 1)
' Create the Vertices.
Dim oVertex1 As VertexDefinition
Set oVertex1 = oSurfaceBodyDef.VertexDefinitions.Add(oPoint1)
Dim oVertex2 As VertexDefinition
Set oVertex2 = oSurfaceBodyDef.VertexDefinitions.Add(oPoint2)
Dim oVertex3 As VertexDefinition
Set oVertex3 = oSurfaceBodyDef.VertexDefinitions.Add(oPoint3)
Dim oVertex4 As VertexDefinition
Set oVertex4 = oSurfaceBodyDef.VertexDefinitions.Add(oPoint4)
' Create each of the edges, as defined by a line segment.
Dim oLineSeg As LineSegment
Set oLineSeg = oTG.CreateLineSegment(oPoint1, oPoint2)
Dim oEdgeDef1 As EdgeDefinition
Set oEdgeDef1 = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex1, oVertex2, oLineSeg)
Set oLineSeg = oTG.CreateLineSegment(oPoint2, oPoint3)
Dim oEdgeDef2 As EdgeDefinition
Set oEdgeDef2 = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex2, oVertex3, oLineSeg)
Set oLineSeg = oTG.CreateLineSegment(oPoint3, oPoint4)
Dim oEdgeDef3 As EdgeDefinition
Set oEdgeDef3 = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex3, oVertex4, oLineSeg)
Set oLineSeg = oTG.CreateLineSegment(oPoint4, oPoint1)
Dim oEdgeDef4 As EdgeDefinition
Set oEdgeDef4 = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex4, oVertex1, oLineSeg)
' Create the face as a planar face.
Dim oFaceDef As FaceDefinition
Set oFaceDef = oShell.FaceDefinitions.Add(oTG.CreatePlane( _
oTG.CreatePoint(0, 0, 1), _
oTG.CreateVector(0, 0, 1)), False)
' Create the loop.
Dim oEdgeLoop As EdgeLoopDefinition
Set oEdgeLoop = oFaceDef.EdgeLoopDefinitions.Add
' Define each of the edge uses of the loop using the previously defined edges.
Call oEdgeLoop.EdgeUseDefinitions.Add(oEdgeDef1, False)
Call oEdgeLoop.EdgeUseDefinitions.Add(oEdgeDef2, False)
Call oEdgeLoop.EdgeUseDefinitions.Add(oEdgeDef3, False)
Call oEdgeLoop.EdgeUseDefinitions.Add(oEdgeDef4, False)
' Create a transient body.
Dim oErrors As NameValueMap
Dim oNewBody As SurfaceBody
Set oNewBody = oSurfaceBodyDef.CreateTransientSurfaceBody(oErrors)
' Create a non-parametric base feature based on the transient body.
Dim oDoc As PartDocument
Set oDoc = ThisApplication.Documents.Add(kPartDocumentObject)
Dim oDef As PartComponentDefinition
Set oDef = oDoc.ComponentDefinition
Dim oFeatureDef As NonParametricBaseFeatureDefinition
Set oFeatureDef = oDef.Features.NonParametricBaseFeatures.CreateDefinition
Dim oCollection As ObjectCollection
Set oCollection = ThisApplication.TransientObjects.CreateObjectCollection
oCollection.Add oNewBody
oFeatureDef.BRepEntities = oCollection
oFeatureDef.OutputType = kSurfaceOutputType
Dim oBaseFeature As NonParametricBaseFeature
Set oBaseFeature = oDef.Features.NonParametricBaseFeatures.AddByDefinition(oFeatureDef)
End Sub