Тема: Тип мультилинии для слоя

Можно ли как-то привязать к слою стиль мультилинии?
Т.е. чтоб при рисовании мультилинии на данном слое автоматически выбирался заданный стиль МЛ.

Re: Тип мультилинии для слоя

Нет

Re: Тип мультилинии для слоя

Можно. Реактором :)

Re: Тип мультилинии для слоя

Думаю, что и палитре инструментов можно создать подобный инструмент. И даже не думаю, а вот только что создал. Сначала в рисунке создал новый слой "МЛИНИЯ". Потом создал новый стиль для мультилинии с именем "МЛИНИЯ". После этого сделал новый инструмент в палитре, в свойствах которого указал слой "МЛИНИЯ", а в командной строке записал вот такой макрос:

^C^C_MLINE;_ST;МЛИНИЯ;\(setvar "CMLSTYLE" "STANDARD");

Re: Тип мультилинии для слоя

Преднолагал вопрос о том, что при создании НОВОГО стиля как то указать ему слой (ну как есть там ТИП линий и их цвет).
В конце концов на другом компе связи опять не будет.

Re: Тип мультилинии для слоя

> Atol
А что в действительности нужно? Нужно, чтобы на определенном слое рисовалась мультилиния определенного стиля или наоборот, нужно, чтобы мультилиния определенного стиля рисовалась бы на определенном слое. Так у меня это выполняется. Точно так же можно создать инструмент, проставляющий размеры на слое, скажем, "Размеры". Ну, а на другом компе много чего может не быть. Вот у меня есть куча программ, ускоряющих работу в AutoCAD'е, делающих эту работу приятнее, программ, сделанных мной или взятых на этом форуме. А у моих коллег этого нет или почти нет. Они и не чешутся, ну и Бог с ними. А палитры в конце концов можно экспортировать и импортировать.
А вообще-то, об этом пусть задумаются еще раз те, кто сомневается - нужно ли переходить с AutoCAD 2002 на AutoCAD 2006.

Re: Тип мультилинии для слоя

А мне как раз желательно, что бы линия определенного типа, в моем случае например СТЕНАКИРПШТУК170 с опциями рисовалась на определенном (нетекущем! Например "PeregKirp")? Чтобы слой активировался/деактивировался. Методом приведенным выше получилось вот что:
^C^C_mline;_ST;СТЕНАКИРПШТУК170;j;z;\(setvar "CLAYER" "PeregKirp")
работает, но  не возвращает текущий LAYER
Если простым методом достигнуть невозможно, сложных конструкций для данного частного случая изготавливать не нужно. :) Переключу ручками :) :)

Re: Тип мультилинии для слоя

> 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 должен быть определен.

Re: Тип мультилинии для слоя

> VVA
Увы старый слой не возвращает (2005). При выборе слоя перед черчением чертит на текущем! Мой тоже с ошибочкой лучше так:

^C^C(setvar "CLAYER" "PeregKirp")
_mline;_ST;СТЕНАКИРПШТУК170;j;z

Re: Тип мультилинии для слоя

> iv
Только что проверил в 2005. Все отрабатывает.

Re: Тип мультилинии для слоя

> VVA
Не возвращается к текущему слою если обрываешь линию Esc. Сначала вообще добавляет ^M;^M;.
После удаления их ручками чертит нужную линию на нужном слое! Эврика! После нажатия Enter/Space возвращается на старый слой!
Однако, к сожалению повторный Space вызывает загадочную функцию :( приходится снова жать кнопку :) а начиналось все довольно хорошо...
Где то встречал, ни как поиском не найду, как сделать макрос делающий текущим слой выбранного объекта:
(setvar "CLAYER" (getvar ???))
И желательно чтоб деактивировался выбранный объект :)

Re: Тип мультилинии для слоя

iv пишет:

Где то встречал, ни как поиском не найду, как сделать макрос делающий текущим слой выбранного объекта:

Макрос давно написан ребятами из Автодеска:). Кнопочка справа от слоев. На всякий случай:

^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;

Команда должна быть загружена

Re: Тип мультилинии для слоя

Еще вариант команды с диалоговым окном

(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))

Re: Тип мультилинии для слоя

> VVA
MLSL просто супер! Даже слой включает! :)
MLSL1 кхм :) при моем количестве слоев, которые он ставит не по алфавиту! :) найти нужный слой почти невозможно!

Re: Тип мультилинии для слоя

> 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))

Re: Тип мультилинии для слоя

> VVA
Фунциклирует.
Последние дни много чертил и прочувствовал удобство MLSL, когда линии и слои переключаются часто!
А как сделать, чтобы функция включалась повторно с последними опциями? (пробелом)?
Только делать кучу фунций для каждого случая?

Re: Тип мультилинии для слоя

> VVA
Уже не нужно переделывать MLSL! :)
Открыл для себя Tool palettes 07! В его функциях можно устанавливать слой для МЛинии!
Поэтому остается только:
_mline;_ST;СТЕНАКИРПШТУК170;j;z
Прекрасно редактируется и повторяется!

Re: Тип мультилинии для слоя

> iv
Только учти, что описание слоя (afaik) лежит "внутри" toolpalette, так что на ура его поменять вряд ли получится.

Re: Тип мультилинии для слоя

> Кулик Алексей aka kpblc
Где менять? Чего бояца?? :)
У меня на всех чертежах каждый тип МЛ лежит на определенном слое! Пока опасностей не увидел.

Re: Тип мультилинии для слоя

> iv
Я тоже не встречал, пока не потребовалось поменять настройки слоя :)
Суть в том, что в 2005 (как в 2007, не знаю, но не думаю, что система капитально поменялась) настройки слоя, на который "кидается" примитив, прописываются напрямую в свойствах инструмента (насколько я понял) - достаточно открыть файл atc и поковыряться в нем. Теперь представь себе ситуацию, что у тебя на 2 разных toolpalette лежит 2 разных инструмента, каждый из которых мультилинию кидает на слой "123". Только в одном инструменте цвет слоя красный, а во втором - синий. Каким будет результат? Я не знаю ;)

Re: Тип мультилинии для слоя

> Кулик Алексей aka kpblc
Мдяя... Тут одна тулпалетс еле шевелится, а ты говоришь две :). В настройках инструмента есть установка цвета. Так вроде цвет переключается...

Re: Тип мультилинии для слоя

Не, ты меня не путай, я и сам запутаюсь успешнее некуда :) Я говорю не про цвет примитива, а про цвет слоя, на который оно кидается.
Как бы то ни было, я склоняюсь больше к полностью программному решению - тогда о подобных мелочах уже задумываться не приходится :)

Re: Тип мультилинии для слоя

> Кулик Алексей aka kpblc
Действительно!
Выяснилось что ф-я MLSL, предложенная VVA маст хэв!  Но из тулпалетс! При запуске оттуда повторение (пробелом) работает! а с кнопки - нет :(.
Её основное достоинство - включение нужного слоя, если выключен, опять же слой устанавливается и возвращается в функции а не в тулпалетс.

Re: Тип мультилинии для слоя

> VVA
По прежнему постоянно пользуюсь MLSL, но есть одна загадка, причина которой неясна...
Когда жмешь повторение ф-и (Enter/пробел) ИНОГДА изменяется зум и текущее расположение курсора. Выберешь новое место, приблизишь как нужно, жмешь пробел, чтоб рисовать, а он раз далит удадит всё приходится снова приближать и прзиционировать.
Делает не всегда. Никакой закономерности не выяснено... :(
Сразу включать повторение, потом приблизить не всегда получается - голова так не работает :)
С ф-ей _mline такого не бывает.

Re: Тип мультилинии для слоя

> iv
Мыслей никаких. В команде никаких команд с ZOOM'ом не использеутся.