Получение ObjectId добавленного объекта

Автор Тема: Получение ObjectId добавленного объекта  (Прочитано 5190 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Методу нужно передать параметр ObjectId id
Код - C# [Выбрать]
  1. public void Method(ObjectId id)
  2. {
  3.     //код
  4. }
какого-либо объекта (например, Polyline) pline.
Объект временный (метод его заменит другим), создан, но в Database его еще нет.
Сам объект, к сожалению, передать невозможно.

Значит, до вызова указанного выше метода этот объект нужно добавить в Database
Код - C# [Выбрать]
  1. using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  2. {    
  3.     BlockTable acBlkTbl;
  4.     acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  5.                                  OpenMode.ForRead) as BlockTable;
  6.  
  7.     BlockTableRecord acBlkTblRec;
  8.     acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  9.                                     OpenMode.ForWrite) as BlockTableRecord;    
  10.  
  11.     // Добавление нового объекта
  12.     acBlkTblRec.AppendEntity(pline);
  13.     acTrans.AddNewlyCreatedDBObject(pline, true);
  14.  
  15.     acTrans.Commit();
  16. }

Как теперь правильно получить  ObjectId id добавленного объекта Polyline pline?
Или можно генерировать ObjectId id для Database самому? Как это правильно делать?

Отмечено как Решение German 24-10-2015, 17:15:26

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Так попробуй:
Код - C# [Выбрать]
  1. ObjectId idPoly = acBlkTblRec.AppendEntity(pline);

P.S.: И приветствую на нашем форуме.  :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GermanАвтор темы

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Значит в итоге:
Код - C# [Выбрать]
  1. ObjectId idPoly;
  2. using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  3. {    
  4.     BlockTable acBlkTbl;
  5.     acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  6.                                  OpenMode.ForRead) as BlockTable;
  7.  
  8.     BlockTableRecord acBlkTblRec;
  9.     acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  10.                                     OpenMode.ForWrite) as BlockTableRecord;    
  11.  
  12.     // Добавление нового объекта  с сохранением id
  13.     idPoly = acBlkTblRec.AppendEntity(pline);
  14.     acTrans.AddNewlyCreatedDBObject(pline, true);
  15.  
  16.     acTrans.Commit();
  17. }
  18.  
  19. public void Method(idPoly)
  20. {
  21.     //код
  22. }

Спасибо!