Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: German от 27-02-2014, 14:09:22

Название: Получение ObjectId добавленного объекта
Отправлено: German от 27-02-2014, 14:09:22
Методу нужно передать параметр 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 самому? Как это правильно делать?
Название: Re: Получение ObjectId добавленного объекта
Отправлено: Александр Ривилис от 27-02-2014, 14:17:42
Так попробуй:
Код - C# [Выбрать]
  1. ObjectId idPoly = acBlkTblRec.AppendEntity(pline);

P.S.: И приветствую на нашем форуме.  :)
Название: Re: Получение ObjectId добавленного объекта
Отправлено: German от 27-02-2014, 14:44:22
Значит в итоге:
Код - 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. }

Спасибо!