Good morning,
I'm working on a SW2012 VBA macro for inserting machine marks on prints automatically. In our current workflow, the designers color machined surfaces white in the Parts. I modified our face colorizing macro so that an attribute is added to the Face. When the active document is a drawing, the macro traverses all views, deduces which visible edges are bounding a face that has been marked for machining, and excludes faces that aren't perpendicular to the view's "camera axis", and inserts the appropriate nabla symbol.
Thus far, it works fine for simple planar faces but curved faces are causing trouble.
I believe I've narrowed it down to the following call.
vVisibleEntities = swView.GetVisibleEntities(vVisibleComponents(0), swViewEntityType_e.swViewEntityType_SilhouetteEdge)
When the macro executes, I observe the silhouette edges being selected in rapid succession and then it crashes.
There are no explicit calls to select any silhouette edges in this macro. When the above line is commented out, the macro performs as usual but does not consider the silhouette edges of that cylindrical surface depicted above.
Has anyone encountered this before with silhouette edges on drawings? This is an annoying thing to troubleshoot as my VBA editor has to close every time I get it wrong.
For context, the following function is where the troublesome call is made.
Private Function getVisibleSilhouetteEdge(swFace As SldWorks.Face2, swView As SldWorks.View) As SldWorks.SilhouetteEdge
Dim newFace As SldWorks.Face2
Dim swVisibleEntity As SldWorks.Entity
Dim swVisibleSilhouetteEdge As SldWorks.SilhouetteEdge
Dim vVisibleEntities As Variant
Dim vVisibleEntity As Variant
Dim vVisibleComponents As Variant
Dim oldID As Integer
Dim newID As Integer
vVisibleComponents = swView.GetVisibleComponents()
If Not (vVisibleComponents(0) Is Nothing) Then
vVisibleEntities = swView.GetVisibleEntities(vVisibleComponents(0), swViewEntityType_e.swViewEntityType_SilhouetteEdge)
If IsArrayAllocated(vVisibleEntities) Then
For Each vVisibleEntity In vVisibleEntities
Set swVisibleEntity = vVisibleEntity
Set newFace = swVisibleSilhouetteEdge.GetFace
If swFace Is newFace Then
Set getVisibleSilhouetteEdge = swVisibleSilhouetteEdge
Exit For
End If
Next vVisibleEntity
End If
End If
End Function