こちらの続きです。
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メソッドを作成しました。
中身は "平行曲線を定義" コマンドを利用し、成功失敗でチェックしています。
(スイープ-基本サーフェスを使用 でも可能でしたが、こちらの方がコードが短かったです)