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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	dV8=*Ik-RUkg3$uZW9D#WIM2J1F$T)pz;J&1 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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 zcmZqp!_)AGX9EkD#22m4@r(=%3|_$^>O#NrT$l2#Jrr*q@M^ORmkyuE+&iq%sy$nO za-GskmDta5+Fs?P?ncKYjGLr5xVTuWKpGhsSgW=_G-H-$oEUI^lNtvH$0cUo(<>fb zW1RlbjM-qagPsBl$I8>;n^W|j)N>}tF@S;F<iK^>tQFD>3~rkn*KKEGbe?Rv)td3y z<kGFyj6WuC+-lGCGj#H&t>+jYO+L8In9+3d*KOvE&XaYw+cUaM&fOl(SUUOSc7Mhj zlO=adXH1&BafdNu!Q`hq>>1xpR^92(7&*CgXEGz#<eNLK8IMjD-DS<VVshXvcgE1k zGj|m;woT^UZOr*Vih&`AiGgAAWY69DoJ*t_7|IzL7#2-#+^x^Jbn?dC`kV`-7#Oq} z85rJ7ez`kX(2{|H;Y}(71IX7>3<`oXChy%XFL^_ffnkmm1A{LE1H;KQgzTKjzI(Jq z??^E)9Asc%uuDhCESTK8M_trLnt`E|fq@|^10o~Gpdh$-^2t5&j7uiJ+@mg9BF(^% z!@$7Mn*)&t*|=)5?;d%kM@*CXZmZQFU}9ikY-VI^VPI_WVQfibY%OGLoxs@U!Pw5u zII)9ql04&#BE}id7#E&mTx86+sF`umHO9qajEhqk7w=(Q!o#>EiE+tV#w8yamj*K~ z?PgqNz__f8ak(Pn8coJ^;*9HdGOpKVJit&S3L>l-4=@yOWIVu7uFH6Up^}^NKs`hA zRK^1g&D$9dFtnUvJiyQ@4<eix4={8vG9F;)WCaldOieKi3=BN&`*|jW@=Q9zIGK%U zvI^tmYfMwNFiw?aoLb8`bv4uUH4IF%k{M@p^UQ5#S{~21yqj(LCC25Kn3i8+T)&%f z!+FLHZy0y{X56`lap!-gjhT!amoe3ETEw*3mT`+Z+m;;0EjdhEwlHnUVcMp_vrCO> zS1!}8<4n6*nDz!S?TcXAZ^yX*BI5xDA0MUz3=Uz82N)b?fQSn`2N)dwG96%W{LFNK z!6}9D0E5#`#sdt_&lnFdxM(mQU~to9JHX&Fo#_CB%Nq~@V!6vR9boW?uV*^I;5&`! z0E2%q;{gW$M{EZe0-PB^1k(YAfY~6zndtyS@HWN+3?VNW4={vE^BiCZ-N1B!A@m>9 z0fz9Kj0YGZcQYPfi2A~GfFbq};{k@aat59Q42heV4lpD!Fdkq?%3(UdkebbNfFZ4l z=>S988O8$)>CsFF7_zIG>JKpFz2rH-P<(>v07LPA#sdr`i6G)E;{k@!eh}+9&jE%i zkZ&7}m<}*hO<+90P<4Xm07Eq>da4<j4lq=oXFR}Ao6LBCp`L~307H!uBZy!+z)%wo za!CDZkj!eP0}S;Km<}*Bmh&87XtH7i5ljct7@E@A4luM9f?|C+h&ab|fT3+3(*cHd zV<wOU&jE(+WDxP0@c={jXPyHLy<8x|h3No8pB@7P69XHA6@!)_s6bdF4<Z>D9z!TF zY0JRC7BSiIfIM%C90Nm!JVZ8Pa_oU<z6Ej&3@P#q49yG-46E~}?+ap_Cpkd@tc~Fa zgaVUx3=C}6lWPx3^KOu5U<goP0LxlWZagGD+2Ah6^gY3hEs`yYV6_Z)ArzRjXJBCa zKRNM`Fz*xv1_l>J2C(e^$&H81`Hm<sFgPeOFoc3s7Ea$6!dS-GGTHX9IMbcN>3*S% zVtgHn3=A$x5IuJar{_g6%1xgT$|%FTN0EWSK?$Pu?&O1qs~KY^+a3{T+F3N+FAStn ziGhJZg#i>e3_FV^uX`pjy(^5dk9Us}1H&I>28QPh3=C5y>mGeB)uINnoq^#fgaVUJ z3=C{LOD4xTEAb|%FfbUXL8Nz1jy<-SZ-EK}!vs|Z23ZCMhT|oZ{an;|K|()N85jZ> z7#KcI4m_^RJ4Ka&;fpE*gB1e<!|%zB$F;#~bkrCav>6x}d?xQa-psgVvh4|RrMgl` zxy0b&77VgnjDcCOLydtUL!E(PF#`ibT`9=hR(w0u7#IxH85r~#7#QZ4PJZXA#tRZk zQD<OKXJBBsHTmO-YQ_bVb5DvhDV9yIi)K{f+o8_D;GoICP|M1|pjbA2T{Pn|-XH1= z3^tk!45wKb7{VrJo>J#sqrt#np~=9ohlPP5W%Arp%ctAKGKxs<Faf!Sf#IhJga(nW z3=C}ZCKsMo=3S!6z))fgk)5}B;pxrHyiYV47z&IT7&eJ8FkIZ6c>Xmb-x6I0h8$xC zhR6I24AUAmOGWlE^Ucv`V8}3LV0g>Kz!2HH{aqSk6(i%F$%WU%Ii^p51jY1)Uzp@4 zufN91yT^oqp~IAcVIngF!}Q4quU)q4FatS+fx#F;fk}4;1~!c;5WNg8sU^l0#tfif zd|=AJ5Ml;Vt1)Hrx$8xYA(I_%h$}_I6no~C!4&tHF)+xOGcf#MU|@&_DVCc)A&aqu zami%fo8nBtQ>V*iGs^Ksm@_bhSTHcevoJ6OPY%2(%{#@Mfg!+xfgzQdfgxma<;};8 zGbYF05@+5tlVN&(4x=LP3JV5?7)u5QQ2D)S^2FQX(<hWMa!lWo!`LGwV-5BILjp5| z29e$j3~YR}CTHE2;+td1z_7uJ0W8foYx244a+5dQF5$gm$-uD2ih)6tiGjgmvf-V@ zk{vc6oeT_HAQYJNVPIg(oBZ~UJg<T^1A~nXL^f~o#CxDDo53Gr&A?z`!@!Wuz`(G1 zF2nTs`HV9ecT9G?C(fiaZ}PefZC)D&h8$Z41~*0q2BmqE_uZG9yy4!`>Ar=G(u^x6 z7v2|V&6v-?z&QPb8<V^sD7^RBGB6a_F)-*dFfe3H-g|#B<BrLR55$$Gf|P;W6jGF$ z%D@1Qn>BU}3?=pq3`-ap7^cn#d2RZJB1Q||J9Z2V1@;UKpmJ=-<i8J!85<@SJ{0G$ zTnLHZ=@;3Ug{QCgU}ELlW6!`K;>f@-mxY1Ba^d84&!l*N*fTH)I5IHIXJ%lq+I;t+ z9^-UzFD6~d1}Bj93=C-y3QPtvFtA;l9QatCx5bfx!Nmz8du?*<<K2=W&R``BcOVp) z3}RqlvzZ+DM47k6iGe}FnE@<oGr93eH{+JcyidiMC6+TxmoI0O<%@7;U?_26VBlqD zV31f2%D-}x3!d8WPH|>nC~#q5kY@x%+|H-!ynmb-7;;<~82&RbFvL!N`?Q{M&*a=^ z;>@b67^c@(FiP_7aA9C*ab;i#VqjoUoxJh6`1FKqMi%}LE({Dlt_%#~3=9nFs~D!A zuVB>V1qn8|GB9W|Ffcey=6xPHJ+6|GPcp?F?0$wuRtOCuLm3#@$|v_e7w0|T%D^Du z&H$Dz-@Ng;3*+>+RgCJ4XC}+O6leaio?*IvHKQbNhC2hp33mpDa|{d&KQ_m{<Y%ns zkYQjD@&rW-BZC{X6b)fwVE7{qvVnoYgn^*})W$PqU})e2If;RxL6U)i!G(dL0aS{) zGB7lN%Ex!_|25b#Fff4l5ey6r?hFhK$)Kh*14Baz1Gq)l(8vHTT^rgN7#IQ>7#jK* z80tawM#C%y28J*OhK8*S3=H863=R800m;D7aDjn=A&!Be;R*u-LjnUs11KgF85kO# zGB7YCGcYuKVqjoMWngG1WMp7SXJBZUz{tP=a>!Ih28Ij<h6W)f28K)qhKA)#3=CNe z3=ON9Ao81;z|F~q-Awfi47m&p4VRf17z!8|8Xhn)FcdQ|H2h{_U?^c=XkcMxU?^u` zXb@#)V5neVXi#HjV5nqZXfS7HV5nkXXz*ZWV5nwbXozHHV5nhWXvkt_U}#`qXlP|- zU}$7uXqe5+z|h3N(6EsiTst=$XJ%k%VPI&u%gn&g%D~X@xt^JUp^br|fs=)Sp^Jf` zL4}2Zp&JyWEDQ`i3=9ncEDQ|23=9ovEDQ{N3=9o5EDQ|&3=9pESQr>4FfcT%U}0dG z%)rpFlLg|leJl(NQ$Qic!oV<<fuZ3Q3j@P6kegT;7^X8YG>EY>Fw9_JXwYG0V3^6k z&`|Hh%D^y-fuX^T6=HxND+9w^28M=ERtAOz3=9p~tl%1~p@@}%VJQPcLo-xe2P*@^ zat4Nm$x!}uRtAQZ3=9pcSQ!{rGcYvlWo2Mk19Au}1H)Pdh6W}!28P`X3=JG?3=HcS z7#f7x!1mQQh_f*;tY=_o&|+g?*vP=pV9N$B;~L!97#OxPFf_!oF)(anU}z{~V_?|9 zz|hbHHK>)1fng^DLqi)I1H&!`hK7ky@kwk94Eq=u8Wuq;XjsO^z_1?__iPLdhZq<d z*0C`#9AIE*SkDIPjMOtUY=KH_WdpZ|8g@c89%N%+IL^S(aD$D3;Uoh?!y7gRhEog- z4P5LD45t|w8dTXC7%nm}H0ZK}ebQja&cJY)fuSLToq^#B14Ba<I|IX228M<i><kRo z7#JF6Lg`uT3=G#niJhH+;buJpL$fvq1H*j=h6WoBh(V4V3=9t#7#dPI7#JQhFf_Dt zFfcp<1uX}-(bsU6gMr}*14F|H4hDv&prGVrV0gyB&>+qU(J#-*!0-!{SUDLO{xC2! zcylr^`~_u4P6md53=9pGoZzCWVJasm|1mN&tmb53U}R)yILOJsz{1GTaDtP8ft8V= z;R4jaE1V1r?2HTz*Ety&I2aiko<POFa56A(GBPy$<78mqVq|Dw;bLImW@Kn!<$^eb z4@!$bX>BeB23|&n1|u#820liH24gOUdN9L;i-AFak)gqvi-AFqk)gqji-AFik)gqp zi-AFyk)gqdi-AFek)gq#i-AFuk)a`oi-AFmk)a`si-AFkk)a`ni-AF!k)dHK7XyO~ zBSXVJE(Qi!MuvvxTnr3yj0_C|+~DH6!IGPSL4lE>A&HxTL6MQ6p_{v&fkBCpp<xR* z1A{UnL&IHe1_l*Ih6Z*X1_o6|h6Y0(1_m`ohK6V!1_mughK9L33=F!A3=Q{r7#Iu~ z85*APFfbT_EaG8cFk@tB_|3z>V9v<U5X;NJV8zJLkjBfvV8h7Jkk8A&V9UtRaEO<I z!H$uk;S4V%gf7(cGB7wWGBjM~Wnge*WN3K9%fR5o$k6Z!s^AAN1A{Xth<O<pTo@S| z{zGX7J_ZJNMurA1K8Qhld<+bpj0_FJd<+a;j0_DTd<+aej0_DjP<drO28IAeh6Xi0 z28KXJh6a78c)b-L149raLxU4kz>SZAA()Y&!Gn*1Ap{f!d<+bsprGetU<hMmXb9kA zU<hYqXb6O=kAl((P&%KFfgysCp`ntGfgy^Kp`jTn-p<Fs5W~pOFqw~mA(@e(VHzI; zLo6dheZzD<28MV>hK9|23=D~k3=RAF7#NZm85)l8F)*YsGBg~8(#QB17%~_c8qV`E zFk~_^G~DE4V8~@;Xn4fOz>v?#(C`In(KkK@h5}H?@Iym}pMjx}k)c5h%9rA2U?>8G z1ejm{uR)8SfuWd@p}~cpfuV$vp}`eOyYYj^KpH&x85l|#85+F!85qhK85&Zc;;H-$ z3>Ba_hSKT$3=EZw3=O$pga0)Y^D{71Gcq)k@G~&fFfufh@`J0=h8n1RGd}}Eb3G$N zLq9(QLmMMQ!z`%8Jbng-c1DH<aRCN~4n~FsX#oa?PEcGzX;}dVh8{+S25kX|4~+yE z7$$(CMu34~5+g%H3{*T>fPrB;DDgr0B?1f#GZ`5gCJHbx%mUdbz`#&HhmoOS8C1bq z0S1P7peTUyj|ng^ECL0&00YBvMuvt<0t^f*K&c-p|6YKBVI?C&1BW2QAv}T%467I! z8u$bm7*;bfH1G>DFsxx@Xb=@-U|0)^0;oE9D6J~UP!F!JZ3Gz@)`RlDAOpiDMurAo zsDeO228PXy3=P483=CTs85%+a85p*Mf*2}aD9FIDhmoP7QILUQKO;j!n;-+jK}Lp# zc0mS)!;B0K9Z<Sckb&VSBSS+Ml<pQ}U^os63Bh`Z%V!BPFq~v$XqXM9=Lj+|oC4){ zK?a7ipb!#dU^vIf(C|}`f#Cuu8wxToTw-Ks;1+`D=NDpN2xMYt5EWuzxB~L25Cg+C zMur9@AqIx)j0_EyLJSNyK?NC9eSi=H!)=hq>V+5>?ttP9Dv>V4z;G87XHb5z5Cg+K zP~s6{V7Sl7&`>7C!0>>Pp`k{If#D$|Lqn|)1H&UmhK4$*`gSPY3#I1>F)%y<c|eGP z;VC0S!*VFSLWqIk86!hO{YoJQhUbh74eNy%7+x?kG;9@OV0g*M(6B>@f#DS+L&I(% z28OqwxQ7~eO^AWvJtITIZ6OAR4~z^AcZ3)izA!R0JP=}F_y#Jtpz6L0F)(}wC1PPn z2uTYwF#Kd>XiyYpV31{EXiyhsVE6^f{~E#!41XCJ8XTYs-Gvz#{xdQ(_z5#GFfuVT zga|V*urM(+#0WDmure_;qzE%GurV<-)Cn^%a4<16v<ovZa56D8oDpVV;9_EExFXEJ zz{kYUa7&nhL4b*&;Wm`MBh0`c#Kh3>1!~U^VNl<zo}qzDgn>bfiJ?JAgn>bviJ?J9 zgn>bViJ`$!gn>bliJ`$$gn>bdiJ>7`gn>btiJ>7=gn>bZiJ>72N@t5ee3T=?z#zxO z&`=}-@o}{X1A`(HLqji=KS_jvL5Yc>VLg<;S%iT>rJjkQ;iw1$gDMk4!&wmq1~n#z zhUX#-4C+h_4Sz%!7&Mp|8dyXb7&Ms}8stP77_^ue8dO9X7_^xf8dRaQnkWN<4#?r6 z5Q|Mk85s1L7#eJ$d>2s$1_LIB27gfo216!>hD4}%nkWN9y%7^b!z8G{G*Jcy6DEd+ z6`~9brc4YC8$=lx%$OJ&PKh!wm@_dn+!tkFumCwwl!3vLiJ^f}jDf+5iJ^gAjDf+L ziJ^f5N^^=aFxW6LH1LZ-93&yez+lV7&>$<uz+eaRh!_KdBNIb|t{6i-g9|9Ap$c8a z7#Q4`7#h6A7#KX57#jS<7#KX67#ae_7#O^m7#f1b7#O@kX+n&F!H<cdAxw;cA%=;e zAySNiA&7~gAxeyaA(V-sAq{F?mKXy=I1@udwHO0K1QSC;gBSxtBojkJqZk82G!sKZ zlUO~(fMziUh7=}-hBh$<hFDOd5@TS9V`6CN5My9SU}9)kBF4aw$i&dFN{oRanTerc zjTi$%DicG)CNTzvG$w|I9bya&8B7cfJH^1G=nWUd7#MPy7#g04F)-vYF*GoVGcXh} zF*JyXLqbGSoPnX3iJ`%!9xC80&cIO0#L$o}&cIN{#L!S8&cIO4#L!SK&cIN?#LzH7 zoPnW|iJ@T{RQ()r28JpohKBdz3=B1(sE}Y_sAXbk;FMrssAFPiP?lg|0HrMp2?mA+ zCWZzF2?mBnP)I{*CkY0ICMJf4dJhSRivlGW7}}T^8qy^g7}`M=N-!{VfP5suz|hIW z(C|otfuW0up@CbHfuWm;p}|CwfuV<qp&?e1fuR=^a*_-TeW27W$-vOh#Lxhm377!# zxfBD#L{Q?CVqlmAiZUq%hN(;p4LMQ_4AYnx>Kmp>F)&PLVrV!Z#lSFwiJ{?@6a&Ld zP*6!TFwA0NXt0xJV3^Is(2ya`z%Yl2p<%K#1H)V<hK7C83=H#_7#dzmGce2tsh443 zSir>4U@ybKun?3zWf&M1F)=jM$Ur>UD8s<8n2DjG6Uv_;!@#hVsh*)>vJ3;mGA4$G z1yG4aG7JpMK@O5(U|7M#&~OYYeny6YVHFcY!(}M{mJ9>K8c=S4@?Xj@FsudnSQcU- zn=AvvdQk3w(j2l33>%mj8u*~{BC-q&n?Z4;Cd<IEg^8g-PnLmUD-%P5mn;Lr4km_% zAXx^6-AoJ(+hrLT_A)Uv9D!;)Cd<IEkBOn-9F%`amVseE6GOveSq6qfObiXrWEmI^ zfE*^vz;KX>q2UKq{HH7f!(k?dhW}7~ta1zt^+%W(8rb9*7(g_;90S8qP(FszoN^2d zCzu!-c;y%vPBJkxh|58ICN0OnaEghcK}(K-;WQINgEo}bkz-&u%f!%N2~}q&$G~uo ziJ>7J%8!#{U^vgj(2y_3z;J<yq2aC^Lp{SqCWeN4atvVlz8nL?B_@W3r%(;=<QNz( zgUW0u|F0Ya!%dKb<rx@mfeILT28P>A3=I<U3=DUe7#bAh85r&{F*In(GcY^^B|3Qq zhDS^c4W{xChkM8~Fgyh%T6qSBXP}~5zMg^MIjA6jDrl2uV0Zz_X7UUSFPRt`rbFo& z@(c{GKqVto9cYC9H4{U_9(e|aH%tr-d!h6`dGMHM!+xl`6Hxjhlzt)4!0?fYq2ZrA z1H&g!+Nf7xVE7Cw5)~L2zA!N~lqxVVd;_I&1qO!iObiVh6&M(PFflZoS72cH4QgO0 zGBEsMVrYm~WMKHq#L%!%k%8eKD6SP582*EbRM3z)GebkM5(5JxGeg5pB?bm2W`>6U zN(>Cl%nS{J%8-x{Q)XabVP<HkuU2MYU}a`#=zvOeDKjvzF*7vWQD$IZXJ%-41Qmaw z%)r3G%+O$~!oa}E%+TPh0x`%(g@J*GnV}&L$_EX#^D;9u6hZkVDhv#K%nS{uRTvof znHd@`LdCDEFfa%(GsHFAg$g`VVPFtuW@vZ^<$qOSU=U$uXsA_XU=U|!XlPbtU=U?y zXlPMoU=U+wXy8$Ui1Vs3Fi0>nG?=I{Fi0^oG}x#yFi0~qG`OlUFvxCx`)4BK=B9sN zSf@KpXDrx$jD<0ckuhSrE*qnCy&N-SXiJ%yp@E+P;vLX9xe7Bwg8^trj+vps0V?jo zz`&rv%+TP&z`$V2%+LTD$<t(JXaJ4&YcWHHxb&DA8mbu>81zA|Wnf@1U}k8T#=yW} z$js2Nl7WH2h?${b4+8^(F*8HMNd^Wb1`}q6hHFp*uQM<(m@_jp+=g2Ch=GB@a{5a) z#&|~S>7MM2()HF*=Q^M{*AePmXJ&>5(5x(I0L&INLdVR|0GgEXWM*iH0FBHsGc+VZ zO$QC&x`6_hfq?-e-vAo1V`c!4(0MR3G|YsGg9he&m>C*YF)$c`Tk7jTLwU>$4cizP z82p$S8n#2}9iX8-sQ*9?ILyGn5HwwsgE5`)|MXf8M(M~9sPjQI69WT71T#YeJ7~(6 znV~^|fq@|gl(<0Seas9EZct}>F)%R1Gcz>!F)%PBF*7s-g2n-%p`Xai&=3X^pZ<}9 zQJpbmx+Eu~KWNUWj)PGuG7V}Qhz8k~1+^^)YFi%EwgNQU3Zb@@Ky536+Exs;tps9Q z*>qMeM*sSqMUa7029OmDkTKgIpwUtW28ME|3o4lz8h9BP7^;~W8bFz|o*6PQ+QiJz zu!Mnup^cfLVKdafpipdQW@tD8<)39>VCZ0mjDLbc6_hx-nHd^D6N5d>4D}7KL385F z3=M3I3=DlB3mC!EEDc(W3=ET)85)ck85kymyvoSHFol_+!5uVE&&<#ez{tQb4U{ez z85m}O(gh;}!%Sv|hFs_XDri7;4k)uRGBC_#W@wns$iT3WnW148BLl-cW`>5@jG*E9 zc!q{`j0_A5m>C)lLKPfhWMEjr%+PQYw0MA-q2UbFzzd8F42wZ7hsr-;WMEjz%+T-( zD*u_0fngalL&J9{|34!G!;0w}xf$0p?wp>;!zf+93L2hkp)t9R88RTfo|ysEtOKV` z2?hp+4a^J;pt;YD%nS{n@oZ4I=`b)bY-MI>uwY<d*oKs=K@$qwnHd^D=?tU}l)HB@ zGc*)3Ffi<7W@spf#zQRwLlVO-Xto9^>||hI*vrh&FqwgY;Q%N+pbF<QFfbg1<QK4m zK-uLGGeg5B1_p-1(1<<)Dwd(@_cJgs9Ajo^0A-gG(_?uV>ly2&-{obLu0I9!?pbDr z22QAI9tH-6bD%<;fq~&XGed(A0|UcFW`+jPQ2iBVh6Y6j28OH53=JUff?TP`z`$^g znW4cNs^6Z0f#EtR6)-R`++b#C@PN{u3=9l6nHd^Dt2RLT0vQ;bz|IGia(9>+8ls>E zfQpT~pu!!>FJoX}xCbpZ?lUtqG%+wRfN0P}^n>X;`55IHA5Fi>$5;=V&5Yt_l&XIW z_105pEWU)s;%jDx26@nu5@@WwXJ%;708PX~3pbFnK+`#2nHd^Df%Y9#l|Wr_6*QZ{ z%+LT@i}Dj>9wP(8Z%}YBGBEsQW@s>DWMKFQ$prNb|Ct#Y92prHELb49fq{jgVLvp{ z9cE-;U}Rxvc*n@Vz{JAP@Q0CsfrW*kfuD(ifsKWsL4}Edft`h+L7RzzfrEviL7xd? zjwurZ11HEl==6d&69WSm3qwO069WS`3qwN-69WS;3q!+n&~yVo3q!*iCI$up7KR4U zJcJ+%L&J8cL3^1P7=&0D8qPxv0!>Q@voJLLV`5+sVPR<CVP;?uV_|5J2Te(_Ff^Dj zGcZW9Ff>>*GcZW8Ff`aRLmcGF%)p=mvWFQ`t8HLrU{GaYXt)iUZct-kXn4uYz@P#0 zAu|Jm77IgzAPWP7HVZ?81PcR$4hutr3=6~{B^Cw-T^5Fh3h49#X!=2qg`r_N3j>2b z3q!+J76t}G7KVlsEDQ|BEDQ~ISr`~hSQr|furM%~vM@BffSU7~g@M70g`q+84GRN< zISWI>f2aflE2x@l6=alGv|(XraAjp+uw`Lr2xetquw!9p$YW(-uxDXtsAgqgaNK@W zkkOoxX<qf@ea%w!&Mc7H+l>WM4urEn%7JJWL<RuOFUPPzCa7XT5d^AFSQr}oLGwo} z3=N=}#8eiBhAajKhBT0M3=9mJEDR0Z3=9m}EZ}O7AqV6=1_p*a7RbC)5h#Ix2F^=Z z7#hAYFff#|Ff@2FGB8xIFf`0zWMHUfVQ4tO$iPs;!q9Mvk%6I>g`q)~iGiVxg`vTb ziGiV>g`r^z6KHaYp<xFT14APVLjyNxo(PnpK+{1i3=JX73=ADC3=Ngc3=G{Y3=NIU z3=I7&3=Lh(3=ET47#b!q*E29oW`RsFO<`eZ*a4bbXJKeK$jrbn6J#+n1H&v(j59MZ z%wu6_c+1SdFrS5?ft7`UVId1cLl_GK!(vbpWno}g%EHjFkcEL^84E+hWflg8RV)k* zpP>={gN1=%9ScK4E-M4WdKQL;Dpm%DO)Lxzt@W%744YXP8v0ln7`A}YHY)?eRu+ba z1*{AV+gKPHR<bfM>;xrkRtAP$EDQ}tSs561gDhYLFH&fD$jZR5mxZC>Ju3slJ{E?C zzpM-lhe3Ibje+4P3qyk>8w0~J7KR2T&@2oKLxV9J1H%ax$n?-j7KVm;(EQLT7KVm! zHt;%#hD0_7hBKhJWMg1B3raF<3=HQ$E@fk2I1h3t8w0}y7KVoTYzzz+K@MbNV7SD> z(6EV(f#EU>L&IS<28Jsv3=L=57#OayFf?3aV_>+(!qD)Xje+3?3q!*PHU@^9EDQ}l z*%%mZu`tv(FtIZ*+y=!RI|IWV7KR29b_RyKptxpdV0gm9(4fxF!0?QPp~07(f#EsG zq3jF{FIgBG64@CT-mow<WP|37SQr{6vNJHe2Sp`21H(rahK8l=3=Cgb7#h~IGcbH( zVQ9F@&cN`Ug`wd-I|IW{P~K%{VEDsQ&(QFhoq^#WD5y9X82+;`G$?a0Ffg(*H0W|L zFtD&PG?;TRFtD*QG{kZ+FtD>SG^BGdFmSRmG!$|$Fz~Q4G*ojiFz~T5G%Vy`VBlwE zXjsj`z#z!V(6E(*fkBv+p<y2f1A_=FL&I?n1_n`9hK36q3=Cqd3=KCq7#PIsSs5B0 zaWF7Qurf5f=3rouVP$CG;$&cuXJu#*;$&b@U}b2K;$&b@W@TtF<z!$`XJu$`;ACLX zVP$CW;ACLXV`XRv<YZtlWMybr%gMlC#LCdXz{S8|%*xQf%f-N80#e7tz+lSC&=AVS zz+lG8(6Eh*fx!}FJ~snHy%j4%Ln=1|gEcEdLlHLvgAK?aZUzQhR)&UM+zbqMtPBm( zJPZtutPBn1JPZs@tPBmOco-O*Ss5Cx^Dr>DfDGbgU~pw+XprY+U~pq)XaF_TJXskU z?(i}&c(F2oXGy$S85(Rrvne2R_!t;`Ss5By_!#OL{8$+po`R-RSQ#1|`5733SQ#3o z@G~$3gMyTwfguEB5I+M$C@Vw5OMV81Fjj^JF98OINLI**dlV}}!%qPQhG<rX1~x$k zh8U1Jf(#6?tPBl)f(#6CtPBn71sNEUSQ#2N2{JGwgQ7-|fgy#Jp<xGT;5wC+p<%Zm z14A0fXMzk2>7cj~WMIf(WoURI$iR@r%Fyszkbxnam7#%8h=C!8m7zgVh=C!Om7zgT zh=C!Wm7&2*h=HMim7&2`h=HMym7yU;h=HL9ls1GI7>ZdL8YV!8bEgO~FqE(|G%OWj zU?>H705ot7Vt@ve%UBs2_COUL5Mp2`XJu%(D8#@}!OGBZ2})lUVqmBQISi`qjSvGv z6)Qu-Um*sDYF37Ze^C0r5CcOED?@__beL8`7`*hUK~tE4p^lZIK?_RPYYQ_l)PoWg zRH2J7149ESu?T~gK{SLx>2P5Nh9*{qh8(E60$~P*W>$uVMqvhq7FLFaCMex3%)rpb z%Fr+es&0WW14BD2L&HX428Iq$6hP_C!VC<ZtPJ%HpaEx4v*dy>149=pL&HO128M1> zu7J{yg&7!nSQ#4rKn-LNVPNQGWoQr-VPNP3B|a!EEW*Ih&k7lL2AO9d!oV;Alomu7 z7$&kZG&n(NXAuU5NvsSFG2rpz`hN`xA`A?ZLHSvPfnf?L7eMJ^5e9~-tPBl3V1@r0 zCWtUFOamoK5eA0otPBl{p!8x928J1|3=Jzq7#L=P5*t+gb`b`KS*#2Vd!c;L`1EX6 zhKAEn{$&vchPf833=OwL7#QY*QaM!OsR#qZa!?$LFfc3yrFszthGnb_4d0;R-$fW0 zR&GBi#rT-H9<oe~5xgi2w9>?u0X*^oVlu2|g;ecpL7~LJz_5{(p+T8}fngIXLj!0* z+h$gV23H0KhApg+F5p&B;Rb5jvobVPFfcIeU}b0kH9<k4*#T<GgAy{du{fQ9fngUY z`arEnkOENCdp9dX186bf9+2Z17#KkGOHdOZ6kX89p(rB*!#-Aq21`Z;hW)Gz4OURv znvsFw04qa7GE`kUBLl-hR)&UdMh1pMpjd#?y^IVDhe25wtgilF!%jv9h9j&D4R;wC z7>=?sG~9#I_Zb-&j<GT{utOVx+)NA%$3cY=69dBuR)z)xC~e5Zz;Ke4p&=5gE|!Ub z;S?xgGchon1|@7L-OR+ma0XOpLFrZ|28OesoYM)_IDv_Q;XEkiL-`At7#J>q(gl>i zfr)|PA}eH(%q38CGBGe*W@TuQWM*Kv!phKK!_2^Nm6f3(o|%E+8pvX128QdPD1g!} z%nS@SSQ#2Rpsmpf%nS^Sx27*tVEoUdF=evcR4KtHtPD+{e)C&ahDJjM28Q?3&nhyC zGe=KhnBHH*Bw7CfD*p>q%P=r7{9%Q3^8SIUJ7~;;hHOB5b5I&$gY;$?*&t&cOl%Ad zp!Ma<Y>>ts3mZejd<F&vRyIiIn~e=TB*VbY#?Sy-_{zb?(D0Fgfq{z++{R;O;9;Bm zZ>k?-@brsHjMDYIY>)&BqCs7Mel|!SUyzNV0n`T-VS_jil)gagS3!KxdM<G`h6W=B z1_ntsNSjoKjRCx9N|ueGVHpDhg8~~v6DK%*{A=K4WMEKXV`va!WMI%_V`u=SKUFq{ z1~Ep4dImK%hNcpzL@6T!gAN-*1E}k*%LeJK=&><0#4s^17_u=mBtxSyi;023gpHx0 zfQf;@l#QXGl8J%AjE$jTE)xTTIU7U6QYHolD>jCP^-%So&WSr4L&Huc1_o<3hK5~C z3=B4G3=J<qy%><s-ZC*T*s?(uOWCn8G;lIAFxay(G>9`ZFgUP57E8IYF*Im0GcY)^ zF*Il~GcY)@F*H~(GcY)_F*LX_GcdTYK^nWRAcrzDFo4vjFf%ZKECwyc^kidbNMmMT z0MY5t^rJOBQ-x8Q$(wDuUOm$-#!b@`RT-tde4%mT&&JRIT8J6I#?Zh8O&Xv$31nkv z0Ck8#E(ayCAU1{uQ2!v9jiJGmfq@}}jiCXwEH#vEdR_yQ98(zE^u7irCnmmG)3wwX zrRpP~=0~wHG_XL;<p3=+1qC^1+zJ#|pm8iVh6Z8K`ZYF&1{tV0Xq9n18$*LCX#5K5 zjzl(w22fH>VuOq_CbKa#fI8wSY>?5#R5pf&Xi&d|jiDh0)Za*FV`#_)Ey`qLXaIG* zGuap#K;w2<Yzz%upbiTgL&FpX28LWVhK4x|3=9Qq3=NB*4h0QA7J=dx$_EWN6|*rk z>}6nJC}D#vxC7CkLa~&Mp#ijx8Wd0`85kJK*ccivGt@IMl(RubqChmL&t1WW7_Pj} zz`#%mN*oLf3{`9l4X>ayXn?93nwdZbeq~@_r~!o}sAI&&(7*(xnHd=v>Og4-DfQR0 zF*HarGB7l-F*HckLmASH3=EBI3=N7<g{q7U3{7kd4Tg*i49%eI1*JhFU(47a#dQlP zyD>5_w6QTXI59FXw6ifZOlD+Y=wM@Lm<cs!E+Yd&Cn$s%85p|QAOl+6AfGcbF!Zo7 zG}K>#GOjW*F!X|a4%K)cH1r1YAtM7rKPc@nF)&O3<yR&KhKZp33Z=!F7#Jq8LArvV zkWd6|wgII<CI*HnYzz&qObiTD*%%tanHU(Ru`x76Kxt6%KAnxBz99jcFH@Kp7-q0B zG*mM&FwA6QXqd#rz%YxAp<yKx1H)`KhK5y88noDP4jV(mCaAt`ObiTj*%%tmGBGgB zV`FG|!o<KZADVp^urW0JVPaqa(SMm37#4yOIW)U*Ff%YLVzY;gIxGg|5@rU5C7=S9 znSo&`8$*L1l=f$4U;qVq05b!_3Q#I$W?)#!2B{ZTZ?Dy4T+PUtHy1Kux@GdmLgD(g zpp*a_vjc@2XebSuXAeU2(jidHgNDx7AY-RTK&1$1$P5(W3=9k>K&1(2s}U$-p-CIm zFgVA?&;VM-4+>|{7}j|<hK4)_28Ii4kTJcBY~Th$5_pgcv>NpiC?!A*0FB{YhSm>P z*%%rYf=1DxdFeVELj!0%KZphm-rfL(H&ovS&?p)kL&HWW4I1;iHC<JQu^zM(yK25v z{T--x??SzMkBy;$n}LDh0o1z>*%%rU7#J8Hu`x8%K}`h>sXb<6XlP+zV0g;L(9jB{ z+ZY%ap0PoOkU`#D!N9=q9O{~vYzz&n85kHq^cn^RhF5G14W~dw2uLAl?eA+g$lBVs zYzz$-85kHq^d*pmYzz$_K=k{64PQXjFr@lp_{hf4@EtT7$HveAT3Y`Jl&+!aUy6}| z;WMbLV`O0X3QFHlT8@!{;Ts!6gAG)j1EVwp!*@_bF)}dxWMgP>hSDyK3=F@f_jWMN zX3m(;FkQQoNiygUG^GAQL+U>psBO={z`)MXAO&?Gs8D5OhYTAsu|q~bnb{!;g@qk4 z_zT*r!OA{;S|^hk^VIna)6aJ@Nh-0kLuznNs76r8=z}VJc7_Jfs4zGCbgnKYIV(PP zhK8vO3=9J73=N<N2B`zhc?hyIG)!V-U=U(wXjs6=z#z=d(6A6nFJfe15M`gfPM^_> z*>WMn^z~g#lJ(+H3qdrf$soxNiF<i=$a-oOc7_H}Q$dv-QXT2AGc?#keF~a<(q(68 zNC!<Wu|tNZjo29)su&m;OxPi{fGInq763W0hk=2?4CElF{-vO}H)m&P01Zc5uroBQ zXJB9e(I6jLvNJU7gen9T|5oe_4Xlg|3^t%3WMp8lV`pg4hsL1=BLjmYJ0$8r7I`o- zFgUR@G~_TcFu1TYG=R1Yy0bGhG%_+Uc(OAzv@<d=c(F4yOk{+vvjUa6-s}twE1(9h zVPs(NVP|OA%E-Xr%g)fS4N7lkWMJ@Phm50vEIP)>z!1RB(7?mQz!1#N(4fo2z!1vL z(BJ?q+uWHL7{b^Y8g@hZ`=R_JObiU+><kSYrqIF+G=d5e05uUJ*clpnm>C!%*%=yo zp>!WJ14A@BLqk6^149h^^r{{vJ*GJJ>8pB}{&8Mg3MsqNrXMtA6b?*)#%MA-q`{HG zj@sZz1qB>5U_lLyG-%AGvqLKW40eVF(1b)LJ41sF0|P_W^h9Gud9G}BaDC5^!#>@v zkI9SKW*Niu?mi~T`aGz8`Roi0j!<(!n*s_z0S)DY+5v^^;M@)_+dvaYMeLAFUd+zW z0LtVg?4bIbfdNE=7S@-tGc<sza}W)hjVxnlXt)KMzyc)%hA0M3@V+vJ>G>v%mP``M zr>`<$l&Y_UI;MslGU{5(&d>nb&05FK0PdpILz818JEUdX%+3IwtZHFrXfR-8U}yzJ z9yAfSf~sV8$mCK7J7n0slO0kccCj-wctRsJfQf;jhn=C}IunBwLoYi+1E{9zXNRoP zp8!f7%nS?@r^lKyMl-3dnrt^kN^>&QnN!$7t6&%yrh-&6FfdF5`;CENIy*xHXv^J< z=?^C`iCfNsX2RLfD4D~Kn2Q8WmdpjYhJk@$9y_Fdna>WHlUy*}a3YiQ^a*B+9E|1D zXPPle*Dr$Fyp$c%HCV<D>BFvKhcx|HL$$79XK2V|U|?9w4k`23u|s+&>p|HDR5h|Q zG=OTPjqD5!Ye9WrP_6(?XR$Lh+yM1?*%=z{F)%P}XNNSpcCa%v`~v0oogj-D85s7k zGc<r2NqgBD8bI53_kofhsPD=SnE*M!&d?AA>YK7NG!%ilr0fh06`-ytJ3~VYs4L3O z&@hFOf#EniL&I`L28L6h@`90p;WRr#1E@`OhMl3|B_jjFS$2ko4~z^9=Rgqy%J1hv zVGHU?f*b(qGJ-5-Vqmz!&d?CV#K3SBRH894FkEA2Xvkw?V7Sf>Y17;QWj`hchMVjR z4U3r=81Aq$H0)zyV7SZ9&~TKAf#Dt~9Wya7+-GNKc*exQ@BrjvCI*JbAp4jZ7@n{* zG-!e*I-asKG`KJ`Fg#<2Y|wbl4(Ut0U}tE^WoBS_2`WOF85mx%Gc<tm{cCoHhDD%q zf}NpZGcyCjdv=C~bIc43A3zy|nStRWJ43@GW(I~&><kUxm>C#8gEBk|1H(6Vh6ZUC z28QqK3=PIC3=BWm85-)nSr{08vokbAurM(EVP|MaWnp0W3kqTu28Mqi1uP5<|3L*0 zs4v06&@h{Yfq{{Op<yKp0|OHWL&J6!1_ovhhK8do3=AwB3=P*=7#LVN7#d!(Ffg!j zFf{yTVPIhAU})fFWnkdoU}%tMWnkdsU}!L8WnkdqU{G&xW@TXD=74PE;Nf6sNM~hW z;N@UwsAOee;OAgyXkcYv5a8GzX2}@G$oXSEq-Z-gU9f>kxL$|@QacKBFf@QRCy8)C zX5&OTAWICyI3RPT;vA3$iv$OxQj+9gXaF^*q&OHFW-u@?NOLeWfOfOVa4>*p?PNI^ z8jdkAFvxK*G=PdGc@BmKR)!)5P6l%ZP6lfRP6h)8P6ngx{??3~Ow;TbRTz&=SG8l5 zXF9fFa@<R~=_z)M3XGl8TkRN?nL0Ouw`6TUVaIrZm5F8h^jR*9Mohxnr=N3SG-I4R zoz<1GnsLkYMps5_#+vDST^WrT*G&HiqFzo{bz`(<{5?I<jnSU*-}HrUjQ&i_`=@_$ zV+>+4+&|sToiT{<^z@nTjOL7H(=UQ3m+71yjP{H#r+a!Z7BkMCzSo1%oH1?sR}V&O z#_7`yJsJHOe@$=nWSq~~GF{P&(U@`4^iVHGZ^jAJ7kV)!GdfLY^#<GM2%_#yuk~iM zXHq;leV;dD5o6GFLmx(K#`x*EK8*2<dDGAOFzPcFPXFt}XwJA}x~VT?IOC4#y}pd* zj8mr{^<}hYlD;sV&5zNHao==XKSpatkLi_ujM0qM+pqdD1~W6e-C&sBugxSo-6M#R zhso{6<hTP-(>DY$@-WVvzBh<*JCo+k$#n;%rcVfF<YCghIelI*<1WUx(<4I|<(b~z z1nuFQyx@?;^bH}5JdE$A?+sz>XFN6CH<VGC@znIfP)2v=)3+F=%j+{0PS*)zRA5{_ z-8YO;nQ{5_!Z60oOigzt>m7YIohO1(f@%3((B9kW9ubT@VD_<1(>Wp;d6>4|1#P#T zZWGDK!+3wXXC$LO<ICxlk&NbyR?{~|GR|hqneH3KD9@NPJvWNcovHWU<ae%W)9*wv z@-Uv5{xXVjG86xO(AHQz5WOy%aTBA<^u!oOW2T_{ljogU2HN<l!`$<PVfuVSCdKJJ zv5Y)SJx?ab9gy36;Pe#c={|{!JdFFdM<z0UXJl;I9+=EHo0-vl``a|e$&8Gx(;G7w z&6!$%g49obaBa)<o=ipwCb7TMmt``_O)tn|RG9qcddPH(EJg`N&*_0#jPi`0(+jg0 zS2H?Jm(6C>W^()o-ot32%fRqO7qX$$X?kHc<8Q_V({pne^%)mTpPR#YnDNi_#9T&o z=08k~lh0q51?>o(E|bT|!(_%X-Oib5(eyKUj1tT-Y>boN-;w1#V!*)gz!1DIiXmpY zU_N6v<HG54^BFfY3$QazUZ0^ky{3SX2h7=jUlz8()0i=AdSf9Yh?-c$C_a5b0VBuc zJNH|rM-(wiFg8ywEMk;rY@R-`h%uRY83*I!{|^eMXB0C^aHw-Jg67g05Zg4TFDPc@ zVN&OszOI;2jah?>ar6C$I*@Id(+x@)C76!zO^@?plAE4U%E-ffgpYA@{o|d}4ayiL zn6&t($9Xd;P0uM~<YCt0XPg{=Om^~uCpptu${8h?*aW7_l{0EFvk5Rx&yQl11@Ex5 zuw-Bmu>x<|VKAG%v7FJE*;|lt^82T?(^D!KC76VTr`J_5sxb=-GfrOrOmg~x3Pv6# zQQ_(5Dj3a}^@SNH^FI#<?V40$P8DXH-2Ys3`kYEe9x&(pb=l1qo~welN7^$!o32~U zsLuRMf^l;EOI5~W(`&04Uo&=Y&#YlQEW_xwU3Vs<G$WJd&Fx;Z7>yVi-%hWc&G?$> z)UD}t9E?)aTjnrcU|haEbS@(|6XWvjiSrq&85wi7-(A31&B(-me|yv-#zoAGJ=^~- zWn9k9*t&h`M#kSvOk#gQBc9XuY+=-3_WTPO-<-CU@dBgc_KRB?`<WOQOi$dwc%1Ri zcFmoP|5+GgwrlQVtY!p9ZuNZ0?FaTVZee5!<Cw11$s{#>!a>Fkre==m=Rh2jLySkj zk<`T`wO!;e;{ztnBYdE!WMqJ}S*HseV>|+ik*+=_sp%h%G45bu6WG4$I3ph;I56#} zNKU_Ug7FAr>h_r@8KqempKafImNB1+>1p}&cU(+zyr9ZTfCs#NjN$3_zzdAg+>CkC z*WPB-XPh?u?rp}|98W4h7BVnQZ~Vt3KK(p56YKOjcNlpXpG?1ak5PR3fjf*EjK8M8 zyu&EZ_zNPWaF<boiMevR*Ih<AM&{`cxtYYLH{4|`VHBNyk%LKky1+d~9!AmWfhU;c zr`z0PEMQWsoWAZJqY|ScTrJ1+5BC^zm<%hY$K7XCVl;#(UT~i=g7NA0pZ6J)85y5U zk9`O(rPn@WbmnBP1i6xtL1=p8BSzurJdYSPm_#e5?|Z~3H9g=FqXwhm^p8AD($lAa zBn&IJ?|TGVH#lRu>JvtF#u?jvpD@nnX52LW?R&;*#_!WJKQO8@exE+^1EW3T&*>LI zyq_SR_;i7fj3!K6Qq$c&GFCCEOHDuYkx`9NeY)>wM)7H%7&VwQrKW3rVpL<)1Pe{i z_{3<#Xf=K5C&qfl@ad|b8PyrXK{DQq8PjKeW~^syoi6!>QJJxIyX_aoYHr4D(|7)7 z)Mwl_{pEj<yQT^<O=tW*J(rP5dg>7-8OEPeA2M}=tj%L&GGo-7Zpg$WJ^cV9QvqW* zh~3TDI(;t_(_+SL+Y_0Y4zn=YPFLk%l4rDqhilCA9UM#&jQ*gAP-paq1gp(G#)#<! zoJ<l-(cp*>o4$aPiH9*7t_vI+A=4GOm?W68!BHYMJ%EdehcO#sz=HdX0n^WLF)1*X zPk+nBq|I0k(Q3fW)WA4p`bKUhea0yuA$!KT(-nD`<QeBqcjRGGXSAK3$;0H#=s$fe zh>8Y9ku%5!NVM@XX)u;gujFMaW}GtJkdH}vItL$<2IJiAhI~w)85x77s|qm5GX=>{ z_glhrZM%#hlM6TF-06ujOv;RNr{~Ht$xmM*!!(8Q&vZ*!CS%4w+jC`^9<wsmOb=9M zie}t9eXTN+KI7TxcR{=p(=An)&NCjJ&Z){|%%q|_-A<J$iZOKhOjRa-#vRjNsxp-` z22D>?WAbO*JAI=XQ#@ngbU}3{dtN3(P`YDa0G)4>I{l$Klf>k|JK3k#s58kho}E5Z zovE1d-*jFLCTk{ci|Jk(OlC}a7So$Fn5-CWr|;EZie@a>E~&{>%*6PAdapK<Hq(Fm z>E{fY<fh-yX7XSxoUW+Dw4M2n1LNfSgOa>EWEdDCWWjq{8U9RX)MeVucwqWoT_$<P z1Jm#7GC4CIoUW+H)Xz9~`bIq_Wv01K)AMAR<R;HJEHhm|pNWTY-gH@grpb&|(>Llf z=`&VMf2hy2nR%r%<K*fD)#-Z-n0T1CJ2OsRpU^zr&ydNF@#FNlhD`d5AGe=1WZKWn zq~f`~&y>lJg|T<~T}vi&CK2E1VpdE>j3LuKt(fc?*KhB%V)AEXwA_BvnrSy9M@~E> zVBn`lOg~`D#KV{~{j4q1YbM3y>AUQh<fgaSGbv2}VaJri7&1N8o=Ki5BzgKhU67-1 zluVa!V3J_;nQrL7q|N9vJ=TFqo!K{qadP#|hto40nIsrjPj7T&(q~*feWN4OVP^JB z#>v^YC8tktV&Y+9&zwHbiD@3A<8)hRrrpfxIpAt{x`Yc84^w&$IEW`(+)dyWF=1f% zU;^G2%&>m?Mi-{d%vHIN3V4Dm6Axq6^trA~-&qgjF+xvNn7+e}Nr34<-t>8{Omfp- zxG~LPd^^3>ok^bQZ63tsJ04g}|KrZY!z_>wsex-em?StR7C?jJBJ`jHLB@&G4|*`E zGfyf&)V;1udZnOhR|`bv$ufyeU*N^GhjGgESZ{C^>h)$?%vdnp(1%H%v0!?l4^uE> z;q<LOOp}==mxF3hDP9d*28J)Tkb?;(PcQUkQfHc44ys4BcoS?H7(UoS*0iple$kgH zoiS*-r5{r<<J{?M{g}EL|7^GPXId`8_<#GuWTtRN5I>d4n33_o^xQP2*UWRB7^l~B zFiK7@NoTsiShd|XgK0W5<HzlHvzfwq8FRLqRx$}QGb<)DPL`i4IX$I@NrN$DdT$NW zYi6Gm#>xKEB)3ngWh!A}Ts@t$f$2CXzNTxdF-mTK)4=qEg)x2m#a5<vM#ie`k?l<9 zL6&NEGA(9&JN;}Y(|yK?+t+q6{bm9M%c@?cdyG@2clI$|W-Qnq+s|ar$T)fX+zCwW z!i-m^t1e+uXS}-IcL`HA598bEJ2x<?Grpbva062~<JIYf8=0i1hiqh$VSKy2a3j-Z zF~()nRZlQ!GcE&_WBrV0rawHvB+qzeI^#(ub;f1WHBU07GoIN#@g$SBCS%I<y`Pxm z8B?a;{lp~B3Oa9xWBNp9W^u+1(*-{>iA#bG(&1q6EDlI40v(UQAjY5x8i-(+GTjj* z4LUOiEM1hJQkq->m+qKe2$oi2VBlcz$xO^F&Ib)_!*q8{U-+3xoE5YPpJRG`1fwK3 z=%5aW$qCaRer6IE?N9@0g`87^(8l|PNt_jQ)C|Y;!VgUHl3*r-fti7Ufq{t$XtBB~ z*m+B)Cw^g4mIR#~!vT{vWnj=^fJpC|KKBcgwj}7p7r3+;$O#bX2h$&ZVG@^oU<z^q z)NpfzbkB6buT0{SphH~Xx-CG3B}8|`bjPnu@{AGF6TdQvvw}`!;h22>miY7utjrvY zE2hr{iO#WPVBna(@gtKs<DBUizcPt4DOgW`^_59Z5_EnF+|*=*lY6Eseq+*R?3wQS zjY*spbovR$<O%nsr#G-Mb1?3i-usP7To-iC2?qn@;1gJwLByb*NJF@C&-9DmnB*Dv zO#k?eNu04|I_GyLc}dXWBrwZO4H3cFGTrezld>e}EE2f15yGs9>9ya%KA!s>6g@5= zzpeeiB+j^F`o-@|;*y|aKR6hIGxE#b@{4jo0SSrf1JfCQFo`o}Oqcw@B+r<!-SP+1 zS<!m%)^zZBN}w5XP*V;>gD`07J(>}68WM<)E(aP90wptSa?cnU7(kO4AUUM7Nx&V5 zkBpF_1tiB-4<ex$WT7(?c<Vb@gbhqW2#{PeGXujBW(Xf$&Yc~69s^hsT~2@ld|Cxo zx%$l<;3F-tN(OU+PYl5-w;Obh0%(H>0|NuPh1)^f-9XzIu*kV7LXK7f8OjD4k^?b7 z8015HGw`7dATEZXHs%bV)n!=ax@?ew6s!V5fXuvO134xMB!ccx28QiS0?c-dTo*uN z#-MrXpy~Gnm=(5X2{Icn*C&8RfEhq5utAy`818+B(4b+VgsUKNEtmkB9B9rOG~W%8 zM%D*8EeW)E9V7>GAczKGMh5G{pta<nVQ~;2w4wm+V2~te@CdXi1T2XZ>L5ALOcyRW z&;|-za-dBWxa3kmL#fy$6Ry5sU|;|Z(1RSqjOKe4q|}ct2bwhjtq_3e+x|zCSqS7+ zkN^mSf`r`;at;-U4-WzcP_Q#Fq&YEwj<o?vVWg3>PLLC&K$7VCblo7w8ex;;tapbT z28B)1--Cexv>pm12Tjx<CO9vH4he!C5QHulkq<tZ1gsWa&bk271O-Wg<lw~s$oKyX zAjiVNBtbL?gXHcM;+6w#yn$`H0T~L?1HvGEJ4+x3y@B}Xa&@H)^$eg1Tx^nxW#FZT zASniPjq|Dzc^O>}w3H2Wwi!qxx}3%oM3#ieLH!SMDd+?<&~z#`jlok9=>nn=qzaNQ zHqC@&EszMh9N#QNx<Ho$O}=k|+K=HwrFn>SfvypBL>TBiFl-ir&IJRV|AkEsblw-} zU@v4ju>Bz4gQn9!3-FO8L2Qtm%`!v^Mt6+Fa>$unAhqans;dyCBf4DqD)7Qku>Bam z2MvIOX2!7@dTawCSHSW!NFB(bof{b#_JXz<F@TyhAW;Yg$+_J?<O+nodPp2<-b7>z zgd{}n?M+0=N0&Qw3%A^I(Ec#c<T4h=EWZoQ6(Ikk8=7+uQEj5j@!v<}3Us-iCx~2u zF4y`KycG=`9LRE@g**&me-YUNSrQa%o_`s@=l6khqRTn{L*xo{xdlv&;N$tQ>HEXP z2tI$00aOj6Ym8xIgrB*GE+@dw2tGOwo1tMGjNnu9u*o%ZFfzb$1*)0#3=E+0Ramw_ zm1JN54cNhQ1-hITKO^|KI&2oQ2{3|Bs>3EHEX)W#dJZfHihmFTgh9cbD$K~x2yM8b zTlh?ZkpZ-f1*8^TZiXZyLp(@=fq?;5$Ah>aGrvnR!b)chx%!`yj0~WKcp$~-8r7w6 zYt)p&tuGvpT&ol#18Bh?)IONikgT>%ijiRsw7HA!m>_vZ2Jh*N3e4iHbLANs;=xSD zKhqz|GfOl6pZ-^#S(^2a10%x`umtM?M@ELbU?$_->46H&(u`Hpa}}7S**<zOGE|FA zUnkEj#s(Va*vbrMvnnPtG8lt3u!bZvGW>ureNsSH9aLl%XI-7a$Pfb-Wn<3-C19{V z#`NjFip<iiRk@4|Zqoxn3PA%7x?qKjZ>KL*WR_-}IDIcjjb15e=ojpTDW!}IcOYsC zrVA=DOS4WcXJiNhi_||YX9S;K2nr)uV;;l?MJ8xOR}92qKs5A0T#($a3PyMYqw52W zv4VCeg4CkRiB>W)fOa!N<q&BSWT;{#BLl20hOW^NRU=407=!fLRx&ccEQA>jk_5^5 zBk4nzi>|CkScoo}jYng7B_ji96%xo2bbV7Q5g~&vHy2$FrU2y9Wz#PzGfOfvFr1nG zR+(9v@#=I=6=rG1x6@Tsn6;T$tF{NJFmGbTc~tp!87*cDHYS1D+rtc)SMdS>7v5K* diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.exe b/CatiaNetTest/obj/Debug/CatiaNetTest.exe index d2d81280ebb16fa2c7d50cca9758469d25641910..8960b70385807dec3ae8cc117c32c9a58f193aee 100644 GIT binary patch delta 10990 zcmZpe!r3r^b3%twr19r?1}J#Ipv1t<7{I__$Hc(E0TKKZJ8@MQ<ATYIjOwfzF-#0H z(;e-ZbS6hKs&oCYWny4ZU|?Xdo7}~y&FC<B8>2d-+vIzUN@`bPnZVjT7#J9s7+4v6 zRxvWH*}%ZS%)rFJ$iTq%BZ`TkfDvSr*5&}F79U38%~$<&*;zG$85r0$g++=ASTZp% zFjX5eFt7+u5S(CXH#sxgljRcw1H<GG*<no6119$dC^9PuPM@5UV^BXsOn9cYrQl4# zY5y37X9>>I5fKy@<P)4J-V@8fz^Jj3fq{!bTbKbND25~`I8*$Z@Jzv(f-?*cf*dT! zE8H(AA;>pH>>so6Y{A(&0wA7XzxXu}J>}LskfV$k7+Az_3C|G|o@=q3fq_9#6=d05 zja3W`To4<@G*&Y(a0$;7oM+hpQUI2p?2xO#ICt{II9G$Yf(9B5aMcj^F$m5Tza~6a zaIWASyMX`y{|oYoUlZmN<P+?(+c)`It`*08i&l_X^CwH>Dbz1u64c1gW@KPvs<vfd zV9^L<U|<toC@3MgV2YrG;KC{5xBf8-FA`j&BPb{)xIl2B5(7hny~c7-Krnz6fR%z( zEf!o1R<%%Y0kSFv!TI@hAYUvITw;~||NsAc;)3%_!x$JCb$A6C=TFwZt+@GSo&YoB z(#fw1%Q%*a2`|@<5Y(Q0|DFuf@@ta=3uIKl;k_IjE{jA&#KbjPK=unR7r!RFTyVMI zGQ&k+^-_}`6gg=wwLA6i|9^;g@_j*pb4z%Im@uDqEvnec$==1OGAj+|!UJf9UDbb( zPCZa!StYn?^O@psMk_`KP|~}{X)Dbo4vJbP23<a@bUuCv`=&s!jv!P#O2}%85LEo9 z+|qf?ai!biN*SBP85Ooa>|xAjuV27p$S_BIC66J)2JuZif((Deck>uB+!H^_Bgn8> z_&kpwLj?B~9zlj0_M1F{43-jiL2Be5@USts2;SvkW5{Izk(b3l<PrAAJZub)#6aXh znP)s~4C;a}dDs|II6>qK**83F46Je>GFc9!=C$PGdLA~03a~^fm^>`?k%x_8oAfUp zHU?u>5SvLBL~_gi<6&bE0h6*|GC>6-QX>sAh)Iy0myN-hMT(b^Ax%t<myy9kRhgHO z;f#s~FC)VmF!>2gu2$9MWn?%HCgoH$c<UJ%a==P^RCRgT7!tsKg7^&Lr#?}T&oWp* z*5LOa+)rp;LiYD9bWhf!_!8o$T2WANWh#RLnH)cn;-z{T_=zYlIf5h0zFy9Vmyv;! z(VUl&!G;kObNj*UYhZQ@6G(hE6G+^i8N?1_mg7ZDVq^t7+==y|#DyN<Y;5OQ9`l4X zgbLa4hBbWQ2a(T3Y<OYfGx!~N!y2+VK;$}B2e|lJAy?k8hFhE<@;sP5N6Zy2n<MYV z8`i+f4kA58K;&BvuQa%{ESo=XSVOcDh%5z@zHI(*Szf^q-mr!qc@U}39>OcgaEvvQ zmyO{WV=ONl!xE-MUN#0n##CNGh6Mh3+-wYf%9*?Y3JeS$48jbbgv+Mu&tP;-uHj{3 z&`<=G62ctcg&TR97+j#dI*B%3CWZtkZ@o-6FB3xzlqV`Rk(Y^K29zf)F`bu*;Q^HA zz&)3jiQzkx=fk~t`t=!%nzE~SnHge~Ko*H{2rF&kWo38)<_UAi$ZVP}JCjk<YCA70 z!we0O5;g`lwllo!3<a7H-c*)ryc`S$S`gkP(HFej40oWseC2<<(;H?oO4W1l@iVYE zL)6r(@bd{U@I*j(UuC8Egc&3vA-q6Y6+Tgh32`7EBg0zx3~n(79&odOjo~(vHlH|y z50v+a$%0RTAs_*yl8vES*n>}t;YJFCC!!d_r^gVJ3gK}mM%VM{Gn~kPaQBI&@EI{| z$b|5=iDvPcFtB8Uc@k43*%-_iE`xc_++kuxd}a&}vO#SNXYORN3O+Li<s6VoXKo|a zdOmXo-5iLVt7<EsIfEHgZih+_p9O;hRPLn8B))nJ22ZHuER`NUONL;m<VuxEe3lF` zP`O(wJ$zOSX;8WMDwFuE81kWVGgN2tSu<2Z<yNT9=d)&Lg39esoyljz&;yk_qdK3@ zhG8mHjzzVH&$ganK2%a#brPQ~!wRTmglavX9m6K5T&8L(pB=+)s9crmOg?*tqfog{ z)%kq(3>Uz1Yz*&(*%%xc3?_rZf{o#;EC-(hgTfRD&wzu2&ynE+lxLy5jL(Uo{>@Z~ zq=VuzK4*p((;z%QF*XJlhA%T9JW#rFVK^}p!ULr%SB8#R5FRL9crX|&fbc*m$dkch zD};AdYAv4+!;Kvf9w?RgF-Yu$@Ia{~oI$337laE+CW#D7_Ca`NqTBdV8D#cDcpQq+ zeCZ4whafy_wgY@w3?7FeJWwjhWtejW!n+`GmM@>-29)Q>ag(o*Va73#93#VQq5FKr z3<;+}JT?XumFIjV3{OtiL%5)%SH^JW421VtnvJ1?;l+6n50cg^7*Z~Pcx((s!fXtc z3}3E-c#I5p1V8dsGF-R@;<14fX*I+A>mVK^kybOTxeiH)phQ~D@E$4$N~ARmKd&>? zGbk`PbAwW84Fl5+h(=H<t!3c30nrFbrL_#AP&rT{tz(df%7GGT9fJl`4wOji8H}KE zphQ~FU=5W6CDH~4SEw8)kv1^+-C$s-XJByV2Bp$Qh6t!6D3vxcBtkWUQfU)IHdGFj zNShc+pmLx@+RRV~l>;TxW`=gC94L{tFieEXff8v8!yK?2B$2i<toY9WvLBL4TN!46 zTKx=c44_on#*o3t$iTqB#sEsC?F=bQ5FRLzb}%F`LwKM>+R2c^3gLkgX(xjN8-xc+ zq+JXQ><}I(k@hmI;DPW!iL{SlgCdAm&&B{sr4tzfR6$%wSvHwr0+a_zrE?gjs6pgF ziF6r*j5dS^N~Eh8ra*b1M7oB7K_4OqN~G%<4nTRJM7oJV#1J9}N~BvD0wBD422d*9 z#vot}l7ytv9Sk?jK|Dw*-N_JR0pWoX>23xWO9&5?NcS=%*noJDM7o#Z4wwf?r280h zoFH<bM7obb%NfLjB+>&67GNGDLw$qbN4^6LTcF%x!H;~07<NE;eS#nPj=<&S2!7-{ z#=znNGKP_1rQk=t6AS@R-gd!{e5V-ZfO$ul)^dw7oMCta<}osyRAOT|%P_?gq|cfA zH^Wc9vkVJ78Nmskt)B5e-&uyoP)S|JBEEABAE1(!j1_$67>vCj8aFcj<U7w`>jlxc zhw(q(c?LJA+;PStz6%TiP`S&D6?_*MCPU@Qn11qIWLN-|Yh?P*cah;SRIZ1qzKHJ< z!w0D345kXcOAN-|5DN{NfAU>su=R#mXv6%U?=piMRL-5bi0=wR08}oRxq|Ns!xXR_ zB!I6nyn*n*1@cvf2p^D{Yz%rL9DG+9T5=$~ud-70eAgHz<U+Whlz)REArHa>rTm)= zG5HW4DCOT`h$w*YK<W85!;ex350swoFl_08@UBX+@!w~tm;m8{3f+ecJD@yJa(>0I zXCg!nl$`6oFt|*Ea6#$$2g4pH50svNF=)(!$br)HUj~oa5FRK!GceAX1L1+vGZW(t zC=ZmJSr})`1IaNmfC^nU#)QQn9wa%lGd_XxK*^a?it)@6h@^?ib3SfHo@F2&I6Y5S zUc@+)QDFMsMU2vnV$*LfVwBca;1>tUGcYr-NiZ|BF-Ssq0>@a-u&MJScvIQ+r^_#9 zlxDP?ZVjSbr-v_Q)MONx-nf`in%|dS52lZIrc%)K)r%Qx83m?mE@6~r6qxS1gfW;= zVEW7@jMB2<{NTI?wy%<zjRBnZ7?=f)vECAhoqiFdA$9s&5S25Xb19=VWASv=rHtl` zRnudaGHS{;@Po4;So>RMHU@CM0&8~>ZkxUsq_S`NZIDU<eh-L~7}z9&nAjM=83Lq| zcd7K0>59u3rTJ&^gHtU?kkv(a!F2CsjGD3n{C;qKJ&bG&{t%wPF<xew71Jj!W0YoG zH+?OL+B*H@GDd0Hz5Ky&B`OM4{2_4OEa^kj8J9CkGoF|(3!=_Vw**mFriU(P)MTuh zUJs%KrmtMiC@p)NKNg~oflb1ViH#u+!V@^g+Q9m7`a_Vum(%}(sCUyPS1?M;zT;1a zC}Cieh-P48$b|4f?iBhuJ#Yo1G~@5-xhoiJ85yU)Uco4B$sqtv>)@bcXJKO~glkZe z;}C%I7}zAV8Q2(#U~;VMCHbb?uVj>FRG1#Ul2O`HO`skk2eq~V!V@^gdsj(E0KxO% zlxJ;(%LQ@@OkWQ&#c=xRm5k=v0{m?dIR-WfB_=k8b_h@481FiMa{&ZzrKrtx-Bpaz zjE>ViSAkPc7eplko5TrbHim8pPv98uZUx8bjjI^V8QrJvT*WA@?Jv*=m%Gdrip109 ziV^6C%Q<l+P5-}&QQBQi0Gy>kiGkNtJW~LirNO-aVrl}D;2QYFGX*BYc&vW>Yz$Li zJl_4X1=AB(GnzA&O`o}%QCho30G#(hrm$}3ZxNUQQOUq25zoxVFcZQPIL4c!=s5lU zYOptdgY<O?fXfAtKHf0?&CCei9=Qofa>wPSO?O<w=vqHlU@l_^IHL<P>|t3dFrRV5 za**ka3@cdH3M^ne4(35h(uIsyz`SEjX)?Cl3mLyac{|wS85c3~tN`h2W)S7xDzJ!A z1I#<dG+#iTbrGWjn8(KPopHCoBF1PaZ!6P*dVxiZWl*jp<57V{j1!?eE~Zlgix~Gp zc_)}I2rOoN3FRp>UK3ctD6tY`A;d9D87-hZkYkoH27q}G$1G#a0rMb^S;p7`=0Uuh zxQuZvm<#dmauolrVB7(gW9G<VpUbcUP3{#~4iqwX1XeJztO7ZPnZuRg4DU)t4JdB| z!<p?**D@~WlfTN=$uwW!4qFSu48@0REewr{FW5MljfBpy)G#zEzMH;!52LdGPxgh3 z4KfTIfy@o84_P9ar${<5Su%@?uyI&2pXUe3a&hu<9ApIbzz#CrRu*8`2qrU`L2OIr zVi^&RLgofmDUOc}Cj}Iz%kE_qXH=hVx|h*ZIG?kV`Ls+aXD9Pj_8QKQ3{UxgPOsg| zC|+;NJ(Ia!z=?Yy^At$|hL;Q=!(TEquzGT@WR7L`=dNTF6N}=mWDMqzX9cNA;C{)l zoj-$nBlB8rHinZ7ptNw30Tk>f89=eU6Ku{DaHstsvx?9vZVm<!rpw$M3=&K?xH%YP znC^0OFsLv+;^tt`V7gJy&B34p7BT@VvH&Zx0gE_*6?uTgeZb-YVDS*JcnnxP0W6*Z z7S8~S7l6e}z~U8P@rSH8xD^<h89-z=n5<^FETqYBm|>?<y&eNM!&^Z;24RM8f_e<n z45C7M49X00LV66^3<g4a48~y68Z6?>U?!x;;0+cD29wbYenNT-$qW@jdJNeNtwIhA zlNoMsJ2MnB>=AWlsAjk$<jHWD;gnJWSUedlo(vYxWH`)lPpP4v0py|vuuwC@Y=#@$ z%?yjdB*=(PhQkc6l@^1=7c&$yToql+aGK!;_hN?KU=pNqCBtEcpGpV7<{So#A7&_K z5EDDh0P^KYF!=y1`xtD_W3c&;!R9<>s0SJJ60C@U5#$sFFsaFSn1NT>0nAQjd<?RT z5u|c4V>Cm7*kZ=l3^%wBgGCNAMl;M3I}8?i3>JCJ7|n1*>@iq`feGYX1}2bGn3+H( zFf&Cnyc1()0-2!9w7Z_+2DdU(G=qe=GFZqNtjL)un!!oj87z_v7D;A`X2=mw28%R< zMVgtS8K#LhgGCmDMHVwfGaL|K3>G;I7CFom&G1V6Fj(X<SmZHNG=qr5W3UJ_^KORv z8{Evy(F}GH%*<dHF@xNw%>0`nL&6!%c4m%dSTErWmQ4nWBr``d+>}TLi!_5pnwg^+ zm?fLRB8$Nyi<zStbR`#qMGk{S4l_qHgi9U<i#!I4JZ6q&Xsnlf3>IQ$0a?t<63wt$ zl9>hU6tIXgOEkk(NoBBzGg!o#C7R*Cq%&9~87z{_63w6~l?)bX1dBAXTxR$z+{kj9 zVV+1cSfrUHnju)K8LVa@SY#nsP5nZa+YD<&7K4QrvqUr0N-YK}ItUgy2v&5E<u=0s zk;7n-!z|GZ%cTy3)tqGc%<xp`Az1t&Smi^O+YFaP9)m?5vqUpolzI$S`I6-`!#g1c zR*)wdp(MzOjP<Oy86Jr+gN2w`qZxinF|&ev&&m3k;k%FmSX>cGf;1?y-e&kAq6`*M zW{qZ0l~x9;*JS<7z#!}Z7I%b_AoY%{w;4D^oxvi`tkDeq(#~M@o?!I}tl;#Y2$oJ{ z1!+iRz0DvenhX|6W{qa3luia~$YlM@U@zPN7H@=-AoY!`w;9Yto53Q@tkDdMrJKR( zJ6S(7cnB{5i!X$dAoUAbZ!>s^E(VJ%W{s|AI4ivvtYIbVXNExG17L~6P?DMPyYyk! zXoi2%hrw!2vVLZW5`F-deGDbJ88u`cv;JnNmwCzhnIT!2fejSM%uq6#;f4$|n=m7j zEHfK8T-iP|lnN_=WtG{$>0g;mnlVXMnJt>3Kvo&7NRtg5m|#WDP%@ffmaH?_AZM@| zPqxnt?ZOFQ*<>gg&2U6EnGNLVWU!h{HgK4MWt*WSH{(0mX13o9{&JmcpBWa_3oigm zEQXTN3~S{UgB`ROY{W{idk=tR4@1e{4A<pOf}QvPEb<sig1qsV4dmm;V7)KdJ~ONq zW?%=02b2VPgP9#166_#P)+>M|l%ZragR#6aSXz@E6n_q2ac3wQ%@8Z^43_m|2N|6J z7Egwf(G2bK$za(`_RkD^g`2_R&Fs+(8|9n9;+^cEFk1{3U(6oOa9e(HJy>ET`)7t@ z!iT{UhuNbUSQQR~#ZQ9W_!unynEf|{zQRlP&kQ$&nK{6I;`q%_qrl1Wnc=grGFU{J z<2S=81x>JsGg!o#<2Qq#q9?~^hCjl|V3A~wXofJwWDZamWOCGhW?&U*21_(^L^Cuf zHiIQP!A2|wi!bJgW>}@T7%aY$<1>S}$YHSfVUB2qD~gA~;wL#iGZ=|H1dBi90HyPX z9H7GIF$bs)e9W<$;h*A5j?WC%B8;3Mr!#Vb)G%`1u4h;y!psR$#LT&xAzX=*^D{%3 zh$2{#B3O|kC#djI2CGr#1Xa75oS>L<1gmibt8wH66+6yg5l>D~qDus`6Tz~HoS-r$ zlk+n}hDak=yb&zk$a$Ng{)b2>=VyjOk%eH1g<y$=oS;HuCFf^`Dv^U=@q=LTgPfqU z;Uwp0hGvn6VDX1w@rRtCGT<dAD0UgS!2aU``;QBh*EzXBQKrcS%6Oh!Ajf5Lfl^N= z*Jp;FdXbe}pBbi#oa6$z?j=|e12@PBPHvD=1u$Ea8>GPj%=Y94C9VW8JCpk}!xrHN zFuRlcGeeKa0x)|eH^{OBVD<wr$-o0LQvpmmfXM_fS>FJr7J$hEVDbT&WZ(sB0Fw@2 zG676BLP?PS8hLLsM2Ic~i!9^?i7e#3&5$B`5G-;KEOL<dHbbH4L$Jt0u*gH++YGg$ zjC>&T8SD8#+8Ft6Gjxe6f`t^pB8q&s8K#Lkf<+v`B945w85WBsf<+R+B8hyr8P<y) z5Ck<b9teUOUJODYLlwZJ1DH$zlMP^U0hl}hCLe%F24QgduOJN4<^U!Wz+?lMTmU8y zfXN47@}cl%h8x_BBA^7T2qqoDWTFVjghUaLtb#bGR&)T94dS4BZvmJ*AP%b19)L*& z2~ZMtkoa8Bz#!Zp@tJ{B_<+P`1|eYv$<GYZ!U~d~8B~N5BtJ9g3NMiS%wQ(`KoX>Z zK?+1VNP$vDf)uELS|A0kHNYf;G^ln^0Fw#Qpt_&|OdgQ_%#b6@AOlJh3NoJ=>Vy+y zK;|^ad}gR;5I!LDnW0^nLH0Al1YrkRkf9B-pBZKf9{{r%<Up1=fXM_okn94v&kT!% zAAs2k@*qPU<iUo@gH$e%2N`_;Ofo2dldS?sJV61hR{<;wCK(hzGkDYsJ1BzFup&s& z0Y#982Vjyx36#zqlt7MaPy&^Y2b4hmV^9V;R6+SO!+GHZWsq?VVDf-6D4Q{;C^J43 zW>ERe@JiT01ynLNfY}Wy%8Yk}4uC}%R6(VogDR-#t8Y*RDLSC~nSoD)K~0(QvoM1i zsEktpvlYPX1T|$w1(5``&kUL(3)Da*-2*jHS*D==nZZRwL0y^AS0q6l<befX@_{<2 z5M$5)IZgpgCTM_VH9j-MiyY7ZW%UPOQlVZGRQNb(f{L03O;EvdKojI+1}%_p9JD~e z+n@ysp#xeVBOZWB25nF{DS*iYZBV{%0Fw)}L1oDSF!?|mWEq1F$T9~VusJ#)6AtKr z^ghr5MX`czJxC})7bLVm7Zl(JbU~Iq&;=RFpa&uy^gx;u^gwaEKo1m)2lPNag$H1g zK_A3s&<EuR1u*FVCKJG91DIR@R&xMMJ^+&p1|VGu2Hl|czXO<)U;r{A0nBayvm3zd z1z`39F#7<QeE`gU045m>!3IG|kO>Z8b^??Hi6}EY=T>EU&aKY$l3SDMCAT)yOKyFp zm)wR-FS+ZDnO<^RGri<?W_ro(%Jh=ko#`dFC(}#rK&F@6kxb9IqnVy_$1=U-j%Rww zoyzo_JDuq{cP7(w?rf&l+__B8x$~Kxa~Cqb<Su4<$z96yoV%RqC3hv$44!JHm)x~X z&$;WFX7MyKJ?Cy_ddc0&^pd-s=_Pk3(+r+&rq|rPOfT!X`<b3|Ph@(|J(=kx_f)2r z+|!v}a?fO%!84obIrm(q=iKv|UUDyFdda<*=_U74rWriTnO<_QWO~WHn&~C?TBeuW z>zQ71Z)AGOy_xAH_g1Et+}oL+bMIt&&b^!ICHG#Yc|7}>X7C(jn!$6JX$H?xrWriP zndb4FWSYTqn&~C?S*H3KJm;BSa$jVc!E>4ECHGaPm)zHxo^#)3n!$6IX$H@IrWrgB znO<@~W_ro}lxYUfbEX+QFPUcWyk?rg^Ok7_&wHjBJfE3n@O)*O!SkJI2G38X89cw4 zX7K!FdddBt=_NNK^Gj}K=I7k3%+I;mnO|~qGC$|$W`54i%lw?1pZO)Xpda%~Zeiw^ z+@j1cxy6}Za!WG5<d$Zh!K29hl3SViCATW`OKx@Mm)x4nFS)guUvld*zvR|up21_t zJcGxW`6ah0^Gj|^=GWZT%rCiZnP*IQJjZBn{e_K@otIsbU6tL5J(0bVy_J0i`#kpb z>=)T@v+HmKa)xupbEb1PbM|mf<ILq!;@0EN<u2qd=kDU3Fn#wq#?Jc30t^hCA}<6O z7@8#B3NSG2miZ*Wz@RSmLx6!nUgDns149Bgiy#Aor4pAQ1A~nWh)fsb7i3`YR23Cu zU^uHHEy%#I7EFEylWSBJ1sNDFfJu2(kZdkkWiMC+O>aF(nz<O&1sND@89~+`0JE=y z*{w_<@i|N&aR+7)JDeHBUeBc~$iNUTZz#yX@QW2hZs#-=WMF`hrgD~o^$ZMimFxr= z7&dZ%q*uv-$Ru%)B28tGW{6S_QD;F0h7DlN=cGLa85oddS4#WC4P}=J6=YyAQ-~I1 zU|27mAjrVrpq3`cz|bd?16O0ETqMZAAf{9y$WYH9rc^7)z`!olBFMlHEYk&+09g-l zkhI(cK?VjjF!@kv8r%pzx!HmY3=_c)-Ne68kb&W(=rTbDhBpeU1sND1&Mj30u^|q9 z&$UsIfgzr2J18o}_X;vF2!l!2!?K6rz9|4}xCJ&sg8QT(14A$Wc|it-r*fC!YWSFL z3NkR9VY(;Cz@X0fSdf9Cfc?ex){Be_nK_TLon^D)p2odsy8cy0<<x`RTCAYSWfl+t z#Rs{4g+WX%5CO%fxTCPBn<WF1M%H_ZdzS#Z*um-BuQEm|hH}4Qs^)&f)WH3Qsg?U3 zQ#JQHrUveJOs(7-8JBV&XWYBp@EYT3XMv}uCuUFGSLZ#GZ)H-)KHmQAJW@;>SXo5a z8&*$0AkXw``(6d6BAM+5woE0AI<O_Epe3U+j0_AdF-#0Cc1#RG!7jm0GZR|f?s>WI z>E83k(sTjK_6v4Q9E?IIpzBLP&U^%7D@;@rW4aPMoymd8Wjmh}(=S%0FSgqSJ(%7z IPBdT#05d!o(EtDd delta 11174 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	dV8=*Ik-RUkg3$uZW9D#WIM2J1F$T)pz;J&1 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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