Makro do automatycznego ponownego wczytywania określonej liczby materiałów w komponentach złożenia

Witam

Po przejściu na wersję 2020, Solidworks pracuje nad kreskowaniem z dużą ilością pociągnięć i skomplikowanymi wzorami kreskowania.

Nasz materiał użyty do spoin był niestety w pepitkę o współczynniku 32 (dość powiedzieć, że załadowanie najdrobniejszego planu zajmuje kilka minut).

Zmieniliśmy więc nasze materiały, aby powrócić do lżejszych typów kreskowania i współczynników skali.

Nasz obecny problem polega na tym, że kopiujemy wiele starych planów (czyli ze starymi materiałami zapisanymi w pokojach).

Czy znalazłby się ktoś, kto byłby w stanie zrobić makro, aby zeskanować wszystkie części zespołu i automatycznie ponownie załadować materiały, które mają następujące nazwy: "Spawanie stali nierdzewnej", "Stellit Grade 21 (RC)", "Stellite Grade 12 (RB)", "Stellite Grade 6 (RA)"

Z góry dziękuję

 

 

 

 

 

Oto przykład reguły, którą można zastosować za pomocą narzędzia Integracja (narzędzie Mycadtools) w celu zmiany materiałów zgodnie z regułą (tutaj, jeśli materiał jest A, B lub C)

Aby to zrobić, zaczynasz montaż w toku, rozkładasz go na części, następnie filtrujesz tylko części, uruchamiasz, a następnie pozwalasz mu działać.

Dzięki temu nie będziesz musiał tworzyć makra i będzie można je łatwo edytować bez znajomości programowania.

 

Link do pomocy dotyczącej integracji:

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


maj_inox_316.mcact
1 polubienie

Dzięki @sbadenis, ale niestety nie mam narzędzi mycad.

Ponadto, aby jeszcze bardziej skomplikować sprawę: nasze części do edycji to części wirtualne, które są zapisywane w zespole. Biorąc pod uwagę to, co opisujesz, nie sądzę, aby twoja metoda działała w rezultacie.

Jednak w Twoim profilu widzę dzięki medalowi, że jesteś subskrybentem Mycadservices, więc normalnie masz dostęp do narzędzi bez dodatkowych kosztów.

Zajrzyj do menu po lewej stronie, jeśli masz dostęp w menu Produce do menu Mycadtools (wydaje mi się, że w najgorszym przypadku jest okres próbny trwający 1 miesiąc, ale ze względu na medal dla mnie musisz mieć do niego dostęp)

W przypadku części wirtualnych właśnie zrobiłem test, to nie problem.

Wszystko, co musisz zrobić, to otworzyć zespół w solidworks, w integracji naciśnij dodaj aktywny dokument, po zaznaczeniu pola zależności, następnie w filtrze, aby przefiltrować części, uruchomić i na końcu zapisać zespół ze zmianami materiałowymi dokonanymi w każdej części.

W razie potrzeby mogę cię poprowadzić.

 

 

1 polubienie

Przez jakiś czas byłem subskrybentem Mycad, ale już nim nie jestem (i nie chcemy też płacić za 8 licencji mycad na całe życie (nawet jeśli jest to bardziej rozsądne niż koszt utrzymania oprogramowania)....)

Zostało mi wprawdzie więcej niż makro, ale nie udaje mi się na tyle ogarnąć tego tematu, aby zrobić to w tej niewielkiej ilości wolnego czasu, który w tej chwili znajduję.

W takim przypadku oto początek makra:

https://www.codestack.net/solidworks-api/document/materials/show-edit-material-dialog/

Z twojego montażu będziesz musiał zapętlić zestaw części, a następnie otwierać je jedna po drugiej i zmieniać materiał, jeśli jest to jeden z danych materiałów.

.

Witam

Dlaczego nie wybrać wszystkich części z zespołu i kliknąć prawym przyciskiem myszy, wybrać materiał i zmienić materiał wszystkich części w 1 raz

Joel

Cze wszystkim

Jeśli zmieniłeś swoje materiały, podczas aktualizacji zwykle obowiązuje nowe kreskowanie. Jeśli chcesz to zrobić zbiorczo bez otwierania plików, możesz zaktualizować z Harmonogramu zadań.

