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

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

Маскировка

Закрытая тема
Поиск в этой теме
Непрочитано 25.04.2007, 21:27 #1
Маскировка
RTD
 
Регистрация: 29.07.2006
Сообщений: 38

Люди, привет!

Подскажите, как определить, включен ли показ границ маскировки _wipeout или нет?

системной переменной для этого нет, как то странно.
Просмотров: 55954
 
Непрочитано 26.04.2007, 08:13
#2
Кулик Алексей aka kpblc
Moderator

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


Поскольку вопрос в разделе "AutoCAD", то ответом, наверное, будет такое: никак. Назначить показ/скрытие можно, а определить - только визуально
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.04.2007, 08:43
#3
Log_in

Инженер-электрик
 
Регистрация: 16.01.2007
Москва
Сообщений: 19


А может кто подсказать. Есть динамический блок с маскировкой. Блок этот вставлен в инструментальную палитру. Если этот блок вытащить в какой-нибудь рисунок с инструментальной палитры, то маскировка всегда выходит на передний план( соответственно скрывает весь блок). Исправляю только редактированием блока, в редакторе задаю порядок следования. Причем если этот же блок вставить в рисунок через копирование, то все нормально... как бы избавиться от этого?
Log_in вне форума  
 
Непрочитано 26.04.2007, 09:05
1 | #4
Krieger

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


Переделай сам блок в том файле где он собсно и храниться. Причем переделать надо не при помощи draworder. Необходимо соблюдать последовательность построения. Wipeout должен быть нарисован самым первым, чтоб он оказался внизу. Т.е. можно выделить все в блоке кроме Wipeout, скопировать (не переместить) в строну, удалить старое и поставить на место копию. Копия будет создана позже, а значит будет сверху. Такая фишка будет сохранятся при вставке блока.
Krieger вне форума  
 
Непрочитано 15.01.2008, 15:02
#5
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Поскольку вопрос в разделе "AutoCAD", то ответом, наверное, будет такое: никак. Назначить показ/скрытие можно, а определить - только визуально
А если бы этот вопрос был задан в разделе "Программирование"? Может всё же можно как-нибудь определить?
Makswell вне форума  
 
Непрочитано 15.01.2008, 16:53
#6
Krieger

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


