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

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

Как удалить все объекты кроме добавленных в набор.

Ответ
Поиск в этой теме
Непрочитано 19.10.2015, 10:39 #1
Как удалить все объекты кроме добавленных в набор.
kurstep
 
Регистрация: 27.01.2012
Сообщений: 240

Здравствуйте. Подскажите пожалуйста. У меня есть начальный файл, все объекты которого я добавляю в набор (setq ss (ssget "_A")) Потом я делаю ряд добавлений объетов в файл сохраняю его под новым именем и мне надо вернуться в первоначальное состояние файла - т.е. удалить все добавленные объекты. Как это возможно сделать?
Просмотров: 3419
 
Непрочитано 19.10.2015, 10:51
1 | #2
kp+

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


Цитата:
Сообщение от kurstep Посмотреть сообщение
удалить все добавленные объекты
Как вариант - запомнить enlast до добавления объектов и пройтись циклом с entnext и entdel от запомненной позиции до нового entlast. Но если файл сохраняется под новым именем - не проще ли его закрыть и открыть прежнюю версию?
kp+ вне форума  
 
Автор темы   Непрочитано 19.10.2015, 11:37
#3
kurstep


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


Спасибо большое, попробую сделать так... Думал конечно и о втором варианте, но выполнение лиспа у меня должно происходить в активном документе(иначе ряд команд не выполняется) , а при его закрытии лисп прекращается.
kurstep вне форума  
 
Непрочитано 19.10.2015, 12:20
#4
Кулик Алексей aka kpblc
Moderator

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


Команд? А насколько нужно использование именно команд?
В принципе, можно попробовать через ObjectDBX создать новый документ, потом с использованием CopyObjects перекопировать все примитивы в только что созданный документ и сохранить его под новым именем. Правда, вопросов там будет немеряно. И сохранение только в текущей версии...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2015, 14:02
#5
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


_undo _mark
_undo _back
Александр Ривилис вне форума  
 
Непрочитано 19.10.2015, 14:47
#6
Boxa

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


открыть для чтения - > Сохранить как.
Boxa вне форума  
 
Непрочитано 22.10.2015, 17:23
#7
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Попробуйте так

Код:
[Выделить все]
 (setq newss (ssget "_A"))

(FOREACH f1 (mapcar 'cadr (ssnamex newss))
 (if (not (ssmemb f1 ss))
  (entdel f1)
 )
)
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 23.10.2015, 05:06
#8
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


kurstep, думаю, что также подойдет принцип, используемый в этой теме: Отслеживание объектов появившихся после pasteclip.
ProPeller, тоже вариант, но не мешало бы уточнить, что перед началом добавления новых объектов надо выполнить первую строку кода, а после всех изменений для удаления новых объектов - все остальные строки. И это должно произойти непременно в одном сеансе Автокада, иначе переменная newss попросту не сохранится. Коды по ссылке, кстати, будут вести себя также. А вот как быть, если сегодня объекты добавились, а завтра, по приходу на работу, включив компьютер, их придется удалить? Надо сказать, что и это решаемо, только посложнее.
Offtop: Не понимаю, что побудило разработчиков Автокада хранить глобальные переменные только в пределах одного сеанса? Оно, конечно, понятно, что если этого не делать, то переменными можно загадить весь файл, но это же по сути просто текстовая информация, которая не так уж много и весит. И современные компьютеры вполне способны ее переварить. Просто разработчикам программ, например, на лиспе, пришлось бы более внимательно относиться к локализации переменных. Получается, что не очень-то они и глобальные, эти переменные, а какие-то "глобальноватые". Еще большей иронии данному факту добавляет стандартная возможность сослаться на глобальную переменную LISP полем (field), однако при повторном открытии эту переменную больше не найти, но поле остается. Какой в этом смысл?
skkkk вне форума  
 
Непрочитано 23.10.2015, 09:06
#9
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от skkkk Посмотреть сообщение
но не мешало бы уточнить, что перед началом добавления новых объектов надо выполнить первую строку кода,
Да просто ТС написал, что он предварительно сохраняет набор в ss, поэтому не посчитал необходимым об этом напомнить))

Цитата:
Сообщение от skkkk Посмотреть сообщение
А вот как быть, если сегодня объекты добавились, а завтра, по приходу на работу, включив компьютер, их придется удалить?
В этом тоже проблемы нет. Записать список примитивов в словарь и в следующем сеансе к нему обратиться. Так будет даже более универсально.
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как удалить все объекты кроме добавленных в набор.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как удалить невидимые объекты в файле bargool AutoCAD 17 15.04.2022 11:48
Файл большой zoom all за пределами объекты как их удалить mvart AutoCAD 9 22.05.2011 17:07
Как удалить из пространства модели все объекты которые не используются в ВЭ пространства листа? Silent77 AutoCAD 3 24.03.2011 00:47
Не могу удалить объекты клавишей "delete" и еще что то странное творится с Автокадом2010 Sanechek AutoCAD 2 13.12.2010 14:06
Как удалить с отсканированного листа ненужные объекты Михаил Попов AutoCAD 3 23.11.2010 22:30