Announcements
Attention for Customers without Multi-Factor Authentication or Single Sign-On - OTP Verification rolls out April 2025. Read all about it here.

To extract parameters in to model document (which is a derived part) in drawing

RoyWickrama_RWEI
Advisor

To extract parameters in to model document (which is a derived part) in drawing

RoyWickrama_RWEI
Advisor
Advisor

I am developing a rule in which I need to deal with derived parts where I need to get some of the selected parameters added in to the current model document in the drawing.
I can't get this around: I request help

(Note: I have removed much of unnecessary lines from code)

 

2019-08-20 21 1st.png 2019-08-20 21 2nd.png

Sub main		'Function oFix_D3_FG(oDwgModelDoc, oDN_DwgModelDoc, oDN_woExt_TDMD, oExtn_TDMD, oExit, oCancel)
	oDwgModelDoc = ThisDoc.ModelDocument		'ThisDrawing.ModelDocument		'
	oFFN_DwgModelDoc = oDwgModelDoc.FullFileName	'ThisDrawing Full File Name
	oDN_DwgModelDoc = oDwgModelDoc.DisplayName	'Display Name of ThisDrawing
	oCustomPropertySet_DwgModelDoc = oDwgModelDoc.PropertySets.Item("Inventor User Defined Properties")
	
	'Some working parameters
	Dim oSelect_Other As String = "Select from a REFERENCE Document"
	Dim oCancel As String = "Cancel"

	oName_Para = InputBox("Name of ueser parameter (edit if necessary)", "Title", "D3")	'Name of user parameter reqyuired to be defined

	'Parameters (all in general)
	Dim oAllParams_DwgModelDoc As Parameters 
	oAllParams_DwgModelDoc = oDwgModelDoc.ComponentDefinition.Parameters
	'User parameters
	Dim oUserParams_DwgModelDoc As UserParameters 
	oUserParams_DwgModelDoc = oDwgModelDoc.ComponentDefinition.Parameters.UserParameters
	'Reference Parameters
	Dim oReferenceParams_DwgModelDoc As ReferenceParameters 
	oReferenceParams_DwgModelDoc = oDwgModelDoc.ComponentDefinition.Parameters.ReferenceParameters
	'Create Name_Para user prameter in model cdocument
	
	Try	'To crete user parameter assigned to oName_Para
		oTry = oUserParams_DwgModelDoc.Item(oName_Para).Value 
	Catch
		oUserParams_DwgModelDoc.AddByValue(oName_Para, 0, UnitsTypeEnum.kMillimeterLengthUnits)				
		param = oUserParams_DwgModelDoc.Item(oName_Para) 
		param.IsKey = True 
		param.ExposedAsProperty = True
	End Try


	Dim oList_RefParamsDwgModelDoc As New ArrayList
	oList_RefParamsDwgModelDoc.Add(oSelect_Other)
	For Each oRefParamsDwgModelDoc_X In oReferenceParams_DwgModelDoc
		oRefParamsDwgModelDoc_XName = oRefParamsDwgModelDoc_X.Name
		oRefParamsDwgModelDoc_XExpression = oRefParamsDwgModelDoc_X.Expression	
'		oList_RefParamsDwgModelDoc.Add(oRefParamsDwgModelDoc_XName & ": " & oRefParamsDwgModelDoc_XExpression)
		oList_RefParamsDwgModelDoc.Add(oRefParamsDwgModelDoc_XName)
	Next oRefParamsDwgModelDoc_X 	
	oList_RefParamsDwgModelDoc.Add(oCancel)
		
	oRefParamsDwgModelDocX_Selected = InputListBox("LIST OF REFERENCE PARMETERS (MODEL DOC)", oList_RefParamsDwgModelDoc, oList_RefParamsDwgModelDoc(0), Title := "ASSIGN VALUE TO " & oName_Para, ListName := "SELECT d23 or A REF. PARAMETER")
	If oRefParamsDwgModelDocX_Selected = oCancel Then
		'Do nothing
	End If
	
	If oRefParamsDwgModelDocX_Selected = oSelect_Other Then
		oD3_DP(oDwgModelDoc, oDN_DwgModelDoc, oAllParams_DwgModelDoc, oReferenceParams_DwgModelDoc)
	End If

	iLogicVb.UpdateWhenDone = True
	InventorVb.DocumentUpdate()

End Sub	



Function oD3_DP(oDwgModelDoc, oDN_DwgModelDoc, oAllParams_DwgModelDoc, oReferenceParams_DwgModelDoc)		'Public Sub ModifDerivedParams()
		'Dim oName_DP_Selected As DerivedPartComponent
		Dim oList_DPs_ModelDoc As New ArrayList()

		For Each oDP_ModelDoc In oDwgModelDoc.ComponentDefinition.ReferenceComponents.DerivedPartComponents
			oList_DPs_ModelDoc.Add(oDP_ModelDoc.Name)
		Next oDP_ModelDoc

		Dim oName_DP_Selected As String	'To select a derived (reference) part
		oName_DPX_Selected = InputListBox("Prompt, oList_DPs_ModelDoc: ", oList_DPs_ModelDoc, oList_DPs_ModelDoc(0), Title := "SELECT DP FROM", ListName := "LIST OF oList_DPs_ModelDoc")
		xIndex  = oList_DPs_ModelDoc.IndexOf(oName_DPX_Selected)

		Dim oRefDP_ModelDoc_Selected As DerivedPartComponent
		oRefDP_ModelDoc_Selected = oDwgModelDoc.ComponentDefinition.ReferenceComponents.DerivedPartComponents(xIndex + 1)
		'MessageBox.Show("oRefDP_ModelDoc_Selected.Name: " & oRefDP_ModelDoc_Selected.Name, "Title")

		'To retrieve parameters from selected derived part
		Dim oDef_Selected_RefDP_ModelDoc As DerivedPartUniformScaleDef
		oDef_Selected_RefDP_ModelDoc = oRefDP_ModelDoc_Selected.Definition
		Dim oDPE_RefDPSelected_ModelDoc As DerivedPartEntity		'For Each oDPE_RefDPSelected_ModelDoc In oDef_Selected_RefDP_ModelDoc.Parameters
	
	Dim oList_Params_RefDP_Selected As New ArrayList()
	For Each oDPE_RefDPSelected_ModelDoc In oDef_Selected_RefDP_ModelDoc.Parameters	'Parameters	'oDef_Selected_RefDP_ModelDoc.Parameters
		oList_Params_RefDP_Selected.Add(oDPE_RefDPSelected_ModelDoc.ReferencedEntity.Name)
	Next oDPE_RefDPSelected_ModelDoc
	
	Dim oShortList_Params_RefDP_Selected As New ArrayList()		'Short list of paramaters from the derived part selected

	Do	'To add selected Parameters To list
		oParam_RefDP_Selected = InputListBox("Prompt", oList_Params_RefDP_Selected, oList_Params_RefDP_Selected(0), Title := "CLICK ''X'' TO CLOSE!", ListName := "Parameters from " & oRefDP_ModelDoc_Selected.Name)
		If oParam_RefDP_Selected = "" Then Exit Do
		oShortList_Params_RefDP_Selected.Add(oParam_RefDP_Selected)
		oIndex = oList_Params_RefDP_Selected.IndexOf(oParam_RefDP_Selected)
		oList_Params_RefDP_Selected.Remove(oList_Params_RefDP_Selected(oIndex))
	Loop While oParam_RefDP_Selected IsNot Nothing
		
	If oShortList_Params_RefDP_Selected.Count = 0 Then
		'Donothing
	Else	'to get a display of parameters selected
	d0 = InputListBox("Prompt", oShortList_Params_RefDP_Selected, oShortList_Params_RefDP_Selected(0), Title := "PARAMETERS", ListName := "PARAMETERS SELECTED")
	end if
	
	'NOTE"
	'REQUEST HELP WITH SOME CODE HERE (OR AS SUITABLE OTHERWISE)TO GET THE SELECTED PARAMETERS ADDEd IN THE MODEL DOCUMENT
	
	' ----
	'------
	

