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

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

Странная работа макроса

Ответ
Поиск в этой теме
Непрочитано 19.10.2006, 06:31 #1
Странная работа макроса
Димас
 
джедай
 
Магадан
Регистрация: 31.01.2005
Сообщений: 460

есть вот такой макрос
^C^C-HATCH;p;SOLID;W;Y;
я закинул его в ToolPalets
при однократном запуске макроса все проходит нормально..
при повторе макроса (нажимаю клавишу пробел), автокад делает zoom к предидущему месту работы

почему делается zoom?
Просмотров: 6177
 
Непрочитано 19.10.2006, 07:03
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для повторного выполнения макроса, независимо от того, находится ли он на кнопке или на палитре, необходимо воспользоваться контекстным меню, вызываемым нажатием правой кнопки мыши.
Profan вне форума  
 
Непрочитано 19.10.2006, 07:15
#3
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Поднимал уже этот вопрос - не ответили.
Цитата:
Для повторного выполнения макроса, независимо от того, находится ли он на кнопке или на палитре, необходимо воспользоваться контекстным меню, вызываемым нажатием правой кнопки мыши.
В палитре повторяется весь макрос. А если нет выделения у меня нет контекстного меню.
Уточню, что делается не zoom, а отмена последнего действия. Так, отчерченная сложная полилиния с кнопки на плеттке может просто исчезнуть при повторе.
Krieger вне форума  
 
Автор темы   Непрочитано 19.10.2006, 07:19
#4
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


to Profan
???
значит макрос будет повторятся только через меню правой кнопки?
как же он у меня до этого повторялся? а если у меня на правую кнопку настроно нажатие ентера и никакое меню не вылезет?
честно говоря как повторить макрос я знаю - самое простое - добавить * перед макросом (это в принципе и решило мою проблему)

но меня интересует другое - почему повторяя макрос нажатием пробела или ентер (т.е. повторяя последнюю команду) у меня переодически происходит отмена команды Zoom? т.е. автокад перескакивает к последнему месту работы..

по f2 никакой команды zoom не видно...

to Krieger
а можно ссылку на тему с этой проблемой?
Димас вне форума  
 
Непрочитано 19.10.2006, 08:05
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Димас.
Да у вас сам макрос какой-то странный. Команды "-HATCH" не существует. Если же задать команду "HATCH", то первым запросом будет запрос об имени образца штриховки, а у вас стоит какое-то p. Какую рль должна играть опция "Y"? Я тоже занес ваш макрос на палитру (без "-") и вот что выдал AutoCAD:
Код:
[Выделить все]
Command: _rectang
Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]:
Specify other corner point or [Dimensions]:
Command:
Command:
Command: HATCH

Enter a pattern name or [?/Solid/User defined] <SOLID>: p

Unknown pattern name.
Enter a pattern name or [?/Solid/User defined] <SOLID>: SOLID
Select objects to define hatch boundary or <direct hatch>,

Select objects: W

Specify first corner: Y

Invalid window specification.

Specify first corner: Specify opposite corner: 1 found

Select objects:

Command:
Для начала разберитесь с опциями команды "HATCH".
Profan вне форума  
 
Непрочитано 19.10.2006, 08:26
#6
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от Димас
а можно ссылку на тему с этой проблемой?
http://dwg.ru/forum/viewtopic.php?t=9824

to Profan
А у тебя какой кад? Помоему команда -hath появилась с 2006-го.
У меня его макрос работает.

Код:
[Выделить все]
Command: -HATCH

Current hatch pattern:  SOLID
Specify internal point or [Properties/Select objects/draW boundary/remove 
Boundaries/Advanced/DRaw order/Origin]: p

Enter a pattern name or [?/Solid/User defined] <SOLID>: SOLID

Current hatch pattern:  SOLID
Specify internal point or [Properties/Select objects/draW boundary/remove 
Boundaries/Advanced/DRaw order/Origin]: W

Retain polyline boundary? [Yes/No] <N>: Y

Specify start point:
Specify next point or [Arc/Length/Undo]:
Specify next point or [Arc/Close/Length/Undo]:
Specify next point or [Arc/Close/Length/Undo]:
Specify next point or [Arc/Close/Length/Undo]: c
Specify start point for new boundary or <Accept>:
Current hatch pattern:  SOLID
Specify internal point or [Properties/Select objects/draW boundary/remove 
Boundaries/Advanced/DRaw order/Origin]:
Krieger вне форума  
 
Автор темы   Непрочитано 19.10.2006, 08:38
#7
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


to Profan
объясняю по пунктам)
кад у меня 2006\2007, команда прекрасно работает
*^C^C-HATCH;p;SOLID;W;Y;
команда вызывает штриховку из коммандной строки
p - вызываю свойства
SOLID -говорю какой штриховкой штриховать
W - рисую границы штриховки
Y - не удалять границу штриховки после завершения команды

раньше пользовался вот таким макросом
Код:
[Выделить все]
^C^C(progn(setvar "CMDECHO" 1)(command "_pline" pause)(while (= (getvar "CMDACTIVE") 1)(command pause))(vla-put-Closed (vlax-ename->vla-object (entlast)) :vlax-true)(command "_-bhatch" "_P" "SOLID" "_S" (entlast) "" ""))
но мне мой макрос кажется гибче - можно задавать области в штриховке, которые не нужно штриховать...

из минусов моего макроса - приходиться несколько раз давить ентер в конце, но если зациклить его * то ентер давить не нужно..

to Krieger
спасибо буду изучать
Димас вне форума  
 
Непрочитано 19.10.2006, 08:40
#8
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Krieger.
Ну, Димас не сообщил версию AutoCAD, я и проверил на 2005. Тогда понятно, почему у меня не работает его макрос. Но в любом случае полностью повторить весь макрос получится только при использовании контекстного меню. И это большой козырь в его пользу. А Enter или пробел повторяют последнюю команду без всяких опций. Т.е должна повториться команда "-HATCH". Что происходит у Димаса, я не могу проверить, нет 2006 под рукой.
Для Димас.
Советаю вам, все-таки, настроить правую кнопку вашей мыши на вывод контекстного меню. Тогда даже такой громадный макрос, который вы привели, будет выполняться полностью.
Profan вне форума  
 
Автор темы   Непрочитано 19.10.2006, 08:45
#9
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


странно..
реакторов у меня нет.. в смысле ничего не подгружал сам
автокад - можно сказать только что поставил "чистый" совсем, недавно вот переставлял
команду последнюю автокад не отменяет.. вернее отменяет, но только в том случае если это был zoom (если мышью средней кнопкой куда-то перемещался)
да и отмена zoom бывает не каждый раз

другие макросы работают нормально.. повторы наблюдаются только в макросах такого вида ^C^C-HATCH;p;SOLID;W;Y;
Димас вне форума  
 
Автор темы   Непрочитано 19.10.2006, 08:57
#10
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


Цитата:
Сообщение от Profan
Для Krieger.
...Для Димас.
Советаю вам, все-таки, настроить правую кнопку вашей мыши на вывод контекстного меню. Тогда даже такой громадный макрос, который вы привели, будет выполняться полностью.
меню на правой кнопке - тоже считаю более удобным
но повторяю команды обычно пробелом - он большой и там рука рядом лежит)

по пробелу и энтеру мой макрос прекрасно повторяется) т.к. он запоминает последнюю штриховку, масштаб и т.п. и ставит их по умолчанию...
а разным кнопкам в ToolPalets я поставил, чтоб рисовались в разном слое - так что разноска по слоям тож работает..

