Gegevens ophalen uit een solidworks-functie om deze op een macro weer te geven

Hallo, ik heb een macro gemaakt waarmee u mijn onderdeel kunt configureren (afmetingen, machinale bewerking met nokken of materiaalverwijdering, enz.). Zodra het onderdeel is gemaakt, zou ik graag willen dat wanneer ik de macro op dit onderdeel opnieuw start, de waarden die op het gebruikersformulier worden weergegeven, de waarden zijn die ik in de kamer heb geplaatst om snel een voorbeeld van mijn geopende deel te hebben. Anders worden de standaardwaarden weergegeven. Dus je moet de informatie van het onderdeel halen en terugsturen naar de juiste vakken in mijn gebruikersformulier.  

Het is me gelukt om de afmetingen van een schets op te halen en ze terug te sturen met behulp van dit:    txt_Z.Text = Part.Parameter("D1@F"). SystemValue .  maar ik kan de WARE of ONWARE waarde van een functie (mat. verwijdering, bazing, boren)  niet krijgen om te bepalen of deze in mijn deel is ingeschakeld of verwijderd.

Als je een oplossing hebt, ben ik geïnteresseerd :) 

Hallo

Je moet kijken naar swFeat.IsSuppressed2.

3 likes
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

Hallo Cyril, dit is wat ik nodig heb, het is me gelukt om de waarde WAAR of ONWAAR te krijgen met deze code.

Maar het probleem is dat ik de functie moet selecteren voordat ik de macro start. Hoe zorg ik ervoor dat wanneer ik de macro start, deze alle functies neemt die ik hem zou hebben gegeven (in mijn code), zodat hij me vertelt of het waar of onwaar is? zonder dat je de functies hoeft te selecteren?

(Ik geef aan dat ik een beginner in VBA, het is alles wat ik het gevoel heb dat ik net begin met macro's te doen op sw)  

Hallo

Je moet alle elementen van de "Feature" opsommen en alleen werken aan de functies die je wilt, kijk naar het voorbeeld dat hier wordt gegeven.

Vriendelijke groeten

2 likes
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

 

Probleem opgelost, bedankt voor je antwoord .