Option Explicit
' COPYRIGHT DASSAULT SYSTEMES 2001
Dim Language as String
Language="VBScript"
' ***********************************************************************
' Purpose: Given a CATProduct document,
' this macro filters the parameters right below the root
' product.
' Note: You cannot retrieve the list of parameters
' right below the root product by using the
' Product.Parameters attribute of the active document
' because if you do this, you retrieve all the
' parameters of the CATProduct document (parameters
' right below the root product as well as parameters
' below components.
' The trick is to determine whether a parameter which belongs
' to the activedocument.Product.Parameters list belongs to
' one of the sub-component parameter list.
'
' Assumptions: This macro is intended to be run on
' any CATProduct with CATProduct documents as components
'
'
' Author: Carole ROULLE , Pierre Grignon
' Languages: VBScript
' Locales: English (United States)
' CATIA Level: V5R6
' ***********************************************************************
Sub CATMain()
' -----------------------------------------------------------
' Optional: allows to find the sample wherever it's installed
dim sDocPath As String
sDocPath=CATIA.SystemService.Environ("CATDocView")
If (Not CATIA.FileSystem.FolderExists(sDocPath)) Then
Err.Raise 9999,,"No Doc Path Defined"
End If
' -----------------------------------------------------------
' Open the Part document
Dim sFilePath
sFilePath = CATIA.FileSystem.ConcatenatePaths(sDocPath, _
"online\CAAScdKniUseCases\samples\CAAKniClash.CATProduct")
Dim oDoc As Document
set oDoc = CATIA.Documents.Open(sFilePath)
' Set the CATIA popup file alerts to False
' It prevents to stop the macro at each alert during its execution
CATIA.DisplayFileAlerts = False
' Retrieve your active document - CATIA is your application
' You get the active document by using the ActiveDocument property
' on your application object
Dim oActiveDoc As Document
Set oActiveDoc = CATIA.ActiveDocument
Dim i,j,k As Integer
Dim BelongToComp As Integer
' Check whether the document is a CATProduct
If (InStr(oActiveDoc.Name,".CATProduct")) <> 0 Then
' Scan the complete list of parameters
Dim oProductList As Products
Set oProductList = oActiveDoc.Product.Products
Dim S1 As String
For i = 1 to oActiveDoc.Product.Parameters.Count
S1 = oActiveDoc.Product.Parameters.Item(i).Name
' Use the BelongToComp flag to set the parameter status
' Initial value = 0 (does not belong to a sub-component)
BelongToComp = 0
' Scan each parameter list of a sub-component
For j = 1 to oProductList.Count
For k = 1 to oProductList.Item(j).Parameters.Count
' If the document parameter is the same as the sub-component
' parameter - Sets the flag to 1
if S1 = oProductList.Item(j).Parameters.Item(k).name then
BelongToComp = 1
end if
next
Next
' if the flag is set to 0 - the document parameter
' does not belong to ant sub-component
' Conclusion: it is right below the root
if BelongToComp = 0 then
msgbox S1
end if
Next
Else
MsgBox "The active document must be a CATProduct"
End If
End Sub