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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать скрипт или Лисп, удаляющий конкретный блок?

Как сделать скрипт или Лисп, удаляющий конкретный блок?

Ответ
Поиск в этой теме
Непрочитано 18.07.2012, 13:00 #1
Как сделать скрипт или Лисп, удаляющий конкретный блок?
Borikv
 
Регистрация: 24.10.2007
Сообщений: 108

У меня к клавише S привязана команда QSAVE -(defun C:S () (command "qsave"))
Я бы хотел привязать к этой команде скрипт, который бы стирал блок с конкретным именем и делал бы ему PURGE. Возможно ли это?. Нужно обмануть одну внешнюю программу.

Последний раз редактировалось Borikv, 18.07.2012 в 14:30.
Просмотров: 7160
 
Непрочитано 18.07.2012, 13:05
#2
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Borikv Посмотреть сообщение
Возможно ли это?
Возможно.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.07.2012, 13:13
#3
Profan


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


Стёртому блоку сделать purge?
Profan вне форума  
 
Автор темы   Непрочитано 18.07.2012, 13:17
#4
Borikv


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


Да , чтобы он больше не появлялся при повторном срабатывании этой внешней прораммы.
Borikv вне форума  
 
Непрочитано 18.07.2012, 13:32
1 | #5
Олег (jr.)

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


Замени имя блока и название команды

Код:
[Выделить все]
(defun C:BPUR  (/ blockname)
  (setq blockname "myblock")	 ;	<-- change block name 
  (if (tblsearch "block" blockname)
    (command "_purge" "_b" blockname "_n")
    )
  )
Олег (jr.) вне форума  
 
Непрочитано 18.07.2012, 13:34
#6
Profan


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


Так это же не скрипт.
Profan вне форума  
 
Автор темы   Непрочитано 18.07.2012, 13:48
#7
Borikv


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


В принципе и лисп сгодится, только привязать его к часто используемой команде типа Qsave ну и вставить стирание этого блока
Borikv вне форума  
 
Автор темы   Непрочитано 24.07.2012, 11:47
#8
Borikv


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


А как дополнить привидённый выше лисп, чтобы сначала из чертежа стёрлись все эти блоки , а потом уже пёрдж?
Borikv вне форума  
 
Непрочитано 24.07.2012, 12:05
1 | #9
Кулик Алексей aka kpblc
Moderator

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


По-быстрому, без особых проверок:
Вложения
Тип файла: lsp _kpblc-block-erase.LSP (8.1 Кб, 311 просмотров)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.07.2012, 12:40
#10
Borikv


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


Круто! За пол часа такй лиспище! Только непонятно как запускать после Load aplication

Мне кажется что этот лисп сильно универсальный. Всего-то надо найти блоки с конкретным именем и стереь их к чертям

Последний раз редактировалось Borikv, 24.07.2012 в 12:51.
Borikv вне форума  
 
Непрочитано 24.07.2012, 15:37
2 | #11
VVA

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


Добавочка к #5. Надеюсь, что блок не динамический
Код:
[Выделить все]
(defun C:BPUR  (/ blockname ss i)
  (setq blockname "myblock")	 ;	<-- change block name
  (vl-load-com)
  (if (and (setq ss (ssget "_X" (list(cons 0 "INSERT")(cons 2 blockname))))
           (setq i (sslength ss))
           )
    (repeat i
      (vl-catch-all-apply 'entdel
      (list(ssname ss (setq i (1- i))))
        )
      )
      )
  (if (tblsearch "block" blockname)
    (command "_purge" "_b" blockname "_n")
    )
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.07.2012, 15:48
1 | #12
Кулик Алексей aka kpblc
Moderator

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


VVA, забыл про вхождения блоков внутрь других блоков.

> Borikv:
(_kpblc-block-erase "ИмяБлокаВКавычках" t) - удалит блок, где бы он ни был, невзирая на состояние слоев.
(_kpblc-block-erase "ИмяБлокаВКавычках" nil) - удалит блок, где бы он ни был, оставив в неприкосновенности блоки на заблокированных и замороженных слоях.
Как вариант, "обертка" в виде команды. Для запуска в ком.строке ввести ber

P.S. Этот код не тестировал вообще.
Вложения
Тип файла: lsp ber.LSP (10.4 Кб, 322 просмотров)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 24.07.2012 в 21:18.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.07.2012, 09:31
#13
Borikv


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


Всем учавствовавшим большое спасибо. Последний вариант работает отлично
Borikv вне форума  
 
Непрочитано 27.02.2020, 14:33
#14
dadatamada


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
VVA, забыл про вхождения блоков внутрь других блоков.

> Borikv:
(_kpblc-block-erase "ИмяБлокаВКавычках" t) - удалит блок, где бы он ни был, невзирая на состояние слоев.
(_kpblc-block-erase "ИмяБлокаВКавычках" nil) - удалит блок, где бы он ни был, оставив в неприкосновенности блоки на заблокированных и замороженных слоях.
Как вариант, "обертка" в виде команды. Для запуска в ком.строке ввести ber

P.S. Этот код не тестировал вообще.
Спасибо за Лисп. А можно сделать поддержку динамических блоков и выбор блока мышкой?
dadatamada вне форума  
 
Непрочитано 27.02.2020, 15:58
#15
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,181


dadatamada, https://forum.dwg.ru/showpost.php?p=947385&postcount=2
__________________
_бложиг
Boxa на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сделать скрипт или Лисп, удаляющий конкретный блок?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно сделать чердачное перекрытие и кровлю? mixxa Конструкции зданий и сооружений 5 16.12.2011 10:33
Проектирование участка водопровода кольцевой сети -200м, запросили сделать расчет всей кольцевой сети, как это сделать? kess35 Водоснабжение и водоотведение 16 07.10.2011 22:34
Как сделать узел вращения? remenikomer Машиностроение 28 25.07.2011 11:39
Как сделать курсив GOST Type A (или B) в размерных выносках? igor_skor AutoCAD 5 22.01.2011 11:42
Как сделать одной из граней SOLID поверхность Polygon mesh kukuikar AutoCAD 1 16.05.2007 07:58