Не создается объект на новом листе

Автор Тема: Не создается объект на новом листе  (Прочитано 2372 раз)

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

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Заметил такую проблему - на пустом листе не создается объект , в то время как на листе, на котором что-то нарисовано - выдает ошибку AccessViolation

Код:
Код - C# [Выбрать]
  1.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  2.             Database acCurDb = acDoc.Database;
  3.  
  4.             // Start a transaction
  5.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  6.             {
  7.                 // Open the Block table for read
  8.                 BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
  9.  
  10.                 // Open the Block table record Model space for write
  11.                 BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  12.  
  13.                 // Create an in memory circle
  14.                 using (Circle acCirc = new Circle())
  15.                 {
  16.                     acCirc.Center = new Point3d(2, 2, 0);
  17.                     acCirc.Radius = 5;
  18.  
  19.                     // Adds the circle to an object array
  20.                     DBObjectCollection acDBObjColl = new DBObjectCollection();
  21.                     acDBObjColl.Add(acCirc);
  22.  
  23.                     // Calculate the regions based on each closed loop
  24.                     DBObjectCollection myRegionColl = new DBObjectCollection();
  25.                     myRegionColl = Region.CreateFromCurves(acDBObjColl);
  26.                     Region acRegion = myRegionColl[0] as Region;
  27.                     // Add the new object to the block table record and the transaction
  28.                     acBlkTblRec.AppendEntity(acRegion);
  29.                     acTrans.AddNewlyCreatedDBObject(acRegion, true);
  30.  
  31.                     // Dispose of the in memory circle not appended to the database
  32.                 }
  33.  
  34.                 // Save the new object to the database
  35.                 acTrans.Commit();
  36.             }
  37.             // convertToBlock(createPolyline(new Point2d(0, 0), Width, Height));
  38.  

Подскажите, чего не хватает на новом, "чистом" листе.
« Последнее редактирование: 14-05-2018, 12:52:42 от Александр Ривилис »

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Не создается объект на новом листе
« Ответ #1 : 14-05-2018, 09:06:30 »
Ошибка eLockViolation появляется при выполнении OpenMode.ForWrite();

Насколько я понял, в новом листе "не хватает" чего-то. Главный вопрос чего?

Просто я под автокад до этого как-то не особо программировал, поэтому мне элементарно не хватает базового понимания принципа работы/построения объектов/элементов объектов

Отмечено как Решение Александр Ривилис 14-05-2018, 13:53:11

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Не создается объект на новом листе
« Ответ #2 : 14-05-2018, 11:49:43 »
О каких листах идет речь? layout? В этом коде объект вставляется в пространство модели же. Где код создания листа?
eLockViolation - это вероятно не заблокирован документ. Откуда вызывается код?

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

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Не создается объект на новом листе
« Ответ #3 : 14-05-2018, 12:16:55 »
eLockViolation - это вероятно не заблокирован документ

Спасибо, как раз тут-то и была моя ошибка =) заблокировал документ - и все заработало, как и планировалось =)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не создается объект на новом листе
« Ответ #4 : 14-05-2018, 13:02:35 »
garmayev
1. Прочитай у меня в подписи как следует форматировать код на форуме и соблюдай это правило.
2. Правильный ответ дал avc  - его ответ и следовало отметить как Решение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение