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

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

Страницы: 1 ... 3 4 [5] 6 7 ... 10
41
AutoCAD .NET API / Вызов CommandMethod без потери выделения объектов
« Последний ответ от Roman 11-03-2025, 12:33:50 »
Добрый день! Не смог найти. Есть ли простой способ вызвать CommandMethod так, чтобы после его выполнения осталось выделение тех объектов, которые были выделены до вызова этого метода?
Я понимаю, что я могу сохранить сам в SetSelection и добавить с помощью Editor.SetImpliedSelection() после выполнения. Но может быть есть более изящный метод, мб аттрибут какой при вызове позволит это сделать?
42
Добрый день!
Есть задача. После того как мы разбили полилинию на несколько полилиний, расставить на каждый отрезок свою выноску. Расстановка лейблов делается через JIG объект (который отрисовывает линию ножки выноски)
На событии Database.ObjectAppended и создаю подписку на Application.Idle я собираю список новых полилиний, а уже в обработчике Application.Idle я пытаюсь расставить выноски.
Всё отлично работает, когда я имею дело с инструментами "Разорвать" и "Разорвать в точке". Однако, когда используется инструмент "Обрезать", визуальная часть объекта JIG не отрисовывается, а надпись Prompt-а появляется. Предполагаю, что это связано с тем, что в этот момент (Idle) команда обрезать ещё не завершена. После того, как я поставлю точки выносок, надпись Prompt расстановки выноски (из JIG объекта) пропадёт и будет видна надпись Prompt команды "Обрезать" и команда обрезать будет продолжена.
Есть ли возможность как-то команду "Обрезать" прервать? Или как-то заставить JIG отрисоваться в моём случае?

Код - C# [Выбрать]
  1. public class LabelJig : EntityJig
  2. {
  3.     private Point3d _lastPoint;
  4.     private readonly Polyline _poly;
  5.  
  6.     public LabelJig(Polyline poly, Point3d firstPoint) : base(poly)
  7.     {
  8.         _poly = poly;
  9.         _lastPoint = firstPoint;
  10.         _poly.AddVertexAt(_poly.NumberOfVertices, new Point2d(_lastPoint.X, _lastPoint.Y), 0, 0, 0);
  11.     }
  12.  
  13.     protected override SamplerStatus Sampler(JigPrompts prompts)
  14.     {
  15.         JigPromptPointOptions opts = new JigPromptPointOptions("\n" + "Укажите следующую точку" + ": ")
  16.         {
  17.             BasePoint = _lastPoint,
  18.             UseBasePoint = true,
  19.             UserInputControls = UserInputControls.NoZeroResponseAccepted |
  20.                                 UserInputControls.NullResponseAccepted
  21.         };
  22.  
  23.         PromptPointResult res = prompts.AcquirePoint(opts);
  24.  
  25.         if (res.Status == PromptStatus.None)
  26.         {
  27.             return SamplerStatus.OK;
  28.         }
  29.  
  30.         if (res.Status == PromptStatus.Cancel)
  31.         {
  32.             return SamplerStatus.Cancel;
  33.         }
  34.  
  35.         if (_lastPoint == res.Value)
  36.         {
  37.             return SamplerStatus.NoChange;
  38.         }
  39.  
  40.         _lastPoint = res.Value;
  41.         return SamplerStatus.OK;
  42.     }
  43.  
43
AutoCAD .NET API / Re: Ошибка чтения файла
« Последний ответ от Привалов Дмитрий 10-03-2025, 07:43:34 »
При попытке чтения ловлю ошибку доступа eFileAccessErr в строке db.ReadDwgFile
Скорее всего файл кем-то занят.
Замени FileShare.ReadWrite на FileShare.Read.
Если папка G:\\DevProjects\\ общедоступная, возможно кем-то с другой машины заблокирован файл. Лучше папку сделать для чтения.



44
AutoCAD .NET API / Re: Ошибка вставки блоков из источника
« Последний ответ от Atomohod 09-03-2025, 20:33:57 »
DuplicateRecordCloning.Ignore
не сработало.
Неужели в десятке файлов происходят конфликты меток? Как так, они же назначаются рандомно?

Как с этим бороться?
45
Вдобавок в  sourceDb.WblockCloneObjects выскакивает ошибка eHandleExists, но в dxf гарантированно нет тех блоков что я пытаюсь добавить из источника. Я в тупике, как это понимать.
Блоков может и нет, а одинаковые handles есть. Попробуй вместо  DuplicateRecordCloning.Replace другое значение. Например, DuplicateRecordCloning.Ignore
46
AutoCAD .NET API / Ошибка вставки блоков из источника
« Последний ответ от Atomohod 09-03-2025, 19:28:19 »
Здравствуйте.
Столкнулся с проблемой - обрабатываю несколько dxf файлов, нужно добавить из чертежа источника несколько блоков в каждый из dxf и сохранить их. Добавление нужных блоков и их вставка в dxf происходит только в первом dxf, во все остальные добавление не происходит. Не могу понять - почему?
Вдобавок в  sourceDb.WblockCloneObjects выскакивает ошибка eHandleExists, но в dxf гарантированно нет тех блоков что я пытаюсь добавить из источника. Я в тупике, как это понимать.

Мой код вставки определений блоков в dxf
Код - C# [Выбрать]
  1.  public void InsertBlockDefinitions(Database destDb)
  2.  {
  3.      try
  4.      {
  5.          foreach (Database sourceDb in TitleRepoDatabases)//Здесь один файл источник с двумя блоками внутри, в пространстве модели
  6.          {
  7.              ObjectIdCollection blockIds = new ObjectIdCollection();
  8.  
  9.              using (Transaction tr = sourceDb.TransactionManager.StartTransaction()) // Транзакция в sourceDb
  10.              {
  11.                  // Открываем таблицу блоков sourceDb
  12.                  BlockTable bt = (BlockTable)tr.GetObject(sourceDb.BlockTableId, OpenMode.ForRead);
  13.  
  14.                  foreach (ObjectId btrId in bt)
  15.                  {
  16.                      BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead);
  17.                    
  18.                      if (!btr.IsAnonymous && !btr.IsLayout)
  19.                      {
  20.                          blockIds.Add(btrId);
  21.                      }
  22.                  }
  23.                  List<string> q1 = new List<string>();
  24.  
  25.                  tr.Commit(); // Завершаем транзакцию перед копированием
  26.              }
  27.  
  28.              if (blockIds.Count > 0) // Проверяем, есть ли что копировать
  29.              {
  30.                  IdMapping mapping = new IdMapping();
  31.  
  32.                  // Копируем блоки из sourceDb в destDb
  33.                  sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, mapping, DuplicateRecordCloning.Replace, false);
  34.              }          
  35.          }
  36.      }
  37.      catch (Exception e)
  38.      {
  39.          Application.ShowAlertDialog("Problem in " + e.Message);
  40.      }
  41.  }

47
AutoCAD .NET API / Re: Ошибка чтения файла
« Последний ответ от Владимир Шу 09-03-2025, 12:13:59 »
Небольшое примечание к коду:
После чтения файла с использованием Database.ReadDwgFile() настоятельно рекомендуется вызывать метод Database.CloseInput()
Подробнее тут: adndevblog.typepad.com и тут:help.autodesk.com
48
AutoCAD .NET API / Re: Ошибка чтения файла
« Последний ответ от Александр Ривилис 08-03-2025, 01:27:20 »
Есть ещё несколько методов ReadDwgFile. Попробуй их. Возможно этот метод по какой-то причине не работает.
49
AutoCAD .NET API / Re: Ошибка чтения файла
« Последний ответ от Atomohod 07-03-2025, 23:49:42 »
Эта ошибка ещё может быть если этот dwg-файл уже открыт в этом или другом AutoCAD (в редакторе или при помощи ReadDwgFile)
Точно нет, это я сразу проверил. Этот файл - база блоков, он только для считывания блоков и копирования их в текущий чертеж, кроме метода что я приложил он нигде не читается.
На что еще можно проверить?
50
AutoCAD .NET API / Re: Ошибка чтения файла
« Последний ответ от Александр Ривилис 07-03-2025, 23:31:29 »
Ну и ещё одно. Не следует создавать Database в using если собираешься использовать его после using.
Страницы: 1 ... 3 4 [5] 6 7 ... 10