ADN Club > AutoCAD .NET API
Идентифицировать примитив по записи в Xrecord
Балиев:
День добрый,
Есть геометрический примитив - полилиния. Какие данные о ней нужно записать в Xrecord, чтобы потом можно было по этим данным идентифицировать эту полилинию. Возможно это - ObjectId, но тогда, как записать его в Xrecord, чтобы потом его можно было считать как ObjectId?
Заранее благодарен!
Владимир Шу:
не ObjectId, скорее нужно писать хендл, он не меняется.
У объекта базы данных есть метод acCurDb.GetObjectId() который принимает хендл и возвращает ObjectId.
Балиев:
--- Цитата: Владимир Шу от 23-06-2022, 16:37:39 ---не ObjectId, скорее нужно писать хендл, он не меняется.
У объекта базы данных есть метод acCurDb.GetObjectId() который принимает хендл и возвращает ObjectId.
--- Конец цитаты ---
А как хендл из Xrecord достать?
Lemieux:
--- Цитата: Балиев от 23-06-2022, 17:07:27 ---А как хендл из Xrecord достать?
--- Конец цитаты ---
Вот примерно так XRecord добавляется к Entity
--- Код - C# [Выбрать] --- public static void AddExtentionRecord(this Entity entity, string record, Handle handle) { Document doc = Application.DocumentManager.MdiActiveDocument; using (DocumentLock docLoc = doc.LockDocument()) { Database db = doc.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { ObjectId extId = entity.ExtensionDictionary; if (extId == ObjectId.Null) { entity.CreateExtensionDictionary(); extId = entity.ExtensionDictionary; } DBDictionary dbExt = tr.GetObject(extId, OpenMode.ForWrite) as DBDictionary; if (!dbExt.Contains(record)) { Xrecord xRec = new Xrecord(); ResultBuffer rb = new ResultBuffer{ new TypedValue((int)DxfCode.Handle, handle) }; xRec.Data = rb; dbExt.SetAt(record, xRec); tr.AddNewlyCreatedDBObject(xRec, true); } tr.Commit(); } } }
Получение XRecord в обратном порядке, просто сперва получаешь ExtensionDictionary сущности.
Александр Ривилис:
Балиев,
Это точно нужно или достаточно прописать XRecord в ExtensionDictionary полилинии и тогда искать не придется?
Навигация
Перейти к полной версии