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

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

Страницы: 1 ... 7 8 [9] 10
81
AutoCAD .NET API / Ошибка при открытии файла
« Последний ответ от Derie1 23-04-2025, 15:31:45 »
Привет форумчанам.
Обыскал весь интернет, изнасиловал CatGPT (или он меня...) но так и не пойму в чем проблема и как решить.

Я хочу написать команду которая при запуске должна открывать определенный файл dwg (некий шаблон), выполнять в нем некоторые действия и предлагать пользователю сохранить его под новым именем. При этом запуск команды осуществляется из некого другого открытого документа.
Мой код открывает нужный файл-шаблон, но дальне при попытке что-то сделать выскакивает ошибка "Autodesk.AutoCAD.Runtime.Exception: eLockViolation". Я так понимаю, что только что открытый файл не становится текущим, и как это исправить я не разберусь.

Код моего скрипта:
Код - C [Выбрать]
  1. namespace SLDBuilder_2
  2. {
  3.     public class RunSLDbuilder : IExtensionApplication
  4.     {
  5.         [CommandMethod("sldbuilder")]
  6.         public void RunSLD()
  7.         {
  8.             Document currentDoc = Application.DocumentManager.MdiActiveDocument;
  9.             Database currentDataBase = currentDoc.Database;
  10.             Editor currentEditor = currentDoc.Editor;
  11.             currentEditor.WriteMessage("\nSLD Builder started...");
  12.  
  13.             string dwgFilePath = @"C:\Users\11177\Documents\SLDBuilder_2\_test\SLD_template_EN.dwg";
  14.             string dwgFileName = Path.GetFileName(dwgFilePath);
  15.             Document dwgDoc = Application.DocumentManager.Open(dwgFilePath, false);
  16.             Application.DocumentManager.MdiActiveDocument = dwgDoc; // Эту строчку советует добавить Copilot, но это ничего не меняет.
  17.  
  18.             Database newDatabase = dwgDoc.Database;
  19.             Editor newEditor = dwgDoc.Editor;
  20.             using (Transaction tr = newDatabase.TransactionManager.StartTransaction())
  21.                 {
  22.                     BlockTable blockTable = (BlockTable)tr.GetObject(newDatabase.BlockTableId, OpenMode.ForRead);
  23.                     BlockTableRecord modelSpace = (BlockTableRecord)tr.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  24.  
  25.                     Line line = new Line();
  26.                     line.StartPoint = new Point3d(-100, -100, 0);
  27.                     line.EndPoint = new Point3d(100, 100, 0);
  28.                     line.ColorIndex = 7;
  29.  
  30.                     ObjectId objectIdLine = modelSpace.AppendEntity(line);
  31.                     tr.AddNewlyCreatedDBObject(line, true);
  32.  
  33.                     tr.Commit();
  34.                 }
  35.         }
  36.  
  37.         public void Initialize()
  38.         {
  39.             Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;
  40.             editor.WriteMessage("\nSLD Builder loaded...");
  41.         }
  42.  
  43.         public void Terminate()
  44.         {
  45.  
  46.         }
  47.     }
  48. }
  49.  
82
AutoLisp / VisualLISP и DCL / Re: координаты области выбора
« Последний ответ от altver 18-04-2025, 20:13:21 »
отлично!
СПАСИБО!.
 (ssnamex) - ТО, ЧТО  НАДО!!!
83
Впрочем посмотри описание и примеры использования функции (ssnamex)
84
В такой постановке вопроса ответ - нет.
Можно средтвами ObjectARX и (кажется) AutoCAD.NET API
85
AutoLisp / VisualLISP и DCL / координаты области выбора
« Последний ответ от altver 18-04-2025, 18:44:01 »
Добрый день, господа!
вопрос такой:
выбираю объекты "Select Objects"  прямоугольной областью,
необхоимо получить координаты всех 4-х углов области.
Возможно ли через лисп?
Заранее блгодарен!
86
В общем, вся проблема оказалась в том, что атрибут для первого состояния видимости отмечен в определении блока как постоянный.
Прилагаю файл. В нём есть блок "Т1". В котором 3 состояния видимости (0-1-2). Для 0 и 1 состояний атрибуты помечены как постоянные, для 2-го состояния атрибут не помечен как постоянный.
В таком виде, если ставить блок для всех состояний видимости следующим кодом, то всегда будет виден только ATTR1:
Извините, вам запрещён просмотр содержимого спойлеров.

Если все атрибуты сделать непостоянными, то вставка атрибутов будет происходить в соответствие с состоянием видимости блока.
87
Можно попробовать сменить состояние видимости на начальное, добавить атрибуты и вернуть то, которое было, возможно разнести на разные транзакции.
88
Выложите пример, двух состояний блока. Естакой вот с такими атрибутами, есть такой же но тут вот так и выдеы только эти атрибуты.
89
По пробовать возвращать свойство Visible  и проверять его.
не очень понял. В какой момент и у кого свойство visible проверять?

Тут фишка именно при создании нового вхождения блока (blockReferenct) нужно "восстановить" атрибуты. Но у моего определения блока некоторые атрибуты видны для определенного состояния видимости, а некоторые не видны. По факту же получается, что когда я создаю новые вхождения атрибутов для вхождения блока, у меня видимость атрибутов всегда соответствует только первому состоянию видимости в определении блока, а не текущему состоянию видимости вхождения блока.
Возможно код, указанный выше, не верный.
90
По пробовать возвращать свойство Visible  и проверять его.
Страницы: 1 ... 7 8 [9] 10