Hello,
I'm looking to get the thickness of my sheet metal parts into the name of my DXF's.
DXF names are typically formated like this :
"Projectnumber"-"Assemblynumber"-"Partnumber"-"Material"+"Thickness"-"Quantity"+x
It works perfectly a part from the Thickness which I don't know how to retrieve properly.
Here is the code I used, got it from the Inventor forums, I edited it to fit our needs:
Dim oDoc As AssemblyDocument
oDoc = ThisApplication.ActiveDocument
Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument
oAsmName = ThisDoc.FileName(False) 'without extension
'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 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=2018" _
+ "&InteriorProfileLayer=IV_INTERIOR_PROFILES" _
+ "&InteriorProfilesLayerColor=255;255;0" _
+ "&OuterProfileLayer=IV_EXTERIOR_PROFILES" _
+ "&InvisibleLayers=IV_TANGENT" _
+ "&SimplifySplines=True" _
+ "&BendLayerLineType=37633" _
+ "&BendLayerColor=255;255;0" _
+ "&BendUpLayerLineType=37633" _
+ "&BendUpLayerColor=255;255;0" _
+ "&BendDownLayerLineType=37633" _
+ "&BendDownLayerColor=255;255;0" _
+ "&FeatureProfilesLayerLineType=37633" _
+ "&FeatureProfilesLayerColor=255;255;0" _
+ "&FeatureProfilesUpLayerLineType=37633" _
+ "&FeatureProfilesUpLayerColor=255;255;0" _
+ "&FeatureProfilesDownLayerLineType=37633" _
+ "&FeatureProfilesDownLayerColor=255;255;0"
Dim Nombre As String = oRow.ItemQuantity
Dim Matiere As String = ""
Dim Mat As String = iProperties.Material(iDoc.DisplayName)
If Mat = "Aluminium 6061"
Matiere = "alu"
ElseIf Mat = "Acier" Then
Matiere = "ac"
ElseIf Mat = "Acier inoxydable"
Matiere = "nx"
ElseIf Mat = "Acier, galvanisé"
Matiere = "galva"
ElseIf Mat = "Acier inoxydable brossé"
Matiere = "nxbrosse"
ElseIf Mat = "Acier inoxydable 316L brossé"
Matiere = "316Lbrosse"
ElseIf Mat = "Acier inoxydable 316L"
Matiere = "316L"
Else
Matiere = InputBox("La matière de cette pièce n'est pas définie, rajouter l'abréviation de la matière svp! ", "Matière manquante", "Indiquer la matière ici")
End If
Dim activepart As PartDocument = ThisApplication.ActiveDocument
Dim Sheetmetal As SheetMetalComponentDefinition = activepart.ComponentDefinition
Dim ThicknessSM As Parameter = Sheetmetal.Thickness
Dim Thickness As String = ThicknessSM
MessageBox.Show("hello" + Thickness)
Dim ShortName As String = Left(iDoc.DisplayName, (InStrRev(iDoc.DisplayName, ".", -1, vbTextCompare) -1)) & "-" & Matiere & Thickness & "-" & Nombre & "x -" & ".dxf"
oCD.DataIO.WriteDataToFile(sOut, oFolder & "\" & ShortName)
oCD.FlatPattern.ExitEdit()
Catch ex As Exception
MsgBox(ex.Message)
End Try
iDoc.Close(True)
Catch
End Try
Next
The part which I'm trying to get to work is this one:
Dim activepart As PartDocument = ThisApplication.ActiveDocument
Dim Sheetmetal As SheetMetalComponentDefinition = activepart.ComponentDefinition
Dim ThicknessSM As Parameter = Sheetmetal.Thickness
Dim Thickness As String = ThicknessSM
MessageBox.Show("hello" + Thickness)
Dim ShortName As String = Left(iDoc.DisplayName, (InStrRev(iDoc.DisplayName, ".", -1, vbTextCompare) -1)) & "-" & Matiere & Thickness & "-" & Nombre & "x -" & ".dxf"
Thanks in advance,
Solved! Go to Solution.
Solved by Michael.Navara. Go to Solution.
Your ThicknessSM variable is of type Parameter. You can't convert them to string directly. Use some Parameter property instead. See https://help.autodesk.com/view/INVNTOR/2020/ENU/?guid=GUID-C63E2C78-B0F1-487B-BB88-816D18728438 for more information.
Value or ModelValue is what you need. You need to convert the value from internal units to required units (cm -> mm) and then to string.
change the following line to
Dim Thickness As String = ThicknessSM
dim Thickness as string=thicknessSM.value & "cm"
or
dim Thickness as string=thicknessSM.value *10 & "mm"
please try my apps:
iChords - Plate Formatter @ autodesk app store
iChords - Profiles Extractor
Can't find what you're looking for? Ask the community or share your knowledge.