Option Explicit
' COPYRIGHT DASSAULT SYSTEMES 2005
' *****************************************************************************
' Purpose: This sample checks how to check if two parts are connected.
' Furthermore, if the parts are connected they are disconnected.
' Assumption: Looks for document CAAPspEduIn.CATProduct
' Looks for objects V-117 and Gasket-012
'
' 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 CAAPspDisconnectParts.CATScript" & vbCrLf
Dim objPrdRoot As Product
Dim objPspWorkbench As PspWorkbench
'-----------------------------------------------
' Find the top node of the Distributive 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 ePspIDLDomainID As CatPspIDLDomainID
Dim iIdx 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
strMessage_g = strMessage_g & "Success in getthing objPspApplication" & vbCr
objPspApplication.Initialization()
End If
End If '--- If ( Not ( objPspWorkbench Is Nothing )...
'-----------------------------------------------------------------------
' Get list of physical (3D) objects in the Piping domain
'-----------------------------------------------------------------------
Dim objLPhysicals As PspListOfObjects
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)
End If
End If '--- If ( Not ( objPspWorkbench Is Nothing ) and objPspApplication
'
' --------------------------------------------------------------
' Get PspConnectable object corresponding to Valve with ID=V-117
' and Gasket whose ID = Gasket-012
' ---------------------------------------------------------------
Dim objValveCtbl As PspConnectable
Dim objGasketCtbl As PspConnectable
If ( Not ( objLPhysicals Is Nothing ) And _
( objLPhysicals.Count > 0 ) ) Then
Set objValveCtbl = FindPipingPartByID (objLPhysicals, "V-117")
Set objGasketCtbl = FindPipingPartByID (objLPhysicals,"Gasket-012")
End If
'-----------------------------------------------------------------------
' Get Connnected objects on the valve to see if Gasket-012 is connected
' to V-117
'-----------------------------------------------------------------------
If ( Not (objValveCtbl Is Nothing) And _
Not (objGasketCtbl Is Nothing)) Then
strMessage_g = strMessage_g & "Found Valve and Gasket" & vbCr
Dim objLClassFilter As CATIAPspListOfBSTRs
Dim objLCntbles As PspListOfObjects
Dim objLCntrsOnThisObj As PspListOfObjects
Dim objLCntrsOnConnected As PspListOfObjects
Dim iIdxOfGasket As Integer
iIdxOfGasket = 0
Set objLClassFilter = Nothing
objValveCtbl.ListConnectables objLClassFilter, objLCntbles, _
objLCntrsOnThisObj, objLCntrsOnConnected
If ( Not ( objLCntbles Is Nothing ) ) Then
Dim objAIDCntbl As PspID
strMessage_g = strMessage_g & _
"Number of Connected objects= " & objLCntbles.Count & vbCr
For iIdx = 1 To objLCntbles.Count
Set objAIDCntbl = objLCntbles.Item (iIdx, "CATIAPspID")
Dim strCntdID As String
If ( Not (objAIDCntbl Is Nothing) ) Then
strCntdID = objAIDCntbl.GetID
If ( strCntdID = "Gasket-012" ) Then
iIdxOfGasket = iIdx
Exit For ' Exit out of the for loop
End If
End If
Next
End If
'---------------------------------------
' To Disconnect V-117 and Gasket-012
' get correspoding connectors from the lists objLCntrsOnThisObj
' and objLCntrsOnConnected at location at index=iIdxOfGasket
'---------------------------------------
If ( iIdxOfGasket > 0 ) Then
Dim objPspCntrValve As PspConnector
Dim objPspCntrGasket As PspConnector
Dim bIsConnected As Boolean
Set objPspCntrValve = objLCntrsOnThisObj.Item (iIdxOfGasket, "CATIAPspConnector")
Set objPspCntrGasket = objLCntrsOnConnected.Item (iIdxOfGasket, "CATIAPspConnector")
If ( Not(objPspCntrValve Is Nothing) And _
Not(objPspCntrGasket Is Nothing)) Then
strMessage_g = strMessage_g & "V-117 and Gasket-012 are connected at: " & vbCr
strMessage_g = strMessage_g & " V-117 ctr =" & objPspCntrValve.ConnectorName & vbCr
strMessage_g = strMessage_g & " Gasket-012 ctr =" & objPspCntrGasket.ConnectorName _
& vbCr
objPspCntrValve.Disconnect objPspCntrGasket
strMessage_g = strMessage_g & "V-117 and Gasket-012 successfully disconnected" & vbCr
End If
Else
strMessage_g = strMessage_g & "V-117 and Gasket-012 are not connected." & vbCr
End If '--- index of connected object (iIdxOfGasket ) > 0
End if
strMessage_g = strMessage_g & _
"--------------------------------------------------------------------" & vbCr
MsgBox strMessage_g
End Sub
' -----------------------------------------------------------------------------
' | FindPipingPartByID functions
' |
' | Input: objLPhysicalsArg : PspListOfObjects object
' | strIDArg : ID of an object that looking for
' |
' | Output: PspConnectable object having ID = strIDArg
' -----------------------------------------------------------------------------
Private Function FindPipingPartByID ( objLPhysicalsArg As PspListOfObjects, _
strIDArg As String ) As PspConnectable
Dim intNbPhysical As Integer
Dim iIndex As Integer
Dim objPspID As PspID
Dim strID As String
' ------------------------------------------------
' Setting the output of the function to Nothing
'
Set FindPipingPartByID = Nothing
If ( Not ( objLPhysicalsArg Is Nothing ) ) Then
intNbPhysical = objLPhysicalsArg.Count
For iIndex = 1 To intNbPhysical
Set objPspID = objLPhysicalsArg.Item (iIndex,"CATIAPspID")
If ( Not ( objPspID Is Nothing )) Then
'--------------------
' Check if ID matches
If ( strIDArg = objPspID.GetID ) Then
Set FindPipingPartByID = objLPhysicalsArg.Item (iIndex,"CATIAPspConnectable")
Exit For ' Exit out of the for loop
End If
End IF
Next '----- End of loop index=iIndex
End If
End Function