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

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

Проверить наличие в текущем чертеже слоя

Ответ
Поиск в этой теме
Непрочитано 11.11.2011, 04:49 #1
Проверить наличие в текущем чертеже слоя
Kirill_Ja
 
Мурманск
Регистрация: 28.07.2008
Сообщений: 208

Есть примитивы, которые надо создать в определенном слое, но далеко не факт, что этот слой уже существует в чертеже. Скажите, а как проверить его наличие?
Просмотров: 7204
 
Непрочитано 11.11.2011, 07:32
1 | #2
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


tblobjname используй на проверку слоя, вроде бы так. вроде через entmake слой создается автоматом, т.е. если будешь примитив создавать и в в списке укажешь слой необходимый тебе для данного примитива, то он создасца автоматически
mamuk вне форума  
 
Автор темы   Непрочитано 11.11.2011, 08:17
#3
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Спасибо.
Kirill_Ja вне форума  
 
Непрочитано 11.11.2011, 09:55
#4
VVA

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


Цитата:
Сообщение от mamuk Посмотреть сообщение
вроде через entmake слой создается автоматом, т.е. если будешь примитив создавать и в в списке укажешь слой необходимый тебе для данного примитива, то он создасца автоматически
Или если делать entmod, то так же слой создается автоматически
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.11.2011, 11:28
#5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
Есть примитивы, которые надо создать в определенном слое, но далеко не факт, что этот слой уже существует в чертеже. Скажите, а как проверить его наличие?
Ничего можешь не проверять, Автокад сам проверяет
Просто пиши
Код:
[Выделить все]
 (command "_.-layer" "_N" "Мой слой" "")
и смотри отклик в командной строке
Олег (jr.) вне форума  
 
Непрочитано 11.11.2011, 12:36
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Код:
[Выделить все]
 (defun LayerNameList ( / res)
  (setq res '())
  (vlax-for lyr (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)))
    (setq res (cons (vla-get-Name lyr) res))
  )
  (cond (res (acad_strlsort res)))
)
(vl-load-com)
(or (member "LyrName" (LayerNameList)))
gomer вне форума  
 
Непрочитано 11.11.2011, 12:49
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


То Gomer - 2 строка лишняя.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.11.2011, 13:14
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
2 строка лишняя.
это в воспитательных целях
gomer вне форума  
 
Непрочитано 10.04.2015, 08:35
#9
Stoner


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


Цитата:
Ничего можешь не проверять, Автокад сам проверяет
Просто пиши
Код:
(command "_.-layer" "_N" "Мой слой" "")
и смотри отклик в командной строке
А возможно средствами Diesel проверить существования слоя?
Или всё же задать команду, чтобы каждый раз создавался слой?
Stoner вне форума  
 
Непрочитано 10.04.2015, 14:33
1 | #10
VVA

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


Цитата:
Сообщение от Stoner Посмотреть сообщение
Или всё же задать команду, чтобы каждый раз создавался слой?
Используй вместо опции _New опцию _Make. В этом случае если слоя нет, то он будет создан. Если - есть, то установлен текущим.
Цитата:
(command "_.-layer" "_M" "Мой слой" "")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 11.04.2015, 01:56
#11
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Ох как же давно это было))))
Вызывает приступы теплоты и ощущение ламповости)
Решил так:
Код:
[Выделить все]
 (defun tg_set_layer (n_layer /)
;;;Óñòàíàâëèâàåò ñëîé n_layer òåêóùèì
(if (not (tblsearch "layer" n_layer))
  	(entmakex (list
		(cons 0 "LAYER")
		(cons 2 n_layer)
		    )) )
(vl-cmdf "_.LAYER" "_m" n_layer)
(vl-cmdf)
);end defun
Спасибо за ответ.
__________________
Мне не нужно сделать за меня. Если я что-то ищу, то пути решения.
Kirill_Ja вне форума  
 
Непрочитано 11.04.2015, 08:21
#12
Stoner


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


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
Ох как же давно это было))))
Вызывает приступы теплоты и ощущение ламповости)
Решил так:
Код:
[Выделить все]
 (defun tg_set_layer (n_layer /)
;;;Óñòàíàâëèâàåò ñëîé n_layer òåêóùèì
(if (not (tblsearch "layer" n_layer))
  	(entmakex (list
		(cons 0 "LAYER")
		(cons 2 n_layer)
		    )) )
(vl-cmdf "_.LAYER" "_m" n_layer)
(vl-cmdf)
);end defun
Спасибо за ответ.
Спасибо, то что нужно.
Stoner вне форума  
 
Непрочитано 11.04.2015, 10:29
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
Решил так:
То есть я так понимаю setvar - это для ботанов, а тру лисперы не ищут легких путей?
gomer вне форума  
 
Непрочитано 11.04.2015, 15:42
1 | #14
Alan

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Используй вместо опции _New опцию _Make. В этом случае если слоя нет, то он будет создан. Если - есть, то установлен текущим.
Единственное замечание. Слой не должен быть заморожен/выключен.
Цитата:
Команда: (command "_.-layer" "_M" "Мой слой" "")
_.-layer
Текущий слой: "0"
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать]: _M
Введите имя нового слоя (этот слой станет текущим) <0>: Мой слой
Слой "Мой слой" заморожен. Не может стать текущим до размораживания.
; ошибка: Функция отменена
Цитата:
Сообщение от gomer Посмотреть сообщение
То есть я так понимаю setvar - это для ботанов
К этому замечанию тоже относится
Цитата:
Команда: (setvar "clayer" "Мой слой")
; ошибка: Настройка переменной AutoCAD отвергнута: "clayer" "Мой слой"
ИМХО. Правильнее всё таки заниматься созданием/деланием текущим слоя в ЛИСП-тексте, где и учесть этот, ну и некоторые другие нюансы.
Цитата:
Сообщение от Stoner Посмотреть сообщение
А возможно средствами Diesel проверить существования слоя?
Я увидел это попозжее... С Diesel (наверное тут LT) конечно ЛИСП не пройдёт.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 11.04.2015 в 15:52.
Alan вне форума  
 
Непрочитано 12.04.2015, 10:08
#15
Stoner


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


Не LT, но походу придётся lisp серьёзно изучать.
Stoner вне форума  
 
Непрочитано 14.04.2015, 12:00
1 | #16
Alan

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


Цитата:
Сообщение от Stoner Посмотреть сообщение
но походу придётся lisp серьёзно изучать
Есть известная программа makelayer от Lee Mac
Код:
[Выделить все]
 ;;; (MakeLayer  "Cen"         6           "CENTER"          0.18          nil )
;;;	     ;    Name        Colour        Linetype        Lineweight        Plot?
(defun makelayer (name colour linetype lineweight willplot par_lock)
...
  ;; © Lee Mac 2010
Мне она подошла, но не совсем понравилась, я там помнится добавлял анализ отрицательных значений lineweight
и объединил с анализом вкл/выкл, блок/разбл, заморожен/разморожен.
ИМХО. Программа установки текущим какого-либо слоя, должна включать:
1.анализ наличия
2.если нет создать с необходимыми параметрами
PPS. Так как я непрофессиональный программист свой текст не привожу, такие программы есть также у kpblc"a да и в ruCAD
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проверить наличие в текущем чертеже слоя

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Покупка подержанной иномарки Dinar^^ Разное 83 19.10.2011 14:11
Почему не проходит теплорасчет? Suom Конструкции зданий и сооружений 15 10.08.2011 17:22
AUDIT / проверить Ddjo Справочник команд 1 14.07.2008 16:04
Отслеживание ТАБЛИЦ на чертеже [программно] TwoZero Программирование 7 07.05.2008 10:52