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

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

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

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

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

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


Код:
[Выделить все]
*^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
Беларусь
Сообщений: 348


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

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


Всем привет! Книгу "Язык макрокоманд и создание кнопок..." заказал по интернету. Но пока ещё она придёт, пока я разберусь... А облегчить людям жизнь хотелось бы чем раньше, тем лучше. Тем более, что впереди 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,825


Цитата:
Сообщение от 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,627


Что-то вот с этим
Код:
[Выделить все]
^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,825


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
С.-Петербург
Сообщений: 39,787


К посту №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,825


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 39,787


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

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


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 39,787


А ты не блокируешь ВЭ? А то ведь вставили, а потом поменяли масштаб... Или как-то обходишь более хитро?
__________________
Моя библиотека 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,825


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

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


Если честно, пока не знаю. Не все ж пользователи знают про блокировку ВЭ. Пока в раздумьях.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как создать "масштабную" кнопку?

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

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