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

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

Страницы: [1] 2 3 ... 10
1
обязательно заново получать через транзакцию, а передавать в другие методы только ObjectId
так и подумал, спасибо!
2
Просто хотел добавленный в модель чертежа примитив сохранить, чтобы использовать позднее, но, видимо, это не так надо было делать...
Если использовать - то внутри той же транзакции в том же методе. Если где-то еще надо будет использовать - то обязательно заново получать через транзакцию, а передавать в другие методы только ObjectId.
3
using (el) и using (ray) лишние. И какая ошибка возникает?
спасибо огромное, помогло удаление лишних using!
Да, забавно вы сначала диспозите объекты луча и эллипса, а затем пытаетесь вызывать их методы. Объявляйте переменные внутри using чтоб не делать таких глупостей впредь.
тут не заметил. Просто хотел добавленный в модель чертежа примитив сохранить, чтобы использовать позднее, но, видимо, это не так надо было делать...
4
Да, забавно вы сначала диспозите объекты луча и эллипса, а затем пытаетесь вызывать их методы. Объявляйте переменные внутри using чтоб не делать таких глупостей впредь. Да и есть же простой using без блока кода.
Хуже того, у вас переменные Ray и Ellipse объявлены вне блока кода транзакции, то есть будут жить после закрытия транзакции. Это прямой путь к фаталу AutoCAD, если попробуете их использовать после диспоза и закрытия транзакции. Не делайте так никогда.
И я что-то не уверен, что IntersectWith работает с бесконечными кривыми. Если будет сбой - замените на Ray на Line и соответственно поменяйте условие Intersect, что можно продлять линию (ExtendArgument).
5
using (el) и using (ray) лишние. И какая ошибка возникает?
6
AutoCAD .NET API / Как найти точки пересечения с помощью IntersectWith?
« Последний ответ от Klo 28-05-2026, 12:53:31 »
Добрый день!
Мне нужно найти точку пересечения эллипса и луча для дальнейших построений, но почему-то функция IntersectWith выдаёт ошибку...
Я не очень хорошо разбираюсь в объектной модели автокад и программировании в нём, но вот мой код:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using System;
  7. namespace Zigzag
  8. {    
  9.     public class Zigzag
  10.     {
  11.         [CommandMethod("DrawLine")]
  12.         public void DrawLine()
  13.         {
  14.             Database db = Application.DocumentManager.MdiActiveDocument.Database;
  15.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  16.             Ellipse el = null;
  17.             Ray ray = null;
  18.  
  19.             using (Transaction tr = db.TransactionManager.StartTransaction())
  20.             {
  21.                 try
  22.                 {
  23.                     BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); //получаем ссылку на модель чертежа
  24.                     BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  25.  
  26.                     Point3d center = new Point3d(0, 0, 0); //объявляем и задаём параметры для эллипса
  27.                     Vector3d normal = Vector3d.ZAxis;
  28.                     Vector3d majorAxis = new Vector3d(1000, 0.0, 0.0);
  29.                     el = new Ellipse(center, normal, majorAxis, 0.5, 0.0, Math.PI*2.0); //создаём экземпляр эллипса
  30.  
  31.                     using (el) //добавление эллипса в бд чертежа
  32.                     {
  33.                         btr.AppendEntity(el); //добавляем в пространство модели
  34.                         tr.AddNewlyCreatedDBObject(el, true); //запускаем транзакцию
  35.                     }
  36.    
  37.                     ray = new Ray(); //объявляем примитив чертежа
  38.                     ray.BasePoint = center;
  39.                     ray.SecondPoint = new Point3d(0, 1, 0);
  40.                     using (ray) //добавление луча в бд чертежа
  41.                     {
  42.                         btr.AppendEntity(ray);
  43.                         tr.AddNewlyCreatedDBObject(ray, true);
  44.                     }
  45.  
  46.                     Point3dCollection collection = new Point3dCollection();
  47.                     el.IntersectWith(ray, Intersect.ExtendThis, collection, IntPtr.Zero, IntPtr.Zero);
  48.  
  49.                     tr.Commit(); //коммитим транзакцию
  50.                 }
  51.                 catch (Autodesk.AutoCAD.Runtime.Exception ex)
  52.                 {
  53.                     ed.WriteMessage($"\n {ex.Message}");
  54.                 }
  55.             } //end using            
  56.         }
  57.     }
  58. }
Эллипс и луч строится без проблем, если закомментировать строку с поиском пересечения.
Прошу подсказку
7
Есть ли какая официальная  документация по LISP для AutoCAD в виде одного текстового (или хотя бы читаемого) файла?
В виде одного файла не существует. Полная документация по функциям https://help.autodesk.com/view/OARX/2024/ENU/?guid=GUID-4CEE5072-8817-4920-8A2D-7060F5E16547
8
AutoLisp / VisualLISP и DCL / Файл описания API для LISP
« Последний ответ от Electric 23-05-2026, 11:11:09 »
Есть ли какая официальная  документация по LISP для AutoCAD в виде одного текстового (или хотя бы читаемого) файла?

В последнее время, с помощью нейросети пишу некоторые скрипты на LISP для автоматизации автокада. Проблема в том, что язык не особо популярный, нейросеть часто глючит и придумывает свои функции, команды или даже пытается убедить меня в  невозможности некоторых идей. Подгрузка текстового файла с API AutoCAD для выполнения задачи бы очень помогла.
Вариант изучить самому  не рассматриваю, у меня нет для этого времени, мотивации, и  за такое мне точно никто не заплатит.
9
VBA / Re: vba для автокад скорее жив, чем мертв
« Последний ответ от Timofeev 27-03-2026, 15:59:50 »
Ком конечно медленная штука - наверное это максимум что можно в VBA сделать
Может кому пригодится
10
AutoCAD .NET API / Re: Как получить имя стиля таблицы в .NET ?
« Последний ответ от avc 12-02-2026, 18:55:51 »
Так же как любой другой именованный объект чертежа. У таблицы берете ID стиля, получаете стиль на чтение и берете его имя.
Страницы: [1] 2 3 ... 10