Announcements
Attention for Customers without Multi-Factor Authentication or Single Sign-On - OTP Verification rolls out April 2025. Read all about it here.
chandra.shekar.g
in reply to: Anonymous

@Anonymous ,

 

Hoping that below iLogic may be helpful to accomplish your task.

'define the active document as an assembly file
Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument
oAsmName = Left(oAsmDoc.DisplayName, Len(oAsmDoc.DisplayName) -4)
'check that the active document is an assembly file
If ThisApplication.ActiveDocument.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 = vbNo Then
Return
Else
End If
oPath = ThisDoc.Path
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
'get DXF target folder path
oFolder = oPath & "\" & oAsmName & "_DXF"
'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 - - - - - - - - - - - -
'look at the files referenced by the assembly
Dim oRefDocs As DocumentsEnumerator
oRefDocs = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
'work the the drawing files for the referenced models
'this expects that the model has been saved
For Each oRefDoc In oRefDocs
	If oRefDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
		iptPathName = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & "ipt"
		'check that model is saved
		If(System.IO.File.Exists(iptPathName)) Then
			Dim oPartDoc As PartDocument
			oPartDoc = ThisApplication.Documents.Open(iptPathName, True)
			oFileName = Left(oRefDoc.DisplayName, Len(oRefDoc.DisplayName))
			Try 				
				oRevName =iProperties.Value(oFileName, "Project", "Revision Number")	 

				Dim oCompDef As SheetMetalComponentDefinition
				oCompDef = oPartDoc.ComponentDefinition
				
				Dim oThick As Double  
				oThick = oCompDef.Parameters.UserParameters.Item("Thickness").ModelValue 
				
				oDataMedium.FileName = oFolder & "\" & oFileName &  "_"&oRevName & "_" & oThick.ToString() & "mm" & ".dxf"
				
				If oCompDef.HasFlatPattern = False Then
					oCompDef.Unfold
				Else
					oCompDef.FlatPattern.Edit
				End If
				Dim sOut As String
				sOut = "FLAT PATTERN DXF?AcadVersion=2004&OuterProfileLayer=IV_OUTER_PR​OFILE"
				oCompDef.DataIO.WriteDataToFile( sOut, oDataMedium.FileName)
				'just for check its works coretcly
				'i=MessageBox.Show(oDataMedium.FileName, "Title",MessageBoxButtons.OKCancel)
				'MessageBox.Show(i,"title",MessageBoxButtons.OK)
				'If i=2 Then
				'Exit Sub
				'End If
				oCompDef.FlatPattern.ExitEdit
			Catch
			End Try
			oPartDoc.Close
		
		End If
	End If
	
	
Next

Thanks and regards,


CHANDRA SHEKAR G
Developer Advocate
Autodesk Developer Network