Zugriff auf die Einstellungen für Mehrkörperbleche mit VBA

Guten Morgen

Ich möchte auf die Blechbiegeparameter für ein Mehrkörperteil zugreifen, ich habe diesen Code, von dem ich dachte, dass er meine Probleme lösen könnte.
Aber wenn ich es starte, gibt es mir Werte, die überall identisch sind und nicht den richtigen Radius und die richtige Dicke haben.

Code:

Dim swApp As SldWorks.SldWorks
Dim myModel As SldWorks.ModelDoc2
Dim featureMgr As SldWorks.FeatureManager
Dim feat As SldWorks.Feature
Dim sheetMetalFolder As SldWorks.sheetMetalFolder
Dim featArray As Variant
Dim i As Long
Dim swBaseFlangeFeat As SldWorks.BaseFlangeFeatureData
Option Explicit

Sub main()

    Set swApp = Application.SldWorks
    Set myModel = swApp.ActiveDoc
    Set featureMgr = myModel.FeatureManager
   

    Set sheetMetalFolder = featureMgr.GetSheetMetalFolder
    Set feat = sheetMetalFolder.GetFeature
    Debug.Print "Sheet metal folder name: " & feat.Name
    Debug.Print "  Number of sheet metal features in the folder: " & sheetMetalFolder.GetSheetMetalCount
    featArray = sheetMetalFolder.GetSheetMetals
    For i = LBound(featArray) To UBound(featArray)
        Set feat = featArray(i)
        Debug.Print "    " & feat.Name
        Set swBaseFlangeFeat = myModel.FeatureManager.CreateDefinition(swFmBaseFlange)
        swBaseFlangeFeat.OverrideDefaultSheetMetalParameters = True
    'swBaseFlangeFeat.Thickness = 0.065
    'swBaseFlangeFeat.OverrideRadius = False
    
    'swBaseFlangeFeat.BendRadius = 1
    Debug.Print swBaseFlangeFeat.BendRadius
    Debug.Print swBaseFlangeFeat.Thickness
    Next i

End Sub

Hier ist eine meiner Blecheinstellungen:
Screenshot_54

Und hier ist das Ergebnis des obigen Codes:

Sheet metal folder name: Tôlerie
  Number of sheet metal features in the folder: 4
    Tôlerie3
 0.00015 
 0.0005 
    Tôlerie12
 0.00015 
 0.0005 
    Tôlerie14
 0.00015 
 0.0005 
    Tôlerie34
 0.00015 
 0.0005 

Können Sie mir sagen, warum ich nicht die richtigen Werte habe?
Ich verstehe nicht, warum ich immer 0,00015 habe, was 0,15mm entspricht
und 0,0005, was 0,5 mm entspricht.

Guten Abend @treza88

Der Fehler ergibt sich aus den Funktionen dieser beiden Zeilen:

Set swBaseFlangeFeat = myModel.FeatureManager.CreateDefinition(swFmBaseFlange)
        swBaseFlangeFeat.OverrideDefaultSheetMetalParameters = True

Bei der ersten wird eine Blechdatenstruktur mit den Standardeinstellungen erstellt.
Die zweite erfordert den Austausch der aktuellen Blechkarosseriestruktur in der Struktur.
Das erklärt, warum sie alle identisch sind...

Das angehängte Makro verwendet die Methode Set swSheetMetalData = swFeat.GetDefinition , um Daten aus dem Blechkörper abzurufen und anzuzeigen.

SettingsTolerie.swp (51.5 KB)

1 „Gefällt mir“

Vielen Dank @m.blt für den Code, er funktioniert perfekt.

Wenn ich es wagen würde, zu missbrauchen, könnten Sie mir sagen, wie ich diesen Code in einer Assembly verwenden und eine Schleife für alle Teile derselben Assembly verwenden könnte?

Guten Abend

Das folgende Makro sollte diese " missbräuchliche " Frage beantworten. :wink:
Es durchsucht den gesamten Baugruppenbaum, um die Teile zu finden, identifiziert für jedes Teil, ob es sich um ein Blechteil handelt, und zeigt in diesem Fall seine Eigenschaften an.
Die anderen Teile (Nichtbleche) werden ignoriert.

Das Makro erhebt auch den Anspruch, an einem Teiledokument zu arbeiten.

EinstellungenBlechAssemb.swp (64.5 KB)

Ein großes Dankeschön, es ist super nett von Ihnen, der Code funktioniert perfekt in einer Baugruppe und in einer Teiledatei. Ich möchte mich mit dem VBA Solidworks genauso wohl fühlen wie Sie.

Ich werde diesen Code analysieren und versuchen, ihn so zu ändern, dass er erkennen kann, ob in der Hauptassembly untergeordnete Assemblys vorhanden sind.

Ihr Code scheint klar genug für mich zu sein, um dorthin zu gelangen, und für den Fall, dass ich zum Forum zurückkomme.
Ich werde Ihre Antwort bestätigen und sie stornieren, wenn ich zurückkommen muss, um Fragen zu stellen

Im Prinzip reagiert das Makro bereits auf die tiefe Erkundung des Baugruppenbaums.
Sie durchläuft die erste Ebene der Hauptbaugruppe in der Prozedur " main ", aber auch Unterbaugruppen, unabhängig von ihrer Ebene, in der Prozedur " BrowseComponents ", die rekursiv arbeitet.

Die letzte  " SheetPart " -Funktion ist fast identisch mit der in meiner letzten Sendung, um die Blecheinstellungen des Teils anzuzeigen.

Vielen Dank @m.blt, ich habe es getestet und es funktioniert perfekt.

Auf der anderen Seite habe ich versucht, den Biegeradius zu ändern, indem ich Folgendes hinzugefügt habe:

swSheetMetalData.BendRadius = 2.06 / 1000

Aber es funktioniert nicht, wie ändere ich den Radiuswert?

Hallo

In der Funktion " SheetPart " meines Makros enthält die Variable " swSheetMetalData " vom Typ " SheetMetalFeatureData " die Parameter der Funktion Blech ("swFeat ") .
Die Methode " AccessSelections " dieser Klasse ermöglicht es Ihnen, auf die Parameter dieser Datenstruktur zuzugreifen und ihre Werte zu ändern.
Anschließend bewirkt die Methode " ModifyDefinition " des Blechmerkmals (" swFeat ") die Änderung.

Wenn Sie die SolidWorks API-Hilfe (unten auf Seite https://help.solidworks.com/) öffnen und nach der Klasse " ISheetMetalFeatureData " suchen, finden Sie das vorgeschlagene Beispiel " Biegeradius des Blechteils (VBA) ändern ", das Ihre Frage genau beantwortet.

Im Allgemeinen ist die Hilfe der APIs unverdaulich, aber sehr vollständig und bietet viele Beispiele, von denen man sich inspirieren lassen kann.
Guten Tag...

Tut mir leid, dass ich ungeschickt bin, aber ich habe den Code wie folgt geändert:

Ich habe hinzugefügt, was anscheinend den Zugriff auf " BendRadius " ermöglicht:

 bRet = swSheetMetalData.AccessSelections(swModel, Nothing): Debug.Assert bRet

Bezogen auf das Beispiel, aber es funktioniert immer noch nicht:
" swSheetMetalData " ist tatsächlich als Objekt von " swFeat.GetDefinition " definiert, wie im Beispiel?

Function SheetPart(swModel As ModelDoc2) As Boolean

    Dim swFeat              As Feature
    Dim vFeatArray          As Variant
    Dim sheetMetalFolder    As sheetMetalFolder
    Dim swSheetMetalData    As SheetMetalFeatureData
    Dim gaugeTableFile      As String
    Dim swCustBend          As CustomBendAllowance
    Dim i                   As Long
    Dim bRet                As Boolean
    Dim lRet                As Long
    

    Set sheetMetalFolder = swModel.FeatureManager.GetSheetMetalFolder
    If sheetMetalFolder Is Nothing Then
        Exit Function
    End If
    
    Set swFeat = sheetMetalFolder.GetFeature
    Debug.Print "-------------------------------------------------"
    Debug.Print "Composant : " & swModel.GetPathName
    Debug.Print "  Nom du dossier de tôlerie : " & swFeat.Name
    Debug.Print "  Nombre de fonctions de tôlerie dans le dossier : " & sheetMetalFolder.GetSheetMetalCount
    Debug.Print ""
    vFeatArray = sheetMetalFolder.GetSheetMetals
    For i = LBound(vFeatArray) To UBound(vFeatArray)
        Set swFeat = vFeatArray(i)
        Set swSheetMetalData = swFeat.GetDefinition
        Set swCustBend = swSheetMetalData.GetCustomBendAllowance
        nbTotal = nbTotal + 1
        bRet = swSheetMetalData.AccessSelections(swModel, Nothing): Debug.Assert bRet
        If swSheetMetalData.Thickness * 1000 = 1.5 And swSheetMetalData.BendRadius * 1000 <> 1.025 Then
            swSheetMetalData.BendRadius = 1.025 / 1000
            swCustBend.Type = 1
            nbModif = nbModif + 1
            Stop
        ElseIf swSheetMetalData.Thickness * 1000 = 2 And swSheetMetalData.BendRadius * 1000 <> 1.5 Then
            swSheetMetalData.BendRadius = 1.5 / 1000
            swCustBend.Type = 1
            nbModif = nbModif + 1
            Stop
        ElseIf (swSheetMetalData.Thickness = 0.003 And swSheetMetalData.BendRadius <> 0.00206) Then
            swSheetMetalData.BendRadius = 2.06 / 1000
            swCustBend.Type = 1
            nbModif = nbModif + 1
            Stop
        ElseIf swSheetMetalData.Thickness * 1000 = 4 And swSheetMetalData.BendRadius * 1000 <> 5.4 Then
            swSheetMetalData.BendRadius = 5.4 / 1000
            swCustBend.Type = 1
            nbModif = nbModif + 1
            Stop
        ElseIf swSheetMetalData.Thickness * 1000 = 5 And swSheetMetalData.BendRadius * 1000 <> 5 Then
            swSheetMetalData.BendRadius = 5 / 1000
            swCustBend.Type = 1
            nbModif = nbModif + 1
            Stop
        End If
        
        Debug.Print "  " & swFeat.Name
        Debug.Print "      Tolérance de pliage        = " & swSheetMetalData.BendAllowance * 1000# & " mm"
        Debug.Print "      Fichier de table de pliage = " & swSheetMetalData.BendTableFile
        Debug.Print "      Epaisseur                  = " & swSheetMetalData.Thickness * 1000# & " mm"
        Debug.Print "      Rayon                      = " & swSheetMetalData.BendRadius * 1000# & " mm"
        Debug.Print "      Perte au pli               = " & swCustBend.BendDeduction * 1000# & " mm"
        Debug.Print "      KFactor                    = " & swSheetMetalData.KFactor
        Debug.Print "      Type de pli                = " & swCustBend.Type
        Debug.Print ""
        
    Next i

End Function

Um die Änderungen zu validieren, muss diese Anweisung hinzugefügt werden, nachdem die Werte definiert wurden und bevor die Reihe von Anzeigen...

     bRet = swFeat.ModifyDefinition(swSheetMetalData, swModel, Nothing)

Wenn ich mich nicht irre, wird die Änderung am Standardradiuswert der Funktion " Blech" vorgenommen.
Es scheint, dass es auch notwendig ist, das Kontrollkästchen " Einstellungen überschreiben..."  damit die Änderung wirksam wird.

image

Die Änderung hat keine Auswirkungen auf die Radien der Falten, die durch die aufeinanderfolgenden Funktionen erzeugt werden, wenn diese mit bestimmten Radien (Übergangsfalz, Skizzierte Faltung, Kantengefaltetes Blatt usw.) definiert wurden. In diesem Fall ist es notwendig, auf jede dieser speziellen Funktionen zuzugreifen. Galeere...
Sehen Sie sich dieses Beispiel aus der API-Hilfe an:
Beispiel für alle Blechfeature-Daten abrufen (VBA)

Vielen Dank für Ihre Erklärungen, was für mich als Teilneuling erschwinglich bleibt.

Das ist auch der Grund, warum ich anscheinend fälschlicherweise dachte, dass ich die folgende Eigenschaft (in Post#1) validieren müsste, um den Standard-Biegeradius überschreiben zu können:

swBaseFlangeFeat.OverrideDefaultSheetMetalParameters = True

Es könnte also nicht einfacher sein, auf die Modifikation dieser Biegeradien zuzugreifen.

Aber wenn Sie den ganzen "Get All Sheet Metal Feature Data Example (VBA)"-Code durchgehen müssen, ist es unglaublich komplex, nur einen Biegeradius an allen Komponenten oder Körpern zu ändern.


BEARBEITEN: "Get All Sheet Metal Feature Data Example (VBA)" erlaubt keine Änderung, sondern dient nur zum Abrufen der Daten. So etwas wie ein " Set Sheet Metal Feature Data " gibt es nicht?


Man könnte meinen, dass, solange man auf das Bauteil oder den Körper zugreift, das ein Objekt mit Eigenschaften ist, zu denen der Biegeradius gehört.
Sie können den Basisradius der Biegung ändern, der Teil der Eigenschaften dieses Objekts ist.

Aber anscheinend ist das nicht der Fall?

Ich hoffe, Sie können meiner (nicht unbedingt logischen) Argumentation folgen, die auf Objekten und ihren Eigenschaften basiert.

Die Anweisung, die es Ihnen ermöglicht, das Kontrollkästchen " Parameter ersetzen..." zu aktivieren/deaktivieren, wäre diese, die vor der Bestätigung der Änderungen platziert wird. Zu testen.

swSheetMetalData.SetOverrideDefaultParameter2 swSheetMetalOverrideDefaultParameters_BendParameters, True

Bei Funktionen, die bestimmte Strahlen verwenden, sehe ich keine andere Lösung, als die betreffenden Funktionen nacheinander im Baum zu suchen.

Nicht monströs, da es sich sehr wiederholt, wobei der Schlüssel darin besteht, die von Solidworks verwendeten Namen zu kennen. Daher ist das Beispiel " Get All Sheet Metal..." »

Hallo und vielen Dank @m.blt für die obige Anweisung, die es mir ermöglicht hat, gute Fortschritte zu machen, und ich würde sagen, dass ich meinen Code (der im Grunde genommen von Ihnen stammt) fast fertiggestellt habe.

Allerdings habe ich immer noch ein Problem, alles funktioniert so, wie ich es möchte, so dass ich die Standard-Blecheinstellungen ändern kann, aber auch die Ersatzeinstellungen bei einem Mehrkörperteil.
Wenn ich das Makro mit einem ein- oder mehrteiligen Blechteil ausführe, funktioniert alles perfekt.
Auf der anderen Seite, als ich es mit einer Assembly zum Laufen gebracht habe, funktioniert der gesamte Verarbeitungsprozess anscheinend gut, aber wenn das Makro fertig ausgeführt wird, bleibt die Datei halb blockiert.
Ich kann z.B. mit einem Rechtsklick nicht mehr die Kontextmenüs anzeigen, und ich bin gezwungen, die Datei zu schließen und erneut zu öffnen, damit sie wieder funktioniert.

Ich verstehe nicht, warum es das mit den Baugruppen macht.
Jede Hilfe wird für mich wertvoll sein, um sie zu verstehen, danke im Voraus.

Hier ist der Code:

Dim nbTotalCorps             As Integer
Dim nbTotalDossier          As Integer
Dim nbModifCorps            As Integer
Dim nbModifDossier          As Integer
Dim pieceCorps              As Boolean

Option Explicit


Sub main()
    Dim swApp           As SldWorks.SldWorks
    Dim swModel         As ModelDoc2
    Dim swAssemb        As AssemblyDoc
    Dim swComp          As Component2
    Dim vComponents     As Variant
    Dim i               As Integer
    Dim OK              As Boolean
    
    nbTotalCorps = 0
    nbTotalDossier = 0
    nbModifCorps = 0
    nbModifDossier = 0

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then                      ' Si aucun document n'est ouvert
        MsgBox "Un document de pièce ou d'assemblage doit être ouvert.", vbExclamation
        Exit Sub
    
    ElseIf swModel.GetType = swDocPART Then         ' Si c'est une pièce...
        OK = SheetPart(swModel)
        MsgBox nbModifDossier & " rayon de pliage modifier sur " & nbTotalDossier & " de dossier par défaut de tolerie" & vbCrLf & _
        nbModifCorps & " rayon de pliage modifier sur " & nbTotalCorps & " corps de tolerie"
        Exit Sub
    
    ElseIf swModel.GetType = swDocASSEMBLY Then     ' Si c'est un assemblage...
        Set swAssemb = swModel
        vComponents = swAssemb.GetComponents(True)  ' Tableau des composants de niveau 1 de l'assemblage
        For i = 0 To UBound(vComponents)
            Set swComp = vComponents(i)
            ParcourirComposants swComp              ' Parcours des composants (récursif)
        Next i
        MsgBox nbModifDossier & " rayon de pliage modifier sur " & nbTotalDossier & " de dossier par défaut de tolerie" & vbCrLf & _
        nbModifCorps & " rayon de pliage modifier sur " & nbTotalCorps & " corps de tolerie"
        
    End If

End Sub

Sub ParcourirComposants(swComp As SldWorks.Component2)
    
    Dim vChildComponents    As Variant
    Dim swModel             As ModelDoc2
    Dim swChildComp         As SldWorks.Component2
    Dim i                   As Integer
    Dim OK                  As Boolean
    
    Set swModel = swComp.GetModelDoc2                   ' Modèle associé au composant
    If Not swModel Is Nothing Then
        If swModel.GetType = swDocPART Then             ' Si c'est une pièce...
            OK = SheetPart(swModel)
            
        ElseIf swModel.GetType = swDocASSEMBLY Then     ' Si c'est un assemblage...
            vChildComponents = swComp.GetChildren       ' Liste des composants enfants
            For i = 0 To UBound(vChildComponents)
                Set swChildComp = vChildComponents(i)
                ParcourirComposants swChildComp         ' Parcours du composant enfant (récursif)
            Next i
        End If
        
    End If
End Sub


Function SheetPart(swModel As ModelDoc2) As Boolean

    Dim swFeat                  As Feature
    Dim vFeatArray              As Variant
    Dim sheetMetalFolder        As sheetMetalFolder
    Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swSheetMetal            As SldWorks.SheetMetalFeatureData
    Dim swSheetMetalData        As SheetMetalFeatureData
    Dim gaugeTableFile          As String
    Dim swCustBend              As CustomBendAllowance
    Dim i                       As Long
    Dim bRet                    As Boolean
    Dim lRet                    As Long
    Dim errors                  As Long
    Dim overrideParameters      As Boolean
    Dim swFeature               As SldWorks.Feature
    Dim swSheetMetalFeatureData As SldWorks.SheetMetalFeatureData

    
    Set sheetMetalFolder = swModel.FeatureManager.GetSheetMetalFolder
    If sheetMetalFolder Is Nothing Then
        Exit Function
    End If
    
    Set swFeat = sheetMetalFolder.GetFeature
    Debug.Print "-------------------------------------------------"
    Debug.Print "Composant : " & swModel.GetPathName
    Debug.Print "  Nom du dossier de tôlerie : " & swFeat.Name
    Debug.Print "  Nombre de fonctions de tôlerie dans le dossier : " & sheetMetalFolder.GetSheetMetalCount
    Debug.Print ""
    
    'Création du tableau comportant chaque element de tolerie contenu dans le dossier de tolerie
    vFeatArray = sheetMetalFolder.GetSheetMetals
    'Stop
    Debug.Print "  Nom du dossier de tôlerie : " & vFeatArray(0).Name
    
    '
    Set swSheetMetal = swFeat.GetDefinition
    Set swCustBend = swSheetMetal.GetCustomBendAllowance

    'Accession au parametres de tolerie par défaut
    bRet = swSheetMetal.IAccessSelections2(swModel, Nothing): Debug.Assert bRet
    
    pieceCorps = True
    nbTotalDossier = nbTotalDossier + 1
    'Appel de la fonction choixRayonPliageParEpaisseur
    choixRayonPliageParEpaisseur swCustBend, swSheetMetal, pieceCorps
        
    'On valide les modifications des parametres de tolerie par défaut
    bRet = swFeat.ModifyDefinition(swSheetMetal, swModel, Nothing): Debug.Assert bRet
    
    Debug.Print "  Modified bend radius = " & swSheetMetal.BendRadius * 1000# & " mm"
    
    'Boucle sur les elements de tolerie contenu dans le dossier
    For i = LBound(vFeatArray) To UBound(vFeatArray)
        Set swFeat = vFeatArray(i)
        Set swSheetMetalData = swFeat.GetDefinition
        Set swCustBend = swSheetMetalData.GetCustomBendAllowance
        pieceCorps = False
        nbTotalCorps = nbTotalCorps + 1
        
        'verification de l'état "Remplacer les parametres de pliage"
        errors = swSheetMetalData.GetOverrideDefaultParameter2(swSheetMetalOverrideDefaultParameters_e.swSheetMetalOverrideDefaultParameters_BendParameters, overrideParameters)
            Debug.Print ("  Bend parameters: " & overrideParameters)
        
        'Si "remplacer les parametres de pliage" est coché
        If overrideParameters Then
            'On accede au parametres de pliage et à la zone de pliage
            errors = swSheetMetalData.SetOverrideDefaultParameter2(swSheetMetalOverrideDefaultParameters_e.swSheetMetalOverrideDefaultParameters_BendParameters, True)
            errors = swSheetMetalData.SetOverrideDefaultParameter2(swSheetMetalOverrideDefaultParameters_e.swSheetMetalOverrideDefaultParameters_BendAllowance, True)
            
            'Appel de la fonction choixRayonPliageParEpaisseur
            choixRayonPliageParEpaisseur swCustBend, swSheetMetalData, pieceCorps

            'On valide les modifications des parametres de tolerie
            bRet = swFeat.ModifyDefinition(swSheetMetalData, swModel, Nothing): Debug.Assert bRet
            'Stop
            Debug.Print "  Modified bend radius = " & swSheetMetalData.BendRadius * 1000# & " mm"
        End If
        
        Debug.Print "  " & swFeat.Name
        Debug.Print "      Tolérance de pliage        = " & swSheetMetalData.BendAllowance * 1000# & " mm"
        Debug.Print "      Fichier de table de pliage = " & swSheetMetalData.BendTableFile
        Debug.Print "      Epaisseur                  = " & swSheetMetalData.Thickness * 1000# & " mm"
        Debug.Print "      Rayon                      = " & swSheetMetalData.BendRadius * 1000# & " mm"
        Debug.Print "      Perte au pli               = " & swCustBend.BendDeduction * 1000# & " mm"
        Debug.Print "      KFactor                    = " & swSheetMetalData.KFactor
        Debug.Print "      Type de pli                = " & swCustBend.Type
        Debug.Print ""
        
    Next i

End Function

Function choixRayonPliageParEpaisseur(swCustBend As CustomBendAllowance, swSheetMetal As SldWorks.SheetMetalFeatureData, _
pieceCorps As Boolean)

'Test si epaisseur 1.5mm, rayon de pliage 1.5 et utilisation d'une table de pliage
If swSheetMetal.Thickness * 1000 = 1.5 And swSheetMetal.BendRadius * 1000 <> 1.5 _
Or swCustBend.Type <> 1 Then
            swSheetMetal.BendRadius = 1.5 / 1000
            swCustBend.Type = 1
            If pieceCorps Then
                nbModifDossier = nbModifDossier + 1
            Else
                nbModifCorps = nbModifCorps + 1
            End If

'Test si epaisseur 2mm, rayon de pliage 2 et utilisation d'une table de pliage
ElseIf swSheetMetal.Thickness * 1000 = 2 And swSheetMetal.BendRadius * 1000 <> 2 _
Or swCustBend.Type <> 1 Then
            swSheetMetal.BendRadius = 2 / 1000
            swCustBend.Type = 1
            If pieceCorps Then
                nbModifDossier = nbModifDossier + 1
            Else
                nbModifCorps = nbModifCorps + 1
            End If

'Test si epaisseur 3mm, rayon de pliage 3 et utilisation d'une table de pliage
ElseIf (swSheetMetal.Thickness * 1000 = 3 And swSheetMetal.BendRadius * 1000 <> 36) _
Or swCustBend.Type <> 1 Then
            swSheetMetal.BendRadius = 3 / 1000
            swCustBend.Type = 1
            If pieceCorps Then
                nbModifDossier = nbModifDossier + 1
            Else
                nbModifCorps = nbModifCorps + 1
            End If

'Test si epaisseur 4mm, rayon de pliage 4 et utilisation d'une table de pliage
ElseIf swSheetMetal.Thickness * 1000 = 4 And swSheetMetal.BendRadius * 1000 <> 4 _
Or swCustBend.Type <> 1 Then
            swSheetMetal.BendRadius = 4 / 1000
            swCustBend.Type = 1
            If pieceCorps Then
                nbModifDossier = nbModifDossier + 1
            Else
                nbModifCorps = nbModifCorps + 1
            End If
'Test si epaisseur 5mm, rayon de pliage 5 et utilisation d'une table de pliage
ElseIf swSheetMetal.Thickness * 1000 = 5 And swSheetMetal.BendRadius * 1000 <> 5 _
Or swCustBend.Type <> 1 Then
            swSheetMetal.BendRadius = 5 / 1000
            swCustBend.Type = 1
            If pieceCorps Then
                nbModifDossier = nbModifDossier + 1
            Else
                nbModifCorps = nbModifCorps + 1
            End If

        End If
End Function

Hallo

Das Problem hängt mit den Parametern zusammen, die an die beiden Methoden AccessSelections() und ModifyDefinition() übergeben werden, die unterschiedlich sind, je nachdem, ob es sich bei dem Hauptdokument um ein PART oder eine ASSEMBLY handelt.
Die API-Hilfe hebt dieses Problem in ihren Fußnoten hervor und weist darauf hin, dass Verwirrung die Ausführung nicht blockiert, sondern zu " unerwartetem " Verhalten führen kann. :laughing:

Im ersten Fall müssen Sie das ModeleDoc des Blechteils übergeben, im zweiten Fall müssen Sie das ModelDoc der Baugruppe und des von der Änderung betroffenen Blechbauteils übergeben.

Die Korrektur muss an den 3 Stellen vorgenommen werden, an denen diese Methoden vorkommen, indem getestet wird, ob es sich bei dem Hauptdokument um ein Teil oder eine Baugruppe handelt.
Der Konstruktionsbaum der Baugruppe kehrt dann zum normalen Verhalten zurück...

Version im angehängten Dokument korrigiert.
Die Gültigkeit der Behandlung aus Sicht der Blechbearbeitung muss noch geprüft werden.

FoldWallet2.swp (93 KB)