Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Сделай отдельный простейший тестовый проект (ничего лишнего)
Сделал на сколько смог простейший проект. Приложил к ответу.
Вот видео примера с ошибкой:
3
отправлю в ADN DevHelp
Можете отправить в ADN DevHelp вопрос - почему вот тут написано:
Цитировать
AcDbEntity* pSubject  - A pointer to an AcDbEntity that this overrule applies to.
А по факту передается ObjectId.Null
1. Ты путаешь ObjectARX и AutoCAD .NET API.
2. Передаётся Entity у которого ObjectId.Null. В чем тут противоречие? В случае если CloneMeForDragging возвращает true (а это по-умолчанию так и происходит) создаётся клон примитива и перетаскивание выполняется с ним. У клона (т.к. он не добавлен в Database) свойство ObjectId == ObjectId.Null
4
отправлю в ADN DevHelp
Можете отправить в ADN DevHelp вопрос - почему вот тут написано:
Цитировать
AcDbEntity* pSubject  - A pointer to an AcDbEntity that this overrule applies to.
А по факту передается ObjectId.Null
5
Извини, но разбираться в твоём коде у меня ни времени ни желания нет.
Сделай отдельный простейший тестовый проект (ничего лишнего) и если в нём при совпадении ручек будет проявляться ошибка - отправлю в ADN DevHelp.
6
Дальше еще интересней. При работе метода MoveGripPointsAt создается копия примитива с ObjectId.Null (0). И по логике в моем коде часть с перерисовкой примитивов в блоке вообще не должна работать, но она работает почти всегда)) Если изменять один блок
7
Ничего не понял
А вот так?
Извините, вам запрещён просмотр содержимого спойлеров.

Я отметил там место, где тоже может возникать ошибка. Но это в методе MoveGripPointsAt. А у меня фатал ловится еще задолго до работы этого метода - в методе GetGripPoints. Я смог один раз ее при отладке поймать и вот как она выглядела:
Цитировать
System.ArgumentException: Элемент с тем же ключом уже был добавлен.
   в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   в AcMgGripOverrule.getGripPoints(AcMgGripOverrule* , AcDbEntity* pSubject, AcArray<AcDbGripData \*\,AcArrayMemCopyReallocator<AcDbGripData \*> >* grips, Double curViewUnitSize, Int32 gripSize, AcGeVector3d* curViewDir, Int32 bitflags)
8
Есть группа из 34 сечений дорога удлинилась, и появилась необходимость добавить в группу еще 3 сечения. Да можно удалить старые и сделать новую разбивку, но это немного хлопотно. Посмотрел редактирование, ни чего подходящего не нашел. Или такая возможность не предусмотрена?
9
Ничего не понял, кроме того, что у тебя где-то в коде ошибки. Причем наверняка как обычно не в той части кода, которую ты показал.
10
Не, вариант с Open никак не прокатывает. Как и вариант ObjectId.GetObject.
Вот что у меня имеется:
Код - C# [Выбрать]
  1. private BlockTableRecord _blockRecord;
  2. public BlockTableRecord BlockRecord
  3. {
  4.     get
  5.     {
  6.         try
  7.         {
  8.             if (!BlockId.IsNull)
  9.             {
  10.                 using (var tr = AcadHelpers.Database.TransactionManager.StartTransaction())
  11.                 {
  12.                     var blkRef = (BlockReference)tr.GetObject(BlockId, OpenMode.ForWrite);
  13.                     _blockRecord = (BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord, OpenMode.ForWrite);
  14.                     _blockRecord.BlockScaling = BlockScaling.Uniform;
  15.                     if (_blockRecord.GetBlockReferenceIds(true, true).Count <= 1)
  16.                     {
  17.                         foreach (var objectId in _blockRecord)
  18.                         {
  19.                             objectId.GetObject(OpenMode.ForWrite).Erase(true);
  20.                         }
  21.                     }
  22.                     else
  23.                     {
  24.                         var blockTable = (BlockTable)tr.GetObject(AcadHelpers.Database.BlockTableId, OpenMode.ForWrite);
  25.                         _blockRecord = new BlockTableRecord { Name = "*U" };
  26.                         if (Annotative) _blockRecord.Annotative = AnnotativeStates.True;
  27.                         blockTable.Add(_blockRecord);
  28.                         tr.AddNewlyCreatedDBObject(_blockRecord, true);
  29.                         blkRef.BlockTableRecord = _blockRecord.Id;
  30.                     }
  31.                     tr.Commit();
  32.                 }
  33.                 using (var tr = AcadHelpers.Database.TransactionManager.StartTransaction())
  34.                 {
  35.                     var blkRef = (BlockReference)tr.GetObject(BlockId, OpenMode.ForWrite);
  36.                     _blockRecord = (BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord, OpenMode.ForWrite);
  37.                     var matrix3D = Matrix3d.Displacement(-InsertionPoint.GetAsVector()) * GetCurrentMatrixForBlockUpdate();
  38.                     foreach (var entity in Entities)
  39.                     {
  40.                         var transformedCopy = entity.GetTransformedCopy(matrix3D);
  41.                         _blockRecord.AppendEntity(transformedCopy);
  42.                         tr.AddNewlyCreatedDBObject(transformedCopy, true);
  43.                     }
  44.                     tr.Commit();
  45.                 }
  46.             }
  47.             else
  48.             {
  49.                 var matrix3D = Matrix3d.Displacement(-InsertionPoint.GetAsVector()) * GetCurrentMatrixForBlockUpdate();
  50.                 foreach (var ent in Entities)
  51.                 {
  52.                     var transformedCopy = ent.GetTransformedCopy(matrix3D);
  53.                     _blockRecord.AppendEntity(transformedCopy);
  54.                 }
  55.             }
  56.             return _blockRecord;
  57.         }
  58.  
  59.         catch (Exception exception)
  60.         {
  61.             MpExWin.Show(exception);
  62.             return null;
  63.         }
  64.     }
  65.     set => _blockRecord = value;
  66. }

Вариант с транзакцией в общем-то работает за исключением некоторых моментов. И самый гадкий из них, то, что метод ObjectOverrule.Close срабатывает и при копировании в буфер обмена, что вызывает новые ошибки
Страницы: [1] 2 3 ... 10