@ joel.condevaux : Ponieważ mam problem tylko ze spawami (które muszą skończyć się na czarno, co wyjaśnia moją pepitkę + mocna początkowa skala): albo jeden lub dwa kawałki z dziesięciu lub 50, które zawiera zespół. W przeciwnym razie, w praktyce, tak właśnie robimy, ale jest to trochę powtarzalne, aby robić to na wszystkich płaszczyznach, które kopiujemy.

@ przeżyję: jesteśmy na EPDM, więc to trochę komplikuje sprawę: musisz rozpakować plik zestawu, zanim będziesz mógł go zmodyfikować, aby można było użyć pliku MEP. Ponadto części, których materiał wymaga modyfikacji, są wirtualne i za każdym razem mają inne nazwy: trudne do wykonania w partii.

Nadal patrzyłem na narzędzie "harmonogram zadań" i nie widzę, za pomocą którego polecenia można zmodyfikować materiał części (a przypadek modyfikacji materiału wirtualnej części wewnątrz zespołu wydaje mi się całkowicie zignorowany). Narzędzie może działać tylko na narzędziach do odczytu/zapisu, czyli wyodrębnionych plikach (co wydaje się dość logiczne).

Dla mnie jest to kwestia wprowadzenia zmian z montażu:

  1.  W montażu: filtruj części według materiału i przypisz nowy

@ joel.condevaux : rzeczywiście możemy zrobić filtr według nazwy materiału, aby zidentyfikować części, w których materiał musi zostać zmieniony. Ale ponieważ mam 4 różne możliwe materiały, musisz przeprowadzić 4 różne wyszukiwania, a następnie ponownie załadować materiał.

Jest więc nadal długa, żmudna i powtarzalna.

Stąd zainteresowanie możliwością stworzenia makra tak, aby to komputer wykonywał tę pracę, a nie projektor.

Witam

Oto makro, które powinno być w stanie służyć jako punkt wyjścia, nie zapomnij zmodyfikować wiersza "databaseName = ... ", aby umieścić nazwę pliku sldmat .

Wszystkie pliki muszą być w trybie rozpoznania w zestawie.

Pozdrowienia

Option Explicit

Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim myMatVisProps As SldWorks.MaterialVisualPropertiesData
Dim orgBlend As Boolean
Dim orgApply As Boolean
Dim orgAngle As Double
Dim orgScale As Double
Dim longstatus As Long
Dim bRet As Boolean
Dim i As Long
Dim Assembly As ModelDoc2
Dim myAssy As AssemblyDoc
Dim myCmps As Variant
Dim myCmp As Component2
Dim nInfo As Long

Sub main()
    Set swApp = Application.SldWorks
    Set Assembly = swApp.ActiveDoc
    Set myAssy = Assembly

    myCmps = myAssy.GetComponents(False)
    For i = 0 To UBound(myCmps)
        Set myCmp = myCmps(i)
        If (myCmp.GetSuppression = 3) Or (myCmp.GetSuppression = 2) Then
            bRet = myCmp.Select2(False, 0)
            bRet = myAssy.EditPart2(True, True, nInfo)
            Set swModel = myAssy.GetEditTarget

            If swModel.GetType = 1 Then
                Dim result As String
                Dim Mat As String
                Dim configName As String
                configName = "Défaut"
                Dim databaseName As String
                databaseName = "C:/Program Files/SOLIDWORKS Corp/SOLIDWORKS/lang/french/sldmaterials/solidworks materials.sldmat"

                Dim searchPropName1 As String
                Dim searchPropName2 As String
                Dim searchPropName3 As String
                Dim searchPropName4 As String
                searchPropName1 = "Soudure inox"
                searchPropName2 = "Stellite Grade 21 (RC)"
                searchPropName3 = "Stellite Grade 12 (RB)"
                searchPropName4 = "Stellite Grade 6 (RA)"

                Dim myPart As SldWorks.PartDoc
                Set myPart = swModel
                result = myPart.GetMaterialPropertyName2(configName, Mat)

                If result = searchPropName1 Then
                    myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName1
                    Set myMatVisProps = myPart.GetMaterialVisualProperties()
                    Call apply_material_visual_properties(myMatVisProps, myPart)
                ElseIf result = searchPropName2 Then
                    myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName2
                    Set myMatVisProps = myPart.GetMaterialVisualProperties()
                    Call apply_material_visual_properties(myMatVisProps, myPart)
                ElseIf result = searchPropName3 Then
                    myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName3
                    Set myMatVisProps = myPart.GetMaterialVisualProperties()
                    Call apply_material_visual_properties(myMatVisProps, myPart)
                ElseIf result = searchPropName4 Then
                    myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName4
                    Set myMatVisProps = myPart.GetMaterialVisualProperties()
                    Call apply_material_visual_properties(myMatVisProps, myPart)
                End If
            End If

            myAssy.EditAssembly
        End If
    Next i

    Assembly.ForceRebuild3 False

