Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Autocad 2012. Почему макрос подавляет диалоговое окно?

Autocad 2012. Почему макрос подавляет диалоговое окно?

Ответ
Поиск в этой теме
Непрочитано 07.09.2012, 19:20 #1
Autocad 2012. Почему макрос подавляет диалоговое окно?
vovkaf
 
Регистрация: 15.08.2011
Сообщений: 48

Решил написать простой макрос, чтоб при нажатии кнопки "Удалить слой" (команда _laydel) сразу появлялось диалоговое окно выбора слоёв для удаления.
Как мне казалось, он должен был выглядеть примерно так:
^C^C_laydel;_name;
Однако такой макрос подавляет диалоговое окно, и имена слоёв надо прописывать вручную в командной строке.
Так, как-будто задана команда -laydel.
Подскажите, как решить проблему?
Просмотров: 10116
 
Непрочитано 07.09.2012, 19:43
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от vovkaf Посмотреть сообщение
Решил написать простой макрос, чтоб при нажатии кнопки "Удалить слой" (команда _laydel) сразу появлялось диалоговое окно выбора слоёв для удаления.
1. Чем не устроила "родная" кнопка, изначально присутствующая в AutoCAD, при нажатии которой появляется столь желанное тобой диалоговое окошко со слоями?
2. Кто/что мешает/запрещает посмотреть макрос, прописанный в кнопке, обозначенной в п.1?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 07.09.2012, 19:52
#3
vovkaf


 
Регистрация: 15.08.2011
Сообщений: 48


hwd,
1. Мне не нужна функция этой кнопки по умолчанию - отключение слоя по выбираемому объекту, а для перехода к диалоговому окну нужно совершать пару "лишних" нажатий клавиш. Вот и захотелось написать простенький макрос, заодно и поупражняться.
2. Ну и что это даст? там написано: ^C^C_laydel

Пока мне удалось написать так:
^C^C_laydel\_name;
но тогда при выполнении макроса надо лишний раз вручную нажать Enter...
vovkaf вне форума  
 
Непрочитано 07.09.2012, 19:59
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от vovkaf Посмотреть сообщение
2. Ну и что это даст? там написано: ^C^C_laydel
А я тебе не про эту кнопку говорю. "Родная" кнопка, открывающая диалоговое окно со слоями такая: ^C^C_layer. Открывается то самое окно. Поэтому и спрашиваю - чем не подошла кнопка?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 07.09.2012, 20:04
#5
vovkaf


 
Регистрация: 15.08.2011
Сообщений: 48


hwd,
в таком случае ты вообще не о том говоришь.
Командой _layer вызывается окно диспетчера слоев. оно для меня в данном случае вовсе не желанное.
Я же говорю о диалоговом окне выбора слоёв для удаления команды _laydel.
Это две большие разницы.

В диспетчере слоев нельзя удалить слои с "хвостами" - ссылки на несуществующие блоки, например. А команда _laydel решает эту проблему.

Последний раз редактировалось vovkaf, 07.09.2012 в 20:10.
vovkaf вне форума  
 
Непрочитано 07.09.2012, 20:11
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от vovkaf Посмотреть сообщение
hwd,
в таком случае ты вообще не о том говоришь.
Командой _layer вызывается окно диспетчера слоев. оно для меня в данном случае вовсе не желанное.
А что, через диалоговое окно диспетчера слоёв нельзя выбрать и удалить слои?

Цитата:
Сообщение от vovkaf Посмотреть сообщение
hwd,
Я же говорю о диалоговом окне выбора слоёв для удаления команды _laydel.
Во время работы команды _laydel никакого диалогового окна и не открывается (что-то ты напутал). В процессе работы команды, у тебя запрашивают выбрать объект, слой которого подлежит удалению, вместе со всем содержимым, либо указать параметр N.

Цитата:
В диспетчере слоев нельзя удалить слои с "хвостами" - ссылки на несуществующие блоки, например. А команда _laydel решает эту проблему.
Пример (файл) в студию.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 07.09.2012 в 20:28.
hwd вне форума  
 
Автор темы   Непрочитано 07.09.2012, 20:16
#7
vovkaf


 
Регистрация: 15.08.2011
Сообщений: 48


hwd,
ну зачем столько флудить, не давая себе труда разобраться в предмете вопроса?
1) какие слои нельзя удалить в предлагаемом тобой Диспетчере, я уже написал постом выше.
2) команда _laydel открывает диалоговое окно, если после ее вызова ввести параметр _name в командной строке.

