zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
点群の座標データのエクセルへの読み込み
« 投稿日: 2010/06/28 - 12:55:33 » |
|
複数の点群データ(3Dスケッチ)の座標データをエクセルに読み込みたいのですが。
ちなみに、この点群は、平面上にある既知の点群に対してY方向の拘束をつけてもので、さらに、3D曲面上に対しても拘束がつけられており、座標値が分かりません。
できればサンプルプログラムで示して頂ければありがたいのですが。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #1 投稿日: 2010/06/28 - 17:09:59 » |
|
SolidWorks API Helpの目次から、 [Example and Projects]→[Visual Basic (VB) Examples]→[R - T]→ [Sketch Points]→[Get Sketch Points] にスケッチ点座標取得のサンプルがありますよ
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #2 投稿日: 2010/06/28 - 17:57:53 » |
|
ありがとうございました。
ただ、まだ、APIがしっかり分かっていないので、実際にコピーペーストで使ってみて上手くいきませんでした。 しかし、これを手がかりにもう少し勉強してみます。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #3 投稿日: 2010/06/28 - 18:19:57 » |
|
サンプルを確認したところ、編集中のスケッチ内にある点を取得しているみたいでした。
選択中のスケッチや特定の名前のスケッチなど、状況によって取得の方法が異なってきます 例えば、選択中のスケッチはModelDoc2::SelectionManagerから、 特定の名前のスケッチはPartDoc::FeatureByNameなどです。
それぞれに色々なサンプルはありますが、最初のうちは噛み砕くのに時間が掛かると思います・・・ 頑張って下さい
壁にぶち当たったら自分の分かる範囲でお答えしますよ。
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #4 投稿日: 2010/06/29 - 20:10:02 » |
|
hisaさん ありがとうございます。
最初にいただいた参照する場所ですが、連絡頂いて手順では探すことができませんでした。 SolidWorks API Helpの目次から、 [Example and Projects]→[Visual Basic (VB) Examples]→[R - T]→ [Sketch Points]→[Get Sketch Points]
そこで、GetSketchPointsを打ち込んで探したのですが、ひょっとして、違った例題を参照したのかも知れませんね。
ちなみにSWのバージョンは、2009なんですが。
この事例を、ペーストで読み込んで、mainを実行すると、
swFeatData.Standard=2 のラインで、.Standardがハイライトされ、コンパイルエラーが出ました。 「値の取得のみ可能なプロパティに値を設定することはできません。」
もしお気づきの問題点などがあれば、よろしくお願いいたします。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #5 投稿日: 2010/06/30 - 10:18:59 » |
|
そのサンプルは、Get Hole Series Information Exampleですね。 穴シリーズ情報取得のサンプルみたいです。
自分が参照していたのは、Get Sketch Points Exampleです。
SolidWorksの[ヘルプ]メニューから参照できるAPIヘルプの場合は、 [SolidWorks API Help]→[Example and Projects]→[Visual Basic (VB) Examples]→ [R - T]→[Sketch Points]→[Get Sketch Points] と、辿れます。 (先の回答は、日本語版ヘルプの場合でした )
引用:そこで、GetSketchPointsを打ち込んで探したのですが、ひょっとして、違った例題を参照したのかも知れませんね。 |
惜しいです・・・ もうひとつしたのGetSketchPoints2が、スケッチからスケッチ点を取得するメソッドです。
一応サンプルの説明を簡単にすると、GetActiveSketch2で現在編集中のスケッチを取得し、そこからGetSketchPoints2でスケッチ点の配列を取得してから各点のXYZ座標を取り出しています。
あとは、取り出したXYZ座標値をExcelに渡してあげればOKですね
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #6 投稿日: 2010/07/01 - 19:20:09 » |
|
hisa様 何度もコメント頂きありがとうございます。
バージョンが異なるのか、アドバイス頂いた手順ではたどれないのが現状です。
ちなみに、 私の環境では、API Help以下が次のような階層になっております。
SolidWorks API Help →?Welcome →□Getting Started →□SolidWorks APIs →□SolidWorks Enumerations
ご指摘のように、[SolidWorks API Help]→[Example and Projects] の段階で辿れなくなっております。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #7 投稿日: 2010/07/02 - 10:20:24 » |
|
確認したところ、SW2009からヘルプがガラリと変わってますね・・・
目次からサンプルを辿ることが出来ませんでした
キーワードからだと、[VBA examples]→[points]の先にありました。 それか、キーワードからGetSketchPoints2を探し、メソッドの詳細の中でExampleの項目にリンクがあります。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #8 投稿日: 2010/07/02 - 13:30:32 » |
|
横から失礼します。
少し興味がわいたのと、VSTAマクロを使ってみようと言うことで、サンプルマクロ作りにトライしてみました。
ところが、VSTAの使い勝手が良くない(英語・フォームの追加が出来なかった)事と、 SW2009からマニュアルやAPIも変わって勉強不足だった事がわかって、 VBAマクロにて作成する事になってしまいました・・・。
添付しておきますので、試してみてください。 (動作させるにはVB6.0SP6のランタイムを別途インストールする必要があると思います。)
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #9 投稿日: 2010/07/04 - 10:21:01 » |
|
hisaさん ありがとうございました。 「それか、キーワードからGetSketchPoints2を探し、メソッドの詳細の中でExampleの項目にリンクがあります。 」 から、それらしきサンプルがありました。 参考にさせて頂きます。
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #10 投稿日: 2010/07/04 - 10:26:16 » |
|
Makoronさん ありがとうございます。 すばらしいサンプルですね。 これを参考に、zariganiが最終的に必要とするものに仕上げねばなりませんが、 なかなかハードルが高そうです。
また、VSTAマクロなる言葉も初めて知りました。これからも勉強させていただきます。
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #11 投稿日: 2010/07/04 - 14:40:30 » |
|
Makoronさん ご紹介いただいたマクロをエクセルマクロに貼り付けました。 ポイントは、GetSketchPointDataのようですね。 SWに取り込んで、ITEMでの表示をやめて、単にDebug.Printで、GetSketchPointData単独で 利用してみました。結果はOKだったんで、エクセルに取り込み実行してみました。
しかしながら、Dim swModelDoc2 As SldWorks.ModelDoc2のラインで、 「ユーザー定義型は定義されておりません」のコンパイルエラーがでました。
参照設定をいろいろいじくってみましたが、解決できません。
なにかお気づきのことでもあればご教授願えればありがたいのですが。
よろしくお願いいたします。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #12 投稿日: 2010/07/05 - 10:27:52 » |
|
引用: しかしながら、Dim swModelDoc2 As SldWorks.ModelDoc2のラインで、 「ユーザー定義型は定義されておりません」のコンパイルエラーがでました。
参照設定をいろいろいじくってみましたが、解決できません。 |
参照設定の画面で SldWorks 2009 Type Library SolidWorks 2009 Constant type library にチェックは付いていますでしょうか? これら2個の参照設定が付いていれば、「SldWorks.ModelDoc2」は問題なく利用できると思います。
引用:また、VSTAマクロなる言葉も初めて知りました。これからも勉強させていただきます。 |
Excelのマクロは、VisualBasic6.0をベースにExcelを扱えるようにした、VisualBasic for Application (頭をとってVBA)というプログラム開発用ツールを使って作成できます。 なので、ExcelのマクロはVBAマクロになります。
一方SolidWorksのマクロはExcelと同じく、SolidWorks用のVBAツールががあり、これで作成したマクロがVBAマクロになります。 また、SolidWorks2009からは、Visual Studio 2005をベースにした、VisualStudio for Application (なぜかVSTA)というプログラム開発用ツールも使える様になりました、 このツールを使ったマクロがVSTAマクロになります。 (SolidWorksでマクロを記録した後に保存する際、種類のところで選べます。) 今のところは、どちらのツールでもSolidWorksのマクロを作成できますが、いずれはVSTAに替わっていくと思います。
※説明は、言葉足らずの部分や正確な表現ではない場合もありますので、「大体」と言った感じで読んでください。
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #13 投稿日: 2010/07/05 - 11:43:39 » |
|
Makoronさん 懇切丁寧なご説明ありがとうございます。
一番目のご説明ですが、早速確認してみました。
SWのマクロの中で、参照設定を見れば、確かに SldWorks 2009 Type Library SolidWorks 2009 Constant type library は選択されております。
しかしながら、エクセルのマクロで見ると、この二つのライブラリーが見あたりません。 その他にも、SWに存在するライブリーが、エクセルでは見あたらないものがあります。 こんなことはよくあることなのでしょうか。
現在やっている内容を今詳しくご説明しておきます。
エクセルマクロ使って必要な計算(主に三次元の座標計算)をし、これらのデータを元に、SWのAPIを使って自動モデリングするものです。(SWの板金機能では不可能な、造形的な板金加工の展開プログラムの自動生成とご理解いただければ分かりやすいかも知れません)
平面上にある既知の点群のY方向に三次元点群を確保しますが、これは、ロフトサーフェスに拘束されます。 このとき、これらの点群の座標値を再度エクセルに取り込もうとするものです。(X,Zは既知なので、Yデータだけよいのですが)
したがって、処理はすべてエクセルマクロで行われるものです。 通常のAPI操作は問題ないのですが、点群の座標取得で行き詰まっております。
点群の代わりに、直線を用いて、この直線の長さを取得する方法を使ってみましたが、180個のデータ処理に、 約1時間近くかかってしまい、実用レベルには至りません。 提供していただいたサンプルでは大変満足できる処理スピードであり、何とかエクセルデータに取り込んで、一気通貫で処理できることを期待しております。
少し説明が長くなりましたが、よろしくお願いいたします。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #14 投稿日: 2010/07/05 - 12:26:48 » |
|
zariganiさん、ひとつ試してみてほしい事があります。
エクセルのマクロエディタを起動して、参照設定のダイアログを表示して、 ダイアログの右側に表示されている「参照」というボタンを押して、直接ファイル指定を試して見てください。 以下の2つのファイルがSolidWorksインストールフォルダにあると思うので、 それらを選択すれば、参照設定の画面に追加されると思います。 (以下のパスは、SolidWorksデフォルトのパスで書いてあります。)
SldWorks 2009 Type Library C:\Program Files\SolidWorks\sldworks.tlb
SolidWorks 2009 Constant type library C:\Program Files\SolidWorks\swconst.tlb
また、この操作で、「ファイルが見つからない」「設定できない」などの問題があった場合は、 SolidWorksのインストールしなおしで改善するかもしれません。
ちなみに、私の環境ではエクセルのバージョンが2002なので、zariganiさんの環境によっては違った操作になるかもしれません。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #15 投稿日: 2010/07/05 - 19:14:13 » |
|
Makoronさんに触発され、VSTA(Visual Stadio Tools for Applicationみたいです)を試してみました
.NET環境は、C# + DirectXでお遊びプログラミングをしていたのでVB側でも何とかいけました。
フォームは、[Project]→[Windowsフォームの追加]で追加しますが、.NETの場合はフォームもクラスとして扱われるので Dim form As New Form1(swApp) という様な形でFormをMainメソッド内でインスタンス化する必要があります。
ちなみに、New Form1(swApp)としているのは、Form1のNewメソッド(いわゆるコンストラクタと言うやつ)にswAppを渡して フォームからSldWorksにアクセス出来るようにする為です。
VSTAはC#でもコーディング出来るので、なかなか使えそうですね
VBAと違って、ListViewなどのコントロールも普通に使えますし♪
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #16 投稿日: 2010/07/05 - 20:15:39 » |
|
hisaさん、こんにちは。
引用:VSTA(Visual Stadio Tools for Applicationみたいです) |
そっ、そうだったかも・・・
引用:フォームは、[Project]→[Windowsフォームの追加]で追加しますが、.NETの場合はフォームもクラスとして扱われるので Dim form As New Form1(swApp) という様な形でFormをMainメソッド内でインスタンス化する必要があります。
ちなみに、New Form1(swApp)としているのは、Form1のNewメソッド(いわゆるコンストラクタと言うやつ)にswAppを渡して フォームからSldWorksにアクセス出来るようにする為です。 |
なっ、なるほど・・・ hisaさん、さすがです でも、なぜだか判らないのですが、私の環境ではフォームの追加画面でテンプレートのボックス内が真っ白になっていて、追加ができなかった・・・ まあ、インストールや設定を繰り返していたり、VB2005Expressを入れてあったりと、かなり怪しい環境なので・・・
私もVisualStudio系の方が好きですね。
それにしても、hisaさんってすごい!
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #17 投稿日: 2010/07/06 - 07:41:12 » |
|
Makoronさん hisaさん
ありがとうございました。おかげさまで課題を解決することができまいた。 180個の点群データの読み込みが数秒に短縮でき、これで実用に耐えられます。
私事ですが、先月5日から入院中であり、退院は今月中頃過ぎになろうかと思います。退院できたら、Gコードプログラムが作成できるように仕上げて、実際の部品を製作するつもりです。いや、ちょっと元気が出てきたので、頑張って入院中に発展させていきたいと思います。
これまで、2時間以上かかっていた作業が大幅に短縮でき、また、専門家でなくても作業できることになります。
今回、藁をも掴む気持ちでこの掲示板に投稿させていただきました。 まだまだ未熟ですが、これからも老体にむち打って頑張ります。 いろいろ勉強させていただきました。そして、この掲示板の威力に感謝しております。 今後とも、よろしくお願い申し上げます。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #18 投稿日: 2010/07/07 - 11:58:14 » |
|
褒められたので、調子に乗ってC#でも作ってみました
CSV書き出し以外は、そのまま書き換えただけです
何かの参考になれば幸いです♪
zariganiさん、ご無理なさらないよう・・・
|
|
|
|
zarigani
Sr. メンバー
オフライン
投稿: 61
I'm a zarigani
|
|
Re:点群の座標データのエクセルへの読み込み
« 返信 #19 投稿日: 2010/07/07 - 21:16:51 » |
|
hisaさん
重ね重ねありがとうございます。
先月14日に手術をしました。10時間もかかりましたが、 ちょっと合併症的な症状はあるものの、その後回復傾向にあります。
すこし良くなれば、病院と言う所は退屈なものですね。 お陰様で、パソコン環境や、ネット環境は自宅や職場と遜色ないので、 仕事の延長的なことができます。それが精神的な安らぎにもなるので、 頑張っております。それこそ、仕事のカタマリ状態ですね。
hisaさんやMakoronさんのレスを拝見すると、まだまだ未熟さを感じずにはおられません。 これでもコンサルの端くれと自負していたのですが、やらねばならないことは際限がないですね。これからも生涯現役を目指して頑張ります。
これを機会によろしくお願いいたします。
|
|
|
|