Distributive Systems

Querying Stretchable Data


This use case is intended to show you how to obtain data of a stretchable object using a macro.

This macro opens the document CAAPsp3DEduIn.CATProduct. Using the root node of the document, it then finds a Stretchable object with a given instance name and to get Stretchable data.

CAAPspStretchableData is launched in CATIA [1]. No open document is needed.

CAAPspStretchableData.CATScript is located in the CAAScdPspUseCases module. Execute macro (windows only).

CAAPspStretchableData includes the following steps:

  1. Prolog
  2. Get a PspStretchable Object
  3. Get Definition Points
  4. Get Bendable Radii Information

Prolog

The macro first loads Distributive System document CAAPsp3DEduIn.CATProduct containing Equipment and Piping Design objects.

Note: To open a different document, modify the variable sDocPath to point to the document directory and sDocFullPath to point to full path name of the document.

    ' ------------------------------------------------------------------------- 
    ' Open the Distributive system document 
    Dim objPspDoc As Document

    sDocFullPath = CATIA.FileSystem.ConcatenatePaths(sDocPath, _    
       "\online\CAAScdPspUseCases\samples\CAAPsp3DEduIn.CATProduct" )

    Set objPspDoc = CATIA.Documents.Open(sDocFullPath)
    ...

Next, the macro acquires the PspWorkbench object from the document. The PspWorkbench is the top node of the object instance tree in a Distributive System application document.

    ...
    ' ---------------
    ' Find the top node of the Distributive System object tree - .  
    
    If ( Not ( objPspDoc Is Nothing ) ) Then
      'Set objPrdRoot = objPspDoc.Product 
      Set objPrdRoot = CATIA.ActiveDocument.Product
      If ( Not ( objPrdRoot Is Nothing ) ) Then
        Set objPspWorkbench = objPrdRoot.GetTechnologicalObject ("PspWorkbench")
      End If
    End If
    ...

Get a PspStretchable Object

Using the objPrdRoot as the node, navigate through the Products collection to get a product whose instance name is P-074. Then use GetInteraface method of objPspWorkbench to get PspStretchableData object corresponding to the bendable pipe.

    ...
    Dim objBendablePipe As Product
    Dim objPspStretchableData   As PspStretchableData
    If ( Not ( objPspWorkbench Is Nothing ) And _
         Not ( objPrdRoot Is Nothing ) ) Then    
      Set objBendablePipe = objPrdRoot.Products.Item("P-074")                    
      Set objPspStretchableData = objPspWorkbench.GetInterface("CATIAPspStretchableData", _
                                                objBendablePipe )                  

    End If '--- If ( Not ( objPspWorkbench Is Nothing ) and objPspApplication
    ...

Get Definition Points

Macro calls ListDefinitionPoints method of PspStretchableData object (objPspStretchableData) to get a list of definition points. objLDefPoints is a collection object of the type PspListOfDoubles . Here objLDefPoints represents a list of X-Y-Z coordinates of the points such that there are doubles values per point.

      ...
      Set objLDefPoints = objPspStretchableData.ListDefinitionPoints ( _       
                            objRelAxisPrd )      

      '-----------------------------------------
      ' Display information on Definition points
      '-----------------------------------------
      If ( Not ( objLDefPoints Is Nothing ) ) Then
        iNbPts =  objLDefPoints.Count / 3
        strMessage_g = strMessage_g & _
               "Number of definition points =" &  iNbPts & vbCr
        For intIdx = 1 To objLDefPoints.Count Step 3                   
          dbX = objLDefPoints.Item( intIdx )
          dbY = objLDefPoints.Item( intIdx + 1 )
          dbX = objLDefPoints.Item( intIdx + 2 )
  
          strMessage_g = strMessage_g & "Definition pt " &  vbCr
          strMessage_g = strMessage_g & "      X= " & dbX & vbCr
          strMessage_g = strMessage_g & "      Y= " & dbY & vbCr
          strMessage_g = strMessage_g & "      Z= " & dbZ & vbCr
        Next 
      ...

Get Bendable Radii Information

Macros calls ListBendData property of PspStretchableData object to retrieve bendable radii information as objLBendRadii.

    ...
      Set objLBendRadii = objPspStretchableData.ListBendData 

      '-----------------------------------------
      ' Display Bend radii information
      '-----------------------------------------
      If ( Not ( objLBendRadii Is Nothing ) ) Then        
        iNbPts =  objLDefPoints.Count / 3
        strMessage_g = strMessage_g & _
               "Number of bend radii =" &  objLBendRadii.Count & vbCr
        For intIdx = 1 To objLBendRadii.Count 
          dbRadius = objLBendRadii.Item( intIdx )
          strMessage_g = strMessage_g & _
               "   Bend radius = " & dbRadius & vbCr
        Next
      End If
    ...

[Top]


In Short

This use case shows how to how to obtain data of a stretchable object using a macro.. A message logging the status of the critical steps is displayed at the end of the use case.

[Top]


References

[1] Replaying a macro
[Top]

Copyright © 2004, Dassault Systèmes. All rights reserved.