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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как создать "масштабную" кнопку?

Как создать "масштабную" кнопку?

Ответ
Поиск в этой теме
Непрочитано 25.11.2006, 13:03 #1
Как создать "масштабную" кнопку?
Archeo
 
архитектор
 
Беларусь
Регистрация: 02.04.2006
Сообщений: 349

Добрый день! Заранее извиняюсь за, может быть, ламерский вопрос. Как говорится, не корысти ради... Сам я черчу в модели 1:1, оформление - в лэйаутах с использованием видовых экранов. А вот мои коллеги всё делают в модели, в т. ч. размеры, текст и рамки с основной надписью. При этом занимаются бесконечным пересчитыванием всего и вся, либо - такой же бесконечный scale в ту или другую сторону. Подскажите, пожалуйста, как бы для них создать кнопку, после нажатия на которую всё чертилось бы в соответствующем масштабе? Знаю, что Vova это с успехом применяет, но его книгу "Язык макрокоманд и создание кнопок..." я за всё время никакими способами не смог раздобыть. Может, автор захочет себя процитировать? Или другая добрая душа покажет, что же конкретно написать в макросе?
Заранее благодарен.
Просмотров: 12744
 
Непрочитано 25.11.2006, 15:47
#2
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Код:
[Выделить все]
*^C^C_Scale;\\;\X
Где Х - любой масштабный коэффициент (2; 5; 0.5 ...)
Взято из упомянутой выше книги В.Свет (Vova)
Pilot вне форума  
 
Непрочитано 25.11.2006, 15:57
#3
Серёга - Bilder

проектирование гидротехнических сооружений
 
Регистрация: 20.02.2006
Москва
Сообщений: 5,022


прошу прощения, объясните (я просто не в кусе темы, но заинтересовался):
речь идёт о том, чтобы вводя например длину отрезка 1:1 - на чертеже он чертился в заданном масштабе?
Серёга - Bilder вне форума  
 
Непрочитано 25.11.2006, 17:20
#4
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Не, Pilot, это не то. Здесь макрос настраивается так, чтобы команда Scale могла изменять габатиты объекта (ов) на заданную величину. Допустим, надо уменьшить много слишком крупных кружков с цифрами, обозначающих оси на плане этажа. Тогда, введя вместо Х например, 0.7 можно очень быстро отщелкать все. На каждый кружок 2 щелчка (рамка или 2 одиночных) и щелчок на базовую точку. Archeo спрашивает о другом. Как сделать так, чтобы, предварительно один раз нажав кнопку , на которой например, нарисована цифра 100, далее брать команды, которые автоматом смасштабируют высоту текста, размер внемасштабного блока, детали размера (стрелочки-зазоры) Ширину полилинии, масштаб прерывистых линий, и т. д. Когда перешел к другому фрагменту чертежа, который будет выводится в масштабе пусть 1:50, сначала надо нажать масштабную кнопку 50 а затем командные кнопки. Само собой, получается новый набор самодельных кнопок, которыми надо заменить некоторые стандартные. Ту-же кнопку Dtext , Размерный тулбар. Происходит это так. Нажатие на кнопку с определенным масштабом переводит системную переменную Useri1 в значение, пусть 100. Надо, пусть, вставить блок, который отрисован не в натуральную величину (из-за его малости) а как условное обозначение. Символ отметки-треугольник. В библиотеке, где этот блок хранится, он должен быть нарисован всего один раз для масштаба 1:1. Но если его вставляют в план этажа, который выйдет в масштабе 1:100, то этот треугольник следует увеличить в 100 раз. Создается кнопка, с которой символ отметки вставляется в чертеж командой Insert. Но когда автокад запросит масштаб по осям, макрос этой кнопки подставит ему значение Useri1. То есть макрос это минипрограмма. В книге все подробно описано. И даже больше того. Судя по получаемым мной отзывам (до сих пор, хотя книга издана 2 года назад) некоторые не дочитывают до конца, так как, увлекшись программированием, переходят от макросов к лиспу. Спросите KPBLC. Он начинал с этой книги, ни сном ни духом не ведая, что станет программировать и пишет теперь лиспы на коленках, да так быстро, что опережает всех остальных программеров. А про существование лиспа узнал из книги, где дано самое начало, введение в лисп. И он становится совсем не страшным. Там-же и про DIESEL, и про SCRIPT. Здесь http://www.cad.dp.ua/stats/content.p...nt=diesel.html отрывок из книги, можно "пощупать" насколько понятно написано.
Серега-Bilder> в принципе, наверное, можно создать и такой макрос, а лучше лисп, чтобы он тут-же уменьшал длину только-что нарисованного отрезка. Но ни один программист в здравом уме не будет это делать. Говорят, машиностроители так работают. Но все наши с Profan-ом попытки расколоть их не привели к успеху. Только пара из них активно защищают масштабирование как способ черчения. Остальные либо чертят в натуральную величину, либо помалкивают
Vova вне форума  
 
Непрочитано 25.11.2006, 17:52
#5
Серёга - Bilder

проектирование гидротехнических сооружений
 
Регистрация: 20.02.2006
Москва
Сообщений: 5,022


Мой вопрос вызван тем, что волей-неволей приходится чертить не 1:1 а в масштабе :cry:

Боролся долго и упорно с коллегами на работе по поводу того что и как чертить (в 1:1 или в масштабе). В результате пришлось смириться, т.к. основная масса наших чертёжников - это бывшие "кульманщики" плохо знающие автокад. Поэтому у них своё понятие о черчении.

