Random Thoughts |
Relax and Enjoy Your Shoes!
|
言語 |
|
|
|
フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27) |
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 08:06:07 |
|
|
|
著者
|
トピック: 法線の距離・・・ (閲覧数 3995 回) |
|
psychic
Sr. メンバー
オフライン
投稿: 59
I'm a llama!
|
|
法線の距離・・・
« 投稿日: 2011/09/25 - 18:33:29 » |
|
こんにちは いつもお世話になっております ちょっとアドバイスいただきたいのですが、 アセンブリで二つのパーツの平行な面を二つ選択したとして 右下に法線の距離が平行なときは出ますよね この数字って取得できないでしょうか? ご存知の方見えましたらご教授ください ちなみに2007です よろしくお願いします
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:法線の距離・・・
« 返信 #1 投稿日: 2011/09/27 - 09:12:11 » |
|
SolidWorks2008のAPIからMeasureというオブジェクトが追加されています。 このオブジェクトを利用すると測定と同じような処理が行えるようです。
2007ではわかりません・・・。
|
|
|
|
psychic
Sr. メンバー
オフライン
投稿: 59
I'm a llama!
|
|
Re:法線の距離・・・
« 返信 #2 投稿日: 2011/10/01 - 23:09:23 » |
|
お返事ありがとうございます 2008からですか・・いよいよUPの時かなw 測定して測定値をコピーして、たらずまいをフィーチャで伸ばすだけの話ですが それすらスピードアップしたいくらい忙しいとき・・ ありますよねw
ども ありがとうございました^^
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:法線の距離・・・
« 返信 #3 投稿日: 2011/10/06 - 17:50:13 » |
|
Measureを使わないで法線の距離を導く方法を考えてみました
API HELPにあったGet Angle of Hole Not Normal to a Face Example (VB)を参考に、以下の様になりました。
Code:Option Explicit
Const PI As Double = 3.14159265358979
Function Arccos(X As Double) As Double
If Abs(1# - X) < 0.00000001 Then Arccos = PI / 2#: Exit Function Arccos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End Function
Sub main()
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSelMgr As SldWorks.SelectionMgr Dim swMathUtil As SldWorks.MathUtility Dim swNormalVector As SldWorks.MathVector Dim swDistVector As SldWorks.MathVector Dim swFace1 As SldWorks.Face2 Dim swFace2 As SldWorks.Face2 Dim swSurf1 As SldWorks.Surface Dim swSurf2 As SldWorks.Surface Dim swComp As SldWorks.Component2 Dim vPoint1 As Variant Dim vPoint2 As Variant Dim vNormalPt1 As Variant Dim vNormalPt2 As Variant Dim nDist As Double Dim DistPt(2) As Double Dim vVector As Variant Dim Angle As Double Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swSelMgr = swModel.SelectionManager Set swMathUtil = swApp.GetMathUtility Set swFace1 = swSelMgr.GetSelectedObject5(1) Set swFace2 = swSelMgr.GetSelectedObject5(2) Set swSurf1 = swFace1.GetSurface Set swSurf2 = swFace2.GetSurface ' 2つの面の最短距離を取得 nDist = swModel.ClosestDistance(swFace1, swFace2, vPoint1, vPoint2) ' 最短距離を示すそれぞれの点を結ぶ単位長ベクトルを生成 DistPt(0) = vPoint1(0) - vPoint2(0) DistPt(1) = vPoint1(1) - vPoint2(1) DistPt(2) = vPoint1(2) - vPoint2(2) vVector = DistPt Set swDistVector = swMathUtil.CreateVector(vVector) Set swDistVector = swDistVector.Normalise ' 1つ目の面の法線方向を取得 If swSurf1.IsPlane Then vNormalPt1 = swFace1.Normal ' 選択面が構成部品の面であれば、アセンブリ座標のベクトルに変換 Set swComp = swSelMgr.GetSelectedObjectsComponent2(1) If Not (swComp Is Nothing) Then Set swNormalVector = swMathUtil.CreateVector(vNormalPt1) Set swNormalVector = swNormalVector.MultiplyTransform(swComp.Transform2) vNormalPt1 = swNormalVector.ArrayData End If End If ' 2つ目の面の法線方向を取得 If swSurf2.IsPlane Then vNormalPt2 = swFace2.Normal ' 選択面が構成部品の面であれば、アセンブリ座標のベクトルに変換 Set swComp = swSelMgr.GetSelectedObjectsComponent2(2) If Not (swComp Is Nothing) Then Set swNormalVector = swMathUtil.CreateVector(vNormalPt2) Set swNormalVector = swNormalVector.MultiplyTransform(swComp.Transform2) vNormalPt2 = swNormalVector.ArrayData End If End If ' 2つの面が平行か判断(微妙な誤差で平行にならない場合があったので数値を丸める) If Round(Abs(vNormalPt1(0)), 8) = Round(Abs(vNormalPt2(0)), 8) And Round(Abs(vNormalPt1(1)), 8) = Round(Abs(vNormalPt2(1)), 8) And Round(Abs(vNormalPt1(2)), 8) = Round(Abs(vNormalPt2(2)), 8) Then ' 1つ目の面の法線方向から単位長ベクトル生成 Set swNormalVector = swMathUtil.CreateVector(vNormalPt1) ' 最短距離を示すベクトルと1つ目の面の法線ベクトルとで角度を計算 Angle = Arccos(Abs(swDistVector.Dot(swNormalVector))) ' 最短距離と法線のベクトルが一致しない場合は、角度から法線方向の距離を算出(一致する場合は、ClosestDistanceの結果が法線の距離) If Angle <> PI / 2 Then nDist = nDist * Cos(Angle) End If ' 結果出力 Debug.Print "法線の距離 : " & nDist * 1000 End If End Sub |
ご参考まで
<追記> 構成部品の面を選択というケースを考慮しておらず、アセンブリの場合に正しく動作していませんでした 上記コードは修正済みのもので、面(Face2)の法線ベクトルを構成部品のトランスフォームで乗じて、アセンブリ座標のベクトルに直しています
|
|
|
|
psychic
Sr. メンバー
オフライン
投稿: 59
I'm a llama!
|
|
Re:法線の距離・・・
« 返信 #4 投稿日: 2011/10/13 - 23:32:18 » |
|
こんばんは 返事遅くなりました
hisa様
まさにこれです! 動作確認いたしました ASSY上でしっかり取得できました ありがとうございました^^
|
|
|
|
|
|
|
|