| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | AMB 2024 |
Autor
|
Thema: API: Zeichnung aus geöffnetem Dokument (2025 mal gelesen)
|
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 12. Aug. 2009 15:45 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD - Gemeinde, heute habe ich wieder einmal ein Problem, welches ich gern mit eurer Hilfe lösen möchte. Folgende Ausgangssituation: ich habe ein Dokument im SolidWorks (Baugruppe oder Teil) geöffnet. Bei mir gibt es eine Zeichnungsvorlage namens "Blanko", die als einziges eine leere vordefinierte Ansicht besitzt. Nun möchte ich folgendes per Makro: es soll die Zeichnungsvorlage öffnen und mir darin das geöffnete Dokument in die vordefinierte Ansicht platzieren. Vielleicht kann mir jemand bei der Lösung des Problems behilflich sein (eventuell mit konkretem Code - Schnipsel). Vielen Dank schon einmal im Voraus. Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HaPe Mitglied Dipl. Ing Maschinenbau, Konstrukteur, CAD-Admin
Beiträge: 1096 Registriert: 27.11.2001 i7 CPU 960@3.20GHz 8GB Ram Quadro 2000 4GB 70GB Raid 0 WIN7 prof. SP1 64 bit SWX 2010 SP5.0 SWX 2012 SP5.0 SWX 2013 SP5.0
|
erstellt am: 12. Aug. 2009 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für MWN
|
Thomas Liebezeit Mitglied Dipl.-Ing. Maschinenbau, CSWP
Beiträge: 114 Registriert: 01.07.2005 2007 SP5.0 2008 SP4.0 2009 SP3.0
|
erstellt am: 12. Aug. 2009 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für MWN
Hallo MWN, quick and dirty sieht das so aus. Code:
' ****************************************************************************** ' 08/12/09 by Thomas Liebezeit ' ****************************************************************************** Dim swApp As SldWorks.SldWorks Dim oModelDoc As SldWorks.ModelDoc2 Dim oDrawingDoc As SldWorks.DrawingDoc Dim bRetVal As Boolean Dim sFileName As String' Vorlagenpfad bitte hier anpassen Const sVorlagenPfad = "D:\SolidWorks\cad_de\018218_Vordefinierte_Zeichenasicht_fuellen\Vorlage.DRWDOT" Sub main() Set swApp = Application.SldWorks Set oModelDoc = swApp.ActiveDoc ' Dateiname von aktiven Modell holen sFileName = oModelDoc.GetPathName If sFileName = "" Then MsgBox ("Aktives Dokument ist nicht gespeichert!") Exit Sub End If ' Prüfen ob Dateiendung an Pfad hängt, wenn nicht anhängen. If InStr(sFileName, ".") = 0 Then If oModelDoc.GetType = swDocASSEMBLY Then sFileName = sFileName & ".sldasm" ElseIf oModelDoc.GetType = swDocPART Then sFileName = sFileName & ".sldprt" Else MsgBox ("Aktives Modell kann nicht eingefügt werden!") Exit Sub End If End If ' Vorlage öffnen Set oDrawingDoc = swApp.NewDocument(sVorlagenPfad, 2, 0.2794, 0.4318) bRetVal = oDrawingDoc.InsertModelInPredefinedView(sFileName) If bRetVal = False Then MsgBox ("Es ist ein Fehler aufgetreten! Einfügen des Modells in die vordefinierte Zeichnungsansicht fehlgeschlagen.") End If End Sub
Bei der Zeile Code: Set oDrawingDoc = swApp.NewDocument(sVorlagenPfad, 2, 0.2794, 0.4318)
wird ein A4 Blatt ausgewählt. Da bin ich mir nicht sicher, was ich da Einstellen soll, bzw. wie deine Vorlage ist.Mit diesem Makro werden alle in der Vorlage vorhandenen vordefinierten Zeichensichten mit dem aktiven Modell (Teil oder Baugruppe) gefüllt. Viele Grüße, Thomas ------------------ www.thomasliebezeit.net SigMa - Ist das Programm jetzt fertig, oder was? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 13. Aug. 2009 07:37 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, und vielen Dank für eure Hilfe. @HaPe: danke für den Hinweis auf den Beitrag, allerdings habe ich das schon probiert und es funktioniert so nicht! @Thomas: erst einmal Lob für die Homepage und danke für den Code! Ich werde ihn gleich einmal ausprobieren und dann hier das fertige Makro veröffentlichen, damit noch andere fleißige Helfer etwas davon haben. Vielen Dank noch mal euch beiden! Grüße Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 13. Aug. 2009 09:39 <-- editieren / zitieren --> Unities abgeben:
Hallo, anbei wie versprochen der Code des Makros. Dank Thomas funzt es jetzt auch so, wie vorgestellt. Das Makro ist so noch nicht ganz vollständig, da sich am Ende noch ein Schritt anschließt, der eine spezielle Zusatzanwendung für SolidWorks anstößt, die auf der Zeichnungsansicht eine temporäre StüLi erzeugt, die wiederum in eine SQL - Datenbank geladen wird. Die Baugruppe wird auf die leere Zeichnung gesetzt, um daraus ein tif nebenher zu erzeugen! Zeichnung und Bauteil werden abschließend geschlossen. Hier der Code:
Code: Option Explicit Const sVorlagenPfad = "S:\Vorlagen\Dokumentvorlagen\Zeichnungen\Blanko.DRWDOT" Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDraw As SldWorks.DrawingDoc Dim swView As SldWorks.View Dim vOutline As Variant Dim vPos As Variant Dim bRet As Boolean Dim vSheetX As Variant Dim vSheetY As Variant Dim dX As Integer Dim dY As Integer Dim intMultiplikator As Variant Dim intDurchlauf As Integer Dim sFileName As String Set swApp = CreateObject("SldWorks.Application") Set swModel = swApp.ActiveDoc sFileName = swModel.GetPathName If sFileName = "" Then MsgBox ("Aktives Dokument ist nicht gespeichert!") Exit Sub End If Set swDraw = swApp.NewDocument(sVorlagenPfad, 2, 0.2794, 0.4318) bRet = swDraw.InsertModelInPredefinedView(sFileName) If bRet = False Then MsgBox ("Es ist ein Fehler aufgetreten! Einfügen des Modells in die vordefinierte Zeichnungsansicht fehlgeschlagen.") End If 'alter Code Set swModel = swApp.ActiveDoc Set swDraw = swModel Set swView = swDraw.GetFirstView 'vSheetX = 297 'vSheetY = 210 Do While Not swView Is Nothing vOutline = swView.GetOutline vPos = swView.Position If swView.Name = "Blatt1" Then vSheetX = vOutline(2) * 1000# vSheetY = vOutline(3) * 1000# 'Debug.Print "vSheetX " & vSheetX 'Debug.Print "vSheetY " & vSheetY End If If swView.Name = "Zeichenansicht1" Then 'Debug.Print "View = " + swView.Name 'Debug.Print " Pos = (" & vPos(0) * 1000# & ", " & vPos(1) * 1000# & ") mm" 'Debug.Print " Min = (" & CInt(vOutline(0) * 1000#) & ", " & CInt(vOutline(1) * 1000#) & ") mm" 'Debug.Print " Max = (" & CInt(vOutline(2) * 1000#) & ", " & CInt(vOutline(3) * 1000#) & ") mm" 'Debug.Print " dX = " & CInt((vOutline(2) - vOutline(0)) * 1000#) & " mm" 'Debug.Print " dY = " & CInt((vOutline(3) - vOutline(1)) * 1000#) & " mm" dX = CInt((vOutline(2) - vOutline(0)) * 1000#) dY = CInt((vOutline(3) - vOutline(1)) * 1000#) 'If dX > vSheetX Then ' intMultiplikator = vSheetX / dX 'ElseIf dY > vSheetY Then ' intMultiplikator = vSheetY / dY 'ElseIf dX < vSheetX Then 'intMultiplikator = vSheetX / dX 'ElseIf dY < vSheetY Then ' intMultiplikator = vSheetY / dY 'End If Select Case True Case dX > vSheetX intMultiplikator = vSheetX / dX Case dY > vSheetY intMultiplikator = vSheetY / dY Case dX < vSheetX intMultiplikator = vSheetX / dX Case dY < vSheetY intMultiplikator = vSheetY / dY End Select swView.ScaleDecimal = swView.ScaleDecimal * intMultiplikator 'bRet = swModel.EditRebuild3: Debug.Assert bRet swModel.ForceRebuild3 (True) swModel.ViewZoomtofit2 If intDurchlauf < 1 Then Set swView = swDraw.GetFirstView intDurchlauf = intDurchlauf + 1 End If vOutline = swView.GetOutline vPos = swView.Position End If Set swView = swView.GetNextView Loop swApp.CloseAllDocuments (True) End Sub
Achso: was macht das Makro? Das geöffnete SolidWorks Dokument (Bauteil, oder Baugruppe) wird auf ein Zeichenblatt (in meinem Fall total leer) in die darin vorhandene Zeichnungvoransicht gesetzt. Danach wird der Maßstab so verändert, dass die Ansicht komplett auf das Blatt passt und es wird auf die gesamte Ansicht gezoomt! Bei mir folgt jetzt noch der Schritt, dass meine Zusatzanwendung angestoßen wird, was sicherlich die wenigsten mit brauchen werden, da es zu speziell ist. Vielen Dank noch mal für die Hilfe an Thomas und HaPe. GrüßeTobias PS: Für Verbesserungsvorschläge bin ich natürlich immer zu haben! [Diese Nachricht wurde von MWN am 16. Sep. 2009 editiert.] [Diese Nachricht wurde von MWN am 16. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|