仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 07:39:40
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorks全般 (議長: webmaster)  |  トピック: 「線」と「サーフェス」の重心の測定方法 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: 「線」と「サーフェス」の重心の測定方法  (閲覧数 3314 回)
xxyyzz99
新人さん
*

オフライン

投稿: 0



I'm a llama!

プロファイルを見る
「線」と「サーフェス」の重心の測定方法
« 投稿日: 2012/07/13 - 08:33:42 »
引用して返信

SolidWorksで「線」と「サーフェス」の重心の測定方法ってありますかね?

理論上は線や面にも重心はあるはずですが、線や面だけでは「質量特性」が使えません。
ソリッドボディなら「質量特性」で重心と慣性モーメントが測定できるのですが・・・。

何かそういうコマンドがあるのでしょうか。
「線」と「サーフェス」の測定方法がもしありましたら教えてください。
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
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!!

プロファイルを見る WWW
Re:「線」と「サーフェス」の重心の測定方法
« 返信 #3 投稿日: 2012/07/16 - 23:33:03 »
引用して返信


引用:
Z値がうまくいかないなあと思っていたら、
    dX ⇒ dZ
ですね。


なんと、お恥ずかしい…
理解して使って頂けたようで何よりです
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorks全般 (議長: webmaster)  |  トピック: 「線」と「サーフェス」の重心の測定方法 前のトピック 次のトピック
ジャンプします: