Dmitrii_ID Posted March 2 Report Share Posted March 2 Здравствуйте, возможно кто-то сможет помочь. Имеется Lisp используемый в AutoCad, называется Parline. Суть в том, что ты задаешь точки привязки на плане и автоматически параллельно стене с заданным в Lisp отступом прорисовывается полилиния. Загружая в NanoCad это Lisp он работает отчасти, т.е. понимает, что нужно задать точки привязки, но потом теряет связь и вместо автоматической отрисовки полилинии с отступом, предлагает самому рисовать полилинию. Возможно ли интегрировать данный Lisp в NanoCad? Файл прикладываю. Один Lisp делает отступ наружу заданных точек (допустим контура), другой делает отступ внутрь. ParLine.LSP ParLine1.LSP Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 2 Report Share Posted March 2 Под win покатит? Там только точки начала и окончания останова для этого нужны. Так-то, надеюсь, работать будет. Особо не проверял и не тестировал ParLine.LSP добавлено через 0 минут Там две команды - parline и marline. Ну вот так я их обозвал.. 1 1 Quote Link to comment Share on other sites More sharing options...
Dmitrii_ID Posted March 2 Author Report Share Posted March 2 19 минут назад, kpblc сказал: Под win покатит? Там только точки начала и окончания останова для этого нужны. Так-то, надеюсь, работать будет. Особо не проверял и не тестировал ParLine.LSP 4 \u043a\u0411 · 0 загрузок добавлено через 0 минут Там две команды - parline и marline. Ну вот так я их обозвал.. Честно говоря я дилетант в этом..."под win покатит?" - не понял вопроса) Лисп состоял из множества точек привязки, для того, чтобы рисовать не просто прямые, а можно было обходить колонны здания допустим и т.п. Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 2 Report Share Posted March 2 Я не уверен что код сработает для nanoCAD, работающем под Linux. А так-то я скачал только первый код, посмотрел на результаты его работы и повторил - уже просто без командных методов. Уж больно они слабопредсказуемые. Quote Link to comment Share on other sites More sharing options...
Dmitrii_ID Posted March 2 Author Report Share Posted March 2 1 минуту назад, kpblc сказал: Я не уверен что код сработает для nanoCAD, работающем под Linux. А так-то я скачал только первый код, посмотрел на результаты его работы и повторил - уже просто без командных методов. Уж больно они слабопредсказуемые. Работа в windows. Я попробовал Ваш лисп, он работает, если получится интегрировать мой лисп, было бы очень круто)) Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 2 Report Share Posted March 2 Дык я его вроде бы интегрировал... Работает и работает без ошибок, кажется. Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 2 Report Share Posted March 2 попробовал на произвольном контуре Спойлер Спойлер Зеленая линия - результат ParLine, красная - MarLine. Это точно то, что задумывалось? Quote Link to comment Share on other sites More sharing options...
Dmitrii_ID Posted March 2 Author Report Share Posted March 2 Quote Link to comment Share on other sites More sharing options...
Dmitrii_ID Posted March 2 Author Report Share Posted March 2 (edited) Получается, что при вертикальном расположении отступ не осуществляется. Я как понимаю, должно получится как команда "Подобие" в NanoCad, только не по выбранному объекту, а по заданным точкам. Edited March 2 by Dmitrii_ID Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 2 Report Share Posted March 2 (edited) Просто в алгоритме отклонение осуществляется Спойлер , а не от текущего направления между соседними точками. Фактически, получилась команда MOVE, а не OFFSET. Уверен, что @kpblc это с легкостью поправит. Причем, скрипт будет универсальным. т.к. не использует команду (command... , имеющую несколько различный синтаксис между AC и NC Edited March 2 by EdwardSt 1 Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 2 Report Share Posted March 2 Ну, offset я смогу применить только через ActiveX К сожалению, с построением временных примитивов. Это если действительно нужен offset, а не что-то иное. 1 Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 2 Report Share Posted March 2 Немного украл у @kpblc, чутка поменял в исходнике. Вначале запрос отступа (положительный влево, отрицательный вправо). Дальше по исходному алгоритму. В общем, проверяйте. ParLine1.lsp 2 1 Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 2 Report Share Posted March 2 Я забыл залокировать fun_draw-donut... Позорище! Кстати, хотите резво обрушить свои коды? На запрос точки (хоть первой, хоть любой последующей) - нажмите Esc. Или на запросе первой сделайте правый пинок 1 Quote Link to comment Share on other sites More sharing options...
Dmitrii_ID Posted March 3 Author Report Share Posted March 3 Ребят, спасибо большое! Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 3 Report Share Posted March 3 12 часов назад, kpblc сказал: Я забыл залокировать fun_draw-donut... Позорище! Не нужно расстраиваться! В следующий раз в дополнение к оптимизированному коду переименую и функцию, я сторонник более коротких идентификаторов ))) Что касается кода, то он некоммерческий, защиты от всех видов сбоев не предусматривалось. Приоритет был в максимальном сохранении исходного функционала. ЗЫ . И да, (entmakex рулит. (command - в топку! 1 Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 3 Report Share Posted March 3 13 часов назад, kpblc сказал: Кстати, хотите резво обрушить свои коды? На запрос точки (хоть первой, хоть любой последующей) - нажмите Esc. Или на запросе первой сделайте правый пинок Кстати, ничего особенного не обнаружил Спойлер Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 3 Report Share Posted March 3 37 минут назад, EdwardSt сказал: я сторонник более коротких идентификаторов У меня была ситуация, когда опечатка (вместо pr набрал pt) обрушила целый набор софта. Ну и потом - любой код должен быть читабельным. Чтобы не надо было судорожно соображать - что же это за переменная и что в ней хранится Считай моим личным бзиком Когда я вижу код типа (defun f (a b l) (foreach a (cdr a) (setq b (cond (a (cons l b)) (t (z l)) ) ) ) ) Мне хочется это развидеть. 22 минуты назад, EdwardSt сказал: Кстати, ничего особенного не обнаружил Я предпочту работать без подобных сообщений. Если (не дай боже) до ошибки были внесены какие-то изменения в окружение (системные переменные, к примеру, поменял, или еще что) - такие изменения надо откатить. А, во! Доперло по поводу примера. Задаем первую точку, вторую, третью, Esc. Отмеченные точки пропадут? В моем коде - да. В "принятом как решение" - не уверен. 1 Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 3 Report Share Posted March 3 2 минуты назад, kpblc сказал: А, во! Доперло по поводу примера. Задаем первую точку, вторую, третью, Esc. Отмеченные точки пропадут? В моем коде - да. В "принятом как решение" - не уверен. Даже проверять не буду. Естественно, останутся ошметки в виде кружков. Т.к. не использовал функции для отката. Некоммерческая это версия! А короткие имена переменных - это дополнительная защита от оЧЕпяток. Никому не навязываю свои привычки, но таков уж стиль... Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 3 Report Share Posted March 3 3 минуты назад, EdwardSt сказал: Естественно, останутся ошметки в виде кружков. ИМХО как раз не должны. И это не откат, который, кстати, не сработает в коде: меток начала и конца отмены нет. 4 минуты назад, EdwardSt сказал: А короткие имена переменных - это дополнительная защита от оЧЕпяток. Повторюсь: 12 минут назад, kpblc сказал: вместо pr набрал pt символы r и t находятся сильно рядом )) добавлено через 0 минут Тоже никому не навязываю свое видение кода, если что. Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 3 Report Share Posted March 3 4 минуты назад, kpblc сказал: 10 минут назад, EdwardSt сказал: Естественно, останутся ошметки в виде кружков. ИМХО как раз не должны. И это не откат, который, кстати, не сработает в коде: меток начала и конца отмены нет. Ну, конечно, не должны! Я же тоже указал на это! И не внес метки начала и конца отмены - тоже про это написал. Интерфейсная часть с пользователем (защита от неправильного или прерванного ввода, различные неявные способы сего действа и т.п.) - это отдельная очень кропотливая область, стоящая программерам много труда и пота. Моя субъективная оценка - 80% времени. Исходный код в этом направлении вообще не заморачивался. Ваш код (чувствуется рука мастера!) - минимальные подпорки на этом поприще установлены на автомате. Хотя массированное использование mapcar (тоже рука мастера!) не очень то подходит для обработки массивов, в которых есть зависимости между соседними элементами, а это как раз наш случай. Мой - промежуточный , есть защита от сегментов нулевой длины в отличии от первых двух вариантов, запрос отступа со знаком вместо фиксированной установки в коде сразу в нескольких переменных. Но возможно оставление артефактов в случае прерывания функции в момент указания точек. Мне действительно нравится красота вашего кода, что я отметил сразу во втором посте ветки. Но эта красота не гарантирует от появления ошибок в алгоритме. Со своей стороны постараюсь в следующий раз вносить специальную оговорку, что защиту от дурака в том или ином аспекте не внес, используйте как есть))) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.