Add Temporary Entities to Block Definition Example (VBA)
This example shows how to add temporary entities to a Block definition and
Block Instance.
'--------------------------------------------------------------
' Preconditions:
' 1. Create a VBA macro in a software product in which VBA is
' embedded.
' 2. Copy and paste this example into the Visual Basic IDE.
' 3. Add a reference to the DraftSight type library,
' install_dir\bin\dsAutomation.dll.
' 4. Start DraftSight and open a document.
' 5. Run the macro.
'
' Postconditions:
' 1. Creates Block definition with one element, a Circle.
' 2. Inserts Block instance.
' 3. Zooms to fit the drawing and execution stops.
' 4. Press F8 to step through the rest of the project
' and examine the drawing after each call.
' 5. Creates temporary entities, two Circles.
' 6. Modifies temporary entities.
' 7. Adds temporary entities to Block definition and Block
' instance.
'----------------------------------------------------------------
Option Explicit
Sub main()
Dim dsApp As DraftSight.Application
'Connect to DraftSight application
Set dsApp = GetObject(, "DraftSight.Application")
If dsApp Is Nothing Then
Return
End If
'Abort any command currently running in DraftSight
'to avoid nested commands
dsApp.AbortRunningCommand
'Get active document
Dim dsDoc As DraftSight.Document
Set dsDoc = dsApp.GetActiveDocument()
If dsDoc Is Nothing Then
MsgBox ("There are no open documents in DraftSight.")
Return
End If
Dim dsModel As DraftSight.Model
Dim dsSketchMgr As DraftSight.SketchManager
Set dsModel = dsDoc.GetModel()
Set dsSketchMgr = dsModel.GetSketchManager()
'Create Block definition with one element, a Circle
Dim dsCircle As DraftSight.Circle
Set dsCircle = dsSketchMgr.InsertCircle(0, 0, 0, 5)
Dim dsEntities(0) As Object
Dim dsEntityTypes(0) As Long
Set dsEntities(0) = dsCircle
dsEntityTypes(0) = dsObjectType_e.dsCircleType
Dim dsBlkDef As DraftSight.BlockDefinition
Set dsBlkDef = dsDoc.CreateBlockDefinition("SampleBlock", "Sample block definition", 0, 0, 0, dsEntityTypes, dsEntities, dsBlockDefinitionEntities_RemoveFromDrawing)
dsSketchMgr.InsertBlock2 "SampleBlock", 0, 0, 0, 1, 1, 1, 0
'Zoom to fit
dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing
'Examine the drawing
'to verify that a Block instance
'was inserted
'Press F8 to continue
Stop
'Create temporary entities, which are not added to drawing
'Turn temporary entity mode on
dsApp.TemporaryEntityMode = True
'Create temporary Circles
Dim dsTempCircle1 As DraftSight.Circle
Set dsTempCircle1 = dsSketchMgr.InsertCircle(0, 0, 0, 5)
Dim dsTempCircle2 As DraftSight.Circle
Set dsTempCircle2 = dsSketchMgr.InsertCircle(0, 0, 0, 5)
'Turn temporary entity mode off
dsApp.TemporaryEntityMode = False
'Modify Circles, which you cannot see
Dim PointOnCurveX As Double
PointOnCurveX = 0#
Dim PointOnCurveY As Double
PointOnCurveY = 0#
Dim PointOnCurveZ As Double
PointOnCurveZ = 0#
dsCircle.GetClosestPointOn 2.5, 2.5, 0, PointOnCurveX, PointOnCurveY, PointOnCurveZ
dsTempCircle1.SetCenter PointOnCurveX, PointOnCurveY, PointOnCurveZ
dsTempCircle1.GetClosestPointOn PointOnCurveX + 2.5, PointOnCurveY + 2.5, PointOnCurveZ, PointOnCurveX, PointOnCurveY, PointOnCurveZ
dsTempCircle2.SetCenter PointOnCurveX, PointOnCurveY, PointOnCurveZ
'Zoom to fit
dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing
'Add temporary Circles to Block definition
'Block instance updates accordingly
dsBlkDef.AddTemporaryEntity dsTempCircle1
dsBlkDef.AddTemporaryEntity dsTempCircle2
'Zoom to fit
dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing
End Sub