Перейти к содержанию
aerohost

Адаптация Lisp под Nanocad

Рекомендуемые сообщения

Прошу помощи в адаптации Lisp под нанокад. А именно функцию команды PL-VFI

Я так понимаю вся истина кроется тут 

(ssget "_:L" '((0 . "*POLYLINE,LINE,ARC,CIRCLE"))))

А именно тут 

 "_:L"

pltools.lsp

Изменено пользователем aerohost

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, в нанокад режим "_:L" не поддерживается.

В справке по автолиспу этому режиму предположительно (написано не очень понятно) соответствует

режим ":L" - Allows for the selection of unlocked layers onlу - выбор элементов только на разблокированных слоях).

При адаптации придется определяться, чем это заменить.

 

Например:

Вариант 1

В рассматриваемой функции PL-VFI    ssget вызывается два раза - для выбора секущих и выбора полилиний, в которые вставляются вершины.

Можно использовать режим (ssget "P" …) - предыдущий выбор для секущих.

Т.е., можно ПЕРЕД вызовом функции выбрать набор объектов-секущих, а потом уже вызвать функцию.

А в самой функции выбор полилиний для добавления вершин сделать в цикле с режимом (ssget ":S" …)

 

Вариант 2

создать функцию - обертку типа (defun MYssgetL …), в которой будет эмуляция нужного режима ":L" или любого другого неподдерживаемого.

А в основной функции вызов (ssget "_:L" …) заменить на  (MYssgetL …)

В принципе, такая функция-обертка может быть довольно сложной по содержанию.

Можно даже реализовать какие-нибудь свои изощренные сценарии)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Режим выбора :L действительно не реализован. Поднял приоритет задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
13 часов назад, ISL сказал:

Режим выбора :L действительно не реализован.

 

Есть возможность получить список реализованных режимов?

Похоже, ":L" - не единственный из них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если что-то не работает – присылайте код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эх! Хотелось бы избегать лепешек, а не разгребать последствия)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Функцию PL-VFI адаптировал. Соответствующую часть прокомментировал, чтобы можно было нормально читать.
В конце файла добавил функцию обертку nano:ssget-l.

Будет время, постепенно постараюсь пройтись по всему файлу целиком.

В приложенном тестовом файле синие полилинии на не заблокированных слоях, а зеленые - на заблокированных.
На нулевом слое полилиния, которую обрабатываем.
Результат:
До.

Спойлер

image.thumb.png.48dec43ed0cd3f1286d36cecc3ea6d91.png

 

После обработки.

Спойлер

image.thumb.png.8005bb01b1e321b7e825e5510795bcf5.png

 

P.S. Обратите внимание, что там в исходном варианте фильтром отбрасываются полилинии, содержащие кривые и сплайны, а также 3D полилинии.

Пока как то так.

Файлы:
_PL-VFI_Test.dwg

 

pltools_nano.lsp

Изменено пользователем A.Kudrjashov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я или тупой или  я что то делаю не так ...

Спойлер

06c998f5a8922e686ca513c49bb63afb.gif
 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, aerohost сказал:

я что то делаю не так ...


Я завтра посмотрю. Но, как минимум, я бы сравнил величину "допуска (1)" с размерностями объектов.
Я рисовал на шару, когда проверял, допуск не менял, оставил тот. что по умолчанию (0.001).

Сначала выбирал режущие кромки (синие и зеленые), потом целевую полилинию (белую).
По отдельности тоже проверял.

Не проверял опцию "С продолжением". У меня здесь все полилинии пересекаются. Но, поскольку это базовая функция LISP, думаю, что проблем быть не должно.

P.S.
Там упрощенно алгоритм следующий:
1. Находятся точки пересечения режущих с целевой.
2. К этим точкам пересечения находится параметр ближайшей вершины.
3. У ближайшей вершины определяются целочисленные ограничения параметра сверху и снизу.
4. Далее оценивается попадает ли точка пересечения в коридор (+/- Допуск по отношению к целочисленной границе). Если не попадает, то добавляется на целевую полилинию

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, A.Kudrjashov сказал:


Я завтра посмотрю. Но, как минимум, я бы сравнил величину "допуска (1)" с размерностями объектов.
Я рисовал на шару, когда проверял, допуск не менял, оставил тот. что по умолчанию (0.001).

Сначала выбирал режущие кромки (синие и зеленые), потом целевую полилинию (белую).
По отдельности тоже проверял.

