Makro Solidworks: Kopiowanie właściwości z zakładki "Podsumowanie" do zakładki "Specyficzne dla konfiguracji"

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.png
2022-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