|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
добавляем полилинию по точкам вставки выбранных блоков?
----- добавлено через ~2 мин. ----- (apply 'append '((1 2 3) (4 5 6) (7 8 9)))-> '(1 2 3 4 5 6 7 8 9)
__________________
K Lisp |
||||
![]() |
|
||||
Регистрация: 13.04.2017
Сообщений: 136
|
Какой же это изящный чит с append. Переписал свою функцию для получения cписка точек из vla-list-bl в духе Lisp Код:
Лех, спасибо. Если у тебя будет чуть больше времени и вдруг станет жалко нуба в виде меня, пожалуйста ответь на другие вопросы. ----- добавлено через ~2 мин. ----- Цитата:
Спасибо за append, мне Леха подсказал уже, классная штука |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
Чего еще хотелось бы добавить. Точки вставки у тебя будут трехмерные, а координаты в полилинию надо передавать двумерные. Вариантов немного - либо каждую координату принудительно приводить к двумерному виду, либо создавать полилинию через entmake / entmakex. Второй вариант будет работать только в текущем документе, учти.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.04.2017
Сообщений: 136
|
Цитата:
Сейчас только осознал, что если эксплуатировать мою программу, то проще будет просто ставить лишний мнимый блок на угол или подкорректировать линию. Потому что как это все будет работать с xref непонятно, он же не примитив. А можешь подсказать какие из твоих исходников я мог бы начать изучать? |
|||
![]() |
|
||||
Регистрация: 13.04.2017
Сообщений: 136
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Не-а... У меня нормальных исходников-то практически нет. Могу посоветовать "САПР на базе" (в глубинах форума где-то скан есть). Можно сказать библия разработчика под кад ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.04.2017
Сообщений: 136
|
Цитата:
----- добавлено через 46 сек. ----- А, тут дело в том, чтобы смотреть в комплексе и на код и Doc, потому что читать тоже полезно. |
|||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
Товарищи, подскажите, возможно ли в принципе на лисп реализовать вот такую хотелку.
1) Есть в чертеже несколько поллиний, каждая полилиния в своем слое (например слой1, слой2, слой3). Я хочу секущей рамкой выбрать определенные полилинии, например, выбрал полилинию, находящуюся в слой1, и полилинию, находящуюся в слой3, и запомнить выбор в какую-нибудь переменную (тут вроде все выполнимо). 2) Далее необходимо во вторую переменную из заранее заготовленного экселя подгрузить таблицу соответствия величины диаметра названию всех слоев с полилиниями на чертеже. Ну т.е. в экселе в первом столбце названия слоев, а во втором столбце величина диаметра, получается слой1=10, слой2=20, слой3=30. 3) Далее внутри лиспа выполнить функцию, аналогичную функции экселя ВПР, т.е. соотнести слои из переменной 1 и слои в переменной 2, и в случае совпадения имен создать переменную 3, в которой будут уже не названия слоев, а числа соответствующие диаметрам каждого слоя (в примере получается 2 числа: 10 и 30). 4) Ну и самое простое - начертить кружочки с диаметрами из переменной 3. Теоретически, наверное, это реализуемо, если сначала выгрузить переменную 1 из действия 1) в эксель, уже в экселе с функцией ВПР обработать результат, там же сформировать команду черчения окружностей и потом просто скопировать готовую команду черчения окружностей в командную строку, но хотелось миновать задействования экселя в процессе работы лиспа. Смущают пункты 2 и 3, на VBA я сопоставление и выборку сделать смогу, а вот можно ли так на лиспе? Последний раз редактировалось posetitel, 03.12.2023 в 11:48. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
имхо, вместо экселя загружать из текстового файла в список точечные пары {имя слоя . диаметр}, и потом искать в этом списке по имени слоя. Т.е. в текстовом файле идет построчно имя слоя и на следующей строке сопоставленный слою диаметр. И тогда сформировать список примерно таким кодом:
Код:
Ну а получить потом из списка диаметр Код:
Последний раз редактировалось Сергей812, 03.12.2023 в 13:00. Причина: добавлен пример кода |
|||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
В лиспе совсем-совсем новичок, сижу с рекомендуемой всем новичкам в этой теме талмудом на 1000 страниц и пытаюсь разобрать код, но все равно идет трудновато. Направьте в нужное русло, тем более тема соответствующая.
В общих чертах смысл первого кода ясен: пока в текстовом документе есть строчки, в переменную lLst слепляются точечные пары. Но хочу детально вникнуть, что делает каждая функция и тут затык получается. Непонятно выражение (while (and lKey lD). Ну т.е. я представляю, как оно обычно работает, но вот как конкретно в этом коде не догоняю. Переменные lKey lD, если их не объявить перед функцией while, сразу выдадут nil и цикл должен прерваться. В чем я заблуждаюсь в своих рассуждениях? Еще уточняющий вопрос: функция read-line автоматически перескакивает на следующую строчку? Т.е. выражения (setq lKey (read-line lF)) (setq lD (read-line lF)) сами читают строчки по очереди, не надо добавлять что-то вроде next read-line или read-line = read-line+1 ? Ну и самый важный вопрос от новичка: а как у вас получаются цветные слова? Как можно писать и обкатывать код на лиспе? А то я по старинке в блокноте пишу, потом пока загружу в автокад, пока напишу команду на выполнение... |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
да, т.е. она "проглатывает" символы конца текущей строки и указатель файла (это уже не к лиспу, а к самой операционной системе относится) стоит на начале следующей строки. А если файл закончился, то вернет nil. Ну для красоты перед вторым вызовом (setq lD (read-line lF)) можно было бы сперва проверить lKey <> nil - чтобы не пытаться читать завершенный файл еще раз.
если были успешно считаны обе связанные строки - в цикле пытаемся считать следующую пару значений. То же условие в строке 5 - если конец файла (или "накосячили" в файле и непарное количество значений), то просто не будет добавлено в список. Еще могут быть пустые строки в файле - тоже по хорошему их надо пропускать. ----- добавлено через ~2 мин. ----- ну вопрос валидации содержимого файла можно для упрощения проигнорировать - если это продукт для "личного" пользования. |
|||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
Цитата:
(setq lKey (read-line lF)) (setq lD (read-line lF)) (while (and lKey lD) (if (and lKey lD) (setq lLst (append lLst (List (cons lKey lD))))) (setq lKey (read-line lF)) (setq lD (read-line lF)) ) чтобы перед циклом сначала были заданы переменные, которые уже считали по строчке из текстового файла. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |