Попасть в слой. - Страница 5
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Попасть в слой.

Попасть в слой.

Ответ
Поиск в этой теме
Непрочитано 22.02.2006, 05:38
Попасть в слой.
Vova
 
Engineer
 
New-York
Регистрация: 05.09.2003
Сообщений: 10,288

Все хотят, чтобы размер встал в слой РАЗМЕРЫ (условно) не переключаясь в него
Как это сделать?
Просмотров: 38443
 
Автор темы   Непрочитано 04.03.2006, 04:35
#81
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Вариант Krieger (№73) работает превосходно. Хотел было подитожить, но остались несколько вопросов.
1. В выписке из HELP, приведенной Profan-ом читаем последние строки пункта 5:
Цитата:
В поле "Макрос 2 (отпускание клавиши)" введите макрос, который будет
выполнен, если отпустить клавишу временной замены. Если значение не определено, то при отпускании клавиш приложение возвращается в предыдущее состояние (до выполнения временной замены)
. По английски звучит также. Я понимаю так, что второй макрос как-бы в нашем случае не нужен. Но увы, без него не работает. Почему?
2. Если в Options, System включить Beep on Error... то при входе и выходе из режима временного действия прижатых клавишей автокад бипает, если макрос на лиспе, и молчит, если лиспа в нем нет.
3 Осталась нерешенной моя загадка (№72 п4). А к ней добавка - Вариант AY на DIESEL (№71). Там есть нечто, очень важное. (сам макрос я проверить на работе не успел, но углядел нечто неожиданное) Что это?
Vova вне форума  
 
Непрочитано 04.03.2006, 20:11
#82
Aragorn

Продажа навыков и умений
 
Регистрация: 20.11.2004
Сибирь
Сообщений: 2,501


Не в продолжение а в начало темы, так как я клавишник

defun c:d1 () (dimchange "ARKO_TICK") (command "dimlinear" pause pause pause) (command "chprop" (entlast) "" "layer" "000" "" ) (princ))
(defun c:d5 () (dimchange "ARKO_TICK-50") (command "dimlinear" pause pause pause) (command "chprop" (entlast) "" "layer" "000" "" ) (princ))
(defun c:d2 () (dimchange "ARKO_TICK-20") (command "dimlinear" pause pause pause) (command "chprop" (entlast) "" "layer" "000" "" ) (princ))
(defun c:dd () (dimchange "ARKO_TICK-10") (command "dimlinear" pause pause pause) (command "chprop" (entlast) "" "layer" "000" "" ) (princ))
(defun c:d55 () (dimchange "ARKO_TICK-5") (command "dimlinear" pause pause pause) (command "chprop" (entlast) "" "layer" "000" "" ) (princ))

В автозагрузке у меня находится файл, в котором уже есть все блоки и стили. Разные размерные стили у меня разным цветом (при помощи этого удается избежать частой ошибки неправильного размера в узлах разного масштаба). Может кому подойдет...
Aragorn вне форума  
 
Непрочитано 06.03.2006, 10:04
#83
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Krieger

А как сделать так чтобы в этом макросе слой был не жеско прописан, а к "Слой1" прибавлялось просто "_Размеры"?
X-DeViL вне форума  
 
Непрочитано 06.03.2006, 11:14
#84
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


X-DeViL
Не знаю, у меню не получилось. Дело в том, что опять таки надо создавть этот слой (что в прозрачном режиме не работает), отчего я собсно и ушел. Но в варианте из поста №80, можно:

Код:
[Выделить все]
(setq lay (getvar "clayer") Nlay (strcat lay "_размеры")) (vl-cmdf "_-layer" "_m" Nlay "") (setvar "clayer" lay);(setq lay nil);_change;_L;;_Properties;_LAyer;!Nlay;;(setq Nlay nil)
Krieger вне форума  
 
Автор темы   Непрочитано 06.03.2006, 13:30
#85
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Vova
4. Есть еще одно необычное для автокада ограничение для назначения горячих клавиш. Но я оставляю это как загадку. Кто возится с этим делом, должен обязательно наткнуться и задaться вопросом-почему комбинации не создаются?
Назначение клавишам нужно задавать только при нижнем регистре!
Цитата:
Сообщение от Vova
....А к ней добавка - Вариант AY на DIESEL (№71). Там есть нечто, очень важное. (сам макрос я проверить на работе не успел, но углядел нечто неожиданное) Что это?
Это кавычка, делающая работоспособным макрос без ^C^C. При этом макрос может быть и без лиспа.
Ай-Яй-Яй. Никаких предположений
Vova вне форума  
 
