Inventor 2023 – iLogic Regel zur Erstellung von Fertigungsdateien aus einer Baugruppe

Inventor 2023 – iLogic Regel zur Erstellung von Fertigungsdateien aus einer Baugruppe

florian_duschlMDFS2
Contributor Contributor
2.507Aufrufe
15Antworten
Nachricht 1 von 16

Inventor 2023 – iLogic Regel zur Erstellung von Fertigungsdateien aus einer Baugruppe

florian_duschlMDFS2
Contributor
Contributor

Hallo zusammen,

 

da das ganze iLogic-Thema für mich noch ziemlich neu ist, wollte ich mich mal an die Experten hier im Forum wenden, vielleicht hat ja der ein oder andere schon eine solche Regel im Einsatz oder kennt sich damit aus.

 

Ich bräuchte eine iLogic-Regel, die von der geöffneten Baugruppe bzw. den enthaltenen Unterbaugruppen Fertigungsdateien für alle Blechbauteile eines bestimmten Werkstoffes erstellt. Der Ablauf sollte ungefähr so aussehen:

 

  • iLogic Regel von der geöffneten Baugruppe aus starten

  • gewünschten Speicherort festlegen

  • Blechbauteil öffnen und davon eine Step-Datei erstellen

  • In die Abwicklung wechseln, DXF-Datei der Abwicklung erstellen und Abwicklung wieder verlassen.

  • Die zum Blechbauteil dazugehörige Zeichnung öffnen, als PDF-Datei abspeichern und die Zeichnung wieder schließen.

  • Zum nächsten Blechbauteil wechseln und den gleichen Ablauf wieder durchführen.

     

Die Abwicklung wird während der Konstruktion bereits erstellt.

Das Bauteil und die Zeichnung haben den gleichen Dateinamen und sind im gleichen Verzeichnis abgespeichert.

 

Ich habe hier im Forum schon einige interessante Ansätze gesehen, die zwar in eine ähnliche Richtung gehen aber nicht so ganz das sind was ich suche. Ich hoffe das soetwas irgendwie realisierbar ist, aber leider verstehe ich von dem ganzen iLogic-Thema viel zu wenig.

 

Falls mir hier jemand bei dem Problem helfen könnte wäre ich euch sehr dankbar.

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (3)
2.508Aufrufe
15Antworten
Antworten (15)
Nachricht 2 von 16

jeremy.goenen
Advocate
Advocate
Akzeptierte Lösung

Hallo,

das hier sind abgewandelte Regeln von mir auf deine Bedürfnisse angepasst, nur das der Zielpfad nicht Variabel ist,

die Dateien werden immer unter "C:\Users\Benutzername\Documents\iLogicExport\Baugruppenname" gespeichert.

Füge diese Regeln in dein Externes Regelverzeichnis ein, und Führe dann die Regel "STEP-DXF-PDF" in der Baugruppe aus.

In der Regel: DXF to Userpath kannst du in Zeile 46-50 die Layer für deine DXF einstellen, Infos dazu findest du hier.

jeremygoenen_0-1718011128733.png

 

In der Regel PDF to Userpath kannst du in Zeile 64-70 Einstellungen für deine PDF machen:

jeremygoenen_1-1718011415030.png

 

Wenn du dir das iLogic Protokoll anzeigen lässt, bekommst auch eine Meldung wenn eine Zeichnung nicht gefunden wurde, oder ein Schwerwiegender Fehler auftritt, den findest du hier:

jeremygoenen_2-1718011650348.png

auf das + drücken und dann irgendwo andocken.

Fanden Sie diesen Beitrag hilfreich? Fühlen Sie sich frei, diesen Beitrag zu liken.
Wurde Ihre Frage erfolgreich beantwortet? Klicken Sie dann auf die Schaltfläche LÖSUNG AKZEPTIEREN

Inventor Versionen:
2025.2
Nachricht 3 von 16

richterBKSAC
Advocate
Advocate
Akzeptierte Lösung

