Hot News:
   

Mit Unterstützung durch:

  Foren auf CAD.de
  SolidWorks
  SWX-API: Größte Modellansicht für DXF-Export auswählen?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

SOLIDWORKS Referenzbericht: ROSE Systemtechnik - Perfekte Zusammenarbeit von Mensch und Maschine

Mehr Videos >>>

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Wie kann Simulation Ihre Produktentwicklung beschleunigen?, ein Webinar am 07.08.2025
Autor Thema:  SWX-API: Größte Modellansicht für DXF-Export auswählen? (1057 / mal gelesen)
CAD-Maler
Mitglied
Konstrukteur / CAD-Admin / Mädchen für alles


Sehen Sie sich das Profil von CAD-Maler an!   Senden Sie eine Private Message an CAD-Maler  Schreiben Sie einen Gästebucheintrag für CAD-Maler

Beiträge: 729
Registriert: 17.01.2007

SWX 2023 SP5
Draftsight 2023
Win 11 Enterprise
Intel i7-13700 2.10 GHz
64GB RAM
Nvidia RTX A2000 12GB
SWx EPDM
AP+
CSWE 2018

erstellt am: 28. Jul. 2017 10:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo, wertes WBF!

Ich bastel mir gerade ein VBA-Makro zum Exportieren von DXF-Dateien aus 3D-Modellen (zum späteren Einlesen auf der Laserschneidmaschine) zusammen.

Dafür hole ich mir mit folgendem Code die Ansicht mit den größten Abmessungen:

Code:
Dim varAlignment As Variant
Dim dataAlignment(11) As Double
Dim varViews As Variant
Dim dataViews(0) As String
Dim vBoundBox As Variant
Dim Lx, Ly, Lz As String

    dataAlignment(0) = 0#
    dataAlignment(1) = 0#
    dataAlignment(2) = 0#
    dataAlignment(3) = 1#
    dataAlignment(4) = 0#
    dataAlignment(5) = 0#
    dataAlignment(6) = 0#
    dataAlignment(7) = 1#
    dataAlignment(8) = 0#
    dataAlignment(9) = 0#
    dataAlignment(10) = 0#
    dataAlignment(11) = 1#
   
    varAlignment = dataAlignment
   
   
    'Ansicht nach max. Größe auswählen
    vBoundBox = Part.GetPartBox(True)

    Lx = Str(Abs(vBoundBox(0)) + Abs(vBoundBox(3))) ' Länge x
    Ly = Str(Abs(vBoundBox(1)) + Abs(vBoundBox(4))) ' Länge y
    Lz = Str(Abs(vBoundBox(2)) + Abs(vBoundBox(5))) ' Länge z
       
    If Lx >= Ly And Lx >= Lz And Ly >= Lz Then
        dataViews(0) = "*Vorderseite"
    ElseIf Ly >= Lx And Ly >= Lz And Lx >= Lz Then
        dataViews(0) = "*Vorderseite"
    ElseIf Lz >= Lx And Lz >= Ly And Lx >= Ly Then
        dataViews(0) = "*Oben"
    Else
      dataViews(0) = "*Links"
    End If
   
    varViews = dataViews
   
    Part.ExportToDWG2 saveFileName, FilePath, swExportToDWG_ExportAnnotationViews, True, varAlignment, False, False, 0, varViews


Das funktioniert bei den meisten Teilen ganz gut. Leider haben wir auch einige (viele  ) Teile, bei denen das Koordinatensystem gedreht ist (Alt- oder Fremddaten). Bei denen stimmen natürlich die Ansichten dann nicht mehr, d.h. statt Vorderseite müsste es dann Oben sein usw.

Mir fehlt irgendwie der Ansatz, wie ich das Ganze handeln soll.
Kann man irgendwie die Orientierung des Koordinatensystems auslesen? Oder vielleicht eine neue benutzerdefinierte Ansicht erzeugen und mit der dann exportieren (würde das überhaupt funktionieren?)? Vielleicht ein ganz anderes Prozedere?

Ich bin offen für alle Vorschläge oder Denkanstöße.

Danke, Jens

------------------
CSWA, CSWP, CSWPA-SM & -SU =)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



Sehen Sie sich das Profil von Torsten Niemeier an!   Senden Sie eine Private Message an Torsten Niemeier  Schreiben Sie einen Gästebucheintrag für Torsten Niemeier

Beiträge: 3878
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 29. Jul. 2017 23:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CAD-Maler 10 Unities + Antwort hilfreich

Hallo Jens.

Ich schlage mal eine nur kleine Abwandlung vor:

Mit:
ModelView::Orientation3
in Deinen IF-Fallunterscheidungen die Ansicht in die richtige Richtung drehen.

Mit:
dataViews(0) = "*Current"
die aktuelle Ansicht für den Export benutzen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Maler
Mitglied
Konstrukteur / CAD-Admin / Mädchen für alles