Сам делаю так:
1. Если черчу с самого начала что-то - то 1:1. Далее, если 100% уверен что либо работать дальше с этим файлом буду только я, либо выполненная мною работа - конечный продукт и дальше с ним никто не будет извращаться - оформляю всё сделанное на Layout через Viewport-ы в нужных масштабах, и всё. Если мой файл кому-то передавать нужно для дальнейшей работы - приходится всё в модели масштабировать и собирать на листы, ну и соответственно образмеривать и прочий геморой.
2. Чаще получается что мне дают чьи-то корявые проработки с которыми нужно дальше что-то делать. Само-собой всё начерчено в масштабе, ну и самому приходится тоже в масштабе дальше чертить... Вот и получается, чтобы ввести размер чего-то на клавиатуре приходится посчитать на калькуляторе

Поэтому и интересен какой-нибудь макрос, который автоматом введёное значение в командной строке умножает на заданный масштабный коэффициент - в результате получается на чертеже сразу нужного масштаба элемент.
Серёга - Bilder вне форума  
 
Непрочитано 25.11.2006, 17:58
#6
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Размножь статью с темы Paper Space и раздай ее сотрудникам. Проведи семинар. Убеди начальство обучить сотрудников-нанять преподавателей . Надо-же что-то делать!
Vova вне форума  
 
Автор темы   Непрочитано 25.11.2006, 18:45
#7
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Сделал для примера кнопку с макросом ^C^CUserr1;20. Это оно или нет? Если да, то что же написать в макросах кнопок для создания примитивов, размеров, текста??? Как их экспортировать на другой комп? Хватит ли количества этих переменных (User...) на все масштабы (узлы, планы, генпланы)? Чем будет отличаться макрос для масштаба уменьшения от макроса для масштаба увеличения?
С уважением.
Archeo вне форума  
 
Автор темы   Непрочитано 26.11.2006, 23:44
#8
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Всем привет! Книгу "Язык макрокоманд и создание кнопок..." заказал по интернету. Но пока ещё она придёт, пока я разберусь... А облегчить людям жизнь хотелось бы чем раньше, тем лучше. Тем более, что впереди 5 дней без интернета. Заодно подкидываю ещё проблемку из другой своей темы: в мультитексте перестали вставляться спецсимволы из раздела "Другое". Как бы это пролечить?
PS. Второй день подряд во время написания ответа в форум Касперский отражает сетевую атаку Intrusion.Win.MSSQL.worm.Helkern (атака по протоколу UDP, IP-адреса разные). Что бы это значило? Базы - сегодняшние, расширенные.
С уважением.
Archeo вне форума  
 
Непрочитано 27.11.2006, 00:36
#9
Серёга - Bilder

проектирование гидротехнических сооружений
 
Регистрация: 20.02.2006
Москва
Сообщений: 5,022


Цитата:
Второй день подряд во время написания ответа в форум Касперский отражает сетевую атаку Intrusion.Win.MSSQL.worm.Helkern (атака по протоколу UDP, IP-адреса разные). Что бы это значило? Базы - сегодняшние, расширенные.
А это к автокаду вообще никакого отношения не имеет! Просто какой-то двоешник прочитав очередной журнал про компы решил что он самый лучший в мире хацкер, скачал откуда-та что-то и давай тыкаться куда не попадя!!! Вот Ваш Касперский и сообщает Вам, что какой-то "одарённый" попытался Вам закинуть через определённый UDP-порт конкретную дрянь, но благополучно обломался со своей не доброй затеей. Так что по этому поводу не парьтесь - всё пучком! 8)
Серёга - Bilder вне форума  
 
Непрочитано 27.11.2006, 07:26
#10
Krieger

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


Цитата:
Сообщение от Archeo
Сделал для примера кнопку с макросом ^C^CUserr1;20. Это оно или нет? Если да, то что же написать в макросах кнопок для создания примитивов, размеров, текста??? Как их экспортировать на другой комп? Хватит ли количества этих переменных (User...) на все масштабы (узлы, планы, генпланы)? Чем будет отличаться макрос для масштаба уменьшения от макроса для масштаба увеличения?
С уважением.
Для масштаба хватит одной переменной, на то она и переменная.
Делаешь несколько кнопок, по одной на каждый масштаб типа:
^C^CUserr1;10
^C^CUserr1;20
^C^CUserr1;50
и т.д.
Запихиваешь это все в сплывающий тулбар.
Тогда кнопка для текста:
Код:
[Выделить все]
_dtext;\(* 2.5 (getvar "useri1"));;
или вставка какого-нить внемасштабного объекта в виде блока:
Код:
[Выделить все]
_-insert;blockname;\(getvar "useri1");;\
Т.е. какую кнопку масштаба нажмешь на то и умножится высота текста.
Можно сделать кнопку которая будет масштабировать любой примитив после его отрисовки.
Код:
[Выделить все]
_Scale;_Last;;\(getvar "useri1")
Вешать это на кнопку или добавлять в конец макросов других кнопок.
С размерами... Читай книжку. Vova там намудрил, что в двух словах не объяснить.

У меня такой вопрос: а почему бы для масштаба не использовать переменную Dimscale? Тогда просто решается вопрос масштабирования размеров и кнопок дополнительных лепить не надо - выбрал размерный стиль и работай.
Krieger вне форума  
 
Непрочитано 27.11.2006, 09:26
#11
Profan


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


