Community
Inventor Programming - iLogic, Macros, AddIns & Apprentice
Inventor iLogic, Macros, AddIns & Apprentice Forum. Share your knowledge, ask questions, and explore popular Inventor topics related to programming, creating add-ins, macros, working with the API or creating iLogic tools.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Issue getting Thickness with iLogic

2 REPLIES 2
SOLVED
Reply
Message 1 of 3
talife4725
352 Views, 2 Replies

Issue getting Thickness with iLogic

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,


2 REPLIES 2
Message 2 of 3
Michael.Navara
in reply to: talife4725

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.

 

Message 3 of 3
Jusdoo
in reply to: talife4725

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.

Post to forums  

Technology Administrators


Autodesk Design & Make Report