Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Алексей (IdeaSoft) от 14-02-2018, 18:17:51

Название: Сделать _offset объекту
Отправлено: Алексей (IdeaSoft) от 14-02-2018, 18:17:51
У меня есть список ObjectID или Handle не важно, что больше подойдет
Мне нужно пакетно выполнить на LISP
Как написать инструкции на LISP для передачи этой строки в консоль
Я помню ка-то это уже делал, но забыл.

Что-то вроде того точно не помню синтаксиса

(commands "_offset" Handle("7A9"))





Название: Re: Сделать _offset объекту
Отправлено: Александр Ривилис от 14-02-2018, 23:46:28
https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-AF6DD533-1A24-4687-96EB-F03F26050C07-htm.html
Код - Auto/Visual Lisp [Выбрать]
  1. (handent "7A9")
Название: Re: Сделать _offset объекту
Отправлено: Алексей Кулик от 15-02-2018, 00:13:06
command-s, а не commands :) Но это детали.
Если известно, в какую сторону будет выполняться offset, то можно попытаться использовать vla-offset
Название: Re: Сделать _offset объекту
Отправлено: Алексей (IdeaSoft) от 15-02-2018, 09:47:09
Ах да про сторону сдвига совсем забыл.
В моей задачи сдвиги всегда будут во внутрь.
Точка внутри моих замкнутых контуров известна
Как передать точку или аргумент для стороны сдвига?


 
Название: Re: Сделать _offset объекту
Отправлено: Алексей Кулик от 15-02-2018, 10:32:11
Насколько я понимаю, смещение выполняется по правилу: от начальной точки кривой откладываем касательную к сегменту, добавляем угол -90, умноженный на знак смещения - и таким образом получаем, куда попадет новый объект.
Т.е. если кривая отрисована слева направо, то смещение будет "вниз".
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-Offset (vlax-ename->vla-object (car (entsel))) 1000.)
Правда, есть тут одна тонкость - AutoCAD не всегда может корректно построить offset из-за кривости контура.
Название: Re: Сделать _offset объекту
Отправлено: Александр Ривилис от 15-02-2018, 14:31:49
Если это замкнутая кривая, то можно сделать offset в обе стороны (разные знаки), а затем оставить ту, у которой меньше площадь.
P.S.: Кстати, в документации указано, что отрицательное смещение приводит к получению меньшей кривой, т.е. внутрь: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-50EF273A-7552-4D6B-8523-BB956334D08A-htm.html
Название: Re: Сделать _offset объекту
Отправлено: Алексей Кулик от 15-02-2018, 15:02:06
Я специально построил 2 полилинии - одну (зеленую) по часовой стрелке, вторую (красную) против. Желтые - результат выполнения моего кода из #4 (прямоугольниками отмечены начальные вершины)
Название: Re: Сделать _offset объекту
Отправлено: Александр Ривилис от 15-02-2018, 15:03:42
Я специально построил 2 полилинии - одну (зеленую) по часовой стрелке, вторую (красную) против. Желтые - результат выполнения моего кода из #4:
А если контур замкнутый? Я не утверждаю, что в документации написана истина.
Название: Re: Сделать _offset объекту
Отправлено: Алексей Кулик от 15-02-2018, 15:37:04
В таком случае тоже играет роль направление отрисовки: при положительном коэффициенте и направлении "по часовой" offset срабатывает "внутрь".
Название: Re: Сделать _offset объекту
Отправлено: Александр Ривилис от 15-02-2018, 15:38:32
В таком случае тоже играет роль направление отрисовки: при положительном коэффициенте и направлении "по часовой" offset срабатывает "внутрь".
Значит в очередной раз в документации написана ерунда. Так и запишем. :(
Название: Re: Сделать _offset объекту
Отправлено: Алексей Кулик от 15-02-2018, 15:44:22
Я проверял на ACAD2016x64Eng. Но вряд ли в других версиях поведение меняется.