|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
http://forum.dwg.ru/showpost.php?p=1548015&postcount=2 и далее - не?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
не - будет честная функция запускаемая из ком. строки автокада (из лисп файлов так-же будет работать) без всяких прелюдий типа eval и пр.
Будет корректно работать и возрващать ожидаемый результат: Код:
----- добавлено через ~4 мин. ----- Решение элементарное - еще раз повторю - практически этот метод не сильно пригоден - включайте смекалку - как создать такую функцию средствами автолиспа и только ими - знаний у каждого участника темы более чем достаточно для его реализации.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,181
![]() |
кто молодец? я молодец!
![]() Код:
__________________
apel.fas |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Задачка та же, только действия посложнее. Ну типа там, изменить цвет и / или тип линии для выбранных объектов / всего файла, с обработкой описаний блоков или без. Количество параметров может быть таким:
0 (установить цвет линии) 0 "hidden" (установить цвет и тип линии) 0 "hidden" t (то же, для выбранных объектов) 0 "hidden" t t (то же, с обработкой описаний блоков) 0 t (устанавливать цвет линии, для выбранных объектов) 0 nil t (цвет, для всего файла, с обработкой описаний блоков) Вперед?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,181
![]() |
Тебе с такими задачками - в "Поиск исполнителей"
![]()
__________________
apel.fas |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,485
|
Apelsinov, я подобные задачи буду решать по методу, описанному в #2
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,648
|
Эх, не хватило меня вчера (уже позавчера, уже "в тот день") углубиться в проблему, уточнить условия задачи, и, признаюсь, она меня довольно-таки увлекла. И в свободное от других мыслей время мой мозг посвящал ей...
Однако условия "викторины" можно было понять по-разному. Задачу Цитата:
Я почему-то предположил, что в общем виде, эта двоякость задачи должна бы решиться при помощи одного гениального подхода. Я полагал, что можно на чистом лиспе действительно создать для функции необязательный аргумент, да еще и аргументы при этом могут быть разных типов, ну как в ssget, например.... а тут оказалось, что надо просто "с переменным количеством аргументов"... Признаться, я слегка разочарован. А где "необязательные параметры"? А где разные типы этих "параметров"? Я думал, что сейчас последует какая-нибудь рекурсия, обернутая в какой-нибудь vl-catch-, которая бы, "прочитав" и проанализировав сообщение об ошибке переопределила бы и вызвала бы сама себя еще разок, а может, и не один... (десяток). Главным вопросом, терзавшим мой разум, был "А как же мне программно понять, что за аргументы, и какое именно их количество передалось функции в момент вызова?" Ну, чтобы суметь их проанализировать перед "мобильным" её переопределением. Конечно, неоднократные упоминания о незначительной практической пользе меня настораживали, но я слепо объяснял себе это тем, что смысл от этого "достижения" непонятен, и тем, что ничто и никогда не мешало мне поставить nil, если мне не нужен в этом месте аргумент. Тем более, что из командной строки я обычно функции (с аргументами!) не вызываю. Тем еще более, что было предложено, причем, неоднократно, весьма, на мой взгляд, гениальное решение скормить функции список любого содержания. Я просто не понимал, зачем над этим думать, если это решение было не нужно, а если было бы и очень нужно "пафосно" и часто пропустить в кодинге необязательный "параметр", то надо просто загнать его в список, а в коде - его проанализировать. Но было прикольно. Offtop: Есть у меня на примете одна такая. Но она совершенно из другой темы. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Цитата:
Некоторые перестраховываются и в каждой функции проверяют правильность аргументов. Вот это уже излишне. Что касается практического применения переменного количества аргументов, так выход давно известен - список в качестве одного аргумента или несколько списков. И предложенная Дима_ задача не более, чем "этюд". А в реальных условиях, разработчик функции сам задает, какие аргументы могут быть в списке. Обычно все-таки предусматривается некоторый порядок следования аргументов. Да и применять такую функцию наверняка будет сам автор. Теоретически можно передавать и произвольные списки, но тогда потребуется большой анализ, что просто нерационально. Ну и напомню еще одну интересную возможность Лиспа - передача имени функции в качестве аргумента. Вот есть у меня функция, объявленная так Код:
Здесь аргументами являются func - "квртированное" имя функции, которая должна что-то из "любого" уметь рисовать. Например (quote ru-3d-pipe-reducer-conc-draw) или (quote ru-3d-pipe-2-flange-draw-revolved) param_lst - список аргументов для заданной функции рисования. Может быть и (list 159.0 6.0) и (list 159.0 300.0 250.0 25.0 212.0 3.0 68.0 26 8 6.0 nil T). Как эти аргументы обрабатывать - знает только сама функция рисования. msg_1pt, msg_2pt - тексты приглашений для первой и второй точек. dist_by_vector - возможное смещение точки. И внутри ru-3d-pipe-draw-any, если опустить открывающую часть (ввод и вычисления точек start_pnt end_pnt) и завершающую часть само "рисование" происходит просто Код:
А вызов ru-3d-pipe-draw-any с аргументами просто записывается в меню (у меня в XML). И уже пользователь системы "смышленая тётка" самостоятельно может добавлять или изменять набор моделируемых объектов, просто копируя образец вызова и изменяя аргументы Код:
Вот что eval животворящий делает! |
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 4,999
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Цитата:
|
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Есть ли возможность вставить в вершины полилинии блоки? | bimari | AutoCAD | 29 | 04.06.2021 14:49 |
Есть возможность уменьшить объект в ширину, а длина должна остаться не изменой? | виктоша17 | AutoCAD | 4 | 29.03.2014 12:32 |
Есть ли в Civil 3D возможность выравнивания дорожного покрытия? | 19th | Вертикальные решения на базе AutoCAD | 4 | 30.03.2009 17:48 |
Запись макросов VBA в ACAD`e; возможность есть? | ssv22 | Программирование | 9 | 19.02.2009 20:22 |
Есть ли возможность при вставке блока разрывать линии | Незнайка | AutoCAD | 13 | 03.04.2006 20:34 |