Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Zeichnung aus geöffnetem Dokument

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
  
AMB 2024
Autor Thema:  API: Zeichnung aus geöffnetem Dokument (2025 mal gelesen)
MWN
Mitglied
Dipl.-Ing.


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

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 12. Aug. 2009 15:45    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 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


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

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 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 MWN 10 Unities + Antwort hilfreich

Hallo Tobias,

ein paar Beiträge weiter unten: http://ww3.cad.de/foren/ubb/Forum2/HTML/018215.shtml#000004

Gruß HaPe

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

Thomas Liebezeit
Mitglied
Dipl.-Ing. Maschinenbau, CSWP


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

Beiträge: 114
Registriert: 01.07.2005

2007 SP5.0
2008 SP4.0
2009 SP3.0

erstellt am: 12. Aug. 2009 17:55    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 MWN 10 Unities + Antwort hilfreich


018218_Fill_predefined_views.zip

 
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.


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

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 13. Aug. 2009 07:37    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

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.


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

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 13. Aug. 2009 09:39    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,

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üße

Tobias

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 >>)

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