' COPYRIGHT DASSAULT SYSTEMES 2002
Option Explicit
' ***********************************************************************
' Purpose : Create a CATProduct containing all section curves of the current product in the same plane.
' Assumptions : A CATProduct document should be active having some sections.
' An environment variable named "EXPORT_DIR" must be set (ex: export EXPORT_DIR=/tmp/).
' It refers the directory where models will be stored.
' Author :
' Languages : VBScript
' Locales : English
' CATIA Level : V5R8SP1
' ***********************************************************************
' ***********************************************************************
'
' Purpose: Define the inverse of a position matrix.
'
' Inputs : matrix Array array corresponding to the matrix
'
' Outputs: inverse Array array corresponding to the inverse of the matrix
'
' ***********************************************************************
Sub MatrixInverse ( ByVal matrix, ByRef inverse )
Dim a(11)
Dim I As Integer
For I = 0 to 11
a(I) = matrix(I)
Next
inverse( 0) = a(4)*a(8) - a(7)*a(5)
inverse( 1) = a(2)*a(7) - a(8)*a(1)
inverse( 2) = a(1)*a(5) - a(4)*a(2)
inverse( 3) = a(5)*a(6) - a(8)*a(3)
inverse( 4) = a(0)*a(8) - a(6)*a(2)
inverse( 5) = a(2)*a(3) - a(5)*a(0)
inverse( 6) = a(3)*a(7) - a(6)*a(4)
inverse( 7) = a(1)*a(6) - a(7)*a(0)
inverse( 8) = a(0)*a(4) - a(1)*a(3)
inverse( 9) = -(a( 9)*inverse(0)+a(10)*inverse(3)+a(11)*inverse(6))
inverse(10) = -(a( 9)*inverse(1)+a(10)*inverse(4)+a(11)*inverse(7))
inverse(11) = -(a( 9)*inverse(2)+a(10)*inverse(5)+a(11)*inverse(8))
End Sub
' ***********************************************************************
'
' Purpose: Main.
'
' ***********************************************************************
Sub CATMain()
CATIA.DisplayFileAlerts = False
' Retrieve the Sections collection
Dim cSections As Sections
Set cSections = CATIA.ActiveDocument.Product.GetTechnologicalObject("Sections")
' Retrieve the number of Sections
Dim iNbSection As Integer
iNbSection = cSections.Count
If (iNbSection = 0) Then
Msgbox "No section"
Else
' Initialize file management
Dim sExportDir As String
sExportDir = CATIA.SystemService.Environ("EXPORT_DIR")
' Initialize section management
Dim sV4ModelName()
ReDim sV4ModelName(iNbSection)
sV4ModelName(0) = " "
Dim sV4ModelType As String
sV4ModelType = "model"
Dim dPosition(11) ' Position matrix of a section
Dim dInverse(11) ' Inverse of position matrix
Dim dAllPosition() ' Array of all section position matrices
ReDim dAllPosition(iNbSection, 11)
' Loop on all sections
Dim oSection As Section
Dim oExportDoc As Document
Dim iNbExported As Integer
iNbExported = 0
Dim I As Integer
Dim J As Integer
For I=1 to iNbSection
Set oSection = cSections.Item(I)
' Treat only if section is not empty
If (oSection.IsEmpty <> 0) Then
' Export the Section into a V4 model
Set oExportDoc = oSection.Export
sV4ModelName(iNbExported)= sExportDir + oSection.Name + ".model"
oExportDoc.ExportData sV4ModelName(iNbExported), sV4ModelType
' Store the position of the section
oSection.GetPosition dPosition
For J=0 to 11
dAllPosition(iNbExported, J) = dPosition(J)
Next
iNbExported = iNbExported + 1
oExportDoc.Close
Set oExportDoc = Nothing
End If
Set oSection = Nothing
Next
' Create a new CATProduct to receive section curves
Dim oNewDocument As Document
Set oNewDocument = CATIA.Documents.Add("Product").Product
oNewDocument.Products.AddComponentsFromFiles sV4ModelName , sV4ModelType
' Move the components to flatten the section
Dim oComponent As Product
For I=1 to iNbExported
Set oComponent = oNewDocument.Products.Item(I)
oComponent.ApplyWorkMode DESIGN_MODE
For J=0 to 11
dPosition(J) = dAllPosition(I-1, J)
Next
MatrixInverse dPosition, dInverse
oComponent.Move.Apply dInverse
Set oComponent = Nothing
Next
' Hide skeletton geometry
Dim oSelection As Selection
Set oSelection = CATIA.ActiveDocument.Selection
oSelection.Clear
oSelection.Search "('CATIA V4'.PLN + 'CATIA V4'.AXS),all"
oSelection.VisProperties.SetShow 1
oSelection.Clear
Set oSelection = Nothing
' Modify the viewpoint to 'top view'
Dim oViewer As Viewer
Set oViewer = CATIA.ActiveWindow.ActiveViewer
Dim oViewpoint As Viewpoint3D
Set oViewpoint = oViewer.Viewpoint3D
oViewer.Reframe
Dim StdSightDirection(2)
StdSightDirection(0) = 0.
StdSightDirection(1) = 0.
StdSightDirection(2) = -1.
Dim StdUpDirection(2)
StdUpDirection(0) = 0.
StdUpDirection(1) = 1.
StdUpDirection(2) = 0.
Dim Origin(2)
oViewpoint.GetOrigin Origin
Dim SightDirection(2)
oViewpoint.GetSightDirection SightDirection
Dim Focus As Double
Focus = oViewpoint.FocusDistance
For I = 0 to 2
Origin(I) = Origin(I) + Focus*(SightDirection(I) - StdSightDirection(I))
Next
oViewpoint.PutOrigin Origin
oViewpoint.PutSightDirection StdSightDirection
oViewpoint.PutUpDirection StdUpDirection
oViewpoint.ProjectionMode = catProjectionCylindric
oViewer.Update
Set oViewpoint = Nothing
Set oViewer = Nothing
End If
Set cSections = Nothing
End Sub