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

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

Удаление слоев по списку

Ответ
Поиск в этой теме
Непрочитано 13.11.2008, 10:37 #1
Удаление слоев по списку
+Alex+
 
Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96

Здравствуйте!
При работе программы создаются слои. Список создаваемых слоев известен.
Проблема заключается в том, что в текущий чертеж уже может содержать слои совпадающие по названию со слоями из списка.

При возникновении исключительной ситуации требуется откатить состояние чертежа до начала работы программы.

Как организовать следующее:

Если есть такой слой -> Если он может быть удален - > Удалить

(if (tblsearch "LAYER" lay)...?
Просмотров: 3279
 
Непрочитано 13.11.2008, 10:43
#2
T-Yoke

Артиллерист - вертолётчик. Дипломированный инженер-механик. Technologist
 
Регистрация: 29.11.2004
Где-то около Москвы
Сообщений: 16,528
Отправить сообщение для T-Yoke с помощью Skype™


Цитата:
Сообщение от +Alex+ Посмотреть сообщение
Здравствуйте!
При работе программы создаются слои. Список создаваемых слоев известен. Проблема заключается в том, что в текущий чертеж уже может содержать слои совпадающие по названию со слоями из списка.
При возникновении исключительной ситуации требуется откатить состояние чертежа до начала работы программы.
Как организовать следующее:
Если есть такой слой -> Если он может быть удален - > Удалить
(if (tblsearch "LAYER" lay)...?
Если наименования слоев заранее известны, можно в шаблоне чертежа сгруппировать эти слои в одну группу, и когда они будут не нужны удалить все слои в этой группе.
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I
T-Yoke вне форума  
 
Автор темы   Непрочитано 13.11.2008, 10:50
#3
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Группировка слоев нежелательна.
Необходима проверка на возможность удаления.
+Alex+ вне форума  
 
Непрочитано 13.11.2008, 11:16
#4
Makswell

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


Код:
[Выделить все]
(if (tblsearch "LAYER" lay)
  (progn
    (setq vla_lay (vlax-ename->vla-object (tblobjname "LAYER" lay)))
    (if	(= (vla-get-Used vla_lay) :vlax-false)
      (vla-Delete vla_lay)
    )
  )
)
Makswell вне форума  
 
Автор темы   Непрочитано 13.11.2008, 11:22
#5
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Makswell
Спасибо.
Попробую.
+Alex+ вне форума  
 
Автор темы   Непрочитано 13.11.2008, 13:52
#6
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Со слоями получилось.
Еще возник один вопрос. Как проверить на возможность удаления не слоя а блока? Имя блока также известно.
+Alex+ вне форума  
 
Автор темы   Непрочитано 14.11.2008, 14:56
#7
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Печально, но выяснилось, что vla-get-used выдает правильный результат (:vlax-true) только если проверяемый слой текущий. В остальных случаях всегда :vlax-false!
Вопрос остался открытым.
+Alex+ вне форума  
 
Непрочитано 14.11.2008, 15:26
#8
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от +Alex+ Посмотреть сообщение
Печально, но выяснилось, что vla-get-used выдает правильный результат (:vlax-true) только если проверяемый слой текущий. В остальных случаях всегда :vlax-false!
Вопрос остался открытым.
Тебе обязательно проверять, можно ли удалить этот слой?
Код:
[Выделить все]
(if (tblsearch "LAYER" lay)
 (not (vl-catch-all-error-p
       (vl-catch-all-apply
        (function vla-Delete)
        (list (vlax-ename->vla-object (tblobjname "LAYER" lay)))
       ) ;_  vl-catch-all-apply
      ) ;_  vl-catch-all-error-p
 ) ;_  not
)
Елпанов Евгений вне форума  
 
Непрочитано 14.11.2008, 15:36
#9
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


кстати, если просто нужно удалить все слои, которые удаляются:
Код:
[Выделить все]
(vlax-map-collection
 (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))
 (function (lambda (a) (vl-catch-all-apply (function vla-Delete) (list a))))
)
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 14.11.2008, 16:12
#10
+Alex+

Архитектура
 
Регистрация: 05.03.2005
Сообщений: 96


Да, так работает.
Странно, что нет более красивого решения без использования vl-catch-all-apply

Огромное спасибо!!!

Последний раз редактировалось +Alex+, 14.11.2008 в 23:54.
+Alex+ вне форума  
 
Непрочитано 17.11.2008, 18:20
#11
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Елпанов Евгений, а как удалить блок существующий в чертеже, но чтобы выпадало окошко с существующими блоками?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 17.11.2008, 18:26
#12
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от dextron3 Посмотреть сообщение
Елпанов Евгений, а как удалить блок существующий в чертеже, но чтобы выпадало окошко с существующими блоками?
Написать одну программу, выводящую список блоков в диалоговое окошко. И другую, которая вызывает это окно и запускает удаление блока из чертежа.

ps. Мне думается, вы ждали другой ответ...
Елпанов Евгений вне форума  
 
Непрочитано 17.11.2008, 20:26
#13
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


а если вам на сотку смс отправить в ответном смс лисп программка не прийдет?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 17.11.2008, 23:46
#14
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от dextron3 Посмотреть сообщение
а если вам на сотку смс отправить в ответном смс лисп программка не прийдет?
Не придет...
Но, за сотку, спасибо!
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Удаление слоев по списку

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужны фильтры слоев?Как ими пользоваться? Aysulu AutoCAD 43 17.04.2019 10:59
Опять вопрос про удаление слоев. Natasha111 AutoCAD 22 20.11.2018 20:12
Удаление слоев VitaminC AutoCAD 6 05.10.2004 06:38
Удаление слоев VitaminC AutoCAD 1 04.10.2004 15:29
Удаление блоков и слоев ??? Алчи AutoCAD 8 08.12.2003 09:09