Sehen Sie sich das Profil von CAD-Maler an!   Senden Sie eine Private Message an CAD-Maler  Schreiben Sie einen Gästebucheintrag für CAD-Maler

Beiträge: 729
Registriert: 17.01.2007

SWX 2023 SP5
Draftsight 2023
Win 11 Enterprise
Intel i7-13700 2.10 GHz
64GB RAM
Nvidia RTX A2000 12GB
SWx EPDM
AP+
CSWE 2018

erstellt am: 10. Aug. 2017 13:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Torsten Niemeier:
modelView::Orientation3

Danke Torsten, das war der richtige Tipp. Ich musste mich zwar erstmal reintüfteln, wie man das mit der Orientierungsmatrix handhabt, aber jetzt habe ich eine Lösung gefunden. Da ich nur 2 Fälle unterscheiden muss (Standard-SolidWorks-Koordinatensystem (y nach oben, x nach rechts) und unser Maschinenkoordinatensystem (z nach oben, x nach rechts)) reicht es, wenn ich anhand der einzelnen Vorzeichen prüfe, welcher der beiden Fälle eintritt und die Ansichten entsprechend auswähle:

Code:

Dim varAlignment As Variant
Dim dataAlignment(11) As Double
Dim varViews As Variant
Dim dataViews(0) As String
Dim vBoundBox As Variant
Dim swView As IModelView
Dim value As MathTransform

    dataAlignment(0) = 0#
    dataAlignment(1) = 0#
    dataAlignment(2) = 0#
    dataAlignment(3) = 1#
    dataAlignment(4) = 0#
    dataAlignment(5) = 0#
    dataAlignment(6) = 0#
    dataAlignment(7) = 1#
    dataAlignment(8) = 0#
    dataAlignment(9) = 0#
    dataAlignment(10) = 0#
    dataAlignment(11) = 1#
   
    varAlignment = dataAlignment
   
    'Orientierung des Models auslesen
    Set swView = Part.GetFirstModelView    'erste Ansicht holen
       
    Set value = swView.Orientation3   'Orientierungsmatrix holen
   
'    Debug.Print "    Origin                    = (" & value.ArrayData(9) & "; " & value.ArrayData(10) & "; " & value.ArrayData(11) & ") mm"
'    Debug.Print "    Rotational sub-matrix 1   = (" & value.ArrayData(0) & "; " & value.ArrayData(1) & "; " & value.ArrayData(2) & ")"
'    Debug.Print "    Rotational sub-matrix 2   = (" & value.ArrayData(3) & "; " & value.ArrayData(4) & "; " & value.ArrayData(5) & ")"
'    Debug.Print "    Rotational sub-matrix 3   = (" & value.ArrayData(6) & "; " & value.ArrayData(7) & "; " & value.ArrayData(8) & ")"
   
    'Matrix für alte Teile:
    ' + - +
    ' + + +
    ' - - +
   
    'Matrix für neue Teile:
    ' + - +
    ' + + -
    ' + + +
   
    'Wenn also value.ArrayData(5) negativ ist -> neues Teil
    vNeuesTeil = IIf(value.ArrayData(5) < 0, True, False)
   
    'Ansicht nach max. Größe auswählen
    vBoundBox = Part.GetPartBox(False)

    Lx = Round(Abs(vBoundBox(0)), 1) + Round(Abs(vBoundBox(3)), 1) ' Länge x
    Ly = Round(Abs(vBoundBox(1)), 1) + Round(Abs(vBoundBox(4)), 1) ' Länge y
    Lz = Round(Abs(vBoundBox(2)), 1) + Round(Abs(vBoundBox(5)), 1) ' Länge z
       
   
    If vNeuesTeil Then
        If Lx >= Lz And Lx >= Ly And Lz >= Ly Then
            dataViews(0) = "*Vorderseite"
        ElseIf Lz >= Lx And Lz >= Ly And Lx >= Ly Then
            dataViews(0) = "*Vorderseite"
        ElseIf Ly >= Lx And Ly >= Lz And Lx >= Lz Then
            dataViews(0) = "*Oben"
        Else
           dataViews(0) = "*Links"
        End If
    Else
        If Lx >= Ly And Lx >= Lz And Ly >= Lz Then
            dataViews(0) = "*Vorderseite"
        ElseIf Ly >= Lx And Ly >= Lz And Lx >= Lz Then
            dataViews(0) = "*Vorderseite"
        ElseIf Lz >= Lx And Lz >= Ly And Lx >= Ly Then
            dataViews(0) = "*Oben"
        Else
           dataViews(0) = "*Links"
        End If
    End If
   
    varViews = dataViews
   
    Part.ExportToDWG2 saveFileName, FilePath, swExportToDWG_ExportAnnotationViews, True, varAlignment, False, False, 0, varViews


Gruß, Jens

------------------
CSWA, CSWP, CSWPA-SM & -SU =)

[Diese Nachricht wurde von CAD-Maler am 10. Aug. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz