Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  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

Anzeige:

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
  
PLM TechnologieForum Hannover
Autor Thema:  SWX-API: Größte Modellansicht für DXF-Export auswählen? (925 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: 720
Registriert: 17.01.2007

SWX 2019 SP5
AutoCAD 2019
Win 10 pro 64 bit
Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz
64GB RAM
Nvidia Quadro M5000
SWx EPDM

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: 3682
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: 720
Registriert: 17.01.2007

SWX 2019 SP5
AutoCAD 2019
Win 10 pro 64 bit
Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz
64GB RAM
Nvidia Quadro M5000
SWx EPDM

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)2024 CAD.de | Impressum | Datenschutz