Hallo Pietro,
1. Frage ich den Kunden über ein Formular ab, hierfür habe ich eine extra Regel
Die Kunden stehen in einer Excel Liste - Kundenliste
Die Auswahl erfolgt über ein Formular - Kundenauswahl
2. Frage ich den Schriftfeldtyp über ein Formular ab -Auswahl Schriftfeldtyp, hierfür habe ich eine extra Regel - Abfrage Schriftfeldtyp. Die Schriftfeldtypen stehen in einer Excel Liste - Schriftfeldtypen
Ich verwende unterschiedliche Schriftfelder für Baugruppen, Bauteile und Bibliotheksbaugruppen bzw. Bibliotheksbauteile
3. Einfügen des entsprechenden Schriftfeldes aus der Vorlagedatei in die geöffnete Zeichnung.
Die Regeln funktionieren in Inventor 2021
Die Regel lasse stoße ich über einen Button in einem globalen Formular an.
Regel zur Kundenabfrage
'Check for customer
Try
Versuch = Parameter("Kunde:")
Catch
oMyParameter = ThisApplication.ActiveDocument.Parameters.UserParameters
'Setting an userParameter as text parameter
oParameter = oMyParameter.AddByValue("Kunde:", "", UnitsTypeEnum.kTextUnits)
'check for existing file
If Dir("\\storagecube\Projekte\Kundenliste.xlsx") <> "" Then
'file exists
MultiValue.List("Kunde:") = GoExcel.CellValues("\\storagecube\Projekte\Kundenliste.xlsx", "Tabelle1", "A1", "")
GoExcel.Close
iLogicVb.RunExternalRule("Z:\Vorlagen\Inventor\iLogic\Regeln\externe Regeln\Formulare öffnen\Kundenauswahl.iLogicVb")
Else
'workbook does NOT exist
MessageBox.Show("Datei '\\storagecube\Projekte\Kundenliste.xlsx' existiert nicht", "schwerwiegender Fehler")
Exit Sub
End If
End Try
Regel um Formular zur Kundenauswahl zu öffnen
iLogicForm.ShowGlobal("Z:\Vorlagen\Inventor\Programmvorgaben\Design Data\iLogic\UI\versteckte Formulare\Kundenauswahl", FormMode.Modal)
Regel zur Abfrage des Schriftfeldtyps
'Abfrage Schriftfeldtyp
Try
Versuch = Parameter("Schriftfeldtyp:")
Catch
oMyParameter = ThisApplication.ActiveDocument.Parameters.UserParameters
'Setting an userParameter as text parameter
oParameter = oMyParameter.AddByValue("Schriftfeldtyp:", "", UnitsTypeEnum.kTextUnits)
'check for existing file
If Dir("\\storagecube\Projekte\Liste Schriftfeldtypen.xlsx") <> "" Then
'file exists
MultiValue.List("Schriftfeldtyp:") = GoExcel.CellValues("\\storagecube\Projekte\Liste Schriftfeldtypen.xlsx", "Tabelle1", "A1", "")
GoExcel.Close
iLogicVb.RunExternalRule("Z:\Vorlagen\Inventor\iLogic\Regeln\externe Regeln\Formulare öffnen\Auswahl Schriftfeldtyp.iLogicVb")
Else
'workbook does NOT exist
MessageBox.Show("Datei '\\storagecube\Projekte\Liste Schriftfeldtypen.xlsx' existiert nicht", "schwerwiegender Fehler")
Exit Sub
End If
End Try
Regel um Formular zur Auswahl des Schriftfeldtyps zu öffnen
iLogicForm.ShowGlobal("Z:\Vorlagen\Inventor\Programmvorgaben\Design Data\iLogic\UI\versteckte Formulare\Schriftfeldtyp bestimmen", FormMode.Modal)
'Kundenabfrage
iLogicVb.RunExternalRule("Z:\Vorlagen\Inventor\iLogic\Regeln\externe Regeln\Kundenabfrage\Kundenabfrage.iLogicVb")
Kunde = Parameter("Kunde:")
If Parameter("Kunde:") = ""
iLogicVb.RunExternalRule("Z:\Vorlagen\Inventor\iLogic\Regeln\externe Regeln\Formulare öffnen\Kundenauswahl.iLogicVb")
End If
'Abfrage Schriftfeldtyp
iLogicVb.RunExternalRule("Z:\Vorlagen\Inventor\iLogic\Regeln\externe Regeln\Schriftfelder\Schriftfeldabfrage.iLogicVb")
Schriftfeldtyp = Parameter("Schriftfeldtyp:")
If Parameter("Schriftfeldtyp:") = ""
iLogicVb.RunExternalRule("Z:\Vorlagen\Inventor\iLogic\Regeln\externe Regeln\Formulare öffnen\Auswahl Schriftfeldtyp.iLogicVb")
End If
'Pfadangabe Schriftfelder
'Kunde Kunde 1
If Parameter("Kunde:") = "Kunde 1" And Parameter("Schriftfeldtyp:") = "Baugruppe (Projekt)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 1 Baugruppe (Projekt)")
End If
If Parameter("Kunde:") = "Kunde 1" And Parameter("Schriftfeldtyp:") = "Bauteil (Projekt)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 1 Einzelteil (Projekt)")
End If
If Parameter("Kunde:") = "Kunde 1" And Parameter("Schriftfeldtyp:") = "Baugruppe (Bibliothek)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 1 Baugruppe (Bibliothek)")
End If
If Parameter("Kunde:") = "Kunde 1" And Parameter("Schriftfeldtyp:") = "Bauteil (Bibliothek)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 1 Einzelteil (Bibliothek)")
End If
'Kunde 2
If Parameter("Kunde:") = "Kunde 2" And Parameter("Schriftfeldtyp:") = "Baugruppe (Projekt)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 2 Baugruppe (Projekt)")
End If
If Parameter("Kunde:") = "Kunde 2" And Parameter("Schriftfeldtyp:") = "Bauteil (Projekt)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 2 Einzelteil (Projekt)")
End If
If Parameter("Kunde:") = "Kunde 2" And Parameter("Schriftfeldtyp:") = "Baugruppe (Bibliothek)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 2 Baugruppe (Bibliothek)")
End If
If Parameter("Kunde:") = "Kunde 2" And Parameter("Schriftfeldtyp:") = "Bauteil (Bibliothek)" Then
SK_Vorlage("Z:\Vorlagen\Inventor\Programmvorgaben\Schriftfelder\aktive Schriftfelder ib-Rosenburg.idw", "Kunde 2 (Bibliothek)")
End If
End Sub
Sub SK_Vorlage(Pfad As String, SK As String)
Dim oNewDocument As DrawingDocument
oNewDocument = ThisApplication.ActiveDocument
Dim oSourceDocument As DrawingDocument
oSourceDocument = ThisApplication.Documents.Open(Pfad)
Dim oSourceTitleBlockDef As TitleBlockDefinition
oSourceTitleBlockDef = oSourceDocument.TitleBlockDefinitions.Item(SK)
Dim oNewTitleBlockDef As TitleBlockDefinition
Try
oNewTitleBlockDef = oSourceTitleBlockDef.CopyTo(oNewDocument)
Catch
End Try
'Schriftfeld in jedes Blatt einfügen
Dim oSheet As Sheet
For Each oSheet In oNewDocument.Sheets
oSheet.Activate
Try
oSheet.TitleBlock.Delete
Catch
Call oSheet.AddTitleBlock(oNewTitleBlockDef)
End Try
Next
oSourceDocument.Close(False)
End Sub
Bitte vor Ausführen der Regel, alle Schriftfelder aus der Zeichnung löschen, wenn da welche drin sind.
Das Schriftfeld DIN kann man nicht löschen und verbleibt in der Zeichnung.
Zum löschen der bestehenden Schriftfelder habe ich auch eine Regel.
Das Schriftfeld welches auf dem Blatt platziert ist, muss aber zuvor aus dem Blatt gelöscht werden.
Sub main
TitleBlock_Delete ("DIN")
End Sub
Sub TitleBlock_Delete(SK As String)
Dim oSheet As Sheet
For Each oSheet In ThisDoc.Document.Sheets
If Not oSheet.TitleBlock Is Nothing Then
MessageBox.Show("Bitte zuerst das Schriftfeld auf den Blättern löschen", "Routinenabbruch", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
Next
Dim oTitleBlock As TitleBlockDefinition
For Each oTitleBlock In ThisDoc.Document.TitleBlockDefinitions
If oTitleBlock.Name <> SK Then
'Schriftfeld löschen in den Schriftfeld Definitionen
oTitleBlock.Delete
End If
Next
End Sub
Ich hoffe du kommst damit zurecht, sonst melde dich.
VG Ralf