Solidworks Makro: Kopieren von Eigenschaften aus der Registerkarte "Zusammenfassung" in die Registerkarte "Konfigurationsspezifisch"

Hallo ihr alle

Wie im Titel meiner Frage beschrieben, möchte ich beim Import einer Datei im STEP-Format, die ich von CADENAS (partcommunity) bekomme und eine klar definierte Liste von Eigenschaften habe (da ich sie nur für die Bossard-Bibliothek verwenden werde ), in der Lage sein, ein Makro auszuführen, das einige Eigenschaften kopiert (z.B . "BOMINFO" -> "DESIGNATION 1")  von der Registerkarte "Zusammenfassung" zur Registerkarte "Konfigurationsspezifisch", die eine Liste von Eigenschaften aus einer standardmäßigen benutzerdefinierten Eigenschaftendatei in meinem Unternehmen enthält.

Ich habe bereits viel im Forum gesucht, ohne eine Methode zu finden, die ich an meinen Anwendungsfall anpassen kann. Könnten Sie mir also einen Rat geben oder mir sogar die Makrosyntax geben, die ich in diesem Fall verwenden soll?

Vielen Dank im Voraus und einen schönen Tag.

Herzliche Grüße
Yann


2022-04-05_10_08_16-proprietes-recapitulatif.png
2022-04-05_10_09_32-proprietes-specifiques-configuration.png

So lesen Sie die Eigenschaften einer Konfiguration:

https://help.solidworks.com/2018/English/api/sldworksapi/Get_Custom_Properties_for_Configuration_Example_VB.htm

So lesen Sie die Dokumenteigenschaft:

https://help.solidworks.com/2016/English/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm

 

Ein Beispiel für einen Codeausschnitt, den ich in einem meiner Makros gefunden habe, der erste Teil prüft, ob die Konfigurationseigenschaft leer ist, und wenn ja, liest er die Dokumenteigenschaft.

Ich hoffe, das hilft:

 

Dim swCustPropMgr As SldWorks.CustomPropertyManager

'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

 

 

Andernfalls finden Sie hier einen Kurs zu SW-Makros für Eigenschaften:

https://www.codestack.net/solidworks-api/data-storage/custom-properties/

https://blog.codestack.net/custom-properties-automation

 

Hallo 

Zu Ihrer Information: Ich habe es bereits geschafft, diesen Code zu schreiben, der die Eigenschaften erstellt, die auf der Registerkarte "Zusammenfassung" nicht vorhanden sind:

Dim swApp           As SldWorks.SldWorks
Dim swModel         As SldWorks.ModelDoc2
Dim Value           As String

Sub main()

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Value = swModel.CustomInfo("DESIGNATION 1")
    
    If Value <> "" Then
        swModel.CustomInfo("DESIGNATION 1") = swModel.CustomInfo("BOMINFO")
    Else
        swModel.AddCustomInfo3 "", "DESIGNATION 1", swCustomInfoText, swModel.CustomInfo("BOMINFO")
    End If

    swModel.ForceRebuild3 (False)
    swModel.Save

End Sub

Wie bearbeite ich es so, dass Eigenschaften auf der Registerkarte "Konfigurationsspezifisch" kopiert/erstellt werden?

Danke im Voraus,
Yann

 

Ich habe gerade gesehen, dass Sie Zugriff auf die MyCADservice-Tools (kostenlos) haben, Batchproperties oder Integration verwenden, es kann für Sie einfacher sein und im schlimmsten Fall können Sie mit Visiativ ein Ticket erstellen, wenn Sie es nicht können.

Oder bitten Sie erneut um Hilfe

https://help.visiativ.com/mycadtools/2020/fr/BatchProperties.html

https://help.visiativ.com/mycadtools/2020/fr/Integration.html

 

1 „Gefällt mir“

Hallo sbadenis,

Vielen Dank für Ihr Feedback, ich werfe einen Blick auf die MyCADservice-Tools, die Links und das Beispielmakro, das Sie mir gegeben haben.
Ich komme schnell auf meine Frage zurück.

Andernfalls gibt es auf derselben Website diese, die alle Eigenschaften Customize to Configuration Specific (in die aktive Konfiguration) kopiert

https://www.codestack.net/solidworks-api/data-storage/custom-properties/copy-file-specific-to-configuration/

Mit dem Hinzufügen einer Bedingung wie dieser sollte es funktionieren:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPrpMgr As SldWorks.CustomPropertyManager
Dim swConfCustPrpMgr As SldWorks.CustomPropertyManager
 
Sub main()
 
    Set swApp = Application.SldWorks
 
    Set swModel = swApp.ActiveDoc

    If Not swModel Is Nothing Then
   
        Set swCustPrpMgr = swModel.Extension.CustomPropertyManager("")
       
        Dim vNames As Variant
        Dim vTypes As Variant
        Dim vValues As Variant
        swCustPrpMgr.GetAll vNames, vTypes, vValues
   
        Dim activeConfName As String
        activeConfName = swModel.ConfigurationManager.ActiveConfiguration.Name

        Set swConfCustPrpMgr = swModel.Extension.CustomPropertyManager(activeConfName)
 
        Dim i As Integer
   
        For i = 0 To UBound(vNames)
'remplacer ici "Essai" Par le nom ou les noms de propriété à récupérer
            If vNames(i) = "Essai" or vNames(i) = "Essai2" Then
                swConfCustPrpMgr.Add2 vNames(i), vTypes(i), vValues(i)
                swConfCustPrpMgr.Set vNames(i), vValues(i)
            End If
        Next

    Else

        MsgBox "Please open part or assembly"

    End If
   
End Sub

 

1 „Gefällt mir“

sbadenis, vielen Dank, dank eures letzten Stücks Code, das ich angepasst habe und es macht genau das, wonach ich gesucht habe:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPrpMgr As SldWorks.CustomPropertyManager
Dim swConfCustPrpMgr As SldWorks.CustomPropertyManager
 
Sub main()
 
    Set swApp = Application.SldWorks
 
    Set swModel = swApp.ActiveDoc

    If Not swModel Is Nothing Then
   
        Set swCustPrpMgr = swModel.Extension.CustomPropertyManager("")
       
        Dim vNames As Variant
        Dim vTypes As Variant
        Dim vValues As Variant
        swCustPrpMgr.GetAll vNames, vTypes, vValues
   
        Dim activeConfName As String
        activeConfName = swModel.ConfigurationManager.ActiveConfiguration.Name

        Set swConfCustPrpMgr = swModel.Extension.CustomPropertyManager(activeConfName)
         
        Dim i As Integer
   
        For i = 0 To UBound(vNames)
'Remplacer la valeur de chaque "vNames(i)" par le nom de la propriété "Personnaliser" dont vous souhaitez récupérer la valeur.
'Pour chaque "swConfCustPrpMgr.Set" dans chaque fonction "If", remplacer le premier argument par le nom de la propriété de destination "Spécifiques à la configuration".
            If vNames(i) = "BOMINFO" Then
                swConfCustPrpMgr.Set "DESIGNATION 1", vValues(i)
            End If
            If vNames(i) = "BNARTNR" Then
                swConfCustPrpMgr.Set "ARTICLE NUMBER", vValues(i)
            End If
            If vNames(i) = "BNMAT" Then
                swConfCustPrpMgr.Set "MATERIAL", vValues(i)
            End If
            If vNames(i) = "BNSURFACE" Then
                swConfCustPrpMgr.Set "SURFACE TREATMENT", vValues(i)
            End If
            If vNames(i) = "BNNORM1" Then
                swConfCustPrpMgr.Set "SPECIFICATION", vValues(i)
            End If
            
        Next

    Else

        MsgBox "Please open part or assembly"

    End If
   
End Sub

 

1 „Gefällt mir“