Sub Main Dim oDoc As Document = ThisDoc.Document Dim oPrtMatl, oVirtCompMatl, oWeldBeadMatl As MaterialAsset Dim oReport As System.Text.StringBuilder = New System.Text.StringBuilder() If oDoc.DocumentType = DocumentTypeEnum.kPartDocumentObject Then Dim oPDoc As PartDocument = oDoc oPrtMatl = oPDoc.ActiveMaterial oReport.AppendLine("Part Active Material:") CollectMaterialAssetData(oPrtMatl, oReport) ElseIf oDoc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then Dim oADoc As AssemblyDocument = oDoc oVirtCompMatl = oADoc.ComponentDefinition.DefaultVirtualComponentMaterial oReport.AppendLine("Assembly Default Virtual Component Material:") CollectMaterialAssetData(oVirtCompMatl, oReport) If TypeOf oADoc.ComponentDefinition Is WeldmentComponentDefinition Then Dim oWmntDef As WeldmentComponentDefinition = oADoc.ComponentDefinition oWeldBeadMatl = oWmntDef.WeldBeadMaterial oReport.AppendLine("Weldment Weld Bead Material:") CollectMaterialAssetData(oWeldBeadMatl, oReport) End If End If If oReport.Length > 0 Then Logger.Info(vbCrLf & oReport.ToString) End If End Sub Sub CollectMaterialAssetData(ByVal oMatl As MaterialAsset, ByRef oSB As System.Text.StringBuilder) 'oSB.AppendLine("Material Report:" & vbCrLf) oSB.AppendLine("DisplayName = " & oMatl.DisplayName) oSB.AppendLine("Name = " & oMatl.Name) oSB.AppendLine("CategoryName = " & oMatl.CategoryName) oSB.AppendLine("HasTexture = " & oMatl.HasTexture) oSB.AppendLine("IsReadOnly = " & oMatl.IsReadOnly) oSB.AppendLine("IsUsed = " & oMatl.IsUsed) oSB.AppendLine("Associated AppearanceAsset.DisplayName = " & oMatl.AppearanceAsset.DisplayName) oSB.AppendLine("Associated PhysicalPropertiesAsset.DisplayName = " & oMatl.PhysicalPropertiesAsset.DisplayName) oSB.AppendLine("Count (number of AssetValues) = " & oMatl.Count) oSB.AppendLine("<<<< ASSET VALUE DATA >>>>") For Each oAV As AssetValue In oMatl CollectAssetValueData(oAV, oSB) Next End Sub Sub CollectAssetValueData(ByVal oAV As AssetValue, ByRef oSB As System.Text.StringBuilder) oSB.AppendLine(vbTab & "DispayName = " & oAV.DisplayName) oSB.AppendLine(vbTab & "Name = " & oAV.Name) oSB.AppendLine(vbTab & "ValueType.ToString = " & oAV.ValueType.ToString) oSB.AppendLine(vbTab & "Type.ToString = " & oAV.Type.ToString) oSB.AppendLine(vbTab & "IsReadOnly = " & oAV.IsReadOnly) 'routine to check ValueType then create the appropriate Derived AssetValue Type object 'so we can better extract data from it Select Case oAV.ValueType Case AssetValueTypeEnum.kAssetValueTextureType Dim oTAV As TextureAssetValue = oAV Dim oAT As AssetTexture = oTAV.Value oSB.AppendLine("TextureType.ToString = " & oAT.TextureType.ToString) Case AssetValueTypeEnum.kAssetValueTypeBoolean Dim oBool As BooleanAssetValue = oAV oSB.AppendLine(vbTab & "Value = " & oBool.Value) Case AssetValueTypeEnum.kAssetValueTypeChoice Dim oChoice As ChoiceAssetValue = oAV oSB.AppendLine(vbTab & "Value = " & oChoice.Value) Try Dim oChoiceNames() As String = {} Dim oChoiceValues() As String = {} oChoice.GetChoices(oChoiceNames, oChoiceValues) oSB.AppendLine(vbTab & vbTab & "Other Possible Choices:") For i As Integer = 0 To UBound(oChoiceNames) oSB.AppendLine(vbTab & vbTab & oChoiceNames(i) & " = " & oChoiceValues(i)) Next Catch oEx As Exception Logger.Error("Error extracting 'Choice' data from ChoiceAssetValue" & vbCrLf & oEx.Message & vbCrLf & oEx.StackTrace) End Try Case AssetValueTypeEnum.kAssetValueTypeColor Dim oColorVal As ColorAssetValue = oAV oSB.AppendLine(vbTab & "HasConnectedTexture = " & oColorVal.HasConnectedTexture) oSB.AppendLine(vbTab & "HasMultipleValues = " & oColorVal.HasMultipleValues) If Not oColorVal.HasMultipleValues Then oSB.AppendLine(vbTab & "Color = " & GetColorString(oColorVal.Value)) Else oColors = oColorVal.Values For i As Integer = 0 To UBound(oColors) oSB.AppendLine(vbTab & "Color = " & GetColorString(oColors(i))) Next End If Case AssetValueTypeEnum.kAssetValueTypeFilename Dim oFileNameVal As FilenameAssetValue = oAV oSB.AppendLine(vbTab & "HasMultipleValues = " & oFileNameVal.HasMultipleValues) If Not oFileNameVal.HasMultipleValues Then oSB.AppendLine(vbTab & "Value = " & oFileNameVal.Value) Else oFNames = oFileNameVal.Values For i As Integer = 0 To UBound(oFNames) oSB.AppendLine(vbTab & "Value = " & oFNames(i)) Next End If Case AssetValueTypeEnum.kAssetValueTypeFloat Dim oFloat As FloatAssetValue = oAV oSB.AppendLine(vbTab & "HasConnectedTexture = " & oFloat.HasConnectedTexture) oSB.AppendLine(vbTab & "HasMultipleValues = " & oFloat.HasMultipleValues) oSB.AppendLine(vbTab & "IsPercentage = " & oFloat.IsPercentage) oSB.AppendLine(vbTab & "HasLimits = " & oFloat.HasLimits) If oFloat.HasLimits Then Dim oHasLowLimit, oHasHighLimit As Boolean Dim oLowLimit, oHighLimit As Double oFloat.GetLimits(oHasLowLimit, oLowLimit, oHasHighLimit, oHighLimit) oSB.AppendLine(vbTab & vbTab & "HasLowLimit = " & oHasLowLimit) If oHasLowLimit Then oSB.AppendLine(vbTab & vbTab & "LowLimit = " & oLowLimit) oSB.AppendLine(vbTab & vbTab & "HasHighLimit = " & oHasHighLimit) If oHasHighLimit Then oSB.AppendLine(vbTab & vbTab & "HighLimit = " & oHighLimit) End If If Not oFloat.HasMultipleValues Then oSB.AppendLine(vbTab & "Value = " & oFloat.Value) Else oVals = oFloat.Values For i As Integer = 0 To UBound(oVals) oSB.AppendLine(vbTab & "Value = " & oVals(i)) Next End If Case AssetValueTypeEnum.kAssetValueTypeInteger Dim oIntVal As IntegerAssetValue = oAV oSB.AppendLine(vbTab & "HasMultipleValues = " & oIntVal.HasMultipleValues) oSB.AppendLine(vbTab & "HasLimits = " & oIntVal.HasLimits) If oIntVal.HasLimits Then Dim oHasLowLimit, oHasHighLimit As Boolean Dim oLowLimit, oHighLimit As Double oIntVal.GetLimits(oHasLowLimit, oLowLimit, oHasHighLimit, oHighLimit) oSB.AppendLine(vbTab & vbTab & "HasLowLimit = " & oHasLowLimit) If oHasLowLimit Then oSB.AppendLine(vbTab & vbTab & "LowLimit = " & oLowLimit) oSB.AppendLine(vbTab & vbTab & "HasHighLimit = " & oHasHighLimit) If oHasHighLimit Then oSB.AppendLine(vbTab & vbTab & "HighLimit = " & oHighLimit) End If If Not oIntVal.HasMultipleValues Then oSB.AppendLine(vbTab & "Value = " & oIntVal.Value) Else oVals = oIntVal.Values For i As Integer = 0 To UBound(oVals) oSB.AppendLine(vbTab & "Value = " & oVals(i)) Next End If Case AssetValueTypeEnum.kAssetValueTypeReference Dim oRefVal As ReferenceAssetValue = oAV oSB.AppendLine(vbTab & "(The 'Value' of a 'ReferenceAssetValue' is another 'Asset'.)") oSB.AppendLine(vbTab & "HasMultipleValues = " & oRefVal.HasMultipleValues) Case AssetValueTypeEnum.kAssetValueTypeString Dim oStVal As StringAssetValue = oAV oSB.AppendLine(vbTab & "Value = " & oStVal.Value) Case AssetValueTypeEnum.kAssetValueUnknownType 'do nothing here End Select oSB.AppendLine(vbCrLf ) End Sub Function GetColorString(oColor As Color) As String GetColorString = oColor.Red & "," & oColor.Green & "," & oColor.Blue & "," & oColor.Opacity End Function