Тема: Тип мультилинии для слоя
Можно ли как-то привязать к слою стиль мультилинии?
Т.е. чтоб при рисовании мультилинии на данном слое автоматически выбирался заданный стиль МЛ.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Можно ли как-то привязать к слою стиль мультилинии?
Т.е. чтоб при рисовании мультилинии на данном слое автоматически выбирался заданный стиль МЛ.
Думаю, что и палитре инструментов можно создать подобный инструмент. И даже не думаю, а вот только что создал. Сначала в рисунке создал новый слой "МЛИНИЯ". Потом создал новый стиль для мультилинии с именем "МЛИНИЯ". После этого сделал новый инструмент в палитре, в свойствах которого указал слой "МЛИНИЯ", а в командной строке записал вот такой макрос:
^C^C_MLINE;_ST;МЛИНИЯ;\(setvar "CMLSTYLE" "STANDARD");
Преднолагал вопрос о том, что при создании НОВОГО стиля как то указать ему слой (ну как есть там ТИП линий и их цвет).
В конце концов на другом компе связи опять не будет.
> Atol
А что в действительности нужно? Нужно, чтобы на определенном слое рисовалась мультилиния определенного стиля или наоборот, нужно, чтобы мультилиния определенного стиля рисовалась бы на определенном слое. Так у меня это выполняется. Точно так же можно создать инструмент, проставляющий размеры на слое, скажем, "Размеры". Ну, а на другом компе много чего может не быть. Вот у меня есть куча программ, ускоряющих работу в AutoCAD'е, делающих эту работу приятнее, программ, сделанных мной или взятых на этом форуме. А у моих коллег этого нет или почти нет. Они и не чешутся, ну и Бог с ними. А палитры в конце концов можно экспортировать и импортировать.
А вообще-то, об этом пусть задумаются еще раз те, кто сомневается - нужно ли переходить с AutoCAD 2002 на AutoCAD 2006.
А мне как раз желательно, что бы линия определенного типа, в моем случае например СТЕНАКИРПШТУК170 с опциями рисовалась на определенном (нетекущем! Например "PeregKirp")? Чтобы слой активировался/деактивировался. Методом приведенным выше получилось вот что:
^C^C_mline;_ST;СТЕНАКИРПШТУК170;j;z;\(setvar "CLAYER" "PeregKirp")
работает, но не возвращает текущий LAYER
Если простым методом достигнуть невозможно, сложных конструкций для данного частного случая изготавливать не нужно. :) Переключу ручками :) :)
> iv
Так должно работать
^C^C(setq PL (getvar "CLAYER"))(command "CMDECHO" 0 "_-LAYER" "_M" "PeregKirp" "" "CMDECHO" 1 "_mline" "_ST" "СТЕНАКИРПШТУК170" "_j" "_z")(while (> (getvar "CMDACTIVE") 0)(command pause))(setvar "CLAYER" PL);
Если слоя PeregKirp нет, то он создается. Тип МЛИНИИ СТЕНАКИРПШТУК170 должен быть определен.
> VVA
Увы старый слой не возвращает (2005). При выборе слоя перед черчением чертит на текущем! Мой тоже с ошибочкой лучше так:
^C^C(setvar "CLAYER" "PeregKirp") _mline;_ST;СТЕНАКИРПШТУК170;j;z
> iv
Только что проверил в 2005. Все отрабатывает.
> VVA
Не возвращается к текущему слою если обрываешь линию Esc. Сначала вообще добавляет ^M;^M;.
После удаления их ручками чертит нужную линию на нужном слое! Эврика! После нажатия Enter/Space возвращается на старый слой!
Однако, к сожалению повторный Space вызывает загадочную функцию :( приходится снова жать кнопку :) а начиналось все довольно хорошо...
Где то встречал, ни как поиском не найду, как сделать макрос делающий текущим слой выбранного объекта:
(setvar "CLAYER" (getvar ???))
И желательно чтоб деактивировался выбранный объект :)
Где то встречал, ни как поиском не найду, как сделать макрос делающий текущим слой выбранного объекта:
Макрос давно написан ребятами из Автодеска:). Кнопочка справа от слоев. На всякий случай:
^C^C_ai_molc
Не возвращается к текущему слою если обрываешь линию Esc
Ну так это же макрос!!
Для обработки ECS нужна команда!
(defun C:MLSL ( / *error* clay lay ml_st ) (defun *ERROR*(msg)(princ msg)(if clay (setvar "CLAYER" clay))(princ)) (setq clay (getvar "CLAYER"))(vl-load-com) (while (not(snvalid (setq lay (getstring "\nСлой для мультилинии: ")))) (princ "\nНедопустимое имя слоя ")) (while (not (member (setq ml_st (getstring "\nИмя стиля мультилинии: ")) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 3 (car x))) (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))))) (princ "\nНет такого стиля ")) (command "CMDECHO" 0 "_-LAYER" "_M" lay "" "CMDECHO" 1 "_mline" "_ST" ml_st "_j" "_z") (while (> (getvar "CMDACTIVE") 0)(command pause)) (setvar "CLAYER" clay) (princ) )
Кнопка
^C^CMLSL;PeregKirp;СТЕНАКИРПШТУК170;
Команда должна быть загружена
Еще вариант команды с диалоговым окном
(defun C:MLSL1 ( / *error* clay lay ml_st ) (defun *ERROR*(msg)(princ msg)(if clay (setvar "CLAYER" clay))(princ)) (defun tablelist (s / d r)(while (setq d (tblnext s (null d))) (setq r (cons (cdr (assoc 2 d)) r)))) (defun mydcl ( zagl info-list / fl ret dcl_id)(vl-load-com) (if (null zagl)(setq zagl "Выбор")) (setq fl (vl-filename-mktemp "mip" nil ".dcl")) (setq ret (open fl "w")) (mapcar '(lambda(x)(write-line x ret)) (list "mip_msg : dialog { " (strcat "label=\"" zagl "\";") " :list_box {" "alignment=top ;" "width=51 ;" (if (> (length info-list) 26) "height= 26 ;" (strcat "height= " (itoa(+ 3 (length info-list))) ";")) "is_tab_stop = false ;" "key = \"info\";}" "ok_cancel;}")) (setq ret (close ret)) (if (setq dcl_id (load_dialog fl)) (if (new_dialog "mip_msg" dcl_id)(progn (start_list "info")(mapcar 'add_list info-list) (end_list)(set_tile "info" "0")(setq ret (car info-list)) (action_tile "info" "(setq ret (nth (atoi $value) info-list))") (action_tile "cancel" "(progn(setq ret nil)(done_dialog 0))") (action_tile "accept" "(done_dialog 1)") (start_dialog))))(unload_dialog dcl_id) ret) (setq clay (getvar "CLAYER"))(vl-load-com) (if (and (setq lay (mydcl "Выбор слоя" (tablelist "LAYER"))) (setq ml_st (mydcl "Выбор стиля мультилинии" (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 3 (car x))) (dictsearch (namedobjdict) "ACAD_MLINESTYLE")))))) (progn (command "CMDECHO" 0 "_-LAYER" "_M" lay "" "CMDECHO" 1 "_mline" "_ST" ml_st "_j" "_z") (while (> (getvar "CMDACTIVE") 0)(command pause)) (setvar "CLAYER" clay)))(princ))
> VVA
MLSL просто супер! Даже слой включает! :)
MLSL1 кхм :) при моем количестве слоев, которые он ставит не по алфавиту! :) найти нужный слой почти невозможно!
> iv
Да, я тоже позже это заметил. Вариант с сортировкой
(defun C:MLSL1 ( / *error* clay lay ml_st ) (defun *ERROR*(msg)(princ msg)(if clay (setvar "CLAYER" clay))(princ)) (defun tablelist (s / d r)(while (setq d (tblnext s (null d))) (setq r (cons (cdr (assoc 2 d)) r)))) (defun mydcl ( zagl info-list / fl ret dcl_id)(vl-load-com) (if (null zagl)(setq zagl "Выбор")) (setq fl (vl-filename-mktemp "mip" nil ".dcl")) (setq ret (open fl "w")) (mapcar '(lambda(x)(write-line x ret)) (list "mip_msg : dialog { " (strcat "label=\"" zagl "\";") " :list_box {" "alignment=top ;" "width=51 ;" (if (> (length info-list) 26) "height= 26 ;" (strcat "height= " (itoa(+ 3 (length info-list))) ";")) "is_tab_stop = false ;" "key = \"info\";}" "ok_cancel;}")) (setq ret (close ret)) (if (setq dcl_id (load_dialog fl)) (if (new_dialog "mip_msg" dcl_id)(progn (start_list "info")(mapcar 'add_list info-list) (end_list)(set_tile "info" "0")(setq ret (car info-list)) (action_tile "info" "(setq ret (nth (atoi $value) info-list))") (action_tile "cancel" "(progn(setq ret nil)(done_dialog 0))") (action_tile "accept" "(done_dialog 1)") (start_dialog))))(unload_dialog dcl_id) ret) (setq clay (getvar "CLAYER"))(vl-load-com) (if (and (setq lay (mydcl "Выбор слоя" (acad_strlsort (tablelist "LAYER")))) (setq ml_st (mydcl "Выбор стиля мультилинии" (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 3 (car x))) (dictsearch (namedobjdict) "ACAD_MLINESTYLE")))))) (progn (command "CMDECHO" 0 "_-LAYER" "_M" lay "" "CMDECHO" 1 "_mline" "_ST" ml_st "_j" "_z") (while (> (getvar "CMDACTIVE") 0)(command pause)) (setvar "CLAYER" clay)))(princ))
> VVA
Фунциклирует.
Последние дни много чертил и прочувствовал удобство MLSL, когда линии и слои переключаются часто!
А как сделать, чтобы функция включалась повторно с последними опциями? (пробелом)?
Только делать кучу фунций для каждого случая?
> VVA
Уже не нужно переделывать MLSL! :)
Открыл для себя Tool palettes 07! В его функциях можно устанавливать слой для МЛинии!
Поэтому остается только:
_mline;_ST;СТЕНАКИРПШТУК170;j;z
Прекрасно редактируется и повторяется!
> iv
Только учти, что описание слоя (afaik) лежит "внутри" toolpalette, так что на ура его поменять вряд ли получится.
> Кулик Алексей aka kpblc
Где менять? Чего бояца?? :)
У меня на всех чертежах каждый тип МЛ лежит на определенном слое! Пока опасностей не увидел.
> iv
Я тоже не встречал, пока не потребовалось поменять настройки слоя :)
Суть в том, что в 2005 (как в 2007, не знаю, но не думаю, что система капитально поменялась) настройки слоя, на который "кидается" примитив, прописываются напрямую в свойствах инструмента (насколько я понял) - достаточно открыть файл atc и поковыряться в нем. Теперь представь себе ситуацию, что у тебя на 2 разных toolpalette лежит 2 разных инструмента, каждый из которых мультилинию кидает на слой "123". Только в одном инструменте цвет слоя красный, а во втором - синий. Каким будет результат? Я не знаю ;)
> Кулик Алексей aka kpblc
Мдяя... Тут одна тулпалетс еле шевелится, а ты говоришь две :). В настройках инструмента есть установка цвета. Так вроде цвет переключается...
Не, ты меня не путай, я и сам запутаюсь успешнее некуда :) Я говорю не про цвет примитива, а про цвет слоя, на который оно кидается.
Как бы то ни было, я склоняюсь больше к полностью программному решению - тогда о подобных мелочах уже задумываться не приходится :)
> Кулик Алексей aka kpblc
Действительно!
Выяснилось что ф-я MLSL, предложенная VVA маст хэв! Но из тулпалетс! При запуске оттуда повторение (пробелом) работает! а с кнопки - нет :(.
Её основное достоинство - включение нужного слоя, если выключен, опять же слой устанавливается и возвращается в функции а не в тулпалетс.
> VVA
По прежнему постоянно пользуюсь MLSL, но есть одна загадка, причина которой неясна...
Когда жмешь повторение ф-и (Enter/пробел) ИНОГДА изменяется зум и текущее расположение курсора. Выберешь новое место, приблизишь как нужно, жмешь пробел, чтоб рисовать, а он раз далит удадит всё приходится снова приближать и прзиционировать.
Делает не всегда. Никакой закономерности не выяснено... :(
Сразу включать повторение, потом приблизить не всегда получается - голова так не работает :)
С ф-ей _mline такого не бывает.
> iv
Мыслей никаких. В команде никаких команд с ZOOM'ом не использеутся.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB, при поддержке Informer Technologies, Inc