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

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

Перестала работать handent

Ответ
Поиск в этой теме
Непрочитано 27.10.2011, 13:05 #1
Перестала работать handent
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья, что могло случится? Тупо перестала работать handent. Всегда дает nil. В чем может быть проблема?
Просмотров: 5638
 
Непрочитано 27.10.2011, 13:07
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Примитивы удалены были?
Do$ вне форума  
 
Автор темы   Непрочитано 27.10.2011, 13:12
#3
Zaghim


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


Кажется допер...да, Do$, ты прав... у меня сидят имена примитивов в атрибуте, вытаскиваю и обрабатываю его, а примитив уже удалили... можно закрывать тему
Zaghim вне форума  
 
Непрочитано 12.04.2017, 00:08
#4
skkkk


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Примитивы удалены были?
AutoCAD 2011. Обнаружил интересную (для меня) особенность. Handent для метки (handle) удаленного объекта возвращает ENAME этого объекта вплоть до закрытия файла.
Код:
[Выделить все]
_$ (setq hndl (cdr (assoc 5 (entget (car (entsel))))))
"273"
Затем удаляем объект и вызываем
Код:
[Выделить все]
_$ (handent hndl)
<Имя объекта: 7ffffb09ab0>
Получается, что метка объекта (видимо, со всеми остальными его свойствами) хранится в базе чертежа до его закрытия?
Хотел проверять таким образом, удален ли объект, а выходит, что так не проверить. Пока на ум пришло только создавать пустой набор, добавлять в него этот примитив, затем набор подсвечивать и проверять его на nil с помощью (ssget "_I"). Чувствую, что такой подход уж очень топорный, но иной пока придумать не удалось. Есть ли какие-либо мысли, уважаемые коллеги?
skkkk вне форума  
 
Непрочитано 12.04.2017, 07:57
#5
Boxa

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Получается, что метка объекта (видимо, со всеми остальными его свойствами) хранится в базе чертежа до его закрытия?
https://knowledge.autodesk.com/searc...97E4C-htm.html

А вот эта ссылка возможно будет интересна как отправная точка идеи для проверки удален ли объект http://www.caduser.ru/forum/index.ph...D=23&TID=14807

ЗЫ.
Примечательно, что в .NET, у наследников DBObject есть свойство для чтения IsErased() и таких заморочек не нужно.
Boxa вне форума  
 
Непрочитано 12.04.2017, 09:27
#6
frostmourn


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Есть ли какие-либо мысли, уважаемые коллеги?
Ну дык это, если "по-правильному", то есть vlax-erased-p. А можно и так - сделать vlax-ename->vla-object, для стёртого объекта вернёт nil.
frostmourn вне форума  
 
Непрочитано 12.04.2017, 09:59
#7
Кулик Алексей aka kpblc
Moderator

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


Если не ошибаюсь, entget для удаленного объекта тоже вернет nil.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2017, 14:28
#8
skkkk


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


Boxa, спасибо за ссылки, первая подтвердила мои догадки. Если пойти в них дальше, то я полагаю, подобный механизм реализован с целью применения его для отмены действий. То есть все изменения в пределах сеанса сохраняются в базе и в случае вызова команды отмены применяются.
Цитата:
Сообщение от Boxa Посмотреть сообщение
в .NET, у наследников DBObject есть свойство для чтения IsErased()
Ну а лиспе, стало быть, для такого случая
Цитата:
Сообщение от frostmourn Посмотреть сообщение
есть vlax-erased-p
- пусть и не свойство объекта, а функция, про которую я благополучно забыл, это и есть самый правильный вариант проверки, я считаю. В процессе пользования "словарем" Полещука мне она попадалась, но ни разу не использовал ее, поэтому и не вспомнил, спасибо, frostmourn. Да и мозги уже не работали под конец рабочего дня.
Цитата:
Сообщение от frostmourn Посмотреть сообщение
vlax-ename->vla-object, для стёртого объекта вернёт nil
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
entget для удаленного объекта тоже вернет nil
Тоже весьма логичные варианты, хоть и не вполне правильные в условиях наличия первого, даже стыдно, что не додумался хотя бы до одного из них. Плохо это - на уставшую голову писать код, но иногда необходимо
Всем спасибо, что не дали пойти через зад
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Перестала работать handent

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перестала работать кнопка выполнения макроса LAmyk AutoCAD 6 26.09.2014 12:56
Почему перестала работать кнопка delete? Skat AutoCAD 43 05.11.2012 17:49
перестала работать команда lisp Nikolays LISP 11 27.01.2011 00:40
Программа для подчета сумм перестала работать Jason AutoCAD 9 04.02.2009 18:15
Opera перестала работать с форумом http://dwg.ru/f/ dextron3 Прочее. Программное обеспечение 29 02.10.2008 23:11