|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
04.12.2003, 15:16 | #1 | |
Изменение работы комманды SELECT FENCE
Штаб
Регистрация: 21.08.2003
Сообщений: 943
|
||
Просмотров: 15211
|
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Похоже, что Torino пишет макрос, это видно по знаку (точка с запятой). Очень часто на время действия какой-либо программы надо отключать режимы привязки. Режим, имевший место до начала команды, можно запомнить функцией LISP: (Setq os (getvar "osmode")). С нее и надо начинать макрос. Здесь "os" это свое (придуманное) имя текущего режима. Далее Osmode;0; В конце макроса надо восстановить режим: (setvar "osmode" os)
|
|||
|
||||
Регистрация: 21.08.2003
Штаб
Сообщений: 943
|
2Vova:
да, спасибо, именно так, но вопрос немного в другом: куда вставить данные строки (имеется ввиду модифицирование кода встроенных команд акада. Конкретно SELECT). 2Perezz!!: все мы стремимся к совершенству :wink: 2Fantomas: нажать 2 раза ф3 - это сложнее, чем не нажимать ни разу, так? |
|||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Модификация родных команд Автокада вряд ли возможна, да и зачем? Создание своих собственных кодов для решения конкретных задач (на LISP, DIESEL VBA и т д, я вот предлагаю макросы)-наиболее правильный путь.
Сообщи конкретно, какую команду ты хочешь создать. |
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Ну вот примерно так.
Код:
Сие сохранить в текстовом файле с расширением LSP. Поставить в автозагрузку Tools>AutoLisp>Load (а там Startup Suite). C клавы запускаеться FSE. Для кнопочки соответственно ^C^Cfse. |
|||
|
||||
Регистрация: 21.08.2003
Штаб
Сообщений: 943
|
Fantomas, спасибо за код, но это не то. Проще два раза нажать ф3, чем тянуться мышкой до кнопки :)
Для Вовы: я не хочу создавать команду, я хочу дополнить переключатель FENCE команды SELECT следующими строчками: (setq temp_osm (getvar "osmode")) (setvar "osmode" 0) .............. (setvar "osmode" temp_osm) //на выходе (строчки взяты из программы Фантомаса :) ) Т.е. найти код, на который передается управление после ввода FENCE. Если он в ехе-шнике или арксе, то вопрос снимается, а если в лиспах, то тут можно покумекать. |
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>Torino
Зачем ломать АКАД? Зачем тянуться до кнопки? Ну обзовите функцию не FSE а двумя буквами (надо конечно проверить чтобы не совпадали со стандартной командой) и набирайте в командной строке. Вы объясните подробно свою задачу. |
|||
|
||||
Регистрация: 21.08.2003
Штаб
Сообщений: 943
|
Объясняю с картинками: пример:
на представленном фрагменте мне необходимо наклонной линией обрезать короткие вертикальные линии. Для этого логично выделять их с помощью fence. Но т.к. apperture box больше расстояния между линиями, то происходит привязка в ненужные мне точки. Я хочу сделать так, чтобы после набора на клавиатуре буквы "f" (в режиме выделения) объектная привязка автоматически отключалась. [ATTACH]1070732395.gif[/ATTACH] |
|||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Sorry. невнимательно прочитал, что надо выборочно обрезать. Но все равно можно что-то придумать но в любом случае не ломать автокад.
Кстати, пришла в голову идея-конкурс на самую короткую программу решения этого вопроса. Чтобы за наименьшее количество щелчков все что нужно, обрезалось. Привязки бы не отключались (или возвращались) и мерилом результата было бы наименьшее количество знаков в программе. Torino поставит виртуальное пиво, а Perezz что-нибудь придумает по организации. |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Почему сразу "ломать автокад"?
Для этого есть вполне определенные и документированные средства: раздел "Redefining AutoCAD Commands" в хелпе предлагает соответствующие механизмы - (command "undefine" "line") например, позволит "забыть" родную команду LINE. Определяйте ее заново, как надо и используйте, вызывая без точки перед именем команды. А когда надо вернуть "как было", то достаточно (defun C:LINE () (command "_.LINE") (princ)) и все вернется на круги своя. Загляните еще в раздел "S::STARTUP Function—Post-Initialization Execution" - там рабочие примеры. Еще есть в запасе (vl-acad-undefun 'symbol), на крайний случай. Вся сложность здесь заключается в том, как стопроцентно сэмулировать родную команду (отслеживать эту самую f) и вовремя отключить-включить привязку. На Лиспе это сделать (в первом приближении) возможно. Если нужна "прозрачная" команда, то такие обещает VLX с собственным именным пространством. А вот как отследить эту f Дизелем.... |
|||
|
||||
Регистрация: 21.08.2003
Штаб
Сообщений: 943
|
>> Torino поставит виртуальное пиво, а Perezz что-нибудь придумает по организации.
Ставлю не виртуальное, а реальное булькающее и пенящееся. Для тех, кто ЕГО не любит, ставлю прозрачную и холодненькую... Для Фантомаса повторяю картинку [ATTACH]1070872143.gif[/ATTACH] |
|||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Сегогня тоже не смогу: хозяева ведут сотрудников в ресторан по случаю пождества. Пусть пока Админ, Perezz и кто-нибудь из желающих станет станут жюри, назначат срок присылки программы. Поскольку я теоретически могу победить, так как умею похожие штуки делать только на макросе, я он короче по определению, то: либо мой знак считать за 3, либо отдельный конкурс среди макроведов. Но таких еще, наверное, нет, ведь книжку еще не прочли. А может, вне конкурса?
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>Torino
Ну вот, пока там все о выборах... Нашел пол часа и выдаю первый вариант. Вызываеться эта бяка из командной строки "ff", после чего отключает все привязки и просит указать границу "подрезки" (Select boundary), после чего просит провести линию через "подрезаемые" объекты (Draw fence line), после чего подрезает и включает привязки. Написан обработчик выхода по Esc, т. е. можно прерывать в любом месте смело, привязки не слетят. Эта гадость и составляет основную массу кода. Все это необходимо в скопировать в чистый файл в Notepad и обозвать файл с расширением LSP. После чего открыть Tools>AutoLISP>Load..., найти файл и загрузить Load. Для постоянного использования надо найти там же группу Startup Suit и внести файл в форму открывающуюся клавишей Contents... Код:
>Vova На виртуальное пиво пока не претендую. Но есть сомнения, можно ли с помощью макросов вернуть системные переменные, если нажали Esc? Несилен в макросах. В прочем, я тут нашел, что вы книги по АКАД пишите. Обязательно почитаю, то что на ссылке, тем более что народ хвалит. |
|||