Jump to content

Интеграция Lisp,a для NanoCad


Recommended Posts

Здравствуйте, возможно кто-то сможет помочь.

Имеется Lisp используемый в AutoCad, называется Parline.

Суть в том, что ты задаешь точки привязки на плане и автоматически параллельно стене с заданным в Lisp отступом прорисовывается полилиния.

Загружая в NanoCad это Lisp он работает отчасти, т.е. понимает, что нужно задать точки привязки, но потом теряет связь и вместо автоматической отрисовки полилинии с отступом, предлагает самому рисовать полилинию.

Возможно ли интегрировать данный Lisp в NanoCad?

Файл прикладываю.

Один Lisp делает отступ наружу заданных точек (допустим контура), другой делает отступ внутрь.  

ParLine.LSP ParLine1.LSP

Link to comment
Share on other sites

Под win покатит? Там только точки начала и окончания останова для этого нужны. Так-то, надеюсь, работать будет. Особо не проверял и не тестировал

ParLine.LSP

добавлено через 0 минут

Там две команды - parline и marline. Ну вот так я их обозвал..

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

19 минут назад, kpblc сказал:

Под win покатит? Там только точки начала и окончания останова для этого нужны. Так-то, надеюсь, работать будет. Особо не проверял и не тестировал

ParLine.LSP 4 \u043a\u0411 · 0 загрузок

добавлено через 0 минут

Там две команды - parline и marline. Ну вот так я их обозвал..

Честно говоря я дилетант в этом..."под win покатит?" - не понял вопроса)

Лисп состоял из множества точек привязки, для того, чтобы рисовать не просто прямые, а можно было обходить колонны здания допустим и т.п.   

Link to comment
Share on other sites

Я не уверен что код сработает для nanoCAD, работающем под Linux. А так-то я скачал только первый код, посмотрел на результаты его работы и повторил - уже просто без командных методов. Уж больно они слабопредсказуемые.

Link to comment
Share on other sites

1 минуту назад, kpblc сказал:

Я не уверен что код сработает для nanoCAD, работающем под Linux. А так-то я скачал только первый код, посмотрел на результаты его работы и повторил - уже просто без командных методов. Уж больно они слабопредсказуемые.

Работа в windows. Я попробовал Ваш лисп, он работает, если получится интегрировать мой лисп, было бы очень круто))

Link to comment
Share on other sites

Дык я его вроде бы интегрировал... Работает и работает без ошибок, кажется.

 

Link to comment
Share on other sites

попробовал на произвольном контуре

 

Спойлер

image.png.5e865681fb3bb5bab4b9d24faba27b38.png

 

Спойлер

image.png.5ea108ce6977a2ba86a3b9f3a208335e.png

 

Зеленая линия - результат ParLine, красная - MarLine.

Это точно то, что задумывалось?

Link to comment
Share on other sites

Posted (edited)

Получается, что при вертикальном расположении отступ не осуществляется. Я как понимаю, должно получится как команда "Подобие" в NanoCad, только не по выбранному объекту, а по заданным точкам.

Edited by Dmitrii_ID
Link to comment
Share on other sites

Просто в алгоритме отклонение осуществляется

Спойлер

image.png.cbc61ec6da90776bdb554d3ef4b1c4c9.png

, а не от текущего направления между соседними точками.

 

Фактически, получилась команда MOVE, а не OFFSET.

Уверен, что @kpblc это с легкостью поправит.

Причем, скрипт будет универсальным. т.к. не использует команду (command... , имеющую несколько различный синтаксис между AC и NC

Edited by EdwardSt
  • Like 1
Link to comment
Share on other sites

Ну, offset я смогу применить только через ActiveX :(  К сожалению, с построением временных примитивов. Это если действительно нужен offset, а не что-то иное.

  • Like 1
Link to comment
Share on other sites

Немного украл у @kpblc, чутка поменял в исходнике.

Вначале запрос отступа (положительный влево, отрицательный вправо).

Дальше по исходному алгоритму.

В общем, проверяйте.

ParLine1.lsp

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

Я забыл залокировать fun_draw-donut... Позорище!

Кстати, хотите резво обрушить свои коды? На запрос точки (хоть первой, хоть любой последующей) - нажмите Esc. Или на запросе первой сделайте правый пинок :)

  • Haha 1
Link to comment
Share on other sites

12 часов назад, kpblc сказал:

Я забыл залокировать fun_draw-donut... Позорище!

Не нужно расстраиваться!

В следующий раз в дополнение к оптимизированному коду переименую и функцию, я сторонник более коротких идентификаторов )))

 

