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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Работа команды "LAYOFF"

Работа команды "LAYOFF"

Ответ
Поиск в этой теме
Непрочитано 21.06.2006, 12:49 #1
Работа команды "LAYOFF"
balk
 
С-Петербург
Регистрация: 21.06.2006
Сообщений: 51

Имеется очень удобная для работы со сборками в 3D-модели команда "LAYOFF", которая последовательно "гасит" слои при выборе и указании расположенных на них обьектов.
Но у меня на сборках с перекрывающими друг друга деталями она работает так, что сначала "гасит" нижние (скрытые) детали,и только затем видимые верхние.
Можно ли настроить команду так, чтобы "гасить" сначала слои с теми обьектами на которые указываешь- "верхними" видимыми деталями?
Просмотров: 6765
 
Непрочитано 21.06.2006, 13:56
#2
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


balk
при выборе наложеных др. на др. объектов ползуйтесь выбором с зажатой кнопой ctrl. Тогда появится возможность выбрать нужный объект. Попробуйте.
Это действует не только в layoff, но как стандартная опция выбора объектов.
__________________
apel.fas
Apelsinov вне форума  
 
Автор темы   Непрочитано 21.06.2006, 15:16
#3
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


[при выборе наложеных др. на др. объектов ползуйтесь выбором с зажатой кнопой ctrl. Тогда появится возможность выбрать нужный объект. Попробуйте.
Попробовал. Все отлично работает. Спасибо за решение.
Обратил внимание на то, что перебор (выделение) обьектов идет от скрытых деталей к верхним (наружным). Наоборот, наверное,
не переопределить?
Вероятно последовательность выбора обьектов определяется очередностью их создания в файле?
balk вне форума  
 
Непрочитано 21.06.2006, 15:41
#4
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


balk
Цитата:
Обратил внимание на то, что перебор (выделение) обьектов идет от скрытых деталей к верхним (наружным). Наоборот, наверное,
не переопределить?
Вероятно последовательность выбора обьектов определяется очередностью их создания в файле?
Наверное, не переопределить. Я не знаю. И вообще леший его знает, как там определяется последовательность...я не исследовал. Почитайте хелп, авось там оно есть. Но думаю что многово оно Вам не даст.

Рекомендую с таким стилем работы посмотреть еще layiso, layon, Layuniso. Может поможет.
А т.ж. лиспы для скрытия объектов (их на форуме есть, если поискать).
Кстати давно есть идея написать на основе этих лиспов аналог layiso, т.е. изолирование не слоя а объекта, в 3d должно пригодится, просто мне самому оно не надо вроде...
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 21.06.2006, 16:28
#5
Кулик Алексей aka kpblc
Moderator

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


> Apelsinov : http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22342xe
Это?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.06.2006, 16:33
#6
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


>Рекомендую с таким стилем работы посмотреть еще layiso, layon, Layuniso.

Командами "layiso" и "layon" активно пользуюсь. а вот команда "layuniso" для меня новая. Спасибо.
balk вне форума  
 
Непрочитано 21.06.2006, 17:19
#7
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Цитата:
Сообщение от kpblc
Оно
Вот пусть balk и пользует, думаю, ему понравится. :wink:
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 21.06.2006, 17:38
#8
Кулик Алексей aka kpblc
Moderator

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


Да, и вот еще. Туда жа:
http://uniip.ru/lib/download/files/lisp/pl_hide_all.zip
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.06.2006, 23:44
#9
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


А Send to back? По-моему это сработало бы. Отослать на задний план второстепенные объекты.
__________________
С уважением,
Влад Гринзайд.
Grinzaid вне форума  
 
Автор темы   Непрочитано 22.06.2006, 10:47
#10
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


>Apelsinov
>kpblc
Спасибо за ссылки на lisp-программы. Я, правда, в lisp-е не силен, но буду разбираться.
>Grinzaid (А Send to back? По-моему это сработало бы. Отослать на задний план второстепенные объекты.)
Извините, что такое "Send to back" и как этим пользоваться?
balk вне форума  
 
Автор темы   Непрочитано 26.06.2006, 12:45
#11
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


Есть здесь кто живой?
Люди! Ау!
Что такое "Send to back" и как с ним бороться?!
balk вне форума  
 
Непрочитано 26.06.2006, 12:54
#12
Кулик Алексей aka kpblc
Moderator

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


Имелась в виду одна из опций команды _.draworder (как в русской версии звучит, я не помню) - перемещение объектов "под" указанные, или "совсем назад" - по аналогии с Corel Draw.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.06.2006, 15:14
#13
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


Не пойдет.
"Draworder"- это команда редактирования растровых изображений.
Будем жать кнопку "ctrl".
balk вне форума  
 
Непрочитано 26.06.2006, 15:23
#14
Кулик Алексей aka kpblc
Moderator

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


Да ну?! Вот уж чего не знал, так этого... А вот если _.draworder применить к штриховке, которую пересекает несколько полилиний, к примеру?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2006, 16:51
#15
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,986


Цитата:
Сообщение от balk
>Рекомендую с таким стилем работы посмотреть еще layiso, layon, Layuniso.

Командами "layiso" и "layon" активно пользуюсь. а вот команда "layuniso" для меня новая. Спасибо.
ЭХ. ВОТ КТО БЫ "LAYUNON" НАПИСАЛ БЫ...
Аshаs-ка вне форума  
 
Непрочитано 26.06.2006, 17:12
#16
Кулик Алексей aka kpblc
Moderator

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


Чего-чего? Что оно должно делать?
Такое, например?
Код:
[Выделить все]
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))

 ;|=============================================================================