End Sub


Private Sub apply_material_visual_properties(myMatVisProps As SldWorks.MaterialVisualPropertiesData, myPart As SldWorks.PartDoc)
    If Not myMatVisProps Is Nothing Then
        orgAngle = myMatVisProps.Angle
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)

        orgScale = myMatVisProps.Scale2
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)

        If myMatVisProps.BlendColor = 0 Then
            orgBlend = False
        Else
            orgBlend = True
        End If
        myMatVisProps.BlendColor = Not orgBlend
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
        myMatVisProps.BlendColor = orgBlend
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)

        If myMatVisProps.ApplyMaterialColorToPart = 0 Then
            orgApply = False
        Else
            orgApply = True
        End If
        myMatVisProps.ApplyMaterialColorToPart = Not orgApply
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
        myMatVisProps.ApplyMaterialColorToPart = orgApply
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)

        If myMatVisProps.ApplyMaterialHatchToSection = 0 Then
            orgApply = False
        Else
            orgApply = True
        End If
        myMatVisProps.ApplyMaterialHatchToSection = Not orgApply
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
        myMatVisProps.ApplyMaterialHatchToSection = orgApply
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)

        If myMatVisProps.ApplyAppearance = 0 Then
            orgApply = False
        Else
            orgApply = True
        End If
        myMatVisProps.ApplyAppearance = Not orgApply
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
        myMatVisProps.ApplyAppearance = orgApply
        longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
    End If
End Sub

 

1 polubienie

@ D.Roger :

Jest po prostu idealny.

Wielkie podziękowania pozwolą nam zaoszczędzić cenny czas (a także wszystkim tym, którzy popełnili błąd, umieszczając wysokie współczynniki skali na swoich materiałach programowych).

Wciąż jednak mamy jeden problem (o ile SW nie naprawi błędu: SPR 476546 który jest otwarty w High Impact od 2014 roku...): Na naszych MEPach części z gładkim wzorem kreskowania (czyli te, o które prosiłem Cię, abyś je zmodyfikował...) wydają się przezroczyste, a nie jednolicie czarne. Aby obejść ten problem, musisz wybrać jeden z białych zakreskowanych obszarów (zamiast czarnych), kliknąć prawym przyciskiem myszy i odznaczyć pole wyboru "Kreskowanie materiału". O dziwo, pozwala to na nałożenie zwykłego czarnego wzoru na spoinę. Należy to zrobić na wszystkich widokach i wszystkich zakreskowanych częściach na rysunku.

Czy myślisz, że byłby w stanie zrobić makro, aby automatycznie wykonać to odznaczenie we wszystkich widokach MEP (albo przechodząc do wyszukiwania materiałów z listy, których już używałeś, albo przechodząc do wszystkich materiałów, które "zjednoczyły się" jako rodzaj kreskowania)??

To makro będzie również przydatne dla wszystkich tych, którzy mają głupi pomysł używania zwykłego kreskowania do swoich spoin (SW poradziło sobie bardzo dobrze, ponieważ udało im się stworzyć 2 błędy, które uniemożliwiają wykonywanie spawów na MEP bez bólu głowy: jeśli jest zjednoczony, Nie widzisz kreskowania, jeśli jest to kreskowanie z silnym współczynnikiem skali, twój rysunek zgrzyta i jesteś na skraju samobójstwa...).

 


capture_hachures.jpg

Witam

Na pierwszy rzut oka jest to nieco skomplikowane, ponieważ metoda "GetFaceHatchCount" zwraca wartość null dla zwykłego kreskowania z materiałów, które wydają się przezroczyste, od czasu do czasu przyjrzę się problemowi, ale gdy będę miał trochę więcej czasu.

Pozdrowienia

@ d.roger : Jeszcze raz dziękuję.

Zamykam ten temat.

W końcu otworzę je ponownie, jeśli uda Ci się znaleźć rozwiązanie problemu przezroczystego, zwykłego kreskowania na rysunkach, aby podzielić się tym nowym makro ze społecznością.

Możliwe, że nie jest to takie proste (w przeciwnym razie SW mógłby rozwiązać ten SPR z dużym wpływem na klienta w ciągu 6 lat...).