Option Explicit ' COPYRIGHT DASSAULT SYSTEMES 2004 ' *********************************************************************** ' Purpose: Changes hole description ' Assumtions: Looks for CAAPriChangeHoleVBA.htm in the DocView ' Author: ' Languages: MS VBA ' Locales: English ' CATIA Level: V5R13 ' *********************************************************************** Private oUnit As Double Private Sub cmdOk_Click() Dim oHole As Hole Dim iRow As Long Dim iHoleInSelection As Boolean Dim oParameters As Parameters ' ------------ ' Get the description you wish, by default pre-select the first description ' ------------ iRow = mfgDescription.RowSel frmCAAPriChangeHole.Hide iHoleInSelection = True ' ------------ ' Loop on the selection content, we expect to find a hole ' ------------ Do While iHoleInSelection = True iHoleInSelection = CatObjectExistsInSelection(oPartDocument.Selection, "CATIAHole", oHole) If iHoleInSelection = True Then ' ------------ ' There is a hole object in the selection ' ------------ ' Get the hole limit ' ------------ Select Case mfgDescription.TextMatrix(iRow, 5) Case "UpToNext" oHole.BottomLimit.LimitMode = catUpThruNextLimit ' ------------ ' Update the part when set the hole limit to "UpToNext" ' ------------ oPartDocument.Part.Update Case Else oHole.BottomLimit.LimitMode = catOffsetLimit oHole.BottomLimit.Dimension.Value = CDbl(mfgDescription.TextMatrix(iRow, 5)) * oUnit End Select ' ------------ ' Get the hole diameter and its tolerances ' ------------ oHole.Diameter.Value = CDbl(mfgDescription.TextMatrix(iRow, 2)) oHole.Diameter.MaximumTolerance = (CDbl(mfgDescription.TextMatrix(iRow, 3)) - CDbl(mfgDescription.TextMatrix(iRow, 2))) * oUnit oHole.Diameter.MinimumTolerance = (CDbl(mfgDescription.TextMatrix(iRow, 4)) - CDbl(mfgDescription.TextMatrix(iRow, 2))) * oUnit Set oParameters = oPartDocument.Part.Parameters.SubList(oHole, True) ' ------------ ' Set the hole description parameter ' ------------ If ParameterExists("Hole_Description", oParameters) = True Then oParameters.Item("Hole_Description").ValuateFromString (mfgDescription.TextMatrix(iRow, 0)) Else oParameters.CreateString "Hole_Description", mfgDescription.TextMatrix(iRow, 0) End If ' ------------ ' Get the hole type ' ------------ Select Case mfgDescription.TextMatrix(iRow, 1) Case "Simple" oHole.Type = catSimpleHole Case "Counterbored" oHole.Type = catCounterboredHole oHole.HeadDiameter.Value = CDbl(mfgDescription.TextMatrix(iRow, 9)) * oUnit oHole.HeadDepth.Value = CDbl(mfgDescription.TextMatrix(iRow, 12)) * oUnit oHole.HeadDiameter.MaximumTolerance = (CDbl(mfgDescription.TextMatrix(iRow, 10)) - CDbl(mfgDescription.TextMatrix(iRow, 9))) * oUnit oHole.HeadDiameter.MinimumTolerance = (CDbl(mfgDescription.TextMatrix(iRow, 11)) - CDbl(mfgDescription.TextMatrix(iRow, 9))) * oUnit End Select ' ------------ ' Get the hole thread definition ' ------------ Select Case mfgDescription.TextMatrix(iRow, 6) Case "Yes" If oHole.Diameter.Value < oHole.ThreadDiameter.Value And oHole.BottomLimit.Dimension.Value > oHole.ThreadDepth.Value Then ' ------------ ' Update the part when hole diameter is smaller than tread diameter ' and hole limit is greater than thread depth, before apply new values ' ----------- oPartDocument.Part.Update End If oHole.ThreadingMode = catThreadedHoleThreading oHole.ThreadDiameter.Value = CDbl(mfgDescription.TextMatrix(iRow, 7)) * oUnit oHole.ThreadDepth.Value = CDbl(mfgDescription.TextMatrix(iRow, 8)) * oUnit Case "No" oHole.ThreadingMode = catSmoothHoleThreading End Select ' ------------ ' Update the part ' ------------ oPartDocument.Part.Update End If Loop Unload Me End Sub Private Sub cmdCancel_Click() ' ------------ ' Unload the form ' ------------ Unload Me End Sub Private Sub UserForm_Initialize() Dim oCATIAFileSys Dim oFile As File Dim oTextSteam As TextStream Dim oUnit As Double Dim oLine As String Dim iArray() As String Dim oRow As Long Dim iDelimiter As String ' ------------ ' The string as delimiter between input in the text file ' ------------ iDelimiter = "\\" ' ------------ ' Get the CATIA file system ' ------------ Set oCATIAFileSys = CATIA.FileSystem ' ------------ ' Get the file containing the hole parameters ' ------------ Set oFile = oCATIAFileSys.GetFile(sDocPath & "\online\CAAScdPriUseCases\macros\CAAPriChangeHole.txt") ' ------------ ' Get the text stream ' ------------ Set oTextSteam = oFile.OpenAsTextStream("ForReading") oLine = oTextSteam.ReadLine Select Case oLine Case "Millimeter" oUnit = 1 Case "Inch" oUnit = 25.4 End Select oRow = 0 ' ------------ ' Read the hole parameters ' ------------ Do While oTextSteam.AtEndOfStream = False oLine = oTextSteam.ReadLine iArray = Split(oLine, iDelimiter) For i = 0 To 12 mfgDescription.TextMatrix(oRow, i) = iArray(i) Next i oRow = oRow + 1 Loop oTextSteam.Close cmdOk.Enabled = True End Sub