Hi, 

 

ich hätte es so gelöst.

Imports System.Windows.Forms
Public Class Fertigungsunterlagen
	
	Private _doc As Document
	Private _targetfolderpath As String
	
	
	Private _material As String

	
	Sub main()
		_doc = ThisDoc.Document
		If _doc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
			
			'set desired material here
			
			_material = InputBox("Bitte Material eingeben","Materialfilter" , String.Empty)
			If _material = String.Empty Then
				MsgBox("Kein Material angegeben", , "Fehler")
				Exit Sub
			End If
			
			get_targetfolderpath()
			Dim refdocs As DocumentsEnumerator = _doc.ReferencedDocuments
			loop_refdocs(refdocs)
			MsgBox("Unterlagenerstellung abgeschlossen.",,"Hinweis")
		Else
			MsgBox("Aktives Dokument ist keine Baugruppe.",vbExclamation, "Fehler")
			Exit Sub
		End If
		
			
		
	End Sub
	
	Private Sub get_targetfolderpath()
		' Define folder browse dialog
		Dim Dialog = New FolderBrowserDialog()
		
		' Set options for folder browser dialog
		'Dialog.SelectedPath = ExportPath
		Dialog.ShowNewFolderButton = True
		Dialog.Description = "Bitte Zielordner für die Fertigungsunterlagen auswählen"
		' Show dialog box
		If DialogResult.OK = Dialog.ShowDialog() Then
			_targetfolderpath = Dialog.SelectedPath & "\"
		Else
			Return
		End If
	End Sub
	
	Private Sub loop_refdocs(refdocs As DocumentsEnumerator)
		For Each refdoc In refdocs
			If refdoc.DocumentType = kAssemblyDocumentObject Then
				'sub nochmal aufrufen mit refdocs der Unterbaugruppe
				loop_refdocs(refdoc.ReferencedDocuments)
				
			ElseIf refdoc.ComponentDefinition.Type = kSheetMetalComponentDefinitionObject And refdoc.ComponentDefinition.Material.Name = _material Then
				Try 
					'get .ipt filename
					Dim ipt_filename As String = System.IO.Path.GetFileNameWithoutExtension(refdoc.FullDocumentName)

					'check if .step exists
					If Not IO.File.Exists(_targetfolderpath & ipt_filename & ".stp") Then 
						create_step(refdoc, ipt_filename)
					Else
						'check if .dxf exists
						If Not IO.File.Exists(_targetfolderpath & ipt_filename & ".dxf") Then 
							create_dxf(refdoc, ipt_filename)
						Else
							'close .ipt when .dxf exists and active Document is the ipt
							If ThisApplication.ActiveDocument.FullDocumentName = refdoc.FullDocumentName Then
								ThisApplication.ActiveDocument.Close
							End If
						End If
					End If
					
					'create pdf
					Dim ref_idw As DrawingDocument
					Dim idw_path As String = System.IO.Path.GetFullPath(refdoc.FullDocumentName).Replace(".ipt",".idw")

					'check if .idw exists
					If IO.File.Exists(idw_path) Then 
						'check if .pdf exists
						If Not IO.File.Exists(_targetfolderpath & ipt_filename & ".pdf") Then 
							create_pdf(idw_path)
						End If
					Else
						MsgBox("Die Zeichnung: " & idw_path & " existiert nicht", , "Fehler")
						Exit Sub
					End If
				Catch
				End Try
			End If
		Next
	End Sub
	
	Private Sub create_step(refdoc As PartDocument, filename As String)
		' open partdocument
		ThisApplication.Documents.Open(refdoc.FullDocumentName)
		
		' Get the STEP translator Add-In.
		Dim oSTEPTranslator As TranslatorAddIn
		oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")
		
		If oSTEPTranslator Is Nothing Then
		    MsgBox( "Auf STEP translator konnte nicht zugegriffen werden.")
		    Exit Sub
		End If

		Dim oContext As TranslationContext
		oContext = ThisApplication.TransientObjects.CreateTranslationContext
		Dim oOptions As NameValueMap
		oOptions = ThisApplication.TransientObjects.CreateNameValueMap
		If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then
		    ' Set application protocol.
		    ' 2 = AP 203 - Configuration Controlled Design
		    ' 3 = AP 214 - Automotive Design
		    oOptions.Value("ApplicationProtocolType") = 2
		
		    ' Other options...
		    oOptions.Value("Author") = _doc.Parent.UserName
		    'oOptions.Value("Authorization") = ""
		    'oOptions.Value("Description") = ""
		    oOptions.Value("Organization") = ""
		
		    oContext.Type = kFileBrowseIOMechanism
		
		    Dim oData As DataMedium
		    oData = ThisApplication.TransientObjects.CreateDataMedium
		    oData.FileName = _targetfolderpath & filename & ".stp"
		
		    Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oData)
			
			'check if .dxf exists
			If Not IO.File.Exists(_targetfolderpath & filename & ".dxf") Then 
				create_dxf(refdoc, filename)
			Else
				'close .ipt when .dxf exists and active Document is the ipt
				If ThisApplication.ActiveDocument.FullDocumentName = refdoc.FullDocumentName Then
					ThisApplication.ActiveDocument.Close
				End If
			End If
		End If

	End Sub
	
	Private Sub create_dxf(refdoc As PartDocument, filename As String)
		Dim flatpattern As FlatPattern
		Dim dxf_Format As String
		
		'check if sheetmetal has flatpattern
		If Not refdoc.ComponentDefinition.HasFlatPattern Then
			'create flatpattern if it doesnt exist
			refdoc.ComponentDefinition.Unfold
		End If
		
		flatpattern = refdoc.ComponentDefinition.FlatPattern

		dxf_Format = "FLAT PATTERN DXF?AcadVersion=2004&OuterProfileLayer=Burn&InteriorProfilesLayer=Burn&FeatureProfilesDownLayerColor=0;128;255&FeatureProfilesUpLayerColor=255;0;0&InvisibleLayers=IV_UNCONSUMEND_SKETCHES;IV_ALTREP_BACK;IV_ALTREP_FRONT;IV_ARC_CENTERS;IV_TOOL_CENTER_DOWN;IV_TOOL_CENTER;IV_ARC_CENTERS;IV_TANGENT;IV_BEND;IV_BEND_DOWN&SplineTolerance Double 0.001"
		
		'Set the DXF target file name
		Dim dxf_FileName = _targetfolderpath & filename & ".dxf"
		'could check to see if that file already exists, before possibly overwriting it
		Try
			flatpattern.DataIO.WriteDataToFile(dxf_Format, dxf_FileName)
		Catch
		End Try
		
		'close .ipt when active Document is the ipt
		If ThisApplication.ActiveDocument.FullDocumentName = refdoc.FullDocumentName Then
			ThisApplication.ActiveDocument.Close
		End If
	End Sub
	
	Private Sub create_pdf(idw_path As String)
		Dim filename As String = System.IO.Path.GetFileNameWithoutExtension(idw_path)
		
		' open drawingdocument
		ThisApplication.Documents.Open(filename)
		
		'Set the DXF target file name
		Dim pdf_FileName = _targetfolderpath & filename & ".pdf"
		ThisApplication.CommandManager.PostPrivateEvent(kFileNameEvent, pdf_FileName)
		Dim oCtrlDef As ButtonDefinition
		oCtrlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppFileExportPDFCmd")
		oCtrlDef.Execute
		
		'close .idw when active Document is the idw
		If ThisApplication.ActiveDocument.FullDocumentName = idw_path Then
			ThisApplication.ActiveDocument.Close
		End If
		
	End Sub