*    Заморозка слоя по объекту. В случае попытки заморозить текущий слой
* выдается соответствующее предупреждение и ничего не меняется.
*    Параметры вызова:
*	нет
*    Примеры вызова:
(kpblc-layer-freeze-by-ent)
=============================================================================|;
(defun kpblc-layer-freeze-by-ent (/ ent)
  (vla-startundomark *kpblc-activedoc*)
  (while (setq ent (kpblc-get-entsel "Укажите объект на замораживаемом слое"))
    (_kpblc-layer-oper (cdr (assoc 8 (entget (car ent)))) 4)
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun

;|=============================================================================
*    Блокировка слоя по объекту.
*    Параметры вызова:
*	нет
*    Примеры вызова:
(kpblc-layer-lock-by-ent)
=============================================================================|;
(defun kpblc-layer-lock-by-ent (/ ent)
  (vla-startundomark *kpblc-activedoc*)
  (while (setq ent (kpblc-get-entsel "Укажите объект блокируемого слоя"))
    (_kpblc-layer-oper (cdr (assoc 8 (entget (car ent)))) 16)
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun

;|=============================================================================
*    Выключение слоя объекта
*    Параметры вызова:
*	нет
*    Примеры вызова:
(kpblc-layer-off-by-ent)
=============================================================================|;
(defun kpblc-layer-off-by-ent (/ ent)
  (vla-startundomark *kpblc-activedoc*)
  (while (setq ent (kpblc-get-entsel "Укажите объект отключаемого слоя"))
    (_kpblc-layer-oper (cdr (assoc 8 (entget (car ent)))) 1)
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun

;|=============================================================================
*    Разблокировка слоя по объекту.
*    Параметры вызова:
*	нет
*    Примеры вызова:
(kpblc-layer-unlock-by-ent)
=============================================================================|;
(defun kpblc-layer-unlock-by-ent (/ ent)
  (vla-startundomark *kpblc-activedoc*)
  (while (setq ent (kpblc-get-entsel "Укажите объект разблокируемого слоя"))
    (_kpblc-layer-oper (cdr (assoc 8 (entget (car ent)))) 32)
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun

;|=============================================================================
*    Операции над слоями объекта
*    Параметры вызова:
*	ent	ссылка на примитив (vla-указатель). Возможна ссылка на слой по
*		имени
*	bit	выполняемая операция (сумма бит):
*		0	включить, разморозить и разблокировать слой
*		1	выключить слой
*		2	включить слой
*		4	заморозить слой
*		8	разморозить слой
*		16	заблокировать слой
*		32	разблокировать слой
*    Активный слой не замораживается и не размораживается. Проверка битов идет
* по возрастанию. Т.е. если задать bit = 3, то слой сначала выключится, а потом
* тут же включится.
*    Примеры вызова:
(_kpblc-layer-oper (vlax-ename->vla-object (car (entsel))) 1)
=============================================================================|;
(defun _kpblc-layer-oper (ent bit / layer loc:get-bit)
  ;; Локальные функции
  (defun loc:get-bit (bit def)
    (/= (logand bit def) 0)
    ) ;_ end of defun
  ;; Конец локальных функций
  (if (not bit)
    (setq bit 0)
    ) ;_ end of if
  (if ent
    (progn
      (cond
	((= (type ent) 'str)
	 (setq layer (vla-item (vla-get-layers *kpblc-activedoc*) ent))
	 )
	(t
	 (setq ent   (_kpblc-ent-to-vla ent)
	       layer (vla-item (vla-get-layers *kpblc-activedoc*)
			       (vla-get-layer ent)
			       ) ;_ end of vla-item
	       ) ;_ end of setq
	 ) ;_ end of cond
	) ;_ end of cond
      (if (= bit 0)
	(progn
	  (_kpblc-ent-modify-autoregen (vlax-vla-object->ename layer) 70 0 t)
	  (vla-put-layeron layer :vlax-true)
	  ) ;_ end of progn
	) ;_ end of if
      (if (loc:get-bit bit 1)
	(vla-put-layeron layer :vlax-false)
	) ;_ end of if
      (if (loc:get-bit bit 2)
	(vla-put-layeron layer :vlax-true)
	) ;_ end of if
      (if (loc:get-bit bit 4)
	(if (not (equal layer (vla-get-activelayer *kpblc-activedoc*)))
	  (vla-put-freeze layer :vlax-true)
	  ) ;_ end of if
	) ;_ end of if
      (if (loc:get-bit bit 8)
	(if (not (equal layer (vla-get-activelayer *kpblc-activedoc*)))
	  (vla-put-freeze layer :vlax-false)
	  ) ;_ end of if
	) ;_ end of if
      (if (loc:get-bit bit 16)
	(vla-put-lock layer :vlax-true)
	) ;_ end of if
      (if (loc:get-bit bit 32)
	(vla-put-lock layer :vlax-false)
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  (vla-regen *kpblc-activedoc* acallviewports)
  ) ;_ end of defun
Функции преобразования были здесь
В принципе, играя битом передачи данных, можно что угодно со слоями делать (но только не внутри ВЭ! Там все по своему идет...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.06.2006, 17:57
#17
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


>kpblc
>Да ну?! Вот уж чего не знал, так этого... А вот если _.draworder применить к штриховке, которую пересекает несколько полилиний, к примеру?

Неточно, конечно. Сузил возможности.
("С помощью команды DRAWORDER можно изменить последовательность вывода на экран обьектов, включая растровые картинки и обьекты OLE..."- Э.Финкельштейн, ACAD-2004, цитата).
Но кнопку ctrl жать будем.
balk вне форума  
 
Непрочитано 26.06.2006, 18:41
#18
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,986


" Заморозка слоя по объекту. В случае попытки заморозить текущий слой
* выдается соответствующее предупреждение и ничего не меняется. "

Ой. Можно я по- простому? Вот Layiso понятно что делает, а Layuniso-обратно отменяет. А вот ежели Freeze Object сделать, так за отменой в Layer manager приходится соваться. Вот кнопочку отмены бы, как для Layiso бы... просим... а ежели оно с пошаговым запоминанием и с пошаговым восстановлением замороженных слоев... размечтался, конечно...
Аshаs-ка вне форума  
 
Непрочитано 27.06.2006, 09:13
#19
Кулик Алексей aka kpblc
Moderator

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


Так а для включения и разморозки слоев "выбор по объекту" уже не сработает (что естественно). Вариант - либо включать все слои, либо вываливать checklist, в котором и выбирать имена включаемых слоев. Тебе чего хочется?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.06.2006, 12:16
#20
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,986


Вот я слой заморозил пупочкой из экспрессов, нарисовал чего- нибудь, а обратно включить кнопочки нету...
Аshаs-ка вне форума  
 
Автор темы   Непрочитано 29.06.2006, 10:12
#21
balk


 
Регистрация: 21.06.2006
С-Петербург
Сообщений: 51


Цитата:
Сообщение от Аshаs-ка
Вот я слой заморозил пупочкой из экспрессов, нарисовал чего- нибудь, а обратно включить кнопочки нету...
Для заморозки слоя по обьекту существует команда "LAYFRZ" (layer freeze), для разморозки всех ранее замороженных слоев существует команда "LAYTHW" (thaw all layers).
Набираем в командной строке.
balk вне форума  
 
Непрочитано 29.06.2006, 10:41
#22
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Аshаs-ка
Вот я слой заморозил пупочкой из экспрессов, нарисовал чего- нибудь, а обратно включить кнопочки нету...
Включать все? Или по одному? Если по одному, то я б попробовал сделать примерно так (только логика, кода пока нет): список отключенных слоев хранится в глобальном списке (при выходе из када список будет обнуляться, так что такое развитие ситуации надо предусматривать) либо словаре (для замороженных слоев аналогично). При разморозке одного слоя выполняется включение либо разморозка слоя и замена данных в списке либо словаре.
Времени нет совершенно, к сожалению, так что реализацию (если надо) оставлю на других профессионалов
Для одновременной разморозки и разблокирования слоев можно сделать примерно так:
Код:
[Выделить все]
(defun c:layonthaw (/ adoc)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (vlax-for item (vla-get-layers adoc)
    (if	(or (= (vla-get-freeze item) :vlax-false)
	    (= (vla-get-layeron item) :vlax-true)
	    ) ;_ end of or
      (progn
	(vla-put-layeron item :vlax-true)
	(vl-catch-all-apply 'vla-put-freeze (list item :vlax-false))
	) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Работоспособность не проверял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.06.2006, 11:03
#23
MIP

инженер
 
Регистрация: 13.12.2004
Минск
Сообщений: 496


Пользуюсь для работы со слоями этим, хотя не лишено изъянов.
[ATTACH]1151564630.zip[/ATTACH]
MIP вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Работа команды "LAYOFF"