From bd1b8a25d325e94c051d9d29a9e282d2a19baef4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=B6ren=20M=C3=BCnker?= <mnk@wzl.rwth-aachen.de>
Date: Mon, 4 Jan 2021 16:32:26 +0100
Subject: [PATCH] Refactor: Removal of unused code.

---
 CatiaNetTest/AssemblyTiers2.vb          |   98 +-
 CatiaNetTest/AssemblyTiers3.vb          | 2027 -----------------------
 CatiaNetTest/bin/Debug/CatiaNetTest.exe |  Bin 150016 -> 149504 bytes
 CatiaNetTest/bin/Debug/CatiaNetTest.pdb |  Bin 212480 -> 212480 bytes
 CatiaNetTest/obj/Debug/CatiaNetTest.exe |  Bin 150016 -> 149504 bytes
 CatiaNetTest/obj/Debug/CatiaNetTest.pdb |  Bin 212480 -> 212480 bytes
 6 files changed, 4 insertions(+), 2121 deletions(-)
 delete mode 100644 CatiaNetTest/AssemblyTiers3.vb

diff --git a/CatiaNetTest/AssemblyTiers2.vb b/CatiaNetTest/AssemblyTiers2.vb
index c9b973e..0a317b5 100644
--- a/CatiaNetTest/AssemblyTiers2.vb
+++ b/CatiaNetTest/AssemblyTiers2.vb
@@ -51,19 +51,9 @@ Public Class AssemblyTiers2
 
     Sub CatMain()
         MsgBox("OK, lets start!")
-        ''Test parameters
-        'iBoundingBoxCode = 1
-        'bBoundingBoxProjectionCheck = True
-        'bConnectivityCheck = False
-        'bAutomaticStep = False
-        'intStep = 5
-        'dCollSens = 2
-        'bChooseExtractionDirection = False
-        ''number of analysed disassembly directions
-        ''6 - only global axes, 12 - including local axes
-        'intJ = 6
+
+        'TODO: Include in Form
         xlsPath = "D:\03_Dissertation\20_Tools\CATIA_NET\ProgData\"
-        'xlsFileName = "Centrifugal pump 5mm step"
 
         CATIA = GetObject(, "CATIA.Application")
         If CATIA Is Nothing Then CATIA = CreateObject("CATIA.Application")
@@ -203,7 +193,7 @@ Public Class AssemblyTiers2
         Debug.Print("Number of faces in assembly: " & CStr(intNumFaces))
 
         'Export BB volumes of parts to Excel
-        'ExportBBVolumes()
+        ExportBBVolumes()
 
         'Collision parameters
         If bAutomaticStep Then
@@ -229,13 +219,6 @@ Public Class AssemblyTiers2
             aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
         Next i
 
-        'MsgBox("Removal distances for " & cRelevantProducts.Item(1).PartNumber & ":" & vbNewLine &
-        '"X_pos = " & aRemovalDistances(0, 0) & vbNewLine &
-        '"X_neg = " & aRemovalDistances(0, 1) & vbNewLine &
-        '"Y_pos = " & aRemovalDistances(0, 2) & vbNewLine &
-        '"Y_neg = " & aRemovalDistances(0, 3) & vbNewLine &
-        '"Z_pos = " & aRemovalDistances(0, 4) & vbNewLine &
-        '"Z_neg = " & aRemovalDistances(0, 5))
 
         '#################### Main algorithm ##########################
 
@@ -438,8 +421,6 @@ entry1:
                                         'if the disassembly tier is 1 lower (attention: tiers get reversed in the end to the assembly tiers!)
                                         If secTier = intTier - 1 And Not (secTier = 0 And intTier = 1) Then
 
-                                            'Debug.Print("Collision with higher tier: " & oConflict1.FirstProduct.Name & " - " & oConflict1.SecondProduct.Name & " = " & oConflict1.Value)
-
                                             'record precedence relation, because secProduct is an obstacle in the way of the current product
                                             precedenceMatrix(int_i, iIndex) = 1
 
@@ -680,19 +661,11 @@ exitCD:
                 Next intAxis
                 'Only for products with multiple extraction directions
                 If sum > 1 Then
-                    'Add options to ComboBox
-                    For intAxis = 0 To intJ - 1
-                        If disassDir(int_i, intAxis) = 1 Then
-                            'ExtractionDirection.ComboBox1.AddItem(d1.Item(intAxis))
-                        End If
-                    Next intAxis
                     'Highlight the product in CATIA
                     Dim selection5 As Selection
                     selection5 = CATIA.ActiveDocument.Selection
                     selection5.Clear()
                     selection5.Add(cRelevantProducts.Item(int_i + 1))
-                    'Show dialog
-                    'ExtractionDirection.Show
                     selection5.Clear()
                     'Translate chosen axis name back into index 0..11
                     Dim iChosenDir As Integer
@@ -884,6 +857,7 @@ exitCD:
         End If
 
     End Function
+
     Sub Liaison()
 
         Dim n As Integer = cRelevantProducts.Count
@@ -1048,15 +1022,6 @@ exitCD:
                 CATIA.StartCommand("Activate / Deactivate Component")
                 selection1.Clear()
                 intFasteners = intFasteners + 1
-                'ElseIf InStr(sName, "pin") > 0 Then
-                '    Debug.Print(prod.Name + " was identified as a pin")
-                '    selection1.Add(prod)
-
-                '    primaryFasteners.Add(prod)
-
-                '    CATIA.StartCommand("Activate / Deactivate Component")
-                '    selection1.Clear()
-                '    intFasteners = intFasteners + 1
             ElseIf InStr(sName, "nut") > 0 Or (InStr(sName, "iso") > 0 And InStr(sName, "4161") > 0) Or (InStr(sName, "din") > 0 And (InStr(sName, "934") > 0 Or InStr(sName, "439") > 0)) Then
                 Debug.Print(prod.Name + " was identified as a nut")
                 selection1.Add(prod)
@@ -1080,7 +1045,6 @@ exitCD:
             End If
         Next
 
-        'CATIA.StartCommand ("Activate / Deactivate Component")
         Debug.Print("Deactivated " + CStr(intFasteners) + " fasteners")
         intParts = intParts - intFasteners
         Debug.Print(CStr(intParts) + " parts to assemble")
@@ -1142,7 +1106,6 @@ exitCD:
 
             Dim originpoint As HybridShapePointCoord
             axissyst.GetOrigin(originCoord)
-            'MsgBox "X0 = " & CStr(originCoord(0)) & vbNewLine & "Y0 = " & CStr(originCoord(1)) & vbNewLine & "Z0 = " & CStr(originCoord(2))
 
             originpoint = hybridShapeFactory1.AddNewPointCoord(originCoord(0), originCoord(1), originCoord(2))
             axisref = part1.CreateReferenceFromObject(originpoint)
@@ -1244,7 +1207,6 @@ exitCD:
                 part1.UpdateObject(HybridShapeExtremum5)
                 part1.UpdateObject(HybridShapeExtremum6)
 
-                'part1.Update
 
                 ' Creates a 6 single points using the Extrenums as refs, so if the Extrenum was a line or surf, you can still off planes to these points
 
@@ -1303,8 +1265,6 @@ exitCD:
                 part1.UpdateObject(Point5)
                 part1.UpdateObject(Point6)
 
-                'part1.Update
-
                 axissyst.IsCurrent = 1
 
                 'Read extremum coordinates
@@ -1497,14 +1457,6 @@ exitCD:
 
     End Sub
 
-    'Public Function ArrayLen(a As Object) As Integer
-    '    If IsEmpty(a) Then
-    '        ArrayLen = 0
-    '    Else
-    '        ArrayLen = UBound(a) - LBound(a) + 1
-    '    End If
-    'End Function
-
     Function Det3x3(dX11 As Double, dX12 As Double, dX13 As Double,
                 dX21 As Double, dX22 As Double, dX23 As Double,
                 dX31 As Double, dX32 As Double, dX33 As Double) As Double
@@ -1707,22 +1659,9 @@ exitCD:
     End Sub
 
     Function collisionDetected(cClashes As Clashes, group1 As Group, group2 As Group) As Boolean
-        'cRelevantProducts As Collection, cDeactivated As Collection
 
         collisionDetected = False
 
-        'define two groups
-        '    Dim group1 As Group
-        'Dim group2 As Group
-        '     group1 = cGroups.Add
-        ' group2 = cGroups.Add
-        '    group1.AddExplicit product1
-        '    Dim relevantProduct As Product
-        '    For Each relevantProduct In cRelevantProducts
-        '      If Not relevantProduct.Name = product1.Name And Not productIsInCollection(relevantProduct, cDeactivated) Then
-        '        group2.AddExplicit relevantProduct
-        '      End If
-        '    Next relevantProduct
         'create a new clash analysis
         Dim oClash As Clash
         oClash = cClashes.Add
@@ -1730,12 +1669,10 @@ exitCD:
         oClash.FirstGroup = group1
         oClash.SecondGroup = group2
         oClash.InterferenceType = SPATypeLib.CatClashInterferenceType.catClashInterferenceTypeClearance
-        'oClash.Clearance = dCollSens
         oClash.Compute()
         Dim cConflicts As Conflicts
         cConflicts = oClash.Conflicts
         If cConflicts.Count > 0 Then
-            'MsgBox "Detected a collision: " & product1.Name
             'If at least one conflict value exceeds the collision sensitivity, it is a collision
             Dim oConflict As Conflict
             Dim c As Integer
@@ -1745,7 +1682,6 @@ exitCD:
                 If oConflict.Type = SPATypeLib.CatConflictType.catConflictTypeClash Then
                     If oConflict.Value < -dCollSens Then
                         collisionDetected = True
-                        'Debug.Print("Clash detected: " & oConflict.FirstProduct.Name & " - " & oConflict.SecondProduct.Name & " = " & oConflict.Value)
                         Exit For
                     End If
                 End If
@@ -1761,27 +1697,21 @@ exitCD:
         oPosition.GetComponents(posArray)
         If posArray(9) > aRemovalDistances(i1, 0) Then
             productReachedFinalPosition = True
-            'MsgBox "X+ removal distance reached by " & objProd.Name
         End If
         If posArray(9) < aRemovalDistances(i1, 1) Then
             productReachedFinalPosition = True
-            'MsgBox "X- removal distance reached by " & objProd.Name
         End If
         If posArray(10) > aRemovalDistances(i1, 2) Then
             productReachedFinalPosition = True
-            'MsgBox "Y+ removal distance reached by " & objProd.Name
         End If
         If posArray(10) < aRemovalDistances(i1, 3) Then
             productReachedFinalPosition = True
-            'MsgBox "Y- removal distance reached by " & objProd.Name
         End If
         If posArray(11) > aRemovalDistances(i1, 4) Then
             productReachedFinalPosition = True
-            'MsgBox "Z+ removal distance reached by " & objProd.Name
         End If
         If posArray(11) < aRemovalDistances(i1, 5) Then
             productReachedFinalPosition = True
-            'MsgBox "Z- removal distance reached by " & objProd.Name
         End If
     End Function
 
@@ -1828,16 +1758,11 @@ exitCD:
         oCurrentProd = oCurrentProd.ReferenceProduct    'You have to work with the "ReferenceProduct" object
         lNumberOfItems = oCurrentProd.Products.Count
 
-        'For i = 1 To lNumberOfItems                         'Clear out the rename array
-        '    RenameArray(i) = ""                             'Don't know if this is necessary
-        'Next
-
         'Run through this loop once, to set everything to a dummy name, to avoid naming conflicts
         For i = 1 To lNumberOfItems                             'Cycle through the assembly's children
             ItemToRename = oCurrentProd.Products.Item(i)    'Declare which item we are working on
 
             ToRenamePartNumber = ItemToRename.PartNumber        'Get the Part Number
-            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
 
             RenameArray(i) = ToRenamePartNumber                 'Building the list of part names for the numbering loop
 
@@ -1848,7 +1773,6 @@ exitCD:
                 End If
             Next
             CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
-            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'This line is for testing only
             ItemToRename.Name = ToRenamePartNumber & "TEMP." & k    'Set the new instance name, to a TEMP dummy value
 
         Next
@@ -1858,7 +1782,6 @@ exitCD:
             ItemToRename = oCurrentProd.Products.Item(i)
 
             ToRenamePartNumber = ItemToRename.PartNumber        'Toggle these two lines for testing
-            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
 
             RenameArray(i) = ToRenamePartNumber
 
@@ -1870,7 +1793,6 @@ exitCD:
             Next
 
             CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
-            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'For testing
 
             ItemToRename.Name = ToRenamePartNumber & "." & k    'Set the new instance name final
 
@@ -1942,7 +1864,6 @@ Finish:
             Do
                 intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
             Loop While intRel > 0
-            'MsgBox("Final Released obj # " & intRel)
         Catch ex As Exception
             MsgBox("Error releasing object" & ex.ToString)
             obj = Nothing
@@ -1953,12 +1874,10 @@ Finish:
 
     Sub ShowForm()
         'Create a new form to input algorithm specifications first
-        'Dim Form2 As Form = New Form()
         Me.Text = "Algorithm specifications"
         Me.Size = New System.Drawing.Size(350, 400)
         'Create elements for parameter inputs
         'Code variant for BB calculation
-        'Dim BBCodeComboBox As ComboBox = New ComboBox()
         BBCodeComboBox.Items.Add(1)
         BBCodeComboBox.Items.Add(2)
         BBCodeComboBox.Location = New System.Drawing.Point(200, 20)
