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

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

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

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

Добрый день! Заранее извиняюсь за, может быть, ламерский вопрос. Как говорится, не корысти ради... Сам я черчу в модели 1:1, оформление - в лэйаутах с использованием видовых экранов. А вот мои коллеги всё делают в модели, в т. ч. размеры, текст и рамки с основной надписью. При этом занимаются бесконечным пересчитыванием всего и вся, либо - такой же бесконечный scale в ту или другую сторону. Подскажите, пожалуйста, как бы для них создать кнопку, после нажатия на которую всё чертилось бы в соответствующем масштабе? Знаю, что Vova это с успехом применяет, но его книгу "Язык макрокоманд и создание кнопок..." я за всё время никакими способами не смог раздобыть. Может, автор захочет себя процитировать? Или другая добрая душа покажет, что же конкретно написать в макросе?
Заранее благодарен.
Просмотров: 12725
 
Автор темы   Непрочитано 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,431


> 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,431


Я, возможно, ошибаюсь, но, по-моему, была какая-то переменная, регламентирующая масштаб вновь создаваемого 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 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как создать "масштабную" кнопку?