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

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

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

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

Имеется очень удобная для работы со сборками в 3D-модели команда "LAYOFF", которая последовательно "гасит" слои при выборе и указании расположенных на них обьектов.
Но у меня на сборках с перекрывающими друг друга деталями она работает так, что сначала "гасит" нижние (скрытые) детали,и только затем видимые верхние.
Можно ли настроить команду так, чтобы "гасить" сначала слои с теми обьектами на которые указываешь- "верхними" видимыми деталями?
Просмотров: 6761
 
Непрочитано 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,404


> 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,404


Да, и вот еще. Туда жа:
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,404


Имелась в виду одна из опций команды _.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,404


Да ну?! Вот уж чего не знал, так этого... А вот если _.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,404


Чего-чего? Что оно должно делать?
Такое, например?
Код:
[Выделить все]
(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,404


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

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


Вот я слой заморозил пупочкой из экспрессов, нарисовал чего- нибудь, а обратно включить кнопочки нету...
Аshаs-ка вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Работа команды "LAYOFF"