こちらの続きです。
マウスカーソルの座標値を取得する3 - C#ATIA
3D空間でマウスの位置が取得できるようになったので、マウスの位置で
曲率と勾配角度を動的に取得したいです。そう、CATIAのオンザフライの機能を
実現したいと細々とやってます。
テストモデルはこのような感じで、勾配解析を行った状態です。
勾配角度はZ軸(青い線)方向とします。紫色は垂直面で、青緑?色が水平面です。
最小R(曲率の逆数)は無事に取得できているようなのですが、
勾配が上手く取得出来ていません。
app = adsk.core.Application.get() des = adsk.fusion.Design.cast(app.activeProduct) comp = des.rootComponent #pnt - サーフェス上の任意の点 #maxTangent - サーフェス上の任意の点の法線3Dベクトル axisZ = comp.zConstructionAxis.geometry tang = adsk.core.InfiniteLine3D.create(pnt, maxTangent) measMng = app.measureManager ang = measMng.measureAngle(axisZ, tang).value
比較的最近実装されたmeasureManagerオブジェクトを利用し、
2つの無限直線の角度を求めています。
結果はこちら
左が水平面で右が垂直面です。 両方90°です…。
R面を測定していても水平に近い部分で90°弱になり、
垂直に近い部分で0°強になる為、個人的な直感とは逆です。
又、アンダーカットとなる部分ではマイナスの値で返ってきて
欲しいのですが、全てプラスです。(atan関数なんだろうなぁ)
よく見たらVecter3Dオブジェクトに2つのベクトル間の角度を求める
メソッドがあった為、コードを修正。
・・・ vecZ = comp.zConstructionAxis.geometry.direction ang = vecZ.angleTo(maxTangent)
こちらの方が、はるかにコードが短かったです。
でも結果は同じです。
真面目に計算しなきゃなら無そうなので、悩み中です。