Sub Main If ThisDoc.Document.DocumentType <> DocumentTypeEnum.kAssemblyDocumentObject Then Exit Sub Dim oADoc As AssemblyDocument = ThisDoc.FactoryDocument Dim oParamsData As New List(Of List(Of Object)) oParamsData.Add(New List(Of Object) From {"extent_dim_X", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"extent_dim_Y", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"extent_dim_T", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"part_area", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"bend_number", "1", UnitsTypeEnum.kUnitlessUnits }) oParamsData.Add(New List(Of Object) From {"Xcubic", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"Ycubic", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"Zcubic", "1", UnitsTypeEnum.kMillimeterLengthUnits }) oParamsData.Add(New List(Of Object) From {"thread_hole_number", "1", UnitsTypeEnum.kUnitlessUnits }) EnsureParamsExist(oADoc, oParamsData) Dim oAllSubAsms As List(Of Inventor.Document) = oADoc.AllReferencedDocuments.OfType(Of Inventor.Document).Where(Function(d) d.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject).ToList If oAllSubAsms Is Nothing OrElse oAllSubAsms.Count = 0 Then Exit Sub For Each oSubAsm In oAllSubAsms EnsureParamsExist(oSubAsm, oParamsData) Next If oADoc.RequiresUpdate Then oADoc.Update2(True) End Sub Sub EnsureParamsExist(oDoc As Document, oParamsData As List(Of List(Of Object))) If oDoc Is Nothing Or (oParamsData Is Nothing OrElse oParamsData.Count = 0) Then Exit Sub If oDoc.IsModifiable = False Then Exit Sub Dim oUParams As UserParameters = oDoc.ComponentDefinition.Parameters.UserParameters For Each MainEntry In oParamsData If MainEntry.Count = 0 Then Continue For Dim oUParam As UserParameter = Nothing Try oUParam = oUParams.Item(MainEntry.First) Catch oUParam = oUParams.AddByExpression(MainEntry.First, MainEntry.Item(1), MainEntry.Last) End Try Try If Not oUParam.ExposedAsProperty Then oUParam.ExposedAsProperty = True Dim oCPF As CustomPropertyFormat = oUParam.CustomPropertyFormat oCPF.Units = oDoc.UnitsOfMeasure.GetStringFromType(MainEntry.Last) oCPF.Precision = CustomPropertyPrecisionEnum.kThreeDecimalPlacesPrecision oCPF.ShowLeadingZeros = True oCPF.ShowTrailingZeros = True Catch End Try Next End Sub