仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2025/04/19 - 23:47:37
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: イベントが発生しない 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: イベントが発生しない  (閲覧数 2196 回)
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も不慣れなため、何か根本的に間違っているかもしれません。何かわかる方いますか?
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:イベントが発生しない
« 返信 #1 投稿日: 2004/08/18 - 19:45:58 »
引用して返信

SolidWorks(US)のWebで公開されている、APIサンプルで動きを確認してみてはどうでしょうか?
(API Downloads のページ)
http://www.solidworks.com/pages/services/APIDownloads.html
(VBAイベントモニターのサンプルファイル)
http://www.solidworks.com/downloads/API/Downloads/00000/0200s/0230/VBA_Events.zip

SolidWorksのマクロで作成されているのでVB(VBA)になりますが、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

ですね。
すいません。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: イベントが発生しない 前のトピック 次のトピック
ジャンプします: