Тема: Установка толщины и цвета линии из командной строки
Как можно из командной строки установить толщину и цвет линии, которые будут временно использоваться по умолчанию, а затем вернуть значения назад
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Autodesk → AutoCAD → Установка толщины и цвета линии из командной строки
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как можно из командной строки установить толщину и цвет линии, которые будут временно использоваться по умолчанию, а затем вернуть значения назад
Есть в Автокаде такая штука - системные переменные. Набирая её имя в командной строке, можно задавать ей значение. Например, цвет - cecolor и т.д. Затем еще раз, и вернуть назад. Но делать это из командной строки??? Лучше писать для этого макросы (см.книгу В.Свет), а еще лучше начинать писать на ЛИСПе.
смотри опции команды. И вывывай по принципу
_-line
_-pline
_-xline
etc
В постинге > kpblc (2005-02-01 12:09:24) имелось в виду "вызывай" - из Лиспа. По лиспу лучшие книги пишет Н.Полещук, хотя книга В.Света тоже неплохая. А команды из лиспа надо вызывать так:
(command "_.-insert")
Перед именем команды:
знак подчёркивания - чтобы работало в любой национальной версиии акада, а не только в английской;
точка - чтобы вызывалась оригинальная системная команда, а не переопределённая командой REDEFINE;
минус (дефис) - чтобы подавить диалоговое окно команды (если оно есть), также смотри описание лисп-функции filedia. Минус, понятное дело, нужен только для тех команд, которые выводят окно. Но для некоторых команд с окном (например, wblock) минус не срабатывает, и в этом случае надо обнулять системную переменную FILEDIA, а после вызова команды восстанавливать её старое значение (запомненное до вызова команды).
Кроме функции (command), есть ещё (vl-cmdf), она отличается тем, что предварительно перед вызовом команды вычисляет все свои аргументы и при возникновении ошибки команда не вызывается. А старая функция (command) просто вываливает аргументы в командную строку.
Наверное я не правильно выразился в первоначальном посте.
Смысл задачи состоит в том, чтобы создать кнопку, на которую будут повешены следующие действия:
1. Изменение толщины и цвета линии
2. Вызов команды pline
3. После ее завершения вернуть значения для линии обратно.
или, как вариант
1. Выбор слоя для рисования
2. Отрисовка pline в выбранном слое
3. После завершения возвращение в слой по умолчанию.
> Andrey
Как создавать кнопки, написано здесь https://www.caduser.ru/forum/topic15032.html . Я советую записывать в макрос только вызов вашей собственной Лисп-функции, а всё это - 1, 2 ,3 - делать уже в этой функции.
Так в этом то и вопрос, как это сделать.
Если это не очень сложно и достаточно написания нескольких строк в посте, то просьба помочь мне. Кнопки создавать умеем:-)
> Andrey
по второму пункту - я не знаю, как обеспечить возможность ввода юзером НЕСКОЛЬКИХ точек (их число заранее неизвестно). Где-то видел в книжке, посмотрю... А пока, может, кто-нибудь ещё поможет:).
Это вообще-то надо перенести в раздел ЛИСП
1. Пишем команду на ЛИСП, например
;; чертим учебную полилинию в цикле (defun c:dd1 ( / oldl osm plw ) ;;; запомнили: слой, цвет, тип (setq oldl (getvar "CLAYER") osm (getvar "osmode") plw (getvar "PLINEWID") ) ;;;например, установим слой 0, т.к. он всегда есть ;;;всякие проверки есть ли слой сейчас не рассматриваем (command "_.Layer" "_S" "0" "") ;;;например, установим ширину плинии (setvar "PLINEWID" 2) ;;; например, объектная привязка - 51 (setvar "osmode" 51) (prompt "\n Режим объектной привязки: ПЕР,КОН,СЕР,КВА ") ;;; объектная привязка - 51 ;;; запускаем ЛИСП ;;; и делаем всякие действия ;;; после окончания действий ;;; вернули назад (setvar "CLAYER" oldl) (setvar "osmode" osm) (setvar "PLINEWID" plw) (princ) )
2. Оформляем вызов из кнопки
^C^Cdd1
> >Andrey
Это написано в любом учебнике
P.S. Хотя вот нашел я в нашем меню кусок для иллюстрации сочетания ЛИСП - переменные в меню
[Умывальники] [1_1-1]^C^C(setq nsl (getvar "CLAYER"))(nlayer "BK_2" nil nil)(setvar "menuecho" 5)(princ) _-INSERT 1_1-1 \(/ 100.0 (getvar "useri1"));;\;^C(vko01 "1_1-1")(setvar "CLAYER" nsl)(princ)
Здесь nlayer, vko01 - наши ЛИСП-программы
Удачи!
Глупость кто-то сморозил. Надо было бы что-то временно изменить, а потом ВЕРНУТЬ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ.
Зачем же делать через заднепроходное отверсьтие?
Очень хорошо, > Alan (2005-02-02 17:22:10), но самое вкусное осталось за кадром:
;;; запускаем ЛИСП ;;; и делаем всякие действия
А я всё-таки нашёл ту книжку (ею оказалась "САПР на базе AutoCAD. Как это делается", авторы С.Зуев и Н.Полещук), там на стр.200 прямо твой, > Andrey (2005-02-02 14:18:28), случай:
(command "_.PLINE") ;-- начать построение полилинии (while (= (logand (getvar "CMDACTIVE") 1) 1) ;-- пока команда активна, (command pause) ;-- позволяем пользователю вводить всё что угодно )
Судя по ответам Maxim имеет все упомянутые здесь книги. Если бы в книге "AutoCAD Язык макрокоманд и создание кнопок" добраться до стр 184, добавить сюда найденные им в книге "Сапр на базе AutoCAD..." на стр. 200 сведения, то получился бы такой макрос:
^C^C(setq cw (getvar "celweight") cc (getvar "cecolor"));celweight;200;cecolor;2;(command "pline")(WHILE (= (GETVAR "CMDACTIVE") 1) (COMMAND PAUSE))(setvar "celweight" cw)(setvar "cecolor" cc)
Andrey>Ты запросил ТОЛЩИНУ линии, то есть вес линии. Здесь он и заложен. При работе включи кнопку LWT внизу экрана, чтобы увидеть результат. Здесь заложен вес линии 2мм (см цифра 200) и цвет ?2 (желтый).Эти цифры замени на те что надо. Макрос работающий, я его скопировал из окна Customize. Сделай также, отсюда в окно.
Если-же ты имел в виду ШИРИНУ полилинии, то везде, где встречается слово CELWEIGHT, замени его на PLINEWID. Соответственно, цифру 200 замени на требуемую ширину полилинии. Кнопку LWT здесь нажимать не надо.
Но то, что ты увидишь на экране, еще не значит, что так-же выйдет на бумаге. Это зависит от настройки стиля печати.
Отсюда мораль: всякий уважающий себя автокадчик должен иметь на столе несколько разных книг, и все их регулярно листать.
To Vova (2005-02-03 05:28:51)
Спасибо за ответ, что то в этом роде и нужно было.
А как сделать это в все в отельно выбранном слое сделать, а не в слое по умолчанию?
Если для макроса, то:
_-Layer;Make;ИмяСлоя;
ну и так далее - посмотри по параметра функции _-Layer (вызов из командной строки).
В книге В.Света все это очень хорошо описано.
Ну а теперь вернемся в самое начало.
Andrey (2005-02-01 10:22:29)
> Alan
Как приятно почитать любимые книжки! Названы не все.
Я бы еще назвал Н.Полещук "Visual LISP и секреты адаптации Autocad"
Andrey, Вы взяли какую-то из них в руки?
Profan]Глупость кто-то сморозил. Надо было бы что-то временно изменить, а потом ВЕРНУТЬ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ.
ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ чьи: AutoDesk", Иванов, Пупкин...? В текущем чертеже м.б. другими, отличными от начальных.
Возвращать надо ПРЕДЫДУЩИЕ.
Подскажите, в чем у меня ошибка. В макросе прописан следующий код (проверка на наличие слоя не ведется, допускается, что он уже есть с нормальными настройками):
^C^C_-Layer;_Make;TestLayerName;_Lweight; 0.5;;;(command "_pline")(while (= (getvar "cmdactive") 1) (command pause));_-Layer;_Set;0;
В конце (по идее) должен становиться активным слой 0, но этого не происходит. Вроде уже все что мог перепробовал.
Нужен именно вариант со слоями.
О! И еще маленький вопрос - возможно ли такое же (или по крайней мере аналогичное) действо провернуть в лайте (где лиспом и не пахнет)?
> >kpblc
Лайт напоминает мне М.Булгакова
"Ларион, как же вы селедку без водки?"
Автокад без ЛИСП это к Vov'e
> Alan
Да я бы и рад на нормальной работать, да начальство требует обеспечить работу на лайте (есть у нас и такие :)
От профи и жду ответа, потому как сам чайник до невозможности :)
> Alan
Кстати, а в коде (который повыше, с лиспом): в чем там порождение неправильности работы? хелп ми, плиз :)
> > kpblc
Смотри даже Vova (2005-02-03 05:28:51) ГРОМАДНЕЙШИЙ НЕлюбитель ЛИСПА написал на нём. Зачем искать "порождение неправильности работы?", надо решение проблемы! В твоём случае самое простое решение - дописать хвост на ЛИСП, ведь слой 0 есть, проверять не надо.
^C^C_-Layer;_Make;TestLayerName;;_-Lweight;0.5;(command "_pline")(while (= (getvar "cmdactive") 1) (command pause))(setvar "clayer" "0")(princ)
Где-то там вначале (после _-Lweight;0.5;) я у тебя (kpblc) убрал пару;;
P.S. kpblc, пора мне ставить аську?.
P.Р.S. Автор темы Andrey перебрался в раздел LISP и там всё начилось сначала.
> Alan
Менюху пишу для сантехников, оне у мене на лайте (а мне - мучайся!), вот про лисп и стараюсь пока не думать (когда до настройки ADT дойду, буду и его изучать :))
Да, действительно, лишний код сносил, случайно оставил ;;
аську - пора. Мой номер в письме.
Alan'у Пупкину. Лушие значения по умолчанию "ПоСлою" ("ByLayer"). С такими умолчаниями никогда не промахнешсься. А Пупкин пусть треснет от злости.
> Profan
А не прикапываться к каждому символу не пробовал?
To Alan (2005-02-03 17:03:53)
Автор темы, то есть я перебрался в раздел Lisp, где все началось сначала и сразу же закончилось, весьма успешно.
Сразу туда надо было. По неопытности не сообразил.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Autodesk → AutoCAD → Установка толщины и цвета линии из командной строки
Форум работает на PunBB, при поддержке Informer Technologies, Inc