IDW-Update ist eine tolle Erweiterung für Autodesk Inventor. Mit diesem Tool können ausgewählte Zeichnungsressourcen ersetzt werden. Als Vorlage dient eine andere Zeichnung, in diesem Beispiel die Norm.idw (Norm.dwg funktioniert auch). Als Ressourcen können die Zeichnungsrahmen und das Schriftfeld definiert werden.
Funktionen im Überblick:
- löscht alte Schriftfelder aus aktiver Zeichnung (aus den Zeichnungsressourcen und aus Blatt)
- löscht alte Zeichnungsrahmen aus aktiver Zeichnung (aus den Zeichnungsressourcen und aus Blatt)
- kopiert neues Schriftfeld aus Vorlagendatei in die aktive Zeichnung (in die Zeichnungsressourcen)
- kopiert neue Zeichnungsrahmen aus Vorlagedatei in die aktive Zeichnung (in die Zeichnungsressourcen)
- fügt neues Schriftfeld aus den Zeichnungsressourcen ins aktive Blatt ein
- fügt neuen Schriftrahmen aus den Zeichnungsressourcen in aktive Blatt ein (das Blattformat wird
berücksichtigt)
Implementieren kann man dieses Tool über den Programmpunkt “VBA-Editor” (Extras -> VBA-Editor).
Die Autodesk Inventor VBA Erweiterung ist versionsunabhängig (Inventor LT wird nicht unterstützt).
In diesem Fall habe ich das Tool mit Autodesk Inventor 2018 & 2019 genutzt.
- [download id=”22899″]
Sub IDW_Updaten() 'ersetzt die Zeichnungsressourcen der aktuellen Zeichnung durch die der Templateressourcen If ThisApplication.ActiveDocumentType = kDrawingDocumentObject Then Dim ZielDoc As DrawingDocument Set ZielDoc = ThisApplication.ActiveDocument Dim Blatt As Sheet Set Blatt = ZielDoc.ActiveSheet Dim i, j As Integer Dim zahl1 As Long Dim zahl2 As Long 'auslesen des bisher eingefügten Zeichnungsrahmen ( diese Funktion kann entfernt werden, wenn keine Blattformate übertragen werden sollen) 'anhand der ausgewählten Blattgröße, wird der neue Rahmen gesetzt Dim Blatthoehe As Double Dim Blattbreite As Double Blattbreite = Blatt.Width Blatthoehe = Blatt.Height Dim Blattgroesse As String Dim Format As String Blattgroesse = Blattbreite & "x" & Blatthoehe Select Case Blattgroesse Case "21x29,7" Format = "A4" Case "42x29,7" Format = "A3" Case "59,4x42" Format = "A2" Case "84,1x59,4" Format = "A1" Case "118,9x84,1" Format = "A0" Case "148,6x84,1" Format = "A0x125" Case "178,4x84,1" Format = "A0x150" End Select 'vorhandenen Blattformate aus aktiver Zeichnung löschen zahl1 = ZielDoc.SheetFormats.Count For i = 1 To zahl1 On Error Resume Next ZielDoc.SheetFormats.Item(zahl1 + 1 - i).Delete Next 'vorhandenes Schriftfeld aus aktiver Zeichnung löschen On Error Resume Next Blatt.TitleBlock.Delete zahl1 = ZielDoc.TitleBlockDefinitions.Count For i = 1 To zahl1 On Error Resume Next ZielDoc.TitleBlockDefinitions.Item(zahl1 + 1 - i).Delete Next 'vorhandenen Rahmen aus aktiver Zeichnung löschen On Error Resume Next Blatt.Border.Delete j = ZielDoc.BorderDefinitions.Count For i = 1 To j ZielDoc.BorderDefinitions.Item(j + 1 - i).Delete Next 'Ressourcen der Template definieren und Kopieren Dim oSketchedSymbolDef As SketchedSymbolDefinition Dim QuellDoc As DrawingDocument 'im folgenden Abschnitt muss der Pfad des Templates angegeben werden Set QuellDoc = ThisApplication.Documents.Open("C:InventorTemplatesNorm.idw", False) 'je nach zu übertragenden Blattformaten müssen die folgenden Zeilen entfernt oder erweitert werden Dim QuellRahmen1, QuellRahmen2, QuellRahmen3, QuellRahmen4, QuellRahmen5, QuellRahmen6, QuellRahmen7 As BorderDefinition Set QuellRahmen1 = QuellDoc.BorderDefinitions.Item("A3") Set QuellRahmen2 = QuellDoc.BorderDefinitions.Item("A2") Set QuellRahmen3 = QuellDoc.BorderDefinitions.Item("A1") Set QuellRahmen4 = QuellDoc.BorderDefinitions.Item("A0") Set QuellRahmen5 = QuellDoc.BorderDefinitions.Item("A0x125") Set QuellRahmen6 = QuellDoc.BorderDefinitions.Item("A0x150") Set QuellRahmen7 = QuellDoc.BorderDefinitions.Item("A4") Dim ZielRahmen1, ZielRahmen2, ZielRahmen3, ZielRahmen4, ZielRahmen5, ZielRahmen6, ZielRahmen7 As BorderDefinition Set ZielRahmen1 = QuellRahmen1.CopyTo(ZielDoc, True) Set ZielRahmen2 = QuellRahmen2.CopyTo(ZielDoc, True) Set ZielRahmen3 = QuellRahmen3.CopyTo(ZielDoc, True) Set ZielRahmen4 = QuellRahmen4.CopyTo(ZielDoc, True) Set ZielRahmen5 = QuellRahmen5.CopyTo(ZielDoc, True) Set ZielRahmen6 = QuellRahmen6.CopyTo(ZielDoc, True) Set ZielRahmen7 = QuellRahmen7.CopyTo(ZielDoc, True) Dim QuellSchriftfeld As TitleBlockDefinition 'Wert der Klammer muss das zu kopierende Schriftfeld sein Set QuellSchriftfeld1 = QuellDoc.TitleBlockDefinitions.Item("Schriftfeld Contelos") Dim ZielSchriftfeld1 As TitleBlockDefinition Set ZielSchriftfeld1 = QuellSchriftfeld1.CopyTo(ZielDoc, True) 'fügt den ausgelesenen Zeichnungsrahmen ins aktive Blatt ein Call Blatt.AddBorder(Format) 'fügt neues Schriftfeld in aktive Blatt ein 'auch hier muss das richtige Schriftfeld angegeben werden Call Blatt.AddTitleBlock("Schriftfeld Contelos") 'schaltet Browserleiste wieder ein ThisApplication.UserInterfaceManager.ShowBrowser = True Else: MsgBox ("Ein Schriftfeld kann nur in eine Zeichnung eingefügt werden!") End If 'an ende wird die Vorlage wieder geschlossen und die aktualisierte Zeichnung gespeichert QuellDoc.Close ZielDoc.Save End Sub