Ändern des Typs von Projektionsaufnahmen im Stapel

Hallo

Ich bin über ein Problem gestolpert. Um die Zeichendateien aus alten Studien für meinen Kunden zu standardisieren, versuche ich, alle Pläne wieder in die "europäische" Projektion zu bringen, da leider aus irgendeinem Grund, den ich nicht kenne, einige Pläne in der USA-Projektion sind.

Es geht darum, dies für jedes Projekt zu tun, denn wir gehen fast immer von alten Studien aus.

Ich verwende bereits MyCadTools Integration, um viele Normalisierungsoperationen durchzuführen, und ich habe versucht, die Option des Dokuments " swDrawingProjectionType " auf 1 zu ändern, was dem Projektionstyp "Frist Angle" (Europa) entspricht, siehe die API-Hilfeseite: https://help.solidworks.com/2021/English/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swDrawingProjectionType_e.html

Leider scheint es nicht zu funktionieren, und das Problem kann von der Tatsache herrühren, dass es sich nicht wirklich um eine Option handelt, die sich auf das Dokument, sondern auf das Blatt bezieht...

Hat eine gute Seele eine Problemumgehung, möglicherweise ein Makro, das ich die Integration ausführen lassen kann?

Vielen Dank im Voraus!

Schönen Tag


capture_decran_2022-09-08_105908.png

Mit der Kopieroption können Sie Optionen von einem Dokument in ein anderes kopieren.

Sie konvertieren einen Plan manuell und verwenden ihn, um die Optionen in einen anderen zu kopieren, um zu sehen, ob er funktioniert.

https://help.visiativ.com/mycadtools/2021/fr/CopyOptions5.html

Oder Sie ändern bei der Integration den Verbandsstandard durch einen Standard, den Sie aus einem bereits geänderten Plan speichern.

 

Oder ändern Sie die Hintergrundkarte durch eine andere, die bereits geändert wurde. Über die Integration oder ggf. über das angehängte Makro (Sie müssen den Pfad der Grundkarten ändern), um auf einem Plan getestet zu werden, und dann über die + Integration, um das Makro auf jeder Grundkarte zu starten.

Option Explicit
'Site avec exemple: https://www.lynkoa.com/forum/mises-en-plan/modifier-une-note-sur-un-fond-de-plan-solidworks-avec-une-macro
Public Enum swDocumentTypes_e
    swDocNONE = 0       ' Used to be TYPE_NONE

    swDocPART = 1       ' Used to be TYPE_PART

    swDocASSEMBLY = 2   ' Used to be TYPE_ASSEMBLY

    swDocDRAWING = 3    ' Used to be TYPE_DRAWING
End Enum

Dim swSheet         As SldWorks.Sheet
Dim swApp           As Object
Dim swModel         As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swModelDocExt   As ModelDocExtension
Dim sTemplate       As String
Dim stemplatepath   As String
Dim Count           As Integer
Dim vSheetNameArr   As Variant
Dim vSheetName      As Variant
Dim vSheetProps     As Variant
Dim bRet            As Boolean
Dim tolerie         As Boolean
Dim swView          As SldWorks.View
Dim userName        As String
Dim cDirTemplate    As String
Dim cTemplateA4     As String
Dim cTemplateA4_Laser As String
Dim cTemplateA3     As String
Dim cTemplateA2     As String
Dim cTemplateA1     As String
Dim cTemplateA0     As String
Dim cTemplateA0plus As String







Sub main()
'Variable à remplacer lors d'un changement de fond de plan
'Constantes à remplacer lors de changement de fond de plan
cDirTemplate = "U:\Entreprise\Service BE\1-Commun service\Solidworks\Configuration\Modèle de documents\Modèle SW 2020\Fond de plan C\" 'Mettre le chemin d'accès aux fonds de plans sous ce format: C:\xxx\xxx\
cTemplateA4 = "a4-c.slddrt" 'A renommer si vos templates s'appelle autrement
cTemplateA4_Laser = "a4-DECOUPE-c.slddrt"
cTemplateA3 = "a3-c.slddrt"
cTemplateA2 = "a2-c.slddrt"
cTemplateA1 = "a1-c.slddrt"
cTemplateA0 = "A0-c.slddrt"
cTemplateA0plus = "A0+-c.slddrt"



Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then
    MsgBox ("Pas de document ouvert")
    Else
        If swModel.GetType <> 3 Then
            MsgBox ("Il ne s'agît pas d'une mise en plan")
        Else
        Set swDraw = swModel
                Set swModelDocExt = swModel.Extension

        vSheetNameArr = swDraw.GetSheetNames
                For Each vSheetName In vSheetNameArr
                Debug.Print vSheetName
                
                        bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
                        Set swSheet = swDraw.GetCurrentSheet
                        
                        'Ajout SD test nom template pas utile dans la macro (pour version future?):
                        Set swSheet = swDraw.GetCurrentSheet
                        sTemplate = Mid(swSheet.GetTemplateName, InStrRev(swSheet.GetTemplateName, "\") + 1)
                        Debug.Print sTemplate
                        
                        Set swView = swDraw.GetFirstView
                        Set swView = swView.GetNextView
                        'On récupère le nom de la config de la vue
                        Debug.Print "Nom de la vue" & swView.Name
                        Debug.Print "Configuration" & swView.ReferencedConfiguration
                        
                        
                        
                        vSheetProps = swSheet.GetProperties
                        Debug.Print "vSheetProps(0)=" & vSheetProps(0)
                        If vSheetProps(0) = "7" And swView.ReferencedConfiguration Like "*FLAT-PATTERN" Then 'A4
                            stemplatepath = cDirTemplate & cTemplateA3
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA4_Laser
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
                        ElseIf vSheetProps(0) = "7" Then 'A4
                            stemplatepath = cDirTemplate & cTemplateA3
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False) 'A2
                        ElseIf vSheetProps(0) = "8" Then 'A3
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA3
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False) 'A2
                        ElseIf vSheetProps(0) = "9" Then
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA2
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
                        ElseIf vSheetProps(0) = "10" Then 'A1
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA1
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
                        ElseIf vSheetProps(0) = "11" Then 'A0
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA0
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
                        ElseIf vSheetProps(0) = "11" Then 'A0+
                            stemplatepath = cDirTemplate & cTemplateA4
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            stemplatepath = cDirTemplate & cTemplateA0plus
                            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
                            swModel.ForceRebuild3 (False)
            ElseIf vSheetProps(0) <> "7" Then 'Pour les formats un peu exotiques non gérés
                            If vSheetProps(0) <> "8" Then
                            If vSheetProps(0) <> "9" Then
                            If vSheetProps(0) <> "10" Then
                            If vSheetProps(0) <> "11" Then
                            If vSheetProps(0) <> "12" Then
                                MsgBox "Le fond de plan ne correspond à aucune trame connue" & vbCrLf & "Aucun changement appliqué"
                                Exit Sub
                            End If: End If: End If: End If: End If
                        End If
                    Next
    End If
End If
swModel.Save2 (True) 'Sauvegarde des changements
End Sub

 

Vielen Dank sbadenis,

Ich habe es gerade mit CopyOption versucht, es funktioniert nicht mit dieser Option für den Projektionstyp.

In meiner Prozedur ändere ich bereits die Grundkarte und den Dressing-Standard (über Integration), aber das hat auch keine Auswirkungen auf die Art der Projektion.

All dies scheint in dem Sinne logisch, dass dieser Parameter nicht an die Baseline, noch an die Dokumentoptionen, noch an den Wrapping-Standard gebunden ist, sondern speziell an jedes Blatt einer .slddrw.

Ich denke also, die einzige Lösung wäre ein Makro, das diese Einstellung rekursiv für jedes Blatt ändern könnte. Man könnte dann in Erwägung ziehen, das Makro über Integration auszuführen. Dafür sind meine Makrofähigkeiten leider viel zu schwach...

Nachdem ich meine Lösung mit dem Makro ausprobiert habe, funktioniert es perfekt, den Hintergrundplan durch einen mit Euro-Projektion zu ändern.

Auf der anderen Seite bleiben die Ansichten schlecht platziert, sie müssen manuell auf der rechten Seite platziert werden, wie wenn Sie die Manipulation manuell durchführen, indem Sie die Art der Projektion ändern.

Für mich ist das Problem also komplizierter als gedacht und schwer zu automatisieren. Ich befürchte, dass menschliches Eingreifen obligatorisch ist, auch wenn Sie sich entscheiden, meine Methode für die Änderung der Projektion zu verwenden (über mein Makro zum Ändern des Hintergrunds)

Für mein Makro wurde das zu ändernde Teil mit den Vorlagenpfaden angehängt (vorab gespeicherte Grundkarte)

2 „Gefällt mir“

Danke sbadenis, in der Tat funktioniert es perfekt mit diesem Makro. Ich hatte mir den Code nicht genau angesehen, und tatsächlich ändert diese Methode nicht nur den Hintergrund, sondern erzwingt auch das erneute Laden (nützlich, wenn der Dateiname identisch ist) und definiert auch alle Eigenschaften im Zusammenhang mit dem Blatt neu, einschließlich der Art der Projektion.

Auf der anderen Seite hatte ich ein wenig zu kämpfen, weil ich die Fehlermeldung "Die Hintergrundkarte entspricht keinem bekannten Frame" hatte und ich nicht verstand, woher das Problem kam. Indem ich ein wenig nachforschte, verstand ich, dass das Makro das A4-Format im Hochformat und nicht im Horizontalen testet:

If vSheetProps(0) = "7"

Sie müssen also 7 durch 6 ersetzen, um das A4H-Format zu testen. Oder fügen Sie eine Bedingung hinzu.

Ich habe es in meinen Integrationsprozess integriert, und es erfüllt seine Aufgabe.

Auf der anderen Seite ist es wahr, dass Sie die Ansichten im Nachhinein immer von Hand verschieben müssen ... Aber ehrlich gesagt ist es schon gut zu wissen, dass alle meine Aufnahmen mit der richtigen Art von Projektion an der Basis gemacht werden. Wie auch immer, ich gehe sie alle nacheinander durch, nachträglich ..

Vielen Dank, dass Sie sich damit befasst haben.

1 „Gefällt mir“