Что-то вот с этим
Код:
[Выделить все]
^C^CUserr1;10 
^C^CUserr1;20 
^C^CUserr1;50
намудрили. Ведь в переменной можно хранить только одно значение. И когда мы введем
Код:
[Выделить все]
_dtext;\(* 2.5 (getvar "useri1"));;
то откуда мы узнаем, какое значение имеет Userr1 в текщий момент?
Проще же
Код:
[Выделить все]
_dtext;\(* 2.5 10);;
_dtext;\(* 2.5 20);;
_dtext;\(* 2.5 50);;
И уж совсем просто, если нужно 3 кнопки
Код:
[Выделить все]
_dtext;\25;;
_dtext;\50;;
_dtext;\75;;
Profan вне форума  
 
Непрочитано 27.11.2006, 09:44
#12
Krieger

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


Profan
Если б это касалось одного текста, то так она наверно было бы проще.
Но нам надо отмасштабировать и текст, и блоки, и размеры, и все остальные проги и макросы которые должны зависеть от масштаба.
Поэтому делаются кнопки именно для масштаба.
Если ты сейчас работаешь в масштабе 1:10 жмешь кнопку
Код:
- работаешь, перешел к другому - жмешь другую кнопку
Код:
и т.д. После нажатия кнопки устанавливается ента переменная и все твои дальнейшие действия зависят от неё.
Код:
[Выделить все]
то откуда мы узнаем, какое значение имеет Userr1 в текщий момент?
Какую кнопку масштаба нажал - то и будет. Последняя нажатая кнопка в сплывающем тулбаре остается видимой, а на ней картинка с цифрой "10". Для особо сомневающихся значение переменной можно запихать через disel в статусную строку.
Krieger вне форума  
 
Непрочитано 27.11.2006, 09:49
#13
Кулик Алексей aka kpblc
Moderator

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


К посту №5. Можно сделать не так Рисовать в 1:1, а потом в листе через настройку ВЭ и команду chspace перетащить все в лист. Новый ВЭ, новый масштаб для него, опять chspace - и все в масштабе Гиморно, но иногда приходилось и так изващаться...
К посту №10 - помимо dimscale есть еще несколько перемнных, тоже оказывающих свое влияние на отображение элементов: hpscale, hpspace, celtscale (хотя не факт, что все они используются). Кроме того, при работе в модели dimscale <>1, к примеру, а при работе на листе - в 1 обязательно и без вариантов. Бывает и такое... В общем, User* в этом отношении самое удобное (ИМХО), хотя и небезопасное.
К посту №11:
А почему б тогда modemacro не прикрутить? И там отображать текущее значение масштаба?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.11.2006, 10:50
#14
Krieger

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


Цитата:
Сообщение от kpblc
К посту №10 - помимо dimscale есть еще несколько перемнных, тоже оказывающих свое влияние на отображение элементов: hpscale, hpspace, celtscale (хотя не факт, что все они используются).
Ну и что? Проблемы будут те-же что и с User*.
Цитата:
Кроме того, при работе в модели dimscale <>1, к примеру, а при работе на листе - в 1 обязательно и без вариантов. Бывает и такое... В общем, User* в этом отношении самое удобное (ИМХО), хотя и небезопасное.
Ну тут сначала надо определиться, где размеры ставить - в пространстве листа или модели. У меня, например, вообще есть стиль с dimscale=0, но тогда начинает работать функция if и масштаб берется от видового экрана, если не через WP то 1.
Krieger вне форума  
 
Непрочитано 27.11.2006, 10:58
#15
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Проблемы будут те-же что и с User*.
Не обязательно (ИМХО). У меня, например, UserS1 используется только для отображения масштаба в modemacro, а так-то собственно масштаб лежит в словаре пользовательском И при рисовании чего бы то ни было берется оттуда с проверкой, в каком пространстве работаем
Цитата:
масштаб берется от видового экрана, если не через WP то 1.
А вот это любопытственно было б глянуть. Можно посмотреть? Я-то прошел криво достаточно, если честно. Хотелось бы глянуть на решение... (если, конечно, это допустимо).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.11.2006, 11:27
#16
Krieger

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


Цитата:
Сообщение от kpblc
А вот это любопытственно было б глянуть. Можно посмотреть? Я-то прошел криво достаточно, если честно. Хотелось бы глянуть на решение... (если, конечно, это допустимо).
Ну, собсно ничего сверхестественного. Проверяю три условия. Я это впринципе недавно изобрел, но пока работает.
Для масшатаба вставки блока (dsc) использую следующее:
Код:
[Выделить все]
(if (= (getvar "dimscale") 0) (setq dsc 1) (setq dsc (getvar "dimscale")))
		   (if (and (= (Getvar "CVPORT") 2)
			    (= (vla-get-ActiveSpace (vla-get-ActiveDocument (vlax-get-Acad-Object))) 0)
			    (= (getvar "dimscale") 0))
		     	(setq dsc (/ dsc (vla-get-CustomScale (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-Acad-Object))))))
			)
Krieger вне форума  
 
Непрочитано 27.11.2006, 14:31
#17
Кулик Алексей aka kpblc
Moderator

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


А ты не блокируешь ВЭ? А то ведь вставили, а потом поменяли масштаб... Или как-то обходишь более хитро?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.11.2006, 19:39 Как создать "масштабную" кнопку?
#18
PL


 
Регистрация: 23.11.2006
California
Сообщений: 4,750


