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

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

Страницы: 1 2 [3] 4 5 ... 10
21
А если в 2 действия
Это ж ровно в 2 раза больше кликов, да еще и по одному и тому же месту. Ужас! :)
22
Пока приходится менять запрос на GetPoint

А если в 2 действия, сперва GetEntity, затем GetPoint на выбранном объекте?
23
Запрос GetEntity позволяет получить не только объект чертежа, но и точку по которой кликнул пользователь. Однако точно указать нужную точку на объекте очень сложно, потому что Автокад зачем-то принудительно отключает привязки во время запроса. Можно вручную вызвать некоторые привязки, но это очень неудобно и не все они включаются. Можно ли как-то исправить этот баг и заставить Автокад работать с привязками во время выбора объекта? Желательно, конечно, чтоб работали привязки только к объектам из AddAllowedClass, но это уже не так важно.
Пока приходится менять запрос на GetPoint и с большим трудом искать объект под этой точкой.
24
Utils.RegenEntity я как то нашел на ГитХаб, вместе с комментом:
Цитировать
A little hack to help ensure the entity and grips are regenerated.
и нашел, когда искал аналог лисповского entupd
25
Спасибо всем, но я уже пошел в обход: вместо редактирования старой полилинии создаю полностью новую, а старую удаляю целиком. Так что код уже переделан и проверить не могу.
Но довольно часто бывает, что какие-то объекты упрямо не обновляются никакими Regen даже после завершения команды и метод Utils.RegenEntity возьму на заметку - возможно пригодится.
26
А если так?
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.Internal.Utils.RegenEntity(objId);
27
Может кто знает как полилинию привести в соответствие с обновленными вертексами?

Попробуй метод Reset у Polyline.

У Polyline2d и Polyline3d возможно нельзя удалять все вершины, должно остаться минимум 2шт, иначе объект считается некорректным, если присутствует хотя-бы 2 вершины можно попробовать завершить транзакцию и обратиться к свойствам, хотя ты говоришь уже пробовал.
Возможно также нельзя удалять первую вершину, а необходимо ее заменять с помощью методов void InsertVertexAt(Vertex2d indexVertex, Vertex2d newVertex); или ObjectId InsertVertexAt(ObjectId vertexId, Vertex2d newVertex);

Как вариант, имея все вершины, их должно быть не менее 2х, удалить старую и создать по новой, один из конструкторов принимает Point3dCollection.
Polyline2d(Poly2dType type, Point3dCollection vertices, double elevation, bool closed, double startWidth, double endWidth, DoubleCollection bulges);
protected internal Polyline2d(IntPtr unmanagedObjPtr, bool autoDelete);
28
Попробовать реген через ком? Что-то типа такого.

Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.Interop;
  3. using Autodesk.AutoCAD.Interop.Common;
  4.  
  5. namespace MiniProgram.Program
  6. {
  7.  
  8.     public static class SupportClass
  9.     {
  10.  
  11.         public static void Regen()
  12.         {
  13.             Document doc = Application.DocumentManager.MdiActiveDocument;
  14.             if (doc == null) return;
  15.             (doc.GetAcadDocument() as AcadDocument).Regen(AcRegenType.acAllViewports);
  16.         }
  17.     }
  18. }
29
Саму полилинию открывать ForWrite. Ну и Commit транзакции.
Это первым делом пробовал. Что-то еще Автокад вызывает, когда завершает команду.
30
Саму полилинию открывать ForWrite. Ну и Commit транзакции. А еще лучше попробуй эмуляцию транзакции или ObjectId.Open/Close
Страницы: 1 2 [3] 4 5 ... 10