こちらでコメント頂いたのですが、時間がナカナカ確保できずに
サンプルを作れませんでした。
正直な所、完成した状態がイメージし切れていないため、クリックした
面のクリックした位置に法線を作成するマクロを作成してみました。
'vba sample_CreateLineNormal_ver0.01 using-'ver0.0.10' 'クリックした面に法線を作成 Option Explicit Sub CATMain() 'ドキュメントのチェック If Not CanExecute(Array("PartDocument", "ProductDocument")) Then Exit Sub 'ユーザー選択 Dim Elm As Variant 'SelectedElement Set Elm = KCL.SelectElement("面を選択", "Face") If KCL.IsNothing(Elm) Then Exit Sub 'クリック座標取得 Dim Pos(2) As Variant 'Double Call Elm.GetCoordinates(Pos) '各必要なもの取得 Dim Pt As Part Set Pt = Elm.Document.Part Dim Fact As HybridShapeFactory Set Fact = Pt.HybridShapeFactory Dim DelList As Collection Set DelList = New Collection '選択面Ref Dim SurfRef As Reference Set SurfRef = Elm.Reference 'クリック位置の点 Dim PntRef As Reference Set PntRef = CreatePntRef(Pt, Fact, Pos) Call DelList.Add(PntRef) '法線 Dim LinRef As Reference Set LinRef = CreateNormalRef(Pt, Fact, SurfRef, PntRef, 10#) Call DelList.Add(LinRef) 'データム化 Dim Dtm As HybridShapeLineExplicit Set Dtm = ToDatum(Pt, Fact, LinRef) '形状セット作成 Dim HBdy As HybridBody Set HBdy = Pt.HybridBodies.Add() Call HBdy.AppendHybridShape(Dtm) 'お掃除 Dim Ref As Reference For Each Ref In DelList Call Fact.DeleteObjectForDatum(Ref) Next MsgBox "Done" End Sub 'データム化 Private Function ToDatum( _ ByVal Pt As Part, _ ByVal Fact As HybridShapeFactory, _ ByVal Ref As Reference) As HybridShapeLineExplicit Dim Dtm As HybridShapeLineExplicit Set Dtm = Fact.AddNewLineDatum(Ref) Call Pt.UpdateObject(Dtm) Set ToDatum = Dtm End Function '点 Private Function CreatePntRef( _ ByVal Pt As Part, _ ByVal Fact As HybridShapeFactory, _ ByVal Ary As Variant) As Reference Dim Pnt As HybridShapePointCoord Set Pnt = Fact.AddNewPointCoord(Ary(0), Ary(1), Ary(2)) Call Pt.UpdateObject(Pnt) Dim Ref As Reference Set Ref = Pt.CreateReferenceFromObject(Pnt) Set CreatePntRef = Ref End Function '法線 Private Function CreateNormalRef( _ ByVal Pt As Part, _ ByVal Fact As HybridShapeFactory, _ ByVal SurfRef As Reference, _ ByVal PntRef As Reference, _ ByVal Lng As Double) As Reference Dim Lin As HybridShapeLineNormal Set Lin = Fact.AddNewLineNormal(SurfRef, PntRef, 0#, Lng, False) Call Pt.UpdateObject(Lin) Dim Ref As Reference Set Ref = Pt.CreateReferenceFromObject(Lin) Set CreateNormalRef = Ref End Function
ProductとPartで動くようにしたつもりですが、Productは未テストです。
念の為、法線は面の表方向に作成されます。
もし意図していない方向に作成される場合は、面の向き自体が逆になっている
はずです。
Fusion360やSpace-e等、比較的3DCADでは面の表裏を色を変えて表示したり
することで、視覚的にわかるようになっているものなのですが、CATIA V5は
ダメなんですよね・・・ 視覚的にわからないです。
(OpenGLは表裏で2回描写するのだから、それ程難しくないと思うのですが)
接合等、複数の面をオフセットする際の "正" の方向は、接合された面の最初の
面の向きに依存しているように感じます。