Не проверял опцию "С продолжением". У меня здесь все полилинии пересекаются. Но, поскольку это базовая функция LISP, думаю, что проблем быть не должно.

P.S.
Там упрощенно алгоритм следующий:
1. Находятся точки пересечения режущих с целевой.
2. К этим точкам пересечения находится параметр ближайшей вершины.
3. У ближайшей вершины определяются целочисленные ограничения параметра сверху и снизу.
4. Далее оценивается попадает ли точка пересечения в коридор (+/- Допуск по отношению к целочисленной границе). Если не попадает, то добавляется на целевую полилинию

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

Спойлер

4ba7fc351df03b7fa7ebfb91b0304afa.gif
 

 

Может какая то переменная nanocada у нас отличается, то и разный результат ? 

Изменено пользователем aerohost

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 часов назад, aerohost сказал:

Может какая то переменная nanocada у нас отличается, то и разный результат ? 


Сразу должен сказать, что я практически не трогал текст, а только структурно разобрал его, прокомментировал, поставил вопросы и добавил nano:ssget-l.

1. Синяя и белая полилинии должны находиться на разблокированных слоях, но на всякий случай можно проверить, что они попадают в требуемую выборку.
Вот здесь (nano:ssget-l) раскомментировать PRINC 

Спойлер

image.png.09112a096cf444eb9ffe2be7db82fe8e.png


2. Следующий спорный момент, который я пока не трогал - это определение "Режима продолжения кромки".
В исходном тексте предполагается ввод кучи альтернативных ключей

Спойлер

image.png.2bf272471b887999dd812ee2f8b23279.png

 

а анализируется всего один

Спойлер

image.png.c6e9f6ec81c34648816319fcee5edfd2.png

Хотя он должен сказываться только в случае выбора режима "С продолжением" через E(lat). Во всех остальных случаях будет "Без продолжения". 


Здесь же можно принципиально проверить размерность массива результатов пересечений (RET)
 

3. Далее, последнее препятствие на пути добавления вершин - это попадание точки пересечений в доверительный интервал от целочисленных границ Параметра ближайшей точки целевой полилинии. Проверяем здесь:

Спойлер

image.png.da3e6b41f4120baf4ba7111bef3b14c9.png

 

Вот сюда можно добавить (progn <script>);progn else.

Спойлер

image.png.678f845266f2def2166456f6770cc58e.png


В общем, надо смотреть где происходит сбой.

(Выше нумерация по предыдущему файлу)

 

Upd.
Прикладываю LSP файл с отладочными строками.
Там еще в коде устранения дублирующих полилиний, похоже, была ошибка.
Вот здесь (нумерация по новому файлу). Не очень критично, но тем не менее.

Спойлер

image.png.4d1c851164f2b98eab772e6dfa34c6f1.png


Файл с отладочными строками (alert и princ), выделенными ;;; DEBUG

(Переменная в самом начале файла)

pltools_nano_2020-03-21_02.lsp

Изменено пользователем A.Kudrjashov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 21.03.2020 в 06:35, A.Kudrjashov сказал:


Сразу должен сказать, что я практически не трогал текст, а только структурно разобрал его, прокомментировал, поставил вопросы и добавил nano:ssget-l.

1. Синяя и белая полилинии должны находиться на разблокированных слоях, но на всякий случай можно проверить, что они попадают в требуемую выборку.
Вот здесь (nano:ssget-l) раскомментировать PRINC 

  nano:ssget-l (1) (Показать контент)

image.png.09112a096cf444eb9ffe2be7db82fe8e.png


2. Следующий спорный момент, который я пока не трогал - это определение "Режима продолжения кромки".
В исходном тексте предполагается ввод кучи альтернативных ключей

  PL-VFI (1_1) (Показать контент)

image.png.2bf272471b887999dd812ee2f8b23279.png

 

а анализируется всего один

  PL-VFI (1_2) (Показать контент)

image.png.c6e9f6ec81c34648816319fcee5edfd2.png

Хотя он должен сказываться только в случае выбора режима "С продолжением" через E(lat). Во всех остальных случаях будет "Без продолжения". 


Здесь же можно принципиально проверить размерность массива результатов пересечений (RET)
 

3. Далее, последнее препятствие на пути добавления вершин - это попадание точки пересечений в доверительный интервал от целочисленных границ Параметра ближайшей точки целевой полилинии. Проверяем здесь:

  PL-VFI (2) (Показать контент)

image.png.da3e6b41f4120baf4ba7111bef3b14c9.png

 