iLogicVb.UpdateWhenDone = True
InventorVb.DocumentUpdate()
ThisDoc.Save

End Function

 

 

 

0 Likes
Reply
Accepted solutions (1)
1,093 Views
3 Replies
Replies (3)

RoyWickrama_RWEI
Advisor
Advisor

My apologies.

Missing part is attached here to.

 

Please help.

 

Thanks.

0 Likes

RoyWickrama_RWEI
Advisor
Advisor
Accepted solution

I spent some more time today and finally got it around.

Good for the time being: I need to refine this rule anyway: I appreciate any help because I am not a programmer (just doing mostly with help from forum - thanks to the postings in general).

 

 

Sub main		'Function oFix_D3_FG(oDerivedPart, oDN_DwgModelDoc, oDN_woExt_TDMD, oExtn_TDMD, oExit, oCancel)
	oDerivedPart = ThisDoc.ModelDocument		'ThisDrawing.ModelDocument		'
	oFFN_DwgModelDoc = oDerivedPart.FullFileName	'ThisDrawing Full File Name
	oDN_DwgModelDoc = oDerivedPart.DisplayName	'Display Name of ThisDrawing
	oCustomPropertySet_DwgModelDoc = oDerivedPart.PropertySets.Item("Inventor User Defined Properties")
	
	'Some working parameters
	Dim oSelect_Other As String = "Select from a REFERENCE Document"
	Dim oCancel As String = "Cancel"
	Dim oExit As String = "Exit"
	oName_Para = InputBox("Name of ueser parameter (edit if necessary)", "Title", "D3")	'Name of user parameter reqyuired to be defined

	'Parameters (all in general)
	Dim oAllParams_DwgModelDoc As Parameters 
	oAllParams_DwgModelDoc = oDerivedPart.ComponentDefinition.Parameters
	'User parameters
	Dim oUserParams_DwgModelDoc As UserParameters 
	oUserParams_DwgModelDoc = oDerivedPart.ComponentDefinition.Parameters.UserParameters

	'Reference Parameters
	Dim oReferenceParams_DwgModelDoc As ReferenceParameters 
	oReferenceParams_DwgModelDoc = oDerivedPart.ComponentDefinition.Parameters.ReferenceParameters
	'Create Name_Para user prameter in model cdocument
	
	Try	'To crete user parameter assigned to oName_Para
		oTry = oUserParams_DwgModelDoc.Item(oName_Para).Value 
	Catch
		oUserParams_DwgModelDoc.AddByValue(oName_Para, 0, UnitsTypeEnum.kMillimeterLengthUnits)				
		param = oUserParams_DwgModelDoc.Item(oName_Para) 
		param.IsKey = True 
		param.ExposedAsProperty = True
	End Try

	Dim oList_TargetParamsDwgModelDoc As New ArrayList
	oList_TargetParamsDwgModelDoc.Add(oSelect_Other)
	Dim oList_RefParamsDwgModelDoc As New ArrayList
	For Each oRefParamsDwgModelDoc_X In oReferenceParams_DwgModelDoc
		oRefParamsDwgModelDoc_XName = oRefParamsDwgModelDoc_X.Name
		oRefParamsDwgModelDoc_XExpression = oRefParamsDwgModelDoc_X.Expression	
'		oList_RefParamsDwgModelDoc.Add(oRefParamsDwgModelDoc_XName & ": " & oRefParamsDwgModelDoc_XExpression)
		oList_RefParamsDwgModelDoc.Add(oRefParamsDwgModelDoc_XName)
		If oRefParamsDwgModelDoc_XName = oName_Para Then
			'Do Nothing
		Else If oRefParamsDwgModelDoc_XName.Units = "ul" Then
			'Do nothing
		Else
			oList_TargetParamsDwgModelDoc.Add(oRefParamsDwgModelDoc_XName)
		End If
	Next oRefParamsDwgModelDoc_X 

	oSelectt_Multiple_for_D3 = InputListBox("LIST OF REFERENCE PARMETERS (MODEL DOC)", oList_TargetParamsDwgModelDoc, oList_TargetParamsDwgModelDoc(0), Title := "ASSIGN VALUE TO " & oName_Para, ListName := "SELECT d23 or A REF. PARAMETER")
	If oSelectt_Multiple_for_D3 = oCancel Then
		'Do nothing
	Else If oSelectt_Multiple_for_D3 = oSelect_Other Then	
		oD3_DP(oDerivedPart, oDN_DwgModelDoc, oAllParams_DwgModelDoc, oReferenceParams_DwgModelDoc)
		Dim oList_AllParamsDwgModelDoc As New ArrayList
		For Each oList_EachParamDwgModelDoc In oAllParams_DwgModelDoc
			oName_EachParamDwgModelDoc = oList_EachParamDwgModelDoc.Name
			oExpression_EachParamDwgModelDoc = oList_EachParamDwgModelDoc.Expression	
			'oList_RefParamsDwgModelDoc.Add(oRefParamsDwgModelDoc_XName & ": " & oRefParamsDwgModelDoc_XExpression)
			oList_RefParamsDwgModelDoc.Add(oName_EachParamDwgModelDoc)
			If oName_EachParamDwgModelDoc = oName_Para Then
				'Do Nothing
			Else If oList_EachParamDwgModelDoc.Units = "ul" Then
				'Do nothing
			Else
			oList_TargetParamsDwgModelDoc.Add((oName_EachParamDwgModelDoc))
			End If
		Next oList_EachParamDwgModelDoc 
		oList_TargetParamsDwgModelDoc.Add(oCancel)
		oList_TargetParamsDwgModelDoc.Add(oExit)		
		'oSelectt_Multiple_for_D3 = InputListBox("2. LIST OF REFERENCE PARMETERS (MODEL DOC)", oList_TargetParamsDwgModelDoc, oList_TargetParamsDwgModelDoc(0), Title := "2. oSelect_Other: " & oName_Para, ListName := "2. SELECT d23 or A REF. PARAMETER")
	End If
		param_D3 = oAllParams_DwgModelDoc(oName_Para)		'oName_Para)	
		param_D3_Current = param_D3.Expression		'?
		
		oList_TargetParamsDwgModelDoc.Add(param_D3_Current)
		
		oList_TargetParamsDwgModelDoc.Add(oCancel)
		oList_TargetParamsDwgModelDoc.Add(oExit)
		oSelectt_Multiple_for_D3 = InputListBox("Select for D3", oList_TargetParamsDwgModelDoc, oList_TargetParamsDwgModelDoc(0), Title := "D3", ListName := "User Parameter: D3")

		oIndex_Ref_Selected_forD3 = oList_TargetParamsDwgModelDoc.IndexOf(oSelectt_Multiple_for_D3)
		oItem_Ref_forD3 = oList_TargetParamsDwgModelDoc(oIndex_Ref_Selected_forD3)
		'param_D3 = oUserParams.Item(oItemD3)
		
		param_Ref_forD3 = oAllParams_DwgModelDoc.Item(oItem_Ref_forD3)

		If oSelectt_Multiple_for_D3 = oCancel Then
			'Do nothing
		Else If oSelectt_Multiple_for_D3 = oExit Then
'			Return oSelectt_Multiple_for_D3
		Else
			param_D3.Expression = oSelectt_Multiple_for_D3
		End If


'oName_Para = "D3"
'param_D3 = oUserParams.Item("D3")		'(oName_Para)	
'MessageBox.Show("param_D3: " & param_D3.Name _
'& vbLf & "param_D3.Expression: " & param_D3.Expression _
'& vbLf & "oUserParams(2): " & oUserParams(2).ModelValue, "Title")	
	
	
	iLogicVb.UpdateWhenDone = True
	InventorVb.DocumentUpdate()

End Sub	


Function oD3_DP(oDerivedPart, oDN_DwgModelDoc, oAllParams_DwgModelDoc, oReferenceParams_DwgModelDoc)		'Public Sub ModifDerivedParams()
		Dim oDerPartComp As DerivedPartComponent
		'Dim oName_SeletedRef_DerivedPart As DerivedPartComponent
		Dim oList_RefDocs_DerivedPart As New ArrayList()

		For Each oRefDoc_DerivedPart In oDerivedPart.ComponentDefinition.ReferenceComponents.DerivedPartComponents
			oList_RefDocs_DerivedPart.Add(oRefDoc_DerivedPart.Name)
		Next oRefDoc_DerivedPart

		Dim oName_SeletedRef_DerivedPart As String	'To select a derived (reference) part
		oName_SeletedRef_DerivedPart = InputListBox("Prompt, oList_RefDocs_DerivedPart: ", oList_RefDocs_DerivedPart, oList_RefDocs_DerivedPart(0), Title := "SELECT DP FROM", ListName := "LIST OF oList_RefDocs_DerivedPart")
		xIndex  = oList_RefDocs_DerivedPart.IndexOf(oName_SeletedRef_DerivedPart)


		Dim oRefDPComp_ModelDoc_Selected As DerivedPartComponent
		oDerPartComp = oDerivedPart.ComponentDefinition.ReferenceComponents.DerivedPartComponents(xIndex + 1)
		Dim oDef_SelectedDerivedPart As DerivedPartUniformScaleDef
		oDef_SelectedDerivedPart = oDerPartComp.Definition
		
		Dim oDerEntity As DerivedPartEntity
		
		Dim oList_Params_RefDP_Selected As New ArrayList()
		For Each oDerEntity In oDef_SelectedDerivedPart.Parameters	'Parameters	'oRefDP_Def_ModelDoc_Selected.Parameters
			oList_Params_RefDP_Selected.Add(oDerEntity.ReferencedEntity.Name)
		Next oDerEntity

		'oList_View = InputListBox("Prompt", oList_Params_RefDP_Selected, oList_Params_RefDP_Selected(0), Title := "Title", ListName := "List")


	
	Dim oShortList_Params As New ArrayList()		'Short list of paramaters from the derived part selected

	Do	'To add selected Parameters To list
		oParam_RefDP_Selected = InputListBox("oD3_DP 1: Prompt", oList_Params_RefDP_Selected, oList_Params_RefDP_Selected(0), Title := "oD3_DP 1: CLICK ''X'' TO CLOSE!", ListName := "oD3_DP 1: Parameters from " & oName_SeletedRef_DerivedPart)
		If oParam_RefDP_Selected = "" Then Exit Do 'If "X" at top left corner hit
		oShortList_Params.Add(oParam_RefDP_Selected)
				oIndex = oList_Params_RefDP_Selected.IndexOf(oParam_RefDP_Selected)
				oDerEntity = oDef_SelectedDerivedPart.Parameters.Item(oParam_RefDP_Selected)
				oDerEntity.IncludeEntity  = True
				oList_Params_RefDP_Selected.Remove(oList_Params_RefDP_Selected(oIndex))
	Loop While oParam_RefDP_Selected IsNot Nothing
		
		
	       'Set Definition back, so DerivedPart Document is updated

        oDerPartComp.Definition = oDef_SelectedDerivedPart
	
	
iLogicVb.UpdateWhenDone = True
InventorVb.DocumentUpdate()
ThisDoc.Save

End Function


0 Likes

RoyWickrama_RWEI
Advisor
Advisor

Based upon help received from forum, I further improved this rule.

 

https://forums.autodesk.com/t5/forums/replypage/board-id/120/message-id/100694

I thank Hideo Yamada for the help.