| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
 | Sind Ihre Produkte schon mechatronisch gedacht? - Effiziente Entwicklung mit SOLIDWORKS, ein Webinar am 26.09.2025
|
Autor
|
Thema: VisualBasic: DXF speichern (790 mal gelesen)
|
P.Reidel Mitglied

 Beiträge: 53 Registriert: 17.12.2004 SolidWorks 2007
|
erstellt am: 04. Feb. 2005 14:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich habe ein Problem mit der Programmierung (VisualBasic 6) von SolidWorks 2004: Es soll ein Konturzug in einer SWX -Zeichnung in DXF gespeichert werden. Das Problem dabei ist, dass der Konturzug in der unteren linken Ecke platziert werden muß (ähnlich wie in der Zeichnung dargestellt). Im Moment gehe ich über den Umweg, dass die Zeichnung in DXF gespeichert wird (über das Programm), wobei der Konturzug noch nicht platziert ist. Danach muß diese DXF-Datei nochmal in SWX per Hand eingeladen werden, wobei vom Benutzer die X- und Y-Positionen (beim DXF-Import) eingegeben werden müssen, die ihm vom Programm anzeigt werden. Ich habe es auch schon mit "vView = swView.position" versucht, habe aber nicht rausbekommen, auf welchen Punkt der Zeichenansicht sich dieser Befehl bezieht. Denn wenn ich X=0 und Y=0 angegeben hatte, lag die Zeichenansicht nicht auf dem Zeichenblatt-Nullpunkt, so wie ich es vermutet hatte - wenn ich davon ausgehe, dass der Nullpunkt der Zeichenansicht identisch mit dem Nullpunkt des dargestellten Teiles ist. Vielleicht hat jemand eine Idee, wie ich da weiterkomme. Vorausgesetzt, irgendjemand kapiert noch, was ich meine.
Danke schon im Voraus Petra
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GWS Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau

 Beiträge: 2415 Registriert: 23.07.2001 SWX 24 SP3, PDM Prof. auf Dell Precision 3640 /32GB / NVDIA Quadro P2200 / Win 11
|
erstellt am: 04. Feb. 2005 14:56 <-- editieren / zitieren --> Unities abgeben:          Nur für P.Reidel
Hi Petra, nur so ne skizzierte Idee von einem nicht Programmierer. In der Acad-Ecke gab es ne Funktion boundingbox oder so ähnlich. Es werden also (2D) die Maximalwerte links unten bzw. rechts oben ausgegeben. Das sollte Dir auf die Sprünge helfen. Der DWG Editor von SWX 5 müsste auch LISP interpretieren können und die Leute im ACAD Forum sollten nen Tipp haben, wie die dazu gehörigen Variablen heissen. Mit diesem Offset kannst Du automatisch alle Elemente dahin schieben wohin Du sie brauchst. Ich bin mir aber fast sicher, dass das SWX auch ohne LISP Krücke auf die Reihe bekommt. Grüße Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BWarneke Mitglied Consulting

 Beiträge: 84 Registriert: 14.07.2004 HP EliteBook 8730w alle SWX-Versionen
|
erstellt am: 04. Feb. 2005 16:51 <-- editieren / zitieren --> Unities abgeben:          Nur für P.Reidel
Hallo Petra, Der Nullpunkt einer Zeichnung liegt normalerweise in der "Blattecke" links unten. Bei Dir scheint der Nullpunkt verschoben zu sein. Zeichne mal eine Linie und gebe im Eigenschaftsmanager bei den x/y-Wert für den Anfangspunkt der Linie jeweils 0 ein. Dann weist Du wo bei Dir der Nullpunkt ist. Ich schätze mal, der liegt sonstwo. Nun exportier die Zeichnung nach dwg/dxf und lade sie in ACAD oder so. Da zeichnest Du auch wieder eine linie, die auch bei x/y 0 beginnt(Linie klicken und 0,0 eingeben). Messe nun die x/y Differenz zwischen der SW-Linie und der ACAD-Linie. Um diesen Wert musst Du Deine SW-Zeichnungsvorlage ändern: Vorlage öffnen und mit den RMB auf den Zeichnungsnamen im FM ganz oben, Option "Verschieben". Da kannst Du dann den Diffrenzwert eingeben und alles sollte dann wieder passen. Gruß, Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BWarneke Mitglied Consulting

 Beiträge: 84 Registriert: 14.07.2004 HP EliteBook 8730w alle SWX-Versionen
|
erstellt am: 04. Feb. 2005 16:54 <-- editieren / zitieren --> Unities abgeben:          Nur für P.Reidel
...Wird Zeit das Wochenende wird.... Habe jetzt erst gesehen, das Du was angehangen hast. Da passt ja alles in der Zeichnung, was den Nullpunkt betrifft. Trotzdem: Gut das wir darüber gesprochen haben... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P.Reidel Mitglied

 Beiträge: 53 Registriert: 17.12.2004 SolidWorks 2007
