hdyk_yamada
カタマリの王様!?
オフライン
投稿: 500
NIGHTINGALE
|
|
体積の取得
« 投稿日: 2005/12/15 - 20:24:55 » |
|
お世話になります。
体積を取得し、プロパティに入れるプログラムを考えています。 前回 Descriptionに入れ方を教わったので今度は、Volumeを 作成して体積を入れようと思います。 Volumeの作成方法を入れ方は、わかったのですが、体積の取得 方法がわかりません。どなたか教えてください。 体積の単位は、cm3です。また、ボディが2個ある場合 合計で出るようにしたいのです。 よろしくお願いいたします。
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:体積の取得
« 返信 #1 投稿日: 2005/12/16 - 13:47:25 » |
|
hdyk_yamadaさんこんにちわ。
マクロと関係ないし、内容はずしてるか、ご存知かもしれませんが、ご参考まで。 プロパティの「ユーザ定義」タブにある、「値へリンク」を使えば、部品ファイルの体積をプロパティとして扱えます。 (もしくはプロパティに"SW-Volume@ほにゃほにゃにゃ.SLDPRT"と記載)
cm^3の単位にはならないようです。 また、2つのソリッドが重なっているときには、重なった部分はべつべつの体積として扱われます。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:体積の取得
« 返信 #2 投稿日: 2005/12/16 - 14:13:01 » |
|
こんにちは
体積の取得の方法としては、以下の方法が考えられます。
(1)ユーザー定義プロパティに値のリンクとして『体積』を指定。 (y-nakatsukaさんが仰っている方法です) (2)ModelDoc2もしくはBodyよりGetMasspropathiesで質量特性を取得。 (配列として重心や質量も取得することとなります) (3)SldWorks.GetMassProperties2で質量特性を取得。 (4)MassPropatyオブジェクトを作成し、Bodyを渡して体積(Volume)を取得。
上記は、手間がかからない順となってます。 しかし、y-nakatsukaさんが仰る通り(1)では単位がg/cm^3ではありません。 (2)は比較的簡単ですが、表示・非表示に関わらず全てのボディが対象となります。 (3)は(2)と同じような効果ですが、ファイルパス・コンフィギュレーションの指定が必要です。 (4)は、予め渡すボディだけ抽出して渡すことが出来る分柔軟性に富んでいます。
(4)に関しては、簡単なサンプルを作成したので添付します (結果はDebug.Printで表示されています)
追記:いづれの方法もボディの重なりは判断しません。 サンプルの変数がswBodysと変な単語になってるのは見逃して下さい…
|
|
|
|
hdyk_yamada
カタマリの王様!?
オフライン
投稿: 500
NIGHTINGALE
|
|
Re:体積の取得
« 返信 #3 投稿日: 2005/12/16 - 15:41:48 » |
|
y-nakatsukaさんhisaさんありがとうございます。
(1)の方法は、思いついたのですが、 ファイルごとにcm3を設定しないと出ません。 ただ、普段使用するときはmmが基本なのでこの方法は取れませんでした。
(2)〜(4)は、試してみます。 (4)が良さそうなので、(4)で試します。
' 引用元: hisa 投稿日 '.timeformat('1134709981').' ' こんにちは
体積の取得の方法としては、以下の方法が考えられます。
(1)ユーザー定義プロパティに値のリンクとして『体積』を指定。 (y-nakatsukaさんが仰っている方法です) (2)ModelDoc2もしくはBodyよりGetMasspropathiesで質量特性を取得。 (配列として重心や質量も取得することとなります) (3)SldWorks.GetMassProperties2で質量特性を取得。 (4)MassPropatyオブジェクトを作成し、Bodyを渡して体積(Volume)を取得。
上記は、手間がかからない順となってます。 しかし、y-nakatsukaさんが仰る通り(1)では単位がg/cm^3ではありません。 (2)は比較的簡単ですが、表示・非表示に関わらず全てのボディが対象となります。 (3)は(2)と同じような効果ですが、ファイルパス・コンフィギュレーションの指定が必要です。 (4)は、予め渡すボディだけ抽出して渡すことが出来る分柔軟性に富んでいます。
(4)に関しては、簡単なサンプルを作成したので添付します (結果はDebug.Printで表示されています)
追記:いづれの方法もボディの重なりは判断しません。 サンプルの変数がswBodysと変な単語になってるのは見逃して下さい…
|
|
|
|
|
hdyk_yamada
カタマリの王様!?
オフライン
投稿: 500
NIGHTINGALE
|
|
Re:体積の取得
« 返信 #4 投稿日: 2005/12/16 - 15:55:33 » |
|
お世話になります。 (4)は試しました。 ファイルの質量特性の単位がcmになっている時はcm3になりますが、 mmになっている時は、mm3になりますね。 質量特性の単位の判断は出来ないものでしょうか?
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:体積の取得
« 返信 #5 投稿日: 2005/12/16 - 16:55:53 » |
|
引用:
実はドキュメントプロパティの単位取得・設定は、長さと角度しかAPIで 対応していないっぽいのです…
ですので、以下のように変更すれば対応出来ると思います。
'質量特性の単位をシステム設定(True)にするかドキュメント設定(False)とするか swMass.UseSystemUnits = True
'ボディの配列をポインタで渡す swMass.AddBodies (swBodys)
'質量特性のオプション設定をシステム設定とし単位換算 Debug.Print "Volume = " & swMass.Volume * 1000000 & " cm^3" Debug.Print "Density = " & swMass.Density / 1000 & " g/cm^3" Debug.Print "Mass = " & swMass.Mass * 1000 & " g"
swMass.UseSystemUnitsをTrueにすることでシステムの設定(m,rad,kg)を 常に使用します。(ヘルプにはgとありましたがどうやらkgっぽいです) ちなみに、デフォルト値はTrueなのでこの行は省いても構いません。 サンプルとして載せてみましたが余計でしたね
あとは、結果から希望の単位にするように手を加えればいけると思います
|
|
|
|
hdyk_yamada
カタマリの王様!?
オフライン
投稿: 500
NIGHTINGALE
|
|
Re:体積の取得
« 返信 #6 投稿日: 2005/12/20 - 13:39:19 » |
|
ありがとうございました。 よく見ればわかりましたね。済みませんでした。
|
|
|
|