End Class

Zu den dxf Export Optionen hat @jeremy.goenen ja schon den Link angehängt.

 

 

Grüße

Nachricht 4 von 16

florian_duschlMDFS2
Contributor
Contributor

Vielen Dank für die schnelle Rückmeldung.

Ich werde die Regeln zeitnah testen und mich dann nocheinmal melden.

0 „Gefällt mir“-Angaben
Nachricht 5 von 16

florian_duschlMDFS2
Contributor
Contributor

Hallo jeremy.goenen,

 

ich habe deine iLogic Regel jetzt mal getestet, aber leider passiert nicht viel.

Beim ausführen der Regel öffnet sich das Auswahlfenster für das Material und im Hintergrund das Fenster für den DXF-Export.

Nachdem man das Material auswähl passiert nichts mehr.

Im iLogic Protokoll zeigt es folgende Meldung an:

 

INFO| 1: >>---------------------------
FATAL| Regel "DXF from Assembly:" in

xx-xxxx-00002

System.ArgumentException:

RunExternalRule: Externe Regeldatei mit

dem Namen "STEP to Userpath" wurde

nicht gefunden (im Dokument xx-xxx-00004.ipt referenziert).

bei Autodesk.iLogic.Core.RuleProcessing.Rul

eRunManager.RunExternalRule(String

ruleName, NameValueMap

ruleArguments)

bei iLogic.LowLevelInRule.RunExternalRule

(String ruleName, NameValueMap

ruleArguments)

bei iLogic.iLogicExternalApi.RunExternalRule

(Document doc, String ruleName)

bei ThisRule.Main() in C:\Users\Benutzername

\AppData\Local\Temp\iLogic Rules

\STEP-DXF-PDF.vb:Zeile 118.

 

Ich habe die Regeln wie beschrieben in mein Externes Regelverzeichnis eingefügt und dann die Regel "STEP-DXF-PDF" in der Baugruppe ausgeführt.

0 „Gefällt mir“-Angaben
Nachricht 6 von 16

florian_duschlMDFS2
Contributor
Contributor

Hallo richterBKSAC,

 

deine Regel habe ich auch mal getestet und bis auf eine Kleinigkeit würde sie eigentlich genau so funktionieren wie ich mir das vorstelle.

Die Materialabfrage und das Festlegen des Speicherorts funktionieren ohne Probleme.

Die Regel exportiert auch die Step und DXF-Dateien so wie gewollt.

Aber die Zeichnungen bzw. PDF-Dateien werden leider komplett ignoriert.

Es wird nichtmal die .idw Datei geöffnet, obwohl die .ipt und .idw Datei im gleichen Verzeichnis gespeichert sind und den gleichen Dateinamen haben.

Im Bauteil per Rechtsklick auf den Bauteilnamen kann ich die Zeichnung öffnen.

0 „Gefällt mir“-Angaben
Nachricht 7 von 16

jeremy.goenen
Advocate
Advocate

Hallo, ich weiss zwar nicht warum, aber manchmal findet er die Externen Regeln nicht. Öffne die Regeln einmal mit doppelklick in Inventor, und wieder schliessen ohne was zu ändern, danach sollte es laufen.

 

Edit: Habe noch vergessen zu erwähnen dass du die "Unter" Regeln, sprich DXF to, STEP to, PDF to, auch im Teil, bzw. der Zeichnung ausführen kannst, falls man einzelne nachgenerieren möchte. Diese landen direkt in iLogicExport.

Fanden Sie diesen Beitrag hilfreich? Fühlen Sie sich frei, diesen Beitrag zu liken.
Wurde Ihre Frage erfolgreich beantwortet? Klicken Sie dann auf die Schaltfläche LÖSUNG AKZEPTIEREN

Inventor Versionen:
2025.2
Nachricht 8 von 16

richterBKSAC
Advocate
Advocate

Hey, ich habe den Fehler gefunden und zwar in Zeile 180.

Bitte 

ThisApplication.Documents.Open(filename)

durch 

ThisApplication.Documents.Open(idw_path)

ersetzen. Dann funktioniert es jedenfalls bei mir.

 

Grüße

Nachricht 9 von 16

