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.png2022-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“