Solidworks Makro - Ausschluss in der Auswahl

Hallo

Ich habe eine Funktion in einem Makro, die Teile basierend auf dem Besitz auswählt, um diese Teile als nächstes in einen Ordner zu verschieben.

Das Problem besteht darin, dass es auch die Teile unterhalb der Einschränkungen Nr. 1 auf dem angehängten Bild auswählt, deren symmetrische oder sich wiederholende Teile und insbesondere derjenige, der Probleme verursacht, die Teile in einer Bandfunktion sind, siehe Nr. 2. (siehe warum am Ende des Themas)

Ist es möglich, bei der Auswahl nicht alles unterhalb der Randbedingungen auszuwählen oder zumindest nicht auszuwählen, was in einer Randbedingungsfunktion enthalten ist?

Im Anhang ist mein Code:

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long, catSelect As String)
    Dim vChilds As Variant, vChild As Variant
    Dim swChildComp As SldWorks.Component2
    Dim MyString As String
    Dim swCustPropMgr As SldWorks.CustomPropertyManager
    Set swApp = Application.SldWorks

    
    vChilds = swComp.GetChildren
    For Each vChild In vChilds
        Set swChildComp = vChild
        Dim FileName As String
        FileName = swChildComp.GetPathName
        Debug.Print "Part Name    : " & FileName
        FileName = Left(FileName, InStr(FileName, ".") - 1)
        FileName = Right(FileName, Len(FileName) - InStrRev(FileName, "\"))
        Debug.Print "Part Name    : " & FileName
        MyString = FileName
        Dim ActiveConfig As String
        ActiveConfig = swChildComp.ReferencedConfiguration
        Debug.Print "Configuration: " & ActiveConfig
        FileName = swChildComp.GetPathName
        If swChildComp.GetSuppression() <> swComponentSuppressionState_e.swComponentSuppressed Then
            Dim swPart As SldWorks.modelDoc2
            Set swPart = swChildComp.GetModelDoc2()
            'Récupère la catégorie de la configuration active
            Set swCustPropMgr = swPart.Extension.CustomPropertyManager(ActiveConfig) 'get properties
            categorie = swCustPropMgr.Get("Categorie") 'get categorie
            designation = swCustPropMgr.Get("Designation")
            'Si la catégorie de la config active est vide on récupère celle du document
            If categorie = "" Then
                Set swCustPropMgr = swPart.Extension.CustomPropertyManager("") 'get properties
                categorie = swCustPropMgr.Get("Categorie") 'get categorie
                If designation = "" Then
                    designation = swCustPropMgr.Get("Designation") 'get categorie
                End If
            End If
            
            Debug.Print "Catégorie: " & categorie
            
            If catSelect = "FI" Then
                folderName = "FI"
                If (categorie = "Fourniture Industrielle" And Not (designation Like "STD*")) Or (categorie = "Tuyauterie") Or ((categorie = "Sans Catégorie") And (MyString Like "Bipod*")) Or ((categorie = "Sans Catégorie") And (MyString Like "Tripod*")) Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
             ElseIf catSelect = "Visserie" Then
                folderName = "Visserie"
                Debug.Print "Type:" & swPart.GetType
                If (categorie = "Visserie") Or ((categorie = "Sans Catégorie") And (swPart.GetType = 2) And (Not MyString Like "Bipod*") And (Not MyString Like "Tripod*")) Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
             ElseIf catSelect = "Reconductible" Then
                folderName = "Reconductible"
                'If categorie = "Reconductible" Then
                If (categorie = "Reconductible") And (Not designation Like "STD*") Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
             ElseIf catSelect = "Electricite" Then
                folderName = "Electricité"
                If categorie = "Electricite" Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
            
              ElseIf catSelect = "STD" Then
                folderName = "STD"
                If designation Like "STD*" Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
                
            End If
            
        End If
        Debug.Print
    Next

End Sub

 

 

 

In der Tat gibt es in Solidworks einen Fehler: Wenn Sie das Teil auswählen, das in einer Riemenfunktion enthalten ist, auf die Sie mit der rechten Maustaste klicken, zum neuen Ordner hinzufügen, befindet sich das Teil dieser Funktion sowohl über als auch unter den Einschränkungen (visuell - siehe angehängte Datei)

Bei Bedarf hänge ich auch das vollständige Makro an.

 


CreateFolderByProperties.swp
dbggtzkwq9.gif