7 Replies Latest reply on Nov 13, 2008 2:12 PM by Luke Malpass

    Layer Macro

    Tony Hayes
      Good Morning All,

      I found this sample in the API help. I would like to use this macro but I cannot get it to work. Could someone please lead me in the right direction for it to work.

      Option Explicit



      Public Enum swLineStyles_e

      swLineCONTINUOUS = 0

      swLineHIDDEN = 1

      swLinePHANTOM = 2

      swLineCHAIN = 3

      swLineCENTER = 4

      swLineSTITCH = 5

      swLineCHAINTHICK = 6

      End Enum



      Public Enum swLineWeights_e

      swLW_NONE = -1

      swLW_THIN = 0

      swLW_NORMAL = 1

      swLW_THICK = 2

      swLW_THICK2 = 3

      swLW_THICK3 = 4

      swLW_THICK4 = 5

      swLW_THICK5 = 6

      swLW_THICK6 = 7

      swLW_NUMBER = 8

      swLW_LAYER = 9

      End Enum



      Private Sub ChangeComponentLayer _

      ( _

      swApp As SldWorks.SldWorks, _

      swDraw As SldWorks.DrawingDoc, _

      swDrawComp As SldWorks.DrawingComponent, _

      sLayerName As String _

      )

      Dim bRet As Boolean



      ' Form a legal layer name by replacing backslash (/) and at sign (@) symbols

      ' with underscores

      sLayerName = Replace(sLayerName, "/", "_")

      sLayerName = Replace(sLayerName, "@", "_")



      bRet = swDraw.CreateLayer( _

      sLayerName, _

      "layer for " & sLayerName, _

      0, swLineCONTINUOUS, swLW_NORMAL, True): Debug.Assert bRet



      swDrawComp.Layer = sLayerName

      End Sub



      Sub ProcessDrawingComponent _

      ( _

      swApp As SldWorks.SldWorks, _

      swDraw As SldWorks.DrawingDoc, _

      swDrawComp As SldWorks.DrawingComponent, _

      sPadStr As String _

      )

      Dim vDrawCompChildArr As Variant

      Dim vDrawCompChild As Variant

      Dim swDrawCompChild As SldWorks.DrawingComponent



      Debug.Print sPadStr & swDrawComp.Name



      ChangeComponentLayer swApp, swDraw, swDrawComp, swDrawComp.Name



      vDrawCompChildArr = swDrawComp.GetChildren

      If Not IsEmpty(vDrawCompChildArr) Then

      For Each vDrawCompChild In vDrawCompChildArr

      Set swDrawCompChild = vDrawCompChild



      ProcessDrawingComponent swApp, swDraw, swDrawCompChild, sPadStr + " "

      Next

      End If

      End Sub



      Sub main()

      Dim swApp As SldWorks.SldWorks

      Dim swModel As SldWorks.ModelDoc2

      Dim swDraw As SldWorks.DrawingDoc

      Dim swSelMgr As SldWorks.SelectionMgr

      Dim swView As SldWorks.View

      Dim swDrawComp As SldWorks.DrawingComponent

      Dim bRet As Boolean

      Set swApp = Application.SldWorks

      Set swModel = swApp.ActiveDoc

      Set swDraw = swModel

      Set swSelMgr = swModel.SelectionManager

      Set swView = swSelMgr.GetSelectedObject5(1)

      Set swDrawComp = swView.RootDrawingComponent



      Debug.Print "File = " & swModel.GetPathName

      Debug.Print " " & swView.Name & " [" & swView.Type & "]"



      ProcessDrawingComponent swApp, swDraw, swDrawComp, " "

      End Sub

      '--------------------------------------------
        • Layer Macro
          Luke Malpass
          What exactly is the problem you are having?
            • Layer Macro
              Tony Hayes
              Thanks for the quick response.

              First I know very little about API but I am tring to learn it. I plan on buying your book in the next couple of weeks. How much is your book in US dollers from your website?

              I was thinking that I could copy that code from the help into the API, is that correct? After I copied it then I try to run I get this error.
                • Layer Macro
                  If you select the VIEW on your Drawing this program Work's.
                  Marc


                  Public Enum swLineStyles_e
                  swLineCONTINUOUS = 0
                  swLineHIDDEN = 1
                  swLinePHANTOM = 2
                  swLineCHAIN = 3
                  swLineCENTER = 4
                  swLineSTITCH = 5
                  swLineCHAINTHICK = 6
                  End Enum

                  Public Enum swLineWeights_e
                  swLW_NONE = -1
                  swLW_THIN = 0
                  swLW_NORMAL = 1
                  swLW_THICK = 2
                  swLW_THICK2 = 3
                  swLW_THICK3 = 4
                  swLW_THICK4 = 5
                  swLW_THICK5 = 6
                  swLW_THICK6 = 7
                  swLW_NUMBER = 8
                  swLW_LAYER = 9
                  End Enum

                  Private Sub ChangeComponentLayer(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sLayerName As String)
                  Dim bRet As Boolean
                  sLayerName = Replace(sLayerName, "/", "_")
                  sLayerName = Replace(sLayerName, "@", "_")
                  bRet = swDraw.CreateLayer(sLayerName, "layer for " & sLayerName, 0, swLineCONTINUOUS, swLW_NORMAL, True): Debug.Assert bRet
                  swDrawComp.Layer = sLayerName
                  End Sub
                  Sub ProcessDrawingComponent(swApp As SldWorks.SldWorks, swDraw As SldWorks.DrawingDoc, swDrawComp As SldWorks.DrawingComponent, sPadStr As String)
                  Dim vDrawCompChildArr As Variant
                  Dim vDrawCompChild As Variant
                  Dim swDrawCompChild As SldWorks.DrawingComponent
                  Debug.Print sPadStr & swDrawComp.Name
                  ChangeComponentLayer swApp, swDraw, swDrawComp, swDrawComp.Name
                  vDrawCompChildArr = swDrawComp.GetChildren
                  If Not IsEmpty(vDrawCompChildArr) Then
                  For Each vDrawCompChild In vDrawCompChildArr
                  Set swDrawCompChild = vDrawCompChild
                  ProcessDrawingComponent swApp, swDraw, swDrawCompChild, sPadStr + " "
                  Next
                  End If
                  End Sub

                  Sub main()
                  Dim swApp As SldWorks.SldWorks
                  Dim swModel As SldWorks.ModelDoc2
                  Dim swDraw As SldWorks.DrawingDoc
                  Dim swSelMgr As SldWorks.SelectionMgr
                  Dim swView As SldWorks.View
                  Dim swDrawComp As SldWorks.DrawingComponent
                  Dim bRet As Boolean
                  Set swApp = Application.SldWorks
                  Set swModel = swApp.ActiveDoc
                  Set swDraw = swModel
                  Set swSelMgr = swModel.SelectionManager
                  Set swView = swSelMgr.GetSelectedObject5(1)
                  Set swDrawComp = swView.RootDrawingComponent
                  Debug.Print "File = " & swModel.GetPathName
                  Debug.Print " " & swView.Name & " [" & swView.Type & "]"
                  ProcessDrawingComponent swApp, swDraw, swDrawComp, " "

                  End Sub