>Archeo
Если речь о том чтобы не пользоваться paper space, то у нас применялись вот такие масштабные кнопки:
Например на масштаб 1:12 (все в дюймах,устанавливается техт стиль Simpalt - только как пример):
^C^CMenuecho;2;Scale;all;;0,0;r;$M=$(Getvar,dimscale);12;Dimscale;12;Ltscale;12;zoom;e;-style;Simpalt;simpalt.shx;0;0.9;;;;_-style;D2K;simpalt.shx;1.125;0.9;;;;_-dimstyle;a;all;;Menuecho;0;

Рамка вносится в модель, все чертится в модели,все работает от текущего значения dimscale,Черчение ведется 1:1(рамка в этот момент увеличена соответственно масштабу), в конце работы надо кликнуть на масштабную кнопку "бумажный размер" - рамка приводится в натуральную величину, все что внутри рамки - в соответствующем масштабе.
Более подробно здесь: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=28243uH PL (2006-07-06 19:37:42)

Но, честно говоря, надо бы сначала людям обьяснить простые вещи-работу с листами
PL вне форума  
 
Непрочитано 28.11.2006, 06:00
#19
Krieger

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


Цитата:
Сообщение от kpblc
А ты не блокируешь ВЭ? А то ведь вставили, а потом поменяли масштаб... Или как-то обходишь более хитро?
Ничего я не делаю
Изменил масштаб - сам виноват. Поведение при вставке блока будет такое же как и у размеров. Если пользуешся размерами, то и здесь проблем не должно быть. ЯТД
Думаешь надо программно блокировать экраны?
Krieger вне форума  
 
Непрочитано 28.11.2006, 08:15
#20
Кулик Алексей aka kpblc
Moderator

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


Если честно, пока не знаю. Не все ж пользователи знают про блокировку ВЭ. Пока в раздумьях.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.11.2006, 00:10
#21
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Зашёл через мобильник, да с другого компа. Пока всем спасибо за ответы. Вопрос: если в масштабной кнопке я пишу ^C^CUserr1;10, то почему
Цитата:
Тогда кнопка для текста:
Код:
_dtext;\(* 2.5 (getvar "useri1"));;
? То есть я задаю одну переменную, а в кнопке примитива потом ссылаюсь на другую? Чем отличается Userr от Useri? Имеет ли значение регистр букв? >Kpblc: какие проблемы ты имеешь в виду (при работе с этими переменными)?
А что насчёт остальных моих вопросов: как экспортировать самодельные панели инструментов на другой комп? Чем будет отличаться макрос для масштаба уменьшения от макроса для масштаба увеличения?
Цитата:
в мультитексте перестали вставляться спецсимволы из раздела "Другое"
?
Ещё раз спасибо!
Archeo вне форума  
 
Непрочитано 30.11.2006, 06:40
#22
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Для Krieger и kpblc:

В ruCAD сейчас вставка блоков, требующих масштабирования, а также создание любых других изображений, размеры которых нормируются на бумаге (внемасштабные символы) происходит так:

1. Есть "глобальная" настройка масштаба печати из модели и наименований единиц рисунка, устанавливаемая в специальном диалоге. Эти параметры хранятся в словаре рисунка и могут быть изменены только через этот диалог. Раньше использовалась DIMSCALE, но, т.к. она может быть и 0, то теперь собственная переменная.

2. Если внемасштабный символ в модели - его величина в соответствии с настройками, с учетом того, что блок может быть создан "в попугаях", а рисунок - в мм.

3. Если рисование в листе - размеры с учетом перевода "попугаев в мм".

4. Если рисование в модели через ВЭкран - с учетом масштаба экрана и перевода единиц.

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

Код не привожу - он очевиден и прост. В отличие от DIMSCALE в коде Krieger у нас используется специальная функция масштабирования, что позволяет менять методику без переделки программ.

5. Для быстрой блокировки\разблокировки ВЭ сделал на видном месте две кнопки, которые сразу воздействуют на все ВЭ листа. Оказалось очень удобно. Все-таки блокировка спрятана достаточно далеко от пользователя. На рисование блокировка не влияет, нужна чтобы не сбивать масштаб.
ShaggyDoc вне форума  
 
Непрочитано 30.11.2006, 07:34
#23
Krieger

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


Цитата:
Сообщение от Archeo
То есть я задаю одну переменную, а в кнопке примитива потом ссылаюсь на другую?
Ссылаешься не на кнопку, а на значение переменной.
Цитата:
Чем отличается Userr от Useri?
USERI1-5 - для целых чисел (integer)
USERR1-5 - для вещественных чисел (real)
USERS1-5 - для текста (string)
по-моему так...
Цитата:
Имеет ли значение регистр букв?
Нет.
Цитата:
как экспортировать самодельные панели инструментов на другой комп?
Надо делать свое собственное меню. Для AutoCAD ниже 2005 - *.mns, с 2006 - *.cui. Поищи по форуму - создание своего меню уже обсуждалось. Ну, а потом таскаешь это меню куда захочешь.
Цитата:
Чем будет отличаться макрос для масштаба уменьшения от макроса для масштаба увеличения?
Ничем. Просто значение масштаба надо ставить меньше еденицы.
Krieger вне форума  
 
Непрочитано 30.11.2006, 08:54
#24
Кулик Алексей aka kpblc
Moderator

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


