C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

ソリッドをサーフェス化

ソリッドをサーフェス化したい場面はそれ程多くないとは
思いますが、忘れつつあるのでテストしました。

'vba
Option Explicit

Sub main()

    Dim pDoc As partDocument
    Set pDoc = CATIA.ActiveDocument

    Dim pt As Part
    Set pt = pDoc.Part
    
    Dim bdy As Body
    Set bdy = pt.Bodies.Item(1)
    
    solid_to_surface bdy

    MsgBox "Done"

End Sub


Private Function solid_to_surface( _
    ByVal bdy As Body)

    Dim pt As Part
    Set pt = bdy.parent.parent

    Dim shapes As shapes
    Set shapes = bdy.shapes
    
    Dim ref As Reference
    Set ref = pt.CreateReferenceFromObject( _
        shapes.Item(shapes.count) _
    )
    
    Dim hsFact As HybridShapeFactory
    Set hsFact = pt.HybridShapeFactory

    Dim direct As HybridShapeDirection
    Set direct = hsFact.AddNewDirectionByCoord(1#, 0#, 0#)

    Dim trans As HybridShapeTranslate
    Set trans = hsFact.AddNewEmptyTranslate()
    With trans
        .ElemToTranslate = ref
        .VectorType = 0
        .Direction = direct
        .DistanceValue = 0#
        .VolumeResult = False
    End With

    Dim hBody As HybridBody
    Set hBody = pt.HybridBodies.add()

    hBody.AppendHybridShape trans
    pt.UpdateObject trans

    Set ref = pt.CreateReferenceFromObject(trans)
    
    Dim surfExp As HybridShapeSurfaceExplicit
    Set surfExp = hsFact.AddNewSurfaceDatum(ref)
    
    hBody.AppendHybridShape surfExp
    pt.UpdateObject surfExp
    
    hsFact.DeleteObjectForDatum trans

End Function

Fusion360の場合は、サーフェスが閉じた状態になると勝手に
ソリッドになりますが、CATIAの場合は意図的にソリッド化する
必要がありますよね。

逆に言えば、意図的に閉じたサーフェスFusion360で作り出す事が
難しいです。

サーフェス化するには単純にGSDの機能を利用すれば良いだけ
なのですが、今回は移動量0の移動を行いました。
他の機能でも出来ますね。

但し、過去に抽出でやった時にデータの状態によっては意図しない
場合がありました。原因は分かっていますが、内緒です。
移動なら大丈夫でしょう。