Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

06.03.2017

Inventor automatisieren: Programmieren für Konstrukteure (Teil 9)

Teil 8 verpasst? Dann erst mal hier weiter!

Alle Beiträge der Serie

Im achten Teil haben wir uns angeschaut, wie wir mehrere Programmschritte auf einmal rückgängig machen können. Heute wollen wir was machen, was die allermeisten von euch brauchen können, dass Ausdrucken von Zeichnungen. Ein Beispiel für die Druckfunktion finden wir in der API-Hilfe in den Samples:

image

Den Bespielcode bitte markieren und in unser Benutzer-VBA-Projekt einfügen. Ich habe die Public Sub noch umbenannt in ZeichnungDrucken. Das Beispiel wird bei euch wahrscheinlich nicht funktionieren, weil ca. in der Mitte des Quelltextes ein Drucker Namens "HP LaserJet 4000...." als Ausgabedrucker angegeben ist.

oDrgPrintMgr.Printer = "HP LaserJet 4000 Series PCL 6"

Wenn ihr den nicht habt, dann wird es mit dem Drucken nichts werden. Hier muss also ein Druckername exakt so eingegeben werden, wie der Drucker heißt. Ich nehme zu Testzwecken den PDFCreator, damit ich beim testen nicht unnötig viele Blätter verdrucke.

Im unteren Bereich werden die Ausgabeeigenschaften angegeben ähnlich wie im Druckendialog im Inventor.

oDrgPrintMgr.ScaleMode = kPrintBestFitScale
oDrgPrintMgr.PaperSize = kPaperSizeA4
oDrgPrintMgr.PrintRange = kPrintAllSheets
oDrgPrintMgr.Orientation = kLandscapeOrientation

Wenn wir den Druckernamen angepasst haben, dann können wir einen ersten Testlauf machen, sobald eine Zeichnung geöffnet wurde.

Bei unserer Druckroutine ist fix hinterlegt, das A4 als Blattgröße und Querformat genutzt wird und alle Blätter gedruckt werden. Wir ändern nun den Quelltext das:

  1. Nur das aktuelle Blatt gedruckt wird
  2. Bei Blattgröße A4 beim Drucker auch A4 und bei A3 und größer A3 genutzt wird
  3. Die Blattausrichtung beim Drucken dem des Blattes in der Zeichnung entspricht.

Setzen wir zur Untersuchung des oDrgDoc-Objekts eine Haltepunkt unterhalb und schauen in das Objekt hinein.

image

Wir sehen im oDrgDoc-Objekt ein ActiveSheet und darin die Eigenschaft Orientation und auch Size. Damit können wir If-Abfragen machen. Zudem die PrintRange-Eigenschaft ändern (Alles bis zum = löschen das = neu tippen dann kommen die Optionen zur Auswahl):

image

Das ergibt in Summe folgendes Programm, das soweit alle Anforderungen erfüllt:

Public Sub ZeichnungDrucken()
    'Nur weiter wenn das aktuelle Dokument eine Zeichnung ist
    If ThisApplication.ActiveDocument.DocumentType = kDrawingDocumentObject Then
        
        'Verweis auf die aktuelle Zeichnung as DrawingDocument (nicht nur Document!)
        Dim oDrgDoc As DrawingDocument
        Set oDrgDoc = ThisApplication.ActiveDocument
        
        'Ein DruckerManager-Objekt erstellen. Dieses Objekt hat Eigenschaften und Methoden
        'um die Druckeigenschaften zu definieren und den Druck abzuschicken.
        Dim oDrgPrintMgr As DrawingPrintManager
        Set oDrgPrintMgr = oDrgDoc.PrintManager
        
        'Den Drucker festlegen auf den gedruckt werden soll
        'Auskommentieren für Windows Standarddrucker
        oDrgPrintMgr.Printer = "PDFCreator"
        
        'Druckeigenschaften definieren
        oDrgPrintMgr.ScaleMode = kPrintBestFitScale
        
        'Abhängig von der Blattgröße die Druckblattgröße A4 oder A3 wählen.
        If oDrgDoc.ActiveSheet.Size = kA4DrawingSheetSize Then
            oDrgPrintMgr.PaperSize = kPaperSizeA4
        Else
            oDrgPrintMgr.PaperSize = kPaperSizeA3
        End If
            
        oDrgPrintMgr.PrintRange = kPrintCurrentSheet
        
        'Blattausrichtung beim Druckenr der Ausrichtung der Inventorzeichnungsseite anpassen
        If oDrgDoc.ActiveSheet.Orientation = kLandscapePageOrientation Then
            oDrgPrintMgr.Orientation = kLandscapeOrientation
        Else
            oDrgPrintMgr.Orientation = kPortraitOrientation
        End If
        
        'Druck abschicken
        oDrgPrintMgr.SubmitPrint
    End If
End Sub

Als kleinen Bonus nutzen wir nun eine Kopie des Public Sub Baugruppe, das ein paar Teile vorher gemacht haben, um alle Zeichnungen der Komponenten einer IAM zu finden, zu öffnen und dann die Druckfunktion zu öffnen. Also eine Kopie der Public Sub Baugruppe erstellen und die Zeile

Call oZeichDoc.SaveAs(oZeichDoc.FullFileName & ".pdf", True)

ersetzen durch den Aufruf der Druck Sub

Call ZeichnungDrucken

Dann im oberen Bereich auf alle enthaltenen Dateien zugegriffen wird (inkl. aller Unterbaugruppen!), kann es vorkommen, dass sehr viele Zeichnung gedruckt werden. Wir ändern das ganze von Set oRefDocs = oDoc.AllReferencedDocuments auf Set oRefDocs = oDoc.ReferencedDocuments.

So sieht das fertige Programm aus (Kommentare habe ich z.T. gelöscht!):

Public Sub IAMKompDrucken()

'Ruhe im Pu** :)
ThisApplication.SilentOperation = True

Dim oDoc As AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument

Dim oRefDocs As DocumentsEnumerator
Set oRefDocs = oDoc.ReferencedDocuments 'oDoc.AllReferencedDocuments

Dim oRefDoc As Document
'Var. die den Pfad zur Zeichnung enthält
Dim Zeichnungpfad As String
'Var die die die zu öffnende Zeichnung enthält
Dim oZeichDoc As Document
For Each oRefDoc In oRefDocs
    
    Zeichnungpfad = Left(oRefDoc.FullFileName, (Len(oRefDoc.FullFileName) - 4))
    
    Dim objFso As Object
    Set objFso = CreateObject("Scripting.FileSystemObject")
    
    'Mit dem FileSystemobject und dessen Funktion FileExists prüfen wir, ob die Datei deren Pfad sich aus
    'der Var Zeichnungpfad und der Dateiendung .dwg (ODER IDW, WENN IHR IDW NUTZT. ENTSPRECHEND ANPASSEN!)
    If objFso.FileExists(Zeichnungpfad & ".dwg") Then

        Zeichnungpfad = Zeichnungpfad & ".dwg"
        Set oZeichDoc = ThisApplication.Documents.Open(Zeichnungpfad, True)
        
        Call ZeichnungDrucken
        'Jetzt die Zeichnung speichern und schließen
        Call oZeichDoc.Close(False)
    End If
    
Next

'Inventor darf wieder Dialoge anzeigen
ThisApplication.SilentOperation = False
End Sub

Jetzt haben wir zum Einen eine Druckfunktion für eine einzelne Zeichnung und zum anderen können wir alle Zeichnungen zu Komponenten in einer IAM suchen und drucken. Das kann einem das Leben schon sehr erleichtern!

Hausaufgaben bis zum nächsten mal:

  1. In der Public Sub IAMKompDrucken am Anfang eine Abfrage ob nur Komponenten der ersten Ebene (ReferencedDocuments) oder alle Ebenen berücksichtigt werden (AllReferencedDocuments)
  2. Spiele mit den Druckoptionen etwas. Wie kann ich alles als Schwarz drucken? Welche Eigenschaften hat das DrawingPrintManager Object? Schau dir das Objekt in der Inventor API-Hilfe an.

Bis zum nächsten mal!

Weiter zu Teil 10.

3 Kommentare:

  1. Hallo, danke für deine super Artikel, bin mir daraus gerade etwas am Basteln.

    Nun klappt es mit dem Erzeugen der PDFs einwandfrei, wenn ich den Drucker "Adobe PDF" (so heisst er bei mir) verwende.
    Verwende ich aber den Netzwerkdrucker "ps-rc-170 auf sv-rc-071", geht leider gar nichts.
    Verwende ich den weiteren "Drucker" Snagit13 klappts auch wieder einwandfrei.

    Ich habe nun schon rumprobiert mit dem Names des Netzwerkdruckers, kriegs aber nicht zum Laufen. Hast du mir einen Input?

    Danke dir

    AntwortenLöschen
    Antworten
    1. las dir mal die Namen in einem DOS Fenster mittels net use anzeigen und nutzen den dort angezeigten. vielleicht was mit \\servername\drucker

      Löschen

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: