- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello Forum,
I've been struggling all day with this issue, and I’m hoping someone can help. I have an assembly that includes various parts, some of which are configured with multiple model states. My goal is to generate DXF files for all sheet metal parts in the assembly, but I keep running into a problem: every time I try to export a DXF, the file opens in the primary model state, giving me the wrong flat pattern.
I’ve been reading through forums and trying different solutions, including ChatGPT, but no luck so far. It seems like it should be simple to open a part in its active model state and generate the flat pattern from there, but I haven’t been able to get it to work.
Has anyone encountered this issue before? Any help or code tips would be greatly appreciated!
Here is a sample code I found in the forum and attempted to modify to suit my needs.
Dim oDoc As AssemblyDocument oDoc = ThisApplication.ActiveDocument 'Check that the active document is an assembly file If oDoc.DocumentType <> kAssemblyDocumentObject Then MessageBox.Show("Please run this rule from the assembly file.", "iLogic") Exit Sub End If 'Get user input RUsure = MessageBox.Show ( _ "This will create a DXF file for all of the asembly components that are sheet metal." _ & vbLf & "This rule expects that the part file is saved." _ & vbLf & " " _ & vbLf & "Are you sure you want to create DXF for all of the assembly components?" _ & vbLf & "This could take a while.", "iLogic - Batch Output DXFs ", MessageBoxButtons.YesNo) If RUsure <> vbYes Then Exit Sub Dim oAsmName As String = Left(oDoc.DisplayName, Len(oDoc.DisplayName) - 4) Dim oPath As String = ThisDoc.Path 'Get the DXF target folder path Dim oFolder As String = oPath & "\" & oAsmName & " DXF Files" 'Check for the DXF folder and create it if it does not exist If Not System.IO.Directory.Exists(oFolder) Then System.IO.Directory.CreateDirectory(oFolder) End If '- - - - - - - - - - - - -Component - - - - - - - - - - - - 'MessageBox.Show("Test", "My iLogic Dialog", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1) Dim oBOM As BOM 'MessageBox.Show("Test", "My iLogic Dialog", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1) oBOM = oDoc.ComponentDefinition.BOM 'MessageBox.Show("Test", "My iLogic Dialog", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1) oBOM.StructuredViewEnabled = True Dim oBOMView As BOMView = oBOM.BOMViews.Item(oBOM.BOMViews.Count) For Each oRow As BOMRow In oBOMView.BOMRows Try Dim oCD As ComponentDefinition = oRow.ComponentDefinitions.Item(1) Dim iDoc As Document = oCD.Document 'SheetMetal parts only If iDoc.SubType <> "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then Continue For Dim iName As String = iDoc.FullFileName 'Check that model is saved If iName = vbNullString Then Continue For iDoc = ThisApplication.Documents.Open(iName) oCD = iDoc.ComponentDefinition Dim oItem As String = oRow.ItemNumber Try If Not oCD.HasFlatPattern Then oCD.Unfold() Else oCD.FlatPattern.Edit() End If Dim sOut As String = "FLAT PATTERN DXF?AcadVersion=2007&RebaseGeometry=False" _ + "&OuterProfileLayer=0&OuterProfileLayerColor=0;0;0" _ + "&InteriorProfilesLayer=0&InteriorProfilesLayerColor=0;0;0" _ + "&BendUpLayer=G&BendUpLayerColor=255;255;0" _ + "&BendDownLayer=G&BendDownLayerColor=255;255;0" _ + "&SimplifySplines=True&MergeProfilesIntoPolyline=True" _ + "&InvisibleLayers=IV_ARC_CENTERS;IV_TANGENT;IV_ROLL;IV_ROLL_TANGENT;IV_ALTREP_BACK;IV_ALTREP_FRONT;IV_FEATURE_PROFILES_DOWN;IV_FEATURE_PROFILES;IV_TOOL_CENTER_DOWN;DIGI_MARKER_TOOL_1;DIGI_MARKER_TOOL_2" oCD.DataIO.WriteDataToFile(sOut, oFolder & "\" & oAsmName & "-" & oItem & ".dxf") oCD.FlatPattern.ExitEdit() Catch ex As Exception MsgBox(ex.Message) End Try iDoc.Close(True) Catch End Try Next
Solved! Go to Solution.