в общем так пока и не понял с чам связана отмена последнего zoom((
Димас вне форума  
 
Непрочитано 19.10.2006, 09:04
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Э... Народ, а может, проще будет лисп накатать под такое дело, объявить его как команду и вызывать ее? Тогда уж по идее повтор не должен будет хамить...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2006, 09:06
#12
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от Profan
Но в любом случае полностью повторить весь макрос получится только при использовании контекстного меню. И это большой козырь в его пользу. А Enter или пробел повторяют последнюю команду без всяких опций. Т.е должна повториться команда "-HATCH".
Фу ты, еще раз:
Цитата:
Сообщение от Krieger
В палитре повторяется весь макрос.
Макрос записанный в палитре инструментов повторяется полностью при нажатии пробела. И это большой козырь в его пользу.
Отмена последнего действия - видимо баг. То он есть, то его нет, в большинстве случаев все нормально (чаще всего, дествительно срабатывает на zoom), и от макроса не особо сильно этот баг зависит.
Krieger вне форума  
 
Непрочитано 19.10.2006, 09:15
#13
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от kpblc
Э... Народ, а может, проще будет лисп накатать под такое дело, объявить его как команду и вызывать ее? Тогда уж по идее повтор не должен будет хамить...
У меня отменялась даже написанная на лиспе функция. В палитре написано только это:
Код:
[Выделить все]
^C^C(if (eq Kr_AlignmentText nil) (load "Kr_AlignmentText.vlx"))(defun C:KR () (Kr_AlignmentText 0 0 1));Kr
Krieger вне форума  
 
Непрочитано 19.10.2006, 09:29
#14
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Димас.
Сейчас проверил работу вашего макроса на AutoCAD 2006 РУС. Сам макрос у меня выглядит так:
^C^C_-HATCH;_P;SOLID;_W;_Y;
При выполнении его я заметил, что он позволяет отрисовать несколько контуров для последующей одновременной заливки. Поэтому приходится Enter вводить вручную или правой кнопкой мыши, как вы и делаете. Вот что интересно. Если макрос находится на кнопке, то нажатие пробела или Enter вызывает, как и ожидалось, повтор команды "_-HATCH". Из контекстного меню макрос вызывается полностью. Но если макрос находится на палитре, то и пробел и Enter вызывают на выполнение весь макрос. Никаких отмен команд не происходит. Думаю, что-то с AutoCAD'ом.
Profan вне форума  
 
Непрочитано 19.10.2006, 09:33
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Цитата:
Сообщение от Krieger
<...>
У меня отменялась даже написанная на лиспе функция. В палитре написано только это:
Код:
[Выделить все]
^C^C(if (eq Kr_AlignmentText nil) (load "Kr_AlignmentText.vlx"))(defun C:KR () (Kr_AlignmentText 0 0 1));Kr
А если сделать нечто типа:
Код:
[Выделить все]
^C^C(defun C:KR ()(if (eq Kr_AlignmentText nil) (load "Kr_AlignmentText.vlx")) (Kr_AlignmentText 0 0 1));Kr
Как будет работать?
Вообще-то согласен, зачастую сделать то же самое в меню более быстро и просто
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2006, 09:33
#16
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от Profan
Но если макрос находится на палитре, то и пробел и Enter вызывают на выполнение весь макрос.
Неужели?
Krieger вне форума  
 
Непрочитано 19.10.2006, 09:41
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


В общем-то да. В ком.строке пишется executetool или что-то такого вида. Для проверки установи cmdecho -> 1.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2006, 09:41
#18
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


to Profan
возможностью сразу отрисовать все контуры не пользуюсь - штриховка получается одна на всех.. а мне нужно один замкнутый контур - одна штриховка..
мне эта возможность нужна чтоб дорисовывать островки "не штрихуемые" в контуре

если макрос зациклить * то никаких энетров не надо ,с этим проблем нет

to Krieger
а что если тоже поставить * перед вашим макросом? не силен в лиспе, но может нормально зациклицца?)
Димас вне форума  
 
Непрочитано 19.10.2006, 09:43
#19
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Krieger.
Что тут смешного? Я проверил работу макроса с палитры и увидел, что это выгоднее, чем с кнопки, что я раньше делал. У меня все работает нормально. У вас - ненормально. Это мне должно быть смешно, что вы напихали себе черт знает что, а теперь глаза вытаращили.
Profan вне форума  
 
Непрочитано 19.10.2006, 09:54
#20
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от Димас
to Krieger
а что если тоже поставить * перед вашим макросом? не силен в лиспе, но может нормально зациклицца?)
Зациклица, но не нормально - мне он ничего не даёт сделать, а только бесконечно повторяет. В данном-то случае надо в самой проге зациклить, делов-то на самом деле на копейку, да руки никак не дойдут доделать.
Это я просто пример привел, такая байда со многими кнопками. Хотя вариант Крыса пока не сбился, как не пытался.
Шо делать..., будем макросы в проги переделывать, да звездочки добавлять.
Меня, что удивляет: мы с Димасом одни такие что ли?
to Profan
Извини, если обидел.
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Странная работа макроса

Размещение рекламы