|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
Не знаю, может неправильно его "одел"?
(defun C:77 (/) Command: filedia Enter new value for FILEDIA <1>: 0 Command: saveas Current file format: AutoCAD 2007 Drawing Enter file format [R14(LT98<97)/2000(LT2000)/2004(LT2004)/2007(LT2007)/Standards/DXF/Template] <2007>: dxf Current DXF settings: Precision= 16 Format= ASCII Preview= No Version= 2007 Enter decimal places of accuracy (0 to 16) or [Binary/select Objects/Preview/Version] <16>: 16 Save drawing as <C:\Users\a.kulik\Documents\Drawing1.dxf>: Command: filedia Enter new value for FILEDIA <0>: 1 ) Команда: 77 ; ошибка: no function definition: LT98<97 |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
Код не проверял, не до того как-то (
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 19.09.2016 в 23:46. |
|||
|
||||
Помогите отфильтровать список пожалста.
Имею список такого типа: Цитата:
Цитата:
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Спасибо, работает.
Тогда задачка по сложнее. Застрял ... В списке следующего вида нужно перемножить каждый второй элемент подсписка на каждый третий и записать результат в конец списка. Цитата:
Цитата:
Длины у меня в футах и дюймах. Надеюсь это не критично при математических вычислениях. И еще вопрос скажем так общеобразовательного толка. Как правильно называть лист в котором каждый элемент представляет из себя лист сам по себе. То есть такие как у меня. А-то все что я нахожу для работы с листами в основном для обычных листов. Может не так ищу.... ? ----- добавлено через ~3 ч. ----- Вот к чему я пока пришел. Код:
(("1" "4" "18" "#5" "19" 72) ("2" "11" "20" "#5" "19" 220) ("3" "2" "9" "#5" "19" 18)) а нужно так (("1" "4" "18" "#5" "19" "72") ("2" "11" "20" "#5" "19" "220") ("3" "2" "9" "#5" "19" "18")) Вопрос 2. foreach провел нужные действия, но на выходе я имею только последний элемент листа ("3" "2" "9" "#5" "19" 18), как вернуть весь лист? Вопрос3. Как видите в коде я закомментил лист где длина в футах и дюймах, так как они не считались. Есть вариант проводить вычисления в империальном виде? Последний раз редактировалось Red Nova, 24.09.2016 в 16:58. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
1. Изучай значение символа "\"
2. Преобразовывай неметрические данные в метрические, потом умножай - дели - складывай - вычитай, и результат обратно в дюймы/футы/ярды
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Спасибо
По пункту 1 из моих вопросов. Для добавления двойных кавычек мне нужно было понять что элемент с кавычками это string а без оных это integer. Дальше поиском нашел функцию itoa, которая и производит соответствующую конвертацию. По пункту 2 из моих вопросов. Ты его пропустил, у тебя сразу потом про мой третий вопрос ))). Пока не сумел вернуть по окончанию foreach весь список. Как и раньше писал возвращает только последний обработанный элемент листа. То есть вместо (("1" "4" "18" "#5" "19" "72") ("2" "11" "20" "#5" "19" "220") ("3" "2" "9" "#5" "19" "18")) на выходе ("3" "2" "9" "#5" "19" "18") ХЕЛП плиз. Вот последний вариант кода. Код:
|
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
про append 1-го элемента см. здесь начиная с #12.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Гдеж вы были пока я не нашел решение Шучу, самому всегда интересно ковыряться. Вот только если бы на счет itoa подсказали это бы сэкономило мне несколько часов.
Тогда раз уж вас тут так много объясните кто-нибудь почему у меня vlide постоянно на лямбдах выводит в новое окно сообщение Цитата:
Цитата:
----- добавлено через ~2 ч. ----- Идем дальше. Теперь у меня задача провести сравнение всех элементов списка и если первые элементы одинаковы провести группирование (суммирование последних элементов списка). То есть имеем список типа: Код:
Код:
P.S. По поводу прошлого кода, использовал код от Димы с #3010, но пришлось заменить itoa на rtos чтоб работала с дробными... Последний раз редактировалось Red Nova, 25.09.2016 в 06:51. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Вместо '(lambda( .... )) используй (function (lamdba( ... )), тогда точки останова корректно срабатывают.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
VVA, Спасибо . На тесте все работало, но при применении в команде дало сбой почему-то. Если интересно, во вложении код и файл на котором тестил (команда RN_SlabtableTotal)
Тут мне еще Lee Mac вариант подкинул. Так работает без ошибок. Код:
|
||||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Может быть потому, что в ф-ции последний элемент остается числом, а в твоем примере - строка
Добавил rtos Код:
PS Проверил - работает. Правда к командам (command) и опциям пришлось добавить префиксы "_" PPS Обрати внимание на цифру 4 в rtos
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 25.09.2016 в 19:27. |
|||
|
||||
VVA, Спасибо. О футах и дюймах при применении rtos я уже нашел.
Теперь пытаюсь добавить в последнюю строку списка суммарное значение всех длин. Сперва я очистил лист от всех ненужных элементов, дальше нужно суммировать. Вроде как прочитал тут что для этого есть функция reduce. Но она у меня не определена . Она вообще в лиспе есть? Код:
Цитата:
Добавил Как я понял покопавшись - reduce это привилегия Emacs Lisp Так что сделал так: Код:
Последний раз редактировалось Red Nova, 25.09.2016 в 22:56. |
||||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Так есть определение блока или есть вхождение блока?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Отлично... Вхождение куда? В пространство модели? Листа? Другого блока?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
skkkk, если блок в блоке, то набор вернет nil
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Пока не работает
Код:
Цитата:
_____________________ Добавил. Нашел решение Код:
Потестил еще и снова добавил Нет вру, так всегда возвращает T Последний раз редактировалось Red Nova, 26.09.2016 в 20:13. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Red Nova, памятуя о твоей любви к динамическим блокам я должен был сразу догадаться, что он будет именно таким. У меня даже проскочила такая мысль, но в моменте отвлекли, а когда вернулся, она уже потерялась.
Тут во втором посте тоже есть код, вроде как раз тот, что тебе нужен. Но этот вариант, по-моему, ничем не лучше предложенного VVA, правда, я не проверял. Offtop: Может, я и не прав, но считаю, что создавать блок, включая в его состав другие блоки - дурной тон. Кроме, пожалуй, случаев быстрого создания временных блоков (перетаскиванием правой кнопкой мыши) со случайным именем, которые нужны в небольшой отрезок времени для проведения манипуляций с некоторым набором объектов. Такие блоки я всегда обязательно взрываю и прибираюсь за ними. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Offtop:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
skkkk
Спасибо , код по твоей ссылке помог VVA Спасибо, хотя предложенное лечение так и не помогло Кулик Алексей aka kpblc Уж прости что я иногда не умею правильно объяснять. Зато ты умеешь над такими как я измываться |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Эт я не измываюсь, эт я намекаю, что ситуации бывают разные, и не всегда все условия будут очевидными. И для успешного решения надо бы информации побольше предоставлять
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Вообще-то я остерегся бы командными методами строить мультивыноски: http://autolisp.ru/2015/01/21/mleader_create_order/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 18.11.2015
Сообщений: 4
|
Цитата:
|
|||
|
||||
Регистрация: 18.11.2015
Сообщений: 4
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Опять забыл про обработку ошибок и метки начала/конца отмены...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Использую этот код для выбора динамических блоков с определенным именем. Есть простой метод вернуть их количество?
|
||||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
|
|||
|
||||
Nike, спасибо, хоть и не совсем ответ на мой вопрос, но пригодится на будущее ։)
______________________________________________________________________________ Помогите плиз код осилить. Никак не могу соединить эти два списка нужным образом. Требуется провести сравнение между списками. Ищем совпадение по первому элементу подсписков. При нахождении проводим вычитание между соответствующими вторыми элементами. Возвращаем результирующий список. Пример списков: (setq lstA '(("1" "57") ("2" "69") ("3" "89") ("4" "95") ("5" "89") ("6" "82") ("B" "49"))) (setq lstB '(("1" "53") ("3" "42") ("B" "22"))) Ожидаемый результат: '(("1" "4") ("2" "69") ("3" "47") ("4" "95") ("5" "89") ("6" "82") ("B" "27") Пока что мое нерабочее издевательство над кодом выглядит так: *гнилыми помидорами не кидаться Код:
Вот, нашел такой вариант. Код:
Последний раз редактировалось Red Nova, 02.10.2016 в 21:01. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Создать стиль, в котором отсутствует заголовок таблицы. Кажется, так.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Доброго времени суток! Друзья! Такой вопрос, есть ли тут человек, который владеет Лиспом на профессиональном уровне? Срочно нужна помощь в написании скрипта для автокада. Программа почти дописана, остались некоторые тонкие моменты. Если вкратце, то суть в том, что нужно вытащить блоки с их атрибутами в формате vla , чтоб их можно было тем самым перенести в Excel, на данный момент это получается сделать так, что выделяются все блоки и выносится информации о каждом. Но нужно, чтоб блок можно было выбирать рамкой. Буду благодарен за помощь.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Самое простое - применить команды _ATTOUT и _ATTIN
Ну там это делается... Забрать файлик в EXCEL поманипулировать и отдать назад... без программирования. Метод описан и продемонстрирован не раз!
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
fah, слабо верится, что на работе требуют написать скрипт. Больше похоже на учебную задачу. На работе обычно пофигу, как ты решил проблему - главное, решил.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Да и собственно
в чем загвоздка то? Получили набор блоков и обрабатываете его - это уже все готово, судя по посту. А как формируете набор блоков - это уже вопрос интерфейса пользователя. |
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Нет. Смотрите, задача конкретная. Я работаю в сфере пищевой промышленности, где проектируются конкретные агрегаты. Суть в том, что в каждом проекте создаются спецификации, которые потом вручную забиваются в эксель. Скрин подобной таблицы прикладываю, такую перенести из автокада в эксель обычным способом нереально.
|
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Цитата:
да и информация в эксель пока не выводится, эту проблему пытается решить другой сотрудник, моя же задача сделать выбор конкретного блока. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
----- добавлено через ~2 мин. ----- Offtop: ждем новых участников форума с вопросами вывода в эксель) |
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Выбор пока никак не осуществляется( если сможете помочь с кодом для выбора используя ssget, буду рад помощи!
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Во-первых, ошибка в кавычках "_C". Во-вторых, откуда берутся x и y? И в третьих, изучи разницу между апострофом и функцией list
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Спасибо, буду пытаться вникнуть, пока позволяет время, но программу требуют...) я в программировании чайник, тут нужна реальная помощь в дополнении/исполнении кода. Буду очень благодарен.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
сейчас на том же озоне книга Полещука "AutoLISP и Visual LISP в среде AutoCAD" стоит чуть больше 300р без пересылки - там все эти вопросы рассмотрены. Если ваше чудо начальство требует программу от непрограммистов (вы сами "подставились" скорее всего неосторожными разговорами), то пускай раскошелиться) Во вторых, задачу такого уровня проще было бы написать на VBA в экселе самом, имхо - по COM подцепляетесь к активному документу, грабите вставки блоков - сохраняя в массиве записей имя блока и количество его вставок. Затем формируете нужное количество строк в динтаблице и выводите туда массив записей в соответствующие две колонки. На другом листе есть вторая динтаблица со всеми нужными данными для заполнения спецификации - формулами по имени блока подтягиваете все остальные данные для спецификации. Из экселя можно и стандартные функции выбора примитивов на чертеже вызвать - если нужно только часть чертежа обработать. Ну это уже тема не данной ветки)
|
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Тема "Спецификация оборудования" обсуждалась 100500 раз... Сам писал программы для этого
В "Поиск"! Например http://forum.dwg.ru/showthread.php?t...E2%E0%ED%E8%FF
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Регистрация: 05.10.2016
Сообщений: 9
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
и где и как будете хранить данные для полной "сборки" спецификации?) Тот вариант, что я предложил выше - все данные вводятся во вторую таблицу в том виде, как они будут присутствовать в спецификации. В первом столбце вводите имя блока. Но учитывая клиническую жадность вашего руководства (как же, переделывать то - на что было уже потрачено столько времени и денег), то в конечном итоге ваша программа превратиться в коллекцию костылей. Не обижайтесь, это обычный результат того - что пытаются сэкономить под лозунгом "а чего там делать".
|
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Для этого существует БКК (большая красная кнопка)
Мы писали программы для получения спецификации оборудования разными способами, но остановились всё-таки на работе с Базой оборудования. Пример, спецификации уже приводил. Еще раз прилагаю для fah (правда по ВК, но это не принципиально).
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... Последний раз редактировалось Alan, 07.10.2016 в 16:55. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Offtop:
Цитата:
|
|||
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Отлаживая LISP программу в 6130 строк столкнулся с непонятным явлением.
При загрузке программы выдается сообщение: Команда: (load "dr") ; ошибка: no function definition: F_PLVP. Функция в файле программы имеется, синтасические ошибки в ней отсутствуют. В результате поиска обнаружил в 4230 строке абсолютно в другой функции лишнюю скобку. Удивило, что автокад не распознал не соблюдение баланса скобок. Кто-нибудь сталкивался с подобным явлением, в каких случаях оно возникает? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я бы подумал о том, чтобы "разбить" такой здоровый код на несколько функций. И их загружать чохом (благо лиспы по поиску файлов с определенным расширением в каталоге и подчиненных каталогах уже есть). Дешево и сердито, отлаживать проще...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
VLIDE отслеживает парность скобок и предоставляет чуть более удобные (по сравнению с обычным блокнотом) средства ввода функций и вызова справки по ним. Ну и еще по мелочи. ОСтальное - прерогатива программиста.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Цитата:
До функции дело не доходит. Проверяй скобки форматированием кусков или подпрограмм
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Offtop: На форуме не раз звучала мысль, что написание программы на LISP'е подобно написанию картины.
Отладка, скорее поддержка между делом, своих программ от 6000 до 40000 строк, созданных еще до 2005 года особых затруднений у меня не вызывает. Понимаю, я дремучий мастодонт, но новых технологий написания мне уже не освоить. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Offtop: Если бы у меня было время, я бы глянул на эти многотысячнострочные коды... Но увы
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Самое главное там с кодировкой не промахнуться, а так можно и его использовать
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Знаю о его существовании и использовании вместо штатного VLIDE.
Но позволяет ли он пошаговую отладку, выводит ли текущие значения переменных и т.п.? Когда-то давно смотрел, но он меня не поразил, ну или я что-то не заметил...
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Он просто редактор, может чуть более удобный, чем встроенный в акад. Сразу видны принадлежность скобок друг другу (во встроенном надо хоткеи щелкать), встроенный словарь операндов и т.д. Я в лиспе пишу очень мало, в основном Net и иногда простые вещи через COM в связке Excel-Акад.
|
|||
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
При отладке в стороннем текстовом редакторе для этих целей пользуюсь своей функцией, вставляя ее в код в требуемые точки останова:
Код:
где: T1 - номер точки останова, x1 x2 ... - список переменных STR, REAL, LIST, ... которые нужно проверить. Применима при отладке диалогов в action_tile при вставке в тело (strcat ... "(tect (list \"T1\" \" X1 = \" x1 \" X2 = \" x2))") |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Сугубо ИМХО: для отладки использовать лог - не самое лучшее решение. В VLIDE (если, конечно, ведется разработка именно под AutoCAD, а не под "клонкад") есть масса возможностей. Это раз. Второе: вставлять код напрямую в dcl - порочная практика. Нарисуй нормальную callback-функцию и используй ее при вызове диалога.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Цитата:
Понятно... Мне не подходит, Word получше как редактор . А для отладки VLIDE при всём его убогости
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Подскажите плиз. Как можно получить и задать определенный параметр динамического блока (в моем случае линейный)? Задумал команду для изменения длины нескольких динамических блоков на подобии stretch. Не уверен возможно ли это, а может кто-то уже реализовал...
|
||||
|
||||
начинающий инженер-гидротехник Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893
|
http://lee-mac.com/dynamicblockfunctions.html
если во время вставки блока, то: 1. http://forum.dwg.ru/showthread.php?t=18018 2. http://forum.dwg.ru/showpost.php?p=166681&postcount=36 |
|||
|
||||
Регистрация: 30.10.2008
Сообщений: 53
|
Добрый день!
Помогите пожалуйста, нужно все штриховки в чертеже поместить за их собственные контуры. LISPа не знаю, вот мои попытки: Предварительно выделяю одну штриховку и выполняю Код:
Вот еще нашел код, выбирающий все штриховки, может пригодится: Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Кто сказал, что при (ssget "_X") получаем только текущее пространство?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 30.10.2008
Сообщений: 53
|
Цитата:
Код:
Скажите, может по другому лучше сделать было? Был уверен, что в лиспе не нужно было цикла в явном виде, а просто хитро вставить одну функцию в другую достаточно |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
сразу же два примечания к коду:
1. ВАЖНО: как закончили работать с набором (s в вашем случае), так сразу его закрыли (освободили) - путем присвоения nil. Максимальное количество одновременно открытых наборов конечно, а сами они уничтожаться только при закрытии рисунка. 2. Желательно: вставить проверку набора на nil (нет штриховок) и об этом сообщать пользователю. А если набор существует - то тогда пошли обрабатывать. ну и можно вставить маркеры начала и конца блока отмены соответственно. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
Цитата:
Не можно, а нужно Ну и еще: есть command, а есть command-s. В зависимости от того, под какую версию идет разработка, это может быть критичным.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
а храниться набор или имя набора в локальной переменной? У Полещука написано, что имя набора сохраняется в переменной. А в функциях (работы с набором) фигурирует просто "набор" без уточнения.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
В данном случае хранится указатель на набор, если я правильно понимаю. При выходе из функции указатель уничтожается, а счетчик активных наборов примитивов снижается на 1.
----- добавлено через 52 сек. ----- Где-то был код (то ли на .NET, то ли на лиспе), который показывал ограничения по количеству наборов. Можно и самому сделать такой кодик.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
В общем, нестыковка с Полещуком получается по наборам. Простенький lisp
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Похоже на то. Насколько я помню, AutoCAD поддерживает до 255 уникальных наборов. Надо искать, а у меня сейчас голова уже не варит - змерз аки Маугли.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
И третье. Штриховки могут быть на заблокированном слое
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Цитата:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
kurstep, твоя команда не сработает на английской версии AutoCAD. Да и вообще работать будет только на русской.
----- добавлено через 49 сек. ----- И как она сработает, если штриховки будут еще и на заблокированных слоях, или в пространствах листов - тоже неизвестно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Хотя... Если ничего не путаю, "ПОРЯДОК" (DRAWORDER), обработает и заблокированные слои
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Vladimir_Sergeevich, если я не ошибаюсь, команда обрабатывает только текущее пространство. А ты тут приказываешь обработать и неактивные пространства.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Это тогда вопрос, что сможет подцепить sssetfirst...
Выделить то выделяет, но "Не находятся в текущем пространстве: 93."
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Inferi, а на основании чего получен вывод, что не работает? работает: на первом проходе даст nil, на втором 6, на третьем снова nil.
Ну и на выходе foreach выдает:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Код:
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
подскажите как вывести на экран обновляемое "окно" с текстом.
текст собираю, как конкатенацию текстов выбранных мышкой. хочу чтобы на экране, в процессе работы, отображался результирующий текст. Это может быть или обновляемое окно или мтекст с привязкой к координатам экрана, а не чертежа. если не с помощью лиспа, то в каком направлении искать? |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
Neo, попробуйте тут посмотреть, как сделано- http://lee-mac.com/text2mtext.html
|
|||
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
спасибо frostmourn. посмотрел, вроде даже понял как привязать текст к координатам мыши. мне бы, привязаться к кордиаминам угла видимой части экрана. пока нашел, что команда "STATUS" выдает Display shows.
пока и сделал вывод в командную строку. хочу выводить одновременно текущий и предыдущий обработанные тексты. в комстроке получается сильно загружено Последний раз редактировалось Neo, 31.10.2016 в 10:33. |
|||
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
Это проще. Здесь http://forum.dwg.ru/showpost.php?p=905056&postcount=6 функция _get-viewctr-size.
|
|||
|
||||
Имею блок панели и рамки маркера (смотри вложение).
Сам блок маркера не содержит атрибутов. Это скорее рамка вокруг атрибута самого блока панели. Намерен написать команду для быстрого выравнивания блока маркера по положению и ширине атрибута при его вставке. Предполагаемый алгоритм: 1. Получить координаты атрибута и вставить соответственно маркер. 2. Вычислить угол наклона атрибута в зависимости от угла поворота блока и угла параметра атрибута. 3. Получить ширину текста атрибута и назначить динамическую ширину блока маркера соответственно. С первыми двумя пунктами проблем не должно возникнуть. А вот как получить ширину атрибута не знаю. В зависимости от значения полей внутри атрибута ширина будет каждый раз разная. Идеи? |
||||
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Всем привет! Есть список координат '((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4)). Как вернуть (x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4), то есть как бы раскрыть внешние скобки? Была идея:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Inferi, а тебе зачем?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
А вот обращаться к подспискам этого общего списка надо уже каждый раз отдельно, например функцией nth (по номеру в списке, начинающемуся с нуля). |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Совершенно верно. А как именно - зависит от того, как организована вся программа. Надо ли отдельно по нескольку раз использовать подсписки, т.е. назначать им какие-то имена переменных (по-бейсиковски) или всё можно в одном foreach проделать (по-лисповски).
Потому Кулик Алексей aka kpblc первым делом и спросил "а тебе зачем"? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Можно, почему нет? Создаешь объект штриховки, задаешь ему OuterLoop (если не ошибаюсь), потом выполняешь Evaluate.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Delete Blocks
Lisp routine to delete blocks Lisp for filtering certain blocks and delete them Delete Block from multiple Layouts Remove / Delete Block from multiple Layouts at the same time
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Доброго времени суток! Подскажите, возможно ли запустить функцию, имя которой которой хранится в переменной. Например я использую функцию суммирования воздуховодов (duct_sum), в первом случае нужно после ее вызова открыть диалог (duct), во-втором диалог (draw_duct_reducer). Хотел передать в качестве аргумента (duct_sum / "(duct)"), и (duct_sum / "(draw_duct_reducer)") соответственно, и в конце кода функции (duct_sum) открыть соответствующие диалоги. Возможна ли такая реализация или стоит избегать таких "костылей"?
|
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Цитата:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Код:
Код:
почитал еще раз, наверное так Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Всем доброго времени суток!
Столкнулся с весьма любопытной ситуацией. Рисую полилинию с помощью vla-addLightWeightPolyline. Пока система координат лежит в одной плосткости (ось z смотрит вверх) все нормально, никаких проблем. НО! Тут столкнулся со случаем, когда пск перевернута вверх тормашками (ось z ушла вниз) и вдруг передавемый список вида Код:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
При работе с ActiveX, насколько я помню, координаты передаются в МСК. Попробуй создавать через entmake, с одновременным заданием 210 группы. Ну или потом меняй свойство Normal.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Алексей, список номер раз и так в мск. Но, при перевернутой СК, воспринимается как отзеркаленный.
Попробуй поставить (vl-cmdf "_.ucs" "_3" '(0 0) '(10 0) '(10 -10)) и отрисуй vla-addLightWeightPolyline. Я почти списал у Полещука: Код:
з.ы. действительно "Normal = (0.0 0.0 -1.0)" з.з.ы что то тут не чисто... Код:
ага, сам дурак... (0.0 0.0 1.0)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 15.11.2016 в 09:14. Причина: с одним вопросом разобрался разобрался |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я ж говорю - потом поменяй свойство Normal
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
И все ж таки интересно, почему этот vla-addLightWeightPolyline кушает координты в WCS, а нормаль цепляет текущую?
Проверку на "нормальность" результата дописал...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Уважаемые знатоки, а из можно ли из LISP залезть в открытый документ Word и что-нибудь там поковырять, например, вставить текст в таблицу, двинуть курсор? Покажите примеры, пожалуйста!
Последний раз редактировалось Nike, 24.11.2016 в 14:28. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Можно. Залезай
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Как вставить текст нашел - http://forum.dwg.ru/showthread.php?t=5993&page=2
А передвинуть курсор, например в таблице (сделать TAB) если можно, как? |
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
По твоей ссылке выше есть пример на лиспе
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Спасибо, получилось - (vlax-invoke-method (vlax-get-property msw "Selection") "MoveRight" wdCell
Ух, теперь такого натворю!! ----- добавлено через ~13 мин. ----- Натворил - из крайней правой ячейки курсор вылетает из таблицы и далее в программе ошибка. Как бы всё-таки TAB в Word передать? |
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
krok64, не, мне не надо создавать пустые строки - таблица существующая - я только по ячейкам бегаю.
так вот при Selection.MoveRight Unit:=wdCell из крайней правой ячейки курсор прыгает первую ячейку следующей строки (если строки нету то создается, как при TAB) а если я это же делаю лиспом (vlax-invoke-method (vlax-get-property ... "Selection") "MoveRight" wdCell) то курсор не переходит в следующую ячейку, а вываливается из таблицы вправо и мыргает там. Последний раз редактировалось Nike, 25.11.2016 в 15:49. |
|||
|
||||
Доброго.
Подскажите плиз как в указанной точке можно назначить цвет блоку (строка 53). Блок в списке vla-объектов (не уверен верно ли я выразился). Подопытный блок прикрепляю. *Добавил используемые функции от LeeMac **Добавил еще Нашел: vla-put-Color Код:
Последний раз редактировалось Red Nova, 28.11.2016 в 08:40. |
||||
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Всем доброго дня!
Не могу добиться обновленного отображения значений полей edit_box. При открытом диалоговом окне выполняю последовательно расчет нескольких участков. Данные каждого участка последовательно загружаются в поля edit_box. Для каждого участка выполняется расчет и ход расчета визуально отображается в диалоговом окне. Но не наблюдается обновления картинки полей edit_box диалогового окна после загрузки параметров следующего участка. Что не так? Локализированный код проблемы прилагаю: Файл tect.lsp Код:
Код:
|
|||
|
||||
Регистрация: 24.03.2014
Сообщений: 15
|
Добрый день!
Хочу задать вопрос. ----- добавлено через ~6 мин. ----- (defun c:ByTemplateM () ; Создать лист по шаблону ; Открывается диалоговое окно - Выбор шаблона из файла ; (initdia) ; !!!! - открывается диалог (command "._layout" "_template") (princ) ) Может подскажете, можно ли задать заранее на каком каталоге откроется диалоговое окно "Выбор шаблона из файла". Я посмотрела, что путь от предыдущего сеанса работы сохраняется в реестре в профиле пользователя Автокада. Спасибо, если кто-то откликнется на мой вопрос. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Пример для русского Автокада Код:
У тебя ключевое Цитата:
Код:
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 24.03.2014
Сообщений: 15
|
Добрый день!
Спасибо, что откликнулись, мне хотелось посоветоваться. Явное указание имени файла шаблона (полного пути к файлу или без него) не подходит для моего случая, т.к. файлов dwt – несколько, в данном случае эти dwt содержат шаблоны оформления листов. Параметры печати листов в одном dwt настроены на драйвер DWF6 ePlot.pc3, в другом листы тех же форматов и допустимыми формами основных надписей (согласно ГОСТ и СТО предприятия) настроены на печать через DWGToPDF.pc3. Третий файл dwt – те же листы, но настройка печати через doPDF. Есть еще dwt c динамическим блоком рамки и штампа и различными наборами для переопределения параметров печати. Хотелось, чтобы был выбор в диалоге, диалог сразу выходил на определенную папку. Хотя это, конечно, не большая проблема, папка на сервере всем известна, к тому же в диалоге "Выбор шаблона из файла" путь можно добавить в "Избранное". Просто хотят кнопку на ленте, нажав на которую, сразу получить лист, с требуемыми параметрами. Интересно поэкспериментировать с заданием пути в реестре, но, наверно, значение "InitialDirectory" будет меняться только после закрытия и повторного запуска Автокада. Все равно, попробую. ! Большое спасибо за ссылку на "Steal from Drawing". Как раз с этой программой попробую сейчас поработать. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Здравствуйте! Совсем не понимаю в лисп, но хотел бы спросить возможно ли создать по данной методике лисп для построения аксонометрических схем? Метод не знаю кому принадлежит но ОГРОМНОЕ спасибо тому кто это придумал!!
1.Повернуть систему на 315 гр.; 2.Сделать блок, либо скопировать и вставить как блок; Вызвать, если нет панели «Свойств». Вызов панели Ctrl +1. 3.Выделить блок; 4.В панели свойств в пункте «Геометрия (Geometry): Строка масштаб Y (Scale Y) задать 0,4142 5.Пункт «Прочее» (Misc) строка Поворот (Rotation) 22,5 6.Увеличить (Scale) весь блок в 1,306569 раз. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Maksim7enov, наверное, возможно. Попробуй.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Maksim7enov, а имеющийся на форуме лисп Gakson не подойдет?
Последний раз редактировалось skkkk, 06.12.2016 в 15:28. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Спасибо сейчас посмотрю. Я макрос сделал но там с масштабом проблема сейчас ее решаю. Проблема макроса в том что надо еще 2 раза выбирать объект я не понимаю как автоматически сделать выбор нужных объектов. Не получается масштаб к нему приделать. Макрос выкладываю может кому и понадобится
Код:
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Вообще интересно стало, что это за схема манипуляций с блоком такая. Реализовать подобный алгоритм довольно просто, однако я решил проверить все по пунктам - результат мне не понятен. То ли я неправильно делал, то ли у нас с автором этой методики разные понимания об аксонометрии. Результаты изобразил во вложении. Может, стоит уточнить, также об аксонометрии ЧЕГО идет речь?
|
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
У меня все получается. Беру объекты, поворачиваю на 315, потом создаю из них блок и меняю масштаб по Y и поворот. Масштабирую и все. Просто хотелось самому создать и все. Буду благодарен если подскажите в моем макросе возможно сделать так чтобы при масштабировании не выделять объекты а сослаться на ранее сделанный блок? т.е убрать лишний раз движение рамой выделения?
----- добавлено через ~10 мин. ----- Макрос доделал. Если кто будет пользоваться (хотя сомневаюсь) то вот: Код:
|
|||
|
||||
Ку!
Почему vla-move у меня не работает? Или как иначе передвинуть объекты? Файл в аттаче. Код:
__________________
Блог |
||||
|
||||
Спасибо. С этой частью ясно. Возникла другая загвоздка. До того лисп выглядел несколько иначе и я перемещал блоки командными методами. То есть как-то так:
(command "_.move" blkselection "" "_non" '(0. 0. 0.) "_non" (cons dxpt '(0. 0.))) При этом я менял координатную систему по текущему блоку, и тогда, все вычисления и перемещения проводились просто по оси Х. Но при применении vla-move перемещение происходит в глобальной системе координат. Есть вариант заставить работать vla-move в пользовательской системе координат? Текущий вариант кода. Пример с пояснением в аттаче. Код:
__________________
Блог |
||||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Всем привет. Помогите люди знающие. Попытался модифицировать один лисп под себя, но не смог его заставить работать. Программа должна включать и отключать определенные слои. При вызове команды выводится список определенных, существующих слоев, далее выбираем нужный слой, и если его текущее состояние - выключен, то происходит его включение. И наоборот, если слой отключен, он должен включиться. Что тут не так?
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
У тебя полная путаница с if и progn
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Psyakrev, Спасибо, попробую
__________________
Блог |
||||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Browning Zed, А как ты узнаешь, отключен слой или включен?
Пробуй так Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Цитата:
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Изучай объектную модель. И учти, что заморозить / разморозить активный слой невозможно. Понадобятся дополнительные проверки.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Доброго времени суток, подскажите возможно ли обратиться к командной строке windows из под лиспа напрямую? На ум приходит запускать батник из лиспа, результат сохранять скажем в блокнот, а оттуда считывать данные. Всего то нужна одна строчка "WHOAMI /FQDN"
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А чем не нравится нечто типа (getenv "userdomain")?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Здравствуйте. Пытаюсь распечатать лист через команду PLOT
Код:
Даже пробовал преобразовать в строку, что бы получилось х1,y1, но ему тип переменной не понравился. Кто подскажет как правильно ввести координаты точек? Последний раз редактировалось Alexll, 17.12.2016 в 08:42. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
http://aco.ifmo.ru/~nadinet/html/lectures/lect_7.html и в этой теме почитай с поста #127
Можно поинтересоваться как?
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 17.12.2016 в 19:56. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Кто-нибудь знает, почему в AutoCAD 2011 функции, загруженные пользователем из LISP-файла определяются системой как SUBR, хотя в документации четко обозначено, что должны бы быть USUBR?
Простейший пример (прошу проверить возвращаемое значение, у кого есть возможность): Код:
Код:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Вот лог командной строки Автокада
Цитата:
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Доброго и с праздниками! Есть кто трезвый?
Имею динамический блок, у него есть полярный параметр. Ищу возможность вставить блок командой с указанием двух точек, но при этом хочу чтобы после указания первой точки блок "висел на курсоре" По аналогии с прорисовкой обычной линии, после указания первой точки линия следует за курсором. По сути нужно после вставки блока взяться за грисп нашего полярного параметра и указать вторую точку. Могу написать похожий код но без "висения на курсоре". Подскажите плиз возможно ли это реализовать лиспом? Подопытный прикреплен.
__________________
Блог Последний раз редактировалось Red Nova, 07.01.2017 в 07:01. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Всех студентов и преподавателей с праздниками!
Привет, Red Nova! Неужто вы там уже работаете во всю? Насчет трезвых очень не уверен, но на безтрезвье и я трезвый Цитата:
Думаю, тебе надо копать в сторону чего-то посерьезней, например, технологии JIG, через .NET. Но в частном случае с твоим "подопытным" все не так плохо: выставляешь программно PLINEWID в нужное значение, а затем инициируешь отрисовку полилинии, программно задав первую точку и интерактивно запросив вторую, берешь длину созданной полилинии и назначаешь ее блоку, разумеется, в конце полилинию удаляешь. Если важен цвет такой отрисовки, то он хранится в настройках во второй вкладке под кнопкой "Цвета". В свое время пытался изменять его программно лиспом (здесь) - у меня не получилось. VVA, да, я нашел то же самое, но в решении моего вопроса это совсем не помогло. Видимо, единственным вариантом остается исключать все автолисп-, vla-, acet- и т.д. функции, и выдавать все, что осталось. Не сказать, что задача неподъемная, но думал, что можно это решить правильней. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Получить точку ввода через grread в принципе не проблема, но возникнут вопросы при обработке привязок. Насколько я помню, на theswamp.org было решение от Евгения Елпанова.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Спасибо за советы
skkkk Цитата:
Цитата:
Кулик Алексей aka kpblc По моему я нашел тему Елпанова что ты описывал, вот она https://www.theswamp.org/index.php?topic=12813.0 Просмотрел бегло, но пока не нашел как grread может ухватить за "grip" динамического блока. Добавил. Скорее всего бред, но пришла такая мысль. Возможно ли программно как бы кликнуть в указанную координату? Тогда можно было бы вставить дин. блок а затем задать клик туда где у него "грип". ???
__________________
Блог Последний раз редактировалось Red Nova, 08.01.2017 в 01:39. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Цитата:
Цитата:
Тут опять же предварительно возникнет вопрос: как программно перенести курсор в нужную точку? Лиспом мне это тоже в свое время не удалось (и тут на форуме обсуждалось). Знаю только, что можно зумировать (или панорамировать?) экран под текущее положение курсора, вычислив его с помощью функции grread. Но это все уже начинает выглядеть, как танцы на костылях, но без бубна, потому что руки уже заняты. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Когда-то на autolisp.ru я пытался рассмотреть вариант "динамического" изменения примитивов. Почему не применить подобный подход здесь же - не понимаю...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Код:
__________________
Блог Последний раз редактировалось Red Nova, 09.01.2017 в 03:37. |
||||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Подскажите пожалуйста как программно сделать так чтоб при выборе графического объекта автокада выделялся сразу и зависимый объект (эти два объекта нужно заранее также программно сделать зависимыми ) (команда группа не подходит так как хочется сохранить ручки редактирования объектов)
Последний раз редактировалось kurstep, 09.01.2017 в 16:44. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
подвеситься на событие изменения выбора. А если будет выделено несколько объектов, а зависимые от них объекты находятся в разных частях чертежа - куда будет "дергаться" ВЭ?) Или отмасштабирует так, что ничего не будет видно толком?
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
я на лиспе фактически не пишу, поэтому могу скинуть только пример на Net.
----- добавлено через ~17 мин. ----- Полещук любезно сообщает в своей книге, что это событие SelectionChanged . Ищите в реакторах либо документа, либо редактора скорее всего. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Тема в FАQ Реакторы - что это такое? ----- добавлено через ~2 мин. ----- Пример http://lee-mac.com/dtcurve.html
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 12.01.2017 в 12:11. |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Спасибо, но мне нужно чтоб зависимый объект не перемещался за основным, а именно выделялся - т.е событие Selection Change - проблема в том, что ни в справочниках, ни у Полещука не могу найти реактор для этого события, А может ли быть такое что на Autolisp его нет, и надо программировать именно на VBA?
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
|
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
О!! Спасибо, то что надо -выделяются объекты группы и ручки остаются, спасибо, все легче чем я думал)
Но если кто-нибудь все-таки подскажет как решить проблему с помощью реактора буду рад Последний раз редактировалось kurstep, 11.01.2017 в 11:45. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
1. Выделяем нужные объекты, вызываем команду (функцию), которую предварительно следует написать. Она создаст в чертеже информацию о том, какие элементы входят в нашу импровизированную группу. Каждый раз при ее вызове будет создавать новую запись. Где? Надо выбрать: пользовательские словари чертежа (ldata), пользовательские свойства документа... может еще варианты придумаются на второй взгляд. Если нужно в пределах сеанса, то просто запоминаем каждый набор в глобальной переменной.
2. Создаем реактор "прочих" событий (miscellaneous reactor) на событие pickfirstModified (предварительный набор объектов изменен): Код:
Код:
|
|||
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
Цитата:
Последний раз редактировалось frostmourn, 12.01.2017 в 02:11. |
|||
|
||||
frostmourn
Спасибо за помощь! Огорчает что osnap тут неполноценный и не реагирует на все привязки. Еще нет поддержки ortho / polar. А без этого теряется смысл использовать такую команду. Поняв что grread изначально не работает с привязкой я и подался в общий раздел .
__________________
Блог |
||||
|
||||
инженер-конструктор Регистрация: 24.08.2016
Санкт-Петербург
Сообщений: 1
|
Здравствуйте! Имеется макрос ^C^C(SetQ Cl (Getvar "Clayer"));-Layer;Set;arrow;^C_QLEADER;\\\^C(Setvar "Clayer" Cl) (создает пустую выноску в нужном слое, и возвращает предыдущий активный слой)
Очень хотелось бы создать лисп его заменяющий. Сначала, вдохновившись темой http://forum.dwg.ru/showthread.php?t=136285 пыталась использовать (command "_.QLEADER") в лиспе, но не разобралась как остановить выполнение qleader после задания 3х точек, чтобы он не запрашивал текст, его высоту. Теперь обдумываю возможность создания нового примитива через entmake, c запросом точек, и извлечением текущего разм. стиля. Буду благодарна если кто-то вразумит новичка в lisp |
|||
|
||||
Как проверить имеет ли REAL число только нули после запятой? То есть может ли оно быть превращено в INTEGER и не потерять своего точного значения?
Пример REAL 4.000 точно равно INTEGER 4 REAL 4.010 не равно INTEGER 4
__________________
Блог Последний раз редактировалось Red Nova, 15.01.2017 в 22:11. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Red Nova, ты путаешься в показаниях типах значений. int не может быть 4.01
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
kpblc, Верно, я имел ввиду с точностью до наоборот. Поправил. Глянь снова вопрос плиз.
Вопрос возник когда я делил два числа друг на друга и после должен был определить имеет ли результат остаток или нет. Пока что не сумел... То есть 95.000/24.000 = 3.958 - есть остаток 96.000/24.000 = 4.000 - нет остатка
__________________
Блог Последний раз редактировалось Red Nova, 15.01.2017 в 22:24. |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Red Nova, на вскидку - то, что первым пришло в голову: выставляешь DIMZIN в 8, а затем "щупаешь" число функцией rtos (кажется, максимальное количество знаков после запятой, поддерживаемое AutoCAD'ом - 16). При таком раскладе все незначимые нули убираются и возвращается строка. Если в этой строке есть точка, значит число было нецелым.
Либо equal с нужным допуском. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Red Nova, а чем теме rem не нравится?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Глянул ради интереса у Полещука - он пишет "Символ языка LISP может менять в ходе своей программы тип своего значения". А при какой абсолютной величине дробной части числа оно перестает считаться вещественным? Наверняка заложена какая то константа в самом языке.
|
|||
|
||||
skkkk,
Сперва я тыкал DIMZIN и rtos, но что-то наверное делал не так раз не получалось. kpblc А как тут rem может помочь? В итоге сделал так: Код:
__________________
Блог Последний раз редактировалось Red Nova, 16.01.2017 в 00:07. |
||||
|
|||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Я тут тоже глянул...
Цитата:
Цитата:
----- добавлено через ~8 мин. ----- Цитата:
Цитата:
Ну получилось то, чего хотел? Я просто изначально не вполне понял практической сути вопроса. |
||||
|
||||
Цитата:
Цитата:
Наверное можно и покороче с rem что-то написать, но мне и так сойдет.
__________________
Блог |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Я думаю это примечание надо читать в более глобальном смысле - если более заумными словами - LISP язык с динамической типизацией.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
Открыть файл, пройтись по коллекции блоков. Один из вариантов решения - ObjectDBX
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
VVA, познакомился я как-то с этим "стилом" - выяснил один не очень приятный момент. Пробовал я "выкрасть" из файла типы линий, так он почему-то принимает имена типов линий только "в лоб" - в чистом виде, в кавычках и прямо, только строку - переменную как символ мне ему скормить мне не удалось. Это когда я допиливал программу для копирования объектов из внешней ссылки в файл. Она вылетала при попытке скопировать линию, тип которой не определен в текущем файле. Так и пришлось "красть" все типы линий. Надо будет, кстати, выложить получившееся чудо в соответствующей теме....
Offtop: VVA, кстати, цитата - не моя . |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А что ты собираешься сравнивать? Если на индентичность - то equal и вперед.
----- добавлено через ~3 мин. ----- Хотя, возможно, удастся обойтись и простым "="
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Подскажите плиз, как разделить selection set на два?
Нужно выбрать один раз рамкой объекты на чертеже, затем из выбранного все блоки собрать в ssetA, а все полилинии в ssetB. Если сделать по очереди и выбрать два раза то все понятно: Код:
__________________
Блог |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Red Nova, пожалуй самый простой для понимания вариант - безо всяких "лямбд" (припоминаю, что ты их не очень любил) и сторонних функций - будет примерно таким:
Код:
Полагаю, кто-нибудь решит эту задачку за пару-тройку строк. |
|||
|
||||
skkk, Спасибо за столь подробный ответ . Переварил, переосмыслил и вот сделал по своему.
Цитата:
Код:
__________________
Блог |
||||
|
||||
Дима_ Да уж, это по сложнее будет ))
__________________
Блог |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
(lambda ...) возвращает функцию, соответственно ((lambda ...) arg...) запускает ее с аргументами arg..., между первой и второй скобкой можно поставить любую функцию которая принимает функцию как аргумент.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
roaa
Спасибо, Коротко. Но пару вопросов. 1. В чем смысл зуммировать?: (vl-cmdf "_zoom" "_o" sset "") (vl-cmdf "_zoom" "_p" "") Работает и без этого. 2. Правильно ли я понял что (sssetfirst nil sset) отключает выбор рамкой и ssget берет предыдущий выбор за основу?
__________________
Блог |
||||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
Выбор ssget происходит на видимой части экрана, поэтому зуммируем выбранное (после возвращаем к исходному виду). (sssetfirst nil sset) производит выделение набора sset, а ssget подхватывает... как-то так.
В виде функции: Код:
Последний раз редактировалось roaa, 06.02.2017 в 22:17. |
|||
|
||||
Спасибо. (sssetfirst nil sset) оказалось очень полезна. Вроде как логика ясна.
Но на счет зуммирования не убежден, так как работает и без этого.
__________________
Блог |
||||
|
||||
Всем ку!
Подскажите плиз со следующей задачей. Требуется запросить ввод у пользователя. Ввести разрешено либо число/букву (и числа и буквы могут быть и двузначными), либо список из нескольких чисел/букв разделенных запятой и/или пробелом Затем введенное нужно перевести в список из strings. Пример 1 Вводим: F, 1, 2, LW Получаем: ("F" "1" "2" "LW") Пример 2 Вводим: 20 a Получаем: ("20" "a") Пример 3 Вводим: R1 Получаем: ("R1") Могу начать так: (getstring T "\nyour prompt:") и получить string типа։ "F, 1, 2, LW" Как можно дальше раздробить "F, 1, 2, LW" на список? ----- добавлено через ~3 ч. ----- Нашел вариант у Lee Mac-а․ Не совсем то, но подстроиться можно.
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну дык... Либо initget + getkword, либо создавать диалог и выбирать в нем.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Спасибо, учту
__________________
Блог |
||||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
|
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Нашел мастер-класс 2014-ого от А. Кулика. Там есть пример с командой _purge
Вроде идея описанная в статье понятно, но почти сразу начинается головная боль. Во-первых он (приведенные код) не работает (может опечатка в PDF) _o - мне автокад называется неверным ключом... Во-вторых, не понимаю, зачем вводить другие ключи если мы уже указали _a - т.е удалять все объекты. Вот код чтоб было понятнее. Не вижу разницы в работе этого (за исключением ошибки с _o) Код:
Код:
Готов пойти по всем ссылкам куда пошлете и читать книги =), чем в принципе и занимаюсь в последние дни. Просто такие странности в чужом коде в самом начале пути ставят в тупик, начинает казаться, что вообще ничего не понимаю. И еще маленькие вопросы, в диалоговом окне purge есть галочка "удалять вложенные объекты" - как ее командно активировать? Я правильно понимаю, что ключи к любой команде можно посмотреть только вызвав ее через - и дальше искать заглавные буквы или есть какие-то "списки"? Последний раз редактировалось Immortal_6666, 14.02.2017 в 19:22. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Immortal_6666, почему-то в последнее время нигде не могу найти список английских команд с опциями, раньше точно были они в онлайн-справке к AutoCAD 2010 - теперь там лишь какие-то скудные описания. Поскольку последнее время почти отошел от командных методов, давно не приходилось искать. Если кто ткнет в ссылку, буду признателен.
Скажу точно, что опция "_r" чистит зарегистрированные приложения, которые не чистит опция "_a". Про остальные опции из кода выше сказать не могу, т. к. неясно, какая из букв кажлой опции - заглавная, но видимо, они также не чистятся при выборе "всего". Если скинешь полный список опций этой команды, будет яснее. Черточка означает вызов команды в бездиалоговом режиме (в режиме командной строки), если таковой для команды имеется. Это как раз для программной работы, без чертечки выскочит окно. Точка - это гарантированный вызов родной автокадовской команды, если вдруг она переопределена пользователем на свое усмотрение. |
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Цитата:
А насчет черточки - я понимаю, что она делает, но в коде без нее тоже никаких окон нет. Я использую режим с черточкой, чтобы предварительно "подсмотреть" ключи команд перед написанием макроса. Но не понимаю, зачем ее включили в данный код - с ней в командной строке выводится целый том войны и мира, без нее лисп работает "тихо", но тоже работает и без диалоговых окон. Ключи описаны в файле (он в открытом доступе лежит, думаю, автор не будет против, что я приложу его сюда), данный пример - страницы 5,6. Главный вопрос, наверное, как догадаться, что purge с ключом "все" чистит на самом деле не все и что нужно вызывать ключи _r и другие? Последний раз редактировалось Immortal_6666, 14.02.2017 в 20:01. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
На тот момент, если не ошибаюсь, у меня было несколько файлов, в которых очистка "всего" не удаляла ни пустые тексты, ни нулевую геометрию, ни т.н. "Связанные данные" (они же AcDgnLS). Почему так получалось - не помню, но для гарантии и перестраховки дополнительно ввел соответствующие ключи.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Я, например, часто как раз предпочитаю проконтролировать, что удалилось. Например, когда потёр ненужные блоки с чертежа, проверить: а удалились ли они из базы или я стёр не все? Цитата:
----- добавлено через 56 сек. ----- Вот Алексей уже сам и ответил. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Он не упразднен, он появился только в 2015 версии, если не ошибаюсь.
P.S. Вообще говоря, уже достаточно давно предпочитаю обходиться некомандными методами Контроля больше
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
http://adn-cis.org/forum/index.php?topic=709.0
http://adn-cis.org/forum/index.php?topic=2617 "Что это такое и откуда берется" - на русском информации мало: https://www.google.ru/webhp?hl=ru&sa...%D0%B2+autocad По моим ощущениям, это последствия перегона данных из Microstation (кажется) в dwg.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Спасибо, Алексей, понял. Это DGN. У gomer'a в CleanDWG есть очистка от типов линий DGN. И она отрабатывает в 2011-м с результатом "Стили линий dgn не найдены". А вот опции "_O" в purge нет. Мне пока не приходилось с ними встречаться в чертежах.
|
|||
|
||||
Регистрация: 23.09.2016
Сообщений: 4
|
Добрый день!!
Подскажите, пожалуйста, как быть. В чертеже создаю блок. Начинаю "вскрывать" его - выдает ошибку. Если этот блок скопировать, то скопированный блок будет так же выдавать ошибку. Но, если применить тот же код для исходного блока, то все работает. Прикладываю код - он чисто для проверки. Блок тоже в прищепке. Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Что ты хочешь получить? В каком месте ошибка? Какая ошибка?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 23.09.2016
Сообщений: 4
|
Доброе утро!
Ошибка: неверный тип аргумента: lentityp nil. - выскакивает в 13 ой строке. Код - часть приложения, которое собирает блоки в кучку по списку с графической базы данных - просто убрал все лишнее. Может что не то у меня с автокадом? На предприятии несколько версий, везде лицензия и везде похожая ситуация периодически возникает. Ошибка выпадает только в последнем созданном в этом чертеже блоке. И, что самое странное, когда просто копируешь этот блок рядышком - все начинает работать. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Тебе что от блока надо? На данный момент ты просто получаешь (зачем?) ename-указатели на элементы набора. Если не удается обработать последний примитив (а так и должно быть - ведь следом за ним вообще ничего нет), оно тебе вываливает ошибку.
Тебе сконвертировать набор в список примитивов надо, что ли?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 23.09.2016
Сообщений: 4
|
Давай сначала. Допустим, я ищу в блоке определенную надпись. Для того чтобы до нее добраться - я должен проковырять весь блок. Здесь все упростил, чтобы "обкатать" на простом примере. Обычно все работает, но в этом случае код не проходит весь цикл ни разу - вылетает ошибка. Судя по тому что возникают вопросы - у тебя все работает и в конце вылетает окошко "все ок". Стало быть дело либо в моем автокаде, либо в моем компе.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Опять путаница между описанием блока и вхождением блока. https://www.google.ru/search?q=%D1%8...fIH8WS6ASpw5Ag
----- добавлено через 13 сек. ----- Хоть статью пиши, ей-богу! ----- добавлено через ~33 мин. ----- В качестве первых набросков: http://autolisp.ru/2017/02/18/blockdef-and-blockref/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.02.2017
Сообщений: 9
|
Всем доброго времени суток!
Совсем недавно начал пробовать писать что то в лиспе, поэтому не совсем представляю себе его возможности. Кто в курсе, скажите, есть ли возможность написать такого типа программу: Есть огромная база чертежей *.DWG. Каждый чертеж имеет название в формате aaaaaa.bbbbbbb*.dwg где : аааааа - номер машины bbbbbbb - номер чертежа * - любые символы(или их нет) чертежи разложены по папкам с путем ...\аааааа*\... где : аааааа - номер машины * - любые символы. Есть файл спецификации, в котором, помимо прочего, есть, в виде текста, номера чертежей. Вот так это выглядит: То есть, например чертеж 543011.2801043(с картинки) будет иметь такой путь: ...\543011*\543011.2801043*.dwg Есть ли у лиспа такие возможности, что бы при клике на номер чертежа в спецификации, данный чертеж открывался в новом окне? |
|||
|
||||
Регистрация: 23.09.2016
Сообщений: 4
|
Доброе утро!
Алексей, спасибо за статью. Постараюсь запомнить. А теперь для "особо одаренных" (для меня). Как мне это поможет с вышеуказанным кодом? Код не работает с последним созданным/скопированным блоком в чертеже. Попробуй прогнать его на блоке который прикреплен - выдает ошибку, но если этот блок скопировать или создать еще один, то на первом блоке все будет работать, а на новом - нет!! Вот, собственно в чем вопрос. Пробовал повторять это на двух разных компах - результат тот же. Последний раз редактировалось I_g_o_r, 20.02.2017 в 20:16. |
|||
|
||||
Регистрация: 08.02.2012
Сообщений: 16
|
Добрый день, ищу решение проблемы: есть созданная методом Autolisp таблица в файле dwg, пытаюсь родной командой "-TABLEEXPORT" экспортировать ее в csv. формат , но у некоторых ячеек при экспорте слетает формат ячеек ( вместо текстовый-числовой). Связанно ли это с стилем таблиц Автокада, либо может быть c Excel?
Код:
|
|||
|
||||
Регистрация: 17.02.2017
Сообщений: 9
|
kurstep, Я знаю про гиперссылки. Дело в том, что, как я говорил, архив огромный, отредактировать каждый лист спецификации, вставив гиперссылку, нет ни возможности ни желания. Именно поэтому я и хочу сделать так, что бы программа "анализировала" именно текст и искала файл.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Romazn, спецификация в чем хоть? Сделайте нормальное вложение, а не ссылку куда-то на гугл-диск)
Если хотите какой то реакции на ходу - вешайтесь на реакторы/обработчики событий. Либо парсить текст в спецификациях и при наличии по сгенерированному в процессе парсинга имени файла вставлять гиперссылки. И прогнать архив через эту программу. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Народ, подскажите, а то я уже всю голову сломал. Должна получиться программа, "реставрирующая" взорванную полилинию (ну, или хотя бы её очертания) из отдельных отрезков. Вот код:
Код:
Код:
Но как тогда по-другому сформировать циклом список списков с координатами точек полилинии? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А почему не использовать append или cons?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
У cons функционал в данном случае аналогичен list. Если брать append, то да, список формируется (но не список списков, а обычный линейный). И проблема в том, что _.Pline его как-то по-своему воспринимает и рисует что-то совсем не то. Если же вручную создать список по типу ((1 1 0) (2 2 0) (3 3 0)), то полилиния выстраивается корректно.
Если же, действительно, брать append, то на выходе из цикла будем иметь список вида (1 1 0 2 2 0 3 3 0), из которого нужно будет получить список списков... Тоже та ещё задачка. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Работает! Спасибо, дружище!! Теперь полилиния рисуется по точкам. Немного причудливо, ну да это ерунда. Сейчас сделаю сортировку - и оно должно залетать.
UPD. Никакая сортировка тут не понадобилась. Я просто поменял местами 10 и 11 dxf код. Со взорванной полилинией работает идеально. Хотя, конечно, из произвольных отрезков линию не соберёт. Код:
Последний раз редактировалось Enik, 24.02.2017 в 15:38. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Есть пара моментов:
1. Насчет "прополки полилинии" не уверен, что она встроена. 2. После получения координат можно (и, скорее всего, нужно) удалять дубликаты 3. Полилинию наверняка проще и быстрее будет создавать через entmake или vla. 4. И, наконец, последнее: грабли, здрасьте!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Цитата:
2. Тут проблема не только в этом... См. ниже. 3. Мне, чайнику, разницы не видно Может, и проще. Всё равно пока что не умею. 4. Ого, а вот за это спасибо! Добавил включение/отключение привязки в код. Разницы не заметил, правда, ну да пускай будет, раз оно так правильнее. А теперь о главном. Штирлиц никогда не был так близок к провалу: В общем, контур-то полилиния отображает верно. Но при попытке манипуляции с ней возникли проблемы. Команда ПОДОБИЕ выдаёт какую-то дикую ... хрень. Стал разбираться. Выяснилось, что в некоторых местах полилиния начерчена взад-назад, как ручкой по одному месту. Скорее всего, до взрыва там была не одна полилиния, а несколько, начерченные одна поверх другой. В общем, буду разбираться. Планирую сделать следующее: а) удалить все совпадающие вершины б) сделать запрос на крайнюю точку будущей линии в) отсортировать список, чтобы в нём последовательно стояли точки, находящиеся друг от друга на минимальном удалении. Мда... со школы помню: сколько элементов в списке, столько и будет итераций в цикле сортировки. В моём случае - 2500 отрезков, 5000 точек. Что ж, придётся компу повисеть минуту-другую. Друг вариантов пока не вижу. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Доброго. Непонятка с vla-endundomark vla-startundomark. Вроде в других кодах работает а тут нет. Команда создает по точкам выбранных полилиний блоки. Но при undo удаление созданных блоков происходит по очереди а не гурьбой. Подскажите плиз что не так. Файл примера и используемые функции от ЛиМака во вложении.
Код:
__________________
Блог |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Red Nova, это потому что ты ставишь метку отмены после того, как искусственно прерываешь ход выполнения своей программы функцией *error*. Фактически, до строк 124-125 код у тебя не доходит никогда и ни при каких условиях.
Я вижу, ты понимаешь, что искусственный вызов ошибки очень удобен: не нужно два раза повторять одни и те же куски кода для возврата системы в первозданное состояние - она в него вернется и в случае непредвиденной ошибки. Меня этому (в том числе) в свое время научил gomer, подвергнув жесткой критике один из моих кодов, за что ему пребольшое спасибо. Понимать - понимаешь, а про метку почему-то забыл Вставь ее в тело *error*. |
|||
|
||||
skkkk - Спасибо. Ох и нубас же я
__________________
Блог |
||||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Доброго времени года!
Вот тут нашёл код для сортировки списка точек от LeeMac: Код:
Цитата:
Как быть? Координаты неизбежно нужно округлять? Или есть ещё варианты? Потому что округлять не хотелось бы. Это как-то... неправильно что-ли. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ты как вызываешь код?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Что за kpblc_list? Что за sortenlist?
Есть разница между вызовом sort: (sort '((0. 0. 0.) (10. -10. 0.) (20. 20. 0))) (sort '(0. 0. 0. 10. -10. 0. 20. 20. 0)) Первый сработает, второй (естественно) выдаст ошибку.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Виноват. Начнём по порядку. Чтобы без всяких яких и с понятными обозначениями функций.
Вот весь код: Код:
Выделяем отрезки (полученный из взорванной полилинии или нескольких, наложенных друг на друга), получаем координаты их начала и конца, загоняем координаты в список вида ((1.002 2.01 0) (4.04 2.07 0) ... ), дальше сортируем координаты точек внутри списка таким образом, чтобы по ним можно было нарисовать полилинию, не пересекающую саму себя. То есть, берётся первая точка - элемент из списка, и среди оставшихся точек-элементов выбирается ближайшая к ней. и т.д. Потом рисуем по этим точкам полилинию. Но сейчас оно не работает. Функция для сортировки списка координат точек стопорится, когда встречает вещественное число с плавающей точкой. Материалы взяты отсюда Формирование списка - http://forum.dwg.ru/showpost.php?p=1...postcount=3269 Сортировка списка - http://www.cadtutor.net/forum/showth...l=1#post417660 |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
(setq dots_set (sort (dots_set)))
и (setq dots_set (sort dots_set)) Разные вещи. ----- добавлено через ~2 мин. ----- И чем тебе так не угодил _.pedit?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Вариант без командных методов:
Код:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Цитата:
Теперь попробую добавить указание крайней точки полилинии + прикручу прополку. ----- добавлено через ~1 ч. ----- Ну, в общем, рабочий код получен. Алексею большое спасибо! Код:
Для прополки полилинии проще всего использовать встроенную команду в автокаде или PL-VxRdc из https://dwg.ru/dnl/607 . Не стал эту красоту своими ручонками кромсать. Да и зачем, когда есть корпоративные стандарты двжру? Дальше буду пробовать использовать различные варианты кода и сравнивать их по быстродействию (в некомпилированном виде). Ещё буду разбирать по существу отдельные строчки кода. А то порой кажется, что шмель летать не должен так оно в принципе невозможно. А оно работает и плюёт на Enik'а. Наверное, это особенности AutoLisp. Интересный язык, однако. Последний раз редактировалось Enik, 03.03.2017 в 17:08. |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Есть необходимость доработать автоматическое заполнение таблицы автокад в виде спецификации. На просторах Рунета нашел отличный код, который позволяет делать спецификацию для выбранных элементов, теперь необходимо, чтобы вместо имени блока в строку наименование, он прописывал название видимости, а в столбцы "наименование" и "гайки" прописывал соответвующие атрибуты, в столбец "длина" прописывал длину если таковая есть. Догадываюсь что сделать это весьма несложно, но в LISP-программировании я нуб. Буду благодарен за любую помощь.
Еще интересует возможность доработки данного LIPS для создания аналогичной таблицы во внешний EXEL-файл. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Вы выбрали неплохой пример, чтобы начать изучать LISP. Насколько вижу, в данном лиспе есть все необходимые для озвученной задачи примеры - получение атрибутов, состояния видимости, вставка и заполнения таблицы и т.д. Как выгрузить данные в эксель - примеров тоже более чем достаточно - например. И напоминаю про ветку для новичков в лиспе.
|
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Добрый день, отписался в новой теме, но меня перенаправили сюда:
Есть необходимость доработать автоматическое заполнение таблицы автокад в виде спецификации. На просторах Рунета нашел отличный код, который позволяет делать спецификацию для выбранных элементов, теперь необходимо, чтобы вместо имени блока в строку наименование, он прописывал название видимости, а в столбцы "наименование" и "гайки" прописывал соответствующие атрибуты, в столбец "длина" прописывал длину если таковая есть. Догадываюсь что сделать это весьма несложно, но в LISP-программировании я нуб. Буду благодарен за любую помощь. P.S. Еще интересует возможность доработки данного LIPS для создания аналогичной таблицы во внешний EXEL-файл. В данный момент LISP код читает только блоки первого уровня, любопытно рассмотреть вариант выгрузки в таблицу блоков вложенных в другие блоки. Код:
Код:
|
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Это же моя программа отсюда, только кем то переделаная
http://forum.dwg.ru/showthread.php?t=132979 Имя блока вставляется только для тех блоков, к которым не была ранее применена функция setspecification С помощью команды setspecification можно настроить любой блок, что бы он в спецификацию что угодно выдавал. Можно в строки "Название", "Код", "кол-во" вставлять autolisp код, который будет возвращать нужную информацию. В момент исполнения функции specification этот код из блоков исполнится и вставит в таблицу то что нужно. Например у меня в блоках вставлены такие строки: Код:
Код:
Скинь свои блоки и укажи, что должно выдаваться в спецификации, я попробую сделать для примера один или 2 блока тебе. Последний раз редактировалось valerik88, 21.03.2017 в 12:41. |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
valerik88, а можешь расписать что куда именно прописать нужно(хочется самому научится ловить рыбу, т.е. попробовать понять ка как это работает, чтобы если необходимо будет внести какие-то корректировки самому можно было сделать), передо мной стоит задача - сделать чтобы несколько кнопок, которые немного ускорят мою работу:, т.е. хочу добавить потом ещё 2 аналогичные команды, отличатся будут они только определенным атрибутом - в столбце артикул. Но это все лирика, сейчас подробнее по примеру:
Нужно чтобы в столбец "обозначение" прописывалась "видимость" блока, в столбец "артикул" атрибут "_Article_galv", В столбец "длина" соответственно длина блока(если есть), ещё наверное условие какое-то нужно сделать, чтобы отдельно считались и нумеровались одинаковые блоки с разной длиной, также вопросы по lisp-таблице, как шрифт на программном уровне поменять и сделать чтобы длину таблицы не нужно было показывать а только точку вставки, длина автоматически по ГОСТ 1850мм. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Sergey91@06, Вот сделал для примера 1 блок
Что бы всё понять, примени команду setspecification для блока, увидишь, что каждое поле вычисляется отдельным кодом: Для наименования - ((LM:getvisibilitystate vla)) вставляет в спецификацию значение видимости блока для кода - ((getpropertyvalue name "AcDbDynBlockProperty_Article_galv")) - вставляет атрибут _Article_galv для единиц измерения - ((rtos (getpropertyvalue name "AcDbDynBlockPropertyРасстояние5") 2 0)) - вставляет длину консоли В твоей программе добавлены столбцы Длина и Гайка, но в программе в них ни чего не заносится, поэтому для примера я вставил в поле Ед.изм. значение длины. Что бы вставлялось в нужное поле, придётся программу дорабатывать, но это время, поэтому я только советом помочь смогу. Стоит отметить, что программа не совсем безопасна, т.к. в блок можно добавить любой код, который выполнится при использовании команды specification, поэтому предполагается, что программа для личного пользования и брать чужие блоки не безопасно. Цитата:
Код:
Цитата:
Код:
Цитата:
Последний раз редактировалось valerik88, 22.03.2017 в 10:58. |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
valerik88, спасибо огромное за разъяснения. в общем и целом понял как работает данный LISP(т.е. есть несколько переменных которым мы даем соответствующие значения атрибута, после чего выводим в таблицу), программа очень хорошая, но меня как я теперь понял интересуют более простые и приземленные вещи. Например есть у меня база блоков, штук 300, я переименовываю в них атрибуты, чтобы одинаково назывались: _visibility, _lenght, _article_galv и другое. А потом выполняю команду: и как итог имею таблицу, где элементы автоматически нумеруются(притом если у элементов с одинаковыми атрибутами _visibility, _article_galv отличается параметр _lenght, то это должна быть уже другая позиция) и в столбец "наименование" попадает значение атрибута _visibility, "длина"(если есть) - _lenght, _article_galv - "артикул". Насколько я понимаю в таком случае LISP не будет запускать никакие LISP или макросы прописанные в блоки, что является более безопасным. Если встречалось что-то подобное или есть понимание как это реализовать, то буду крайне благодарен
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Sergey91@06, ты не пробовал attin / attout или его аналог?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Кулик Алексей aka kpblc, идея близка, но все же не то, т.к. у моих блоков могут быть и 10 атрибутов например, но выгружать на команду он должен только определенные, названия которых я прописываю в коде. И я хочу сделать 2 альтернативные кнопки: а)создает таблицу внутри файла б)создает внешний exel(svc) файл с аналогичной таблицей, таблица должна быть ГОСТовской, т.е. иметь определенные размеры. Сейчас начал курсы LISP изучать, возможно я скоро сам пойму как это сделать, если все получится то поделюсь наработками
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну, в принципе код открыт - отфильтровать атрибуты можно хоть внутри кода, хоть при обработке готового файла, хоть где.
Один маленький, но серьезный момент: потребуются хендлы блоков, чтобы их можно было идентифицировать. А это гарантирует "негостовскость" таблицы. Можно на сайте Lee Mac посмотреть - кажется, у него там были очень интересные нумераторы.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Доброго!
Есть ли у кого опыт по созданию полей со ссылкой на дин блок? (в лиспе естественно) Научился манипулировать всеми параметрами дин. блока и содержимым атрибутов, но с полями пока не работал. Собственно задача: Есть исходный динамический блок с атрибутами. Кроме него есть блок маркер в котором только один атрибут. Требуется создать в атрибуте блока маркера поля в перемешку с текстом, поля ссылаются на дин. параметры и атрибуты исходного блока. Прикрепляю пример. В примере я мухлюю, и использую атрибут самого исходного блока, вокруг которого рисуется рамка маркера (блок маркера в примере вовсе не имеет атрибута). А хочется сделать по человечески Подскажите в каком направлении копать? Заранее спасибо.
__________________
Блог |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
В лисп с полями довольно просто... Вы руками сначала нужное поле создайте, потом посмотрите на него и увидите, что там objectID акрибута имеется и его свойство... по образу и подобию формируйте строку для других блоков, меняя ID и будет Вас счастье.... Путано как то сказал, но идея я думаю понятна.
|
|||
|
||||
Спасибо. Таким методом работают ссылки на дин. свойства но не на атрибуты.
На основе одного из кодов от VVA настряпал такой вот тестовый код для атрибутов. Вот только при записи поля в другой атрибут сперва содержание отображается как ####, а корректное поле появляется только после регенерации. При этом, если записывать поле не в атрибут блока а в текст, то все отображается сразу ОК. Мне бы очень хотелось не использовать регенерацию, так как файлы тяжелые а операция довольно частая. Может кто подскажет возможно ли это и как? Код:
__________________
Блог Последний раз редактировалось Red Nova, 23.04.2017 в 18:57. |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
И атрибуты тоже. Другое дело, что в строку нужно вставлять не ID блока, а ID самого атрибута, т.к. атрибут самостоятельный объект.
ЗЫ. И если не сложно, дополните пожалуйста код, до рабочего состояния, не у всех есть набор используемых Вами функций. Последний раз редактировалось Boxa, 18.04.2017 в 06:56. |
|||
|
||||
Цитата:
Но проблема с регенерацией у меня осталась...
__________________
Блог |
||||
|
||||
За ".updatefield" спасибо, не знал. Очень полезно. Искал как-то нечто подобное но не нашел...
Про мой блок - дальнейшие тесты показали, что если не редактировать атрибут существующего блока а вводить содержание его при вставке блока , то поле сразу отображается как нужно.
__________________
Блог |
||||
|
||||
Други, у меня баг при использовании vlr-object-reactor для атрибута дин. блока.
Дин. блок имеет линейный параметр ширины рамки, который по задумке реактора изменяется в зависимости от содержания атрибута. То есть каждый раз получаем ширину атрибута через vla-getBoundingBox и соответственно изменяем ширину рамки. Все работает пока не добавить в дин блок flip state. Без реактора флипает нормально, а с реактором атрибут, после флипа, получает при изменении текста непонятное смещение. Может кто с таким встречался? Вот код и файл примера. Код:
__________________
Блог Последний раз редактировалось Red Nova, 22.04.2017 в 20:28. |
||||
|
||||
По предыдущему посту - я просто не учел что флип не меняет направления текста. Убрал флип чтобы пока не мешал... Пошли дальше.
Первый вариант объектного реактора у меня работает. Но когда попытался усложнить код возникли проблемы. В реакторе многие команды не работают. По крайней мере у меня... Итак я имею блок маркера текст в котором может иметь разную ширину. Чтобы рамка блока маркера совпадала по ширине с текстом и пишется реактор. При вставке блока я получаю ширину текста при помощи vla-getBoundingBox, при этом если блок повернут то я перед применением vla-getBoundingBox поворачивал блок как нужно, получал ширину и возвращал прежний поворот. Такой трюк в реакторе не работает. Не знаю в чем дело. На строчке vlax-put код слетает. В прикрепленном коде закомментил следующие строки, которые должны производить трюк с поворотом блока при получении BoundingBox. На них происходит вылет. Вот они. ;(setq rot (vlax-get-property (nth 0 objlist) 'Rotation)) ;(vlax-put (nth 1 objlist) 'Rotation 0) (vla-getBoundingBox (nth 1 objlist) 'a 'b) ;(vlax-put (nth 1 objlist) 'Rotation rot) В теперешнем виде все работает, но для повернутых блоков vla-getBoundingBox получает не те координаты что нужно. Почему vlax-put не работает в реакторе?
__________________
Блог |
||||
|
||||
Решение нашлось благодоря замене vla-getBoundingBox на функзию от Lee Mac.
Код:
__________________
Блог Последний раз редактировалось Red Nova, 24.04.2017 в 22:18. |
||||
|
|||||
Никак не выходит отключить Object Reactor для определенных блоков.
Как правильно обозначить Object Reactor в рамках vlr-owner-remove? Вот так не работает: Цитата:
Цитата:
Если при создании реактора я именую его TagFieldReactor Цитата:
Цитата:
__________________
Блог |
|||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Возможно ли как-то в лиспе добиться "псевдо-вложенности" меток отмены? Если схематично, то имею в виду нечто следующее:
Код:
Пример. Программа в цикле поочередно (с помощью nentsel) просит указать подобъекты блока. Указанный подобъект незамедлительно стирается. До момента завершения команды (прерывания цикла по Enter) я хочу отменять по Ctrl+Z удаление каждого подобъекта по одному, а после завершения - отменить удаление сразу всех подобъектов. Подобный принцип реализован в штатной _.PLINE: в процессе отрисовки можем убирать по одному сегменту, а по ее завершении - можно отменить сразу всю полилинию. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Сергей812, идея для данного примера здравая, спасибо - суть хитрости уловил. Не додумался даже до такой. Было у меня еще пару-тройку программ, где я хотел бы реализовать подобный механизм, но сейчас что-то не припомню, где именно.
Причем тут с перехватом нажатия Ctrl+Z проблем нет, даже без grread. Это сочетание просто передает в командную строку символы _U, которые можно назначить в качестве ключевого слова переменной на запрос nentsel (предварив initget'ом) - и далее обработать. Тут я столкнулся с другим: как скрыть объект внутри блока? С удалением проблем нет: применяем vla-Delete ко вложенному объекту, затем entupd ко всему блоку - даже не подвисает ни на секунду. А вот как скрыть, пока не пойму. Redraw с аргументом 2 (скрыть примитив, перерисовать цветом фона) работает только в активном пространстве. Метод HighLight может только подсветить примитив пунктиром. Пока писал, навела на мысль эта ремарка Полещука: "перерисовать цветом фона". Вроде, подходит. Ладно, свой цвет я знаю и не меняю его - стандартный черный (AC 2011) - 0, 0, 0. Назначаю его подпримитиву - и дело в шляпе, казалось бы... Но цвет не у всех такой. А выяснить программно на лиспе цвет фона нельзя (цитата из Полещука): Цитата:
Цитата:
Сергей812, еще раз большое спасибо за хорошую идею. И всех с праздником Великой Победы! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
На форуме были коды получения цвета фона любого пространства.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Сергей812, и снова спасибо. С п.2 - в точку. Забыл я что-то про него. Не приходилось вроде, еще использовать, хватало до этого redraw.
Кулик Алексей aka kpblc, вроде как уже и не надо для этой задачи, но все равно стало любопытно, однако найти такой код так и не удалось. Только для изменения цвета нашел. |
|||
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
skkkk, вот, например: http://forum.dwg.ru/showthread.php?t=49422
|
|||
|
||||
Зависит от того что понимать под словом освоить. Толком я занялся лиспом только в этом году. Многое (не особо сложное) получается довольно неплохо. Для сельской местности хватает. Но осваивать там еще много чего. Хотя и цель познать все не стоит, только то что нужно для конкретных задач.
__________________
Блог Последний раз редактировалось Red Nova, 11.05.2017 в 06:46. |
||||
|
||||
Регистрация: 23.10.2013
Сообщений: 23
|
Здравствуйте! Извините, может вопрос уже был, найти не смог. В динамическом блоке есть параметр "отражение", соответственно возможны два варианта настройки: "Без отражения", "отраженное". В каком виде данных скармливать параметр функции vla-put-value для изменения этого динамического свойства?
|
|||
|
||||
Titli-pytli
Вот вариант от Lee Mac-а Код:
__________________
Блог |
||||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Здравствуйте! Подскажите пожалуйста, как заставить подобную конструкцию работать
Код:
Т.е. чтобы при выборе точки всегда была возможность сделать еще что-либо в текущем режиме. Спасибо!
__________________
слесарь САПР |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
AlexSheep спасибо!
Смотрел ее, вводил с маленькой буквы и не работало (initget "привет") Надо с заглавной, всем спасибо! Пример Код:
__________________
слесарь САПР |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Немного наивный вопрос. А кто-нибудь вообще слышал/видел в работе такую функцию, чтобы автоматически искала свободное место на чертеже для размещения текста/объектов?
Например, есть густо разрисованный чертёж. Нужно в конкретное место поставить точку/мультивыноску/блок и тп., чтобы программа автоматически прошерстила "окрестность" и поставила текст в ту часть чертежа, где он не будет перекрывать другие объекты. Причём, на максимально близком от конкретного места расстоянии. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Уже было подобное обсуждение в какой то ветке относительно выносок для кабельного журнала. Здесь задача гораздо сложнее. Например, ту же мультивыноску бывает порою проще вынести подальше от объекта, на который она указывает - чтобы при этом наклон и пересечки выносной линии с другими элементами чертежа обеспечивали однозначную визуальную связь выноски и объекта. Так что нахождение свободного "пятна" на чертежа - это лишь часть задачи.
|
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Цитата:
Цитата:
Цитата:
Мне в голову только одна мысль приходит. 1. Задаём размер "окрестности", в пределах которой нужно разместить выноску. 2. Из dxf кодов элементов в этой окрестности выделяем нужные данные. 3. Создаём виртуальное координатное поле в пределах окрестности: - задаём размер ячейки координатного поля. Допустим, 0.1х0.1 единицы чертежа. - циклически проходим все ячейки координатного поля. Если в пределах ячейки оказывается объект, ячейке присваивается свойство " 1". Если нет, то свойство "0". 4. Определяем размеры выноски, которую хотим разместить, в количестве ячеек координатного поля. 5. Ну а дальше методом концентрических окружностей программа, оперируя данными координатного поля и размерами выноски, ищет пустое место. Как это происходит. Циклично. Сначала задаётся небольшой радиус, просматриваются все точки на окружности от 0 до 2π с некоторым шагом углов. Если места нет, то выбираются всё большие и большие радиусы, и так же проходятся окружности от 0 до 2π. И так до тех пор, пока радиус поиска не станет равен изначально заданному радиусу окрестности. И если пустого места нет, то вылетает ошибка: "извини, братан, местов нема". Если делать без виртуального координатного поля, то, боюсь, тут даже суперкомпьютер повиснет. Но это всё догадки. Честно говоря, я даже такой науки не знаю, где бы такие алгоритмы и задачи рассматривались. ----- добавлено через ~6 мин. ----- Ну или просто секрамкой по размерам выноски проходить окрестность методом концентрических окружностей... Это проще, но тогда будут возникать ошибки и слипания выноски с объектами. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Enik, думаю, что если хотите раскрыть эту тематику - надо попросить админа/модераторов вынести в отдельную ветку)
А решения то есть математические 100%, например, те же самые задачи оптимального раскроя материалов на станке. Учитывайте, что еще должна быть типа "дефрагментации" - т.е. если места не хватает для установки элемента, то должна быть сначала анализ возможности перетасовки уже существующих элементов, а потом уж сообщать - "Упс". А если это все путем простого перебора делать... |
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Цитата:
Алексей, прошу рассмотреть эту возможность... Offtop: Попробую ещё LeeMac'у написать. Такими темпами можно и до умного проектирования дойти. Например, связать воедино кадастровый план, топосъёмку с домами, дорогами и коммуникациями. Наложить сюда ЗОУИТ. И вуаля: трассировка объекта готова. Вкалывают роботы - счастлив человек. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Offtop: это и является целью любой автоматизации проектирования - от рисования палочками и кружочками перейти к комплексной обработке информации. Уровень обработки информации разный просто - в зависимости от уровня кустарей-самоучек типа нас или сколько готова затратить фирма средств на внедрение.
|
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
|
|||
|
||||
ГИП Регистрация: 07.06.2015
Сообщений: 1,254
|
Offtop: Пришёл ответ от ЛееМака
Hi Vladimir, Thank you for your message. I'm afraid I haven't previously encountered programs such as you have described which would allow the automatic placement of annotation in a crowded drawing such that the annotation remains visible & readable. As you've identified from the algorithm described by your image set, such a task is relatively complex and would be quite a challenge to automate. Kind Regards, Lee Offtop: В общем, придётся поднимать целину. Не похоже, чтобы этим кто-то занимался раньше. |
|||
|
||||
инженер Регистрация: 09.05.2017
Красноярск
Сообщений: 3
|
Добрый день! Координаты примитива функциями lisp извлекаются в экспоненциальной форме (вроде: (2.08014e+008 4.11118e+008)), что в десятичной записи дает точность до 1000. Вопрос номер один - как повысить точность извлечения координат (хотя бы до значения точности в настройках чертежа autocad). И вопрос два - как в visual lisp переводить числа из одного формата в другой. Тыкаю редактор буквально третий день, ни разу не программист, а дудл предлагает функцию format, которая не читается интерпретатором и в справочнике инфы не углядел. Оби Ван, ты последняя надежда.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я не оби Ван, поэтому не надейся
Данные извлекаются с максимальной точностью. Просто отображаются не совсем корректно. Можешь ради приколу проверить через (rtos value 2 16)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
инженер Регистрация: 09.05.2017
Красноярск
Сообщений: 3
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Нннуууу... Если неохота сильно разбираться, попробуй поиграться с luprec, lunits - кажется, именно они отвечают за отображение значений.
P.S. Код не смотрел, не разбирался. Увы, некогда
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Если так уж надо, то используй функции vl-bb-set и vl-bb-ref
Хотя я бы подумывал об использовании реестра или внешних настроечных файлов. Нечасто надо делать внедокументные переменные.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Снова здравствуйте!
В продолжение предыдущего вопроса. Необходимо либо выбрать объект, либо сразу ввести значение, возможно ли такое? Т.е. в переменную записывается либо сам объект, либо любое введенное значение. Например, вводим число 5, в переменную записалось число 5. Если щелкнули мышью по объекту, записалось имя объекта. Код:
Никто не подсказывает, пришлось думать самому. Воткнул в initget возможные варианты значений от 0 до 10 с шагом 0.1. Возможно и глупо, но теперь можно выбрать либо объект, либо ввести необходимое значение, сразу. Код:
__________________
слесарь САПР |
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Здравствуйте, друзья! Необходима ваша помощь
Нашел в интернете полезный LISP - создающий выноску с именем блока, немного адаптировал под себя, т.к. необходимо было чтобы на выноске отображалось не имя блока а название видимости. Проблемы начинаются когда у блока много атрибутов - вместо названия видимости на выноске отображается ###. Так понимаю вся проблема в строке: ">%).Parameter(1).VisibilityState>%", как только видимость перестает быть параметром номер 1 - отображается ###. Пытался с помощью субфункций от LeeMac реализовать вставку значения не путем ссылки, а просто вставки текста = название видимости, пусть даже они не будут связаны ссылкой на параметр объекта. В общем мне необходимо понять, что нужно исправить в нижнем коде, в который я добавил функции от LeeMac, а именно что нужно написать вместо: "AcDbBlockVisibilityParameterEntity"(в исходной версии:"%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-objectid pline)) ">%).Parameter(1).VisibilityState>%") Рабочий код: Код:
Код:
|
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Сергей812, нашел недостающую скобку, теперь lisp загружается, но при исполнении и выборе динамического блока выдает ошибку: неверный тип аргумента: lentityp 1 (хотя прежняя версия мое сообщение выше, выносила выноску, я просто изменил ссылку, добавив возможные варианты текста и через if и получение ID параметра видимости)
P.S. скобку в конце все-таки убрал с ней не запускалось, видимо программа закрывается чуть раньше. Код:
|
|||
|
||||
Регистрация: 15.06.2014
Сообщений: 10
|
Сергей812, да потерял кусок кода, вот обновленный код, собираю его из разных кусков как вслепую конструктор, поскольку в lispе практически не понимаю,
результатом такого метода тыка ошибка теперь приобрела следующий вид: неверный тип аргумента: VLA-OBJECT nil Код:
|
|||
|
||||
Доброго.
Подскажите плиз можно ли повесить блок на курсор и при этом заранее иметь возможность задать его размер. Если делать командным методом то блок повесится на курсор в размере 1:1, а размер будет задан после этого. (command "_.Insert" "BMP Dot" pause 100 100 "") То есть веся на курсоре блок будет иметь неправильный размер. Если же сперва вставить блок в точку с нулевыми координатами в нужном размере, а затем использовать "._move" (command "._move" dot "" '(0 0) pause) То от курсора к точке (0 0) будет видна направляющая, что не есть гут.
__________________
Блог |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
а если activex использовать - vla-move ?
Во всяком случае, в том же NETAPI это задача решается установкой нужного масштаба при первичной вставке в текущее пространство через BlockReference.ScaleFactors с последующей передаче в JIG, который уже и таскает вставку. А командные методы лиспа - это такой черный ящик по сути) |
|||
|
||||
А в vla-move можно делать паузу на user input?
__________________
Блог |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
вообще то имел в виду grread в цикле... Не знаю правда, насколько это мерцать будет - в NET мерцания не заметно особо во время JIG. Т.е. вставляете блок в нужном масштабе тоже через ActiveX, и потом запрашиваете через ggread текущие координаты указателя и подтаскивайте туда вставку блока. И какой то выход из цикла предусмотреть, естественно.
|
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Код:
Позаботиться о возможных атрибутах. Последний раз редактировалось ShaggyDoc, 23.06.2017 в 19:49. |
|||
|
||||
ShaggyDoc vl-cmdf "_.INSERT" работает, спасибо. Многократно вставлять мне необходимости не было, сделал по простому.
Код:
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ага, но в последних версиях (начиная с 2015, кажется) vl-cmdf независимо ни от чего возвращает t, а command (равно как и command-s) - nil. Так что учтите
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Вот это новость. А как же теперь убедиться, что команда отработала? В случае со вставкой блока ясно - отслеживаем появление или непоявление нового объекта в базе чертежа. Но ведь не все команды создают объекты. Печально в общем. Придется пересмотреть логику некоторых программ, в которых не уйти от командных методов.
|
|||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
Цитата:
ну и ActiveX: Код:
Последний раз редактировалось roaa, 26.06.2017 в 20:12. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Придется извращаться - запоминать последний примитив, выполнять команду, проверять соответствие и т.п. Ну или переходить на .net...
Сам был в шоке!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Это-то давно известно, Алексей просто напомнил. Я с самого начала освоения лиспа не понимал, зачем же она возвращает nil? Ну не возвращай ты ничего, верни какой-либо список параметров выполненной команды, имя команды в конце концов. А тут просто - выполнил команду, хоть всё и верно прошло, а в ответ - ЛОЖЬ! Где логика? Ладно, я с этим смирился, и даже использовал ее порой, бывали случаи, когда vl-cmdf не отрабатывал (конкретики сейчас не припомню - всегда старался уходить от командных методов). Но вот уж вообще чего не пойму: зачем трогать то, что работало и так? Заставляя при этом разрабов переписывать коды в языке, который прямо-таки и вопил на всех углах: "Я не завишу от версии!!!" Возможно были конфликты с какими-то из новшеств. Или же это было начало политики, провоцирующей всех постепенно
Знать бы куда и кому писать. Никогда этого не делал, поскольку особо не верил в то, что меня услышат. Вместо этого усердно ваял костыли и искал обходные пути. Наверное, я "социальный овощ" по Бушману. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Ну, один раз можно. Но гораздо полезнее множественная вставка блока. При этом блок должен постоянно висеть на курсоре, уже в нужном масштабе, возможно повернутым. Блок может иметь атрибуты, причем всех видов, а может и не иметь. И прерывать цикл как в штатных командах - пустым вводом. И чтобы при этом не вывалиться из основной программы.
Такая функция может применяться очень часто. Вообще идеально, чтобы была штатной, но.... Мы с Петром Лоскутовым (Alaspher) - соавтором Н.Н. Полещука по книге AutoLISP и Visual LISP в среде AutoCAD и подружились при совместной отработке этой функции лет 20 назад. Тогда был только Автолисп, не было замечательных vl-catch-xxx, никаких ActiveX. Было много сложных вариантов. чтобы выполнить все условия. Более простой появился вместе с vl-cmdf, которая стала возвращать T или NIL. Но вот "никогда такого не было и опять". Хорошо хоть могу послать уродов из AutoDesk в "индейскую избу"... |
|||
|
||||
Регистрация: 24.03.2014
Сообщений: 15
|
Может кто-нибудь откликнется на мой вопрос.
Можно из программы на Автолиспе получить информацию, есть ли в dwg объекты, к которым можно применить purge? Т.е., хотелось бы не входить в диалог утилиты AutoCAD 'Проверить', не делать _purge, не делать (repeat 3 (vla-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))), т.е. не чистить, а только получить информацию, требуется очистка dwg, или нет. Для другой проверки - требуется _audit dwg, или нет, я сделала (написала - это будет громко сказано) небольшую функцию-команду, где использовала (vla-AuditInfo active_doc :vlax-False), и мне было достаточно нескольких последних результирующих строк протокола работы этой функции, чтобы сформировать сообщение разработчику dwg, о необходимости провести проверку внутренней структуры чертежа, исправить ошибки. Сейчас мне требуется не чистить чертеж, а проверить, был ли чертеж очищен, желательно написать функцию - проверку. Не подскажете, это возможно? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я бы поставил LOGFILEMODE, установил LOGFILEPATH, потом в ком.строке выполнил _.-purge, explodeallproxy, removeallproxy, _.audit и прочие вещи, следом - отмена действий. И после этого уже обрабатывать полученный log-файл.
Есть, конечно, другой вариант - проходить по всем соответствующим таблицам и на каждый элемент пытаться выполнить нечто типа: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 24.03.2014
Сообщений: 15
|
Добрый день!
Спасибо, что разместили мой вопрос и откликнулись. "А результат в каком виде нужно получить? Насколько я понял (судя по vla-AuditInfo), достаточно вывода в комстроке?" "Я бы поставил LOGFILEMODE, установил LOGFILEPATH, потом в ком.строке выполнил _.-purge, explodeallproxy, removeallproxy, _.audit и прочие вещи, следом - отмена действий. И после этого уже обрабатывать полученный log-файл." В общем-то, по такой схеме у нас организованы три функции проверки. Создаю каталог, используя вашу функцию создания каталога в (strcat (vl-string-right-trim "\\" (getenv "APPDATA")) "\\LispRu\\Datas"), которую когда-то откуда-то у вас скопировала. Переназначаю LOGFILEPATH, устанавливаю LOGFILEMODE, затем анализирую закрытый уже log файл, часть информации (коротко) вывожу на экран и в текстовое окно Автокада. Потом, эти функции проверки удаляют проанализированные log файлы из каталога (...\\LispRu\\Datas). Конечно, результаты всех проверок в сокращенном варианте можно записать в один текстовый файл и отправить разработчику dwg. Это не вопрос, просто, пока не обязательно. Проверка на наличие прокси-объектов пока не требуется, проверяем и настоятельно рекомендуем удалять только, так называемые, AcDgnLS прокси-объекты, эта проверка есть и программы удаления тоже. Моя проблема в том, что НЕ хочется мне делать _.purge, а следом - отмена действий, даже, если закрывать потом файлы без сохранения. Пока не знаю как поступить. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
LcH, во-первых, я бы не советовал учиться лиспу на таком примере. Сложноватым будет для новичка, полагаю. Может, попросить модераторов перенести этот вопрос в отдельную тему, тем более, что он вполне на это тянет.
Во-вторых, хотелось бы узнать, почему не подойдет вариант Алексея (_.-purge с последующим откатом)? Я почти уверен, что любая функция по такой проверке будет работать намного дольше. Не говоря уже о трудности в написании подобной функции. В самом деле, представьте, это же надо пробежаться по таблице блоков (в "базе чертежа"), проверить каждый на наличие в чертеже. Для полной уверенности надо убедиться, что этот блок не входит в какой-либо другой блок. То же самое придется провернуть и с таблицей слоев, типов линий, не забыв залезть в каждый блок и проверить их наличие там. Не говоря уже о проверке текстовых и прочих стилей. В общем, непростая это будет функция, весьма хлопотная в реализации, да еще и тормознутей некуда. Оно надо? Встань передо мной такая задача, я бы пошел по пути, указанному Алексеем. В библиотеке DOSLIB есть функция, возвращающая содержимое командной строки. Я бы делал пурж (похоже, что для надежности надо все же три раза его сделать), а затем получал содержимое комстроки, "выцеплял" бы из него строки, начинающиеся на "Удаление..." и делал в них замену "Удаление" на "Неиспользуемый", что бы получился список строк вроде: Код:
|
|||
|
||||
Регистрация: 08.12.2015
Сообщений: 1
|
Добрый день. Подскажите, пожалуйста, как можно выделить набор, который получился в результате копирования другого набора? Если по шагам: я выделил набор объектов командой "ssget", затем откопировал их с помощью команды "command "_copy"". Вот, можно-ли выделить программно этот новый набор?
Последний раз редактировалось Lavrentiy, 26.07.2017 в 17:57. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Теоретически можно. КОмандный реактор, перед выполнением запоминаем последний примитив, после выполнения - через entnext получаем все, что было скопировано. Кстати, на форуме решения подобных задач были (если не ошибаюсь, львиную долю разрабатывал VVA).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Пример, как решается схожая задача - получить идентификаторы всех объектов (ObjectId), вставленных через буфер обмена - от Александра Ривилиса на Net.
|
|||
|
||||
Регистрация: 02.04.2013
Сообщений: 24
|
привет друзьям, я нужна такая lisp, могли бы вы помочь мне, пожалуйстанапример drawing
|
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Здравствуйте.
Я новичок. Специалисты, подскажите пожалуйста. Как из однострочного текста получить содержимое при помощи программы на autolisp? Т.е. есть текст "100", как мне в переменную получить этот текст. Спасибо за помощь и ваше время. PS. Я мог неправильно делать запрос в поиске, но ответ на свой вопрос я не нашел, прошу простить. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
|
|||
|
||||
Инженер-проектировщик Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723
|
Здравствуйте!
В лиспе практически не разбираюсь. По примерам и наитию смог сделать простенький код (не судите строго). Код:
Специалисты, помогите пожалуйста сделать адекватную программу. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Здравствуйте! Сначала самое главное, я еще полный чайник в ЛИСПе))
Не так давно начал заниматься ЛИСПом и прошу Вашей помощи. Решил начать с малого, а именно построения трубы по уклону с заданным масштабом для помощи мне строить продольный профиль сетей водоснабжения и водоотведения. В принципе работает, но накосячил с отключением привязки (для повторения использовал while, после того как завершаю выполнение программы привязка не возвращается. Понимаю почему но не могу понять как можно вернуть старую привязку old_value). Так же решил, чтобы не вводить в ручную выбор 1-ой отметки применить выбор текста в котором эта отметка пишется на профиле. Тут проблема в том, что есть вариант того что можно просто промахнуться при выборе текста. Пытался воспользоваться if, но не получается. Думаю надо написать условие: если промахнулся то вводи в ручную. Пробовал но выдает ошибку. Проблема с текстом тоже бывает всплывает. В другом файле текст вставляет не отметку которую я рассчитал а 90 т.е угол на который я хочу поворачивать. Код:
Последний раз редактировалось Maksim7enov, 25.08.2017 в 10:27. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Значит в это файле другие настройки текущего текстового стиля.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Цитата:
Все бьюсь с условием если промахнулся мимо выбора текста в данными о первой отметке. пробовал сделать так : (if (= otm_Z nil) (getdist "\nВводи отметку вручную " )) В итоге ошибка: неверный тип аргумента: lentityp nil |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Если промахнулся, то entsel возвращает nil. (car nil) -> nil. А entget nil - ошибка.
Пройдись пошагово (http://autolisp.ru/2009/09/10/vlide-misc-01/ + http://autolisp.ru/2009/09/12/vlide-misc-02/) И твой код с минимальными исправлениями - только отлов "промаха выбора". Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Цитата:
----- добавлено через ~2 ч. ----- Очень полезные ссылки. По оформлению понял [Ctrl]+[Shift]+[f] помогает. Про промах при выборе делаю вывод, что на данном этапе изучения промах=расстрелу) Так же хотелось бы узнать, может кто-то готов потратить свои силы и время на еще одного чайника?))) |
|||
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
День добрый, помогите решить проблему:
1) применяю mapcar для извлечения из списка мультивыносок свойство "TextString" > 2) для некоторых из них вылетает ошибка: Ошибка Automation. Отсутствует описание. в связи с этим все крешится 3) дамп выноски выдающей ошибку: ; IAcadMLeader: Интерфейс мультивыносок AutoCAD ; Значения свойств: ; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013f803318> ; ArrowheadBlock = "_Open" ; ArrowheadSize = 300.0 ; ArrowheadType = 6 ; BlockConnectionType = 0 ; BlockScale = 1.0 ; ContentBlockName = "" ; ContentBlockType = 6 ; ContentType = 0 ; Document (RO) = #<VLA-OBJECT IAcadDocument 00000000291e89d8> ; DogLegged = -1 ; DoglegLength = 0.0 ; EntityTransparency = "ПоСлою" ; Handle (RO) = "9205A" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000000433cba98> ; LandingGap = 2.0 ; Layer = "АР лестница" ; LeaderCount (RO) = 1 ; LeaderLineColor = #<VLA-OBJECT IAcadAcCmColor 00000000433cbd90> ; LeaderLinetype = "ByBlock" ; LeaderLineWeight = -2 ; LeaderType = 1 ; Linetype = "ByLayer" ; LinetypeScale = 50.0 ; Lineweight = -1 ; Material = "ByLayer" ; ObjectID (RO) = 95928 ; ObjectID32 (RO) = 95928 ; ObjectName (RO) = "AcDbMLeader" ; OwnerID (RO) = 116635 ; OwnerID32 (RO) = 116635 ; PlotStyleName = "ByLayer" ; ScaleFactor = 1.0 ; StyleName = "Копия(4) Standard" ; TextAttachmentDirection = 0 ; TextBackgroundFill = Ошибка ; TextBottomAttachmentType = 0 ; TextDirection = Ошибка ; TextFrameDisplay = 0 ; TextHeight = 4.0 ; TextJustify = Ошибка ; TextLeftAttachmentType = 1 ; TextLineSpacingDistance = Ошибка ; TextLineSpacingFactor = Ошибка ; TextLineSpacingStyle = Ошибка ; TextRightAttachmentType = 3 ; TextRotation = Ошибка ; TextString = Ошибка ; TextStyleName = Ошибка ; TextTopAttachmentType = 0 ; TextWidth = Ошибка ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000000433cbbb0> ; Visible = -1 4) какого типа функции стоит применить для решения проблемы? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
У тебя на выноске - блок. См.свойство ContentType
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Жалкий инженеришка-проектаст Регистрация: 31.01.2010
Сообщений: 1,986
|
https://openedu.ru/course/ITMOUniversity/FPBC/
Функциональное программирование: базовый курс В курсе изучаются основы функционального подхода к программированию и практические вопросы программирования на языке Lisp. Функциональные языки обладают множеством интересных особенностей, знакомство с которыми расширяет кругозор программиста. Курс содержит видеолекции, опросы и практические задания по программированию. Материал курса рассчитан на 10 недель обучения. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Цитата:
|
|||
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686
|
Offtop: "Не учите меня жить, помогите материально! ©"
Товарищи знатоки, есть такая хорошая программка, "меняющая" выбранные примитивы на выбранный пользователем (код ниже), работает беспроблемно автокада что ль с 2000 у меня.. А нельзя ли ея модернизировать так, что бы у вставляемых примитивов назначалась координата Z, взятая из заменяемого примитива? Хотя бы только для блоков? Код:
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 23.10.2013
Сообщений: 23
|
Помогите пожалуйста. Есть ли возможность получать (выбирать точку в пространстве модели автокада) с привязкой (угловой и размерной) от предыдущей выбранной точки (getpoint) ? Желательно так же, как при построении полилинии.
з.ы. Как выудить координату конца обычного цилиндра (_cylinder)? Последний раз редактировалось Titli-pytli, 20.10.2017 в 12:28. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Для пользователя читать про Относительные координаты в Автокаде
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Подсветка с ручками или без? Если без, то vla-highlight в помощь. Если с ручками - то преобразовать vla в ename, добавить ename в набор и потом sssetfirst.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 23.10.2013
Сообщений: 23
|
Цитата:
И еще: Почему функция (vlax-get-property obg "PrincipalDirections") возвращает одни и те же единичные вектора главных направлений для разных цилиндров (повернутых в разные направления вдоль главных координатных осей)? Для цилиндра с осью вдоль оси X координаты векторов (1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0) Для цилиндра с осью вдоль оси Y координаты векторов (1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0) Не поверите, но вдоль оси Z тоже самое. Как вообще узнать в каком направлении он повернут? Ну или может быть есть какой нибудь другой способ узнать координату конца цилиндра? Протыкал все примитивы в его составе, но так и не нашел. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
В другом или в следующем?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Во всех последующих, список может быть длинней 4х:
'((25 50 100 300 200) (25 50 100 200) (25 50 100) (25 50) (700 600 400 500) (700 600 500) (700 600)) На выходе нужно получить максимально объединенные подсписки: '((25 50 100 300 200)(700 600 400 500)) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Сильно хочется задать провокационный вопрос: а каков должен быть результат для списка
'((25 50 100 300 200) (25 50 100 200) (25 50 100 700 600) (25 50) (700 600 400 500) (700 600 200 25 500) (700 600))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Список тот что я обрабатываю можно разделить на два: значения элементов подсписков первого списка уникальны, и не встречаются во втором подсписке. Возможно я все усложняю. Вообще исходные данные такие:
1. есть список уникальных координат, лежащих на полилиниях (отмечены красным на рисунке) 2. есть список наложенных полилиний Половина уникальных координат встречается в каждой полилинии в своей половине списка. Мне нужно получить две группы полилиний, по признаку принадлежности к своей половине уникальных координат. Я пробегался foreach по координатам полилиний, и с помощью member и vl-remove-if-not получил список с именами полилиний, но проблема в том что нужно список '((имя_полилинии1 имя_полилинии2 имя_полилинии3) (имя_полилинии2 имя_полилинии3) (имя_полилинии4 имя_полилинии5 имя_полилинии6) (имя_полилинии5 имя_полилинии6)) преобразовать в '((имя_полилинии1 имя_полилинии2 имя_полилинии3)(имя_полилинии4 имя_полилинии5 имя_полилинии6)) Последний раз редактировалось Inferi, 08.11.2017 в 17:17. |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Здравствуйте!
Будьте добры, подскажите, как с помощью лиспа, при простановке размера, задавать длину выносных линий? Т.е. иными словами как задавать отступ размерной линии от виртуальной прямой проходящей между двумя точками размера.
__________________
слесарь САПР |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
----- добавлено через 10 сек. ----- Насчет второго не уверен.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Цитата:
В самом объекте данный параметр заблокирован для редактирования(при просмотре через vlax-dump-object, рядом со значением стоит (RO)). Есть мысль расчитывать третью(последнюю) точку, указываемую при построении размера, но это слишком сложные геометрические вычисления.
__________________
слесарь САПР |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А это что?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
А это вот что:
Из Справки. Отступ от объекта Указывает расстояние, на которое выносные линии отступают от точек объекта. (Системная переменная DIMEXO) Автор темы напрасно применил термин "отступ". Цитата:
В простом примере эти вычисления не оправданы, но, например, при создании отверстия в перекрытии с автоматическим проставлением размеров, дальнейшим преобразовании прмоугольника отверстия вместе с размерами в блок и вставкой потом этого блока с нужным поворотом в нужное место - в этом случае подобные вычисления себя оправдывают. |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Цитата:
Не в совершенстве владею терминологией, возможно ввел кого-то в заблуждение. Цитата:
Цитата:
----- добавлено через ~4 ч. ----- Кстати получилось, проставлять размеры с фиксированной длиной выносных линий, способом вычисления третьей точки. Выкладываю тестовый код, может кому пригодится, без проверок на пустой ввод и функции ошибки. Тестил мало, возможно есть ошибки. Код:
__________________
слесарь САПР |
|||
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Добрый вечер! Возможно ли в LISPе реализовать двойную сортировку и как это сделать (только средствами Active X)? Например, имеется набор блоков с разными именами. Программа выделяет все блоки, сортирует их сначала по наименованию, а затем, внутри каждого списка блоков с одинаковым именем, еще и по длине. То есть список получается типа (А длиной 200, А длиной 100, Б длиной 500, Б длиной 50).
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Я бы делал наоборот: сначала выбрал уникальные этой функцией, а затем отсортировал по наименованию.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Скорее уж vl-string-subst
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
|
|||
|
||||
Доброго. Вопрос про обработку ошибок.
При нажатии esc в каком случае может выход из команды произойти не через *error* ? Для моего кода если Vlide закрыт то при esc обработка ошибок не происходит, если Vlide открыт то при esc либо Vlide зависает либо после многократного нажатия esc вычисления останавливаются и приходится выходить через Debug - reset to top level. Код обрабатывает очень длинные списки.
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Поскольку код не показан, могу порекомендовать:
а) исключить рекурсию б) найти в "Библиотеке функций" обработчик ошибок (нечто типа _dwgru-catch-error) и использовать именно его.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Попытаюсь вечером почистить код и привести пример.
_dwgru-catch-error кстати не нашел, но до error дело просто не доходит.
__________________
Блог |
||||
|
||||
Вот более менее короткий пример и файл в котором следует тестировать.
После вызова test нужно задать 3 точки, очередность указана в файле. Если по середине процесса нажать esc, то *error* не сработает.
__________________
Блог |
||||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Спасибо за ссылку.
Подскажите плиз как именно мне следует использовать dwgru-error-catch? Скажем у меня проблема в цикле while. Вот участок кода Код:
Пробую подставить весь while под dwgru-error-catch Код:
Вообще я наивно полагал что при esc выход всегда через *error*, а тут нет. Почему так?
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Red Nova, ты не поверишь, но считай весь твой код надо переделывать (это если по-хорошему )
Основной вопрос - тебе обязательно применение прямоугольника или можно обойтись без привязок? ----- добавлено через ~29 мин. ----- О, кстати! Обрати внимание на строку Код:
----- добавлено через ~50 мин. ----- Еще момент - сделай блок безразмерным и тогда не надо будет мучаться с масштабами.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
1. Вариант по хорошему, с переделкой по полной программе. 2. Вариант полегче. Хоть какой костыль чтоб error заработала. Основная проблема не именно в этом коде. Я просто выбрал тот что покороче и поменьше вложенных функций. У меня десятки схожих кодов более сложной конструкции. Цитата:
Затем (этого в приведенном коде нет) задаю мертвые зоны (куда не должно попасть ребро панели), потом создаю списки со всевозможными положениями ребер. Нахожу наилучшее положение ребер сочитая эти списки у уже тогда строю блоки. В процессе составления списков и возникла нужда останавливать процесс вычисления про помощи escape. Так как в зависимости от площади список может состоять из десяток или сотен тысяч элементов. Вычисление займет много времени и если желаемое положение сравнительно быстро не найдено то нужно остановить вычисление. Цитата:
Код:
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
М-да... Тогда все мои переделки можно смело выбрасывать
В качестве пожеланий (и прошу не рассматривать ссылки как рекламу):
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|||||||||
Спасибо за ответ.
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Пока не понял что мне делать с основной задачей? Через *error* никак не выйти? Цитата:
----- добавлено через ~2 ч. ----- Ну вот, добрался до дома, читаю твою статью и не пойму. Разве это мой случай? Цитата:
Давай забудем про мой предыдущий пример. Вот специально под вопрос написал задачку, своеобразный светофор. Создаю простой но требующий несколько секунд для исполнения цикл while. (5 миллионов простых вычислений у меня машина считает примерно за 5 секунд). Код:
Вызываем test. А. Если while и *error* отработали то на исходе цвет Зеленый (3). Б. Если промеж цикла while что-то не так (к примеру если нажать escape) то на выходе цвет Красный (1) (ни while ни *error* не отработали). В. Ну а если while отработала а до escape дело не дошло то выходе цвет Желтый (2). С вариантами А и В все ясно. (В в такой постановке по сути и не достегаем) Как быть с вариантом Б? Прошу привести решение.
__________________
Блог Последний раз редактировалось Red Nova, 11.01.2018 в 02:15. |
|||||||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну, как вариант (без проверок):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
kpblc,
Спасибо. Постараюсь сделать костыль на основе vl-catch-all-apply. На англоязычном форуме проверили мой код, дык у коллеги с Итальянским интерфейсом при escape по середине while *error* отрабатывает. А у меня нет. Баг акада? Код:
Цитата:
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Может быть, дело в настройках среды
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Неа, у меня галочка не стоит.
На theswamp мне подсказали заменить mapcar в *error* на foreach. В начале это помогло (хотя почему mapcar приводило к ошибке так и не ясно). Переделанный код с #3437 заработал при нажатии escape. Но я рано радовался. Попытался добавить в *error* изменение системы координат и *error* опать сломалась. Цитата:
Цитата:
Код:
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Offtop: Я бы постарался вообще обойтись без применения командных методов в *error*. Как-то не доверяю я подобному подходу...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Код:
в *error* 1. Не использовать mapcar 2. Не использовать командные методы. Спасибо за помощь
__________________
Блог Последний раз редактировалось Red Nova, 13.01.2018 в 00:04. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Есть еще вариант - вообще отказаться от переопределения *error*
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Откуда считываешь? С текста/атрибута? Если да, кто мешает получать TextString, а не FieldCode?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Здравствуйте, подскажите пожалуйста красивую и лаконичную функцию или еще лучше лямбда-функцию которая бы принимала два значения - количество элементов, и элемент - и выдавала список из одинаковых элементов:
то есть чтобы это работало так (func 5 "элемент") -> ("элемент" "элемент" "элемент" "элемент" "элемент") Пробую так, почему-то не получается : Код:
Последний раз редактировалось kurstep, 13.02.2018 в 11:59. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Фигню-с написал.
----- добавлено через ~2 мин. ----- ((LAMBDA(count i / res) (repeat count (setq res (cons i res))) res) 2 "i")
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Здравствуйте! Такая проблема. Исходные данные:
имеется блок, прямоугольной формы, размерами допустим 100х100 мм, левая нижняя точка его лежит в начале координат 0,0, имеется точка (setq pt '(50 50)). Вопрос, как выяснить попадает ли точка в область блока или нет? Решал с помощью ssget, ничего не помогает, везде nil. Код:
Подскажите метод определяющий попадет ли точка в область блока!
__________________
слесарь САПР |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Тут две задачи
1. Определить область блока. Вопрос на форуме поднимался, советую заняться поиском 2. Определить вхождение точки в контур (может быть, даже не существующий) - тоже поднимался на форуме. Опять же, поиск.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 27.10.2015
Сообщений: 18
|
Здравствуйте, товарищи корифеи.
В лиспе не силён, попробовал оптимизировать работу из кусков кода, нашёл здесь на форуме и в интернете. Сначала выходило вроде полезно. Но когда файл DWG разросся, то код оказался очень медленным. Подскажите - можно ли как-то оптимизировать код, увеличить скорость работы? Идея такая - код подсчитывает количество вхождений каждого вида блоков. Блоки динамические. Названия блоков могут быть типа: ИМЯ_БЛОКА_ХХ, где ХХ - версия блока. На выходе получается: количество светильников - 25 шт., количество выключателей - 3 шт., количество розеток - 8 шт. и т.д. Код:
|
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Doctor_Che, посмотри альтернативные варианты:
http://www.lee-mac.com/nestedblockcounter.html http://www.lee-mac.com/blockcounter.html |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Doctor_Che, Замени анализ имени блока и всех его динамических представлений на сравнение эффективного имени и маски wcmatch
Т.е допустим, если динамические блоки светильника имеют имя "Светильник_01", "СвелильниК_02" и т.п. то Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 16.02.2018 в 11:50. |
|||
|
||||
Регистрация: 27.10.2015
Сообщений: 18
|
VVA, спасибо огромное. Теперь фрагмент с подсчётом блоков просто летает!
А можно ли оптимизировать момент с выбором блоков? Там у меня идея такая, что бы выбирались только определённые типы блоков (светильники, выключатели и т.д.), если выбор идёт рамкой. И что бы все левые объекты отсеивались. Потом я всё что удовлетворяет требованию упаковываю в блок. Вот здесь я создаю список всех вхождений блоков, которые удовлетворяют условию. Код:
Код:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Я думаю будет быстрее в ssget отфильтровать только блоки (ssget '((0 . "INSERT")), а затем пробежаться по полученному набору и удалить блоки, у которых эффективное имя не соответствует маске wcmatch см #3456
затем SSSETFIRST подсветить нужные
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 27.10.2015
Сообщений: 18
|
Цитата:
Сделал фильтрацию (sget '((cons 0 "INSERT")(cons 8 "ЭО*,ЭМ*"))) - скорость выросла до реактивной. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Offtop: Даешь 1-ю космическую скорость
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Пытаюсь создать функцию цикла. Цикл должен запускать entsel, условие выхода из цикла - выбор таблицы. Написал следующую конструкцию:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Со скобками запутался. Да и логика какая-то странная...
А если вообще ничего не выбрать? А если человеку надо "вотпрямщас" прекратить выполнение кода? А так - на выбор: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Цитата:
Цитата:
Попытался вшить предложенную функцию в код, но не сработало. Может подскажешь куда копать? Суть такова: 1. нужно выбрать таблицу (строку в таблице), и, если выбор сделан => 2. нужно выбрать мвыноску, и, если выбор сделан => 3. в таблицу вставляется строка с текстом выноски и ее координатами 4. циклический возврат к пункту 1 На данный момент в пункте 1 и 2 выбираются любые объекты, а нужно, чтобы в п. 1 можно было выбрать только таблицу, а в п. 2 - только мвыноску. Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я бы делал ставку на фильтры selset - быстро, просто, предсказуемо
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я ж в t2 показал варианты выбора. В чем трудность?
И настоятельно все же рекомендую разобраться со скобками: код вообще непонятно как должен работать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Не обратил сразу внимания. Код не сработает в локализованной версии AutoCAD.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
а код и так лишен смысла - с алгоритмом:
никак не пересекается. Не говоря уже о том, что постоянно прыгать от выноски в чертеже к таблице (таблицам) и обратно - мягко говоря, самый неудачный вариант в плане реализации, имхо. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
На счет качества кода не скажу - код не мой. Я лишь пытаюсь допилить его под себя.
Цитата:
Кулик Алексей aka kpblc, Цитата:
1. если выбран объект кроме таблицы (либо ничего не выбрано) - функция возвращает nil. 2. если выбрана таблица - цикл выбора продолжается. Но это не то, что мне нужно. Попробую пояснить на примере. В выражении: Код:
А нужно, чтобы переменной X была возможность присвоить только имя таблицы, в противном случае цикл выбора продолжается. Последний раз редактировалось Browning Zed, 25.02.2018 в 15:01. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Спасибо, VVA. То, что нужно! Но есть один косяк. Эта функция работает, только, если в процессе выполнения кода нужно выбрать один тип объекта. В моем случае - сначала необходимо выбрать таблицу, а затем мультивыноску. Т.е., если в коде будут два выражения, типа:
Код:
Код:
Это можно как-то поправить? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
При выборе мультивыноски надо "кликать" не на аннотации, а на самой выноске. Кстати, выноски могут быть и стандартные.
И ты уверен, что именно функция mip-ssentget-by-type срабатывает неправильно?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Кулик Алексей aka kpblc,
Неважно куда кликать, на текст или линию выноски - функция прерывается с ошибкой. Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ок, замени вызов на обычный ssget: (ssget '((0 . "ACAD_TABLE"))) и (ssget '((0 . "MULTILEADER"))) и посмотри, что будет в результате. Мне кажется, что проблема совершенно в другом месте.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
используйте трассировку - редактор лиспа акадовский это позволяет. Чем гадать...
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Цитата:
Поэтому В редакторе лиспа в меню "Отладка" поставь чек-бокс на "Прервать на ошибке". Запусти лисп. После ошибки вернить в редактор и выбери "Отладка"->"Причина последнего останова" (Ctrl+F9) Перейдешт на строчку, в которой возникла ошибка Клик правой кнопкой на переменной -> "Изучить" Смотри что в ней содержится
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 25.02.2018 в 21:56. |
|||
|
||||
Доброго. Нубовопрос.
После того как отработала переопределенная функция (*error* nil), разве не должен происходить выход из вычислений? Я наивно пологал что вызов error остановит вычисления на моменте где собственно и вызвать error . Но у меня в данном примере после (+ 1 1) отрабатывает error а после этого отрабатывает и (+ 2 2). Все так и должно быть? Если все так и должно быть, то как грамотно обеспечить выход при error? Код:
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ну у меня то как раз вариант где требовалось остановить выполнение кода после (*error* nil). Выходит мне нужно вместо (*error* nil) использовать (exit), которая уже в свою очередь вызовет *error*...
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А разве настолько необходимо локальное переопределение *error*?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Ну в общем нет. Но так уж у меня пока все написано
__________________
Блог |
||||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Offtop: Привет, Red Nova
Даже и не знаю, с чем тебя поздравлять: с золотом или с бронзой? Однако очень мне жаль, что наши наши не схлестнулись с вашими нашими Насчёт твоего вопроса - то чувство, когда знаешь откуда ноги растут... Цитата:
Мысль была такова, что после выполнения всех действий программы нам надо восстановить состояние среды: вернуть все системные переменные, удалить временные и вспомогательные примитивы, перерисовать (redraw) и т.д. То же самое (как правило) надо сделать в случае вылета программы с ошибкой, когда автоматически вызывается локально переопределенная функция *error*. И в ней по задуманному алголитму содержится (как правило) тот же сценарий, что и после завершения программы. Поэтому, дабы не дублировать куски кода, можно вместо этого в конце функции вызвать (*error* nil). Таким образом, вызвав посреди кода (*error* nil), ты просто вернешь состояние среды в первоначальное, не дождавшись завершения работы программы. Изначально я эту мысль извлек среди прочих из урока gomer'а. Она мне очень понравилась и прижилась. Помню, что делился ею с тобой в какой-то теме, вроде бы даже в этой, но пролистал поиск на несколько десятков страниц - и не нашел. А ты, видимо, чуть подзабыв, интерпретировал ее так, как тебе было удобно в какой-то момент Цитата:
Обеспечить выход (если не говорить о вылете с ошибкой), разумеется, можно через (exit), который спровоцирует вызов *error*. Но давно когда-то читал тут на форуме, что такого выхода лучше избегать. Причин не помню, вроде как они и озвучены не были. Предполагаю, что по мнению автора этой идеи было неправильным искусственно провоцировать ошибку с записью в командной строке "Ошибка завершить/выйти/прервать" (или что-то типа того). И вышло так, что я приучил себя выходить из программы при помощи соответствующего построения алгоритма. Например, использовать cond, и в случае, если не выполняется ни одно из условий, то собственно, ничего и не делать и завершать программу по-тихому. И параллельно приучил себя после урока gomer'a просто вызвать (*error* nil) после завершения cond. То есть приучился не вызывать искусственно завершение программы, так как это приводит к ошибке, но при этом искусственно вызывать программу, которая должна сработать при ошибке Вот такие вот пироги. Да. |
|||
|
||||
skkkk,
Спасибо за развернутый ответ. Познавательно. Цитата:
Offtop: Цитата:
__________________
Блог |
||||
|
||||
Регистрация: 17.03.2018
Санкт-Петербург
Сообщений: 5
|
Всем привет!
Пишу программу на AUTOLISP с диалоговым окном DCL. Обнаружил некие ограничения элемента диалога list_box с установленным атрибутом multiple_select=true. Возвращаемое значение функции get_tile ограничено длиной строки приблизительно 2017 символов. Если количество выбранных элементов списка листбокса формирует строку длиннее 2017 символов (а это максимум 532 первых элементов списка листбокса) get_tile возвращает nil. Значение переменной действия $value ограничено 256 элементами списка листбокса. При указании большего числа элементов в диалоге значение переменной всё равно 256 элементов. Сталкивался ли кто-либо с подобным ограничением? Существуют ли другие способы получить корректное значение из list_box окна DCL при указании более 532 элементов? Версия AutoCAD 2012. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
может, попробовать написать сам диалог не на DCL - например, в виде сборки dll с атрибутом LispFunction
|
|||
|
||||
Регистрация: 17.03.2018
Санкт-Петербург
Сообщений: 5
|
К сожалению ООП, Active X и (.NET) для меня пока слишком высокие материи...
Кроме того, если я верно пониманаю, применение dll подразумевает установку программы и наличие прав администратора? Их у меня нет, - политика компании и всё такое. Программа уже написана. Ошибка вылезла на стадии тестирования. Пока сделал заплатку с выводом сообщения в errtile о слишком большом выборе. Ожидаемое количество элементов списка вышеуказанного листбокса - до 1000 элементов. За две операции выбора задачу по обработке списка можно решить. Однако, удивляет что подобная особенность поведения функции get_tile и переменной $value не описана у Полещука. Также не обнаружил упоминания об этих особенностях на ресурсах Autodesk и у Ли Мака. Вот и закралось подозрение - может проблеммы и нет вовсе... Может чего не то с настройками автокада или проблема как то решается. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
не требует - просто надо будет положить dll в "доверенную" папку (чтобы не выскакивали предупреждения) и загружать перед вызовом программы (или сделать автозагрузку). Их не надо регистрировать в операционной системе. Но может подскажут, как обойти этот ограничение в DCL, конечно.
|
|||
|
||||
Регистрация: 17.03.2018
Санкт-Петербург
Сообщений: 5
|
Благодарю за разъяснение!..
P.S.: Только сегодня зарегистрировался, наблюдаю какие-то то проблемы с форумом: сообщения не публикуются часами, со стационарного компьютера вообще на страницу форума попасть не могу... Пишу с мобильного телефона... |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
М-да, код вызывает оторопь
В функции c:p2, похоже, идет генерация ошибки до того, как вызываются функции восстановления значения переменных. Проходи пошагово, выясняй, в каком именно месте геренируется ошибка.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну тогда советую обратиться к автору кода.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Регистрация: 24.09.2015
Сообщений: 36
|
Дело в том что я не помню автора, я работал с 4-5ю авторами по разным вопросам) Осталось высчитать в блокноте 153-ю страницу.
Я туда строку вставил? https://c2n.me/3SRXgsC |
|||
|
||||
её не нужно вставлять, её нужно закомментировать, поставить в начале ";"
|
||||
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Цитата:
Функцию Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 26.03.2018 в 08:53. |
|||
|
||||
Если выполнять P2, то возврат к привязкам должен осуществляться.
Если выполнять P5 с выходом из цикла по ошибке, то возврата не будет. Если нужен такой цикл, для выполнения возврата, его нужно менять ----- добавлено через ~16 ч. ----- например цикл вызова P2 aka комманду P5 можно реализовать таким образом: Код:
всё-таки наверное не поможет… Wanted, а что хоть делает это творение? Последний раз редактировалось koMon, 27.03.2018 в 11:03. |
||||
|
||||
Регистрация: 24.09.2015
Сообщений: 36
|
Проставляет размеры стен, с последующим удалением, сдвигом или сужением наложенных размеров (для тех. планов)
видео: https://youtu.be/iPOS3xs0V50. ----- добавлено через ~5 мин. ----- И еще сразу вопрос, после использования лиспа, помимо потери привязок в последующем использовании на полилинии появляется ширина (не толшина линии), которую тоже каждый раз приходится выставлять на ноль. Тоже напрягает ----- добавлено через ~3 мин. ----- А если в коде поменять название P2 на Р5 это не поможет? Последний раз редактировалось Wanted, 29.03.2018 в 00:19. |
|||
|
||||
p5 вызывает циклически p2, изменение названия по сути ничего не изменит. можно вызывать одноразово p2 и тогда в случае корректного её завершения привязки должны вернуться, но если завершение будет некорректным, тогды увы. наверное нужно дописать фунцию ошибки, в которую это всё заложить.
ну тут всё-же лучше обратиться к автору… |
||||
|
||||
Регистрация: 24.09.2015
Сообщений: 36
|
Спасибо, функция Р2 действительно возвращает привязки, но ширина остается. Нельзя ли найти строку в коде, которая присваивает полилинии ширину 35 мм. и кк-то поменять на 0? Мне эта ширина в принципе не нужна.
Все уже сам нашел. Всем спасибо, исправил код с минимумом правок. Последний раз редактировалось Wanted, 29.03.2018 в 13:39. |
|||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Всем привет.
Потратил день на то что бы изменить параметр видимости у атрибута динамического блока. Добрался до атрибута, как я понял за видимость отвечает 60й код. Код:
Подскажите пожалуйста как внести изменения в атрибут? Желательно средствами Lisp, а не vla и не командами командной строки |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я пользую нечто типа
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Спасибо за пример. Но что то у меня с 1го класса сложно получается списывать ))). Сложно мне разбираться в чужих примерах, на пальцах проще.
С удалением dxf кода вроде разобрался. А как на счет добавления? Когда я пытаюсь добавить с помощью такой конструкции: Код:
Если да, то что делать? разбивать dxf код посередине ,вставлять новую точечную пару туда, и соединять? Если да, то при помощи какой команды обычно идет разбиение? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Есть разница между list, cons и append. Проверни одно, второе, третье - и посмотри на результаты.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
append - у меня почему то вообще не получилось использовать. Жалуется на неверный список.
list действительно как то не так формирует список. Он их не сливает, а разделяет скобками а вот cons - создает список похожий на правду. И даже entmod не ругается. Но точечная пара не добавляется, и атрибут не исчезает. Самый правильный вариант(вроде). Но все равно не отрабатывает Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А обновлять примитив кто будет? entupd на что существует?
----- добавлено через ~1 мин. ----- Какие результаты будут у такого: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Для этого кода нужно какую то библиотеку подключать? ругается: ошибка: no function definition: _KPBLC-ENT-MODIFY-AUTOREGEN
Код:
Код:
Пытаюсь еще как то так выйти из положения Код:
|
|||
|
||||
Регистрация: 08.09.2010
Москва
Сообщений: 28
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Alexll, код функции я приводил выше - бери, загружай, пользуй.
Прочитай справку, какие параметры понимает entupd. И, кстати, "видимость" для слоя, кажется, особого смысла не имеет. Проще выключить.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
А разве за видимость атрибута отвечает 60-я, а не 70-я группа?
а почему не vla? ведь можно ревлизовать гораздо проще. Код:
Последний раз редактировалось koMon, 02.04.2018 в 17:38. |
||||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Цитата:
А почему видимость слоя? я меняю видимость атрибута блока, то есть примитива. vla совсем не понимаю. Но не отказываюсь. Несколько команд можно и применить. т.к. знаниями не обладаю, занимаюсь исследованиями. Сравнил код со скрытым параметром и с не скрытым. 70й код в обоих случаях равен нулю. dxf коды отличаются только отсутствием или наличием 60й точечной пары. У той таблички есть продолжение? можно на нее целиком взглянуть. Как то искал dxf коды, так и не нашел. атрибут виден, и скрыт: Код:
Последний раз редактировалось Alexll, 03.04.2018 в 04:39. |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Здравствуйте, подскажите кто знает... мне надо совместить в одном коде команду "command" ("vl-cmdf") и затем после выполнения обычный код типа :
Код:
Но в таком случае вначале выполняется весь код, пропуская команду command (компьютер будто ее пролетает, а выполняет уже в конце кода) - мне же обязательна нужен порядок, чтобы вначале разбилась таблица а потом выполнялся код, Как этого добится? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Версия AA?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Цитата:
Дело в том, что показать блок, уже удалось, манипулирую свойствами атрибута. Поэтому и продолжаю идти в том же направлении. Боролся с cons - вроде победил ,вроде что то понял. Но есть другие вопросы, может кто подскажет? 1. Возможно ли при помощи subst заменить одну точечную пару на две? что бы они вошли в список, как точечные пары, а не как подсписок? 2. При добавление точечной пары в примитив, необходимо ставить точечную пару в то место, где она обычно стоит, или можно добавить в начало? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А если
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Нет. Subst заменяет элемент списка на другой элемент списка. Если элемент списка ТП, то и замена должна быть одна ТП.
Цитата:
----- добавлено через ~5 мин. ----- Это атрибут в составе динамического параметра видимости. Нужно из лиспа управлять видимостью этого параметра? |
||||
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Цитата:
Да. Хочу потом все выделить, и все спрятать, что бы на каждый не тыкать. |
|||
|
||||
Цитата:
Код:
Последний раз редактировалось koMon, 05.04.2018 в 15:26. |
||||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Товарищи дорогие, помогите!
Пытался вынуть содержимое из атрибута блока и напоролся на такую штуку - в описании атрибута дважды встречается список с его содержимым, причем первый список содержит только фрагмент, а полное содержимое во втором. "(cdr (assoc 1 (entget ..." цепляет первый список. Как добраться до второго списка с полным текстом? Код:
|
|||
|
||||
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Забыл про постоянные атрибуты...
Как один из вариантов: Код:
Ну и пример вызова: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Кулик Алексей aka kpblc, koMon, спасибо, коды работают, но они работают собственно с блоками.
А я копаюсь в свойствах определения атрибута. Вот в этом блоке текст из атрибута вообще размазался по двум группам И как его поднять? Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Уже говорили - не надо было сохранять под редактором блоков.
Второе. Атрибут имеет как минимум 2 характеристики: TagString и TextString. Для многострочного атрибута есть еще и свойство MTextAttributeContent.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Кулик Алексей aka kpblc, спасибо, понятно. Что ничего не понятно.
Делал массовый экспорт блоков (много) из одного файла каждый блок в свой файл с помощью wblock - нашел несколько программ и все они в таком разблоченном виде выдают. Чтоб в нормальном виде блоки были - не нашел. Буду теперь искать способ все файлы массово заблочивать и читать уже атрибуты, а не их определения. ЗЫ Wipeout-ы все наверх повылезают.. |
|||
|
||||
|
||||
|
||||
Регистрация: 02.07.2014
Сообщений: 55
|
Здравствуйте.
У меня в программе есть две переменные st1 и st2. Им назначено численное значение. Код:
Код:
Разобрался: Код:
Последний раз редактировалось sathalex, 04.05.2018 в 12:53. Причина: сам разобрался |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Выполняй команду через ком.строку и смотри на запросы. Это будет быстрее и проще, чем гадать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Всем привет, подскажите пожалуйста... Мне надо разбить мультилинию и получить все образовавшиеся из нее объекты(отрезки). Вначале думал все просто решаемо :
Код:
Все хорошо разбивается таким способом: Код:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
В таком случае в моей программке entlast может выдать указатель на Мультилинию - так как пользователь перед разбиением может как раз создать мультилинию, и мне кажется в таком случае комп будет ругаться на бесконечный цикл
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
Ну или как вариант - разбивайте на отдельном вспомогательном слое, а потом разом сгребете все объекты полученные. |
|||
|
||||
|
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
пожалуй, это скорее неприятный нюанс
----- добавлено через ~20 мин. ----- но и его можно обойти, например, сделав предварительный набор по границам млинии, и если он будет не нулевой после удаления млинии, вычесть его из выделенных отрезков, после взрыва млинии. |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Выбор по точкам будет работать только при одном условии - все точки, определяющие границы, видны на экране. Так охота тратить тьму времени на регенерацию чертежа?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
ну да, нужно будет определить попала ли млиния в экран, сделать зумаут в её границы если нет, выбрать всё и далее по пунктам, но сдаётся мне, что для юзера это это произойдёт практически незаметно если конечно это делать на vla.
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Без проверок, насухую:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
kurstep, сейчас прогнал код на ACAD2016 (отладку другой задачи приостановил) - работает корректно, ошибки ядра не выдает
sdv79, см. vla-scaleentity
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
только сейчас сообразил - а (command-s "_.explode" ent) случайно не надо завершать пустой строкой? А то как-то я с командными методами не очень...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ага, можно. Если действительно порядок не играет никакой роли.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 23.04.2009
Сообщений: 637
|
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
RrRR, Отслеживание объектов появившихся после pasteclip
Там две функции: mip:mark - маркировка перед взрывом mip:get-last-ss - возвращает ввиде набора вновь появившиеся объекты
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 23.04.2009
Сообщений: 637
|
VVA, спасибо за ссылку!
А мой пост относился только к проверке лиспа Алексея #3550 |
|||
|
||||
Регистрация: 26.08.2017
Сообщений: 43
|
|
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Здравствуйте.
Хочу написать программу, которая просто меняет Justify на right<->left Подскажите пожалуйста как получить значение Justify текста. Или как его можно сразу перезаписать. vla-get-Justification выдает ошибку. Спасибо за ответ и ваше время. Последний раз редактировалось gnuvse, 21.05.2018 в 10:36. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Смог получить значение TextJustify от 1 до 3 в зависимости от положения текста. Как теперь можно перезаписать это значение? Спасибо. |
|||
|
||||
Регистрация: 26.08.2017
Сообщений: 43
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Если через ActiveX, то vla-put-<ИмяСвойства>. Просто про точки вставки не забудь.
Тупой (ssget) работает? pickfirst чему равна?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Примерно так, на скорую руку:
Код:
Код написан без оптимизации, некоторые проверки там лишние - воткнул по привычке.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
gnuvse, пример какого кода? Изменения выравнивания, что ли?
----- добавлено через ~8 мин. ----- Говорит, что Вот интересно, какие дополнения установлены и в каком количестве?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 26.08.2017
Сообщений: 43
|
И для такой тривиальной задачи нужно писать 40 строк с vla функциями? (считая проверки)
Мне просто нужна стандартная команда, только, чтобы она сразу строила по опорному углу Т.е. последовательность такая: 1) Команда: ПОВЕРНУТЬ 2) Базовая точка: указываем точку 3) Выбираем опцию: "Опорный угол" 4) Впечатываем "@", чтобы вернуть последнюю точку 5) Указываем вторую точку Т.е. получается, мы поворачиваем объект как в ревите: сразу строим опорный отрезок и затем поворачиваем его. Можно было бы просто использовать рекордер операций, но он не видит, что я впечатываю "@", к сожалению, поэтому нужно долбить по одной и той же точке два раза (да, раздражает). Цитата:
Я думал, это вполне реализуемо command функциями, кто-то же в начале темы рекомендовал с них изучать автолисп. В других файлах все точно также. Я не совсем понимаю, как они могут влиять на это. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
C vla-put..., если можно законченный пример, чтобы можно было запустить и посмотреть. Не обязательно на TextJustify Спасибо. |
|||
|
||||
Регистрация: 16.04.2016
Сообщений: 72
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
BithSachs, масса слов написано, а ответа на вопрос "работает код или нет" так и не получено. Offtop: Не нравится - не используй. Лень анализировать - я снесу код, не проблема ни разу.
Я начинаю подозревать, что удаление приложений (кстати, каких - это что, военная тайна?) из автозагрузки ничего не дало: есть масса вариантов принудительной тихой загрузки дополнений. Тот факт, что у тебя не работает штатная функция лиспа, может означать что угодно - вплоть до того, что ACAD надо будет полностью переустанавливать. ----- добавлено через 43 сек. ----- Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 26.08.2017
Сообщений: 43
|
Все от Ли Мака
1 Реактор на Орто 2 Layer Director 3 Смена фона Сама по себе ssget работает, но в тех строках с функцией command она не работала, и я у хотел узнать почему. (Ну серьезно, почему у тебя не возникает никаких вопросов, почему эти 8 несчастных строчек не работают?) Твой код почему-то странно поворачивает объект (мгновенно), но до момента выбора второй точки все идет как я и хотел. Последний раз редактировалось BithSachs, 21.05.2018 в 21:22. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Потому что я помню тему (за точность названия не поручусь) "Применить explode к набору". И потому, что команды в лиспе могут срабатывать совсем не так, как в обычном режиме.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Причём, как verb->noun, так и noun<-verb) Код:
Последний раз редактировалось koMon, 21.05.2018 в 22:08. |
||||
|
||||
я тоже хотел… но не то, чтобы left-right, а вообще перебор всего… не думаю, что подойдёт в качестве примера, но может пригодится!?-)
Offtop: да простит меня setvar Последний раз редактировалось koMon, 22.05.2018 в 09:42. |
||||
|
||||
Регистрация: 26.08.2017
Сообщений: 43
|
koMon, работает, действительно. Но я не понимаю, почему присваиваем ss набор, но потом его не используем, а просто пишем _P
И зачем пустые кавычки после этого самого _P? А в одной строчке это нельзя сделать? Код:
Последний раз редактировалось BithSachs, 23.05.2018 в 19:55. |
|||
|
||||
BithSachs,
мы его испотльзуем, но косвенно. команда будет работать только с последним/первым? примитивом из такого пиксета. в команду передаётся селекшн сет, команда ожидает дальнейшшего добавления объектоа, чтобы завершить выбор нужен "", эквивалент <Enter> можно. Код:
Последний раз редактировалось koMon, 23.05.2018 в 21:08. |
||||
|
||||
BithSachs,
по ходу я был не прав, я посмотрел и так тоже работает), всё короче и короче... Код:
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А не проще ли фильтры ssget использовать?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
В каком месте ошибка?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Уважаемый Кулик Алексей, я еще новичок в программирование. Пытаюсь запускать ваш код, выделяю текст и не работает(mtext, text и то и то попробовал). При отладке понимаю, что в ent передается nil. При помощи vl-catch-all-error-message выявил ошибку - bad argument type - lselsetp nil Значит у нас не проходит проверка по типу (type) из этого следует, что я выделяю не тот объект какой надо. Поясните пожалуйста. Если вам не сложно, я хотел бы задать вопросы насчет программы. UPD. Я понял. Мы сравниваем с 'vla-object значит мой текст не является vla объектом. Последний раз редактировалось gnuvse, 22.06.2018 в 22:46. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Строка
Код:
- выбирать только объекты TEXT - исключить выбор на заблокированных слоях - выбирать только один примитив - выбирать примитив под курсором Проверь, что у тебя с состоянием слоев. Ну или образец файла в студию. Сейчас у меня нет возможности проверять код. Может быть, позже - если не забуду.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
У меня нет доступа на яндекс.диск
Вот интересно, а кто мешает файл напрямую в пост приложить?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
test.dwg |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Здравствуйте! Написал маленькую программу с диалоговым окном DCL, для построения продольных профилей, все вроде работает. Так как только учусь не могли бы Вы проверить код на грамотность и подсказать какие места кода можно заменить, чтобы он стал более устойчив в работе. Так же не могу понять как можно объединить все в один файл Lsp, и стоит ли это делать?
Код Lisp Код:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Maksim7enov, http://autolisp.ru/2015/02/05/dcl-develop/ не поможет?
----- добавлено через ~2 мин. ----- gnuvse, у тебя там нет текстов. Есть мультивыноска - но это отдельная песня.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Цитата:
Также пробовал воспользоваться программой которая сама делает из файла DCL лисп, но опять же не получается. Я до выходных опять попробую и результаты выложу, чтобы можно было определить где ошибка. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А так? Тупо и топорно, но у меня работало корректно. Тексты меняют выравнивание и остаются на местах.
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Лучше не тестировать, а разбирать код и находить проблемные места
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
А как работает разбираю конечно. Как можно строку преобразовать в список? Последний раз редактировалось gnuvse, 27.06.2018 в 17:45. |
|||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
Все скомпилировал в Vlx.
Слабоват я еще для такого, сложно понять как свое туда запихнуть. Пытался сделать по этому примеру http://autolisp.ru/2010/03/15/dcl-dialogs-create/ но видимо рано мне еще лезть в такие вещи) В выходные времени будет больше, попытаюсь еще. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Да тут все просто - внутрь основной функции lsp засовываешь кусок, который в %temp% создает временный dcl-файл. А потом уже обычными методами вызываешь dcl-окно и обрабатываешь его.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
После какого-то обновления на сайте почему-то стали не всегда корректно показываться "\" - пришлось править. Если еще обнаружишь ошибки - пиши прямо там, буду по мере поступления исправлять
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Здравствуйте.
Пытаюсь написать функцию, которая должна преобразовать строку в список. На данном этапе она не работает вообще. При проверке участка кода начинающегося с (if (not flag-quotes) интерпретатор выдает ошибку - error: too many arguments: (IF (NOT FLAG-QUOTES) (IF ( ... ) ( ... ) ( ... )) (PROGN ( ... ) ( ... )) ... ) Пытаюсь анализировать код, но не могу понять в чем дело. Подскажите пожалуйста. Спасибо. Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Проверяй соответствие скобок.
ИМХО как-то немного наворочен код. У меня другой вариант, пока что нормально работает: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Цитата:
Первое, что нужно сделать это отформатировать текст средствами редактора. Появятся метки окончания циклов. Второе. При отладке ставь точки останова и пошагово работай. В этой теме об этом писалось не раз. Цитата:
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
А за совет и свой код спасибо, буду изучать. ----- добавлено через ~4 мин. ----- Цитата:
2. Код вообще в интерпретатор не загружается, поэтому не могу отладчиком воспользоваться. Спасибо. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Если не загружается - значит, в нем полно ошибок синтаксиса.
О форматировании: http://autolisp.ru/2017/08/11/code-f...ng-principles/ Для отладки возьми свой код и вколоти его напрямую в VLIDE. А потом - http://autolisp.ru/2009/09/10/vlide-misc-01/ и http://autolisp.ru/2009/09/12/vlide-misc-02/ (ну так, для справки )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,835
|
Я не знаю, что ты понимаешь под словом форматирование. ВСЕ тексты начинающими программировать на ЛИСПе НЕОБХОДИМО писать во VLIDE.
Цитата:
Я не анализировал текст, но ошибка после форматирования вида невооруженным взглядом. В конце текста счётчик (setq j (1+ j)) стоит как третий аргумент IF
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Ошибку уже нашёл. Спасибо. |
|||
|
||||
Цитата:
Вот исправил тебе код все работает: Код:
Код:
__________________
Вечность это: (while T) |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
И стоило ли огород городить?
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
Код:
Дальше разбираться не буду - тупо много работы.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Алексей, здравствуйте.
В рамках своего обучения я хочу написать для себя программу, которая будет просматривать какую-то папку, читать оттуда файлы исходников на autolisp, считать количество слов языка, строки являются 1 словом. После этого создается ассоциативный список с количеством слов на каждый файл, и сортируется по возрастанию. При завершение создается файл куда записываются данные. Таким образом я могу быстро варьировать время на изучение исходников по autolisp, а тем более попрактиковаться на решение реальной задаче. Спасибо. ----- добавлено через 50 сек. ----- Цитата:
А код уже рабочий, можете не проверять. Спасибо |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Сугубо ИМХО - количество строк кода ни о чем не говорит. Да и отформатировать код можно так, что вся функция будет в одну строчку.
Код:
Сейчас, разгребусь тут немного - попробую по шагам разобрать "чтение lsp из каталога" ----- добавлено через ~8 мин. ----- Насчет чтения файлов. 1. Просмотреть каталог на предмет файлов с определенным расширением - см. vl-directory-files. Если понадобится учитывать еще и подкаталоги, то поищи по форуму (по-моему, даже в "Готовых программах" что-то было) 2. Дальше в цикле - открыть файл на чтение, получить количество его строк, загнать результат как точечную пару в результирующий список. 3. Используй vl-sort для сортировки
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
----- добавлено через ~2 мин. ----- Цитата:
Но я хочу по возможности сам писать. В первую очередь я учусь и хочу понимать. А дальше можно использовать готовые функции. А еще лучше и так и так сделать. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я про то, что при чтении такой функции что получим в результате?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Да лааааадно! Я 95% кода буду рассуждать о том, "как прекрасен этот мир" - и что, у нас все это тоже пойдет в результат? А если у меня пойдет многострочный комментарий? Внутри которого будет показываться гарантированно неработающий код?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Цитата:
Строка и строка в строке - это одно слово Алексей, расскажите. Есть ли в автолиспе такие замечательные вещи как continue и break или их аналоги? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Это из C#? Впрямую их нет, но можно же имитировать.
----- добавлено через ~7 мин. ----- Для каких целей требуется continue и break? Во, кстати, задачка на понимание: Код:
https://forum.dwg.ru/showpost.php?p=1420297&postcount=8
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Задачка интересная. Надо подумать. Ответ постараюсь дать вечером. UPD. Работает это примерно так. Поправьте, если не прав. (setq a ‘((0 1 2) (3 4 5) (6 7 8))) (apply ‘mapcar (cons ‘list b)) cons (list b) -> ( ) 1.mapcar -> 0 3 6 -> list -> (0 3 6) -> cons —> ((0 3 6)) 2.mapcar -> 1 4 7 -> list -> (1 4 7) -> cons—> ((0 3 6) (1 4 7)) 3.mapcar -> 2 5 8-> list -> (2 5 8) ((0 3 6) (1 4 7) (2 5 8)) Последний раз редактировалось gnuvse, 02.07.2018 в 20:21. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Каждый спецсимвол экранируется, все верно. В чем вопрос?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Алексей, здравствуйте. Спасибо за ваши ответы. Я пока занимался своим проектом, понаписал много функции для обработки символов, подскажите пожалуйста, как я их могу выделить в какую-то библиотеку? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Кхм... Что значит "в библиотеку"?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну, как один из вариантов: http://autolisp.ru/2018/07/02/some-lsp-to-one/ И потом полученный lsp уже загружать.
Хотя я использую совершенно другой подход, прекрасно описанный в "САПР на базе AutoCAD" (книжка, к сожалению, уже не продается)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Цитата:
В каждой программе, вернее в каждом lsp файле, одной из первой строк висит (if (null *sad_lib_isLoaded) (load "_sad-fun-lib.lsp")) И в конце библиотеки висит исполняемая строчка (setq *sad_lib_isLoaded t) Таким образом, имею проверку, загружен ли файл, и если нет, то он загружается...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 11.07.2018 в 06:54. |
||||
|
||||
Регистрация: 26.08.2017
Сообщений: 43
|
Мне нужно сохранить текущий чертеж в трех разных типах (2013, 2010, 2007), добавить в конце имени год и вернуться на исходный путь файла, путем его перезаписи
Код:
Походу нужно добавить условие, но как его запихнуть в command функцию я не знаю |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Сначала делаете три копии файла, а потом открываете и пересохраняете под нужной версией. А перед этим проверяете - есть ли уже данный файл и удаляете при необходимости. Это будет более надежно, имхо. Например, в .Net это все проще делается - просто делается временная копия БД и сохраняется под нужным именем и версией
Код:
|
|||
|
||||
|
||||
|
||||
Последний раз редактировалось koMon, 15.07.2018 в 21:45. |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
Цитата:
|
|||
|
||||
не успел) но был не прав
|
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
т.е. получается так:
1. Формируются полные имена файлов для более младших версий. 2. Пробуются удалить с помощью vl-file-delete. Если произошла ошибка удаления - то работа лиспа прекращается. Но тут возникает вопрос - как различить успешное удаление существующего файла, отсутствие файла и отсутствие доступа к файлу (т.е. кто-то успел его открыть в акаде, например). В справке вопрос отсутствующего файла проигнорирован - что возвращает в этом случае) 3. Если файлы младших версий успешно удалены, то сохраняет в текущей версии и далее по нисходящей. 4. Открывается снова исходный файл, подавляя диалоговые окна при необходимости. И после этого закрывается файл самой младшей версии. А тут тоже новый вопрос - лисп работает ведь в контексте документа и при открытии нового чертежа прервется выполнение? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
(vla-erase <vla-указатель на описание блока>)
Ну или (entdel <ename-указатель на описание блока>) Попробуй...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
(entdel <ename-указатель на описание блока>) возвращает nil, и описание остаётся в базе.
Это я пробовал первым делом. А по поводу (vla-erase <vla-указатель на описание блока>) в книге Полещука несколько запутано. Написано, что этот метод работает для графических примитивов включённых в набор. И приведён пример с некоторыми предварительными действиями: Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Тьфу, не vla-erase, а vla-delete!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
Ну вот как-то так получается:
Цитата:
А, всё, нашёл решение. Спасибо за наводку. (vla-delete (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) "proba")) http://www.cad.dp.ua/sovets/lisp-functions/purger.php Последний раз редактировалось T.Bagdat, 18.07.2018 в 12:36. |
|||
|
||||
Доброго.
Как разрешить ввод либо реального числа либо точки ? То есть совместить getpoint и getreal в одном? Пока смог только с промежуточным использованием клавиши enter, а хочется по человечески. Код:
__________________
Блог |
||||
|
||||
|
||||
|
||||
Maksim7enov
getkword и разрешить ввод точки с экрана? Это как? koMon getdist то что нужно Спасибо. Код:
__________________
Блог |
||||
|
||||
Регистрация: 25.05.2016
Сообщений: 111
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
У листов есть свои блоки. Которые прямого вхождения не имеют, грубо говоря. Поэтому проверяй у описания блока, не является ли он листом:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Я это понял так, что любое рабочее пространство в акаде - это пространство блока, и отличаются они в первую очередь флагом IsLayout. Список свойств для модели/листа/блока одинаков.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Добрый день! Делаю совсем первые шаги в лиспе. Подскажите следующее:
Ввожу Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
думаю - чтобы выдавал результат, надо что в "x" был не nil - т.е. инициализировать х сначала
----- добавлено через ~4 мин. ----- хотя и Код:
----- добавлено через ~10 мин. ----- А что вы хотите сделать, должно выглядеть примерно так: Код:
Последний раз редактировалось Сергей812, 27.11.2018 в 19:44. |
|||
|
||||
|
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Спасибо. Подскажите, а как извлечь описание слоя (в диспетчере слоев есть такой пункт после имени, цвета, типа линий, веса и пр.). Т.е. имена слоев оставим текстовыми, а цифровую часть загоним в описание (слой "Стены кирпичные", а в описании "2.800")
|
|||
|
||||
|
||||
|
||||
Найди книгу Полещука "Автолисп и вижуаллисп в среде автокад" и изучай структуру документа. Раз уже стоит задача работы со слоями, посмотри в чем разница между (tblsearch "LAYER" (getvar "CLAYER")), (tblobjname "LAYER" (getvar "CLAYER")) и (entget (tblobjname "LAYER" (getvar "CLAYER"))) и разберись со значениями дхф-кодов... или сразу изучай ActivX
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Вот на Авито продается, за копейки - https://www.avito.ru/ekaterinburg/kn...ocad_811022774
|
|||
|
||||
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Проходишь по всем элементам набора и делаешь что хочется. В чем собственно вопрос?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Подскажите, как добраться до геометрических свойств полилинии (конкретно к площади).
Просто Код:
Может возможно быстро добраться до этой информации через Свойства ActiveX Что то наподобие такого Код:
|
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Добрый день!
Вызвался помочь знакомому студенту в написании лисп программы. На первый взгляд задание простое. Отрисовать букву "З" заданной высоты. Нарисовал букву. Задал точки. Нашел координаты. Командными методами отрисовал графику. Но вот условие задать уклон, выбило меня из колеи. В каком направлении двигаться? Переопределять точки в зависимости от угла? Вроде сделал, но при отрисовке ерунда получается какая-то. Подскажите, что делать? Код:
__________________
слесарь САПР |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
----- добавлено через 43 сек. ----- То есть "уклон"? Трехмерное тело надо, что ли, создать?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Тогда пересчитывай точки.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
в том то и дело, по какому алгоритму пересчитывать?
расстояние по оси Х у каждой точки меняется по разному.
__________________
слесарь САПР |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
См. DXF 70, если не ошибаюсь.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Сначала выполнить (vlax-dump-object (vlax-ename->vla-object (car (entsel))) t) Изучить полученный список свойств и методов. Цитата:
Цитата:
з.ы. может так? (ssget '((0 . "LWPOLYLINE") (-4 . "<OR") (70 . 1) (70 . 129) (-4 . "OR>")) ) вероятно остальные флаги не сильно актуальны...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 13.12.2018 в 14:37. |
||||
|
||||
F1 справка.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Цитата:
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Получи указатель на описание блока и проходи по описанию.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Взрывать не надо. Насколько я помню (ACAD запускать лениво) - см нечто типа
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Цитата:
Как получить vla-объект, который находится в блоке... Правда, этот вариант без взрыва - да, а вот без ActiveX - нет. Вопрос: чем не устраивает ActiveX? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
Может, пишется под какой-нибудь клон, где ActiveX просто не реализован.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Цитата:
Подскажите (или ссылку на страницу этой темы, уверен, что обсуждалось на одной из 185 страниц), как редактировать примитивы внутри блоков. Интересует вариант с взрыванием и без. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Взрывать точно не надо. А так - в готовых программах "Работа с подосновой", в библиотеке функций - "Нормализация блоков"
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
работа все больше удивляет Регистрация: 24.02.2012
Украина
Сообщений: 13
|
Здравствуйте! О лиспе и программировании только слышала, поэтому мой вопрос задаю здесь.
Есть программа, написанная в лиспе. Это расчет. Хотелось бы иметь то же самое, только в php. Есть человек, готовый сделать в php, но абсолютно не знакомый с лиспом. Вопрос у меня такой: как сделать задание для выполнения расчета на php? Точнее, как вычленить данные для задания из программы, написанной на лиспе? Вообще технически это реально сделать, если я в этом не в зуб ногой? |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
Если программа не скомпилирована, то исходный код открыт. Только зачем - PHP и лисп даже по синтаксису разные. Дайте человеку набор исходных данных, методику расчета и форму выходных отчетов. |
|||
|
||||
Регистрация: 24.03.2011
Сообщений: 12
|
Во всех учебниках написано что функция (ssget< точка >) формирует набор из всех примитивов проходящих через точку.
Вот простенький код: (command "_pline" '(10 10) '(-10 -10) "") (command "_pline" '(-10 10) '(10 -10) "") (setq obj (ssget '(0.0 0.0))) (setq b (sslength obj)) На выходе я получаю b=1. Что я не так делаю? Почему выбирается только один примитив, а не два? |
|||
|
||||
|
||||
|
||||
Регистрация: 24.03.2011
Сообщений: 12
|
Вот собственно цитата из Полищука.....
https://ibb.co/vPV05jd А методом научного тыка удалось установить, что выбирается примитив лежащий выше ... |
|||
|
||||
Регистрация: 24.03.2011
Сообщений: 12
|
Извините, но я опять заблудился в трех соснах)))
Вот простенький код: (setq z (cdr (assoc 11 (entget (car (entsel "ВЫБОР : \n")))))) (if (= z '(0.0 0.0 0.0)) (setq k "да") (setq k "нет") ) Делается выбор текста. На выходе К всегда НЕТ. Вот картинка: https://ibb.co/r33s2Pv Что у меня не так? |
|||
|
||||
Самому стыдно, не знаю базовых вещей, хоть и умудрился что то написать/адаптировать для своих скромных нужнд. Может быть просто давно не занимался автолиспом. Разбираю вот такой кусок кода:
Код:
Я пытался так: Код:
Код:
|
||||
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 165
|
Попросили помочь определить через Лисп функцию, созданную на VBA. Не получается.
Если просто запустить - работает. Код:
Код:
Команда: _appload Name2.lsp успешно загружено. Команда: ; ошибка: считан неверный символ (восьмеричный): 0 В чем тут дело? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
baaba, а что за код у Normal3points ?
mkung, попробуй через vla-runmacro: https://knowledge.autodesk.com/searc...2C707-htm.html
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
поди выдает ; ошибка: no function definition: NORMAL3POINTS ??
В таком виде никто код не проверит, потому что отсутствует описание функции Normal3points используемой в твоей IsInTriangle теоретически правильно первый вариант:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
|
||||
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 165
|
Цитата:
Код:
То есть если я в командную строку ввожу выражения - работает. Если записываю их в Лисп-файл и загружаю - ошибка. Последний раз редактировалось mkung, 29.01.2019 в 12:58. |
|||
|
||||
Когда все функции загружены, нормально возвращает t/nil в зависимости попадает точка в треугольник или нет...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
mkung, я не работаю с VBA внутри ACAD (и никому не советую). VBA-Enabler у меня не установлен уже неизвестно сколько времени. Так что проверить не могу и вряд ли когда-нибудь смогу.
По сообщению непонятно, в каком месте вообще ошибка - может, в загрузке, может, в вызове. Кстати: https://www.afralisp.net/archive/met...cro_method.htm ----- добавлено через 40 сек. ----- И туда же, из официальной справки: после загрузки почему-то вызывается не просто имя процедуры: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Дампить объект, смотреть его свойства и методы - и работать с ними.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 24.03.2011
Сообщений: 12
|
Есть полилиния. Через getpoint ввожу 2 точки и через inters получаю точку пересечения с полилинией. В мировой системе координат все работает замечательно, но если я поменяю систему координат на пользовательскую то точки пересечения нет. Прога не работает.
Даже не представляю в каком направлении копать. Подскажите... |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
копать в сторону хэлпа:
Цитата:
|
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Здравствуйте.
Я хочу написать игру - тетрис, но я понимаю, что в лоб я ее не напишу, потому что многого не знаю. Первым делом хочу научиться двигать какой-то объект стрелками, пожалуйста, подскажите в какую сторону мне копать, что прочитать. Спасибо за ваши ответы и время. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Именно на лиспе в акаде?)
grread - считывание клавиш управления "на ходу в цикле" в цикле. А рабочее поле - вспомните китайские электронные игрушки-96 игр в одной: рабочее поле состоит из квадратиков - 20 шт в высоту и 10шт в ширину. Соответственно, делаете из тех же блоков такое поле (не забыв цвет блоков выставить - по блоку). И далее перекрашиваете блоки под цвет фона, если надо скрыть. И под рабочий цвет - чтобы показать. Самый трудоемкий - это вопрос алгоритма: пересчет матрицы 20х10 в такт движениям деталек, их смещениям и повороту. И временную задержку еще откуда взять в цикле - в лиспе ее вроде нет в явном виде. |
|||
|
||||
Delphi, Assembler, PHP, VB, Lisp с 01.02.2019 Регистрация: 10.02.2019
Воронеж
Сообщений: 30
|
Цитата:
А вообще, сначала ТС должен сам себе ответить на вопрос: "а как это вообще сделать?", не привязываясь к конкретному языку и системе. Цитата:
----- добавлено через ~3 ч. ----- Хотя, не знаю, а вообще можно ли обновлять экран во время работы скрипта? У меня не получилось. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
redraw или vla-regen - по вкусу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Я попробую на бумажке прикинуть, как бы я это сделал. Но наверняка на бумажке будет проще чем в коде. Цитата:
Спасибо за наводку. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Offtop:
Цитата:
А вот логическую матрицу, в которой будет производиться анализ возможности сдвига элемента, совпадения всех элементов в ряде и т.п. лучше сделать с 3 лишними строками вверху. Эти строки не будут связаны с полем отображения - но в них будет сформировано логическое отображение очередного элемента перед началом его спуска вниз. Это для унификации кода движения элемента по вертикали. |
|||
|
||||
Delphi, Assembler, PHP, VB, Lisp с 01.02.2019 Регистрация: 10.02.2019
Воронеж
Сообщений: 30
|
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Помогите разобраться с функцией trans
Хочу выделить объекты внутри контура полилинии. Код ниже работает: Код:
Пытаюсь докрутить код, чтобы выделить объекты внутри полилинии, которая принадлежит блоку Код:
но тут затык. Имя полилинии из блока вытащил, координаты вершин полилинии получил, но при их преобразовании что то идет не так. Код работает, объекты выделяет, но только вот область выделения объектов лежит далеко за пределами полилинии / блока Когда полилинии сама по себе, то преобразование координат из мировой в текущую происходит корректно Код:
Похоже, что берутся координаты границ блока ("местные" с нулем, совпадающим с базовой точкой блока) и далее код применяет "местные" координаты к текущим (или мировым). Выделение происходит около начала координат. Я так понимаю необходимо совершить дополнительное преобразование координат блока в текущие координаты. Но как это сделать. Подскажите. ----- добавлено через ~16 мин. ----- Кажется понял, нужно к каждой "местной" координате полилинии прибавить координату базовой точки блока. |
|||
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
Подскажите, можно ли с помощью лиспа подсветить не всю полилинию, а отдельный сегмент, на манер стандартной команды Сопряжение?
Пробовал рисовать поверх сегмента отрезок, и подсвечивать его. Но когда линия не сплошная, а с условными обозначениями, и включена генерация типа линий, то выглядит очень коряво. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Насколько мне известно, в лиспе подобного нет, не было и вряд ли предвидится.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
не знаю есть ли это на Лисп, но когда мне нужно было реализовать подобное, то я использовал транзитную графику, т.е. просто поверх линии рисовал нужное.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
|
|||
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
Сергей812, спасибо. А можно окончательно разжевать, для совсем не понимающих английский, что именно нужно сделать с этим кодом, чтобы он превратился в аля-лисп ?
Например, на сайте сказано, загрузить код в автокад и выполнить команду Код:
Код:
Код:
Или вот ещё, в этом примере код начинается [LispFunction("DisplayFullName")], а тот код, который нужен мне для подсветки сегментов начинается [CommandMethod("HighlightPolySeg")]. Это влияет на технологию подгрузки? ----- добавлено через ~5 мин. ----- Цитата:
Я не знаю, что такое транзитная графика, но если это что-то более изящное, объясните, пожалуйста, о чём речь. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Там не все надо копировать из первой ссылки. Это имя команды для вызова из комстроки, вообще не нужны эти строки. Что на входе в аля-лисп функцию будет - указан примитив (полилиния) и индекс сегмента для выделения или как?
----- добавлено через ~13 мин. ----- и код .Net сначала откомпилировать в сборку *.dll один раз и загружать потом вместе с lsp кодом основным. |
|||
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
Цитата:
А вот после чудесного слова "откомпилировать" мне прям совсем интересно стало Последний раз редактировалось T.Bagdat, 14.06.2019 в 15:02. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Ну примерно так:
Код:
Вызов из лисп-программы будет выглядеть (HighlightPolySeg %Примитив-полилиния% %Индекс сегмента для выделения (с единицы)%). Для теста: Код:
|
|||
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
С проверкой на валидность я справлюсь
А по поводу компиляции и подгрузки хотелось бы сразу уточнить. По ссылке, что вы привели, предлагают загрузить и установить некий ObjectARX. Если это необходимо для того, чтобы код у меня заработал, значит - это не мой случай. На работе нас правами на установку сторонних приложений не балуют. А если это всего лишь среда с базой дополнительных DLL, открывающих новые возможности для того же LISP, а ваш код будет работать и без неё, то подскажите, как и в чём его скомпилировать, и как подгрузить. Попробую скомпилировать его дома, и сбросить на рабочий комп. В любом случае спасибо, что откликнулись, и нашли время на написание кода |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
----- добавлено через ~11 мин. ----- ну или вообще без студии - с помощью встроенного в сам .Net фреймворк компилятора командной строки csc.exe. Но проще все-таки студию поставить) ----- добавлено через ~20 мин. ----- а чтобы сборка загрузилась вместе с основной лисп-программой - можно тыц. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
И у лиспа есть функции работы со строками )
|
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Сергей812, спасибо!
Есть в наличии http://www.private.peterlink.ru/pole.../Alisp2006.htm Сейчас возникла необходимость написания лиспа - листаю, разбираюсь... Еще вопрос - если не затруднит: как в лиспе сделать быстрый выбор всех полилиний (адаптирую polyline_coord под свои задачи). Быстрый выбор ssget я понял. Не понятно, как потом "поштучно" из полученного набора вытаскивать по одному элементу на обработку. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Так листаю ж, пишу))
Решил вопрос, оказалось, модификация не такая сложная. Остался последний вопрос - как в лиспе получить имя и путь к файлу чертежа, из которого он запустился? Необходимо сохранять файл извлечений с тем же именем, что и файл чертежа, и в ту же папку. Можно, конечно, сделать "по классике": Код:
Последний раз редактировалось superkot007, 02.08.2019 в 23:12. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну, не будет - если только в ответ на getfiled не нажать Esc
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Выравнивание: либо менять свойство AttachmentPoint, либо менять 71 группу в DXF. А что за "высота рамки"? Если блок - то соответствующие масштабы.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Тогда как бы решить вот такую задачу. Смотри поясняющую картинку. Нужно программно задать ширину, высоту, содержимое и выравнивание мультитекста. В случае на картинке пользователь задает ширину зеленой рамки, высоту этой рамки, текст, указывает точку вставки (красный квадратик) и программно рисуется мультитекст по заданным параметрам. Прототип функции такой:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Все просто:
1. Проверить наличие слоя 2. Если слой есть, то разблокировать и разморозить 3. Пройтись по всем блокам (включая модель и пространства листов) и удалить в них примитивы, лежащие на слое Скорее всего, будут проблемы с атрибутами и описаниями атрибутов, но это уже отдельная песня.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 21.07.2019
Сообщений: 3
|
Благодарю за быстрый ответ, но есть пару нюансов:
1. Алгоритм действительно не сложный и понятный, но с реализацией у меня проблема, хочу воспользоваться: "Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)". 2. Из блоков и листов удалять не надо. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Вспомнился Эйнштейн со своим "Вы думаете, что всё так просто? Все просто, но совсем не так!"
jeka_me, "научите" и "напишите" - это ведь два разных слова с далеким друг от друга смыслом. Ход хитрый, но кажется, его уже раскусили Знаю, знаю, вместо того, чтобы ворчать тут, предложил бы что-то по делу. Рекомендую попробовать из готового - тема на форуме "Подготовка подосновы". Там есть команда, которая удаляет слой вместе со всеми объектами на нем. Правда, судя по описанию задачи, сам слой удалять не нужно. Тогда можно вот так (без проверки на блокировку/заморозку слоя, без удаления в блоках и на листах - удаляет в текущем пространстве, т.е. в данном случае - в модели): Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А есть еще команда _.laydel, которая заодно и слой сносит...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Добрый вечер!
Как разбить строку на части, например, по встречающимся "-"? Исходные строки типа "AA.BBxCC.DD-EE-FF-GG-HH-12345-I-J-6.7 лист 98". Попробовал следующее: Код:
С PP0 все нормально, в нее попадает "лист ...". А вот в переменную PP1 могут попадать как корректные значения (новая строка заканчивается цифрой/буквой) так и какие-то выкидыши (новая строка заканчивается "-", хотя до обрезки по "-" еще не подошли). Соответственно, дальнейшие разделения превращаются в кашу. ??? |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Как написан, так и работает) Есть исходная строка, ввести две локальных переменных - индексы начала (SSG) и конца сегмента (ESG).
Вначале SSG=1, ESG=индекс позиции первого разделителя (через поиск)-1. Получили через substr первый сегмент. А потом SSG=ESG+1(после разделителя), и если SSG не вышло за пределы строки - ищем ESG как следующую позицию разделителя, при этом SSG-1 является позицией начала поиска для vl-string-search. И так сдвигаемся по исходной строке, не надо никаких подрезок строк делать - наверняка там где-то и вылезают выкидыши ваши из-за несогласованности индексов позиций. p.s. Если один символ в разделителе - то лучше vl-string-position использовать, наверно - она должна быстрее работать по идее. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Сергей812, спасибо за расписанный алгоритм)
Получилось примерно следующее: Код:
Повторяя строки 2-4 нужное число раз, извлеченные фрагменты передаются в дальнейшую обработку. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Спасибо всем ответившим!
Новый вопрос - как создать список, добавляя каждый элемент через while? Суть в следующем: обрабатывается набор примитивов, из каждого нужно получить определенный параметр (строка). Перебор примитивов по while и возрастанию порядкового номера примитива понятен и реализован, а вот создание списка и добавление к нему элемента - нет. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
cons, append и иже с ними.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Доброй субботы, форумчане!
Создавать отдельную тему не рискнул, посчитал пост здесь более уместным. Так что извините, если не прав) Очередная проблема, которую, я думаю, можно решить через lisp, состоит в следующем. Есть большое количество таблиц в dwg-формате, которые не имеют границ ячеек, только внешние границы самих таблиц. В качестве границ ячеек используются разное расстояние между строками, по которым таблицами вообще можно пользоваться. Отдельные ячейки могут содержать несколько однострочных текстов, могут быть пустыми, объединенных ячеек - нет. Пример выложить не могу, конфиденциальность и все прочее... Есть ли какое-нибудь решение по экспорту подобных таблиц в Excel, которое требовало бы минимальной доработки? Поиском пользовался. Из наиболее близкого, как мне кажется, является pl_export-to-excel.LSP из https://dwg.ru/dnl/6638. Если "вручную" прорисовать границы ячеек - отрабатывает великолепно, но прорисовка границ займет много времени... Дополнительная морока - с однострочными текстами в ячейке. Их нужно объединять, а это доп. время... pl_export-to-excel.LSP подправил, под работу с MTEXT (вместо "TEXT" нужно использовать "*TEXT"), про _txt2mtxt из Express - в курсе. Если бы можно было как-то программно прорисовать внутренние границы, объединить однострочные тексты ячеек в многострочные - можно было бы пользоваться pl_export-to-excel.LSP. Был бы безмерно счастлив, если бы кто-то уже решал подобную задачу и поделился бы инструментами решения... Но, думаю, вряд ли такое случится... Потому, если у кого есть подсказки по решению проблемы - тоже буду благодарен. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну, чисто теоретически: с каждого объекта забрать его границы, проанализировать тексты по их границам (возможно, надо будет фасовать центры), потом сформировать массив и заполнять им создаваемый объект ACAD_TABLE.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
И чем вот это не подошло?
|
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Сергей812
Не понял про имитацию, если честно) Есть файлы dwg, в которые программно (неизвестно из чего и так) выгружены данные - однострочные тексты. Моя задача - собрать таблицы в Excel и обработать. В ручном режиме я это могу сделать - прорисовать горизонтальные/вертикальные внутренние границы, объединить строки в одной ячейке в MTEXT, применить pl_export-to-excel.LSP. И получу хорошие таблицы... Через несколько недель-месяцев)) Задача - понять, как это все можно автоматизировать и свести ручные доработки к минимуму. Кулик Алексей aka kpblc Я изначально предполагал такой алгоритм: 1) получить набор примитивов, входящих в таблицу (выбор по двум точкам противоположных углов области), это сделал; 2) создать "поднаборы" по колонкам (M штук), с сортировкой по координате вставки однострочного текста, сверху вниз - чтобы определить, какая из колонок состоит из наибольшего количества строк (N в будущем массиве); 4) создать "временный" массив (N строк / M столбцов) однострочных текстов - для пустых ячеек предполагалось создавать однострочные тексты постоянного содержания, чтобы все "поднаборы" имели одинаковое количество примитивов, в нужной последовательности; 5) по перебору элементов массива слева-направо, сверху вниз (или по одинаковым порядковым номерам "поднаборов"?) провести проверку однострочных текстов на необходимость сцепления в итоговую таблицу: - если текст ниже проверяемого - "постоянный", то строка не меняется, если отличается - произвести сцепление; - в случае сцепления однострочный текст ниже меняется на "постоянный", если вся строка состоит из таких однострочных текстов - она не обрабатывается; - результаты обработки/сцепки передавать в "итоговый массив" - таблицу (N1 строк / M столбцов), N1 <= N; 6) после получения массива итоговой таблицы - можно прорисовать горизонтальные и вертикальные отрезки; 7) применить pl_export-to-excel.LSP и последовательным выбором пройтись по всем таблицам со всеми границами. Может, что-то пропустил, неточно описал... Такой алгоритм возможно реализовать? ----- добавлено через ~6 мин. ----- Попадалось. Но это для полноценных таблиц AutoCAD, а у меня примитивы, однострочный текст. СПДС-овское "втаблицу" тоже не прокатило - нужны внутренние границы для распознавания ячеек. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
так как
то фиг знает. А почему не выгрузить в эксель содержимое однострочного текста с координатами и там уже не обрабатывать? Если есть координаты в параметрах извлечения данных, не помню навскидку.. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Сергей812
интересная идея обходного решения, не думал об этом) Извлечь - можно, координаты и содержимое передаются. Но потом это надо "растаскивать", судя по всему - вручную... По времени - проще "пробежаться" по ячейкам, объединить нужные строки в многострочные тексты, раскидать отрезки в качестве границ и использовать pl_export-to-excel.LSP Но это натолкнуло на другой алгоритм: - разместить все области таблиц друг над другом (1 таблица в одном файле, можно автоматом собирать все в одном, задавая смещение вставки относительно уже вставленных, программка - fast-copy, http://weisskrahe.ru/costenfree/costenfree.html); - в первой колонке есть номера строк таблицы; над ними на какой-нибудь высоте можно автоматом "раскидать" горизонтальные границы ячеек; - вертикальные границы можно "раскидать" аналогично, тут даже проще, так как нет объединенных ячеек; - внутри каждой ячейки объединить строки в MTEXT - (выбор текстов по контурам (через КОНТУР (_BOUNDARY) или КПОЛИ (_BPOLY)) и применение к ним _txt2mtxt ?) - как будет "сетка", подготовленные тексты в ячейках - можно применять pl_export-to-excel.LSP; - в Excel останется только повторяющиеся шапки убрать и отформатировать. Последний раз редактировалось superkot007, 07.09.2019 в 20:54. |
|||
|
||||
Регистрация: 06.06.2016
Сообщений: 327
|
В интернете пишуть, что ЛИСП предназначен (и создавался) ИСКЛЮЧИТЕЛЬНО для разработки систем искусственного разума.
Тогда почему на нём пишут только простенькие скриптики в автокаде и больше нигде не используют? ----- добавлено через 58 сек. ----- Хотел создать тему в "разное". Но там запрещено создавать темы. А мне вообще во всех разделах почему-то запрещено создавать темы. Поэтому спрашиваю тут ----- добавлено через ~3 мин. ----- Где можно почитать про использование ЛИСП конкретно для проектирования систем искуственного разума и где можно ознакомиться с примерами ИИ на Лиспе |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Цитата:
Примерно там же, где объясняется, что такое ИИ.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
По какому критерию можно создать набор из полилиний, замкнутых в контур, у которых из общего - длина/ширина и количество вершин (есть прямоугольники с 5 вершинами (1 и 5 совпадают)?
Можно было бы по постоянной длине, но такого параметра после Код:
|
|||
|
||||
конструктор Регистрация: 21.07.2007
Петрозаводск
Сообщений: 1,983
|
Цитата:
Цитата:
Как бы не пришлось брать список всех полилиний, а потом строить новый по критерию. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Что значит "ширина"? ContantWidth? Ну и ладно, собираем все что даст пользователь, а потом из набора убираем ненужное. ИМХО - самый простой способ.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
SetQ, ну кто ж его знает
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Задай вручную и посмотри форматирование аннотации - если это многострочный текст, конечно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Цитата:
Другой вопрос родился по мультивыноске. Можно ли программно удлинить полку выноски за текст выноски? Вот как во вложении (картинка 2). Там слева оригинальная мультивыноска и мне не нравится, что единица на самом краю полки. Хотелось бы, чтобы текст был посередине полки, как в варианте справа (это уже не мультивыноска, а просто набор примитивов).. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Повторюсь: 90% вопросов снимается после ручной настройки элемента и его дампа.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
С шрифтом разной высоты еще ладно, я могу вручную изменить и посмотреть "Содержание" в свойствах. А вот как вручную добиться внешнего вида мультивыноски как у меня во 2 вложении (правое изображение) - пока не придумал.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Я бы смотрел в сторону настроек стилей мультивыноски и размеров аннотации. Поскольку подобной задачи никогда не стояло, навскидку ничего больше сказать не могу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
https://www.google.com/search?client...rmatting+codes
https://adndevblog.typepad.com/autoc...mat-codes.html
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
в реализации полки для мультивыноски в автокаде используется фактическое подчёркивание самой длинной строки мтекста мультивыноски и едва ли можно будет её продлить за пределы текста состоящего из одной строки. если только вставлять в конец строки непечатный символ(ы), которые будут строку невидимо удлинять.
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Изучай, пиши, публикуй. Никто не сказал, что это невозможно: theswamp.org, и поиск по слову genetic. Вперед, учиться никто не запрещает.
----- добавлено через ~2 мин. ----- http://www.theswamp.org/index.php?topic=30434.0 http://www.theswamp.org/index.php?topic=9042.0 Ну и далее по тексту
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 06.06.2016
Сообщений: 327
|
Цитата:
Если за 60 лет, что существует ЛИСП, он так и не стал мейнстримным ЯВУ для разработки систем искусственного разума и используется в основном для написания простеньких скриптов в автокаде (и даже в автокаде его теснят VBA и C#), то значит учить его смысла нет |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
superkot007, обе точки должны быть на экране в момент выбора. По-моему, только в последних версиях что-то на эту тему поправили.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
1. Кондратий Тихонович, Вы бы хоть Wiki почитали... https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%81%D0%BF Вот определение из вики: Цитата:
2. Я пометил и слово семейство в определение, т.е. это не один язык, а масса диалектов. Удивлен, что за 30 лет программирования на С и С++, Вы не осознали разницу в диалектах компилятора. 3. Пишут простенькие скрипты для автокада именно потому, что диалекты AutoLISP и Visual LISP предназначены для написания простых скриптов под автокад. С Уважением Ваш Капитан очевидность. 4. Вы видимо не умеете пользоваться поисковиками, иначе Вы бы обнаружили, что лисп используестя и очень активно, например Clojure , один из диалектов лисп под платформы JVM и CLR или Ruby- один из популярных языков для Web разработки. К примеру вот в этой статье https://techrocks.ru/2018/04/27/prog...s-rating-2018/ можно увидеть, что Во всем мире программисты, которые используют F#, Ocaml, Clojure и Groovy получают самые высокие зарплаты, медианное значение — выше $70 000 в год. Да и если бы Вы крутились в прогерской тусовке (за 30 лет то), то не могли бы на заметить рост популярности функциональных языков программирования, таких как Common Lisp, F#, Clojure, Haskell, Erlang, Scheme, Ruby. ЗЫ. Пока писал все вспоминалась сцена из Основания А.Азимова, где принц регент разговаривает с Леопольдом и ту самую фразу (по памяти): "Так вот, Ты Дурак, Ваше величество!" Обидеть никого не хочу, но вот вспомнилось что то.... |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
_$ (setq str "строка-с-б-о-л-ь-ш-и-м-к-о-л-и-чс-е-с-и-т-в-р-м")
"строка-с-б-о-л-ь-ш-и-м-к-о-л-и-чс-е-с-и-т-в-р-м" _$ (LENGTH (vl-remove-if-not (function (LAMBDA(x)(= x 45))) (VL-STRING->LIST str))) 20
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Цитата:
Никаких "подсветов" точек нет. В 2006, по Полещуку, был вроде подсвет, но проверить нет возможности. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Проверь длину набора - может, он у тебя пустой получается.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Заменить "," на ".". Например, через vl-string-translate
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
А нет способа попроще преобразовывать вещественные с разделителем в виде запятой? Может быть какая-то глобальная установка, определяющая разделитель целой и дробной части. А так придется контролировать каждую строчку, которую преобразовываю.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
В лиспе разделитель только точка, без вариантов. Потери на преобразование (ИМХО) минимальны.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Напишите свою функцию преобразования на базе atof с контролем наличие запятой. Зачем однотипный код дублировать
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Что значит, "подсветов точек" я не понял. Цель - выделить синими ручками (квадратами) точки в рамке, ограниченной точками pt1 и pt2, или же нужно визуальное отображение рамки выбора? Нужны подробности. Я, помнится, совершенно не контролировал строки на наличие запятой. Просто оборачивал atof в функцию замены символов в строке, и если запятая в строке имелась, она заменялась точкой, если же нет - возвращалась строка без изменений. Правда, не помню, какая это была функция: vl-string-translate или vl-string-subst. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Конкретно здесь сработало:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 24.03.2011
Сообщений: 12
|
Спасибо! Только подскажите как получить значение атрибута. Я вижу только название атрибута.
(setq lead (car (entsel))) (setq spis (mapcar (function cdr) (vl-remove-if-not (function (LAMBDA (x) (and (= (car x) 330) (= (cdr (assoc 0 (entget (cdr x)))) "ATTDEF")))) (entget lead)))) (setq att0 (entget (nth 0 spis))) ((-1 . <Имя объекта: -1de948>) (0 . "ATTDEF") (330 . <Имя объекта: -1df060>) (5 . "6948F") (100 . "AcDbEntity") (67 . 0) (8 . "0") (440 . 16777216) (100 . "AcDbText") (10 -0.26929 1.56192 0.0) (40 . 2.5) (1 . "") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "") (2 . "ПРЕПЯТСВИЕ") (70 . 0) (73 . 0) (74 . 0) (280 . 1)) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Достаточно было немного подробнее посмотреть на результаты entget:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.01.2010
Сообщений: 254
|
Цитата:
В книге об этом не было сказано, там про "подсвечивание пунктиром примитивов из набора". Тогда проверю в своем коде еще раз. Если чертеж небольшой - проще, наверное, будет сразу весь его выводить в видимую часть экрана - как это сделать, не подскажите? |
|||
|
||||
Привет други.
Вот вам вопрос. Имеется Excel файл с ценами на перечень продукции. Цены периодически меняются, соответственно файл обновляется. Требуется из лиспа заглянуть в Excel файл, найти строку с именем продукта, и для этой строки получить значения ячейки с ценой. Нечто похожее на VLOOKUP, только работаем из лиспа. Это реализуемо? Добавлено. Пример Excel файла прикрепляю. В столбце А наименование продукта. В столбце B цена.
__________________
Блог Последний раз редактировалось Red Nova, 30.09.2019 в 17:53. Причина: Добавил пример |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Все верно.
Обновил исходный пост, добавил пример файла с данными.
__________________
Блог |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
все равно же будете открывать эксель и загружать в него файл (программно или вручную). Так пускай эксель и ищет: делаете скрытую строку над таблицей (чтобы не смущать заполняющих таблицу). В ячейку А1 заносите имя продукта, в ячейку B1 формулу: через функции ПОИСКПОЗ находите строку с данных продуктом, а затем через функцию ИНДЕКС подтягиваете значение цены. И все сводится к записи в ячейку А1 имени продукта, и забора значения цены из B1 ячейки (или B2 - какая там нужна). Чтение/запись в ячейку листа экселя на лиспе в инете 100% есть)
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Red Nova, вот тут прога от Евгения Елпанова - считывает эксель-файл в список лисп. Выдернуть значение нужной ячейки из списка, думаю, не составит труда. Предполагаю, что с помощью assoc. Правда, код не проверял.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
или сохранить в экселе в текстовой формат, а потом считать в лиспе.
----- добавлено через ~15 ч. ----- и это проще всего, кстати - сохранить в текстовой файл с разделителями-табуляторами. А при чтении этого файла распарсивать считанную строку rls: Код:
Последний раз редактировалось Сергей812, 01.10.2019 в 10:57. Причина: дублирование слов |
|||
|
||||
Спасибо за советы
skkkk - Не сумел заставить программы Елпанова работать. Может проблема х64, а может руки крюки... Сергей812 Цитата:
Код:
__________________
Блог |
||||
|
||||
если нужно скругление, то лучше вводить 3 точки и задавать радиус и потом генерить плинию. а дальнейшая цель вообще какая?
|
||||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
|
|||
|
||||
Red Nova, очень давно на форуме скопипастил, уже не скажу у кого, но всегда работало:
Код:
Сет, вычисляй центр кривой и задавайся кривизной Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Цитата:
1. по вводимым точкам динамически отрисовывать плинию 2. при этом для конвертации какого-то угла в дугу нужно сделать перехватчик указания на это действие и как-то задавать радиус дугового сегмента. в результате будут пересчитаны конец и начало двух последних сегментов и между ними будет вставлен дуговой сегмент. можно даже сделать динамические изменения для направления дугового сегмента и радиуса. 3. это должно выглядеть красиво 4. но потребует написания нешуточного лиспа. если генерить плинию по координатам из файла - это много упростит лисп имхо, но считать всё равно придётся. |
||||
|
||||
Цитата:
__________________
Блог |
||||
|
||||
Приветствую, коллеги!
Мастера, гуру, научите плохому! Два вопроса: 1. Как лучше обрабатывать нажатие ESC при обработке (grread)? а. *error*, b. vl-catch-all-apply 2. Это вообще адекватное решение, перерисовывать выноску с отловом точки через grread? С подачи koMon написал себе небольшую функцию... скрестив её с одной из своих программок по обработке плана получилось совсем красота, но не до конца... Код:
По идее, после построения выноски исходный объект (раньше был текст, сейчас блок с атрибутом) затирается. Теперь же при отмене и блок на месте и выноска сверху сидит. Как то бы продолжить выполнение кода после обрыва в этой функции... Offtop: да начнется закидывание помидорами p.s. версия с vl-catch-all-apply выглядит веселей... Код:
по первому вопросу уже сам отдаю предпочтение vl-catch-all-apply. Привязал функцию уже ко второму костылю и радуюсь как младенец... А второй вопрос остается на повестке дня
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 16.10.2019 в 11:42. |
||||
|
||||
Offtop: Эммммм...
Ну вот ведь не зря говорят: "Не делай людям добра, вернрётся злом сторицей." Vladimir_Sergeevich, при всей моей толерастной индифферентности, звучит так, что ты записал меня в отряд мальчишей-плохишей ... Цитата:
Имеем два персонажа. Утопающий и спасающий на водах. Ключевой момент - утопающий без спасжилета. Ну естественно спасающий спас-таки утопающего. И вот после счастья пш, утопающий озадачивается юридическим, так сказать, вопросом: "Спасающий был без спасжилета, что является грубейшим нарушением текущего законодательства по вопросу нахождения в водном пространстве. А подам-ка я на него в суд и стребую с него компенсацию за какой-то там ущерб!.." |
||||
|
||||
koMon, та я без злого умысла. мне раньше не приходила идея пользовать grread в подобных целях... вот за идею то, я премного благодарен
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
В этом случае по ESC происходит прерывание всей программы и можно только попытаться восстановить какие-то настройки. А надо иметь конструкцию наподобие Код:
Код:
|
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Господа, подскажите как правильно изменить лисп для требуемой цели. Код ниже маскирует MTEXT и работает по алгоритму: выбираем рамкой объекты, затем подтверждаем выбор, получаем замаскированный текст. Как сделать следующее - текст выбирается путем указания единственной точки и маскируется без подтверждения выбора, команда зацикливается до тех пор пока не будет отменена по эскейпу или ПКМ. Также, если MTEXT был выбран ранее, происходит его маскировка, и команда завершается.
Код:
Последний раз редактировалось Browning Zed, 23.10.2019 в 18:37. |
|||
|
||||
Цитата:
Код:
Последний раз редактировалось koMon, 24.10.2019 в 16:24. |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Есть вот такой, более изощренный код. Но как я не пробовал играться с функцией mip:entsel ничего не выходит, не получается заставить прогу указывать объект точечно-циклично, только рамкой.
Код:
Последний раз редактировалось Browning Zed, 25.10.2019 в 18:38. |
|||
|
||||
Изощрённость - это хорошо. А если сделать в одном флаконе?
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Кулик Алексей aka kpblc, спасибо, работает. Но теперь пропала возможность снятия маски со всех ранее выбранных Мтекстов.
Цель была такая: если до выполнения команды, Мтексты выбраны не были, запускается алгоритм точечного цикла выбора объектов. Но, если, до выполнения команды, ранее был осуществлен выбор Мтекстов программа снимает с них маскировку и завершается. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Browning Zed, да бога ради. Пиши свое ветвление, кто запрещает? Все данные у тебя есть
Смотри ключи ssget, анализируй значение pickfirst, и пиши свой код.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Доброго времени...
Вопрос странноватый: есть жуткое желание редактировать IAcadLWPolyline. Есть замечательный метод AddVertex, но одновременно с ним мне надо пересчитать смежные точки... тут только в лоб ковырять свойство Coordinates, которое еще и и хранится как вариант, и править список как мне надо и назад в вариант паковать? Али есть более элегантное решение?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ты еще забыл про кривизну и возможные переназначения ширины. Так-то создаешь vlax-variant из Double и устанавливаешь свойство Coordinates. А вот с остальным придется ковыряться.
А на фига вообще такое надо?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Все как всегда, свести тыканье мышкой к минимуму. Уже затыкался (создать/сместить два раза/еще раз создать/ снова сместить/ полученное сопряч / лишее зачистить)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Так есть же уже "Набор утилит для работы с полилиниями" от VVA - не подходит?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Если про него речь, то мне тяжеловато его анализировать, что бы выцеплять нужное, а в чистом виде неприменимо. p.s. сделал пока так и в общем получается то что хочется Код:
неужто надо как-то поштучно перебирать весь список до заданной вершины, подставлять нужную и дальше собирать хвост? хотя в моем случае хвоста то нет, всегда EndParam подставляется.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 28.10.2019 в 14:14. |
||||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Привет. Составил простенький код, который меняет цвет определенных слоев, а также меняет ширину и сглаживание полилиний на этих слоях. И вроде все хорошо, программа работает, но ровно до того момента, как в названии слоя не появляется кириллица. И, если, в названии встретится хотя бы один кириллический символ - код ломается. Что можно придумать в данной ситуации?
UPD. Разобрался, в файле lsp была установлена не та кодировка. Последний раз редактировалось Browning Zed, 03.11.2019 в 17:40. |
|||
|
||||
Последний раз редактировалось koMon, 12.11.2019 в 11:32. |
||||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Спасибо! Круто придумал.
А нельзя ли еще сделать вариант, где по умолчанию в параметрах будет выставлена маска в цвет экрана, и в выпадающем окошке (где выбираем маскировать или демаскировать текст) добавить опцию "Выход"? Последний раз редактировалось Browning Zed, 10.11.2019 в 22:22. |
|||
|
||||
|
||||
|
||||
Проектирование Регистрация: 01.09.2009
Сообщений: 19
|
Подскажите плз можно ли простым методом (в одну строку без разбивки на атомы и циклов) вычислить min/max из списка точечных пар вида (X1 Y1 Z1) (X2 Y2 Z2)… (Xn Yn Zn)
Конструкции вида (ниже) не работают (setq ptLst1_min (apply 'min (ptLst1)));минимальная высота отметок (setq ptLst1_min (mapcar 'min (ptLst1)));минимальная высота отметок |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
так?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Код:
|
||||
|
||||
Проектирование Регистрация: 01.09.2009
Сообщений: 19
|
Эх, что-то не сработало,
Код:
(setq ptLst1_min (caddar (vl-sort ptLst1 '(lambda (m1 m2) (< (caddr m1) (caddr m2)))))). Я похоже в своем запросе неверно выразился, min/max это либо минимум/максимум среди всех Х (Х1, Х2...Хn) или У (У1, У2...Уn) или Z (Z1, Z2...Zn) в общем случае. Список точечных пар (ptLst1) содержит координаты полилинии, т.е. цель вычислить min/max точку Последний раз редактировалось hroost, 17.12.2019 в 14:43. |
|||
|
||||
min X
Код:
Код:
Код:
Код:
Код:
Код:
Последний раз редактировалось koMon, 17.12.2019 в 14:49. |
||||
|
||||
см. выше
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Ну сделай руками, а потом посмотри код поля и форматирование, делов-то:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 11.09.2008
Сообщений: 386
|
Добрый! А я правильно понял, в эту ветку можно кидать свои "тупые" вопросы по теме и есть вероятность, что сразу не пошлют?
На случай если это так, мне нужен готовый рабочий кусок лисп функции, прямо целиком, который выделяет последний созданный в автокаде элемент, например полилинию, прямо выделяет и подсвечивает все ее вершинки и прочее, т.е. полная программная эмуляция выделения элемента мышкой, но без мыши. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Создаешь набор, а потом в него добавляешь entlast. Потом sssetfirst. Не без недостатков подход, конечно, но как вариант...
Ну или (vl-cmdf "_.select" "_last" "")
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 11.09.2008
Сообщений: 386
|
Если по первой части, то мозга не хватит самому написать, увы. По второму варианту, делает не выделение, а подсвечивает хайлайт так называемый, на панели свойств пишет ничего не выбрано...
----- добавлено через ~2 мин. ----- Т.е. на Лиспе нет стандартного "getlast" какого-нибудь? Может в чем то ином можно реализовать? |
|||
|
||||
Цитата:
__________________
Мастерская СПДС |
||||
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Цитата:
Код:
__________________
На работе было скучно:shout: |
|||
|
||||
Kazan Регистрация: 01.04.2009
Сообщений: 530
|
Доброго дня.
Подскажите, пож-та, что надо поправить в коде, чтобы пошел на 2020кад? Это лиспа для трехмерного поворота текста вокруг своей точки. Надо поправить схемы от расчетчика с усилиями в ферме. Возможно есть другие решения? Вопрос снят, нашел рабочий лисп Последний раз редактировалось dik-son, 11.04.2020 в 22:15. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Всем привет! Подскажите, как можно преобразовать строку, в которой содержится ряд цифр в числовое значение? Например, имеется строка "402". Как из нее получить значение 402, чтобы в дальнейшем с ним можно было работать как с числом (например, вставить в формулу).
|
|||
|
||||
Регистрация: 15.04.2019
Сообщений: 58
|
Здравствуйте!
Подскажите, пожалуйста, какая структура лучше (наверняка у этих вариантов есть какие-то названия, но я их не знаю, поэтому постараюсь обозначить схематично): Вариант 1 ("главная" функция оборачивает собой определения всех остальных функций): Код:
Вариант 2 ("главная" функция только вызывает другие функции, а определения их даются вне "главной") Код:
Вариант 3 (Имеется только одна громоздкая функция, внутри которой вшиты все необходимые процедуры) Код:
Так, вариант 1-2 - "матрёшка": определение каждой последующей функции лежит в теле той, которая её вызывает. Вариант 2-2 - "лесенка": каждая функция вызывает следующую, но определения функций лежат отдельно. С точки зрения написания самого кода и ориентирования в нём самым удобным вариантом видится 2-й, а самый жуткий - 3-й. Интуитивно кажется, что если процедуры внутри функции не повторяются, то 3-й вариант должен быть самым быстрым и жрущим минимум ресурсов. Но есть ли разница между 1, 2 (и 1-2, 2-2) вариантами с точки зрения их обработки (с точки зрения программирования она понятна)? Куда во 2-м варианте деваются функции, объявленные вне основной после того, как основная будет выполнена? Выгружаются, или остаются висеть в памяти? Выгружаются ли функции, объявленные внутри "материнской" после выполнения "материнской"? А после полного завершения работы всех процедур? Как эти варианты соотносятся с точки зрения скорости обработки? П.С. Что происходит с объявленными функциями и подгруженными переменными при аварийном выходе (ESC или ошибка)? П.П.С. Существует ли возможность вычистить память от мусора, не закрывая документ? Последний раз редактировалось modest-bp, 29.07.2020 в 18:37. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
С точки зрения скорости, по-моему, одинаково. Но у тебя неправильно написано:
Код:
Вариант 3 подойдет, если локальные функции будут вызываться только один раз.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
modest-bp,
Имхо, почитайте книгу "САПР на базе AutoCAD - как это делается" - тут даже на форуме выкладывалась в этом году. а куда они выгрузятся?) код загрузился и загрузился, это память под данные может выделяться и освобождаться.. а может выделяться и оставаться занятой - так называемая утечка памяти. |
|||
|
||||
Регистрация: 15.04.2019
Сообщений: 58
|
Цитата:
Функции объявляются как локальные переменные? А как же "warning: local variable used as function"? Вот, даже специально повторил этот пример: Я, наверное, что-то не так понял в этом примере? Потому как у меня "Варианте 1" внутренние функции не объявлялись в локальных переменных "материнской" функции... Так что, выходит, можно смело делать, как удобно? Т.е. объявлять функции вне тела основной - это вполне "чистое" и "правильное" решение? А ведь, главное, оно легко читаемое, с таким кодом проще всего обращаться: сделал много "заготовок" - и в новых программах просто обращаешься к ним, а их - выписываешь внизу под кодом основной функции... Удобно же, когда код длинный с большим количеством условий, циклов и т.п... ----- добавлено через ~5 мин. ----- Цитата:
Вот просто по логике, мне так кажется, если "вложенные" функции объявляются внутри "материнской" (их вызывающей), то при завершении выполнения всех "материнских" процедур они должны бы освободить место. А в ситуации, когда функции объявляются вне тела вызывающей их функции, мне так кажется, существует высокая вероятность того, что они будут продолжать занимать память и после того, как "материнская" функция своё отработает... Нет? |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
есть код, есть данные. Код никуда не девается, локальные переменные должны автоматически освобождаться после выхода из функции, глобальные переменные - нет. А со всей этой матрешкой из функций скоро сами запутаетесь просто. Почитайте книжку - там и про организацию кода в лиспе тоже есть, насколько помню. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Забей. Но только на это сообщение.
----- добавлено через 45 сек. ----- Разделяй и властвуй. Последуй совету Сергей812, он дело говорит.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Лично я лентяй. И если один и тот же код длиной больше 5-10 строк приходится повторять больше чем 1 раз, я из него делаю функцию (локальную или глобальную - это уже другой вопрос). Может, это неправильно, может - нет, не знаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Всем привет!
Есть код который подсчитывает количество определенных блоков в чертеже и отображает информацию в командной строке. Код:
1. Подсчет количества всех вхождений заданного динамического блока. 2. Подсчет количества определенного состояния видимости всех вхождений заданного динамического блока. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Dynamic Block Counter не подойдет?
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
gnuvse, в этом посте есть описание функции draw-mleader. Там и ее содержимое, и ее построение в коде имеется.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А если в гугле поискать именно по таким словам?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Вы правы, но у меня низкая квалификация для оценки чужого кода, поэтому я пришел сюда с данным вопросом.
Если я взялся осваивать, то хотелось бы учиться по программе, которую написал опытный разработчик, например вы Поэтому, если вам не сложно, то скиньте пару примеров исходников, я думаю мне надолго хватит вникать. |
|||
|
||||
Регистрация: 23.01.2019
Сообщений: 129
|
Доброе утро. Есть лисп https://forum.dwg.ru/showpost.php?p=...&postcount=207 нумерует аргументы по зависимостям настроек динамических блоков. Есть аналоги? Или помогите модифицировать для возможности ввода имени атрибута, а то он вшит в лист и приходится копии лиспа делать с разными значениями настроек. Менять название атрибутов в блоках не вариант
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
|
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Цитата:
Если у вас есть примеры любого документированного кода или вы знаете ссылки на него - поделитесь пожалуйста. Перелопачивать информацию я готов, просто хочу перелопачивать сразу верное решение, таким образом эффект от обучения будет выше. А написать плохо всегда можно. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
эффект от обучения как раз - когда на грабли наступаешь. Только потом не бросаешься на них снова и снова, пытаясь подобрать работающий кусок кода вслепую - а начинаешь читать справку и форумы. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Мне через (ssget ???) как нибудь надо.
Просто (ssget "_A") включает все примитивы, но без внутренностей блока, только сами блоки. ----- добавлено через ~2 мин. ----- Или это надо сначала список всех блоков получить, потом из каждого блока вытащить примитивы? ----- добавлено через ~4 мин. ----- именно набор нужен (selection set) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Проходишь по коллекции всех блоков и забираешь все примитивы. При необходимости можно исключать внешние ссылки - или наоборот, забирать и оттуда все.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
А вообще есть такая функция (команда/способ), выдающая список всех примитивов чертежа, и не важно куда и в какие блоки эти примитивы запрятаны? По идее автокад где то же хранит эту информацию (количество отрезков, текстов и пр. вне зависимости от принадлежности их блокам).
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Штатной функции я не знаю. А решение я тебе уже подсказал. Реализация за тобой
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Где ошибка, подскажите
Хочу набор примитивов из внутренностей блоков создать "; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: EffectiveName" Код:
Последний раз редактировалось megabeton, 12.10.2020 в 17:46. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Ну хорошо, вместо
Код:
Код:
; ошибка: неверный тип аргумента: <Имя объекта: 7ff4119e6da0> Т.е. ssname возвращает <Имя объекта: 7ff4119e6da0> Для vlax-ename->vla-object тоже даю <Имя объекта: 7ff4119e6da0> при помощи (cadar ento) Теперь где ошибаюсь? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Без проверок (виртуалку с ACAD'ом запускать долго):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
add* методы добавляют примитивы в блоки и пространства
|
||||
|
||||
без activex вряд ли(
|
||||
|
||||
это просто указатель на не/именованный блок из коллекции блоков
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.12.2009
Сообщений: 84
|
Добавить точку (линию, текст и пр.) в пространство модели - просто.
(vla-addPOINT (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3D-point '(0. 0. 0.))) Применяем метод и передаем соответствующие аргументы. Добавить точку в блок пока не получается. (vla-addPOINT (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)) (vlax-ename->vla-object (car (entsel)))) (vlax-3D-point '(0. 0. 0.))) ошибка: Слишком много фактических параметров По логике дилетанта рассуждаю следующим образом. Использую метод vla-addPOINT, указываю на блок (делаю запрос свойства vla-get-Blocks с аргументом объект, т.е. конкретный блок) в пространстве модели/документа/объекта и передаю аргумент "координаты точки". Где ошибка? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Господа, подскажите, как из ssget получить набор, к которому можно обращаться через vla-функции? Например, получаем набор выбора:
Код:
Код:
|
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Спасибо.
----- добавлено через ~11 ч. ----- Как присвоить объектам RGB цвет через vla? Код:
Последний раз редактировалось Browning Zed, 26.12.2020 в 09:43. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Подскажите, как нарисовать простую полилинию по двум вершинам?
Пробую вот такой код: Код:
В итоге получаю ошибку: Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Кулик Алексей aka kpblc, а почему в функции vlax-make-safearray указана точечная пара (0 . 3), а не (0 . 1), как у меня? Я так понимаю, это значения индексов первого и последнего элементов массива. Если всего этих элементов два (две точки-вершины полилинии), то зачем мне массив на 4 элемента, который создается с помощью точечной пары (0 . 3)? Или координаты двухмерной точки в массиве занимают две позиции?
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Потому что вершин 2, у каждой по 2 координаты. Итого 4 элемента. От 0 до 3.
----- добавлено через 13 сек. ----- И не забудь преобразовать savearray в variant.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
это точно будет лишнее.
----- добавлено через ~4 мин. ----- Цитата:
----- добавлено через ~10 мин. ----- если назначать цвет, использую ActiveX, то и выбор объектов лучше имхо делать на нём же и быстрее работать будет и проще к объектам выборки обращаться. например назначить всем выбранным полилиниям цвет R255G255B255 можно так. Код:
Последний раз редактировалось koMon, 29.12.2020 в 09:48. |
||||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Есть такая задача. Пользователь последовательно указывает три точки. При этом две первые точки задают прямую, а третья точка чаще всего не лежит на ней. Задача состоит в том, чтобы найти координаты точки p3', которая будет находиться на прямой, заданной точками p1 и p2 и максимально близко от точки p3. Есть простой, но трудоемкий способ через лобовые геометрические вычисления. Но может быть у лиспа есть функционал, который позволяет решить эту задачу проще? Или может кто-то для себя писал такую функцию под свои нужды?
|
|||
|
||||
если построить, например, вспомогательный отрезок, то искомая точка может быть найдена при помощи функции (VLAX-CURVE-GETCLOSESTPOINTTO).
хотя можно и используя (inters) Код:
Последний раз редактировалось koMon, 29.12.2020 в 16:50. |
||||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
А можно ли в моем примере получить еще две точки, лежащий на прямой p1-p2, на определенном расстоянии от точек p1 и p2 снаружи отрезка p1-p2? На картинке точки помечены красным. При этом нужно учитывать, что пользователь может задать точки в обратном порядке, то есть задать направление сверху вниз влево, а не снизу вверх вправо, как у меня на картинке.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
добавьте princ в конце
Код:
|
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Цитата:
Код:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
(setq l2 (list a (car l1) (cadr l1) d))
----- добавлено через 28 сек. ----- Между прочим, команда _.list - штатная команда AutoCAD. Советую выбрать другое название
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Советую поэкспериментировать с cons / append. Ну и list туда же.
Хотя зачем получать слабоструктурированный или вообще неструктурированный список - для меня тайна. ----- добавлено через ~4 мин. ----- Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Подскажите, как в LISP обрабатываются ошибки? Например есть такой код:
Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
А вообще говоря, проще сначала прочитать файл, закрыть - и только потом выполнять какие-либо действия с полученными данными.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Кулик Алексей aka kpblc, а где в этой конструкции вписывается инструкция по закрытию файла при ошибке?
----- добавлено через ~32 мин. ----- А, похоже понял vl-catch-all-apply ловит ошибку, программа при этом продолжает работу и доходит до функции close? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Именно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Мне здесь однажды написали лисп, который позволял подсчитать общую массу по строкам спецификаций, но я кое-что отредактировал и не пойму пока почему он не работает больше.
Вот как работал лисп. В чертеже есть набор блоков с атрибутами, которые (блоки) в своем имени содержат текст "спецстр" (есть два варианта блоков с именами "спецстр" и "спецстризд") и каждый блок содержит атрибуты "КОЛ" и "МАССА". Активируя лисп я выбирал нужные мне экземпляры блоков (по сути это строки спецификации) и программа автоматически перемножала по каждой строке значения в атрибутах "КОЛ" и "МАССА", выдавая в итоге сумму по всем строкам. Сейчас я изменил структуру блоков, представляющих собой строки спецификации, но в них по прежнему остались атрибуты "КОЛ" и "МАССА", только теперь они занимают другую относительную позицию в списке атрибутов блока. Если раньше у них были позиции 4 и 5, то теперь 7 и 8. Я смотрю сам лисп и не вижу, чтобы их относительная позиция в перечне атрибутов как-то учитывалась. Как я понимаю лисп находил нужные данные по имени атрибута. Или все ж нет? Вот исходный лисп: Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Блоки случайно не стали динамическими?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.11.2014
Сообщений: 2,435
|
Нет, в блоках раньше было порядка 20 атрибутов, после переделки их чуть больше стало, кое-каким атрибутам дал новые имена, изменил их порядок, но остались два атрибута "КОЛ" и "МАССА". Результат работы лиспа - сообщение "Общая масса: 0,00".
|
|||
|
||||
начинающий инженер-гидротехник Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893
|
|
|||
|
||||
Регистрация: 08.02.2021
Сообщений: 5
|
Принимайте в свои ряды.
Только познаю азы LISPa А может разбирали похожий пример. Нужно выбрать объекты (текст) в чертеже, в тексте найти цифры, а далее выполнить конвертацию этих цифр с округлением. Например, имею текст "Высота 1000м", а хочу результат "Высота 1000м/3381' ". Таких объектов может быть несколько в чертеже с разными словами. Думал сделать чтобы сразу с группой можно было работать, т.е в начале эти объекты "натыкать". Заранее спасибо всем откликнувшимся. |
|||
|
||||
Цитата:
поделюсь опытом: Код:
Программы совсем одинаковые, хочу только обратить внимание что в этих двух программках есть локальная функция round-in-str которая реализуется по разному: в первом случае rtos, во втором vl-princ-to-string - поведение у них различное. Поясню по эпичности: надо будет продумать алгоритм расчленения строк на куски, определение какие из этих кусков числа и их обрабатывать, склейку обратно всего этого добра в строку и при этом предусмотреть все возможные варианты обрабатываемых строк. з.ы. Проблем добавляет тот факт, что atof всеяден и ошибки не выдаст... но может просто потерять часть символов в строке если их предварительно не срезать: Команда: (atof "123.21") 123.21 Команда: (atof "asd123.21") 0.0 Команда: (atof "123.21asd") 123.21
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 10.02.2021 в 06:38. |
||||
|
||||
Регистрация: 08.02.2021
Сообщений: 5
|
Извиняюсь - обсчитался. 1000м - это 3281 фут (значок футов '). Например, имею несколько текстовых объектов, в них есть числа, вот их надо найти и перевести из метров в футы. Их довольно много на чертеже, поэтому думал для начала сделать набор нужных мне объектов в группу ("натыкать"), а далее, чтобы код работал с каждым объектом по очереди, пока объекты не закончатся в группе (while).
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Vladimir_Sergeevich, можно же проще сделать, если сравнивать коды символов (те, что возвращает функция ascii). Вспоминая одну из тем, где Сергей812 открыл мне глаза на то, что функции < и > могут сравнивать помимо чисел и строки (что было для меня откровением), а также подглядев в справке коды цифр, можем заключить, что цифрами являются символы с кодами от 48 до 57 включительно (от 0 до 9), можем сделать как-то так:
Код:
Правда, с текстами в файле-образце выходит, что добавочный текст с футами не влезает в одну строку и переносится. Чтобы было в одну строку, нужно назначить тексту ширину, равную нулю. Почему-то с мтекстами из файла у меня программно не выходит назначить им ширину 0. Создал прям там в файле свои мтексты, установил им ширину в 0 - в них все сработало хорошо. Файл с результатом прилагаю. Однако, очень любопытно, почему код Код:
Нужно также добавить, что данный код, конечно, сработает корректно только для случая, где есть лишь одно число (как в файле-примере). Возможно, для более правильной работы в каком-то случае было бы правильным делать анализ текста на символ "м", и все цифры, что перед ним забирать в качестве числа и обрабатывать их. |
|||
|
||||
skkkk, сравни палитровые свойства текстов
|
||||
|
||||
Очередное волшебство автокада!?
(cvunit) имхо сподручнее будет для конвертации метров в футы. |
||||
|
||||
skkkk, информация о кодах интересна, но простоты не добавляет. Как быть если надо не дописать, а преобразовать число?
В моей практике были случаи когда надо было на чертеже все отметки поднять (из местной системы высот в балтику, например), а в строках бывали не просто числа, а подписи вида "в.оп. 123,12" И счастьем было, если везде в этих строках был пробел по которому это добро можно поделить, обработать число, и склеить обратно.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
вист
выбираем у *текста то что находится/или не находится между пробелом и "м" (строковое число) и ковертируем его из метров в футы. зачем это нужно отечественному проектировщику? skkkk, копание дало следующее. если у мтекста есть колонки, то назначить ему ширину ноль не получается. колонки нужно удалить костылями. кстати в руководстве по dxf у мтекста есть групповой код 75, который якобы отвечает за колонки и который не документируется в этом руководстве и не показывается в dxf дампе, но… см. костыли частного случая в коде после (vla-put-textstring…), которые позволяют сначала назначить ширине ноль, а затем переназначить её под текущую длину строки. Код:
Последний раз редактировалось koMon, 15.02.2021 в 10:09. Причина: от пробела до "м" + от начала строки до "м" |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
LISP vs .NET
LISP rules! |
||||
|
||||
Завораживающая идея...
написать на шарпе кучу собственных лисп функций, которые разработчики изначально забыли сделать, и продолжать писать костыли на лиспе хмм... а может обернуть лиспом какой-нибудь System.Xml.Linq?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Регистрация: 08.02.2021
Сообщений: 5
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Offtop: рулит, если к нему приделывать костыли Единственно неоспоримый плюс лиспа, имхо - что он является родным и встроенным, как VBA в офисе - т.е. на него всегда можно рассчитывать при необходимости что-то написать... Если не выпилят лисп в следующих версиях, конечно)
а потом, написав кучу функций и набив руку в .NetApi - подумать: если все равно придется перекомпилировать .Net сборки под другие версии акада, то зачем эти вставки из лиспа..?! |
|||
|
||||
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
VLIDE уже обозвана "устаревшей" А учитывая ACAD2021, LISPSYS, VS Code & Co - становится немного уныло.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Offtop: Ага, а во FreeCAD вообще командная строка сразу на питоне. Туда все и идем. Хотя в 2021 акаде все лиспы продолжают исправно работать. А VLIDE я открывал только для того, что бы чего нибудь откомпилировать в VLX
rusv, по моему эту тему проработал koMon в #3989
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Регистрация: 08.02.2021
Сообщений: 5
|
Цитата:
|
|||
|
||||
Кажется я упоминал, что задача "обработать все варианты строк" выглядит достаточно эпичной?
У меня такие задачи встречаются редко и разово, по мере надобности коды допиливаются под конкретную задачу. Вам уже накидали пару рабочих вариантов, которые осталось слегка подточить, читай про обработку строк и вперед. з.ы. тема уже поднималась и есть достаточно универсальный инструмент з.з.ы. Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 16.02.2021 в 13:50. Причина: утомила работа, решил отвлечься |
||||
|
||||
эпичная/не эпичная, но решить её универсальным инструментом вряд ли получится. в общем виде алгоритм видится имхо таким.
1. ищем в тексте "м". если литера встречается однажды по условию, то оно и к лучшему) 2. идём "налево" от найденной литеры в поиске цифр до первой не цифры. найденные цифры читаем в число метров. запоминаем индекс начала метров. 3. теперь идём "направо" через "/", через цифры до "'". запоминаем индекс "'", если нашёлся или индекс "м", если не нашёлся. 4. режем строку по найденным индексам и вставляем новую подстроку метры/футы вместо вырезанной. 5. обновляем текст. |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |