puh
新人さん
オフライン
投稿: 4
I'm a llama!
|
|
2階層より下層にあるフィーチャーのハイライト方法
« 投稿日: 2009/10/09 - 17:46:50 » |
|
いつもお世話になっております。 連投で申し訳ありませんが自力では分からなかったので質問させていただきます。
開発環境 Windows XP Professional Visual Studio 2008(VB) SolidWorks(R) Premium 2009 SP2.0
※ 以下の質問文において、[]で囲ったものは添付画像のフィーチャーを指しています。
[SubAssem]をアクティブなモデルドキュメントに設定した状態で、 [3dSketch]のフィーチャーを取得し、Feature.Select2メソッドで選択状態にすると図形がハイライトされます。
しかし、[MainAssem]をアクティブなモデルドキュメントに設定した状態で、 [3dSketch]のフィーチャーを取得し、Feature.Select2メソッドで選択状態にしても図形がハイライトされません。
[MainAssem]をアクティブなモデルドキュメントに設定した状態で[3dSketch]をハイライト状態にする方法はないのでしょうか?
解決方法が分かる方いらっしゃいましたら宜しくお願いします。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:2階層より下層にあるフィーチャーのハイライト方法
« 返信 #1 投稿日: 2009/10/13 - 10:13:40 » |
|
どの様な処理・手順で選択しているか分からないので何とも言えませんが、 Windows XP Pro+SolidWorks2008 SP5.0 のVBA(マクロ)では正しく ハイライトされました。 (SW2009環境はないので・・・)
開発環境によるバグの可能性もあるので、SPを変更してみるとかしてみては どうでしょうか
一応、SWのAPIヘルプにあった Traversing Assembly at Component and Feature Levels Example (VB) というサンプルに手を加えて、指定したフィーチャー名をアセンブリ全体から (構成部品含んで)選択するマクロコードを添付しておきます
※手を加えた部分には、注釈を入れています。
|
|
|
|
puh
新人さん
オフライン
投稿: 4
I'm a llama!
|
|
Re:2階層より下層にあるフィーチャーのハイライト方法
« 返信 #2 投稿日: 2009/10/13 - 16:40:19 » |
|
>hisaさん 御回答、ありがとうございました。 教えて下さった方法で解決しそうです。
当方の処理手順、説明不足で申し訳ありませんでした。 3Dスケッチの内部IDを取得しておき、その内部IDより3Dスケッチを取得し選択状態にしていました。 (画面を表示し、3Dスケッチの一覧を表示し、画面一覧上で選択された3Dスケッチをハイライトさせる処理)
内部IDを取得する際のModelDocExtension.GetPersistReference3と 内部IDからオブジェクトを取得する際のModelDocExtension.GetObjectByPersistReference3は ModelDocExtension直下のフィーチャーに対してのみ有効なのかもしれません。
2階層下のフィーチャーは内部ID取得は出来たのですが、内部IDからオブジェクトを取得する際に内部ID無効のエラーがでて取得できませんでした。 質問では「2階層より下層」と質問してしまいましたが「2階層以下層」の間違いでした。 失礼しました。
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:2階層より下層にあるフィーチャーのハイライト方法
« 返信 #3 投稿日: 2009/10/15 - 14:30:04 » |
|
PersistReferenceは、アセンブリの場合トップのModelDoc2から取得する必要があるみたいです。
puhさん添付画像で例えると、SubSubAssem下の3Dスケッチ参照IDをMainAssemから取得する場合には、 SubSubAssem->ModelDoc->ModelDocExtension->GetPersistReference3 ではなく MainAssem->ModelDoc->ModelDocExtension->GetPersistReference3 となります。 返される参照IDのByte配列個数も異なります。
返ってきた値を、 MainAssem->ModelDoc->ModelDocExtension->GetObjectByPersistReference3(参照ID) としたら、ちゃんとフィーチャーが返ってきてSelect2出来ました。
一応、開いているアセンブリor部品内に存在する3Dスケッチをリスト表示して、リストから選択した 3Dスケッチを選択してハイライトさせるサンプルマクロを添付しておきます
|
|
|
|
hisa
カタマリの王様!?
オフライン
投稿: 507
PANDA-Z!!
|
|
Re:2階層より下層にあるフィーチャーのハイライト方法
« 返信 #4 投稿日: 2009/10/15 - 15:13:39 » |
|
余談ですが、SW2008からFeatureManager上部にあるフィルターで、 添付画像の様な状態にすることも可能です
|
|
|
|