> ShaggyDoc : Я имел в виду ситуацию "поставили внемасштабный элемент, а потом сделали zoom внутри ВЭ." В таком-то варианте в результате на бумаге будет "не тот" масштаб блока (если только прилично голову не поломать - ЯТД. Либо применить подход Krieger - "сам виноват"). Я пока кнопок по [раз]блокировке ВЭ не делал - не было необходимости
> Krieger : UserS*-переменные не сохраняются в файле, насколько я помню; UserI* и UserR* - сохраняются именно в файле. Что позволяет использовать сохраненные в них данные между сессиями. Только надо быть 100% уверенным в том, что никто и ничто эти переменные не поменяет
Цитата:
Надо делать свое собственное меню. Для AutoCAD ниже 2005 - *.mns, с 2006 - *.cui.
Можно в принципе просто создать собственный mnu-файл и грузить напрямую его (при установленном SP на 2006 и уже в чистом ACAD 2007 испорт и преобразование вроде как выполняется корректно).
> Archeo : Насчет экспортирования панелей... Все же купи книгу В.Свет "AutoCAD Язык макрокоманд и создание кнопок" - там все описано очень подробно. [/quote]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2006, 12:09
#25
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от kpblc
Я имел в виду ситуацию "поставили внемасштабный элемент, а потом сделали zoom внутри ВЭ." В таком-то варианте в результате на бумаге будет "не тот" масштаб блока (если только прилично голову не поломать - ЯТД
И я понял, кто что имел. Голову надо ломать до, потом "поздно пить пирамидон". К сожалению, в AutoCAD нет такой необходимой вещи, как "обновление" символов, за исключением размеров. Поэтому приходится наставлять пользователей - сначала выберите нужный масштаб Viewport, заблокируйте его, а потом уж рисуйте символы. Да запомните какой масштаб, или запишите, чтобы восстановить. Кнопки блокировки очень помогают от случайного ZOOM. Просто щелчок, даже не выясняя - заблокирован или нет.

И есть программа, которая может перемасштабировать выбранные символы. Конечно, это не всегда возможно, но в частных случаях бывает полезно. Например, перемасштабирование точечных условных знаков на картах под другой масштаб печати.
ShaggyDoc вне форума  
 
Непрочитано 30.11.2006, 13:20
#26
Кулик Алексей aka kpblc
Moderator

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


Я, возможно, ошибаюсь, но, по-моему, была какая-то переменная, регламентирующая масштаб вновь создаваемого Viewport'a. По дефолту оно равно 0, т.е. ВЭ создается для всего вида модели. Но можно и поэкспериментировать. Еще б имя вспомнить...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.11.2006, 23:10
#27
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Для Krieger
Спасибо, конечно, но я по-прежнему не врубился.
Цитата:
Ссылаешься не на кнопку, а на значение переменной
Пусть значение. Но ведь задавал-то я значение переменной USERR, а ссылаюсь в кнопке примитива на значение переменной USERI, которую я не трогал! Действительно ли в макросах кнопки для масштаба и кнопки для примитива должны быть указаны разные имена переменных?
Цитата:
USERI1-5 - для целых чисел (integer)
USERR1-5 - для вещественных чисел (real)
Это я и в справке видел. Но - боже мой! - что значит "целые" и "вещественные"??! Эти термины мне абсолютно ни о чём не говорят. Чем отличаются, где и как применяются?
Цитата:
значение масштаба надо ставить меньше еденицы
А в каком формате? Например, 1/10 или 0.1?
Спасибо.
Archeo вне форума  
 
Непрочитано 01.12.2006, 06:58
#28
Krieger

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


Цитата:
Сообщение от Archeo
Для Krieger
Спасибо, конечно, но я по-прежнему не врубился.
Цитата:
Ссылаешься не на кнопку, а на значение переменной
Пусть значение. Но ведь задавал-то я значение переменной USERR, а ссылаюсь в кнопке примитива на значение переменной USERI, которую я не трогал! Действительно ли в макросах кнопки для масштаба и кнопки для примитива должны быть указаны разные имена переменных?
Извиняюсь, описался в 10-м постинге. Ну канечно переменная должна быть одна и та-же. Если выбрал USERR1 то ей и пользуюся во всех макросах. Для масштаба скорее всего подойдет USERR1-5, т.к. как я понял нужны масштабы уменьшения.

Цитата:
Это я и в справке видел. Но - боже мой! - что значит "целые" и "вещественные"??! Эти термины мне абсолютно ни о чём не говорят. Чем отличаются, где и как применяются?
:shock:
Ну тогда на примере:
USERI1-5:
1
0
-2
100
10567
и т.д.

USERR1-5:
1.25
0.785
2
0
-4.567
и т.д.
Цитата:
А в каком формате? Например, 1/10 или 0.1?
Спасибо.
В макросе или в комстроке можешь и так и сяк написать. А храниться переменная естественно в десятичных.
Например:
на лиспе:
^C^C(setvar "USERR1" (/ 1.0 10))
^C^C(setvar "USERR1" 0.1)
без лиспа:
^C^CUSERR1;1/10
^C^CUSERR1;0.1
По любому, переменная примет значение 0.1
Krieger вне форума  
 
Непрочитано 01.12.2006, 07:29
#29
Krieger

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


ShaggyDoc, Kpblc
Подытожу.
Насколько я понял для всяких масштабирований надо сделать следующее:
Задаться переменной в словаре (или USERR1 взять)
Задаться переменной для перевода едениц измерения
Написать функцию которая создаёт переменную для масштабирования объектов взависимости от масштаба черчения, едениц измерения, текущего видового экрана, пространства оформления. Она же будет устанавливать переменные dimscale, dimlfac, celtscale, ltscale, hpscale, textstyle или еще что там надо...
И вот уже на неё и будут ссылаться все остальные проги.
Krieger вне форума  
 
Автор темы   Непрочитано 01.12.2006, 23:09
#30
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Ага. Ну вот, уже легче как-то. Тупость моя испаряется потихоньку. А можно ли понимать так, что в конце макроса каждой нужной кнопки надо просто дописать что-то вроде \(getvar "userr1");; или я хочу легко жить? А то в лиспах и дизелях всяких я, как... Чапай с книжками :shock: Ещё: вещественные могут включать в себя целые, так? И ещё: если переменную назначаем 10, то получим масштаб 1:10; а если переменная 0.1 - то масштаб будет 10:1? Как бы это прояснить, сам чтой-то не соображаю...
>PL: как-то у Вас сильно сложно...
Archeo вне форума  
 
Непрочитано 02.12.2006, 20:11
#31
Krieger

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


Цитата:
Сообщение от Archeo
А можно ли понимать так, что в конце макроса каждой нужной кнопки надо просто дописать что-то вроде \(getvar "userr1");;
Цитата:
И ещё: если переменную назначаем 10, то получим масштаб 1:10; а если переменная 0.1 - то масштаб будет 10:1? Как бы это прояснить, сам чтой-то не соображаю...
:shock: Приехали. Разберись сначала, что такое макрос. Функция getvar вытаскивает из системы значение переменной (которая указана в кавычках). Далее, остаётся вставить её туда куда надо.
Разжую пример вставки блока с именем nameblock:
Сначала просто работаем с комстрокой:
Вводим команду _-insert и жмем ентер
Код:
[Выделить все]
Command: _-insert
на запрос Enter block name or [?] вводим имя блока:
Код:
[Выделить все]
Enter block name or [?] <ФермаСхема>:nameblock
дальше просит указать точку, тыкаем мышкой в экране:
Код:
[Выделить все]
Specify insertion point or [Basepoint/Scale/X/Y/Z/Rotate]:
дальше, ВНИМАНИЕ, надо указать масштаб блока (сначала по x)
Код:
[Выделить все]
Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>:
И вот тут то мы зададим ему тот масштаб который нам надо. А где записан? В переменной userr1. Вытаскиваем её с помощью функции (getvar [переменная]) и вписываем в комстроку:
Код:
[Выделить все]
Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>:(getvar "userr1")
Если переменная userr1 больше еденицы, то блок увеличится, если меньше - уменьшится.
Следующий запрос:
Код:
[Выделить все]
Enter Y scale factor <use X scale factor>:
По умолчанию возьмет масштаб по x. Можно просто нажать ентер.
Следующий запрос, угол поворота, если поворачивать не надо ставим нуль и жмем ентер:
Код:
[Выделить все]
Specify rotation angle <0>: 0
Блок должен вствиться, увеличенный/уменьшенный на наш коэффициент.
Фу. Теперь запомним че делали и запишем все что мы вводили в одну строчку. При этом Enter меняем на точку с запятой ;. Указку точки на экране слешем \. А перед этим нажмем два раза на Esc - ^C^C. Точку с запятой в конце можно не ставить.
Получим строку:
Код:
[Выделить все]
^C^C_-insert;nameblock;\(getvar "userr1");;0
Это и будет макрос на кнопку. И так разбираешся со всем остальным.
Цитата:
Ещё: вещественные могут включать в себя целые, так?
естесно
Цитата:
>PL: как-то у Вас сильно сложно...
Проанализируй каждую закарючку и окажется, что все просто.
Krieger вне форума  
 
Автор темы   Непрочитано 09.12.2006, 00:37
#32
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Спасибо всем откликнувшимся. Весьма полезно. Кстати, только что из интернета мне притаранили книгу В. Света про кнопки. Теперь мне материала для изучения - выше крыши.
С уважением.
Archeo вне форума  
 
Автор темы   Непрочитано 11.03.2007, 15:58
#33
Archeo

архитектор
 
Регистрация: 02.04.2006
Беларусь
Сообщений: 349


Добрый день! Вновь возвращаюсь к вопросу о масштабе. Не так танцуется гопак, чесслово. Как должно быть, по моему представлению? Рамка чертежа имеет свои натуральные размеры, например, 297х420 мм для формата А3. Для масштаба 1:100 всё, что чертится (допустим, план здания), уменьшается в 100 раз, а вот текст остаётся своей родной высоты – 2,5 мм, к примеру. И не надо увеличивать размерные стрелки и т. п. Нужно, чтобы значение размерного текста (в частности, в линейном размере) умножилось на масштабный коэффициент. Для масштабов увеличения, соответственно, всё наоборот: чертёж увеличиваем, а значение размерного текста уменьшаем на масштабный коэффициент. А то сейчас получается, что народ увеличивает рамку в 100 раз (а заодно и высоту текста, и величину размерных элементов) и в ней чертит в натуральную величину. Какой же это 1:100? А соседние изображения в этой же рамке должны быть, например, в масштабе 1:50 и 1:10, снова начинается пересчитывание, и в результате никакими масштабами и не пахнет.
Правда, не понятен вопрос со смещением/переносом/копированием элементов на заданное с клавиатуры расстояние, но с учётом масштаба. То есть что-то должно перехватывать вводимые с клавы значения и применять к ним масштабный коэффициент.
Сделал пару экспериментальных кнопок для примитивов.

^C^C_line;(Setq P1 (Getpoint));\\;_Scale;_Last;;(Getpoint P1)(/ 1 (getvar "userr1"))

^C^C_rectang;(Setq P1 (Getpoint));\_d;\\\_Scale;_Last;;\(/ 1 (getvar "userr1"))

На (Setq P1 (Getpoint)) не обращайте внимания, она пока не рабочая, просто что-то у меня не получается автоматически указать точку P1 в качестве базовой точки для масштабирования, а через \ (т. е. руками) неудобно.
Ну и, собственно, вопросы. Реально ли осуществить такое масштабирование, о котором я написал? Как автоматически указать базовую точку для масштабирования? Как зациклить команду Line, чтобы можно было, не выходя из неё, строить последовательные отрезки, каждый из которых масштабировался бы относительно своей стартовой точки?
Кстати, видел у некоторых коллег остатки масштабной кнопки (ни у кого из них она не работает), которую им кто-то когда-то сделал. На ней только одна буква М. Интересно, как и на что она действовала?
Archeo вне форума  
 
Непрочитано 11.03.2007, 19:21
#34
Krieger

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


Цитата:
Сообщение от Archeo
Спасибо всем откликнувшимся. Весьма полезно. Кстати, только что из интернета мне притаранили книгу В. Света про кнопки. Теперь мне материала для изучения - выше крыши.
С уважением.
Видать хреново ознакомился с книжкой. Прочитай еще раз.
Цитата:
Как автоматически указать базовую точку для масштабирования?
Например так:
Код:
[Выделить все]
^C^C_line;(Setq P1 (Getpoint));\\;_Scale;_Last;;!P1;(/ 1 (getvar "userr1"))
Цитата:
Как зациклить команду Line, чтобы можно было, не выходя из неё, строить последовательные отрезки, каждый из которых масштабировался бы относительно своей стартовой точки?
Можно вот так:
Код:
[Выделить все]
(defun c:linesc	()
  (if (setq pt1 (getpoint))
    (progn
      (while (setq pt2 (getpoint pt1 "\nУкажите длину отрезка"))
	(command "_line" pt1 (setq pt3 (polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) (getvar "userr1")))) "")
	(setq pt1 pt3
	      pt2 nil
	)
      );end while
    );end progn
  );end if
);end defun
Цитата:
Кстати, видел у некоторых коллег остатки масштабной кнопки (ни у кого из них она не работает), которую им кто-то когда-то сделал. На ней только одна буква М
Вероятно это была пользовательская команда и без подгрузки той самой проги она работать не будет.

Цитата:
Реально ли осуществить такое масштабирование, о котором я написал?
Проще на КОМПАС пересесть. Хотя, можно, и где-то я даже об этом слышал. Для этого прийдется переписать все масштабируемые кадовские команды, которые и будут делать чего захочешь, ну и переопределить существующие стандартные команды. Во всяком случае для AutoCAD это "против шерсти"
Krieger вне форума  
 
Непрочитано 14.04.2010, 10:21
#35
Bennington_LP

инженер-проектировщик
 
Регистрация: 08.04.2010
Сообщений: 29
<phrase 1=


То ли я дурак, то ли лыжи не едут. Не получается у меня выполнить этот макрос:
^C^C_-insert;куб;\(getvar "userr1");;0
когда нужно указать масштаб вылезает сообщение: Введите масштаб по оси X, укажите второй угол или [Угол/XYZ] <1>: (getvar
X2D угловая точка или ключевое слово.

Последний раз редактировалось Bennington_LP, 16.04.2010 в 21:41.
Bennington_LP вне форума  
 
Непрочитано 16.04.2010, 21:35
#36
Bennington_LP

инженер-проектировщик
 
Регистрация: 08.04.2010
Сообщений: 29
<phrase 1=


Кажется я сам решил проблему. У меня просто стоит AutoCAD LT, так что предыдущий макрос мне не подходит. Если кому инетересно, то вот рабочий:
Код:
[Выделить все]
*^C^C_-insert;block_name;\$m=$(Getvar,Userr1);;;_explode;Последний
У меня вопрос к знатокам: как сделать так, чтобы где-нибудь отражалось какое именно значение Userr1 в данный момент установлено

Цитата:
Сообщение от Krieger
Последняя нажатая кнопка в сплывающем тулбаре остается видимой, а на ней картинка с цифрой "10". Для особо сомневающихся значение переменной можно запихать через disel в статусную строку.
Это как? Можно подробнее для "особо одаренных"

Последний раз редактировалось Bennington_LP, 16.04.2010 в 21:45.
Bennington_LP вне форума  
 
Непрочитано 16.04.2010, 21:47
#37
atollon


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


Цитата:
Сообщение от Bennington_LP Посмотреть сообщение
меня вопрос к знатокам: как сделать так, чтобы где-нибудь отражалось какое именно значение Userr1 в данный момент установлено
"Userr1" вызвать в комстроку, или в кнопку
__________________
Толстов Евгений
atollon вне форума  
 
Непрочитано 16.04.2010, 21:48
#38
Bennington_LP

инженер-проектировщик
 
Регистрация: 08.04.2010
Сообщений: 29
<phrase 1=


Цитата:
Сообщение от atollon Посмотреть сообщение
"Userr1" вызвать в комстроку, или в кнопку
А как это сделать?
Т.е. я создал кнопку, например для масштаба:
Код:
А дальше что?
Bennington_LP вне форума  
 
Непрочитано 16.04.2010, 21:50
#39
atollon


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


просто написать в комстроке
или прописать как команду в свою кнопку
при вызове любой переменной показывают ее текущее значение как значение по умолчанию и запрос на ввод нового значения
__________________
Толстов Евгений
atollon вне форума  
 
Непрочитано 16.04.2010, 21:56
#40
Bennington_LP

инженер-проектировщик
 
Регистрация: 08.04.2010
Сообщений: 29
<phrase 1=


уважаемый, atollon, только не сердитесь на меня, но я не программист и не очень-то понимаю, что именно прописать. То что Вы написали, мне и нужно, но не могли бы Вы расписать оба варианта более подробнее)
Bennington_LP вне форума  
 
