Create Multibody Macro Feature Example (VBA)
This example shows how to create a multibody macro feature.
'----------------------------------------------------------------------------
' Preconditions:
' 1. Open:
' install_dir\samples\tutorial\multibody\multi_local.sldprt
' 2. Click Tools > Macro > New.
' 3. In the Save As dialog:
' a. Navigate to a folder.
' b. Select SW VBA Macros (*.swp) in Save as type.
' c. Click Save.
' 4. Copy main module to the project module code window.
' 5. Right-click the project name and click Insert > Module.
' 6. In the new module's Properties Name field, type mMacroFeature.
' 7. Copy macro feature to the mMacroFeature code
window.
'
' Postconditions:
' 1. MacroFeature1 appears in the FeatureManager design tree.
' 2. The macro feature:
' * Consumes the part's solid bodies, Fillet5 and Fillet6.
' * Creates two solid bodies, MacroFeature1[1] and
MacroFeature1[2].
'
' NOTE: Because
the model is used elsewhere, do not save changes to it.
'----------------------------------------------------------------------------
'main module
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Option Explicit
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swPart = swModel
Dim strMacroMethods(8) As String
'Rebuild function
strMacroMethods(0) = swApp.GetCurrentMacroPathName
strMacroMethods(1) = "mMacroFeature"
strMacroMethods(2) = "swmRebuild"
'Edit definition function
strMacroMethods(3) = swApp.GetCurrentMacroPathName
strMacroMethods(4) = "mMacroFeature"
strMacroMethods(5) = "swmEditDefinition"
'Security function
strMacroMethods(6) = swApp.GetCurrentMacroPathName
strMacroMethods(7) = "mMacroFeature"
strMacroMethods(8) = "swmSecurity"
'Collect input bodies
Dim vBodies As Variant
vBodies = swPart.GetBodies2(swAllBodies, False)
'Create the macro feature
swModel.FeatureManager.InsertMacroFeature3 "MacroFeature",
"", strMacroMethods, _
Nothing, Nothing, Nothing, Nothing,
Nothing, vBodies, Nothing,
swMacroFeatureByDefault
End Sub
Go to top
'macro feature
Function swmRebuild(app As Variant, model As Variant, feat As
Variant) As Variant
Dim OutputBodies As New Collection
Dim swBody As SldWorks.Body2
Dim swBodies() As SldWorks.Body2
Dim swMacroFeatData As SldWorks.MacroFeatureData
Set swMacroFeatData = feat.GetDefinition
swMacroFeatData.EnableMultiBodyConsume = True
Dim swModeler As SldWorks.Modeler
Set swModeler = app.GetModeler
Dim dblData(8) As Double
dblData(0) = 0: dblData(1) = 0: dblData(2) = 0
dblData(3) = 1: dblData(4) = 0: dblData(5) = 0
dblData(6) = 0.1: dblData(7) = 0.1: dblData(8) = 0.1
'Output body 1
Set swBody = swModeler.CreateBodyFromBox3(dblData)
OutputBodies.Add swBody
'Output body 2
dblData(1) = 0.15
Set swBody = swModeler.CreateBodyFromBox3(dblData)
OutputBodies.Add swBody
Dim i As Integer, j As Integer
Dim vFaces As Variant
Dim vEdges As Variant
ReDim swBodies(OutputBodies.Count - 1)
For i = 1 To OutputBodies.Count
Set swBody = OutputBodies.Item(i)
vEdges = swBody.GetEdges
vFaces = swBody.GetFaces
For j = 0 To
UBound(vEdges)
swMacroFeatData.SetEdgeUserId vEdges(j), j, 0
Next j
For j = 0 To UBound(vFaces)
swMacroFeatData.SetFaceUserId vFaces(j), j, 0
Next j
Set swBodies(i -
1) = OutputBodies.Item(i)
Next i
swmRebuild = swBodies
End Function
Function swmEditDefinition(app As Variant, model As Variant,
feat As Variant) As Variant
End Function
Function swmSecurity(app As Variant, model As Variant, feat
As Variant) As Variant
End Function
Go to top