Непрочитано 06.03.2006, 14:20
#86
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Krieger
давай исходить из предположения что слой уже существует?

не надо создавать ничего

я просто не знаю как реализовать такое выражение clayer=clayer+"_Размеры"
X-DeViL вне форума  
 
Непрочитано 07.03.2006, 05:56
#87
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от X-DeViL
Krieger
давай исходить из предположения что слой уже существует?

не надо создавать ничего

я просто не знаю как реализовать такое выражение clayer=clayer+"_Размеры"
Тогда так:
Нажатие:
Код:
[Выделить все]
(setq lay (getvar "clayer") Nlay (strcat lay "_размеры"));(setvar "clayer" Nlay);
Отпускание:
Код:
[Выделить все]
(setvar "clayer" lay);(setq lay nil Nlay nil);
Krieger вне форума  
 
Непрочитано 07.03.2006, 08:51
#88
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Я не пойму, зачем вам прозрачный режим? Этот режим был бы хорош без клавиш временной замены, а в данном-то случае - ведь не будете же вы действительно первую выносную линию делать на одном слое, а вторую на другом слое? Или это чисто теоретический интерес? Vova сетует, что предложений мало, а я вот увидел, что этот способ для меня мало пригоден и мало интересен, и перестал дальше разбираться. По-моему, не для этого эта возможность создавалась, а только для тех случаев, когда не нарушается логика выполнения команды.
Profan вне форума  
 
Непрочитано 07.03.2006, 10:44
#89
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Profan
Я не пойму, зачем вам прозрачный режим?
Все же прозрачный лучше чем непрозрачный с ^C^C. :wink:
Цитата:
Этот режим был бы хорош без клавиш временной замены, а в данном-то случае - ведь не будете же вы действительно первую выносную линию делать на одном слое, а вторую на другом слое?
См. пост №80, 81.
Да это все как посмотреть, если размеров предстоит ставить много то лучше конечно переключить слой на необходимый. А если один-два, то почему бы и нет? Еще более интересна идея X-DeViL (пост 87), чертим стены в текущем слоем "стены", надо поставить размеры - зажимаем клавиши и ставим размеры в слое "стены_размеры" и т.д. с любым объектом.
Цитата:
По-моему, не для этого эта возможность создавалась, а только для тех случаев, когда не нарушается логика выполнения команды.
А вчем нарушение логики-то?
Цитата:
Или это чисто теоретический интерес?
Для меня скорее спортивный. Может и пригодится, когда перейду на 2006-й. :wink:
Krieger вне форума  
 
Непрочитано 07.03.2006, 11:23
#90
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Krieger

[sm166]

ШАМАН! то что надо теперь буду "как великий нехочуха"
X-DeViL вне форума  
 
