Makro zum automatischen Nachladen einer bestimmten Anzahl von Materialien auf die Komponenten einer Baugruppe

Hallo

Nach dem Übergang zur Version 2020 arbeitet Solidworks mit Schraffuren mit vielen Strichen und komplizierten Schraffurmustern.

Unser Material, das für die Schweißnähte verwendet wurde, hatte leider einen Hahnentrittfaktor von 32 (es genügt zu sagen, dass es Minuten dauert, den kleinsten Detailplan zu laden).

Also haben wir unsere Materialien geändert, um zu leichteren Schraffurtypen und Skalenfaktoren zurückzukehren.

Unser aktuelles Problem ist, dass wir viele alte Pläne kopieren (also mit den alten Materialien, die in den Räumen gespeichert sind).

Gäbe es jemanden, der in der Lage wäre, ein Makro zu erstellen, um alle Teile einer Baugruppe zu scannen und die Materialien mit den folgenden Namen automatisch neu zu laden: "Edelstahlschweißen", "Stellite Grade 21 (RC)", "Stellite Grade 12 (RB)", "Stellite Grade 6 (RA)"

Vielen Dank im Voraus

 

 

 

 

 

Hier ist ein Beispiel für eine Regel, die Sie mit Integration (Mycadtools Dienstprogramm) anwenden können, um Materialien gemäß einer Regel zu ändern (hier, wenn das Material A oder B oder C ist)

Dazu bringen Sie die Baugruppe in Gang, zerlegen sie, filtern dann nur nach den Teilen, starten und lassen sie dann laufen.

Dies erspart Ihnen das Erstellen eines Makros und es bleibt ohne Programmierkenntnisse leicht editierbar.

 

Der Link zur Integrationshilfe:

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


maj_inox_316.mcact
1 „Gefällt mir“

Danke @sbadenis , aber leider habe ich die mycad-Dienstprogramme nicht.

Außerdem, und um die Sache noch komplizierter zu machen: Unsere zu bearbeitenden Teile sind virtuelle Teile, die in der Baugruppe gespeichert werden. Angesichts dessen, was Sie beschreiben, glaube ich nicht, dass Ihre Methode als Ergebnis funktioniert.

In Ihrem Profil sehe ich jedoch dank der Medaille, dass Sie Mycadservices abonniert haben, so dass Sie normalerweise ohne zusätzliche Kosten Zugang zu Dienstprogrammen haben.

Schauen Sie im Menü links nach, ob Sie im Menü Produzieren Zugriff auf das Mycadtools-Menü haben (im schlimmsten Fall gibt es eine Testphase von 1 Monat, wie es mir scheint, aber im Hinblick auf die Medaille für mich müssen Sie Zugriff darauf haben)

Für die virtuellen Teile habe ich nur einen Test gemacht, das ist kein Problem.

Alles, was Sie tun müssen, ist, die Baugruppe in SolidWorks zu öffnen, in der Integration auf Aktives Dokument hinzufügen zu drücken, nachdem Sie das Kontrollkästchen Abhängigkeiten aktiviert haben, dann in den Filter, um die Teile zu filtern, die Baugruppe zu starten und schließlich mit den in jedem Teil vorgenommenen Materialänderungen zu speichern.

Wenn nötig, könnte ich Sie anleiten.

 

 

1 „Gefällt mir“

Ich war eine Zeit lang ein Mycad-Abonnent, aber ich bin es nicht mehr (und wir wollen auch nicht lebenslang für 8 MyCAD-Lizenzen bezahlen (auch wenn es vernünftiger ist als die Kosten für die SW-Wartung)....)

Es ist in der Tat mehr als das Makro übrig, aber ich schaffe es zu wenig, es in der wenigen Freizeit, die ich im Moment finde, zu dem Thema zu machen.

In diesem Fall ist hier ein Anfang für das Makro:

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

Von Ihrer Baugruppe aus müssen Sie den Teilesatz schlingen, sie dann nacheinander öffnen und das Material ändern, wenn es sich um eines der betroffenen Materialien handelt.

.

Hallo

Wählen Sie alle Teile aus der Baugruppe aus und klicken Sie mit der rechten Maustaste, wählen Sie das Material aus und ändern Sie das Material aller Teile in 1 Mal

Joel

Hallo ihr alle

Wenn Sie Ihre Materialien geändert haben, gilt bei der Aktualisierung normalerweise die neue Schraffur. Wenn Sie dies in großen Mengen tun möchten, ohne die Dateien zu öffnen, können Sie über den Taskplaner aktualisieren.

@ joel.condevaux : Weil ich nur das Problem mit den Schweißnähten habe (die am Ende schwarz sein müssen, was mein Hahnentritt + starke Anfangsskala erklärt): entweder ein oder zwei der zehn oder 50 Stücke, die die Baugruppe enthält. Ansonsten ist es in der Praxis das, was wir tun, aber es ist ein bisschen repetitiv, dies auf all den Ebenen zu tun, die wir kopieren.