@@ -1969,28 +1888,24 @@ Finish:
         Label1.Location = New System.Drawing.Point(20, 20)
         Label1.Size = New System.Drawing.Size(150, 20)
         'Projection check
-        'Dim BBPCCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
         BBPCCheckBox.Location = New System.Drawing.Point(200, 50)
         Dim Label2 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
         Label2.Text = "BB projection check"
         Label2.Location = New System.Drawing.Point(20, 50)
         Label2.Size = New System.Drawing.Size(150, 20)
         'Connectivity check
-        'Dim CCCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
         CCCheckBox.Location = New System.Drawing.Point(200, 80)
         Dim Label3 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
         Label3.Text = "Connectivity check"
         Label3.Location = New System.Drawing.Point(20, 80)
         Label3.Size = New System.Drawing.Size(150, 20)
         'Automatic step
-        'Dim AutoStepCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
         AutoStepCheckBox.Location = New System.Drawing.Point(200, 110)
         Dim Label4 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
         Label4.Text = "Automatic step"
         Label4.Location = New System.Drawing.Point(20, 110)
         Label4.Size = New System.Drawing.Size(150, 20)
         'Step
-        'Dim StepTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
         StepTextBox.Text = 5
         StepTextBox.Location = New System.Drawing.Point(200, 140)
         StepTextBox.Size = New System.Drawing.Size(50, 20)
@@ -1999,7 +1914,6 @@ Finish:
         Label5.Location = New System.Drawing.Point(20, 140)
         Label5.Size = New System.Drawing.Size(150, 20)
         'Collision sensitivity
-        'Dim CollSensTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
         CollSensTextBox.Text = 2
         CollSensTextBox.Location = New System.Drawing.Point(200, 170)
         CollSensTextBox.Size = New System.Drawing.Size(50, 20)
@@ -2008,14 +1922,12 @@ Finish:
         Label6.Location = New System.Drawing.Point(20, 170)
         Label6.Size = New System.Drawing.Size(150, 20)
         'Choice of extraction direction
-        'Dim ExtractDirCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
         ExtractDirCheckBox.Location = New System.Drawing.Point(200, 200)
         Dim Label7 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
         Label7.Text = "Choice of disassembly axis"
         Label7.Location = New System.Drawing.Point(20, 200)
         Label7.Size = New System.Drawing.Size(150, 20)
         'Number of disassembly axis
-        'Dim AxisComboBox As ComboBox = New ComboBox()
         AxisComboBox.Items.Add(6)
         AxisComboBox.Items.Add(12)
         AxisComboBox.Location = New System.Drawing.Point(200, 230)
@@ -2026,7 +1938,6 @@ Finish:
         Label8.Location = New System.Drawing.Point(20, 230)
         Label8.Size = New System.Drawing.Size(150, 20)
         'Desired name of the output Excel file
-        'Dim XLSTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
         XLSTextBox.Text = "Product"
         XLSTextBox.Location = New System.Drawing.Point(200, 260)
         Dim Label9 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
@@ -2034,7 +1945,6 @@ Finish:
         Label9.Location = New System.Drawing.Point(20, 260)
         Label9.Size = New System.Drawing.Size(150, 20)
         'OK button
-        'Dim OKButton As System.Windows.Forms.Button = New System.Windows.Forms.Button()
         OKButton.Text = "Accept parameters"
         OKButton.Location = New System.Drawing.Point(100, 310)
         OKButton.Size = New System.Drawing.Size(150, 40)