|
erstellt am: 07. Feb. 2005 09:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo GWS, das mit der boundingbox muss ich mir mal anschauen. Sowas ähnliches muss der Benutzer meines Programms ja auch machen - währe aber echt besser, wenn das Programm das selbst könnte. Hallo BWarneke,
mein Problem ist nicht der Nullpunkt der Zeichnung an sich (der liegt unten links), sondern der einzelnen Zeichenansichten. Es gibt da prinzipiell zwei Wege: 1. die Zeichenansicht wird schon im SWX richtig positioniert und als DXF abgespeichert und 2. die SWX -Zeichnung wird als DXF gespeichert, das DXF wird in SWX geöffnet und dabei kann die Positionierung geändert werden. Den 2. Weg gehe ich gerade. Mit der Einschränkung, dass das Programm nicht alles automatisch machen kann: die Positionierungs-Werte für das Einlesen der DXF-Datei müssen von Hand eingegeben werden. Das heisst, der Benutzer wird vom Programm aufgevordert die DXF-Datei in SWX einzuladen und in die Felder "Positionieren" die angezeigten Werte zu übertragen. Da das doch etwas Aufwand bedeutet und das Programm schon die Positionierung berechnen muss, warum kann es nicht auch die Positionierung an sich vornehmen? Besser wäre demnach der 1. Weg. Es gibt auch einen VB-Befehl (part.position), mit dem eine Zeichenansicht auf einem Zeichenblatt verschoben werden kann. Mein Problem dabei liegt darin, dass ich nicht weis, wo der Bezugspunkt der Zeichenansicht ist. Sage ich, die Zeichenansicht soll auf Punkt 0/0 verschoben werden, so wird die Zeichenansicht irgendwo unten links liegen. Ich kann vorher nur nicht sagen, wo das genau sein wird, da ich den Nullpunkt der Zeichenansicht nicht kenne. Ich hoffe nun, dass mein Problem etwas deutlicher geworden ist. Vielleicht hatte schon mal jemand ein ähnliches Problem und kann mir helfen. Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
d_b Mitglied vorhanden

 Beiträge: 88 Registriert: 15.03.2001 42
|
erstellt am: 07. Feb. 2005 09:43 <-- editieren / zitieren --> Unities abgeben:          Nur für P.Reidel
Hallo Petra, folgender Code verschiebt die linke, untere Ecke der ersten Zeichenansicht in die linke, untere Ecke des Blattes: --------------------CUT Option Explicit Dim swApp As Object Dim Part As Object Sub main() Dim viewx As View Dim posx As Variant Dim outx As Variant Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc
Set viewx = Part.GetFirstView Set viewx = viewx.GetNextView posx = viewx.position outx = viewx.GetOutline posx(0) = posx(0) - outx(0) posx(1) = posx(1) - outx(1) viewx.position = posx End Sub ---------------------------- CUT gruß, d_b Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P.Reidel Mitglied

 Beiträge: 53 Registriert: 17.12.2004 SolidWorks 2007
|
erstellt am: 07. Feb. 2005 10:16 <-- editieren / zitieren --> Unities abgeben:         
OK, Fehler von mir! Ich muss nicht die Ecke der Zeichenansicht auf den Blatt-Nullpunkt legen, sondern die linke Ecke der Kontur die in der Zeichenansicht dargestellt wird. Oder auch einfacher den Nullpunkt des Teils, welches in der Zeichenansicht dargestellt ist (von da aus kann ich den Abstand zur Kontur berechnen). Aber trotzdem danke, das habe ich so noch nicht gekannt. Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
d_b Mitglied vorhanden

 Beiträge: 88 Registriert: 15.03.2001 42
|
erstellt am: 07. Feb. 2005 15:14 <-- editieren / zitieren --> Unities abgeben:          Nur für P.Reidel
dann soltte folgendes helfen: -----------------------CUT Option Explicit Dim swApp As Object Dim Part As Object Dim boolstatus As Long Dim mutil As MathUtility Dim viewmat As MathTransform Sub main() Dim viewx As View Dim mp1 As MathPoint Dim posx As Variant Dim outx As Variant Dim zc(2) As Double Set swApp = Application.SldWorks Set mutil = swApp.GetMathUtility Set Part = swApp.ActiveDoc Set viewx = Part.GetFirstView Set viewx = viewx.GetNextView Set viewmat = viewx.ModelToViewTransform posx = viewx.position outx = viewx.GetOutline 'Modellkoordinaten zc(0) = -58.8 / 1000# 'x zc(1) = 37.43 / 1000# 'y zc(2) = 0 'z Set mp1 = mutil.CreatePoint(zc) Set mp1 = mp1.MultiplyTransform(viewmat) posx(0) = posx(0) - mp1.ArrayData(0) posx(1) = posx(1) - mp1.ArrayData(1) viewx.position = posx Part.GraphicsRedraw2 End Sub ---------------------CUT Gruß, d_b Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
P.Reidel Mitglied

 Beiträge: 53 Registriert: 17.12.2004 SolidWorks 2007
|
erstellt am: 07. Feb. 2005 15:59 <-- editieren / zitieren --> Unities abgeben:         
|