Вот сюда можно добавить (progn <script>);progn else.

  PL-VFI (2_2) (Показать контент)

image.png.678f845266f2def2166456f6770cc58e.png


В общем, надо смотреть где происходит сбой.

(Выше нумерация по предыдущему файлу)

 

Upd.
Прикладываю LSP файл с отладочными строками.
Там еще в коде устранения дублирующих полилиний, похоже, была ошибка.
Вот здесь (нумерация по новому файлу). Не очень критично, но тем не менее.

  Проверка на дубли (Показать контент)

image.png.4d1c851164f2b98eab772e6dfa34c6f1.png


Файл с отладочными строками (alert и princ), выделенными ;;; DEBUG

(Переменная в самом начале файла)

pltools_nano_2020-03-21_02.lsp 211 \u043a\u0411 · 1 загрузка

Спойлер

5c98d4f8c8fffc6c21dbacfefa8cf6db.gif

 

Изменено пользователем aerohost
Gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Gif файл у меня не открывается.
Видимо криво записался на форуме.


Последний вариант. Добавлены PL-CW и PL-CCW.
Комментарии внутри.
pltools_nano_2020-03-21_04.lsp
 

Изменено пользователем A.Kudrjashov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

В 21.03.2020 в 14:47, A.Kudrjashov сказал:

Gif файл у меня не открывается.
Видимо криво записался на форуме

У меня почему то не заводится. Фото перекрепил

 

Изменено пользователем aerohost

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, aerohost сказал:

У меня почему то не заводится. Фото перекрепил

Теперь антивирус ругается на место размещения GIF.
К чему такие сложности ?
В Программах находим "Ножницы" и далее - Скопировать и Вставить.

Но я там в тексте вывел практически всю отладочную информацию ... надо смотреть по месту, где и что не срастается !
Alert показывают ключевые этапы, которые либо выполняются, либо нет.
А все остальное генерируется в командную строку ... или не генерируется.

.... есть одно подозрение, но попозже.

Upd.
В nanoCAD 11 у меня в функции PL:AddVX не выполняется вот такая конструкция:

Спойлер

image.png.e6acb044904cb0e57f08febbda683454.png

 

Когда я обхожу ее и делаю тупое присвоение ширине 0, то все работает.

Спойлер

image.png.b7bd485bef5c76498d5af13110a1b020.png


С кодом надо разбираться !.. :(
 

Изменено пользователем A.Kudrjashov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, A.Kudrjashov сказал:

Теперь антивирус ругается на место размещения GIF.
К чему такие сложности ?
В Программах находим "Ножницы" и далее - Скопировать и Вставить.

Но я там в тексте вывел практически всю отладочную информацию ... надо смотреть по месту, где и что не срастается !
Alert показывают ключевые этапы, которые либо выполняются, либо нет.
А все остальное генерируется в командную строку ... или не генерируется.

.... есть одно подозрение, но попозже.

Upd.
В nanoCAD 11 у меня в функции PL:AddVX не выполняется вот такая конструкция:

  Скриншот1 (Показать контент)

image.png.e6acb044904cb0e57f08febbda683454.png

 

Когда я обхожу ее и делаю тупое присвоение ширине 0, то все работает.

  Скриншот 2 (Показать контент)

image.png.b7bd485bef5c76498d5af13110a1b020.png


С кодом надо разбираться !.. :(
 

Я уже понял что ты мегамозг и решишь это как семочки пощелкать 🤣 будем ждать финальную версию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На 20ой версии завелся PL-VFI, на 11 не хочет

Спойлер

7014aef024fd5512672809d353a58fa5.gif
 

Спойлер

4b3cde6414fb3481d76000f878b30133.gif
 

 

Изменено пользователем aerohost

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

A.Kudrjashov, получится завести PL-VFI под nanocad 11 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, aerohost сказал:

получится завести PL-VFI под nanocad 11 ?


Я обошел там в коде, как и писал, неработающую функцию.

Проверьте под nanoCAD 11 вот этот скрипт. У меня PL-VFI под NC11 работает.
pltools_nano_2020-03-25_01.lsp
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, A.Kudrjashov сказал:


Я обошел там в коде, как и писал, неработающую функцию.

Проверьте под nanoCAD 11 вот этот скрипт. У меня PL-VFI под NC11 работает.
pltools_nano_2020-03-25_01.lsp
 

Завелся, ура !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... первое полное приближение вместе с описанием проблемных мест выложил здесь

 

Изменено пользователем A.Kudrjashov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...