Как то так, наверное:
Код:
[Выделить все]
(cdr (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")))
Если возвращает:
1 - рамка включена,
0 - рамка выключена,
nil - еще не создавалась такая переменная и скорее всего wipeout еще не делали в чертеже.
Krieger вне форума  
 
Непрочитано 15.01.2008, 17:24
#7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Krieger, спасибо!
Оказалось всё так просто - в одну строку!
Makswell вне форума  
 
Непрочитано 16.01.2008, 05:52
#8
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Интересно, а так можно? Если считать, что до первого <Откл>, - она всегда <Вкл>.
Команда:
МАСКИРОВКА Первая точка или [Контуры/Полилиния] <Полилиния>: К
Выберите режим [Вкл/Откл] <Откл>:
__________________
*...И Случай, бог изобретатель. *

Последний раз редактировалось skif58, 16.01.2008 в 06:04.
skif58 вне форума  
 
Непрочитано 16.01.2008, 08:41
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Если кому интересно, макрос на кнопку получился такой:
Цитата:
C^C(defun C:M-Command (/ temp) (setq temp (cdr (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")))) (if temp (if (= temp 0) (vl-cmdf "_.WIPEOUT" "_Frames" "_on") (vl-cmdf "_.WIPEOUT" "_Frames" "_off"))) (princ));M-Command;
Вроде всё работает без проблем.
Makswell вне форума  
 
Непрочитано 16.01.2008, 09:15
#10
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Я заметил такой момент. В какой бы последовательности не создавалось бы WIPEOUT в блоке - почему-то при изменении атрибута он всеравно помещается наверх закрывая тем самым весь блок. Ну и как с этим бороться?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 16.01.2008, 09:58
#11
Krieger

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


У меня не закрывает.
Krieger вне форума  
 
Непрочитано 17.01.2008, 13:45
#12
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Попутно возникла такая идея. Хорошо бы, чтобы состояние wipeout'ов отображалось в строке режимов. Здесь уже макросом не обойтись:
Код:
[Выделить все]
(defun C:wipeout_on-off (/ temp)
  (setq
    temp (cdr
	   (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))
	 )
  )
  (if temp
    (if	(= temp 0)
      (Progn
	(vl-cmdf "_.WIPEOUT" "_Frames" "_on")
	(setvar "USERS1" "ВКЛ")
      )
      (progn
	(vl-cmdf "_.WIPEOUT" "_Frames" "_off")
	(setvar "USERS1" "ВЫКЛ")
      )
    )
  )
  (princ)
)
Ну и установка MODEMACRO (можно прописать, например, в acaddoc.lsp)
Код:
[Выделить все]
(setvar "MODEMACRO" "Маскировка<$(getvar, USERS1)>")
Но мне, безусловно, не нравится, используется переменная USERS1. Может кто знает как реализовать это без применения системных переменных USERхх?
Makswell вне форума  
 
Непрочитано 17.01.2008, 15:56
#13
Krieger

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


Как вариант:
Код:
[Выделить все]
(defun C:wipeout_on-off    (/ wipeout_frame_key wipeout_frame_on pr)
  (setq    wipeout_frame_key
     (cdr (assoc 70
             (dictsearch
               (namedobjdict)
               "ACAD_WIPEOUT_VARS"
             )
          )
     )
  );;setq
  (cond    ((= 1 wipeout_frame_key)
     (progn
       (setq pr (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")
         pr (subst (cons 70 0) (assoc 70 pr) pr)
       )
       (entmod pr)
       (setq wipeout_frame_on "ВЫКЛ")
     )
    );;1
    ((= 0 wipeout_frame_key)
     (progn
       (setq pr (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")
         pr (subst (cons 70 1) (assoc 70 pr) pr)
       )
       (entmod pr)
       (setq wipeout_frame_on "ВКЛ")
     )
    );;2
    ((eq nil wipeout_frame_key)
     (setq wipeout_frame_on "Неуст.")
    );;3
  )
  (setvar "MODEMACRO" (strcat "Маскировка " wipeout_frame_on))
  (vl-cmdf "_regen")
  (princ)
)
;;end defun

Последний раз редактировалось Krieger, 18.01.2008 в 12:19. Причина: Подредактировал код
Krieger вне форума  
 
Непрочитано 18.01.2008, 09:59
#14
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Уважаемые Гуру, вы как-то не заметили мой вопрос выше и я теперь весь в сомнениях, - может быть я раньше много чего неправильно понимал и делал...
Я только о том, что в первых двух постах этой темы. Дальше для меня темный лес..., - от того сомнений еще больше...
Мне часто попадают чертежи, где что-то закрыто маскировкой, - горизонтали в вырезках...и.т.п. Чтобы понять есть ли маскировка, - я так и делал:
- Маскировка - (_WIPEOUT), правой из контекста - Контуры - и смотрел в комстроке или ДИНе, - что там пишет... Если стоит <Откл>: значит есть (или была) маскировка и ее контуры отключены.
Вопрос: всегда ли это действительно ТАК? В комстроке всегда отображается текущее состояние? Поскольку этой методой пользуюсь и в др.случаях... с той же THICKNESS и.т.п...
Проверил на _WIPEOUT строчкой от Krieger: (cdr (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))) , - вроде все совпадает. ???

Ну а визуально, чтобы быстро увидеть что замаскировано, - всегда жму любой др. визуальный стиль или 3DOrbit. Чтобы выделить, увидеть, двигать или удалять контуры маскировки, - Быстрый выбор Растра и правой...
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Непрочитано 18.01.2008, 10:14
#15
Krieger

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


skif58,
Я думал, что это ты ответил на первый пост. А так думаю что и так можно определять, вроде бы там всегда текущее значение записывается. Т.е. Крыс во втором постинге был не прав.
Код из поста #13 включает и выключает границы wipeout при этом записывает результат в статусную строку.
Krieger вне форума  
 
Непрочитано 18.01.2008, 10:32
#16
skif58

Наше дело труба
 
Регистрация: 19.11.2006
Томск_Комсомольск-на-Амуре
Сообщений: 1,736
<phrase 1= Отправить сообщение для skif58 с помощью Yahoo Отправить сообщение для skif58 с помощью Skype™


Спасибо Krieger!
Уже легче... Я после второго поста и запаниковал... , - потому и спросил...
__________________
*...И Случай, бог изобретатель. *
skif58 вне форума  
 
Непрочитано 18.01.2008, 11:51
#17
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


К посту 13 от Krieger.
Ещё раз спасибо. У меня просто с какой-то тормоз с MODEMACRO случился в мозгах. Был у меня такой стереотип, что определение MODEMACRO должно быть в acaddoc.lsp (или запускаться из acaddoc.lsp) и что в значении переменной должны присутствовать выражения DIESEL для динамического отслеживания и вывода значения в строку режимов. Но в принципе ничто не мешает переопределять значение в процессе работы (с оставлением в нём DIESEL-выражений).
Вообще-то в acaddoc.lsp у меня было прописано просто:
Код:
[Выделить все]
(setvar "MODEMACRO" "Dimassoc<$(getvar, Dimassoc)> Маскировка<$(getvar, USERS1)> Command<$(getvar, cmdnames)>")
Сейчас в acaddoc.lsp я прописал:
Код:
[Выделить все]
(setq
  wipeout_frame_on
   (cond ((= 1
	     (cdr
	       (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))
	     )
	  )
	  "ВКЛ"
	 )
	 ((= 0
	     (cdr
	       (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))
	     )
	  )
	  "ВЫКЛ"
	 )
	 ((eq nil
	      (cdr
		(assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))
	      )
	  )
	  "Неуст"
	 )
	 (T "")
   )
)
(setvar	"MODEMACRO"
	(strcat	"Dimassoc<$(getvar, Dimassoc)> Маскировка<"
		wipeout_frame_on
		"> Command<$(getvar, cmdnames)>"
	)
)
Это для начального определения MODEMACRO. А процессе работы использую как раз прогу из 13-го поста.
Только убрал в ней определение локальной переменной temp и сделал wipeout_frame_key и pr локальными. Ну и такое же значение MODEMACRO как определено в acaddoc.lsp. Только вот сомневаюсь так ли нужно (vl-cmdf "_regen"). Это я так понял введено из-за того, что если находишься на листе, то при изменении видимости границ маскировки не во всех ВЭ это отображается корректно. Спасает как раз _.regen или лучше _.regenall. Так то всё правильно, но тормозит. В общем я эту строку убрал.
PS Ещё понравилось вкл/выкл маскировки через (entmod). Класс!
Makswell вне форума  
 
Непрочитано 18.01.2008, 12:16
#18
Krieger

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


Цитата:
Только убрал в ней определение локальной переменной temp и сделал wipeout_frame_key и pr локальными.
Блин, забыл про объяву переменных. Ща подправлю... Переменную wipeout_frame_on тоже можно сделать локальной, мы же за ней не следим через дизель.

При (vl-cmdf "_.WIPEOUT" "_Frames" "_on"), кстати, регенерация тоже выполняется.
А через (entmod) не выполняется, т.е. если ты смотришь на границу wipeout и выключаешь её через entmod, то она никуда не исчезает, пока не сделаешь регенерацию. Так что нужна она или нет решать пользователю.

Последний раз редактировалось Krieger, 18.01.2008 в 12:21.
Krieger вне форума  
 
Непрочитано 18.01.2008, 13:02
#19
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Цитата:
Сообщение от Krieger Посмотреть сообщение
При (vl-cmdf "_.WIPEOUT" "_Frames" "_on"), кстати, регенерация тоже выполняется.
А через (entmod) не выполняется, т.е. если ты смотришь на границу wipeout и выключаешь её через entmod, то она никуда не исчезает, пока не сделаешь регенерацию. Так что нужна она или нет решать пользователю.
Мда... Что-то я не внимательно протестил. Нужна она, нужна!
Makswell вне форума  
 
Непрочитано 16.02.2009, 17:46
#20
Bdod


 
Регистрация: 30.05.2006
Сообщений: 91
<phrase 1=


Странная вещь происходит при печати динамического блока с вложенной туда маскировкой, при изменении изображения (например поворот тела с маскировкой) все происходит как надо, отправляешь на печать то что скрыто не печатает, но!!! стоит у нас плоттер Xerox 510dp так вот он не хочет печатать как надо, а скрывает при распечатке тока то место куда первоначально была вставлена маскировка, до поворота к примеру, как такое вылечить?
Bdod вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Маскировка