richterBKSAC
Advocate
Advocate
Akzeptierte Lösung

Ich habe den Code nochmal überarbeitet und von @jeremy.goenen und mir kombiniert, da seiner schneller läuft als meiner.

 

Nachricht 10 von 16

richterBKSAC
Advocate
Advocate

@jeremy.goenen ich habe noch interessehalber eine Frage, wenn ich deine Code richtig lese, dann erstellst du die pdf aus einer nicht sichtbaren Datei. Meine Versuche das nachzustellen haben nicht funktioniert, daher meine Frage ob der Code normalerweise funktioniert oder gibt es etwas was ich übersehen habe?

iLogicVb.Automation.RunExternalRule(drawing, "PDF to Userpath")

hiermit wird, wenn ich es richtig sehe, der externen Regel gesagt das sie im Document "drawing" laufen soll, dass du zuvor unsichtbar geöffnet hast.

 

Grüße

 

0 „Gefällt mir“-Angaben
Nachricht 11 von 16

jeremy.goenen
Advocate
Advocate

Das ist korrekt, bei Bauteilen oder Baugruppen wäre das vorherige öffnen nicht nötig, da diese schon in den Speicher geladen werden wenn du die oberste Baugruppe öffnest. Da ich meine Export-Funktionen in verschieden Programmen nutze, hat es so für mich den Vorteil dass ich bei Bedarf nur einen Code anpassen muss und alles wird immer gleich Exportiert.

Was bekommst du denn für einen Fehler?

Schreib mir am besten eine PN damit der Post übersichtlich bleibt.

Fanden Sie diesen Beitrag hilfreich? Fühlen Sie sich frei, diesen Beitrag zu liken.
Wurde Ihre Frage erfolgreich beantwortet? Klicken Sie dann auf die Schaltfläche LÖSUNG AKZEPTIEREN

Inventor Versionen:
2025.2
0 „Gefällt mir“-Angaben
Nachricht 12 von 16

richterBKSAC
Advocate
Advocate

Ich hatte wohl das Document falsch übergeben und jetzt funktioniert es! Dein Code ist aufjedenfall ziemlich gut 🙂 Wieder was gelernt sozusagen. 

Ich schätze du hast etwas mit Informatik gelernt?

 

Vielen Dank und Grüße

Nachricht 13 von 16

jeremy.goenen
Advocate
Advocate

Haha nein, hab eine Lehre als Schreiner gemacht.

Hab mir in den letzten fünf Jahren alles was ich kann mithilfe des Autodesk-Forums beigebracht.

Wo ein Wille ein Weg 😁

Fanden Sie diesen Beitrag hilfreich? Fühlen Sie sich frei, diesen Beitrag zu liken.
Wurde Ihre Frage erfolgreich beantwortet? Klicken Sie dann auf die Schaltfläche LÖSUNG AKZEPTIEREN

Inventor Versionen:
2025.2
Nachricht 14 von 16

florian_duschlMDFS2
Contributor
Contributor

Hey jeremy.goenen und richterBKSAC,

 

kurze Rückmeldung von mir.

Ich habe jetzt eure Regeln nochmal getestet und sie funktionieren perfekt, ohne Probleme.

Ich werde eure Beiträge mal als Lösung markieren.

Vielen Dank an Euch beide.😀

 

Eine Frage noch zu der kombinierten Regel von richterBKSAC, das Einstellen der DXF-Layer funktioniert genauso wie bei der ursprünglichen Regel, oder?

Nachricht 15 von 16

richterBKSAC
Advocate
Advocate

Hey @florian_duschlMDFS2 ,

 

Gerne! Ja genau, wie @jeremy.goenen schon geschrieben hatte kann man in diesen Link die möglichen Optionen für den Export einsehen.

0 „Gefällt mir“-Angaben
Nachricht 16 von 16

richterBKSAC
Advocate
Advocate
Hätte ich jetzt nicht vermutet, aber umso besser. Respekt 😉
0 „Gefällt mir“-Angaben