Непрочитано 07.03.2006, 15:47
#91
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
давай исходить из предположения что слой уже существует?
не надо создавать ничего
я просто не знаю как реализовать такое выражение clayer=clayer+"_Размеры"
У меня получилось создавать слой, устанавливать, если надо, цвет, вес, тип линии и т.д. Правда будет лисп. Необходимо сохранить как lsp файл и обеспечить подгрузку в рисунок, хотябы через _appload -> автозагрузка.
Сам лисп.
Код:
[Выделить все]
;|==============================================
* Ф-ция установки текущим слоя
* Нажатие temporary override keys
* список параметров layer-list см ниже
* Примеры:
  (dwgru-layer-set '(("name" . "Test")("color" . 1)("lw" . 50)))
* создать если нет и установить текущим слой Test цветом 1 (красный) весом линии 0.5
  (dwgru-layer-set '(("suff" . "_Текст")))
* создать если нет и установить текущим слой Текущий + суффикс _Текст

==============================================|;
(defun dwgru-layer-set (layer-list)
 (if (and (cdr(assoc "suff" layer-list))   ;_Есть суффикс
       (wcmatch (getvar "CLAYER") (strcat "*" (cdr(assoc "suff" layer-list)))))
       ;_Суффикс текущего слоя и переданного совпадают
       ;_суффикс к слою не добавляем
       (progn
        (setq layer-list (vl-remove (assoc "name" layer-list) layer-list))
        (setq layer-list (vl-remove (assoc "suff" layer-list) layer-list))
        (setq layer-list (append (list(cons "name" (getvar "clayer"))) layer-list))
	))
     (vla-put-activelayer
       (vla-get-activedocument (vlax-get-acad-object))
       (_dwgru-layer-create layer-list)))


;|==============================================
*  Ф-ция восстановления предыдущего слоя
*  Отпускание temporary override keys
=============================================|;
(defun dwgru-layer-restore ( )
(if *vlr-settings*
       (progn
	 (vla-put-activelayer
	   (vla-get-activedocument (vlax-get-acad-object))
	   (cdr (assoc "layer" *vlr-settings*))
	   ) ;_ end of vla-put-ActiveLayer
	 (mapcar 'setvar
		 '("cecolor" "celweight" "celtype")
		 (list (cdr (assoc "color" *vlr-settings*))
		       (cdr (assoc "lw" *vlr-settings*))
		       (cdr (assoc "lt" *vlr-settings*))
		       ) ;_ end of list
		 ) ;_ end of mapcar
	 (setq *vlr-settings* nil)
	 )))


;|==============================================
*   На основе ф-ции _kpblc-layer-create
*   
*   Добавлен новый  параметр  suff - суффикс слоя, если он есть, то имя слоя получаестся путем
*   добавления к имени существующего слоя суффикса suff
*   Создание слоя с указанными параметрами.
*   Параметры вызова:
*   layer-list   список параметров слоя вида:
   '(("name" . "TestLayer")   ; имя слоя. может быть пропущено, если указан suff
     ("color" . 3)         ; номер цвета. nil -> 7
     ("lw" . 50)         ; вес линии слоя. nil -> 25
                            ;значение должно быть как в списке * 100
     ("lt" . "hidden")      ; тип линии слоя. nil -> Continuous
               ; Если описания типа линии в acadiso.lin
               ; нет, обязательно указывать следующий
               ; параметр
   ("ltfile" . "c:\\cad\\ltypes\\lt.lin")   ; полный путь к файлу с описанием
               ; типа линии. Если файл находится в путях
               ; поддержки, путь можно не указывать
   ("plot" . "y")         ; Печатать ("y") или нет ("n") слой.
               ; nil -> "y"
   ("suff" . "_Размеры")  ;_Добавляемый суффикс с текущему слою. Если задан, поле "name" игнорируется            
   )
*    Возвращает vla-указатель на созданный слой. Если слой существует, его
* настройки приводятся в соответствие с переданным списком.
*    Слой размораживается, разблокируется и включается. Не активируется.
==============================================|;

(defun _dwgru-layer-create (layer-list / vla_layer)
       (setq *vlr-settings*
	    (list (cons	"layer"
			(vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
			) ;_ end of cons
		  (cons "color" (getvar "cecolor"))
		  (cons "lw" (getvar "celweight"))
		  (cons "lt" (getvar "celtype"))
		  ) ;_ end of list
	   ) ;_ end of setq

  ;;;Если есть suff добавляем в начало списка,
  ;;;чтобы assoc нашел раньше
  (if (cdr(assoc "suff" layer-list))
    (progn
     (setq layer-list (vl-remove (assoc "name" layer-list) layer-list))
     (setq layer-list (append (list(cons "name" (strcat (getvar "clayer") (cdr(assoc "suff" layer-list))))) layer-list))
    )
  )
  (setq	vla_layer
	 (vla-add
	   (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
	   (cdr (assoc "name" layer-list))
	   ) ;_ end of vla-add
	) ;_ end of setq
  (vla-put-color
    vla_layer
    (if	(cdr (assoc "color" layer-list))
      (cdr (assoc "color" layer-list))
      7
      ) ;_ end of if
    ) ;_ end of vla-put-color
  (vla-put-lineweight
    vla_layer
    (if	(cdr (assoc "lw" layer-list))
      (cdr (assoc "lw" layer-list))
      aclnwt025
      ) ;_ end of if
    ) ;_ end of vla-put-lineweight
  (if (and (cdr (assoc "lt" layer-list))
	   (_kpblc-linetype-load
	     (cdr (assoc "lt" layer-list))
	     (cdr (assoc "ltfile" layer-list))
	     ) ;_ end of _kpblc-linetype-load
	   ) ;_ end of and
    (vla-put-linetype vla_layer (cdr (assoc "lt" layer-list)))
    (vla-put-linetype vla_layer "Continuous")
    ) ;_ end of if
  (vla-put-plottable
    vla_layer
    (if	(= (cdr (assoc "plot" layer-list)) "n")
      :vlax-false
      :vlax-true
      ) ;_ end of if
    ) ;_ end of vla-put-Plottable
  (vla-put-lock vla_layer :vlax-false)
  (vla-put-layeron vla_layer :vlax-true)
  (if (not (equal (vla-get-activelayer (vla-get-activedocument (vlax-get-acad-object)))
		  vla_layer
		  ) ;_ end of equal
	   ) ;_ end of not
    (vla-put-freeze vla_layer :vlax-false)
    ) ;_ end of if
  vla_layer
  ) ;_ end of defun
Макросы
Нажатие
Код:
[Выделить все]
 (dwgru-layer-set '(("suff" . "_Размеры")("color" . 5)))
Отпуск
Код:
[Выделить все]
 (dwgru-layer-restore)
Примеры:
(dwgru-layer-set '(("suff" . "_Размеры")("color" . 5))) - добавить суффикс _Размеры к текущему слою (если его нет), установить цвет 5 и сделать слой текущим
(dwgru-layer-set '(("name" . "Test")("color" . 1)("lw" . 80))) Создать если нет слой Test цветом 1 и весом 0.8

Анализируется имя текущего слоя и если у него такой же суффикс, то слой не создается, а остается текущий. Таким образом не будут получаться слои Стена_Размеры, Стена_Размеры_Размеры и т.д.

PS. Почему-то изменяется имя ф-ции (vla-put-0000) то код брать отсюда
[ATTACH]1141736834.rar[/ATTACH]

Последний раз редактировалось VVA, 19.09.2015 в 20:34.
VVA вне форума  
 
Непрочитано 07.03.2006, 15:58
#92
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Можно в принципе и еще немного добавить - сделать так, чтобы этот лисп прописался в автозагрузку. Если такое надо, то примерный код я показал (с объяснениями) вот здесь. Мне, если честно, просто лень повторять...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.03.2006, 17:18
#93
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Krieger
Я вот вижу кое-какой смысл в клавишах замены при выполнении одной команды. Но ведь у вас получается так: выполняется одна команда, потом другая (рисую стены, потом ставлю размеры). Вот было интереснее: рисую стены, зажимаю клавиши, слой заменился, команда заменилась, ставлю размеры, отпускаю клавиши, слой вернулся, команда вернулась, продолжаю рисовать стены. Это, конечно чепуха, но на AutoLisp'e можно провернуть. Да все написанные тут вещи можно реализовать на AutoLisp'е. Ну, будет дополнительная кнопка, зато зажимать ничего не надо. А если во время зажима ошибся и надо Esc нажать? А уж с помощью палитры инструментов и кнопок не надо, да и Esc классно срабатывает, команда отменяется, но слой-таки возвращается на исходный, и никакого обработчика ошибок и переназначения переменных не надо, как в лиспе. А ведь надо еще придумать и удобное сочетание клавиш. А у многих сочетания клавиш забиты по самое некуда и даже Shift+1, которое я предложил для пробы, тоже бывает занято.
Profan вне форума  
 
Непрочитано 07.03.2006, 17:39
#94
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


А сослаться на lisp хранящийся в CUI можно?
X-DeViL вне форума  
 
Непрочитано 07.03.2006, 17:55
#95
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот политику Vova я понимаю. Он последовательно и целеустремленно пропагандирует изучение новых возможностей AutoCAD'а, находит тонкости, заставляет других шевелить мозгами. Это очень хорошее устремление. Он задает вопросы и ждет, как другие пользователи ответят на них. Я так думаю, что с временным переключением слоя все более или менее понятно, только лучше, все-таки, создать нужный слой заранее. Но вот проблема: мне надо бы не только проставить размеры стен, т.е. иметь слой "Стены_размеры", но и проставить цепочку размеров между перегородками, т.е. по логике вещей иметь или создать слой "Перегородки_размеры". Создавать другое сочетание клавиш для временной замены? И т.п. Вряд-ли, ерунда получается. Лучше я буду аккуратно работать со слоями, потому что мне еще нужен слой "Осевые_размеры", но он у меня автоматически создается при установке рабочих параметров рисунка.
Так вот, для того, чтобы в полной мене оценить возможность использования клавиш временной замены мне и хочется тоже задать вопрос: а в каких еще случаях, кроме замены слоя, можно применить клавиши временной замены? Опять же, по логике вещей можно временно заменить тип линии. Но если он задан по слою, то и не надо. Так же с другими изменяемыми свойствами. Так что же, вся эта матата годится только для одной операции - изменения текущего слоя? Мелковато, IMHO, чтобы извращаться.
Profan вне форума  
 
Непрочитано 07.03.2006, 18:00
#96
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для X-DeViL
А разве в CUI ХРАНЯТСЯ лиспы? Они могут, конечно, присуствовать в виде макросов меню, но ведь не для самостоятельной загрузки. Вот в acad.mnl они могут находится для загрузки.
Profan вне форума  
 
Непрочитано 07.03.2006, 18:51
#97
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А кто-нибудь пробовал во время отрисовки полилинии при нажатых клавишах Shift+1 воспользоваться контекстным меню по правой кнопке мыши? Вот уж хрень бесподобная.
Profan вне форума  
 
Непрочитано 07.03.2006, 20:06
#98
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А хрень эта проявляется в том, что сочетание клавиш "Shift+правая кнопка мыши" вызывает контекстное меню временного переопределения объектных привязок. А мне надо начать полилинию с дуги или задать ширину полилинии после указания начальной точки. И что, бросать мышь и правой рукой вводить с клавиатуры опцию, а потом еще, допустим, надо ввести ширину, равную 0.5. Тут забудешь, что надо давить на клавиши еще и левой рукой. Придираюсь, наверное.
Profan вне форума  
 
Автор темы   Непрочитано 08.03.2006, 05:31
#99
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Отвечая на №95-Profan
Именно для изучения неизвестных возможностей АС я и поднял эту тему. Несколько выдвинувшись в изучении некоторых разделов и в силу дурацкого склада характера хочу подтянуть до этого уровня других. Для этого-же создаются темы-загадки. Иногда бьют, и больно. Старожилы помнят, как в теме про наложение V-ports один известный в мире автокада спец походя ударил, не пожелав извиниться. Призываю всех к исследованию автокада. Это безумно интересно. Именно на исследовани повышается уровень владения Кадом.
Vova вне форума  
 
Автор темы   Непрочитано 08.03.2006, 06:05
#100
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Система временных клавиш работает не всегда четко. По протоколу F2 не очень понятно, что происходит (в отличие от работы с кнопочными макросами). Иногда сбоит при отпускании клавиш. В ком строке вдруг появляется буква той клавиши, которая в паре с Shift. Много непоняток. Видимо, это начало эксперимента Autodesk-a. Вроде как Tool Palettes. Младенец в 2004 и муж в 2006. Profan поначалу сомневался в нужности такой примочки. Вспоминаю старый спор-когда лучше образмеривать, когда все нарисовано, или по ходу рисования. Большинство (не подавляющее) ставит размеры по ходу. То есть работают (условно) по-очереди в 2-х слоях-то в рисуночном, то в размерном. И не только это касается размеров. Электрики могут рисовать параллельно две системы-нормальное питание и резервное. Технологи могут рисовать существующее оборудование и новое, и так далее. То есть, если текущим установлен слой, в котором объектов больше, то, прижав пару клавиш и получив временно текущим другой слой, удобно в нем нарисовать что-то мелкое. Я уже неск. дней рисую 3 параллельные системы при помощи временных клавиш
Таком образом, Autodesk в 2005 сделал подарок кнопочникам, позволив из Tool Palettes забирать команды рисования с нужными параметрами (например, слой). А в 2006 похожий, хотя и не совершенный подарок получили клавишники. Это Temporary Override keys. Паритет сохранился. . Уверен, это направление будет развиваться. Наш мозговой штурм удался. X-DeViL подал идею. Profan дал первый работающий код. Krieger убрал ^C^C, которое мешало. AY предложил кавычку, заменяющую ^C^C а Vova нашел, что клавиши назначаются только при низшем регистре. Все это маленькие открытия, не указанные в HELP. Будут ли еще предложения по мозговой атаке:?:
ЗЫ. AY, как ты раскопал про кавычку?
Vova вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Попасть в слой.

Реклама i