C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

3Dの文字モデリングマクロ5

こちらの続きです。
3Dの文字モデリングマクロ4 - C#ATIA

続いて文字が配置される際のガイドカーブやサポート面を保持する
Text3DGuideItemContainerクラスです。

'text3D VBA
'Text3DGuideItemContainer
Option Explicit

Private mGuideCurve As Text3DObjRefClass
Private mSupportFace As Text3DObjRefClass
Private mRev As Boolean
Private mLength As Double

'ガイドカーブ
Sub SetGuideCurve(CurveRef As Text3DObjRefClass)
    Set mGuideCurve = CurveRef
    mRev = False
    mLength = WorkDoc.SPAWorkbench.GetMeasurable(GuideCurve.SelRef).Length
End Sub

Property Get GuideCurve() As Text3DObjRefClass
    Set GuideCurve = mGuideCurve
End Property

Property Get Length() As Double
    Length = mLength
End Property

'サポート面
Sub SetSupportFace(SurfRef As Text3DObjRefClass)
    Set mSupportFace = SurfRef
End Sub

Property Get SupportFace() As Text3DObjRefClass
    Set SupportFace = mSupportFace
End Property

'スタート位置反転
Sub ReversePoint()
    mRev = IIf(mRev, False, True)
End Sub

Property Get IsReverse() As Boolean
    IsReverse = mRev
End Property

Public Function IsCurveOnFace() As Boolean
    On Error Resume Next
        WorkDoc.Part.Update
        Dim HSCurvePar As HybridShapeCurvePar
        Set HSCurvePar = WorkDoc.HSFac.AddNewCurvePar(GuideCurve.BrapRef, SupportFace.BrapRef, 0.1, False, False)
        Err.Number = 0
        Call WorkDoc.Part.UpdateObject(HSCurvePar)
        IsCurveOnFace = IIf(Err.Number = 0, True, False)
        '削除予約
        Call DeleteObj.Add(HSCurvePar)
        Err.Number = 0
    On Error GoTo 0
End Function

文字の配置のガイドとなるカーブは、必ずサポート面上である必要があるのですが、
オリジナルのコードではそのチェックがされていませんでした。
今回、サポート面上にガイドカーブがあるかどうかのチェックを行う為に
IsCurveOnFaceメソッドを作成しました。
中身は "平行曲線を定義" コマンドを利用し、成功失敗でチェックしています。
(スイープ-基本サーフェスを使用 でも可能でしたが、こちらの方がコードが短かったです)