Eu desenvolvi uma macro que pode criar uma operação de espessura em um sólido colado de outro Catpart. Está funcionando, mas o problema que estou enfrentando é que os IDs de faces que tenho neste código às vezes não estão alinhados com o que tenho na operação. Existe uma maneira de evitar IDs de faces e capturar todas as faces automaticamente do sólido colado e fazer a operação de espessura. No código abaixo, você pode ver muitos IDs de faces, às vezes funciona, às vezes Catia pergunta sobre faces ausentes. Muito obrigado
Sub ThicknessOP()
Dim partDocument1 As Object
Set partDocument1 = CATIA.activeDocument
Dim part1 As Object
Set part1 = partDocument1.part
Dim bodies1 As Object
Set bodies1 = part1.bodies
' Modify input body name and thickness name here
Dim bodyName As String
Dim thicknessName As String
bodyName = "FOAM_HOLES" ' Change this to the desired body name
thicknessName = "ThicknessOperation" ' Change this to the desired thickness name
Dim body1 As Object
Set body1 = bodies1.Item(bodyName)
Dim shapes1 As Object
Set shapes1 = body1.Shapes
' Try to retrieve the thickness shape
Dim thickness1 As Object
On Error Resume Next ' Enable error handling
Set thickness1 = shapes1.Item(thicknessName)
On Error GoTo 0 ' Disable error handling
' Check if the thickness has been retrieved
If thickness1 Is Nothing Then
MsgBox "Error: " & thicknessName & " not found in " & bodyName & ". Please verify the name.", vbExclamation
Exit Sub
End If
Dim solid1 As Object
Dim solidFound As Boolean
solidFound = False
' Loop through all solids in the body to find the desired solid
Dim i As Integer
For i = 1 To shapes1.Count
Set solid1 = shapes1.Item(i)
If solid1.Name Like "Solid.*" Then
solidFound = True
Exit For
End If
Next i
If Not solidFound Then
MsgBox "Error: Solid not found in " & bodyName & ". Please verify the name.", vbExclamation
Exit Sub
End If
Dim faceIds As Variant
faceIds = Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38) ' Face IDs from 4 to 38
Dim successfullyAdded As Integer
Dim failedIds As String
successfullyAdded = 0
failedIds = ""
' Try to add each face to the thickness operation
For i = LBound(faceIds) To UBound(faceIds)
Dim reference As Object
On Error Resume Next ' Enable error handling
Set reference = part1.CreateReferenceFromBRepName("RSur:(Face:(Brp:(" & solid1.Name & ";%" & faceIds(i) & ");None:();Cf11:());WithTemporaryBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", solid1)
If Err.Number = 0 Then
thickness1.AddFaceToThicken reference
successfullyAdded = successfullyAdded + 1
Else
failedIds = failedIds & faceIds(i) & ", "
End If
On Error GoTo 0 ' Disable error handling
Next i
' Update the thickening object
part1.UpdateObject thickness1
part1.Update
' Provide feedback on the operation
If successfullyAdded > 0 Then
MsgBox successfullyAdded & " face(s) added to the thickness operation." & vbCrLf & _
"Failed face IDs: " & IIf(failedIds = "", "None", Left(failedIds, Len(failedIds) - 2)), vbInformation
Else
MsgBox "No faces were successfully added to the thickness operation." & vbCrLf & _
"Failed face IDs: " & IIf(failedIds = "", "None", Left(failedIds, Len(failedIds) - 2)), vbExclamation
End If
End Sub
Você pode obter as faces cilíndricas de um corpo selecionando o corpo e procurando pelas faces. Ao fazer um loop sobre as faces e verificar o tipo, você pode escolher as faces certas.
Um exemplo de código: