Pobieranie danych z funkcji solidworks w celu wyświetlenia ich w makrze

Witam, stworzyłem makro, które pozwala na konfigurację mojej części (wymiary, obróbka z wypłyśnięciem czy usuwaniem materiału itp.). Po utworzeniu części chciałbym, aby po ponownym uruchomieniu makra na tej części, wartości wyświetlane w formularzu użytkownika były tymi, które umieściłem w pokoju, aby mieć szybki podgląd mojej otwartej części. W przeciwnym razie wyświetlane są wartości domyślne. Powinieneś więc uzyskać informacje z części i odesłać je z powrotem do odpowiednich pól w moim formularzu użytkownika.  

Udało mi się pobrać wymiary szkicu i zwrócić je za pomocą:    txt_Z.Text = Part.Parameter("D1@F"). SystemValue .  ale nie mogę uzyskać wartości PRAWDA lub FAŁSZ funkcji (mat. usuwanie, bossowanie, wiercenie),  aby stwierdzić, czy jest ona włączona, czy usunięta w mojej części.

Jeśli masz rozwiązanie, jestem zainteresowany :) 

Witam

Musisz spojrzeć na swFeat.IsSuppressed2.

3 polubienia
Option Explicit

Sub main()

    Dim swApp                   As SldWorks.SldWorks
    Dim swModel                 As SldWorks.ModelDoc2
    Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swFeat                  As SldWorks.Feature
    Dim vConfNameArr            As Variant
    Dim vSuppStateArr           As Variant
    Dim i                       As Long
    Dim bRet                    As Boolean

   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swFeat = swSelMgr.GetSelectedObject6(1, -1)
    
    vConfNameArr = swModel.GetConfigurationNames
    vSuppStateArr = swFeat.IsSuppressed2(swThisConfiguration, vConfNameArr)
    Debug.Assert 0 = UBound(vSuppStateArr)
    
    Debug.Print "File = " & swModel.GetPathName
    Debug.Print "  " & swFeat.Name

        Debug.Print "    " & vConfNameArr(i) & " ---> " & vSuppStateArr(i)

End Sub

Witaj Cyryl, to jest to, czego potrzebuję, udało mi się uzyskać wartość PRAWDA lub FAŁSZ za pomocą tego kodu.

Ale problem polega na tym, że muszę wybrać funkcję przed uruchomieniem makra. Jak sprawić, aby po uruchomieniu makra pobierało wszystkie funkcje, które bym mu dał (w moim kodzie), aby powiedziało mi, czy jest prawdziwe, czy fałszywe? bez konieczności wybierania funkcji?

(Zaznaczam, że jestem początkującym w VBA, to wszystko, co czuję, jakbym dopiero zaczynał robić makra na sw)  

Witam

Musisz wymienić wszystkie elementy "Funkcji" i pracować tylko nad tymi funkcjami, które chcesz, spójrz na podany tutaj przykład.

Pozdrowienia

2 polubienia
Private Sub ActualiserInfosPiece()

    actualisationInfoPiece = True

    Dim swFeature As SldWorks.Feature
    Dim swModelDocExt As SldWorks.ModelDocExtension

    Dim featureName As String
    Dim status As Boolean
    Dim vSuppStateArr As Variant
    Dim vConfNameArr As Variant

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    Set Part = swModel
    

    If swModel Is Nothing Then
        Exit Sub
    End If
    

    If (swModel.GetType <> swDocPART) Then
        Call MsgBox("Macro valable uniquement pour une pièce", vbOKOnly, "AVERTISSEMENT")

        Exit Sub
    End If
    

    
    vConfNameArr = swModel.GetConfigurationNames
    

    Set swFeature = Part.FirstFeature
    Do While Not swFeature Is Nothing
    

        featureName = swFeature.name
        status = swModelDocExt.SelectByID2(featureName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
        vSuppStateArr = swFeature.IsSuppressed2(swThisConfiguration, vConfNameArr)
        Select Case featureName
        
            Case "FONCTION SW 1"
                 TglB_N1.value = Not vSuppStateArr(0)
                 
            Case "FONCTION SW 2"
                 TglB_N2.value = Not vSuppStateArr(0)
                 
            Case "FONCTION SW 3"
                TglB_N3.value = Not vSuppStateArr(0)
                
            Case "FONCTION SW 4"
                 TglB_N4.value = Not vSuppStateArr(0)
            
            Case "FONCTION SW 5"
                TglB_N5.value = Not vSuppStateArr(0)
            
            Case FONCTION SW 6"
                TglB_N6.value = Not vSuppStateArr(0)
         
        End Select
        
        Set swFeature = swFeature.GetNextFeature() 
    Loop 


        ComboBox_HAUT.Text = Part.Parameter("D3@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_BAS.Text = Part.Parameter("D4@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_GAUCHE.Text = Part.Parameter("D2@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_DROIT.Text = Part.Parameter("D1@Esquisse FONCTION SW").SystemValue * 1000

        txt_X.Text = Part.Parameter("D3@Esquisse Débit").SystemValue * 1000
        txt_Y.Text = Part.Parameter("D4@Esquisse Débit").SystemValue * 1000
        txt_Z.Text = Part.Parameter("D1@F").SystemValue * 1000

    actualisationInfoPiece = False

End Sub

 

Problem rozwiązany, dziękuję za odpowiedź .