Насчет "примера в студию", таковы слои -VIS, -HID, -HAT и -DIM создаваемые Автокадом при использовании команды Т-Рисование.

Давай не будем больше уходить от сути.

Последний раз редактировалось vovkaf, 07.09.2012 в 20:23.
vovkaf вне форума  
 
Непрочитано 07.09.2012, 20:32
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


да, я тебя неверно понял сначала.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 07.09.2012, 21:13
#9
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от vovkaf Посмотреть сообщение
Решил написать простой макрос, чтоб при нажатии кнопки "Удалить слой" (команда _laydel) сразу появлялось диалоговое окно выбора слоёв для удаления.
Как мне казалось, он должен был выглядеть примерно так:
^C^C_laydel;_name;
Однако такой макрос подавляет диалоговое окно, и имена слоёв надо прописывать вручную в командной строке.
Так, как-будто задана команда -laydel.
Подскажите, как решить проблему?

vovkaf, попробуй так ^C^C_laydel _name; (т. е. вместо ; пробел после _laydel) хотя у меня и ^C^C_laydel;_name; работает
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 07.09.2012, 21:56
#10
vovkaf


 
Регистрация: 15.08.2011
Сообщений: 48


TararykovDG,
Пробовал, не получается
Странно, что у вас работает... Позже попробую на других компах.

hwd, не страшно, бывает...
но я попробовал извлечь пользу из твоего совета (сначала ведь тоже не понял о чем ты):

Цитата:
Сообщение от hwd Посмотреть сообщение
2. Кто/что мешает/запрещает посмотреть макрос, прописанный в кнопке, обозначенной в п.1?
там действительно сложный макрос:
$M=$(if,$(and,$(>,$(getvar,LayerManagerState),0)),^C^C'_LayerClose,^C^C'_Layer)
Честно говоря, я только начинаю разбираться с макросами, но по-моему это уже на Дизеле...
Это навело меня на мысль, что для работы с диалоговыми окнами простых макросов не достаточно.
Но тут же для сравнения попробовал команду _LAYERSTATE, которая тоже вызывает диалоговое окно. Так там простой макрос:
^C^C_LAYERSTATE
Вобщем, пока ответ не найден.
...
Попробовал на другом компе - эффект тот же, увы.
TararykovDG, у вас автокад 12-й? и действительно сразу после нажатия кнопки появляется диалоговое окно, а не запрос в командной строке?

Зато про макрос на Дизеле догадался
Он только потому сложный, что одной кнопкой окно и открывается и закрывается.

Последний раз редактировалось vovkaf, 07.09.2012 в 22:09.
vovkaf вне форума  
 
Непрочитано 07.09.2012, 22:12
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


vovkaf, попробуй проверить переменную cmddia
gomer вне форума  
 
Непрочитано 07.09.2012, 22:12
#12
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


vovkaf, да, это действительно с использованием дизеля. кнопка в данном случае служит переключателем, если LayerManager включён (LayerManagerState>0), тогда выполняется команда LayerClose, иначе Layer. Я так же подправил кнопку менеджера внешних ссылок в 2010 автокаде, а то она умеет только открывать менеджер (ну и повесил это на горячую клавишу)
ХЫ. в следующий раз буду обновлять пост перед коментом

Последний раз редактировалось bargool, 07.09.2012 в 22:13. Причина: в следующий раз буду обновлять пост перед коментом
bargool вне форума  
 
Непрочитано 07.09.2012, 22:13
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от vovkaf Посмотреть сообщение
$M=$(if,$(and,$(>,$(getvar,LayerManagerState),0)), ^C^C'_LayerClose,^C^C'_Layer)
Я так понимаю, что идёт проверка значения системной переменной LayerManagerState: если оно равно 0 - значит диалоговое окно Layer Properties Manager закрыто. Если 1 - значит открыто и в этом случае вызывается команда _LayerClose, закрывающая это окно. В завершении вызывается _Layer.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 07.09.2012, 22:19
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от hwd Посмотреть сообщение
Если 1 - значит открыто и в этом случае вызывается команда _LayerClose, закрывающая это окно. В завершении вызывается _Layer.
неа, это обычный тогл, если открыто, закрывается, если закрыто, открывается правда and мне непонятен к чему он, но
Цитата:
пути программистов автодеск неисповедимы
gomer вне форума  
 
