Cze wszystkim
Jak opisano w tytule mojego pytania, importując plik w formacie STEP, który dostaję z CADENAS (partcommunity) i mając dobrze zdefiniowaną listę właściwości (ponieważ będę jej używał tylko do biblioteki Bossard), chciałbym mieć możliwość uruchomienia makra, które skopiowałoby niektóre właściwości (na przykład "BOMINFO" -> "OZNACZENIE 1") z zakładki "Podsumowanie" do zakładki "Specyficzne dla konfiguracji", która zawiera listę właściwości ze standardowego pliku właściwości niestandardowych w mojej firmie.
Przeszukałem już wiele na forum, nie znajdując metody dostosowania do mojego przypadku użycia. Czy mógłbyś mi coś doradzić, a nawet podać składnię makra do użycia w tym przypadku?
Z góry dziękuję i życzę miłego dnia.
Pozdrowienia
Yann
2022-04-05_10_08_16-proprietes-recapitulatif.png2022-04-05_10_09_32-proprietes-specifiques-configuration.png
Aby odczytać właściwości konfiguracji:
https://help.solidworks.com/2018/English/api/sldworksapi/Get_Custom_Properties_for_Configuration_Example_VB.htm
Aby odczytać właściwość dokumentu:
https://help.solidworks.com/2016/English/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm
Przykład fragmentu kodu, który znalazłem w jednym z moich makr, pierwsza część sprawdza, czy właściwość konfiguracji jest pusta, a jeśli tak, odczytuje właściwość document.
Mam nadzieję, że to pomoże:
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
W przeciwnym razie, oto kurs na temat makr oprogramowania dla właściwości:
https://www.codestack.net/solidworks-api/data-storage/custom-properties/
https://blog.codestack.net/custom-properties-automation
Witam
Dla Twojej informacji udało mi się już napisać ten kod, który tworzy właściwości, które nie istnieją w zakładce "Podsumowanie":
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
Jak mogę go edytować, aby właściwości były kopiowane/tworzone w zakładce "Specyficzne dla konfiguracji"?
Z góry dzięki,
Yann
Właśnie zobaczyłem, że masz dostęp do narzędzi MyCADservice (za darmo), korzystaj z Batchproperties lub Integracji, może to być dla Ciebie łatwiejsze, aw najgorszym przypadku możesz zrobić bilet z Visiativ, jeśli nie możesz tego zrobić.
Lub ponownie poproś o pomoc
https://help.visiativ.com/mycadtools/2020/fr/BatchProperties.html
https://help.visiativ.com/mycadtools/2020/fr/Integration.html
1 polubienie
Witaj sbadenis,
Dziękuję za Twoją opinię, przyjrzę się narzędziom MyCADservice, linkom i przykładowemu makra, które mi podałeś.
Szybko wrócę do mojego pytania .
W przeciwnym razie na tej samej stronie znajduje się ten, który kopiuje wszystkie właściwości Dostosuj do konfiguracji specyficznej (do aktywnej konfiguracji)
https://www.codestack.net/solidworks-api/data-storage/custom-properties/copy-file-specific-to-configuration/
Po dodaniu takiego warunku powinno to zadziałać:
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 polubienie
sbadenis, dziękuję bardzo, dzięki twojemu ostatniemu fragmentowi kodu, dostosowałem się i robi dokładnie to, czego szukałem:
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 polubienie