@ Ich werde überleben: Wir sind auf EPDM , also macht es die Dinge etwas kompliziert: Sie müssen die Baugruppendatei extrahiert haben, bevor Sie sie so ändern können, dass die MEP-Datei verwendet werden kann. Und darüber hinaus sind die Teile, deren Material geändert werden muss, virtuell und haben jedes Mal unterschiedliche Namen: schwierig in Serie herzustellen.

Ich habe mir immer noch das Tool 'Task Scheduler' angesehen und sehe nicht, mit welchem Befehl Sie das Material eines Teils ändern können (und der Fall, das Material eines virtuellen Teils innerhalb einer Baugruppe zu ändern, scheint mir völlig ignoriert zu werden). Das Tool kann nur mit Lese-/Schreibwerkzeugen, d.h. extrahierten Dateien, arbeiten (was durchaus logisch erscheint).

Für mich geht es darum, die Änderungen aus der Baugruppe heraus vorzunehmen:

  1.  In der Montage: Filtern Sie die Teile nach dem Material und weisen Sie ein neues zu

@ joel.condevaux : Wir können in der Tat einen Filter für den Namen des Materials erstellen, um die Teile zu identifizieren, an denen das Material geändert werden muss. Da ich aber 4 verschiedene mögliche Materialien habe, muss man 4 verschiedene Suchen machen und dann das Material neu laden.

Es ist also immer noch lang, mühsam und repetitiv.

Daher das Interesse daran, ein Makro so erstellen zu können, dass es der PC ist, der diese Arbeit erledigt und nicht der Projektor.

Hallo

Hier ist ein Makro, das als Ausgangspunkt dienen können sollte, vergessen Sie nicht, die Zeile "databaseName = ... ", um den Namen Ihrer SLDMAT-Datei einzugeben.

Alle Dateien müssen sich in der Assembly im aufgelösten Modus befinden.

Herzliche Grüße

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 „Gefällt mir“

@ D.Roger :

Es ist einfach perfekt.

Ein großes Dankeschön, dass Sie uns wertvolle Zeit sparen werden (und auch an alle, die den Fehler gemacht haben, hohe Skalenfaktoren auf ihre SW-Materialien zu setzen).

Wir haben jedoch immer noch ein Problem (solange SW den Fehler nicht behoben hat: SPR 476546, das seit 2014 in High Impact geöffnet ist...): Auf unseren MEPs erscheinen Teile mit einem einfachen Schraffurmuster (also die, die ich Sie gebeten habe, zu ändern...) transparent statt einheitlich schwarz. Um das Problem zu umgehen, müssen Sie einen der weiß schraffierten Bereiche (anstelle von schwarz) auswählen, mit der rechten Maustaste klicken und das Kontrollkästchen "Materialschraffur" deaktivieren. Seltsamerweise können Sie auf diese Weise das schlichte schwarze Muster auf die Schweißnaht auftragen. Und dies muss für alle Ansichten und alle schraffierten Teile in der Ebene der Zeichnung erfolgen.

Glauben Sie, dass es möglich wäre, ein Makro zu erstellen, um diese Abwahl automatisch für alle Ansichten des MEP durchzuführen (entweder indem Sie nach den Materialien aus der Liste suchen, die Sie bereits verwendet haben, oder indem Sie alle Materialien finden, die sich als eine Art Schraffur "vereint" haben)??

Dieses Makro wird auch für all diejenigen nützlich sein, die die dumme Idee haben, einfache Schraffuren für ihre Schweißnähte zu verwenden (SW hat sehr gut abgeschnitten, weil sie es geschafft haben, 2 Fehler zu erstellen, die es unmöglich machen, Schweißnähte an einem MEP zu machen, ohne Kopfschmerzen zu bekommen: wenn es vereint ist, Du siehst die Schraffur nicht, wenn es sich um eine Schraffur mit einem starken Skalenfaktor handelt, schleift deine Zeichnung und du stehst am Rande des Selbstmords...).

 


capture_hachures.jpg

Hallo

Auf den ersten Blick ist es etwas kompliziert, da die Methode "GetFaceHatchCount" einen Nullwert für die einfache Schraffur von Materialien zurückgibt, die transparent erscheinen . Ich werde mir das Problem gelegentlich ansehen, aber wenn ich etwas mehr Zeit habe.

Herzliche Grüße

@ d.roger : Nochmals vielen Dank.

Ich schließe dieses Thema.

Ich werde irgendwann wieder eine öffnen, wenn Sie eine Lösung für dieses Problem der transparenten Schraffur auf Zeichnungen finden können, um dieses neue Makro mit der Community zu teilen.

Es ist in der Tat möglich, dass es nicht so einfach ist (sonst hätte SW diese SPR mit hohem Kundeneinfluss in 6 Jahren lösen können...).