0

xml ファイルと (そのプロパティ) でブロック参照ハンドルをシリアル化したい。したがって、初期化時にこの値を保存します。

blockReference.ObjectId.Handle.Value; // decimal value = 10658

しかし、AutoCAD で blockReference を選択すると、ハンドルが変更されました。

private void database_ObjectModified(object sender, ObjectEventArgs e)
{
    long currentId = e.DBObject.ObjectId.Handle.Value;  // Now it's 10659 !!!!

    ...
}

handle no を正しく使用していますか?

4

2 に答える 2

4

EntityObj.Handle.Valueを使用する

ObjectId から if を取得すると、図面を閉じたり開いたりするときに変更されます。

たとえば、ブロック内に LINE がある場合、ブロックを BEDIT すると、HANDLES が変更されます。

于 2015-08-18T11:27:58.043 に答える
1

XML ファイルでハンドルを使用する場合は、そのハンドルを取得してObjectIdから、現在のセッションでのみ有効なハンドルを使用し.Handleてオブジェクトの読み取り/書き込みを行う必要があります。http://through-the-interface.typepad.com/through_the_interface/2007/02/getting_access_.htmlを参照してください。ObjectId

Database.GetObjectId()SDK ドキュメント (マネージド インターフェイス CHM ファイル) でメソッドを探します。これは一言で言うと…

public ObjectId GetObjectId(
[MarshalAs(UnmanagedType.U1)] bool createIfNotFound, 
Handle objHandle, 
int identifier
);
  • [MarshalAs(UnmanagedType.U1)] bool createIfNotFound 入力ハンドルが見つからない場合に objectId スタブを作成することを示す入力ブール値
  • Handle objHandle 渡されるハンドルを含む入力ハンドル オブジェクト
  • int identifier 将来の使用のために予約済み
于 2015-08-20T22:59:43.937 に答える