Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

Как запретить использование слоя 0.

Ответ
Поиск в этой теме
Непрочитано 23.03.2016, 10:44 #1
Как запретить использование слоя 0.
shartal
 
Регистрация: 12.08.2009
Сообщений: 447

Слой 0 используем только для вставки ссылок (для этого срабатывает реактор) или объектов внутри блоков. . Как запретить его использование для обычных примитивов? Или запретить его делать текущим (но чтобы реактор для ссылок мог его делать текущим на время). Ну или на худой конец предупреждение появлялось о том, что текущий слой 0?
Просмотров: 4027
 
Непрочитано 23.03.2016, 11:03
#2
Кулик Алексей aka kpblc
Moderator

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


Как вариант - отслеживать системную переменную clayer и обрабатывать ее изменения
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2016, 11:04
#3
spinal cord


 
Регистрация: 29.03.2015
Сообщений: 1


Не для того он придуман чтобы запрещать его использование
spinal cord вне форума  
 
Непрочитано 23.03.2016, 11:22
#4
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Слой 0 используем только для вставки ссылок
Я для этого создаю и использую слой с именем, например, Xref
Цитата:
Сообщение от spinal cord Посмотреть сообщение
Не для того он придуман чтобы запрещать его использование
Еще и Defpoints не надо трогать
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 23.03.2016, 11:35
#5
shartal


 
Регистрация: 12.08.2009
Сообщений: 447


Об этом я и так догадывался. Но как это делать?
shartal вне форума  
 
Непрочитано 23.03.2016, 11:38
#6
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от shartal Посмотреть сообщение
Об этом я и так догадывался.
Об чем?
Цитата:
Сообщение от shartal Посмотреть сообщение
Но как это делать?
Что именно? Раз понятие реактора знакомо, то вперед - реактор на изменение системной переменной.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2016, 11:56
#7
Profan


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


Цитата:
Сообщение от shartal Посмотреть сообщение
Как запретить использование слоя 0.
Запретить AutoCAD.
Profan вне форума  
 
Непрочитано 23.03.2016, 12:52
#8
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Зачем жестко запрещать? Мало ли для чего могут быть нужны примитивы на слое 0 - для создания блока из них, например. Но для того, чтобы в законченных чертежах не было мусора, предлагаю повесить на событие (реактор) сохранения функцию проверки, чтобы после сохранения выдавалось сообщение типа:
Цитата:
Обнаружены обычные примитивы в слое 0:
Линия - 4 шт.;
Мтекст - 2 шт.;
Круг - 6 шт.
<Далее список кар, которые обрушатся на голову нарушителя режима слоев>
kp+ вне форума  
 
Непрочитано 23.03.2016, 13:07
#9
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Вы уж определитесь четко, чего хотите - запретить использование слоя "0", только выводить предупреждение или еще какой-то вариант и от этого уже можно будет отталкиваться. Реализуемо все, главное - четко понимать, чего хочется. Прямо вот досконально, что должна делать программа:
- Если запускаем чертеж, а там есть объекты на слое "0"?
- Если там же, текущим установлен слой "0"?
- А если слой "0" - единственный в чертеже?
- А когда пользователь устанавливает текущим слой "0"?
- А если вне зависимости от текущего слоя, объект попадает на слой "0" (например, пользователь с инструментальной палитры вставляет объект в чертеж, у объекта настроен слой вставки "0" или получены объекты на слое "0" после взрыва блока)?
- ...
Проработайте все эти ситуации и алгоритмы действий при них и пишите программу на любом понравившемся языке - lisp, C#, VB...
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 23.03.2016, 17:42
#10
shartal


 
Регистрация: 12.08.2009
Сообщений: 447


Если человек хотя бы однажды имел дело с внешними ссылками, он знает, что управлять объектами на слое 0 невозможно. Слой 0 - один и не дублируется при вставке ссылок. Для создания объектов в блоках, их можно положить в 0. Ситуацию с единственным слоем в чертеже не рассматриваем, потому что в нашем случае этого не может быть- в шаблоне всегда есть объекты в других слоях. Все палитры настроены- в 0 ничего не кладется.
В общем оптимально, чтобы при установке слоя 0 текущим, возвращался текущим слоем предыдущий.
Но как к этому подойти не имею понятия.
shartal вне форума  
 
Непрочитано 23.03.2016, 19:01
#11
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от shartal Посмотреть сообщение
Но как к этому подойти не имею понятия.
Тогда ищите того, кто сможет. Вариант: http://forum.dwg.ru/forumdisplay.php?f=33
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 23.03.2016, 19:51
#12
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от shartal Посмотреть сообщение
Об этом я и так догадывался. Но как это делать?
Обсуждалось 100500 раз
Код:
[Выделить все]
 (defun XYZ (	   /	xyz_clayer
;;;	    локальные переменные
	      )
;;;  -- запомним переменные --------------------------
  (setq xyz_clayer (getvar "clayer"))
;;; назначим текущий слой
  (setvar "clayer" "123")
;;;  слой "123" должен существовать, не быть замороженным или выключенным - эта тема обсуждалась

;;;  делаем действия и разные построения

;;;  возвращаем слой на место
  (setvar "clayer" xyz_clayer)
  )
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 23.03.2016, 22:16
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от shartal Посмотреть сообщение
Но как это делать?
Как-то так
Код:
[Выделить все]
(vl-load-com)
(defun C:VlrOFF ()
 (setq *vlr-sys* nil) 
  (vlr-remove-all :VLR-SysVar-Reactor)
  (princ "\nРеактор sysvar отключен")(princ)
  )
(defun C:VlrOn ( )
(if *vlr-sys* 
  (progn 
    (setq *vlr-sys* nil) 
    (vlr-remove-all :VLR-SysVar-Reactor)))
   (setq *vlr-sys* (VLR-SysVar-Reactor
          (list '("Rname" "SysChange"))
          '(
            (:VLR-sysVarWillChange . sysvarwillchange)
            (:VLR-sysVarChanged . sysvarchange)
            )
          )
         )
  (princ "\nРеактор sysvar включен")(princ)
  )
(defun sysvarwillchange ( reactor event)
  (princ "\n*SysvarName Will change* =")(princ event)(princ)
  )

(defun sysvarchange (reactor event )
  (if (and (VLR-added-p reactor);_активизирован реактор
           (= (cadr(assoc "Rname" (vlr-data reactor))) "SysChange")
           (= (car event) "CLAYER")
           )
    (progn
(princ "  *SysvarName Changed* =")(princ event)(princ)
      ) 
    )
  )
(C:VlrOn)
Если менять слой в командной строке (команды _-layer _clayer) и в диспетчере слоев, то видно, что реактор срабатывает. Если в панели "Слои" - то нет (проверял в Автокад 2013)
Можно повесить ректор на :vlr-commandWillStart и проверять слой перед началом команды, но как узнать какой слой был до этого?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как запретить использование слоя 0.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цвет блока по слою, при смене слоя мог бы меняться цвет. gizmo_zx AutoCAD 2 22.10.2015 14:46
где регламентируется толщина снимаемого почвенно-растительного слоя? какой СНиП? dfufyjdf Технология и организация строительства 18 02.06.2012 14:31
перенос всех линий слоя в блоках в другой слой Positron Программирование 6 10.02.2012 15:59
Почему не проходит теплорасчет? Suom Конструкции зданий и сооружений 15 10.08.2011 17:22