AmanoJack
新人さん 
オフライン
投稿: 10

I'm a llama!
|
 |
イベントが発生しない
« 投稿日: 2004/08/18 - 19:10:01 » |
|
フィーチャーが追加されたらそのフィーチャー名をある規則に従って付け替えるというプログラムを組もうとしてイベントの発生を確認しているのですが、イベントがうまく発生できません。 おそらく、PartDocのAddItemNotifyを使うと良いはずなのですが、違うでしょうか? ちなみにDeleteItemNotifyは発生します。
SolidWorksは2004SP0で、さらに付け加えると2003ではAddItemNotifyもDeleteItemNotifyも発生しませんでした。
以下、VB.netのソース
Public Class EventTest Inherits System.Windows.Forms.Form Public WithEvents swApp As SldWorks.SldWorks Public WithEvents swPart As SldWorks.PartDoc
#Region " Windows フォーム デザイナで生成されたコード " #End Region
Private Sub EventTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load swApp = CreateObject("SldWorks.Application") swPart = swApp.ActiveDoc End Sub
Private Function swPart_DeleteItemNotify(ByVal entityType As Integer, ByVal itemName As String) As Integer Handles swPart.DeleteItemNotify MsgBox(itemName) End Function
Private Sub cmdEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEnd.Click swApp = Nothing swPart = Nothing Me.Close() End Sub
Private Function swPart_AddItemNotify(ByVal entityType As Integer, ByVal itemName As String) As Integer Handles swPart.AddItemNotify MsgBox(itemName) End Function
End Class
SolidWorksもvb.netも不慣れなため、何か根本的に間違っているかもしれません。何かわかる方いますか?
|
|
|
|
|
10000years
新人さん 
オフライン
投稿: 9

I'm a llama!
|
 |
Re:イベントが発生しない
« 返信 #2 投稿日: 2004/08/18 - 20:01:20 » |
|
どうもこんにちわ、10000yearsです。 何度かフォーラムのほうに参加させていただいています。
今回の件ですが、APIの問題のように思えるのは自分だけでしょうか。 自分でも試しに環境を換えてやってみたのですが、 VBA、VB.NET、ATL いずれも AddItemNotify のみFireしませんでした  AmanoJackさんの使用方法は間違っていないように見えますし。。 ダメもとでAddHandlerも試したのですがやはり・・・NG APIの問題となると回避方法がない場合お手上げですね
|
|
|
|
AmanoJack
新人さん 
オフライン
投稿: 10

I'm a llama!
|
 |
Re:イベントが発生しない
« 返信 #3 投稿日: 2004/08/19 - 09:43:46 » |
|
Makoronさん、アドバイスありがとうございます。 USの方はチェックしていませんでした。早速確認してみます。
10000yearsさん、動作確認ありがとうございます。 他でもイベントが発生しないとの事で、話は少し進展しましたが、 APIのバグだとすると、それが直るまで今作ろうとしているプログラムは 作ることができないということになりますね。 困りました。
また何かありましたらよろしくお願いします。
|
|
|
|
Tama
Jr. メンバー  
オフライン
投稿: 12

I'm a llama!
|
 |
Re:イベントが発生しない
« 返信 #4 投稿日: 2004/08/19 - 20:04:36 » |
|
こんにちは、Tamaです。 
私も試してみました。VB6でも同様にAddItemNotifyが発生しませんね。 
Makoronさんが紹介されているイベントモニタでみると、フィーチャーを作成したときにはRegenPostNotify2が発生しています。
このイベントで、FeatureByPositionReverse(0)を使ってフィーチャーを取得して処理するといいのではないでしょうか(もちろん、本当に新しく作られたフィーチャーかどうか、調べたほうがいいですね)。
AddItemNotifyが発生しないのは不具合なのか仕様なのかわからないので問い合わせてみるといいですよ。
|
|
|
|
AmanoJack
新人さん 
オフライン
投稿: 10

I'm a llama!
|
 |
Re:イベントが発生しない
« 返信 #5 投稿日: 2004/08/20 - 10:47:03 » |
|
Tamaさん、動作確認ありがとうございます。
このイベントモニター良いですね。2003で動かしてみましたが、 イベントの発生具合が手に取るようにわかります。 RegenPostNotify2など、Regen〜の種類が発生しているのは 気づいていましたが、どのフィーチャーなのかが分からないので 二の足を踏んでいました。 なるほどFeatureByPositionReverse(0)ですか。使えるかもしれません。情報感謝します。
少し先になるかもしれませんが、試して見てまた書き込みたいと思います。とりいそぎ返信まで。
|
|
|
|
AmanoJack
新人さん 
オフライン
投稿: 10

I'm a llama!
|
 |
Re:イベントが発生しない
« 返信 #6 投稿日: 2004/08/20 - 14:34:05 » |
|
Tamaさんが言われた方法を試してうまくいきました。
Public WithEvents swApp As SldWorks.SldWorks Public WithEvents swPart As SldWorks.PartDoc Public swModel As SldWorks.ModelDoc2 ・ ・ ・ Private Function swPart_RegenPostNotify2(ByVal stopFeature As Object) As Integer Handles swPart.RegenPostNotify2 Dim LastFeature As SldWorks.feature
If stopFeature Is Nothing Then 'フィーチャー追加の場合 LastFeature = swModel.FeatureByPositionReverse(0) Else 'フィーチャー修正の場合 LastFeature = stopFeature.Name End If
'以下フィーチャ名変更の作業 End Function
こんな感じです。
おかげさまでツールを作り上げることができそうです。 重ねてアドバイスいただいた方々に感謝します。 
|
|
|
|
AmanoJack
新人さん 
オフライン
投稿: 10

I'm a llama!
|
 |
修正
« 返信 #7 投稿日: 2004/08/20 - 14:36:32 » |
|
ちょっと間違っていました。
'フィーチャー修正の場合 LastFeature = stopFeature
ですね。 すいません。
|
|
|
|