Непрочитано 16.04.2010, 22:16
#41
atollon


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


Userr1 - это стандартная автокадовская переменная. Если написать ее в ком.строке - то программа попросит ввести новое значение а <текущее значение> выведет как значение по умолчанию - не хочешь менять - Enter или Esc.
В макросе при создании кнопки в панели (надеюсь умеешь), чтоб "посмотреть" достаточно прописать ^C^CUserr1;^C
или добавить например вначале своего макроса, например сразу после ^C^C(GETVAR "Userr1")
__________________
Толстов Евгений

Последний раз редактировалось atollon, 16.04.2010 в 22:25.
atollon вне форума  
 
Непрочитано 16.04.2010, 22:24
#42
Bennington_LP

инженер-проектировщик
 
Регистрация: 08.04.2010
Сообщений: 29
<phrase 1=


Я наверное не очень точно изъясняюсь, мне надо, чтобы я постоянно видел эту переменную, кажется уже нашел в книге В.Света
Код:
[Выделить все]
^C^CUserr1;10;_modemacro; $m=$(getvar, Userr1);
Bennington_LP вне форума  
 
Непрочитано 17.04.2010, 03:31
#43
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Что-то я не догоняю. Первый пост датирован 25.11.2006, 04:03 , а ответ дан сегодня. Такой вопрос не мог быть оставлен без ответа, куда-же делись промежуточные посты? Надеюсь, автор книгу раздобыл, да она есть у нас в DL. Когда-то было много споров насчет переменных User... Дескать, их могла использовать другая программа или макрос, и получится ложный результат. Хотя вероятность этого мизерная. Но для LT выхода нет, а в полной версии можно применить выражение из лиспа. Поскольку все заморочки с масштабированием касаются внемасштавных объектов, на современных версиях надо пользоваться аннотативностью
Vova вне форума  
 
Непрочитано 17.04.2010, 09:24
#44
Admin
Administrator


 
Регистрация: 21.08.2003
Сообщений: 4,468


Offtop: Vova, твое сообщение №43 в этой теме
Admin вне форума  
 
Непрочитано 17.04.2010, 10:12
#45
Krieger

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


С тех пор много воды утекло, пользуйтесь аннотациями с AutoCAD2008.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 17.04.2010, 14:44
#46
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Admin Посмотреть сообщение
Offtop: Vova, твое сообщение №43 в этой теме
Offtop: Теперь и сам вижу... Но вчера то-ли не было снопочек Страница 3 из трех, то-ли в глазах помутилось, но не пил, это точно
Bennington_LP спрашивает:
Цитата:
У меня вопрос к знатокам: как сделать так, чтобы где-нибудь отражалось какое именно значение Userr1 в данный момент установлено
Вводим Modemacro, Enter
Заполним ком. строку так: $(Getvar, UserXX)
Теперь в строке состояния с левой стороны на всю сессию автокада будет отражаться живое значение переменной. Таким образом, если через пробел добавить аналогичное выражение с другой переменной, отразится в живом виде и она. В книге это есть, в главе про Diesel

Последний раз редактировалось Vova, 17.04.2010 в 15:18.
Vova вне форума  
 
Непрочитано 17.04.2010, 21:27
#47
Bennington_LP

инженер-проектировщик
 
Регистрация: 08.04.2010
Сообщений: 29
<phrase 1=


Я как-то не очень хорошо отношусь к аннотативности. Наверноее её удобно использовать в полной версии Автокада, с лиспом от Krieger, который удаляет остальные масштабы. Просто хочется найти что-то похожее на масштабы СПДС, но пока тщетно. Думаю, что для динамических блоков все-таки удобнее использовать Userr, а вот для размеров навреное подойдет и аннотативность, ИМХО.
Bennington_LP вне форума  
 
Непрочитано 18.04.2010, 09:31
#48
Krieger

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


Цитата:
Сообщение от Bennington_LP Посмотреть сообщение
Я как-то не очень хорошо отношусь к аннотативности. Наверноее её удобно использовать в полной версии Автокада, с лиспом от Krieger, который удаляет остальные масштабы. Просто хочется найти что-то похожее на масштабы СПДС, но пока тщетно. Думаю, что для динамических блоков все-таки удобнее использовать Userr, а вот для размеров навреное подойдет и аннотативность, ИМХО.
Без этого лиспа тоже покатит. Лучше использовать либо dimscale, либо аннотативность. И про dimscale и про аннотации здесь написано http://dwg.ru/pub/13. Вместо кнопки можно просто понаделать размерных стилей. Я уже проверил, все нормально работает и это удобнее чем мудрить с какими-то своими переменными, да еще в облегченной версии када... Через масштабную кнопку я уже прошел и остановился на аннотациях.

PS В моей конторе тоже есть компы с LT версией, ведь работают как-то...
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как создать "масштабную" кнопку?