Автор темы   Непрочитано 07.09.2012, 22:27
#15
vovkaf


 
Регистрация: 15.08.2011
Сообщений: 48


gomer,
проверил cmddia, пробовал и 0 и 1 - та же песня.
Правда, мне непонятно причём тут эта переменная (Управляет отображением контекстного текстового редактора для команд ВЫНОСКА или БВЫНОСКА), но тем не менее проверил.
vovkaf вне форума  
 
Непрочитано 07.09.2012, 22:30
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от vovkaf Посмотреть сообщение
Правда, мне непонятно причём тут эта переменная... но тем не менее проверил.
+1
Цитата:
TararykovDG, у вас автокад 12-й? и действительно сразу после нажатия кнопки появляется диалоговое окно, а не запрос в командной строке?
не знаю как в 2012, но в 2013 этот номер не проходит.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 07.09.2012, 23:12
#17
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от vovkaf Посмотреть сообщение
TararykovDG, у вас автокад 12-й? и действительно сразу после нажатия кнопки появляется диалоговое окно, а не запрос в командной строке?
vovkaf, прошу меня извинить, я не внимательно прочила заголовок темы . Пропустил, что речь идет о AutoCAD 2012, пробовал в 2008, там все работает, сейчас попробовал в 2012, тот же макрос, но результат действительно другой, окна нет
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 08.09.2012, 08:58
#18
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от vovkaf Посмотреть сообщение
Подскажите, как решить проблему?
У меня идеи закончились. Если бы можно было найти и посмотреть исходники команды _LAYDEL - то, то наверняка можно было бы по коду понять причину такого поведения...

Примечательно, что за то же время, что я различными способами пытался запустить злополучное окошко, ведь мог бы уже несколько и раз сам написать программу, делающую то же самое и даже лучше: например предоставить юзеру возможность указать с какого из удаляемых слоёв на какой другой переместить все расположенные на нём примитивы (если это нужно), прежде чем слой будет удалён... Но дома у меня только 2013-й, а .NET-приложения компилируются индивидуально для каждой версии AutoCAD, т.е. то, что я соберу для 2013-й, без перекомпиляции не запустится в 2012-м.

Имхо - если обозначенная кнопка настолько нужна, то применительно к указанной задаче, наверное быстрее будет самому написать решение, чем продолжать безуспешные попытки.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.09.2012 в 09:08.
hwd вне форума  
 
Автор темы   Непрочитано 08.09.2012, 11:12
#19
vovkaf


 
Регистрация: 15.08.2011
Сообщений: 48


Увы, у меня тоже ничего не получилось
Одно понятно, что автокад всё-таки различает ручной ввод команды и её запуск посредством макроса. И контроль этот происходит в момент нажатия Enter или пробела после команды _laydel. И символы ";" или "^M" или " " не вполне заменяют эти действия.
Ведь макрос ^C^C_laydel\_name; работает как надо (с промежуточным нажатием Enter).

Но hwd прав: в данном случае цель уже не оправдывает средства. Эффект от искомой кнопки не настолько велик, чтоб писать программу или просить об этом кого-то ещё. Задача изначально носила более познавательный, чем практический характер.

Пожалуй, на этом тему можно закрывать.
Спасибо всем, кто откликнулся. И отдельное спасибо hwd, мне неловко, что "украл" у вас немало времени и усилий.
vovkaf вне форума  
 
Непрочитано 09.09.2012, 09:23
#20
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Под руками нет 12 Автокада. Для ранних версий автокада диалоговое окно в запросе (например при слетевшей Filedia) можно было принудительно вызвать тильдой (~). Попробуй добавь ее после _name
^C^C_laydel;_name;~
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 09.09.2012 в 10:25.
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Autocad 2012. Почему макрос подавляет диалоговое окно?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Привязка внешней ссылки (файл civil 2012) к файлу autocad 2007 koca AutoCAD 1 26.05.2012 21:07
Запуск AutoCAD 2012, Inventor 2012 под пользователем DonVik AutoCAD 7 28.02.2012 01:57
Настройки AutoCAD 2011 в AutoCAD 2012 Fedorino AutoCAD 1 09.11.2011 09:11
AutoCAD 2009: создание массива по траектории как AutoCAD 2012 Dimitriy AutoCAD 8 05.11.2011 21:41