Option Explicit ' COPYRIGHT DASSAULT SYSTEMES 2005 ' ***************************************************************************** ' Purpose: This sample illustrates the use of IDL interfaces ' CATIAPspAttribute and CATIAPspID ' ' Assumption: Looks for document CAAPspEduIn.CATProduct. ' ' Languages: VBScript ' Locales: English ' CATIA Level: V5R15 ' ***************************************************************************** '--- strMessage_g is a global variable visible to all private Sub/Function Dim strMessage_g As String Sub CATMain() ' ------------------------------------------------------------------------- ' Optional: allows to find the sample wherever it's installed Dim sDocPath As String Dim sDocFullPath As String sDocPath=CATIA.SystemService.Environ("CATDocView") If (Not CATIA.FileSystem.FolderExists(sDocPath)) Then Err.Raise 9999,sDocPath,"No Doc Path Defined" End If ' ------------------------------------------------------------------------- ' Open the Distributive system document Dim objPspDoc As Document sDocFullPath = CATIA.FileSystem.ConcatenatePaths(sDocPath, _ "online\CAAScdPspUseCases\samples\CAAPspEduIn.CATProduct" ) Set objPspDoc = CATIA.Documents.Open(sDocFullPath) strMessage_g = _ "--------------------------------------------------------------------" & vbCr strMessage_g = strMessage_g & _ "Output traces from CAAPspQueryProperties.CATScript" & vbCrLf Dim objPrdRoot As Product Dim objPspWorkbench As PspWorkbench ' Find the top node of the Distribute System object tree - . If ( Not ( objPspDoc Is Nothing ) ) Then Set objPrdRoot = objPspDoc.Product If ( Not ( objPrdRoot Is Nothing ) ) Then Set objPspWorkbench = objPrdRoot.GetTechnologicalObject ("PspWorkbench") End If End If Dim objPspApplication As PspApplication Dim objPspAppFactory As PspAppFactory Dim objPspID As PspID Dim objPspAttribute As PspAttribute Dim objPspPhysical As PspPhysical Dim objLPhysicals As PspListOfObjects Dim intNbPhysical As Integer Dim ePspIDLDomainID As CatPspIDLDomainID Dim objLStrAttrNames As PspListOfBSTRs Dim intIndex As Integer Dim intNbAttr As Integer ePspIDLDomainID = catPspIDLCATPIP '----------------------------------------------------------------------- ' Get PspWorkBench, PspApplication '----------------------------------------------------------------------- If ( objPspWorkbench Is Nothing ) Then strMessage_g = strMessage_g & "Unable to get PspWorkbench" & vbCr Else strMessage_g = strMessage_g & "Success in getting PspWorkbench" & vbCr End If If ( Not ( objPspWorkbench Is Nothing ) ) Then Set objPspApplication = objPspWorkbench.GetApplication(catPspIDLCATPiping) If ( Not(objPspApplication Is Nothing ) ) Then objPspApplication.Initialization() End If End If '--- If ( Not ( objPspWorkbench Is Nothing )... '----------------------------------------------------------------------- ' Get PspPhysical object '----------------------------------------------------------------------- If ( Not ( objPspWorkbench Is Nothing ) And _ Not ( objPspApplication Is Nothing ) ) Then Set objPspAppFactory = objPspWorkbench.GetInterface("CATIAPspAppFactory",objPspApplication ) If ( Not ( objPspAppFactory Is Nothing ) ) Then Set objLPhysicals = objPspAppFactory.ListPhysicals ( objPrdRoot , catPspIDLCATPIP) If ( Not ( objLPhysicals Is Nothing ) And _ ( objLPhysicals.Count > 0 ) ) Then Set objPspPhysical = objLPhysicals.Item( 1, "CATIAPspPhysical" ) End If End If End If '--- If ( Not ( objPspWorkbench Is Nothing ) and objPspApplication '----------------------------------------------------------------------- ' Get PspID object and query ID information '----------------------------------------------------------------------- If ( Not ( objPspWorkbench Is Nothing ) And _ Not ( objPspPhysical Is Nothing ) ) Then Set objPspID = objPspWorkbench.GetInterface("CATIAPspID",objPspPhysical ) If( Not ( objPspID Is Nothing )) Then QueryPspID objPspID End if End If '----------------------------------------------------------------------- ' Get PspAttribute object and query Attribute information '----------------------------------------------------------------------- If ( Not ( objPspWorkbench Is Nothing ) And _ Not ( objPspPhysical Is Nothing ) ) Then Set objPspAttribute = objPspWorkbench.GetInterface("CATIAPspAttribute",objPspPhysical ) If ( Not ( objPspAttribute Is Nothing ) ) Then '---------------------------------------------------------------------- ' List Attributes for CATPIP domain '---------------------------------------------------------------------- Set objLStrAttrNames= objPspAttribute.ListAttributes (ePspIDLDomainID ) If ( Not ( objLStrAttrNames Is Nothing ) ) Then intNbAttr = objLStrAttrNames.Count If ( intNbAttr > 0 ) Then QueryPspAttribute objPspWorkbench, objPspAttribute, objLStrAttrNames End If End If End If End If '--- If ( Not ( objPspWorkbench Is Nothing ) and objLPhysicals strMessage_g = strMessage_g & _ "--------------------------------------------------------------------" & vbCr MsgBox strMessage_g End Sub ' ----------------------------------------------------------------------------- ' | QueryPspID methods ' | ' | Input: objPspIDArg : PspID object ' | ' | ' ----------------------------------------------------------------------------- Private Sub QueryPspID (objPspIDArg As PspID) Dim strID As String Dim str2ID As String Dim strGenIDNoSeq As String Dim strGenAndPutID As String Dim strNewID As String Dim bIsIDGenerated As Boolean strMessage_g = strMessage_g & _ " --------Display ID information ----- " & vbCrLf If ( Not ( objPspIDArg Is Nothing ) ) Then strID = objPspIDArg.GetID strMessage_g = strMessage_g & "Object ID =" & strID & vbCr strNewID = strID & "NewID" objPspIDArg.SetID strNewID str2ID = objPspIDArg.GetID strMessage_g = strMessage_g & "New ID set =" & str2ID & vbCr '---------------------------------------------------------- ' Generate ID without regenerating sequence num '---------------------------------------------------------- strGenIDNoSeq = objPspIDArg.GenIDNoGenSeqNum '---------------------------------------------------------- ' Generate and Put ID on the object '---------------------------------------------------------- strGenAndPutID = objPspIDArg.GenAndPutID strMessage_g = strMessage_g & "Generated ID =" & strGenAndPutID & vbCr '---------------------------------------------------------- ' Is ID generated '---------------------------------------------------------- bIsIDGenerated = objPspIDArg.IsIDGenerated If ( bIsIDGenerated ) Then strMessage_g = strMessage_g & "ID is generated " & vbCr Else strMessage_g = strMessage_g & "ID is not generated " & vbCr End If End If End Sub ' ----------------------------------------------------------------------------- ' | QueryPspAttribute methods ' | ' | Input: objPspWorkbenchArg : PspWorkbench object ' | objPspIDArg : PspID object ' | objLStrAttrNamesArg: PspListOfBSTRs object ' ----------------------------------------------------------------------------- Private Sub QueryPspAttribute (objPspWorkbenchArg As PspWorkbench, _ objPspAttributeArg As PspAttribute, _ objLStrAttrNamesArg As PspListOfBSTRs ) Dim intNbAttr As Integer Dim intIdx As Integer Dim strAttrName As String Dim strAttrValue As String Dim eAttrDataType As CatPspIDLAttrDataType Dim objAttrParam As Parameter Dim objAttrRealParam As RealParam Dim objAttrDimensionParam As Dimension Dim objAttrUnit As Unit Dim bIsDiscrete As Boolean Dim bIsDerived As Boolean Dim iDiscreteType As Short Dim objLIntDiscreteVals As PspListOfLongs Dim objLStrDiscreteVals As PspListOfBSTRs Dim objLStrEncDiscreteVals As PspListOfBSTRs Dim objLStrDecDiscreteVals As PspListOfBSTRs strMessage_g = strMessage_g & _ " --------Display Attribute information ----- " & vbCrLf intNbAttr = objLStrAttrNamesArg.Count strMessage_g = strMessage_g & "Number of Attributes = " & intNbAttr & vbCrLf If ( Not ( objPspAttributeArg Is Nothing ) And _ Not ( objPspWorkbenchArg Is Nothing )) Then If ( intNbAttr > 12 ) Then intNbAttr = 12 strMessage_g = strMessage_g & "Displaying first 12 attributes" & vbCr End If For intIdx = 1 To intNbAttr strAttrName = objLStrAttrNamesArg.Item (intIdx) '----------------------------------------------------- ' Getting type, Discrete, Derived status of the attribute '------------------------------------------------------- eAttrDataType = objPspAttributeArg.GetType (strAttrName) iDiscreteType = objPspAttributeArg.IsDiscrete ( strAttrName, bIsDiscrete) bIsDerived = objPspAttributeArg.IsDerived (strAttrName) If ( bIsDerived ) Then strMessage_g = strMessage_g & " Attribute " & strAttrName strMessage_g = strMessage_g & " is Derived" & vbCr End If '------ bIsDerived '------------------------------------------------- ' Handling Integer, String and boolean attributes '------------------------------------------------- If ( (eAttrDataType = catPspIDLInteger ) Or _ (eAttrDataType = catPspIDLString ) Or _ (eAttrDataType = catPspIDLBoolean ) ) Then Set objAttrParam = objPspAttributeArg.GetParameter (strAttrName) If ( Not( objAttrParam Is Nothing) ) Then strAttrValue = objAttrParam.ValueAsString strMessage_g = strMessage_g & " Attribute " & strAttrName strMessage_g = strMessage_g & " = " & strAttrValue End If If ( bIsDiscrete ) Then strMessage_g = strMessage_g & " is Discrete" '-------------------------------------------- ' Get discrete values for String attribute '-------------------------------------------- If (eAttrDataType = catPspIDLString )Then If ( iDiscreteType = 1) Then Set objLStrDiscreteVals = _ objPspAttributeArg.ListStringDiscreteValues (strAttrName ) End If If ( iDiscreteType = 2) Then objPspAttributeArg.ListEncodedDecodedDiscreteValues strAttrName, _ ObjLStrEncDiscreteVals, ObjLStrDecDiscreteVals End If End If '-------------------------------------------- ' Get discrete values for Integer attribute '-------------------------------------------- If (eAttrDataType = catPspIDLInteger )Then If ( iDiscreteType = 1) Then Set objLIntDiscreteVals = _ objPspAttributeArg.ListIntegerDiscreteValues (strAttrName ) End If If ( iDiscreteType = 2) Then objPspAttributeArg.ListEncodedDecodedDiscreteValues strAttrName, _ ObjLStrEncDiscreteVals, ObjLStrDecDiscreteVals End If End If End If strMessage_g = strMessage_g & vbCr End If '------------------------------------------------- ' Handling Real (Double) attribute ' Some attribute could be with magnitude If( (eAttrDataType = catPspIDLDouble ) ) Then Set objAttrRealParam = objPspAttributeArg.GetParameter (strAttrName) If ( Not( objAttrRealParam Is Nothing) ) Then ' ------------------------------------- ' Checking if CATIADimension handle ' can be obtained from Real parameter Set objAttrDimensionParam = objPspWorkbenchArg.GetInterface( _ "CATIADimension",objAttrRealParam ) strAttrValue = objAttrRealParam.ValueAsString strMessage_g = strMessage_g & " Attribute " & strAttrName strMessage_g = strMessage_g & " = " & strAttrValue End If ' --------------------------------------------- ' Getting Unit handler from the Dimension object ' ---------------------------------------------- If ( Not( objAttrDimensionParam Is Nothing) ) Then Set objAttrUnit = objAttrDimensionParam.Unit End If If ( Not( objAttrUnit Is Nothing) ) Then strMessage_g = strMessage_g & " , unit = " & objAttrUnit.Symbol End If If ( bIsDiscrete ) Then strMessage_g = strMessage_g & " is Discrete" End If strMessage_g = strMessage_g & vbCr End If ' Real attribute Next ' End for loop index = intIdx End If ' Not ( objPspAttributeArg Is Nothing ) End Sub