Hide Table of Contents

Get Annotations Arrays Example (VBA)

Methods added to the IView interface in SOLIDWORKS API 2009 SP1 can return arrays of each annotation type in a drawing view. This example shows how to call these methods.

'-----------------------------------------------------------------------------
' Preconditions: Verify that the specified path and template file exist.
'
' Postconditions:
' 1. Creates a part with annotations.
' 2. Click Save.
' 3. Creates a drawing with third-angle views of the part
'    and annotations.
' 4. Iterates through each annotation array and pops up message boxes
'    containing information about each annotation in the drawing views.
' 5. Click OK to close each message box.
'---------------------------------------------------------------------------
Option Explicit
Const filedir As String = "C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2016\templates\"
Const TemplateName As String = "C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2016\templates\Drawing.drwdot"
Const TemplateSize As Long = swDwgTemplateBsize
Const PaperSize As Long = swDwgPaperBsize
Const ScaleNum As Double = 1#
Const ScaleDenom As Double = 2#
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim Response As Integer
Dim ThirdAngle As Boolean
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet
Dim i As Long
Dim j As Long
Dim retval As Boolean
Dim swView As SldWorks.View
Dim count As Long
Dim Annotations As Variant
Dim msg As String
Sub main()
    'Create a part
    Build_Part
    
        'Create a drawing of the part
        Set swApp = Application.SldWorks
        Set swModel = swApp.ActiveDoc
        Set swDraw = swApp.NewDocument(TemplateName, PaperSize, 0#, 0#)    
        ThirdAngle = False
        swDraw.ActivateSheet "Sheet1"
        Set swSheet = swDraw.GetCurrentSheet
        swSheet.SetSize PaperSize, 0#, 0#
        swSheet.SetScale ScaleNum, ScaleDenom, True, True
    
        ' Create third-angle drawing views
        ' Pop up Save As dialog
        ' Click Save in the dialog
        retval = swDraw.Create3rdAngleViews2(swModel.GetPathName)    
        Dim LocX As Double
        Dim LocY As Double
        LocX = 0.2635088599471
        LocY = 0.1934578136726    
        ' Create isometric drawing view
        swDraw.CreateDrawViewFromModelView3 swModel.GetPathName, "*Isometric", LocX, LocY, 0
        swDraw.ViewDisplayShaded    
        ' Insert display dimension annotations
        ' from the current model
        swDraw.InsertModelAnnotations3 0, swInsertDimensionsMarkedForDrawing, True, True, False, True        
         ' Insert datum target symbol annotations
         ' from the current model
        swDraw.InsertModelAnnotations3 0, swInsertDatumTargets, True, True, False, True    
        ' Insert geometric tolerance annotations
        ' from the current model
        swDraw.InsertModelAnnotations3 0, swInsertGTols, True, True, False, True    
        ' Insert surface finish symbol annotations
        ' from the current model
        swDraw.InsertModelAnnotations3 0, swInsertSFSymbols, True, True, False, True    
        ' Insert datum tag annotations from the current model
        swDraw.InsertModelAnnotations3 0, swInsertDatums, True, True, False, True    
        swDraw.ForceRebuild3 True    
        ' Iterate through all the views on the
        ' drawing to find display dimensions
        Set swView = swDraw.GetFirstView
        Do While Not swView Is Nothing
            count = swView.GetDisplayDimensionCount
            Dim DisplayDimension As SldWorks.DisplayDimension
            Dim swDim As SldWorks.Dimension
            ' Iterate through all the display dimension
            ' annotations in each drawing view that has them
            If count > 0 Then
                Annotations = swView.GetDisplayDimensions
                For j = 0 To UBound(Annotations)
                    Set DisplayDimension = Annotations(j)
                    Set swDim = DisplayDimension.GetDimension
                    ' For each annotation in each drawing view,
                    ' pop up a message box with the
                    ' annotation name and corresponding dimension
                    msg = "Display dimension found: " & swView.GetName2 & ":" & DisplayDimension.GetAnnotation.GetName & " = " & swDim.GetSystemValue2("") & " meters"
                    swApp.SendMsgToUser2 msg, swMbInformation, swMbOk
                Next j
            End If
            Set swView = swView.GetNextView
        Loop    
        ' Iterate through all the views on the drawing
        ' to find datum target symbols
        Set swView = swDraw.GetFirstView
        Do While Not swView Is Nothing
            count = swView.GetDatumTargetSymCount
            Dim dtsymbol As SldWorks.DatumTargetSym
            ' Iterate through all the datum target symbol
            ' annotations in each drawing view that has them
            If count > 0 Then
                Annotations = swView.GetDatumTargetSyms
                For j = 0 To UBound(Annotations)
                    Set dtsymbol = Annotations(j)
                    ' For each annotation in each drawing view,
                    ' pop up a message box with the
                    ' annotation name and name of each
                    ' datum target symbol found
                    msg = "Datum target symbol found: " & swView.GetName2 & ":" & dtsymbol.GetAnnotation.GetName
                    swApp.SendMsgToUser2 msg, swMbInformation, swMbOk
                Next j
            End If
            Set swView = swView.GetNextView
        Loop    
        ' Iterate through all the views on the drawing
        ' to find surface finish symbols
        Set swView = swDraw.GetFirstView
        Do While Not swView Is Nothing
            count = swView.GetSFSymbolCount
            Dim sfsymbol As SldWorks.sfsymbol
            ' Iterate through all the surface
            ' finish symbol annotations in each
            ' drawing view that has them
            If count > 0 Then
                Annotations = swView.GetSFSymbols
                For j = 0 To UBound(Annotations)
                    Set sfsymbol = Annotations(j)
                    ' For each annotation in each drawing
                    ' view, pop up a message box with the
                    ' annotation name and name of each
                    ' surface finish symbol found
                    msg = "Surface finish symbol found: " & swView.GetName2 & ":" & sfsymbol.GetAnnotation.GetName
                    swApp.SendMsgToUser2 msg, swMbInformation, swMbOk
                Next j
            End If
            Set swView = swView.GetNextView
        Loop    
        ' Iterate through all the views on the
        ' drawing to find datum tags
        Set swView = swDraw.GetFirstView
        Do While Not swView Is Nothing
            count = swView.GetDatumTagCount
            Dim dTag As SldWorks.DatumTag
            ' Iterate through all the datum tags
            ' in each drawing view that has them
            If count > 0 Then
                Annotations = swView.GetDatumTags
                For j = 0 To UBound(Annotations)
                    Set dTag = Annotations(j)
                    ' For each annotation in each drawing view,
                    ' pop up a message box with the
                    ' annotation name and name
                    ' of each datum tag found
                    msg = "Datum tag found: " & swView.GetName2 & ":" & dTag.GetAnnotation.GetName
                    swApp.SendMsgToUser2 msg, swMbInformation, swMbOk
                Next j
            End If
            Set swView = swView.GetNextView
        Loop    
        ' Iterate through all the views on the
        ' drawing to find geometric tolerances
        Set swView = swDraw.GetFirstView
        Do While Not swView Is Nothing
            count = swView.GetGTolCount
            Dim gtol As SldWorks.gtol
            ' Iterate through all the geometric
            ' tolerance symbols in each drawing view
            ' that has them
            If count > 0 Then
                Annotations = swView.GetGTols
                For j = 0 To UBound(Annotations)
                    Set gtol = Annotations(j)
                    ' For each annotation in each drawing
                    ' view, pop up a message box with the
                    ' annotation name and name of each
                    ' geometric tolerance found
                    msg = "Geometric tolerance symbol found: " & swView.GetName2 & ":" & gtol.GetAnnotation.GetName
                    swApp.SendMsgToUser2 msg, swMbInformation, swMbOk
                Next j
            End If
            Set swView = swView.GetNextView
        Loop    
        ' In a similar fashion:
        ' Get other annotations on the drawing, if they exist
        ' Iterate through all the views on the drawing
        ' Get the annotation count, and if greater than zero,
        ' get the annotation array
        ' Iterate on each array, and set an annotation object
        ' to each array member
        ' Annotations = swView.GetDowelSymbols
        ' Annotations = swView.GetMultiJogLeaders
        ' Annotations = swView.GetDatumOrigins
        ' Annotations = swView.GetCenterLines
        ' Annotations = swView.GetCThreads
        ' Annotations = swView.GetWeldSymbols
        ' Annotations = swView.GetWeldBeads
        ' Annotations = swView.GetTableAnnotations        
        swApp.SetUserPreferenceToggle swInputDimValOnCreate, True
        swModel.SetUserPreferenceToggle swDisplayAnnotations, False    
    End Sub    
    Private Sub Build_Part()
    ' Build a part with these annotations:
    ' display dimensions, geometric tolerance
    ' symbol, surface finish symbol,
    ' datum tag symbol, and datum target symbol
        Set swApp = Application.SldWorks
        Set swModel = swApp.NewDocument(filedir + "Part.prtdot", 0, 0#, 0#)
        swModel.SetUserPreferenceIntegerValue swUnitsLinear, swMETER
        swModel.SetUserPreferenceDoubleValue swMaterialPropertyDensity, 7800
        swModel.SetUserPreferenceStringValue swMaterialPropertyCrosshatchPattern, "ISO (Steel)"
        swModel.SketchManager.InsertSketch False

        Dim Height As Double
        Dim Width As Double
        Height = 0.05
        Width = 0.05        
        swApp.SetUserPreferenceToggle swInputDimValOnCreate, False
        swModel.SketchManager.CreateLine 0.01, 0.01, 0, 0.01, 0.01 + Height, 0

        swModel.ViewZoomtofit2    
        ' Add display dimension to line
        swModel.AddDimension2 0, 0.01 + Height / 2, 0    
        ' Add geometric tolerance to line
        swModel.InsertGtol
        swModel.SketchManager.CreateLine 0.01, 0.01, 0, 0.01 + Width, 0.01, 0

        swModel.ViewZoomtofit2    
        ' Add display dimension
        swModel.AddDimension2 0.01 + Width / 2, 0, 0    
        ' Add surface finish symbol to line
        swModel.Extension.InsertSurfaceFinishSymbol3 swSFBasic, swSTRAIGHT, 0.01, 0.01, 0.01, swSFCircular, swDOT_ARROWHEAD, "", "", "", "", "", "", ""    
        swModel.SketchManager.CreateLine(0, 0, 0, 0, 0.01, 0).ConstructionGeometry = True    
        swModel.ClearSelection2 True
        swModel.ViewZoomtofit2        
        Dim Thick As Double
        Thick = 0.05    
        Dim Depth As Double
        Depth = 0.05
        Set swFeatMgr = swModel.FeatureManager
        swFeatMgr.FeatureExtrusionThin2 True, False, True, 0, 0, Depth, 0, False, False, False, False, 0, 0, False, False, False, False, False, Thick, 0, 0, 0, 0, False, False, False, False, swStartSketchPlane, 0#, False        
        swModel.ViewZoomtofit2
        swModel.SetUserPreferenceToggle swDisplayAnnotations, True
        swModel.ShowNamedView2 "Isometric", 7
        swModel.ViewZoomtofit2    
        ' Add datum tag to line
        retval = swModel.Extension.SelectByID2("", "EDGE", 0.06001738353251, -0.01284975502705, -0.05001738353241, False, 0, Nothing, 0)
        Dim dTag As SldWorks.DatumTag
        Set dTag = swModel.InsertDatumTag2    
       ' Add datum target symbol to line
        retval = swModel.Extension.SelectByID2("", "EDGE", 0.06001738353251, -0.01284975502705, -0.05001738353241, False, 0, Nothing, 0)
        Dim myDatumTarget As Object
        Set myDatumTarget = swModel.Extension.InsertDatumTargetSymbol2("", "", "", 0, False, 0.03, 0.03, "", "", True, 12, 0, False, True, True)       
End Sub


Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Get Annotations Arrays Example (VBA)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:



x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2016 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.