9 Replies Latest reply on Jan 7, 2018 8:16 PM by Rob Edwards

    re: GetAll2 Method (ICustomPropertyManager)

    Rob Edwards

      It's my first time with the CustomPropertyManager and I'm just wondering is this right?

       

      I am inserting an envelope in an assembly and then making it virtual before I go in and change the custom properties.

      My complete code is below, but here's the relevant bit

       

      Debug.Print "Custom Properties"
      
          Set swCustPropMgr = swModel.Extension.CustomPropertyManager("Default")
          
          Dim Names As Variant
          Dim Types As Variant
          Dim Values As Variant
          Dim ResolvedValues As Variant
          Dim i As Integer
          
          With swCustPropMgr
              
              ls = .GetAll2(Names, Types, Values, ResolvedValues)
              Debug.Print "GetAll2 Status > Returned:"; ls
            
              Debug.Print " #", "Type", "ResolvedValue", "Value", "Name"
              Debug.Print String$(80, "-")
              For i = 0 To ls - 1
                  Debug.Print i + 1, Types(i), ResolvedValues(i), Values(i), Names(i)
              Next
          End With
      

       

      Why are all my resolved values = 2 ?

       

      from the help file

      Dim instance As ICustomPropertyManager

      Dim PropNames As System.Object

      Dim PropTypes As System.Object

      Dim PropValues As System.Object

      Dim Resolved As System.Object

      Dim value As System.Integer

       

      value = instance.GetAll2(PropNames, PropTypes, PropValues, Resolved)

      As a brief aside I wasn't certain how to go about doing this and tried various methods.

       

      I found that ActivateDoc3 reported an error if the file wasn't saved.  I didn't find this in the documenation.

      2016 SOLIDWORKS API Help - swActivateDocError_e Enumeration

      ActivateDoc3 Status > Errors: 8

      Anyway error or not, it still worked just the same, here's my code

      Thanks for looking

       

      Option Explicit
      
      Dim swApp As SldWorks.SldWorks
      Dim swModel As SldWorks.ModelDoc2
      Dim swPart As SldWorks.PartDoc
      Dim swAssem As SldWorks.AssemblyDoc
      Dim EnvelopeComponent As SldWorks.Component2
      Dim swDimension As SldWorks.Dimension
      Dim swCustPropMgr As SldWorks.CustomPropertyManager
      
      Dim ls As Long, lw As Long
      Dim bs As Boolean
      
      Sub main()
      
           Set swApp = Application.SldWorks
          With swApp
          
              Set swModel = .NewDocument(DefaultAssTemplate, 0, 0, 0)
              
              bs = .RunCommand(swCommands_Save, "")
              
              Set EnvelopeComponent = swModel.InsertEnvelope(EnvelopeName, "", 0, 0, 0)
              
              swModel.ViewZoomtofit2
              
              bs = EnvelopeComponent.MakeVirtual2(False)
              
              bs = swModel.Save3(swSaveAsOptions_e.swSaveAsOptions_SaveReferenced _
                               , errors:=ls, warnings:=lw)
              Debug.Print _
                         ".Save3 Status > error:"; ls, "warning:"; lw
                         
              Set swModel = .ActivateDoc3(EnvelopeComponent.GetPathName _
                                        , UseUserPreferences:=False _
                                        , Option:=swRebuildOnActivation_e.swRebuildActiveDoc _
                                        , errors:=ls)
              Debug.Print _
                            "ActivateDoc3 Status > Errors:"; ls
          
          End With
          
      Debug.Print "Custom Properties"
      
          Set swCustPropMgr = swModel.Extension.CustomPropertyManager("Default")
          
          Dim Names As Variant
          Dim Types As Variant
          Dim Values As Variant
          Dim ResolvedValues As Variant
          Dim i As Integer
          
          With swCustPropMgr
              
              ls = .GetAll2(Names, Types, Values, ResolvedValues)
              Debug.Print "GetAll2 Status > Returned:"; ls
            
              Debug.Print " #", "Type", "ResolvedValue", "Value", "Name"
              Debug.Print String$(80, "-")
              For i = 0 To ls - 1
                  Debug.Print i + 1, Types(i), ResolvedValues(i), Values(i), Names(i)
              Next
          End With
      
      End Sub
      
      Private Function EnvelopeName() As String
          EnvelopeName = swApp.GetCurrentMacroPathFolder & "\" & "Default Table Top.SLDPRT"
      End Function
      
      Private Function DefaultAssTemplate() As String
          DefaultAssTemplate = swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swDefaultTemplateAssembly)
      End Function