Что касается кода, то он некоммерческий, защиты от всех видов сбоев не предусматривалось.

Приоритет был в максимальном сохранении исходного функционала.

 

ЗЫ . И да, (entmakex рулит. (command - в топку! 

 

 

  • Like 1
Link to comment
Share on other sites

13 часов назад, kpblc сказал:

Кстати, хотите резво обрушить свои коды? На запрос точки (хоть первой, хоть любой последующей) - нажмите Esc. Или на запросе первой сделайте правый пинок :)

Кстати, ничего особенного не обнаружил

Спойлер

image.png.24b069bdba2ce69dbec88ed10f8cf168.png

 

Link to comment
Share on other sites

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. Отмеченные точки пропадут? В моем коде - да. В "принятом как решение" - не уверен.

  • Like 1
Link to comment
Share on other sites

2 минуты назад, kpblc сказал:

А, во! Доперло по поводу примера. Задаем первую точку, вторую, третью, Esc. Отмеченные точки пропадут? В моем коде - да. В "принятом как решение" - не уверен.

Даже проверять не буду. Естественно, останутся ошметки в виде кружков.

Т.к. не использовал функции для отката. Некоммерческая это версия!

А короткие имена переменных - это дополнительная защита от оЧЕпяток.

Никому не навязываю свои привычки, но таков уж стиль...

Link to comment
Share on other sites

3 минуты назад, EdwardSt сказал:

Естественно, останутся ошметки в виде кружков.

ИМХО как раз не должны. И это не откат, который, кстати, не сработает в коде: меток начала и конца отмены нет.

4 минуты назад, EdwardSt сказал:

А короткие имена переменных - это дополнительная защита от оЧЕпяток.

Повторюсь:

12 минут назад, kpblc сказал:

вместо pr набрал pt

символы r и t находятся сильно рядом ))

добавлено через 0 минут

Тоже никому не навязываю свое видение кода, если что.

Link to comment
Share on other sites

4 минуты назад, kpblc сказал:
10 минут назад, EdwardSt сказал:

Естественно, останутся ошметки в виде кружков.

ИМХО как раз не должны. И это не откат, который, кстати, не сработает в коде: меток начала и конца отмены нет.

 

Ну, конечно, не должны! Я же тоже указал на это!

И не внес метки начала и конца отмены - тоже про это написал.

 

Интерфейсная часть с пользователем (защита от неправильного или прерванного ввода, различные неявные способы сего действа и т.п.) - это отдельная очень кропотливая область, стоящая программерам много труда и пота. Моя субъективная оценка - 80% времени.

Исходный код в этом направлении вообще не заморачивался.

Ваш код (чувствуется рука мастера!) - минимальные подпорки на этом поприще установлены на автомате. Хотя  массированное использование mapcar (тоже рука мастера!) не очень то подходит для обработки массивов, в которых есть зависимости между соседними элементами, а это как раз наш случай.

Мой - промежуточный , есть защита от сегментов нулевой длины в отличии от первых двух вариантов, запрос отступа со знаком вместо фиксированной установки в коде сразу в нескольких переменных. Но возможно оставление артефактов в случае прерывания функции в момент указания точек.

 

Мне действительно нравится красота вашего кода, что я отметил сразу во втором посте ветки.

Но эта красота не гарантирует от появления ошибок в алгоритме. 

Со своей стороны постараюсь в следующий раз вносить специальную оговорку, что защиту от дурака в том или ином аспекте не внес, используйте как есть)))

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...