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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как программно удалить слой(autolisp)

Как программно удалить слой(autolisp)

Ответ
Поиск в этой теме
Непрочитано 24.05.2010, 23:12
Как программно удалить слой(autolisp)
Mozgunov
 
Начинающий проектировщик
 
Санкт-Петербург
Регистрация: 07.02.2008
Сообщений: 443

Уважаемые форумчане! Нужно программно удалить некоторые слои посредством autolispa Все примитивы которые находились на этих слоях я копировал на слой defpoints. Кто сталкивался подскажите пожалуйста конструкцию для удаления слоя. Спасибо!
Просмотров: 14233
 
Непрочитано 12.11.2024, 10:06
#41
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Я просто показал, что "китайский" слой в этом смысле
не особо отличается от любого другого.

Суть-то проблемы именно в этом была. Или не?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 12.11.2024, 10:09
#42
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Цитата:
Сообщение от Gretech89 Посмотреть сообщение
Подскажите, как можно удалить слой, если он на китайском?
команда _laydel удаляет слой на китайском и объекта на нём.
__________________
K Lisp
koMon вне форума  
 
Непрочитано 12.11.2024, 10:15
#43
Gretech89


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


name02,
1. Не знаю, может это от версии Автокада зависит? У меня 2021. Команда СЛОЙОБЪЕД не срабатывает, когда пытаюсь выделить объекты на китайском слое..
2. В идеале нужен скрипт, который удалял бы объекты на китайском слое, а затем и сам этот слой.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Да ладно!

(setq aaa (ssget))
(command "_erase" aaa "")

и нету их...
Вот такой вариант сработал! Объекты со слоя удаляются. Однако надо потом удалить сам китайский слой..

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
команда _laydel удаляет слой на китайском и объекта на нём.
не срабатывает(
Gretech89 вне форума  
 
Непрочитано 12.11.2024, 10:57
#44
name02


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


Цитата:
Сообщение от Gretech89 Посмотреть сообщение
не срабатывает(
Удалять можно только неактивный в данный момент слой!

Удалить слой можно так:
Код:
[Выделить все]
 (defun c:LDEL (/ a)

  (setvar 'CLAYER "0")
  (setq a (car (entsel "\nУкажите объект на удаляемом слое:")))
  (command-s "_LAYDEL" a "" "_Y")
  (princ)

) ;_ end defun
name02 вне форума  
 
Непрочитано 12.11.2024, 11:28
#45
Gretech89


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


koMon, name02, извиняюсь, да, всё срабатывает (команда _LAYDEL).
Я так понимаю только таким образом можно удалить объекты и сам китайский слой?
Указать в самом скрипте (например в #13 от VVA) китайский слой видимо не возможно.. Автокад не воспринимает китайские символы..
Gretech89 вне форума  
 
Непрочитано 12.11.2024, 11:45
#46
Кулик Алексей aka kpblc
Moderator

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


Offtop: Точнее, не ACAD, а лисп.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.02.2025, 10:52
#47
Gretech89


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


Цитата:
Сообщение от Gretech89 Посмотреть сообщение
Подскажите, как можно удалить слой, если он на китайском? Пробовал сохранять скрипты в кодировке Юникод, результатов не дало.
Пример файла с китайским слоем:
Решение найдено. Как вариант можно так поступать: перейти в слой 0, выбрать и удалить объекты на китайском слое, затем удалить все пустые слои.
Как оказалось иероглифы можно записать шестнадцатеричными номерами символов в стандарте Юникод. Например, "面板轮廓" можно записать как "\U+9762\U+677F\U+8F6E\U+5ED3".

Код:
[Выделить все]
 (defun C:cn-layer-delete (/ ss)

(command "_layer" "_m" "0" "")
(setq ss (ssget "_X" '((8 . "\U+9762\U+677F\U+8F6E\U+5ED3"))))

(if ss
    (progn (foreach ent ((lambda (/ tab item)
                           (repeat (setq tab  nil
                                         item (sslength ss)
                                         )
                             (setq tab (cons (ssname ss (setq item (1- item))) tab))
                             )
                           )
                         )
             (entdel ent)
             )
            )
           )

(command "_-purge" "_la" "*" "_no")
  
)
Gretech89 вне форума  
 
Непрочитано 05.02.2025, 12:38
1 | #48
name02


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


Тогда уж вот так можно сделать - для более удобного, как мне кажется, использования (можно указывать имя слоя не меняя код программы и отменить, если ошибочно удалил слои):
Код:
[Выделить все]
 (defun C:cn-layer-delete (/ ss layer-name *adoc*)
  
  (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  
  (setvar 'CLAYER "0")

  (setq layer-name (vl-string->list (getstring T "\nУкажите имя удаляемого слоя: ")))
  
  (vla-startundomark *adoc*)
  
  (setq ss (ssget "_X" (list (cons 8 (vl-list->string layer)))))

  (if ss
    (progn (foreach ent ((lambda (/ tab item)
                           (repeat (setq tab  nil
                                         item (sslength ss)
                                   ) ;_ end setq
                             (setq tab (cons (ssname ss (setq item (1- item))) tab))
                           ) ;_ end repeat
                         ) ;_ end lambda
                        )
             (entdel ent)
           ) ;_ end foreach
    ) ;_ end progn
  ) ;_ end if

  (command "_-purge" "_la" "*" "_no")
  
  (vla-endundomark *adoc*)
  
) ;_ end defun
name02 вне форума  
 
Непрочитано 05.02.2025, 14:04
#49
Gretech89


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


name02, спасибо, возьму на заметку
Gretech89 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как программно удалить слой(autolisp)

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить атрибут? пончеГ AutoCAD 16 30.01.2020 13:13
Как программно удалить неиспользуемые стили мультивыносок. Makswell Программирование 6 08.04.2009 13:43
как программно, в чертеже, выделить группы vasyavip Программирование 2 21.01.2009 10:12
КАК программно написать многострочным текстом? Александер Программирование 11 11.10.2006 16:19
подскажите как программно начертить линии разных типов Александер Программирование 4 30.06.2005 07:17