|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
28.12.2017, 18:16 | #1 | |
Использование JOIN в макросе. Подскажите, почему не работает...
вольный копейщик
Регистрация: 03.11.2010
Сообщений: 132
|
||
Просмотров: 4930
|
|
||||
сети Регистрация: 03.11.2008
Московия*
Сообщений: 5,766
|
Команда: _JOIN
Выберите исходный объект: _all *Неверный выбор* Требуется точка или Последний Не видно опции "все". Поэтому только задать две точки так, что бы в них попадало всё, что нужно. И у вас не макрос. И дикая смесь ру с ен. |
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Если в join ввести какой-нибудь неверный ключ, например "ы", то показывается список того, что можно использовать. И там есть ключ "Все". Попробуйте - ключ "в" работает если с кнопки команду вызывать. См картинку.
Смесь такая, потому что не очень понятно, как в русской версии узнать англ. ключи команд. Некоторые интуитивно можно подобрать, а не которые нет. Изначально у меня был макрос, а то, что на LISP это уже вторая попытка решить задачу. Сути-то не меняет. Точки он кстати тоже не принимает если координатами задавать. Берет первую и пишет "неверный выбор". На самом деле на join свет клином не сошелся, можно как-то еще. Но очень уж удобная команда. И всеядная. PEDIT мне гораздо меньше нравится. Может специалисты по LISP что-нибудь подскажут... |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Разве _JOIN не запрашивает сначала первый (исходный) объект? По крайней мере, в 2011-м точно запрашивает, и там уж никак ему не скормить все, потому что требуется только один.
Я уже лет 10 пользуюсь небольшим лиспиком, найденным тут на форуме: JPL. Изначальный источник найти проблематично, судя по всему, автор лиспа - VVA. Не уверен насчет полной всеядности, но отрезки, дуги, полилинии объединяет всегда без вопросов, главное, чтобы их концы совпадали. Или в этом лиспике надо выставить требуемую точность вместо нуля. Чтобы это дело заработало в лиспе, надо будет провернуть что-то такое: Код:
|
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Дело в том, что до 2012 года Join работал через одно место Начиная с 2012-ой версии и далее он работает очень классно: можно сначала выделить все и нажать на команду, или сначала на команду, а потом как я писал выше. Причем, выделять можно вообще все объекты (даже сплайны, что очень удобно) на чертеже - что сможет, все объединит. Но, видимо, у этой команды есть какие-то особенности, которые не позволяют сделать такой же простой способ обращения к ней программно (ручками-то еще раз замечу, все работает на ура)...
Лиспы похожие видел, просто раз уж есть такая команда, почему бы ее в готовом виде не взять. А получается, что не работает... Странно, что до меня никто не пытался реализовать подобный макрос с использованием Join. skkkk, я тут попутно еще хотел извиниться, что пропал как-то все так закрутилось, что изучение LISP пришлось отложить пока. |
|||
|
||||
сети Регистрация: 03.11.2008
Московия*
Сообщений: 5,766
|
Да, спасибо. У меня оказалась кривая локализация mep 2016 ru. С точкой выдает, как надо.
|
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Это странно. По-моему, после AutoCAD 2007 явно кривых локализаций нет. И MEP здесь ни при чем. Опция выбора объектов в команде редактирования использует опции стандартной команды "_SELECT" ("ВЫБРАТЬ"). Точка же перед именем команды (а не перед опцией) заставляет AutoCAD использовать оригинальное имя команды в том случае, если она была переопределена. Да ведь ты знаешь это. Попробуй применить команду "_SELECT" ("ВЫБРАТЬ") с разными опциями.
Кстати, для некоторых пользователей может оказаться загадочными предупреждение типа "Требуется точка или ...". Что еще за точка? Дело в том, что объект можно выбрать не только просто указанием на него прицелом, но и с дополнительным указанием точки на объекте, если при указании объекта использовать объектную привязку типа "_near" ("ближайшая"). В этом случае указанная точка запоминается и ее можно использовать с помощью опции "@" или с помощью переменной "LASTPOINT". |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Я думаю, что здесь недоработка программистов AutoCAD. При вызове команды "_JOIN" ("СОЕДИНИТЬ") из AutoLisp используется старый вариант команды. Я нарывался на подобную ситуацию с какой-то другой командой, не помню сейчас, с какой именно.
|
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Setvar, жаль, но в любом случае, спасибо. Даже в 2017-й версии эта команда ведет себя плохо.
Я тоже рассматриваю данное поведение как глюк. Просто в виду своей неопытности в автоматизации, думал, что возможно что-то упускаю. Еще через вызов через LISP не работает _ai_selall - пишет "неизвестная команда". Альтернативные решения какие-то уж больно громоздские, видимо, придется отказаться от идеи с этим макросом/лиспом. П.С. С лиспом понятно. Но для меня удивительно, что через макрос этот глюк тоже остается, ведь макрос по сути, имитация человеческих действий... Ведь когда руками эту команду вбиваю в кс, все работает. |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Естественно.
Цитата:
Благодарим skkkk. Код:
|
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
skkkk, Setvar, Мужики (прям с большой буквы!), огромное спасибо!!!!
Действительно работает теперь! Для меня это правда какое-то шаманство... особенно, про "два пробела" Нужные мне операции теперь работают как надо. Хотел добавить в конце операцию "close" после сохранения, но тут что-то пошло не так. Как-то он слишком быстро что ли закрывает - все срабатывает, кроме _join. После открытия файла, там все не соединено, а без close работает... опять какая-то мистика. В лиспах же вроде все последовательно выполняется? Или надо какую-то "задержку" выставлять? Код:
Последний раз редактировалось Immortal_6666, 30.12.2017 в 20:50. |
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Setvar, спасибо! Теперь Join срабатывает до закрытия. Но все равно после очистки, зума и аудита...
1)Каким-то образом можно его запихнуть сразу после _CHPROP ? Может надо все вызовы заменить на vla-SendCommand? 1.1) Кстати, почему мы здесь vl-load-com в начале не прописываем - это не обязательно? 2) И еще, хочу добавить в CHPROP установку веса, цвета и типа по слою это примерно так будет? Код:
UPD. Ключи нагуглил - C, LT, LW. Есть ли где место, где их централизовано можно находить? В справке англоязычной свойства перечислены, но заглавными буквами ключи не отмечены... Теперь так: Код:
Последний раз редактировалось Immortal_6666, 31.12.2017 в 11:02. |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Хотел я все команды запустить через vla-SendCommand, но что-то не получается в связи с запросами самих команд. Последний вариант оказался жизнеспособный.
Так может, это и к лучшему. Пример записи команды "_CHPROP" ("СВОЙСТВА") с английскими опциями: Код:
|
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Спасибо!!! Я правда в своем варианте забыл "_" перед bylayer, но и так работало, хотя с "_" наверное каноничнее. Я просто думал, что это именно значение параметра, также как например "red" для цвета и "_" в таком случае не требуется.
С порядком функций, наверное, действительно не так важно в данном случае. А если пойти еще дальше - заставить этот код обрабатывать содержимое какой-то (указанной мною) папки - это сильно усложнит программу? Или может что проще ко все открытым в сеансе документам. |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
|
|||
|
||||
вольный копейщик Регистрация: 03.11.2010
Сообщений: 132
|
Такое наверное сложно. Я искал по форуму.
А если к открытым документам? Что-то типа цикла - получить список открытых в сеансе документов, применить к текущему документу функцию lisp, файл закроется (_close в конце кода), соотв. текущим станет другой документ и продолжить, пока число открытых документов не станет равно 0. Я просто не знаю как это кодом описать, т.к. 0 в lisp и в программировании в целом. |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подскажите почему расстояние между сваями должно быть минимум 3 диаметра | Shketkol | Основания и фундаменты | 38 | 08.12.2021 09:31 |
Lisp. Почему может не работать entmod. Не работает в 1-м отдельно взятом файле. | Kirill_Ja | LISP | 2 | 18.07.2013 17:00 |
Подскажите почему не работает генерация ферм | C@DbIK | Лира / Лира-САПР | 3 | 23.05.2013 14:20 |
Почему не работает entdel | hydushko | Программирование | 1 | 18.04.2013 07:52 |
Подскажите, пожалуйста, почему у меня "плохо" собираются модальные массы ? | 3MEi86 | Лира / Лира-САПР | 4 | 18.11.2011 09:40 |