Find and select specific edge in the drawing view using SOLIDWORKS API
This VBA macro demonstrates how to find the specific named edge from the underlying 3D document and select it in the drawing view.
This technique can be used when developing drawing automation macros and applications.
Note in your macro you might not use named entities, instead some different logic can be applied (e.g. finding by coordinates, color, attributes etc.). However the process of conversion the pointer to drawing view space will be the same.
This macro will work with the drawing view of the assembly where named edge is contained in the top level component as shown below:
Refer Get Component By Name example for the code to get component on any level if needed.
Name of the edge needs to be assigned from the corresponding part document.
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swDraw As SldWorks.DrawingDoc
Set swDraw = swApp.ActiveDoc
Dim swView As SldWorks.view
Set swView = swDraw.FeatureByName("Drawing View1").GetSpecificFeature()
Dim swEdge As SldWorks.edge
Set swEdge = FindEdge(swDraw, swView, "Part1-1", "MyEdge")
Debug.Print swView.SelectEntity(swEdge, False)
End Sub
Function FindEdge(draw As SldWorks.DrawingDoc, view As SldWorks.view, compName As String, edgeName As String) As SldWorks.edge
Dim swAssy As SldWorks.AssemblyDoc
Set swAssy = view.ReferencedDocument
Dim swComp As SldWorks.Component2
Set swComp = swAssy.GetComponentByName(compName)
Dim swRefPart As SldWorks.PartDoc
Set swRefPart = swComp.GetModelDoc2
Dim swEdge As SldWorks.edge
Set swEdge = swRefPart.GetEntityByName(edgeName, swSelectType_e.swSelEDGES)
Set swEdge = swComp.GetCorresponding(swEdge)
Set FindEdge = swEdge
End Function