diff --git a/CatiaNetTest/AssemblyTiers3.vb b/CatiaNetTest/AssemblyTiers3.vb
deleted file mode 100644
index b74642a..0000000
--- a/CatiaNetTest/AssemblyTiers3.vb
+++ /dev/null
@@ -1,2027 +0,0 @@
-Imports System
-Imports HybridShapeTypeLib
-Imports INFITF
-Imports MECMOD
-Imports NavigatorTypeLib
-Imports ProductStructureTypeLib
-Imports SPATypeLib
-Imports PARTITF
-Imports Microsoft.Office.Interop.Excel
-
-Public Class AssemblyTiers3
-    Inherits Form
-
-    Friend WithEvents OKButton As System.Windows.Forms.Button = New System.Windows.Forms.Button()
-    Friend WithEvents BBCodeComboBox As System.Windows.Forms.ComboBox = New ComboBox()
-    Friend WithEvents BBPCCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-    Friend WithEvents CCCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-    Friend WithEvents AutoStepCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-    Friend WithEvents StepTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
-    Friend WithEvents CollSensTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
-    Friend WithEvents ExtractDirCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-    Friend WithEvents AxisComboBox As System.Windows.Forms.ComboBox = New System.Windows.Forms.ComboBox()
-    Friend WithEvents XLSTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
-
-    Public bConnectivityCheck As Boolean
-    Public bBoundingBoxProjectionCheck As Boolean
-    Public bAutomaticStep As Boolean
-    Public bChooseExtractionDirection As Boolean
-    Public intJ As Integer
-    Public iBoundingBoxCode As Integer
-    Public intStep As Integer
-    Public dCollSens As Double
-    Public xlsPath As String
-    Public xlsFileName As String
-    Public intParts As Integer
-    Public intNumFaces As Integer
-    Public primaryFasteners As New ArrayList
-    Public secondaryFasteners As New ArrayList
-    Public cAllProducts As New ArrayList
-    Public cRelevantProducts As New ArrayList
-    Public cBaseProducts As New ArrayList
-    Public aRemovalDistances(,) As Double
-    Public aAssemblyBoundaries(5) As Double
-    Public aPartBBGlob(,) As Double
-    Public aInitPos(,) As Double
-    Public liaisonMatrix(,) As Integer
-    Public sChosenDirection As String
-    Public oList As Object
-    Public CATIA As INFITF.Application
-
-
-    Sub CatMain()
-
-        ''Test parameters
-        'iBoundingBoxCode = 1
-        'bBoundingBoxProjectionCheck = True
-        'bConnectivityCheck = False
-        'bAutomaticStep = False
-        'intStep = 5
-        'dCollSens = 2
-        'bChooseExtractionDirection = False
-        ''number of analysed disassembly directions
-        ''6 - only global axes, 12 - including local axes
-        'intJ = 6
-        xlsPath = "D:\03_Dissertation\20_Tools\CATIA_NET\ProgData"
-        'xlsFileName = "Centrifugal pump 5mm step"
-
-        CATIA = GetObject(, "CATIA.Application")
-        If CATIA Is Nothing Then CATIA = CreateObject("CATIA.Application")
-
-        Debug.Print("========================================================")
-
-        Dim document As ProductDocument
-        document = CATIA.ActiveDocument
-
-        'Extraction of all "leaf" products to cAllProducts
-        ExtractProducts(document.Product)
-
-        'Collection of "leaf" Products (without nested Products)
-        Dim oInstances As New ArrayList
-        oInstances = cAllProducts
-        Dim i As Integer
-        Dim outputText As String
-
-        intParts = oInstances.Count
-        outputText = "This assembly contains " + CStr(intParts) + " parts" + vbNewLine
-        MsgBox(outputText)
-
-        'Select the assembly's base components
-        'Declare selection
-        Dim oSel As Selection
-        Dim baseSel As Object  'to deal with restricted function problem
-        oSel = CATIA.ActiveDocument.Selection
-        baseSel = oSel
-        'Create an array for CATParts
-        Dim strArray(0)
-        strArray(0) = "Part"
-        'Display a messagebox prompting the user to select CATIA parts
-        MsgBox("Please select the assembly's base components")
-        Dim sStatus As String
-        sStatus = baseSel.SelectElement3(strArray, "Select parts", False, INFITF.CATMultiSelectionMode.CATMultiSelTriggWhenUserValidatesSelection, False)
-
-        For i = 1 To baseSel.Count
-            cBaseProducts.Add(baseSel.Item(i).LeafProduct)
-            Debug.Print("Added base component: " & baseSel.Item(i).LeafProduct.Name)
-        Next
-
-        oSel.Clear()
-        baseSel.Clear
-
-        'Separation of components
-        DeactivateFasteners(document.Product)
-
-        'Display the number of relevant parts
-        outputText = CStr(cRelevantProducts.Count) + " parts are considered in precedence graph generation"
-        MsgBox(outputText)
-
-        'Distances from global axis system origin to assembly boundary (along global axis)
-        aAssemblyBoundaries(0) = -1 / 0     'max_X
-        aAssemblyBoundaries(1) = 1 / 0      'min_X
-        aAssemblyBoundaries(2) = -1 / 0     'max_Y
-        aAssemblyBoundaries(3) = 1 / 0      'min_Y
-        aAssemblyBoundaries(4) = -1 / 0     'max_Z
-        aAssemblyBoundaries(5) = 1 / 0      'min_Z
-
-        'Global coordinates, of which at least one has to be exceeded by the part origin, for that part to be "disassembled"
-        'in global axis directions
-        ReDim aRemovalDistances(cRelevantProducts.Count - 1, 5)
-        aRemovalDistances(0, 0) = 0#     'X_pos
-        aRemovalDistances(0, 1) = 0#     'X_neg
-        aRemovalDistances(0, 2) = 0#     'Y_pos
-        aRemovalDistances(0, 3) = 0#     'Y_neg
-        aRemovalDistances(0, 4) = 0#     'Z_pos
-        aRemovalDistances(0, 5) = 0#     'Z_neg
-
-        'Store information about secondary BB (6 distances to boundary planes from part origin along global x/y/z directions) - used to define aRemovalDistances
-        'Secondary BB: faces parallel to global origin planes and defined by outermost corner points of local BB of this part
-        ReDim aPartBBGlob(cRelevantProducts.Count - 1, 5)
-        aPartBBGlob(0, 0) = 0#           'x_part_glob_pos
-        aPartBBGlob(0, 1) = 0#           'x_part_glob_neg
-        aPartBBGlob(0, 2) = 0#           'y_part_glob_pos
-        aPartBBGlob(0, 3) = 0#           'y_part_glob_neg
-        aPartBBGlob(0, 4) = 0#           'z_part_glob_pos
-        aPartBBGlob(0, 5) = 0#           'z_part_glob_neg
-
-        'Initialize aPartBBGlob with safe values
-        For i = 0 To cRelevantProducts.Count - 1
-            aPartBBGlob(i, 0) = -1 / 0
-            aPartBBGlob(i, 1) = 1 / 0
-            aPartBBGlob(i, 2) = -1 / 0
-            aPartBBGlob(i, 3) = 1 / 0
-            aPartBBGlob(i, 4) = -1 / 0
-            aPartBBGlob(i, 5) = 1 / 0
-        Next
-
-        Dim BBStartTime As DateTime
-        BBStartTime = Now
-
-        'This is used to check whether a product must be moved in current iteration
-        Dim bMoveable(cRelevantProducts.Count - 1) As Boolean
-
-        'Number of faces in assembly represents the geometrical complexity of parts
-        intNumFaces = 0
-
-        For i = 0 To cRelevantProducts.Count - 1
-            Dim prodI As Product
-            If iBoundingBoxCode = 1 Then
-                'this won't work if part document name is not = part number
-                prodI = cRelevantProducts.Item(i)
-                Dim docName As String
-                docName = prodI.PartNumber + ".CATPart"
-                Debug.Print(">>> " & docName & " <<<")
-                GenerateBoundingBox(CATIA.Documents.Item(docName), prodI, i)
-            ElseIf iBoundingBoxCode = 2 Then
-                prodI = cRelevantProducts.Item(i)
-                Dim docName As String
-                docName = prodI.PartNumber + ".CATPart"
-                Dim oPartDoc As PartDocument
-                Dim sPartPath As String
-                sPartPath = prodI.GetMasterShapeRepresentationPathName
-                oPartDoc = CATIA.Documents.Read(sPartPath)
-                Debug.Print(">>> " & docName & " <<<")
-                'CATIA.Documents.Item(docName)
-                GenerateBoundingBox(oPartDoc, prodI, i)
-            Else
-                Debug.Print("Allowed bounding box code type are 1 and 2!")
-            End If
-
-            'Base component is in cRelevantProducts, but not moveable
-            If productIsInCollection(prodI, cBaseProducts) Then
-                bMoveable(i) = False
-            Else
-                bMoveable(i) = True
-            End If
-
-        Next i
-
-        Dim BBMillisecondsElapsed As Double
-        BBMillisecondsElapsed = (Now - BBStartTime).TotalMilliseconds
-        Dim BBSecondsElapsed As Double
-        BBSecondsElapsed = Math.Round(BBMillisecondsElapsed / 1000.0, 2)
-        MsgBox("Bounding box calculation took " & CStr(BBSecondsElapsed) & " seconds")
-        Debug.Print("Number of faces in assembly: " & CStr(intNumFaces))
-
-        'Export BB volumes of parts to Excel
-        ExportBBVolumes()
-
-        'Collision parameters
-        If bAutomaticStep Then
-            Dim dGeomMean As Double
-            dGeomMean = (aAssemblyBoundaries(0) - aAssemblyBoundaries(1)) * (aAssemblyBoundaries(2) - aAssemblyBoundaries(3)) * (aAssemblyBoundaries(4) - aAssemblyBoundaries(5))
-            dGeomMean = dGeomMean ^ (1 / 3)
-            intStep = Math.Round(dGeomMean / 50, 0)
-        End If
-        Debug.Print("Movement step: " & CStr(intStep))
-
-        MsgBox("Assembly dimensions: " & vbNewLine &
-        "X = " & aAssemblyBoundaries(0) - aAssemblyBoundaries(1) & vbNewLine &
-        "Y = " & aAssemblyBoundaries(2) - aAssemblyBoundaries(3) & vbNewLine &
-        "Z = " & aAssemblyBoundaries(4) - aAssemblyBoundaries(5))
-
-        'After the aAssemblyBoundaries and aPartBBGlob are calculated, define aRemovalDistances
-        For i = 0 To cRelevantProducts.Count - 1
-            aRemovalDistances(i, 0) = aAssemblyBoundaries(0) - aPartBBGlob(i, 1)
-            aRemovalDistances(i, 1) = aAssemblyBoundaries(1) - aPartBBGlob(i, 0)
-            aRemovalDistances(i, 2) = aAssemblyBoundaries(2) - aPartBBGlob(i, 3)
-            aRemovalDistances(i, 3) = aAssemblyBoundaries(3) - aPartBBGlob(i, 2)
-            aRemovalDistances(i, 4) = aAssemblyBoundaries(4) - aPartBBGlob(i, 5)
-            aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
-        Next i
-
-        'MsgBox("Removal distances for " & cRelevantProducts.Item(1).PartNumber & ":" & vbNewLine &
-        '"X_pos = " & aRemovalDistances(0, 0) & vbNewLine &
-        '"X_neg = " & aRemovalDistances(0, 1) & vbNewLine &
-        '"Y_pos = " & aRemovalDistances(0, 2) & vbNewLine &
-        '"Y_neg = " & aRemovalDistances(0, 3) & vbNewLine &
-        '"Z_pos = " & aRemovalDistances(0, 4) & vbNewLine &
-        '"Z_neg = " & aRemovalDistances(0, 5))
-
-        '#################### Main algorithm ##########################
-
-        Dim intI As Integer                   'total number of components in the scene minus base parts
-        Dim intTier As Integer                'number of current assembly tier
-        Dim int_i As Integer                  'product index in cRelevantProducts
-        Dim int_i_cycle As Integer            'product counter
-        Dim int_j As Integer                  'primary direction index 1..12
-        Dim int_j_temp As Integer             'used to display movement direction once
-        Dim int_k As Integer                  'secondary direction index 1..10
-        Dim total_coll As Long                'counter of total collision detections
-        Dim cDeactivated As New ArrayList    'really deactivated products
-        Dim cVirtual As Collection        'these funny green parts
-        Dim precedenceMatrix(cRelevantProducts.Count - 1, cRelevantProducts.Count - 1) As Single
-        Dim disassDir(cRelevantProducts.Count - 1, 11)
-        Dim aTiers(cRelevantProducts.Count - 1) As Integer
-        ReDim aInitPos(cRelevantProducts.Count - 1, 11)     'remember initial positions of the products
-        Dim bInitPosRecorded(cRelevantProducts.Count - 1) As Boolean
-        Dim bDeactivated(cRelevantProducts.Count - 1) As Boolean
-        Dim bDisassembled(cRelevantProducts.Count - 1) As Boolean
-
-        For i = 0 To cRelevantProducts.Count - 1
-            If intJ = 6 Then
-                For j = 0 To 5
-                    disassDir(i, j) = 1
-                Next
-            End If
-            If intJ = 12 Then
-                For j = 0 To 11
-                    disassDir(i, j) = 1
-                Next
-            End If
-        Next
-
-        'Before trying to remove a component, check whether it would break liaison graph connectivity
-        Dim connectivityCheckNodeIndices As New List(Of Integer)
-        If bConnectivityCheck Then
-            Dim componentIndex As Integer
-            componentIndex = 0
-            For Each oComponent In cRelevantProducts
-                connectivityCheckNodeIndices.Add(componentIndex)
-                componentIndex = componentIndex + 1
-            Next oComponent
-            'Liaison graph extraction for connectivity checks
-            Liaison()
-        End If
-
-        intI = cRelevantProducts.Count   'the index of base components will be simply skipped (cRelevantProducts includes cBaseProducts, unlike in the paper!)
-        intTier = 1                       'counts current disassembly tier (lower number means earlier disassembly possible) - this gets reversed in the end
-        int_i = 0                         'index of current part in collection of relevant products
-        int_i_cycle = 0                   'counter for the current tier iteration
-        int_j = 0                         'index of disassembly direction
-        int_j_temp = -1                    'used to display movement direction once
-        total_coll = 0
-
-        'map indices to directions (careful, starts from 0 here, but the paper and moveProduct uses 1 as start)
-        Dim d1
-        d1 = CreateObject("Scripting.Dictionary")
-        d1.Add(0, "Global X+")
-        d1.Add(1, "Global Y+")
-        d1.Add(2, "Global Z+")
-        d1.Add(3, "Global X-")
-        d1.Add(4, "Global Y-")
-        d1.Add(5, "Global Z-")
-        d1.Add(6, "Local X+")
-        d1.Add(7, "Local Y+")
-        d1.Add(8, "Local Z+")
-        d1.Add(9, "Local X-")
-        d1.Add(10, "Local Y-")
-        d1.Add(11, "Local Z-")
-
-        'access the clash technology object
-        Dim cClashes As Clashes
-        cClashes = CATIA.ActiveDocument.Product.GetTechnologicalObject("Clashes")
-        'access the groups technology object
-        Dim cGroups As Groups
-        cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")
-
-        Dim AssemblyTiersStartTime As DateTime
-        AssemblyTiersStartTime = Now
-
-        While intI > cBaseProducts.Count    'tier loop
-            While int_i_cycle < intI - cBaseProducts.Count  'part loop
-                'Processing next Product
-                Dim product1 As Product
-                product1 = cRelevantProducts.Item(int_i)
-                'Remember initial position P_i (initPos)
-                Dim initPos(11)
-                If bInitPosRecorded(int_i) = False Then
-                    Dim oPosition1 As Object
-                    oPosition1 = product1.Position
-                    oPosition1.GetComponents(initPos)
-                    Dim ip As Integer
-                    For ip = 0 To 11
-                        aInitPos(int_i, ip) = initPos(ip)
-                    Next ip
-                    bInitPosRecorded(int_i) = True
-                End If
-                If bMoveable(int_i) = True Then
-                    Debug.Print("[tier=" & intTier & ", i_cycle=" & int_i_cycle & ", I=" & intI & "] Processing part: " & product1.Name)
-                    Dim connected As Boolean
-                    connected = False
-                    If bConnectivityCheck = True Then
-                        Dim listIndex As Integer
-                        listIndex = 0
-                        For Each partIndex In connectivityCheckNodeIndices
-                            If partIndex = int_i Then
-                                Exit For
-                            Else
-                                listIndex = listIndex + 1
-                            End If
-                        Next
-                        connectivityCheckNodeIndices.RemoveAt(listIndex)
-                        'Check whether all node of LG can be visited from any other node (= connected graph)
-                        If SubassemblyIsConnected(connectivityCheckNodeIndices) Then
-                            'Put int_i back at listIndex
-                            connectivityCheckNodeIndices.Insert(listIndex, int_i)
-                            connected = True
-                        Else
-                            'If connectivity will be broken, skip this component
-                            Debug.Print("Removing " & product1.Name & " would violate liaison graph connectivity!")
-                            'Put int_i back at listIndex
-                            connectivityCheckNodeIndices.Insert(listIndex, int_i)
-                        End If
-                    Else 'no connectivity check, connectivity is assumed to hold
-                        connected = True
-                    End If
-                    If connected = True Then
-                        'Group that includes our product (needed for collision detection between two selections or groups)
-                        Dim group1 As Group
-                        group1 = cGroups.Add
-                        group1.AddExplicit(product1)
-                        'Create a Group of Products that this product shouldn't collide with
-                        Dim group2 As Group
-                        group2 = cGroups.Add
-                        Dim iStaticProduct As Integer
-                        For iStaticProduct = 0 To cRelevantProducts.Count - 1
-                            If iStaticProduct <> int_i And Not bDeactivated(iStaticProduct) Then
-                                If bBoundingBoxProjectionCheck Then
-                                    If BoundingBoxesOverlap(int_i, iStaticProduct) Then
-                                        group2.AddExplicit(cRelevantProducts.Item(iStaticProduct))
-                                    End If
-                                Else
-                                    group2.AddExplicit(cRelevantProducts.Item(iStaticProduct))
-                                End If
-                            End If
-                        Next iStaticProduct
-                        While int_j < intJ  'direction loop
-                            While productReachedFinalPosition(product1, int_i) = False 'movement loop
-                                moveProduct(product1, int_j, True)
-                                If productReachedFinalPosition(product1, int_i) = True Then
-                                    bDisassembled(int_i) = True
-                                    disassDir(int_i, int_j) = 1
-                                    Debug.Print("Successful disassembly: [" & d1.Item(int_j) & "]")
-                                End If
-                                If collisionDetected(cClashes, group1, group2) = True Then
-                                    'check for collisions with higher tier
-                                    Dim detConflicts As Conflicts
-                                    detConflicts = cClashes.Item(cClashes.Count).Conflicts
-                                    If detConflicts.Count > 0 Then
-                                        Dim oConflict1 As Conflict
-                                        Dim ic As Integer
-                                        For ic = 1 To detConflicts.Count
-                                            oConflict1 = detConflicts.Item(ic)
-                                            oConflict1.Status = SPATypeLib.CatConflictStatus.catConflictStatusRelevant
-                                            If oConflict1.Type = SPATypeLib.CatConflictType.catConflictTypeClash Then
-                                                If oConflict1.Value < -dCollSens Then
-                                                    Dim secProduct As Product
-                                                    'get the product we collided with
-                                                    secProduct = oConflict1.SecondProduct
-                                                    'find the tier of the second product
-                                                    Dim dummyProd As Product
-                                                    Dim iIndex As Integer
-                                                    iIndex = 0
-                                                    For Each dummyProd In cRelevantProducts
-                                                        If dummyProd.Name = secProduct.Name Then
-                                                            Exit For
-                                                        End If
-                                                        iIndex = iIndex + 1
-                                                    Next dummyProd
-                                                    Dim secTier As Integer
-                                                    secTier = aTiers(iIndex)
-                                                    'as soon as secTier is not the direct higher tier, no reason to move further
-                                                    If secTier < intTier - 1 Or (intTier = 1 And secTier = 0) Then
-                                                        disassDir(int_i, int_j) = 0
-                                                        Exit While
-                                                    End If
-                                                    'if the disassembly tier is 1 lower (attention: tiers get reversed in the end to the assembly tiers!)
-                                                    If secTier = intTier - 1 And Not intTier = 1 Then
-                                                        'Debug.Print("Collision with higher tier: " & oConflict1.FirstProduct.Name & " - " & oConflict1.SecondProduct.Name & " = " & oConflict1.Value)
-                                                        'record precedence relation, because secProduct is an obstacle in the way of the current product
-                                                        precedenceMatrix(int_i, iIndex) = 1
-                                                        'move the product through the "virtual" part from higher tier
-                                                    End If
-                                                End If  'deeper than dCollSens
-                                            End If    'clash
-                                        Next ic 'next conflict
-                                    End If
-                                End If
-                            End While 'movement loop
-                            'move product to initial position
-                            Dim oPosition4 As Object
-                            oPosition4 = product1.Position
-                            oPosition4.SetComponents(initPos)
-                            'take next direction
-                            int_j += 1
-                        End While 'direction loop
-                        'if this component can be disassembled, remove its index from connectivity check list
-                        If bConnectivityCheck And bDisassembled(int_i) Then
-                            Dim listInd As Integer
-                            listInd = 0
-                            For Each partIndex In connectivityCheckNodeIndices
-                                If partIndex = int_i Then
-                                    Exit For
-                                Else
-                                    listInd = listInd + 1
-                                End If
-                            Next partIndex
-                            'Remove int_i from index list (only after all directions were checked)
-                            connectivityCheckNodeIndices.RemoveAt(listInd)
-                        End If
-                    End If
-                    int_i_cycle += 1
-                Else
-                    'base component or deactivated
-                    Debug.Print("Skipping " + product1.Name + " (base component or deactivated)")
-                End If
-                int_i += 1
-                int_j = 0
-            End While 'part loop
-
-            Dim p As Integer
-            Dim intItemp As Integer
-            intItemp = intI
-            'record tiers
-            For p = 0 To cRelevantProducts.Count - 1
-                If productIsInCollection(cRelevantProducts.Item(p), cBaseProducts) Then
-                    'base product always has tier 0 (doesn't get reversed)
-                    aTiers(p) = 0
-                Else
-                    'not a base product
-                    'product has valid disass. directions and has no tier recorded yet
-                    If bDisassembled(p) = True And Not aTiers(p) > 0 Then
-                        'save tier
-                        aTiers(p) = intTier
-                        'decrease the counter of active products in assembly
-                        intI = intI - 1
-                        'change visuals for "virtual" products
-                        Dim virtSelection As Selection
-                        virtSelection = document.Selection
-                        virtSelection.Clear()
-                        virtSelection.Add(cRelevantProducts.Item(p))
-                        Dim visProperties1 As Object
-                        visProperties1 = virtSelection.VisProperties
-                        visProperties1.SetRealColor(80, 255, 160, 1)
-                        virtSelection.Clear()
-                        'remember virtual green products
-                        'cVirtual.Add cRelevantProducts.Item(p)
-                        'fix position
-                        bMoveable(p) = False
-
-                    End If
-                    'product from higher tier
-                    If bDisassembled(p) = True And aTiers(p) = intTier - 1 And intTier > 1 Then
-                        'deactivate
-                        Dim selection2 As Selection
-                        selection2 = CATIA.ActiveDocument.Selection
-                        selection2.Clear()
-                        selection2.Add(cRelevantProducts.Item(p))
-                        CATIA.StartCommand("Activate / Deactivate Component")
-                        selection2.Clear()
-                        cDeactivated.Add(cRelevantProducts.Item(p))
-                        bDeactivated(p) = True
-                    End If
-                End If
-            Next p
-
-            'Deactivate last disassembly tier directly
-            For p = 0 To cRelevantProducts.Count - 1
-                If intI = cBaseProducts.Count And aTiers(p) = intTier Then
-                    Dim selektion As Selection
-                    selektion = CATIA.ActiveDocument.Selection
-                    selektion.Clear()
-                    selektion.Add(cRelevantProducts.Item(p))
-                    CATIA.StartCommand("Activate / Deactivate Component")
-                    selektion.Clear()
-                    cDeactivated.Add(cRelevantProducts.Item(p))
-                    bDeactivated(p) = True
-                End If
-            Next p
-
-            'Notify the user if no parts could be disassembled in this tier
-            If intI = intItemp Then
-                Debug.Print("WARNING! No parts could be removed during this cycle." & vbNewLine & "This is usually due to inaccuracies in modelling (e.g. collisions in initial assembly).")
-                For p = 0 To cRelevantProducts.Count - 1
-                    If aTiers(p) = 0 And Not productIsInCollection(cRelevantProducts.Item(p), cBaseProducts) Then
-                        Dim selektion As Selection
-                        selektion = CATIA.ActiveDocument.Selection
-                        selektion.Clear()
-                        selektion.Add(cRelevantProducts.Item(p))
-                        CATIA.StartCommand("Activate / Deactivate Component")
-                        selektion.Clear()
-                        cDeactivated.Add(cRelevantProducts.Item(p))
-                        bDeactivated(p) = True
-                    End If
-                Next p
-                Exit While
-            End If
-
-            'recalculate assembly boundaries and removal distances
-            RecalculateRemovalDistances(cRelevantProducts, bDeactivated)
-
-            intTier += 1
-            int_i = 0
-            int_i_cycle = 0
-
-        End While
-
-        Dim SecondsElapsed As Double
-        Dim MillisecondsElapsed As Double
-        MillisecondsElapsed = (Now - AssemblyTiersStartTime).TotalMilliseconds
-        SecondsElapsed = Math.Round(MillisecondsElapsed / 1000.0, 2)
-        MsgBox("Collision detection algorithm finished execution after " & CStr(SecondsElapsed) & " seconds")
-
-        'Return products to their initial positions, activate them
-        Dim p1 As Integer
-        For p1 = 0 To cRelevantProducts.Count - 1
-            If Not productIsInCollection(cRelevantProducts.Item(p1), cBaseProducts) Then
-                Dim oPosition4 As Object
-                oPosition4 = cRelevantProducts.Item(p1).Position
-                Dim aPos(11)
-                For comp = 0 To 11
-                    aPos(comp) = aInitPos(p1, comp)
-                Next comp
-                oPosition4.SetComponents(aPos)
-                Dim selection4 As Selection
-                selection4 = CATIA.ActiveDocument.Selection
-                selection4.Clear()
-                selection4.Add(cRelevantProducts.Item(p1))
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection4.Clear()
-            End If
-        Next p1
-
-        'Select a single extraction direction in case there are multiple
-        Dim d2
-        d2 = CreateObject("Scripting.Dictionary")
-        d2.Add("Global X+", 0)
-        d2.Add("Global Y+", 1)
-        d2.Add("Global Z+", 2)
-        d2.Add("Global X-", 3)
-        d2.Add("Global Y-", 4)
-        d2.Add("Global Z-", 5)
-        d2.Add("Local X+", 6)
-        d2.Add("Local Y+", 7)
-        d2.Add("Local Z+", 8)
-        d2.Add("Local X-", 9)
-        d2.Add("Local Y-", 10)
-        d2.Add("Local Z-", 11)
-        'Inverse axis indices
-        Dim d3
-        d3 = CreateObject("Scripting.Dictionary")
-        d3.Add(0, 3)
-        d3.Add(1, 4)
-        d3.Add(2, 5)
-        d3.Add(3, 0)
-        d3.Add(4, 1)
-        d3.Add(5, 2)
-        d3.Add(6, 9)
-        d3.Add(7, 10)
-        d3.Add(8, 11)
-        d3.Add(9, 6)
-        d3.Add(10, 7)
-        d3.Add(11, 8)
-        For int_i = 0 To cRelevantProducts.Count - 1
-            If bChooseExtractionDirection Then
-                Dim sum As Integer
-                sum = 0
-                For intAxis = 0 To intJ - 1
-                    sum = sum + disassDir(int_i, intAxis)
-                Next intAxis
-                'Only for products with multiple extraction directions
-                If sum > 1 Then
-                    'Add options to ComboBox
-                    For intAxis = 0 To intJ - 1
-                        If disassDir(int_i, intAxis) = 1 Then
-                            'ExtractionDirection.ComboBox1.AddItem(d1.Item(intAxis))
-                        End If
-                    Next intAxis
-                    'Highlight the product in CATIA
-                    Dim selection5 As Selection
-                    selection5 = CATIA.ActiveDocument.Selection
-                    selection5.Clear()
-                    selection5.Add(cRelevantProducts.Item(int_i + 1))
-                    'Show dialog
-                    'ExtractionDirection.Show
-                    selection5.Clear()
-                    'Translate chosen axis name back into index 0..11
-                    Dim iChosenDir As Integer
-                    iChosenDir = d2.Item(sChosenDirection)
-                    'Set all other disassembly directions to 0
-                    For intAxis = 0 To intJ - 1
-                        If intAxis = iChosenDir Then
-                            disassDir(int_i, intAxis) = 1
-                        Else
-                            disassDir(int_i, intAxis) = 0
-                        End If
-                    Next intAxis
-                End If
-            End If
-            'Reverse tier values
-            Dim intMaxTier As Integer
-            intMaxTier = intTier - 1
-            If aTiers(int_i) <> 0 Then
-                aTiers(int_i) = intMaxTier + 1 - aTiers(int_i)
-            End If
-            'Reverse disassembly axis (assembly axis = -disass. axis)
-            Dim tempAssemblyDirs As Integer()
-            ReDim tempAssemblyDirs(intJ)
-            For intAxis = 0 To intJ - 1
-                If disassDir(int_i, intAxis) = 1 Then
-                    tempAssemblyDirs(d3.Item(intAxis)) = 1
-                    'disassDir(int_i, intAxis) = 0
-                    'disassDir(int_i, d3.Item(intAxis)) = 1
-                End If
-            Next intAxis
-            For intAxis = 0 To intJ - 1
-                disassDir(int_i, intAxis) = tempAssemblyDirs(intAxis)
-            Next intAxis
-        Next int_i
-
-        'Association of components belonging to sequential tiers
-
-        Dim cClashes1 As Clashes
-        Dim oClash1 As Clash
-        oClash1 = cClashes.Add
-        oClash1.ComputationType = CatClashComputationType.catClashComputationTypeBetweenAll
-        oClash1.InterferenceType = CatClashInterferenceType.catClashInterferenceTypeContact
-        oClash1.Compute()
-        Dim cInitConflicts As Conflicts
-        cInitConflicts = oClash1.Conflicts
-        Dim initConfl As Conflict
-        Dim nConfl As Integer
-        nConfl = 0
-        For Each initConfl In cInitConflicts
-            Dim firstIndex As Integer
-            Dim secondIndex As Integer
-            firstIndex = GetProductIndex(initConfl.FirstProduct, cRelevantProducts)
-            secondIndex = GetProductIndex(initConfl.SecondProduct, cRelevantProducts)
-            If aTiers(firstIndex) = aTiers(secondIndex) - 1 Then
-                precedenceMatrix(firstIndex, secondIndex) = 1
-            End If
-            If aTiers(secondIndex) = aTiers(firstIndex) - 1 Then
-                precedenceMatrix(secondIndex, firstIndex) = 1
-            End If
-        Next initConfl
-
-        'Export data to Excel
-        Dim objExcel As Microsoft.Office.Interop.Excel.Application
-        objExcel = CreateObject("Excel.Application")
-        objExcel.Visible = True
-        objExcel.Workbooks.Add()
-        objExcel.ActiveWorkbook.Sheets.Add.Name = "Precedence Matrix"
-        Dim objSheet1, objSheet2 As Object
-        objSheet1 = objExcel.ActiveWorkbook.Worksheets(2)
-        objSheet1.Name = "Assembly Directions"
-        objSheet2 = objExcel.ActiveWorkbook.Worksheets(1)
-
-        'Assembly directions
-        objSheet1.Cells(1, 1).Value = "Product"
-        objSheet1.Cells(1, 2).Value = "+X"
-        objSheet1.Cells(1, 3).Value = "+Y"
-        objSheet1.Cells(1, 4).Value = "+Z"
-        objSheet1.Cells(1, 5).Value = "-X"
-        objSheet1.Cells(1, 6).Value = "-Y"
-        objSheet1.Cells(1, 7).Value = "-Z"
-        objSheet1.Cells(1, 8).Value = "Assembly Tier"
-        For int_i = 0 To cRelevantProducts.Count - 1
-            objSheet1.Cells(int_i + 2, 1).Value = cRelevantProducts.Item(int_i).Name
-            For intAxis = 0 To intJ - 1
-                objSheet1.Cells(int_i + 2, 2 + intAxis).Value = disassDir(int_i, intAxis)
-            Next intAxis
-            objSheet1.Cells(int_i + 2, intJ + 2).Value = aTiers(int_i)
-        Next int_i
-
-        'Precedence relations
-        For int_i = 0 To cRelevantProducts.Count - 1
-            For int_j = 0 To cRelevantProducts.Count - 1
-                objSheet2.Cells(int_i + 1, int_j + 1).Value = precedenceMatrix(int_i, int_j)
-            Next int_j
-        Next int_i
-
-        'Save and close excel workbook
-        If bConnectivityCheck Then
-            objExcel.ActiveWorkbook.SaveAs(Filename:=xlsPath & xlsFileName & "_AssemblyTiers_CC.xlsx")
-        Else
-            objExcel.ActiveWorkbook.SaveAs(Filename:=xlsPath & xlsFileName & "_AssemblyTiers.xlsx")
-        End If
-        objExcel.ActiveWorkbook.Close(SaveChanges:=True)
-        'close the excel application
-        objExcel.Quit()
-        ReleaseObject(objExcel)
-
-    End Sub
-    Sub ExtractProducts(oCurrentProduct As Product)
-
-        Dim oCurrentTreeNode As Product
-        Dim i As Integer
-
-        For i = 1 To oCurrentProduct.Products.Count
-            oCurrentTreeNode = oCurrentProduct.Products.Item(i)
-
-            'recursive
-            If oCurrentTreeNode.Products.Count > 0 Then
-                ExtractProducts(oCurrentTreeNode)
-            Else
-                Debug.Print(oCurrentTreeNode.PartNumber & " (" & oCurrentTreeNode.Name & ") is a leaf product")
-                'remove special characters from the part number
-                Dim newPartNo As String
-                Dim newCharacter As String
-                newCharacter = " "
-                newPartNo = oCurrentTreeNode.PartNumber
-                newPartNo = Replace(newPartNo, "<", newCharacter)
-                newPartNo = Replace(newPartNo, ">", newCharacter)
-                newPartNo = Replace(newPartNo, "/", newCharacter)
-                oCurrentTreeNode.PartNumber = newPartNo
-                cAllProducts.Add(oCurrentTreeNode)
-            End If
-
-        Next
-
-    End Sub
-
-    Sub GetNextNode(oCurrentProduct As Product)
-
-        Dim oCurrentTreeNode As Product
-        Dim i As Integer
-
-        For i = 1 To oCurrentProduct.Products.Count
-            oCurrentTreeNode = oCurrentProduct.Products.Item(i)
-
-            If IsPart(oCurrentTreeNode) = True Then
-                MsgBox(oCurrentTreeNode.PartNumber & " is a part")
-            ElseIf IsProduct(oCurrentTreeNode) = True Then
-                MsgBox(oCurrentTreeNode.PartNumber & " is a product")
-            Else
-                MsgBox(oCurrentTreeNode.PartNumber & " is a component")
-            End If
-
-            'recursive
-            If oCurrentTreeNode.Products.Count > 0 Then
-                GetNextNode(oCurrentTreeNode)
-            End If
-
-        Next
-
-    End Sub
-
-    Function IsPart(objCurrentProduct As Product) As Boolean
-
-        Dim oTestPart As PartDocument
-
-        oTestPart = Nothing
-
-        On Error Resume Next
-
-        oTestPart = CATIA.Documents.Item(objCurrentProduct.PartNumber & ".CATPart")
-
-        If Not oTestPart Is Nothing Then
-            IsPart = True
-        Else
-            IsPart = False
-        End If
-
-    End Function
-
-    Function IsProduct(objCurrentProduct As Product) As Boolean
-
-        Dim oTestProduct As ProductDocument
-
-        oTestProduct = Nothing
-
-        On Error Resume Next
-
-        oTestProduct = CATIA.Documents.Item(objCurrentProduct.PartNumber & ".CATProduct")
-
-        If Not oTestProduct Is Nothing Then
-            IsProduct = True
-        Else
-            IsProduct = False
-        End If
-
-    End Function
-    Sub Liaison()
-
-        Dim n As Integer = cRelevantProducts.Count
-
-        ReDim liaisonMatrix(n - 1, n - 1)
-
-        'access the clash technology object
-        Dim cClashes As Clashes
-        cClashes = CATIA.ActiveDocument.Product.GetTechnologicalObject("Clashes")
-        'access the groups technology object
-        Dim cGroups As Groups
-        cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")
-
-        'Clash analysis between all products (clash type = contact)
-        Dim int_i, int_j As Integer
-        For int_i = 1 To cRelevantProducts.Count
-            For int_j = 1 To cRelevantProducts.Count
-                If int_j > int_i Then 'only need one half of the combinations
-                    Dim group1 As Group
-                    Dim group2 As Group
-                    group1 = cGroups.Add
-                    group2 = cGroups.Add
-                    group1.AddExplicit(cRelevantProducts.Item(int_i - 1))
-                    group2.AddExplicit(cRelevantProducts.Item(int_j - 1))
-                    'create a new clash analysis
-                    Dim oClash As Clash
-                    oClash = cClashes.Add
-                    oClash.ComputationType = CatClashComputationType.catClashComputationTypeBetweenTwo
-                    oClash.FirstGroup = group1
-                    oClash.SecondGroup = group2
-                    oClash.InterferenceType = CatClashInterferenceType.catClashInterferenceTypeContact
-                    oClash.Compute()
-                    Dim cConflicts As Conflicts
-                    cConflicts = oClash.Conflicts
-                    If cConflicts.Count > 0 Then
-                        'For each contact, write 1 in the spreadsheet
-                        'The matrix is symmetric and 0-diagonal
-                        liaisonMatrix(int_i - 1, int_j - 1) = 1
-                        liaisonMatrix(int_j - 1, int_i - 1) = 1
-                    Else
-                        liaisonMatrix(int_i - 1, int_j - 1) = 0
-                        liaisonMatrix(int_j - 1, int_i - 1) = 0
-                    End If
-                ElseIf int_j = int_i Then
-                    liaisonMatrix(int_i - 1, int_j - 1) = 0
-                End If
-            Next int_j
-        Next int_i
-
-    End Sub
-
-    Function SubassemblyIsConnected(prt As List(Of Integer)) As Boolean
-
-        'List of visited nodes
-        Dim visitedNodes As New List(Of Boolean)
-        Dim prtCount As Integer = prt.Count
-        For x = 0 To prtCount - 1
-            visitedNodes.Add(False)
-        Next
-
-        'Submatrix of liaison adjacency matrix that contains only the nodes of this subassembly
-        Dim liaisonSubmatrix(,) As Integer
-        ReDim liaisonSubmatrix(prtCount, prtCount)
-        For m = 0 To prtCount - 1
-            For k = 0 To prtCount - 1
-                liaisonSubmatrix(m, k) = liaisonMatrix(prt(m), prt(k))
-            Next
-        Next
-
-        'Depth-first search to explore the liaison subgraph from the first node
-        DFS(liaisonSubmatrix, visitedNodes, 0)
-
-        'Check whether all nodes could be visited via liaison connections
-        For i = 0 To prtCount - 1
-            If visitedNodes(i) = False Then
-                Return False
-            End If
-        Next
-
-        Return True
-
-    End Function
-
-    Sub DFS(liaisonSubmatrix(,) As Integer, visitedNodes As List(Of Boolean), v As Integer)
-        'Depth-first search
-
-        If visitedNodes(v) = True Then
-            Exit Sub
-        End If
-
-        visitedNodes(v) = True
-
-        'Neighbors of v
-        Dim neighbors As New List(Of Integer)
-        For i = 0 To visitedNodes.Count - 1
-            If liaisonSubmatrix(v, i) = 1 Then
-                neighbors.Add(i)
-            End If
-        Next
-
-        'Do DFS on all neighbor nodes if they were not visited
-        For Each u In neighbors
-            If visitedNodes(u) = False Then
-                DFS(liaisonSubmatrix, visitedNodes, u)
-            End If
-        Next
-
-    End Sub
-    Function DeactivateFasteners(objProduct As Product)
-
-        Dim objParts As New ArrayList
-        'On the top level of product tree
-        ' objParts = objProduct.Products
-        'Recursive
-        objParts = cAllProducts
-        Dim selection1 As Selection
-        selection1 = CATIA.ActiveDocument.Selection
-        selection1.Clear()
-
-        Dim intFasteners As Integer
-        intFasteners = 0
-
-        For Each prod In objParts
-            Dim sName As String
-            Dim primFastSize As Integer
-
-            sName = LCase(prod.PartNumber)
-            'Debug.Print sName
-            If InStr(sName, "bolt") > 0 Then
-                Debug.Print(prod.Name + " was identified as a bolt")
-                selection1.Add(prod)
-
-                primaryFasteners.Add(prod)
-
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection1.Clear()
-                intFasteners = intFasteners + 1
-            ElseIf InStr(sName, "screw") > 0 Or InStr(sName, "schraube") > 0 Or (InStr(sName, "iso") > 0 And InStr(sName, "4762") > 0) Or (InStr(sName, "din") > 0 And (InStr(sName, "912") > 0 Or InStr(sName, "933") > 0)) Then
-                Debug.Print(prod.Name + " was identified as a screw")
-                selection1.Add(prod)
-
-                primaryFasteners.Add(prod)
-
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection1.Clear()
-                intFasteners = intFasteners + 1
-            ElseIf InStr(sName, "clip") > 0 Then
-                Debug.Print(prod.Name + " was identified as a clip")
-                selection1.Add(prod)
-
-                primaryFasteners.Add(prod)
-
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection1.Clear()
-                intFasteners = intFasteners + 1
-            ElseIf InStr(sName, "wedge") > 0 Then
-                Debug.Print(prod.Name + " was identified as a wedge")
-                selection1.Add(prod)
-
-                primaryFasteners.Add(prod)
-
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection1.Clear()
-                intFasteners = intFasteners + 1
-                'ElseIf InStr(sName, "pin") > 0 Then
-                '    Debug.Print(prod.Name + " was identified as a pin")
-                '    selection1.Add(prod)
-
-                '    primaryFasteners.Add(prod)
-
-                '    CATIA.StartCommand("Activate / Deactivate Component")
-                '    selection1.Clear()
-                '    intFasteners = intFasteners + 1
-            ElseIf InStr(sName, "nut") > 0 Or (InStr(sName, "iso") > 0 And InStr(sName, "4161") > 0) Or (InStr(sName, "din") > 0 And (InStr(sName, "934") > 0 Or InStr(sName, "439") > 0)) Then
-                Debug.Print(prod.Name + " was identified as a nut")
-                selection1.Add(prod)
-
-                secondaryFasteners.Add(prod)
-
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection1.Clear()
-                intFasteners = intFasteners + 1
-            ElseIf InStr(sName, "washer") > 0 Or (InStr(sName, "din") > 0 And (InStr(sName, "9021") > 0 Or InStr(sName, "125") > 0 Or InStr(sName, "127") > 0)) Then
-                Debug.Print(prod.Name + " was identified as a washer")
-                selection1.Add(prod)
-
-                secondaryFasteners.Add(prod)
-
-                CATIA.StartCommand("Activate / Deactivate Component")
-                selection1.Clear()
-                intFasteners = intFasteners + 1
-            Else
-                cRelevantProducts.Add(prod)
-            End If
-        Next
-
-        'CATIA.StartCommand ("Activate / Deactivate Component")
-        Debug.Print("Deactivated " + CStr(intFasteners) + " fasteners")
-        intParts = intParts - intFasteners
-        Debug.Print(CStr(intParts) + " parts to assemble")
-        MsgBox("Fasteners are deacivated. Press OK to proceed.")
-
-    End Function
-
-    Function GenerateBoundingBox(partDocument1 As PartDocument, objProduct As Product, i As Integer)
-        'Processes a single part to extract its origin XYZ, min/max X/Y/Z
-
-        CATIA.DisplayFileAlerts = False
-
-        'Declare variables
-        Dim axis
-        Dim remake
-        Dim part1 As Part
-        Dim axisref As Object
-        Dim shapeFactory1 As ShapeFactory
-        Dim hybridShapeFactory1 As HybridShapeFactory
-        Dim sStatus As String
-        Dim hybridShapeD1, hybridShapeD2, hybridShapeD3 As HybridShapeDirection
-        Dim a1, a2, a3, a4, a5, a6 'To change the offsets of the box
-        Dim bodies1 As Bodies
-        Dim body1 As Body
-        Dim reference1 As Reference
-        Dim HybridShapeExtremum1, HybridShapeExtremum2, HybridShapeExtremum3 As HybridShapeExtremum
-        Dim HybridShapeExtremum4, HybridShapeExtremum5, HybridShapeExtremum6 As HybridShapeExtremum
-        Dim originCoord(2)
-        Dim faceSel As Object
-
-        'Check whether we are processing a Part
-        If (InStr(partDocument1.Name, ".CATPart")) <> 0 Then
-            part1 = partDocument1.Part
-            hybridShapeFactory1 = part1.HybridShapeFactory
-
-            Dim axiscoord(2)
-            Dim axissyst
-
-            Dim axisSystem As AxisSystem
-            axisSystem = part1.AxisSystems.Item(1)
-
-            axissyst = axisSystem
-            axisref = axisSystem
-
-            Dim ref_name_systaxis As String
-            ref_name_systaxis = axissyst.Name
-
-            axissyst.IsCurrent = 1
-            axissyst.Name = "BBoxAxis"
-            Dim axname As String
-            axname = axissyst.Name
-
-            'Get Product's Position (rotation and translation)
-            '(for now: relative to the parent product!)
-            Dim PositionArray(11)
-            Dim oPosition As Object
-            oPosition = objProduct.Position
-            oPosition.GetComponents(PositionArray)
-
-            Dim originpoint As HybridShapePointCoord
-            axissyst.GetOrigin(originCoord)
-            'MsgBox "X0 = " & CStr(originCoord(0)) & vbNewLine & "Y0 = " & CStr(originCoord(1)) & vbNewLine & "Z0 = " & CStr(originCoord(2))
-
-            originpoint = hybridShapeFactory1.AddNewPointCoord(originCoord(0), originCoord(1), originCoord(2))
-            axisref = part1.CreateReferenceFromObject(originpoint)
-            axissyst.GetXAxis(axiscoord)
-            hybridShapeD1 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
-            axissyst.GetYAxis(axiscoord)
-            hybridShapeD2 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
-            axissyst.GetZAxis(axiscoord)
-            hybridShapeD3 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
-
-            'hybridShapeD1&2 are not set yet, but used for line creation (from origin of the axis system)
-            Dim Plane_line_1 As HybridShapeLinePtDir
-            Plane_line_1 = hybridShapeFactory1.AddNewLinePtDir(originpoint, hybridShapeD1, 0, 0, False)
-            Dim Plane_line_2 As HybridShapeLinePtDir
-            Plane_line_2 = hybridShapeFactory1.AddNewLinePtDir(originpoint, hybridShapeD2, 0, 0, False)
-
-            Dim oBodies As Bodies
-            oBodies = part1.Bodies
-
-            'J is defined to make unique names for Axis and the Body for the bounding box
-            Dim j As Integer
-            j = oBodies.Count
-
-            'Add new Body "Bounding Box."j to the Bodies of the current Part
-            bodies1 = part1.Bodies
-            body1 = bodies1.Add()
-            body1.Name = "Bounding Box." & j
-
-            Dim hybridBodies1 As HybridBodies
-            hybridBodies1 = body1.HybridBodies
-            Dim hybridBody1 As HybridBody
-            hybridBody1 = hybridBodies1.Add
-            hybridBody1.Name = "definition_points"
-
-
-            'Pick a face of the part to use for HybridShapeExtract
-            faceSel = CATIA.ActiveDocument.Selection
-            faceSel.Clear
-            'The current Part is added to the selection
-            faceSel.Add(part1)
-            'The selection gets rewritten by all the Faces of the selected part ("sel")
-            faceSel.Search("Type=Face,sel")
-
-            Debug.Print("Selected faces: " & CStr(faceSel.Count))
-            intNumFaces += faceSel.Count
-
-            'Need to check whether Extract crashes given this face and try the next one
-            Dim f As Integer
-            For f = 1 To faceSel.Count
-
-                'On Error GoTo ContinueFaceLoop
-
-                reference1 = faceSel.Item(f).Value
-                Debug.Print(TypeName(reference1))
-
-                Dim hybridShapeExtract1 As HybridShapeExtract
-                hybridShapeExtract1 = hybridShapeFactory1.AddNewExtract(reference1)
-                hybridShapeExtract1.PropagationType = 1 'point continuity
-                hybridShapeExtract1.ComplementaryExtract = False
-                hybridShapeExtract1.IsFederated = False
-                reference1 = hybridShapeExtract1
-
-                'Create the 6 Extrenum items for the Solid/Surf.  May not be single points, will be solved with next points
-                HybridShapeExtremum1 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD1, 1)
-                HybridShapeExtremum2 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD1, 0)
-                HybridShapeExtremum3 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD2, 1)
-                HybridShapeExtremum4 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD2, 0)
-                HybridShapeExtremum5 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD3, 1)
-                HybridShapeExtremum6 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD3, 0)
-
-                ' Creates Geometrical Set under the Solid, to contain the construction elements
-
-                Dim hybridBody2 As HybridBody
-                hybridBody2 = hybridBodies1.Item("definition_points")
-
-                hybridBody2.AppendHybridShape(HybridShapeExtremum1)
-                part1.InWorkObject = HybridShapeExtremum1
-                HybridShapeExtremum1.Name = "max_X"
-                hybridBody2.AppendHybridShape(HybridShapeExtremum2)
-                part1.InWorkObject = HybridShapeExtremum2
-                HybridShapeExtremum2.Name = "min_X"
-                hybridBody2.AppendHybridShape(HybridShapeExtremum3)
-                part1.InWorkObject = HybridShapeExtremum3
-                HybridShapeExtremum3.Name = "max_Y"
-                hybridBody2.AppendHybridShape(HybridShapeExtremum4)
-                part1.InWorkObject = HybridShapeExtremum4
-                HybridShapeExtremum4.Name = "min_Y"
-                hybridBody2.AppendHybridShape(HybridShapeExtremum5)
-                part1.InWorkObject = HybridShapeExtremum5
-                HybridShapeExtremum5.Name = "max_Z"
-                hybridBody2.AppendHybridShape(HybridShapeExtremum6)
-                part1.InWorkObject = HybridShapeExtremum6
-                HybridShapeExtremum6.Name = "min_Z"
-
-                part1.UpdateObject(HybridShapeExtremum1)
-                part1.UpdateObject(HybridShapeExtremum2)
-                part1.UpdateObject(HybridShapeExtremum3)
-                part1.UpdateObject(HybridShapeExtremum4)
-                part1.UpdateObject(HybridShapeExtremum5)
-                part1.UpdateObject(HybridShapeExtremum6)
-
-                'part1.Update
-
-                ' Creates a 6 single points using the Extrenums as refs, so if the Extrenum was a line or surf, you can still off planes to these points
-
-                Dim Ref1 As Reference
-                Ref1 = part1.CreateReferenceFromObject(HybridShapeExtremum1)
-                Dim Point1 As HybridShapePointCoord
-                Point1 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref1)
-                hybridBody2.AppendHybridShape(Point1)
-                Dim point_ref11 As Reference
-                point_ref11 = part1.CreateReferenceFromObject(Point1)
-
-                Dim Ref2 As Reference
-                Ref2 = part1.CreateReferenceFromObject(HybridShapeExtremum2)
-                Dim Point2 As HybridShapePointCoord
-                Point2 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref2)
-                hybridBody2.AppendHybridShape(Point2)
-                Dim point_ref12 As Reference
-                point_ref12 = part1.CreateReferenceFromObject(Point2)
-
-                Dim Ref3 As Reference
-                Ref3 = part1.CreateReferenceFromObject(HybridShapeExtremum3)
-                Dim Point3 As HybridShapePointCoord
-                Point3 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref3)
-                hybridBody2.AppendHybridShape(Point3)
-                Dim point_ref13 As Reference
-                point_ref13 = part1.CreateReferenceFromObject(Point3)
-
-                Dim Ref4 As Reference
-                Ref4 = part1.CreateReferenceFromObject(HybridShapeExtremum4)
-                Dim Point4 As HybridShapePointCoord
-                Point4 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref4)
-                hybridBody2.AppendHybridShape(Point4)
-                Dim point_ref14 As Reference
-                point_ref14 = part1.CreateReferenceFromObject(Point4)
-
-                Dim Ref5 As Reference
-                Ref5 = part1.CreateReferenceFromObject(HybridShapeExtremum5)
-                Dim Point5 As HybridShapePointCoord
-                Point5 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref5)
-                hybridBody2.AppendHybridShape(Point5)
-                Dim point_ref5 As Reference
-                point_ref5 = part1.CreateReferenceFromObject(Point5)
-
-                Dim Ref6 As Reference
-                Ref6 = part1.CreateReferenceFromObject(HybridShapeExtremum6)
-                Dim Point6 As HybridShapePointCoord
-                Point6 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref6)
-                hybridBody2.AppendHybridShape(Point6)
-                Dim point_ref6 As Reference
-                point_ref6 = part1.CreateReferenceFromObject(Point6)
-
-                part1.UpdateObject(Point1)
-                part1.UpdateObject(Point2)
-                part1.UpdateObject(Point3)
-                part1.UpdateObject(Point4)
-                part1.UpdateObject(Point5)
-                part1.UpdateObject(Point6)
-
-                'part1.Update
-
-                axissyst.IsCurrent = 1
-
-                'Read extremum coordinates
-                Dim coord(2) As Object
-                Dim absCoord(2) As Object
-
-                Dim TheSPAWorkbench As Workbench
-                TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
-
-                Dim TheMeasurable
-
-                Debug.Print("Global coordinates of local extrema:")
-
-                'Transform local extrema coordinates into global coordinates and update aAssemblyBoundaries
-
-                'Distances to Part Bounding Box faces in local coordinates
-                Dim aBBDistances(5) As Double
-                '8 corner points of the Part Bounding Box (BB) in local coordinates (8x3 array)
-                Dim aBBCornersLocal(7, 2) As Double
-
-                'max_X_loc
-                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref11)
-                TheMeasurable.GetPoint(coord)
-                aBBDistances(0) = coord(0)
-                absCoord = {0.0, 0.0, 0.0}
-                Call Coord_Transform(coord, absCoord, objProduct, True)
-                Debug.Print(Point1.Name & " (" & Ref1.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
-
-                'min_X_loc
-                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref12)
-                TheMeasurable.GetPoint(coord)
-                aBBDistances(1) = coord(0)
-                absCoord = {0.0, 0.0, 0.0}
-                Call Coord_Transform(coord, absCoord, objProduct, True)
-                Debug.Print(Point2.Name & " (" & Ref2.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
-
-                'max_Y_loc
-                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref13)
-                TheMeasurable.GetPoint(coord)
-                aBBDistances(2) = coord(1)
-                absCoord = {0.0, 0.0, 0.0}
-                Call Coord_Transform(coord, absCoord, objProduct, True)
-                Debug.Print(Point3.Name & " (" & Ref3.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
-
-                'min_Y_loc
-                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref14)
-                TheMeasurable.GetPoint(coord)
-                aBBDistances(3) = coord(1)
-                absCoord = {0.0, 0.0, 0.0}
-                Call Coord_Transform(coord, absCoord, objProduct, True)
-                Debug.Print(Point4.Name & " (" & Ref4.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
-
-                'max_Z_loc
-                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref5)
-                TheMeasurable.GetPoint(coord)
-                aBBDistances(4) = coord(2)
-                absCoord = {0.0, 0.0, 0.0}
-                Call Coord_Transform(coord, absCoord, objProduct, True)
-                Debug.Print(Point5.Name & " (" & Ref5.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
-
-                'min_Z_loc
-                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref6)
-                TheMeasurable.GetPoint(coord)
-                aBBDistances(5) = coord(2)
-                absCoord = {0.0, 0.0, 0.0}
-                Call Coord_Transform(coord, absCoord, objProduct, True)
-                Debug.Print(Point6.Name & " (" & Ref6.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
-
-                'Generate 8 corner points (local coordinates) to the aBBCornersLocal
-                Dim m, n, k, c As Integer
-                c = 0
-                For m = 0 To 1
-                    For n = 2 To 3
-                        For k = 4 To 5
-                            aBBCornersLocal(c, 0) = aBBDistances(m)
-                            aBBCornersLocal(c, 1) = aBBDistances(n)
-                            aBBCornersLocal(c, 2) = aBBDistances(k)
-                            'Transform corner point into global coordinates
-                            coord(0) = aBBCornersLocal(c, 0)
-                            coord(1) = aBBCornersLocal(c, 1)
-                            coord(2) = aBBCornersLocal(c, 2)
-                            Call Coord_Transform(coord, absCoord, objProduct, True)
-                            'Record values to aPartBBGlob
-                            Dim CCC(2) As Double    'Corner Coordinates in axis system Congruent to global but in the part's origin
-                            CCC(0) = absCoord(0) - PositionArray(9)
-                            CCC(1) = absCoord(1) - PositionArray(10)
-                            CCC(2) = absCoord(2) - PositionArray(11)
-                            If CCC(0) > aPartBBGlob(i, 0) Then
-                                aPartBBGlob(i, 0) = CCC(0)
-                            End If
-                            If CCC(0) < aPartBBGlob(i, 1) Then
-                                aPartBBGlob(i, 1) = CCC(0)
-                            End If
-                            If CCC(1) > aPartBBGlob(i, 2) Then
-                                aPartBBGlob(i, 2) = CCC(1)
-                            End If
-                            If CCC(1) < aPartBBGlob(i, 3) Then
-                                aPartBBGlob(i, 3) = CCC(1)
-                            End If
-                            If CCC(2) > aPartBBGlob(i, 4) Then
-                                aPartBBGlob(i, 4) = CCC(2)
-                            End If
-                            If CCC(2) < aPartBBGlob(i, 5) Then
-                                aPartBBGlob(i, 5) = CCC(2)
-                            End If
-                            'Update aAssemblyBoundaries (global)
-                            If absCoord(0) > aAssemblyBoundaries(0) Then
-                                aAssemblyBoundaries(0) = absCoord(0)
-                            End If
-                            If absCoord(0) < aAssemblyBoundaries(1) Then
-                                aAssemblyBoundaries(1) = absCoord(0)
-                            End If
-                            If absCoord(1) > aAssemblyBoundaries(2) Then
-                                aAssemblyBoundaries(2) = absCoord(1)
-                            End If
-                            If absCoord(1) < aAssemblyBoundaries(3) Then
-                                aAssemblyBoundaries(3) = absCoord(1)
-                            End If
-                            If absCoord(2) > aAssemblyBoundaries(4) Then
-                                aAssemblyBoundaries(4) = absCoord(2)
-                            End If
-                            If absCoord(2) < aAssemblyBoundaries(5) Then
-                                aAssemblyBoundaries(5) = absCoord(2)
-                            End If
-                            c = c + 1
-                        Next k
-                    Next n
-                Next m
-
-                part1.Update()
-
-                Exit For
-
-                'ContinueFaceLoop:
-
-            Next f
-
-        Else
-            MsgBox("The active document must be a CATPart")
-        End If
-
-    End Function
-
-    Sub RecalculateRemovalDistances(cRelProd As ArrayList, bDeact As Boolean())
-
-        Dim aRemovalDistances(cRelProd.Count - 1, 5)
-        Dim i As Integer
-        Dim relProd As Product
-        'assure that the origin is inside the BB of assembly
-        aAssemblyBoundaries(0) = -1 / 0
-        aAssemblyBoundaries(1) = 1 / 0
-        aAssemblyBoundaries(2) = -1 / 0
-        aAssemblyBoundaries(3) = 1 / 0
-        aAssemblyBoundaries(4) = -1 / 0
-        aAssemblyBoundaries(5) = 1 / 0
-
-        For i = 0 To cRelProd.Count - 1
-            If Not bDeact(i) Then
-                If aInitPos(i, 9) + aPartBBGlob(i, 0) > aAssemblyBoundaries(0) Then
-                    aAssemblyBoundaries(0) = aInitPos(i, 9) + aPartBBGlob(i, 0)
-                End If
-                If aInitPos(i, 9) + aPartBBGlob(i, 1) < aAssemblyBoundaries(1) Then
-                    aAssemblyBoundaries(1) = aInitPos(i, 9) + aPartBBGlob(i, 1)
-                End If
-                If aInitPos(i, 10) + aPartBBGlob(i, 2) > aAssemblyBoundaries(2) Then
-                    aAssemblyBoundaries(2) = aInitPos(i, 10) + aPartBBGlob(i, 2)
-                End If
-                If aInitPos(i, 10) + aPartBBGlob(i, 3) < aAssemblyBoundaries(3) Then
-                    aAssemblyBoundaries(3) = aInitPos(i, 10) + aPartBBGlob(i, 3)
-                End If
-                If aInitPos(i, 11) + aPartBBGlob(i, 4) > aAssemblyBoundaries(4) Then
-                    aAssemblyBoundaries(4) = aInitPos(i, 11) + aPartBBGlob(i, 4)
-                End If
-                If aInitPos(i, 11) + aPartBBGlob(i, 5) < aAssemblyBoundaries(5) Then
-                    aAssemblyBoundaries(5) = aInitPos(i, 11) + aPartBBGlob(i, 5)
-                End If
-            End If
-        Next i
-
-        For i = 0 To cRelProd.Count - 1
-            If Not bDeact(i) Then
-                aRemovalDistances(i, 0) = aAssemblyBoundaries(0) - aPartBBGlob(i, 1)
-                aRemovalDistances(i, 1) = aAssemblyBoundaries(1) - aPartBBGlob(i, 0)
-                aRemovalDistances(i, 2) = aAssemblyBoundaries(2) - aPartBBGlob(i, 3)
-                aRemovalDistances(i, 3) = aAssemblyBoundaries(3) - aPartBBGlob(i, 2)
-                aRemovalDistances(i, 4) = aAssemblyBoundaries(4) - aPartBBGlob(i, 5)
-                aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
-            End If
-        Next i
-
-    End Sub
-
-    'Public Function ArrayLen(a As Object) As Integer
-    '    If IsEmpty(a) Then
-    '        ArrayLen = 0
-    '    Else
-    '        ArrayLen = UBound(a) - LBound(a) + 1
-    '    End If
-    'End Function
-
-    Function Det3x3(dX11 As Double, dX12 As Double, dX13 As Double,
-                dX21 As Double, dX22 As Double, dX23 As Double,
-                dX31 As Double, dX32 As Double, dX33 As Double) As Double
-        '***********************************************
-        '*
-        '* 3x3 matrix determinant calculation (direct)
-        '*
-        '***********************************************
-
-        Det3x3 = dX11 * dX22 * dX33 + dX12 * dX23 * dX31 + dX21 * dX32 * dX13 -
-             dX13 * dX22 * dX31 - dX12 * dX21 * dX33 - dX23 * dX32 * dX11
-    End Function
-    Function Inv3x3(dX11 As Double, dX12 As Double, dX13 As Double,
-           dX21 As Double, dX22 As Double, dX23 As Double,
-           dX31 As Double, dX32 As Double, dX33 As Double, aInv() As Double) As Double()
-        '***********************************************
-        '*
-        '* 3x3 matrix inverse calculation (direct)
-        '*
-        '***********************************************
-        Dim dDet As Double
-
-        ReDim aInv(8)
-
-        dDet = Det3x3(dX11, dX12, dX13, dX21, dX22, dX23, dX31, dX32, dX33)
-        'If dDet = 0 Then Exit Function
-        If dDet = 0 Then Return Nothing
-
-        aInv(0) = (dX22 * dX33 - dX23 * dX32) / Math.Abs(dDet)
-        aInv(1) = (dX13 * dX32 - dX12 * dX33) / Math.Abs(dDet)
-        aInv(2) = (dX12 * dX23 - dX13 * dX22) / Math.Abs(dDet)
-        aInv(3) = (dX23 * dX31 - dX21 * dX33) / Math.Abs(dDet)
-        aInv(4) = (dX11 * dX33 - dX13 * dX31) / Math.Abs(dDet)
-        aInv(5) = (dX13 * dX21 - dX11 * dX23) / Math.Abs(dDet)
-        aInv(6) = (dX21 * dX32 - dX22 * dX31) / Math.Abs(dDet)
-        aInv(7) = (dX12 * dX31 - dX11 * dX32) / Math.Abs(dDet)
-        aInv(8) = (dX11 * dX22 - dX12 * dX21) / Math.Abs(dDet)
-
-        Return aInv
-
-    End Function
-    Sub Coord_Transform(aRel() As Object, aAbs() As Object, oProduct As Product, bRecursively As Boolean)
-
-        Dim vProduct As Object, vCoord(11)
-        Dim oFatherProduct As Product
-        Dim aInv(8) As Double
-
-        'Exit condition, empty object
-        If oProduct Is Nothing Then Exit Sub
-
-        'Redim absolute coords matrix
-        On Error Resume Next
-        'aAbs = {0.0, 0.0, 0.0}
-        On Error GoTo 0
-
-        'Calculate product coordinates
-        vProduct = oProduct
-        vProduct.Position.GetComponents(vCoord)
-
-        'Calculate inverse matrix
-        If IsNothing(Inv3x3(CDbl(vCoord(0)), CDbl(vCoord(1)), CDbl(vCoord(2)),
-                 CDbl(vCoord(3)), CDbl(vCoord(4)), CDbl(vCoord(5)),
-                 CDbl(vCoord(6)), CDbl(vCoord(7)), CDbl(vCoord(8)), aInv)) Then
-            'MsgBox "Error, degenerate transformation", vbOKOnly
-            Exit Sub
-        Else
-            aInv = Inv3x3(CDbl(vCoord(0)), CDbl(vCoord(1)), CDbl(vCoord(2)),
-                 CDbl(vCoord(3)), CDbl(vCoord(4)), CDbl(vCoord(5)),
-                 CDbl(vCoord(6)), CDbl(vCoord(7)), CDbl(vCoord(8)), aInv)
-        End If
-
-        'Calculate transformation
-        aAbs(0) = vCoord(9) + aInv(0) * aRel(0) + aInv(1) * aRel(1) + aInv(2) * aRel(2)
-        aAbs(1) = vCoord(10) + aInv(3) * aRel(0) + aInv(4) * aRel(1) + aInv(5) * aRel(2)
-        aAbs(2) = vCoord(11) + aInv(6) * aRel(0) + aInv(7) * aRel(1) + aInv(8) * aRel(2)
-
-        'If recursive option sepecified, search for parents and applies the transformation again
-        If bRecursively Then
-
-            'Try to assign parent
-            oFatherProduct = Nothing
-            On Error Resume Next
-            oFatherProduct = oProduct.Parent.Parent
-            On Error GoTo 0
-
-            'If OK, recalculate coords
-            If oFatherProduct Is Nothing Then
-            Else
-                If oFatherProduct.PartNumber + ".CATProduct" = CATIA.ActiveDocument.Name Then
-                    aRel(0) = aAbs(0)
-                    aRel(1) = aAbs(1)
-                    aRel(2) = aAbs(2)
-                    Coord_Transform(aRel, aAbs, oFatherProduct, False)
-                Else
-                    aRel(0) = aAbs(0)
-                    aRel(1) = aAbs(1)
-                    aRel(2) = aAbs(2)
-                    Coord_Transform(aRel, aAbs, oFatherProduct, True)
-                End If
-            End If
-
-        End If
-
-    End Sub
-
-    Function productIsInCollection(objProd As Product, prodColl As ArrayList) As Boolean
-        Dim dummyObj As Product
-        productIsInCollection = False
-        For Each dummyObj In prodColl
-            If dummyObj.Name = objProd.Name Then
-                productIsInCollection = True
-                Exit For
-            End If
-        Next
-    End Function
-
-    Sub moveProduct(objProd As Product, intDir As Integer, bPositive As Boolean)
-        Dim intS As Integer
-        If bPositive = True Then
-            intS = intStep
-        Else
-            intS = -intStep
-        End If
-        Dim moveArray(11)
-        moveArray(0) = 1
-        moveArray(1) = 0
-        moveArray(2) = 0
-        moveArray(3) = 0
-        moveArray(4) = 1
-        moveArray(5) = 0
-        moveArray(6) = 0
-        moveArray(7) = 0
-        moveArray(8) = 1
-        moveArray(9) = 0
-        moveArray(10) = 0
-        moveArray(11) = 0
-
-        Dim axisArray(11)
-
-        'movement along global axis
-        If intDir < 6 Then
-            'Attention: for now it is assumed that all products are on the top level of specification tree
-            If intDir = 0 Then
-                moveArray(9) = intS
-            End If
-            If intDir = 1 Then
-                moveArray(10) = intS
-            End If
-            If intDir = 2 Then
-                moveArray(11) = intS
-            End If
-            If intDir = 3 Then
-                moveArray(9) = -intS
-            End If
-            If intDir = 4 Then
-                moveArray(10) = -intS
-            End If
-            If intDir = 5 Then
-                moveArray(11) = -intS
-            End If
-        Else    'movement along local axis
-            Dim oPosition As Object
-            oPosition = objProd.Position
-            oPosition.GetComponents(axisArray)
-            If intDir = 6 Then
-                moveArray(9) = axisArray(0) * intS
-                moveArray(10) = axisArray(1) * intS
-                moveArray(11) = axisArray(2) * intS
-            End If
-            If intDir = 7 Then
-                moveArray(9) = axisArray(3) * intS
-                moveArray(10) = axisArray(4) * intS
-                moveArray(11) = axisArray(5) * intS
-            End If
-            If intDir = 8 Then
-                moveArray(9) = axisArray(6) * intS
-                moveArray(10) = axisArray(7) * intS
-                moveArray(11) = axisArray(8) * intS
-            End If
-            If intDir = 9 Then
-                moveArray(9) = -axisArray(0) * intS
-                moveArray(10) = -axisArray(1) * intS
-                moveArray(11) = -axisArray(2) * intS
-            End If
-            If intDir = 10 Then
-                moveArray(9) = -axisArray(3) * intS
-                moveArray(10) = -axisArray(4) * intS
-                moveArray(11) = -axisArray(5) * intS
-            End If
-            If intDir = 11 Then
-                moveArray(9) = -axisArray(6) * intS
-                moveArray(10) = -axisArray(7) * intS
-                moveArray(11) = -axisArray(8) * intS
-            End If
-        End If
-        Dim prod1nd As Product
-        prod1nd = objProd
-        prod1nd.Move.Apply(moveArray)
-
-    End Sub
-
-    Function collisionDetected(cClashes As Clashes, group1 As Group, group2 As Group) As Boolean
-        'cRelevantProducts As Collection, cDeactivated As Collection
-
-        collisionDetected = False
-
-        'define two groups
-        '    Dim group1 As Group
-        'Dim group2 As Group
-        '     group1 = cGroups.Add
-        ' group2 = cGroups.Add
-        '    group1.AddExplicit product1
-        '    Dim relevantProduct As Product
-        '    For Each relevantProduct In cRelevantProducts
-        '      If Not relevantProduct.Name = product1.Name And Not productIsInCollection(relevantProduct, cDeactivated) Then
-        '        group2.AddExplicit relevantProduct
-        '      End If
-        '    Next relevantProduct
-        'create a new clash analysis
-        Dim oClash As Clash
-        oClash = cClashes.Add
-        oClash.ComputationType = SPATypeLib.CatClashComputationType.catClashComputationTypeBetweenTwo
-        oClash.FirstGroup = group1
-        oClash.SecondGroup = group2
-        oClash.InterferenceType = SPATypeLib.CatClashInterferenceType.catClashInterferenceTypeClearance
-        'oClash.Clearance = dCollSens
-        oClash.Compute()
-        Dim cConflicts As Conflicts
-        cConflicts = oClash.Conflicts
-        If cConflicts.Count > 0 Then
-            'MsgBox "Detected a collision: " & product1.Name
-            'If at least one conflict value exceeds the collision sensitivity, it is a collision
-            Dim oConflict As Conflict
-            Dim c As Integer
-            For c = 1 To cConflicts.Count
-                oConflict = cConflicts.Item(c)
-                oConflict.Status = SPATypeLib.CatConflictStatus.catConflictStatusRelevant
-                If oConflict.Type = SPATypeLib.CatConflictType.catConflictTypeClash Then
-                    If oConflict.Value < -dCollSens Then
-                        collisionDetected = True
-                        'Debug.Print("Clash detected: " & oConflict.FirstProduct.Name & " - " & oConflict.SecondProduct.Name & " = " & oConflict.Value)
-                        Exit For
-                    End If
-                End If
-            Next c
-        End If
-    End Function
-
-    Function productReachedFinalPosition(objProd As Product, i1 As Integer) As Boolean
-        productReachedFinalPosition = False
-        Dim posArray(11)
-        Dim oPosition As Object
-        oPosition = objProd.Position
-        oPosition.GetComponents(posArray)
-        If posArray(9) > aRemovalDistances(i1, 0) Then
-            productReachedFinalPosition = True
-            'MsgBox "X+ removal distance reached by " & objProd.Name
-        End If
-        If posArray(9) < aRemovalDistances(i1, 1) Then
-            productReachedFinalPosition = True
-            'MsgBox "X- removal distance reached by " & objProd.Name
-        End If
-        If posArray(10) > aRemovalDistances(i1, 2) Then
-            productReachedFinalPosition = True
-            'MsgBox "Y+ removal distance reached by " & objProd.Name
-        End If
-        If posArray(10) < aRemovalDistances(i1, 3) Then
-            productReachedFinalPosition = True
-            'MsgBox "Y- removal distance reached by " & objProd.Name
-        End If
-        If posArray(11) > aRemovalDistances(i1, 4) Then
-            productReachedFinalPosition = True
-            'MsgBox "Z+ removal distance reached by " & objProd.Name
-        End If
-        If posArray(11) < aRemovalDistances(i1, 5) Then
-            productReachedFinalPosition = True
-            'MsgBox "Z- removal distance reached by " & objProd.Name
-        End If
-    End Function
-
-    Function productHasValidDisassDir(i1 As Integer, disassDir(,) As Object) As Boolean
-        productHasValidDisassDir = False
-        Dim j As Integer
-        For j = 0 To 11
-            If disassDir(i1, j) = 1 Then
-                productHasValidDisassDir = True
-                Exit For
-            End If
-        Next j
-    End Function
-
-    Function Tree(s1, q)
-
-        For Each s2 In s1.Products
-            Tree(s2, q)
-        Next
-
-        Dim parentAssy As Object
-        parentAssy = s1.Parent.Parent
-
-        If StrComp(TypeName(parentAssy), "Product") = 0 Then
-            parentAssy.ReferenceProduct.Products.Item(s1.Name).Name = CStr(s1.PartNumber) & CStr("." & q)
-            q = q + 1
-        End If
-
-    End Function
-
-    Private Sub RenameSingleLevel(ByRef oCurrentProd As Product)
-
-        On Error Resume Next
-
-        'More declarations
-        Dim ItemToRename As Product
-        Dim ToRenamePartNumber As String
-        Dim lNumberOfItems As Long
-        Dim RenameArray(2000) As String
-        Dim i As Integer
-        Dim j As Integer
-        Dim k As Integer
-
-        oCurrentProd = oCurrentProd.ReferenceProduct    'You have to work with the "ReferenceProduct" object
-        lNumberOfItems = oCurrentProd.Products.Count
-
-        'For i = 1 To lNumberOfItems                         'Clear out the rename array
-        '    RenameArray(i) = ""                             'Don't know if this is necessary
-        'Next
-
-        'Run through this loop once, to set everything to a dummy name, to avoid naming conflicts
-        For i = 1 To lNumberOfItems                             'Cycle through the assembly's children
-            ItemToRename = oCurrentProd.Products.Item(i)    'Declare which item we are working on
-
-            ToRenamePartNumber = ItemToRename.PartNumber        'Get the Part Number
-            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
-
-            RenameArray(i) = ToRenamePartNumber                 'Building the list of part names for the numbering loop
-
-            k = 0                                               'Numbering Loop
-            For j = 1 To i                                      'This loop checks and sets the instance number
-                If RenameArray(j) = ToRenamePartNumber Then
-                    k = k + 1
-                End If
-            Next
-            CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
-            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'This line is for testing only
-            ItemToRename.Name = ToRenamePartNumber & "TEMP." & k    'Set the new instance name, to a TEMP dummy value
-
-        Next
-
-        'Run through this loop to set the name finally, then the recursion call
-        For i = 1 To lNumberOfItems
-            ItemToRename = oCurrentProd.Products.Item(i)
-
-            ToRenamePartNumber = ItemToRename.PartNumber        'Toggle these two lines for testing
-            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
-
-            RenameArray(i) = ToRenamePartNumber
-
-            k = 0
-            For j = 1 To i
-                If RenameArray(j) = ToRenamePartNumber Then
-                    k = k + 1
-                End If
-            Next
-
-            CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
-            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'For testing
-
-            ItemToRename.Name = ToRenamePartNumber & "." & k    'Set the new instance name final
-
-            If ItemToRename.Products.Count <> 0 Then        'Recursive Call for version 0.1.2
-                If oList.exists(ItemToRename.PartNumber) Then GoTo Finish
-                If ItemToRename.PartNumber = ItemToRename.ReferenceProduct.Parent.Product.PartNumber Then oList.Add(ItemToRename.PartNumber, 1)
-                Call RenameSingleLevel(ItemToRename)
-            End If
-
-Finish:
-        Next
-
-    End Sub
-
-    Function GetProductIndex(objProd As Product, cProds As ArrayList) As Integer
-        Dim produkt As Product
-        Dim intAns As Integer
-        intAns = 0
-        For Each produkt In cProds
-            If produkt.Name = objProd.Name Then
-                GetProductIndex = intAns
-                Exit Function
-            End If
-            intAns = intAns + 1
-        Next produkt
-        Return intAns
-    End Function
-
-    Function BoundingBoxesOverlap(int_i As Integer, iStaticProduct As Integer) As Boolean
-        If aPartBBGlob(int_i, 1) >= aPartBBGlob(iStaticProduct, 0) Or aPartBBGlob(int_i, 0) <= aPartBBGlob(iStaticProduct, 1) Then
-            If aPartBBGlob(int_i, 3) >= aPartBBGlob(iStaticProduct, 2) Or aPartBBGlob(int_i, 2) <= aPartBBGlob(iStaticProduct, 3) Then
-                If aPartBBGlob(int_i, 5) >= aPartBBGlob(iStaticProduct, 4) Or aPartBBGlob(int_i, 4) <= aPartBBGlob(iStaticProduct, 5) Then
-                    Return False
-                End If
-            End If
-        End If
-        Return True
-    End Function
-
-    Sub ExportBBVolumes()
-        'Use Excel
-        Dim objExcel As Microsoft.Office.Interop.Excel.Application
-        objExcel = CreateObject("Excel.Application")
-        objExcel.Visible = True
-        objExcel.Workbooks.Add()
-        objExcel.ActiveWorkbook.Sheets.Add.Name = "BB Volumes"
-        Dim objSheet1 As Object
-        objSheet1 = objExcel.ActiveWorkbook.Worksheets(1)
-        'Write data
-        objSheet1.Cells(1, 1).Value = "Product"
-        objSheet1.Cells(1, 2).Value = "BB volume"
-        For int_i = 0 To cRelevantProducts.Count - 1
-            Dim dPartBBVolume As Double
-            dPartBBVolume = (aPartBBGlob(int_i, 0) - aPartBBGlob(int_i, 1)) * (aPartBBGlob(int_i, 2) - aPartBBGlob(int_i, 3)) * (aPartBBGlob(int_i, 4) - aPartBBGlob(int_i, 5))
-            objSheet1.Cells(int_i + 2, 1).Value = cRelevantProducts.Item(int_i).Name
-            objSheet1.Cells(int_i + 2, 2).Value = dPartBBVolume
-        Next int_i
-        'Save and close excel workbook
-        objExcel.ActiveWorkbook.SaveAs(Filename:=xlsPath & xlsFileName & "_BB Volumes.xlsx")
-        objExcel.ActiveWorkbook.Close(SaveChanges:=True)
-        'close the excel application
-        objExcel.Quit()
-        ReleaseObject(objExcel)
-    End Sub
-
-    Private Sub ReleaseObject(ByVal obj As Object)
-        Try
-            Dim intRel As Integer = 0
-            Do
-                intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
-            Loop While intRel > 0
-            'MsgBox("Final Released obj # " & intRel)
-        Catch ex As Exception
-            MsgBox("Error releasing object" & ex.ToString)
-            obj = Nothing
-        Finally
-            GC.Collect()
-        End Try
-    End Sub
-
-    Sub ShowForm()
-        'Create a new form to input algorithm specifications first
-        'Dim Form2 As Form = New Form()
-        Me.Text = "Algorithm specifications"
-        Me.Size = New System.Drawing.Size(350, 400)
-        'Create elements for parameter inputs
-        'Code variant for BB calculation
-        'Dim BBCodeComboBox As ComboBox = New ComboBox()
-        BBCodeComboBox.Items.Add(1)
-        BBCodeComboBox.Items.Add(2)
-        BBCodeComboBox.Location = New System.Drawing.Point(200, 20)
-        BBCodeComboBox.Size = New System.Drawing.Size(50, 20)
-        BBCodeComboBox.DropDownStyle = ComboBoxStyle.DropDownList
-        Dim Label1 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label1.Text = "Bounding Box code type"
-        Label1.Location = New System.Drawing.Point(20, 20)
-        Label1.Size = New System.Drawing.Size(150, 20)
-        'Projection check
-        'Dim BBPCCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-        BBPCCheckBox.Location = New System.Drawing.Point(200, 50)
-        Dim Label2 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label2.Text = "BB projection check"
-        Label2.Location = New System.Drawing.Point(20, 50)
-        Label2.Size = New System.Drawing.Size(150, 20)
-        'Connectivity check
-        'Dim CCCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-        CCCheckBox.Location = New System.Drawing.Point(200, 80)
-        Dim Label3 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label3.Text = "Connectivity check"
-        Label3.Location = New System.Drawing.Point(20, 80)
-        Label3.Size = New System.Drawing.Size(150, 20)
-        'Automatic step
-        'Dim AutoStepCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-        AutoStepCheckBox.Location = New System.Drawing.Point(200, 110)
-        Dim Label4 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label4.Text = "Automatic step"
-        Label4.Location = New System.Drawing.Point(20, 110)
-        Label4.Size = New System.Drawing.Size(150, 20)
-        'Step
-        'Dim StepTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
-        StepTextBox.Text = 5
-        StepTextBox.Location = New System.Drawing.Point(200, 140)
-        StepTextBox.Size = New System.Drawing.Size(50, 20)
-        Dim Label5 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label5.Text = "Step [mm]"
-        Label5.Location = New System.Drawing.Point(20, 140)
-        Label5.Size = New System.Drawing.Size(150, 20)
-        'Collision sensitivity
-        'Dim CollSensTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
-        CollSensTextBox.Text = 2
-        CollSensTextBox.Location = New System.Drawing.Point(200, 170)
-        CollSensTextBox.Size = New System.Drawing.Size(50, 20)
-        Dim Label6 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label6.Text = "Collision sensitivity [mm]"
-        Label6.Location = New System.Drawing.Point(20, 170)
-        Label6.Size = New System.Drawing.Size(150, 20)
-        'Choice of extraction direction
-        'Dim ExtractDirCheckBox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
-        ExtractDirCheckBox.Location = New System.Drawing.Point(200, 200)
-        Dim Label7 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label7.Text = "Choice of disassembly axis"
-        Label7.Location = New System.Drawing.Point(20, 200)
-        Label7.Size = New System.Drawing.Size(150, 20)
-        'Number of disassembly axis
-        'Dim AxisComboBox As ComboBox = New ComboBox()
-        AxisComboBox.Items.Add(6)
-        AxisComboBox.Items.Add(12)
-        AxisComboBox.Location = New System.Drawing.Point(200, 230)
-        AxisComboBox.Size = New System.Drawing.Size(50, 20)
-        AxisComboBox.DropDownStyle = ComboBoxStyle.DropDownList
-        Dim Label8 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label8.Text = "Number of disassembly axis"
-        Label8.Location = New System.Drawing.Point(20, 230)
-        Label8.Size = New System.Drawing.Size(150, 20)
-        'Desired name of the output Excel file
-        'Dim XLSTextBox As System.Windows.Forms.TextBox = New System.Windows.Forms.TextBox()
-        XLSTextBox.Text = "Product"
-        XLSTextBox.Location = New System.Drawing.Point(200, 260)
-        Dim Label9 As System.Windows.Forms.Label = New System.Windows.Forms.Label()
-        Label9.Text = "Excel file name"
-        Label9.Location = New System.Drawing.Point(20, 260)
-        Label9.Size = New System.Drawing.Size(150, 20)
-        'OK button
-        'Dim OKButton As System.Windows.Forms.Button = New System.Windows.Forms.Button()
-        OKButton.Text = "Accept parameters"
-        OKButton.Location = New System.Drawing.Point(100, 310)
-        OKButton.Size = New System.Drawing.Size(150, 40)
-
-        'Add control elements to the form
-        Me.Controls.Add(Label1)
-        Me.Controls.Add(Label2)
-        Me.Controls.Add(Label3)
-        Me.Controls.Add(Label4)
-        Me.Controls.Add(Label5)
-        Me.Controls.Add(Label6)
-        Me.Controls.Add(Label7)
-        Me.Controls.Add(Label8)
-        Me.Controls.Add(Label9)
-        Me.Controls.Add(BBCodeComboBox)
-        Me.Controls.Add(BBPCCheckBox)
-        Me.Controls.Add(CCCheckBox)
-        Me.Controls.Add(AutoStepCheckBox)
-        Me.Controls.Add(StepTextBox)
-        Me.Controls.Add(CollSensTextBox)
-        Me.Controls.Add(ExtractDirCheckBox)
-        Me.Controls.Add(AxisComboBox)
-        Me.Controls.Add(XLSTextBox)
-        Me.Controls.Add(OKButton)
-
-        Me.ShowDialog()
-    End Sub
-
-    Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
-        iBoundingBoxCode = BBCodeComboBox.SelectedItem
-        bBoundingBoxProjectionCheck = BBPCCheckBox.Checked
-        bConnectivityCheck = CCCheckBox.Checked
-        bAutomaticStep = AutoStepCheckBox.Checked
-        dCollSens = CDbl(CollSensTextBox.Text)
-        bChooseExtractionDirection = ExtractDirCheckBox.Checked
-        intJ = AxisComboBox.SelectedItem
-        xlsFileName = XLSTextBox.Text
-        Debug.Print("Parameters accepted")
-        Me.Hide()
-        Me.CatMain()
-    End Sub
-
-End Class
-
-
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.exe b/CatiaNetTest/bin/Debug/CatiaNetTest.exe
index d2d81280ebb16fa2c7d50cca9758469d25641910..8960b70385807dec3ae8cc117c32c9a58f193aee 100644
GIT binary patch
delta 10990
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
IPBdT#05d!o(EtDd

delta 11174
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
X+|K8~^ox~A$8Niz8`FEni3aQdOXM=l

diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.pdb b/CatiaNetTest/bin/Debug/CatiaNetTest.pdb
index a65f3f03da0a546f7d8d37c4588e18a22d6f8ae0..d2456861c3bc060ca06f25fb35dd93f773a41c9e 100644
GIT binary patch
delta 23902
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
PurX!K+8$=Wyowh9!+HI*

delta 23772
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

diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.exe b/CatiaNetTest/obj/Debug/CatiaNetTest.exe
index d2d81280ebb16fa2c7d50cca9758469d25641910..8960b70385807dec3ae8cc117c32c9a58f193aee 100644
GIT binary patch
delta 10990
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
IPBdT#05d!o(EtDd

delta 11174
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
X+|K8~^ox~A$8Niz8`FEni3aQdOXM=l

diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.pdb b/CatiaNetTest/obj/Debug/CatiaNetTest.pdb
index a65f3f03da0a546f7d8d37c4588e18a22d6f8ae0..d2456861c3bc060ca06f25fb35dd93f773a41c9e 100644
GIT binary patch
delta 23902
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
PurX!K+8$=Wyowh9!+HI*

delta 23772
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

-- 
GitLab