Random Thoughts |
All true wisdom is found on T-shirts.
|
言語 |
|
|
|
フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27) |
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 07:39:40 |
|
|
|
著者
|
トピック: 「線」と「サーフェス」の重心の測定方法 (閲覧数 3314 回) |
|
xxyyzz99
新人さん
オフライン
投稿: 0
I'm a llama!
|
|
「線」と「サーフェス」の重心の測定方法
« 投稿日: 2012/07/13 - 08:33:42 » |
|
SolidWorksで「線」と「サーフェス」の重心の測定方法ってありますかね?
理論上は線や面にも重心はあるはずですが、線や面だけでは「質量特性」が使えません。 ソリッドボディなら「質量特性」で重心と慣性モーメントが測定できるのですが・・・。
何かそういうコマンドがあるのでしょうか。 「線」と「サーフェス」の測定方法がもしありましたら教えてください。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:「線」と「サーフェス」の重心の測定方法
« 返信 #1 投稿日: 2012/07/13 - 15:13:10 » |
|
標準でソリッド以外の重心を求める機能は無さそうですね…
ですが、APIを利用すれば出来そうです。 というか出来ました 新規マクロを作成して、下記コードを丸ごと貼り付けてください。
ある程度汎用性は持たせてありますが、複合カーブなど複数の要素からなるカーブには対応していません。 Code:Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSelMgr As SldWorks.SelectionMgr Dim swSelObj As Object Dim swBody As SldWorks.Body2 Dim swEdge As SldWorks.Edge Dim swSketchSeg As SldWorks.SketchSegment Dim swFace As SldWorks.Face2 Dim vMassProp As Variant Dim vVal As Variant Dim dX As Double Dim dY As Double Dim dZ As Double
Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swSelMgr = swModel.SelectionManager If swSelMgr.GetSelectedObjectCount2(-1) > 0 Then ' 一つ目の選択要素を取得 Set swSelObj = swSelMgr.GetSelectedObject6(1, -1) ' 選択要素の種類を判別し、ボディを取得 Select Case swSelMgr.GetSelectedObjectType3(1, -1) ' エッジを選択 Case swSelEDGES, swSelREFEDGES Set swEdge = swSelObj Set swBody = swEdge.CreateWireBody ' スケッチ要素を選択 Case swSelSKETCHSEGS, swSelEXTSKETCHSEGS Set swSketchSeg = swSelObj Set swBody = swSketchSeg.CreateWireBody ' 面を選択 Case swSelFACES Set swFace = swSelObj Set swBody = swFace.CreateSheetBody ' ボディを選択 Case swSelSOLIDBODIES, swSelSURFACEBODIES, swSelWIREBODIES Set swBody = swSelObj ' その他 Case Else Set swBody = Nothing End Select If Not (swBody Is Nothing) Then ' ボディからマスプロパティを取得(質量はドキュメントプロパティから取得) vMassProp = swBody.GetMassProperties(swModel.GetUserPreferenceDoubleValue(swMaterialPropertyDensity)) ' マスプロパティをすべてデバッグ出力 For Each vVal In vMassProp Debug.Print vVal Next dX = vMassProp(0) dY = vMassProp(1) dZ = vMassProp(2) swModel.ClearSelection2 True ' 重心座標に点を作成 ' スケッチ編集中だったら一旦スケッチ編集を終わる If Not (swModel.SketchManager.ActiveSketch Is Nothing) Then swModel.InsertSketch2 True End If swModel.Insert3DSketch2 False swModel.SketchManager.AddToDB = True swModel.SketchManager.CreatePoint dX, dY, dZ swModel.SketchManager.AddToDB = False swModel.Insert3DSketch2 True ' 重心をメッセージでお知らせ swApp.SendMsgToUser2 "重心 X : " & Round(dX * 1000, 8) & " mm" & vbNewLine & _ "重心 Y : " & Round(dY * 1000, 8) & " mm" & vbNewLine & _ "重心 Z : " & Round(dX * 1000, 8) & " mm" _ , 0, 0 End If End If Set swBody = Nothing Set swModel = Nothing Set swApp = Nothing End Sub |
|
|
|
|
xxyyzz99
新人さん
オフライン
投稿: 0
I'm a llama!
|
|
Re:「線」と「サーフェス」の重心の測定方法
« 返信 #2 投稿日: 2012/07/13 - 16:00:11 » |
|
・・・えっ!?
マクロまで作成してくれたんですか。ありがとうございます。 早速使ってみました。すごいです。満足です。
ただ一点。最後の
引用: ' 重心をメッセージでお知らせ swApp.SendMsgToUser2 "重心 X : " & Round(dX * 1000,8) & " mm" & vbNewLine & _ "重心 Y : " & Round(dY * 1000,8) & " mm" & vbNewLine & _ "重心 Z : " & Round(dX * 1000,8) & " mm" _ , 0, 0
|
のZ値がうまくいかないなあと思っていたら、 dX ⇒ dZ ですね。
でもすばらしいです。 本当にありがとうございます。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:「線」と「サーフェス」の重心の測定方法
« 返信 #3 投稿日: 2012/07/16 - 23:33:03 » |
|
引用:Z値がうまくいかないなあと思っていたら、 dX ⇒ dZ ですね。 |
なんと、お恥ずかしい… 理解して使って頂けたようで何よりです
|
|
|
|
|
|
|
|