Тема: Установка толщины и цвета линии из командной строки

Как можно из командной строки установить толщину и цвет линии, которые будут временно использоваться по умолчанию, а затем вернуть значения назад

Re: Установка толщины и цвета линии из командной строки

Есть в Автокаде такая штука - системные переменные. Набирая её имя в командной строке, можно задавать ей значение. Например, цвет -  cecolor  и т.д. Затем еще раз, и вернуть назад. Но делать это из командной строки??? Лучше писать для этого макросы (см.книгу В.Свет), а еще лучше начинать писать на ЛИСПе.

Re: Установка толщины и цвета линии из командной строки

смотри опции команды. И вывывай по принципу
_-line
_-pline
_-xline
etc

Re: Установка толщины и цвета линии из командной строки

В постинге > kpblc (2005-02-01 12:09:24) имелось в виду "вызывай" - из Лиспа. По лиспу лучшие книги пишет Н.Полещук, хотя книга В.Света тоже неплохая. А команды из лиспа надо вызывать так:

(command "_.-insert")

Перед именем команды:
знак подчёркивания - чтобы работало в любой национальной версиии акада, а не только в английской;
точка - чтобы вызывалась оригинальная системная команда, а не переопределённая командой REDEFINE;
минус (дефис) - чтобы подавить диалоговое окно команды (если оно есть), также смотри описание лисп-функции filedia. Минус, понятное дело, нужен только для тех команд, которые выводят окно. Но для некоторых команд с окном (например, wblock) минус не срабатывает, и в этом случае надо обнулять системную переменную FILEDIA, а после вызова команды восстанавливать её старое значение (запомненное до вызова команды).
Кроме функции (command), есть ещё (vl-cmdf), она отличается тем, что предварительно перед вызовом команды вычисляет все свои аргументы и при возникновении ошибки команда не вызывается. А старая функция (command) просто вываливает аргументы в командную строку.

Re: Установка толщины и цвета линии из командной строки

Наверное я не правильно выразился в первоначальном посте.
Смысл задачи состоит в том, чтобы создать кнопку, на которую будут повешены следующие действия:
1. Изменение толщины и цвета линии
2. Вызов команды pline
3. После ее завершения вернуть значения для линии обратно.
или, как вариант
1. Выбор слоя для рисования
2. Отрисовка pline в выбранном слое
3. После завершения возвращение в слой по умолчанию.

Re: Установка толщины и цвета линии из командной строки

> Andrey
Как создавать кнопки, написано здесь https://www.caduser.ru/forum/topic15032.html . Я советую записывать в макрос только вызов вашей собственной Лисп-функции, а всё это - 1, 2 ,3 - делать уже в этой функции.

Re: Установка толщины и цвета линии из командной строки

Так в этом то и вопрос, как это сделать.
Если это не очень сложно и достаточно написания нескольких строк в посте, то просьба помочь мне. Кнопки создавать умеем:-)

Re: Установка толщины и цвета линии из командной строки

> Andrey
по второму пункту - я не знаю, как обеспечить возможность ввода юзером НЕСКОЛЬКИХ точек (их число заранее неизвестно). Где-то видел в книжке, посмотрю... А пока, может, кто-нибудь ещё поможет:).

Re: Установка толщины и цвета линии из командной строки

Это вообще-то надо перенести в раздел ЛИСП
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 - наши ЛИСП-программы
Удачи!

Re: Установка толщины и цвета линии из командной строки

Глупость кто-то сморозил. Надо было бы что-то временно изменить, а потом ВЕРНУТЬ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ.
Зачем же делать через заднепроходное отверсьтие?

Re: Установка толщины и цвета линии из командной строки

Очень хорошо, > 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) ;-- позволяем пользователю вводить всё что угодно
)

Re: Установка толщины и цвета линии из командной строки

Судя по ответам 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 здесь нажимать не надо.
Но то, что ты увидишь на экране, еще не значит, что так-же выйдет на бумаге. Это зависит от настройки стиля печати.
Отсюда мораль: всякий уважающий себя автокадчик должен иметь на столе несколько разных книг, и все их регулярно листать.

Re: Установка толщины и цвета линии из командной строки

To Vova (2005-02-03 05:28:51)
Спасибо за ответ, что то в этом роде и нужно было.
А как сделать это в все в отельно выбранном слое сделать, а не в слое по умолчанию?

Re: Установка толщины и цвета линии из командной строки

Если для макроса, то:

_-Layer;Make;ИмяСлоя;

ну и так далее - посмотри по параметра функции _-Layer (вызов из командной строки).
В книге В.Света все это очень хорошо описано.

Re: Установка толщины и цвета линии из командной строки

Ну а теперь вернемся в самое начало.
Andrey (2005-02-01 10:22:29)

> Alan
Как приятно почитать любимые книжки! Названы не все.
Я бы еще назвал Н.Полещук "Visual LISP и секреты адаптации Autocad"
Andrey, Вы взяли какую-то из них в руки?

>[Re: пишет:

Profan]Глупость кто-то сморозил. Надо было бы что-то временно изменить, а потом ВЕРНУТЬ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ.

ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ чьи: AutoDesk", Иванов, Пупкин...? В текущем чертеже м.б. другими, отличными от начальных.
Возвращать надо ПРЕДЫДУЩИЕ.

Re: Установка толщины и цвета линии из командной строки

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

^C^C_-Layer;_Make;TestLayerName;_Lweight;
0.5;;;(command "_pline")(while (= (getvar "cmdactive") 1) (command pause));_-Layer;_Set;0;

В конце (по идее) должен становиться активным слой 0, но этого не происходит. Вроде уже все что мог перепробовал.
Нужен именно вариант со слоями.

Re: Установка толщины и цвета линии из командной строки

О! И еще маленький вопрос - возможно ли такое же (или по крайней мере аналогичное) действо провернуть в лайте (где лиспом и не пахнет)?

Re: Установка толщины и цвета линии из командной строки

> >kpblc
Лайт напоминает мне М.Булгакова
"Ларион, как же вы селедку без водки?"
Автокад без ЛИСП это к Vov'e

Re: Установка толщины и цвета линии из командной строки

> Alan
Да я бы и рад на нормальной работать, да начальство требует обеспечить работу на лайте (есть у нас и такие :)
От профи и жду ответа, потому как сам чайник до невозможности :)

Re: Установка толщины и цвета линии из командной строки

> Alan
Кстати, а в коде (который повыше, с лиспом): в чем там порождение неправильности работы? хелп ми, плиз :)

Re: Установка толщины и цвета линии из командной строки

> > 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 и там всё начилось сначала.

Re: Установка толщины и цвета линии из командной строки

> Alan
Менюху пишу для сантехников, оне у мене на лайте (а мне - мучайся!), вот про лисп и стараюсь пока не думать (когда до настройки ADT дойду, буду и его изучать :))
Да, действительно, лишний код сносил, случайно оставил ;;
аську - пора. Мой номер в письме.

Re: Установка толщины и цвета линии из командной строки

Alan'у Пупкину. Лушие значения по умолчанию "ПоСлою" ("ByLayer"). С такими умолчаниями никогда не промахнешсься. А Пупкин пусть треснет от злости.

Re: Установка толщины и цвета линии из командной строки

> Profan
А не прикапываться к каждому символу не пробовал?

Re: Установка толщины и цвета линии из командной строки

To Alan (2005-02-03 17:03:53)
Автор темы, то есть я перебрался в раздел Lisp, где все началось сначала и сразу же закончилось, весьма успешно.
Сразу туда надо было. По неопытности не сообразил.