y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
SDM1.0ライブラリ
« 投稿日: 2004/07/13 - 09:27:51 » |
|
こんにちわ。 「使用先の検索」トピックで、makoronさんとtamaさんにsdm1.0ライブラリの存在を教えてもらいました。 このライブラリを使うと、SolidWorksを起動せずに、あれこれでき、動きが速いようなので、少し勉強してみようと思います とりあえず、昨日makoronさんの作られたマクロから、みようみまねで、部品表の機能を作ってみました。 ダウンロードエリアのエクセルVBAプログラムのところにアップして頂きましたので、よかったら試してみてください。内容は5行程度です sdmHederWalk.getReferenceNameでは、部品の抑制状態が見分けられないみたいなので、このままではアセンブリにどんな部品が入っているのか、アセンブリを開くより速くわかるくらいしか用途がないですが、できればもうちょっとがんばって機能を追加していこうと思います。
|
|
|
|
hiropon
Sr. メンバー
オフライン
投稿: 84
I'm a llama!
|
|
Re:SDM1.0ライブラリ
« 返信 #1 投稿日: 2004/07/13 - 15:24:06 » |
|
y-nakatsukaさん みなさん こんにちはhiroponです 早速ダウンロードさせて頂きました ありがとうございました。 SolidWorksを起動させずにこんなことができるなんて すごいですね SDMLibってーー 。 他にもいろいろ クラスやメンバ関数があるみたいですね。 以前、Makoronさんに教えてもらったんですが、 なにせHelp(Reference)がないので・・・・ 私も時間をみつけてSDMLib解析していこうと思います。。。
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #2 投稿日: 2004/07/14 - 13:40:15 » |
|
hiroponさんこんにちわ。 ちゃんと動きました??んですね。 他の環境でまったく何も試していないもので。申し訳ございません
以前にもsdmlibの話題は出ていたのですね。 全くついていけていませんでした
ところで、今回sdm関係で分かったことを、自分のメモがてらこのトピックに追記していこうと思います。 将来的に、reference的なものになっていけばなあ、と思います。(挫折可能性大) 無論、referenceが発行されれば一番よいのですが。
私はあまりプログラムのことはよくわかってなく、間違ってることを多々記入してしまうと思うので、もしよろしければバシバシ訂正していただければ幸いです。
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #3 投稿日: 2004/07/14 - 13:53:29 » |
|
SDMLib = sdm 1.0 Type Library
ソリッドワークスを起動せずに、ソリッドワークス関連のファイルの内部の情報を利用することができる一連の命令の集まり。
SDMLibは、ソリッドワークスをインストールするのと同時にPCにインストールされる。 (インストールフォルダ内の「sdm.dll」) よって、ソリッドワークスがインストールされていない(sdm.dllがない)PCでは、SDM関係の命令が入ったプログラムは使えない??
VB6.0(私の環境)で使用するには、 (1)VBの「ツール」→「参照設定」から「sdm 1.0 Type Library」にチェックを入れる。 (2)その後は「F2」ボタンを押せば、命令の一覧表が見れる。(正確には「クラス」とか「メンバ」) (3)あとはプログラムの中で使っていく。
ただし、Helpが無いため、F2ボタンを押した時の命令の一覧表から機能を類推していく必要がある。
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #4 投稿日: 2004/07/14 - 14:03:30 » |
|
「sdmHeaderWalk.loadHeader」
Sub loadHeader(fileName As String)
fileName As Stringの部分にファイルのフルパスを入れると、そのファイルのヘッダー部分が、sdmHeaderWalkのオブジェクトに取り込まれる。 以後、そのファイルに対して、getReferenceNameやReferenceCountが使えるようになる。
sdmHeaderとsdmHeaderWalkの違いは現状よくわかりません
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:SDM1.0ライブラリ
« 返信 #5 投稿日: 2004/07/14 - 17:59:19 » |
|
sdmHeaderとsdmHeaderWalkの違いについて (y-nakatsukaさんと同じで、今わかっている範囲ですけど...。)
sdmHeaderオブジェクトのgetReferenceNameは、「そのファイルに直接構成されているファイルのみが取得できます。」
対して、sdmHeaderWalkのオブジェクトのgetReferenceNameは、「そのファイルに使用されている全てのファイルが取得できます。」 (ゴメンなさい、言葉で説明するのが難しい )
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #6 投稿日: 2004/07/14 - 18:07:37 » |
|
makoronさんお返事ありがとうございます!
あるアセンブリファイルに対し、実行した場合、
・sdmHeaderwalkだと「サブアセンブリの中身」まで取得できる ・sdmHeaderだと、アセンブリの直下のファイルまで
という解釈で大体あってますか?
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:SDM1.0ライブラリ
« 返信 #7 投稿日: 2004/07/14 - 18:19:51 » |
|
' 引用元: y-nakatsuka 投稿日 '.timeformat('1089796057').' 'makoronさんお返事ありがとうございます!
あるアセンブリファイルに対し、実行した場合、
・sdmHeaderwalkだと「サブアセンブリの中身」まで取得できる ・sdmHeaderだと、アセンブリの直下のファイルまで
という解釈で大体あってますか? |
そういうことです! (断言しちゃって良いのかわかりませんが...) 私が確認できていることとしては、この解釈です。
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #8 投稿日: 2004/07/14 - 18:28:32 » |
|
納得!
すごくすっきりしました。 ということは部品表を作成するには「sdmHeaderWalk」であっていたわけですね。 ありがとうございます!
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:SDM1.0ライブラリ
« 返信 #9 投稿日: 2004/07/14 - 18:50:24 » |
|
sdmHeaderwalkやsdmHeaderで疑問があります。 (試していないだけだけど )
抑制や非表示、コンフィグなどの状態で、どの様な参照を返してくるのか?
私の想像では、アセンブリに使用されていれば、抑制などは関係なしに、全て参照としていると思っているのですが、どなたか詳細を確認してみた人はいますでしょうか?
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #10 投稿日: 2004/07/14 - 19:15:37 » |
|
sdmHeaderWalkの場合、getReferenceNameでも、ReferenceCountでも普通・抑制・非表示の違いは関係ないみたいです。
getReferenceNameで取得できる部品の「個数」で、3つ同じ部品があったとき、1こが抑制、1こが非表示、1こが普通、でも3つと出てきます。
ReferenceCountのほうも、全部抑制している部品もカウントに入れてきます。
sdmで、抑制状態を確認する方法がまだわかってないので、部品表として使う際にいまいちだなーと思っているところです
コンフィギュレーション関係のことでsdmHeaderを使うとtamaさんがおっしゃっていたので、sdmHeaderのほうでいろいろできるのかもしれませんね。
|
|
|
|
tkinu
Sr. メンバー
オフライン
投稿: 141
|
|
Re:SDM1.0ライブラリ
« 返信 #11 投稿日: 2004/07/14 - 19:53:04 » |
|
y-nakatsukaさん、Makoronさん こんにちわ。
私が使ってみた限りでは、 sdmHeaderにgetConfigNameとかgetConfigPropertyとかありますが、 これはsdmHeaderのオブジェクトに設定した、アセンブリのコンフィギュレーションの 情報を取得する為のもののようです。
使い方間違っているかもしれませんが・・・。
Makoronさんが言うように、アセンブリの構成部品が取得できたなら、その表示 状態やコンフィギュレーションの状態を取得できるものがあってもいいような・・・。 何かあるのかな?
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #12 投稿日: 2004/07/15 - 18:20:07 » |
|
tkinuさんこんにちわ。 情報ありがとうございます
sdmHeader関連では、今のところ
「incontextref」
がついた命令は、どうも「アセンブリ前後関係(更新フォルダ)」のカウントをするもののようで、弊社ではあまり使わなさそう。
ということが何とかわかりました
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #13 投稿日: 2004/07/15 - 18:31:24 » |
|
「sdmHeaderWalk.ReferenceCount」
sdmHeaderWalkオブジェクト内にloadHeaderによって取り込まれたファイルが持つ、「参照先」の個数を返します。
sdmHeaderWalkのReferenceCountは、sdmHeaderの場合と違い、取り込まれたファイルが「アセンブリファイル」であった場合、サブアセンブリの中身も「参照先」としてカウントされます。
ちなみに、別々のサブアセンブリに同じ部品ファイルが入っていた場合、同じ部品ファイルでも「別々に」カウントされます。よって、アセンブリファイルを開いて、「参照先検索」した場合と、個数がことなる場合があります。
参照先が「部品」であろうと「アセンブリ」であろうと、同様に1コとしてカウントされます。 カウントされる際、抑制、非表示、コンフィギュレーションの区別はされません。
|
|
|
|
Tama
Jr. メンバー
オフライン
投稿: 12
I'm a llama!
|
|
Re:SDM1.0ライブラリ
« 返信 #14 投稿日: 2004/07/15 - 21:12:29 » |
|
こんにちは〜。Tamaです。 面白そうなので、y-nakatsukaさんのReference作りに勝手にお手伝いしますね。
「smBitMap.extractBitMap2File」
Function extractBitMap2File(partFileName As String, fileName As String) As Long
サムネイル画像をファイルに保存します。 partFileName ... SolidWorksのファイル名 fileName ... BMPのファイル名 メソッドの実行が成功すると0、失敗すると-1を返します。
使い方 Code: Dim objSmBitMap As SDMLib.smBitMap Set objSmBitMap = New SDMLib.smBitMap Dim lngResult As Long lngResult = objSmBitMap.extractBitMap2File( _ "C:MyPartsPart1.sldprt", _ "C:MyPartsPart1.bmp") Set objSmBitMap = Nothing
|
|
|
|
|
hiropon
Sr. メンバー
オフライン
投稿: 84
I'm a llama!
|
|
Re:SDM1.0ライブラリ
« 返信 #15 投稿日: 2004/07/16 - 13:08:00 » |
|
みなさん こんにちは hiroponです
y-nakatsukaさん遅ればせながら動作しましたよーー でも、やはりネックになっているのはConfiglationですねー。 tkinuさんも書かれていますが、
sdmHeaderにgetConfigNameとかgetConfigPropertyが あるので私の予想ですが、
sdmHeader.loadheader(目的ファイルパス) で sdmHeaderに目的ファイルパスを設定してその後
sdmHeader.getConfigNameやsdmHeader.getConfigProperty
とやって、返り値でコンフィグレーション名をGetするのではないでしょうか? ということは
Call sdmHeaderWalkObj.getReferenceName(i, pReferenceName, pRefExtension, pRefPath, pUserCount) '参照先の名称と個数入手
で GetしたpRefPathを用いてsdmHeader.loadheader(pRefPath) とすることでできる(コンフィグレーションGetできる)んじゃないでしょうか?
時間がないんで試してはいませんし、話題についていけてないので 論点がずれたことをいっているかもしれませんが どうでしょう
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #16 投稿日: 2004/07/16 - 18:42:37 » |
|
Tamaさんお返事ありがとうございます! お手伝いしていただけるなんて、感激です
SOLIDWORKSを使わずにプレビューをファイルとして保存できるとは、かなり有用そうですね。 コードまで付けていただいているので、さっそく試してみます
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #17 投稿日: 2004/07/16 - 19:20:27 » |
|
hiroponさんお返事ありがとうございます
動作したとのことでよかったです。sdmlibの参照先が、c/program..../solidworks2004/sdm.dllとなっているので、solidworks2003だと動かないかなーとか思ってますが、詳細はわかりません。
sdmHeaderWalkで参照先のファイルパスが取得できるので、確かにsdmHeaderでそれぞれの部品のコンフィギュレーションに何があるのかを確認することができますね
ただ、sdmHeaderでは、tkinuさんがおっしゃるように、選択した部品の持つコンフィギュレーションを取得できるだけのようなので、上位のアセンブリ(walkのほうで見たもの)がどのコンフィギュレーションを参照しているかは、やっぱりわからないかなーと
|
|
|
|
y-nakatsuka
カタマリの王様!?
オフライン
投稿: 187
|
|
Re:SDM1.0ライブラリ
« 返信 #18 投稿日: 2004/07/16 - 19:45:57 » |
|
「sdmHeaderWalk.getReferenceName」
Sub getReferenceName(index As Long,pReferenceName,pRefExtension,pRefPath,pUserCount)
sdmHeaderWalkオブジェクト内にloadHeaderによって取り込まれたファイルが持つ、「参照先」のそれぞれ (1)ファイル名 (2)拡張子名 (3)フルパス (4)個数 を取得することができます。
indexは、各参照先の通し番号です(0からReferenceCount - 1 まであります)。
「pRefなんちゃら」のpは不勉強でよく意味がわかりません(ポインタのp?)が、とにかくここにvariant型の変数名を書いておけば、その中にindexに対応する参照先の情報が取得されます。
抑制、非表示、サブアセンブリ内の同一部品の扱いについては、ReferenceCountの項目で書いた通りです。
for文でReferenceCountの個数分、処理を繰り返すことで、全ての参照先の(1)~(4)について、情報を得ることができます。 部品表作成の仕組みはそれだけです。
これでsdmHeaderWalkとsmBitMapコンプリート!
|
|
|
|
webmaster 管理人
議長 カタマリの王様!?
オフライン
投稿: 649
|
|
Re:SDM1.0ライブラリ
« 返信 #19 投稿日: 2004/07/16 - 19:47:11 » |
|
y-nakatsukaさんおめでとう! ついに王様ですね
昔、SolidWorks Explorerがうまく起動できないトラブルがあって、色々試している中でsdm.dll をコピーしなおすと直ったことがありました。その時にsdm.dllはSW Explorer用のdllなんだなと理解したんですが、このスレッドを見てると結局sdm.dllでは基本的にはSW Explorerの機能だけしか使えないかなという感じがします。実際はどうなんでしょう
|
webmaster (仕事のカタマリ管理人)
|
|
|