Как установить, что две VLA-ссылки указывают на один и тот же объект?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как установить, что две VLA-ссылки указывают на один и тот же объект?

Как установить, что две VLA-ссылки указывают на один и тот же объект?

Ответ
Поиск в этой теме
Непрочитано 12.01.2010, 15:07 #1
Как установить, что две VLA-ссылки указывают на один и тот же объект?
Do$
 
AutoCAD/Civil3D LISP/C#
 
Санкт-Петербург
Регистрация: 15.08.2008
Сообщений: 1,701

Собственно, весь вопрос в заголовке. К примеру:
Код:
[Выделить все]
 
(setq vl   (vlax-ename->vla-object
      (setq ent (car (entsel "\nУкажите объект:")))
    ) ;_ end of vlax-ename->vla-object
      ent1 ent
) ;_ end of setq
Проверки:
(eq vl (vlax-ename->vla-object ent)),
(eq vl (vlax-ename->vla-object ent1)),
(eq (vlax-ename->vla-object ent) (vlax-ename->vla-object ent1))
возвращают NIL, а:
(eq ent1 ent) возвращает T.
Придумал такой вариант:
(= (vl-princ-to-string (vlax-ename->vla-object ent)) (vl-princ-to-string (vlax-ename->vla-object ent1)))
Но уж очень напоминает что-то индийское...
Пы.Сы. Разумеется, можно конвертировать VLA в ENAME и сравнивать ENAME, а потом снова конвертировать в VLA, но уж больно длинный путь...

Последний раз редактировалось Do$, 12.01.2010 в 15:13.
Просмотров: 3039
 
Непрочитано 12.01.2010, 15:21
#2
Олег (jr.)

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Собственно, весь вопрос в заголовке. К примеру:
Код:
[Выделить все]
 
(setq vl   (vlax-ename->vla-object
      (setq ent (car (entsel "\nУкажите объект:")))
    ) ;_ end of vlax-ename->vla-object
      ent1 ent
) ;_ end of setq
Проверки:
(eq vl (vlax-ename->vla-object ent)),
(eq vl (vlax-ename->vla-object ent1)),
(eq (vlax-ename->vla-object ent) (vlax-ename->vla-object ent1))
возвращают NIL, а:
(eq ent1 ent) возвращает T.
Придумал такой вариант:
(= (vl-princ-to-string (vlax-ename->vla-object ent)) (vl-princ-to-string (vlax-ename->vla-object ent1)))
Но уж очень напоминает что-то индийское...
Пы.Сы. Разумеется, можно конвертировать VLA в ENAME и сравнивать ENAME, а потом снова конвертировать в VLA, но уж больно длинный путь...
(vla-get-handle obj) - твой друг

~'J'~
Олег (jr.) вне форума  
 
Непрочитано 12.01.2010, 15:21
#3
Кулик Алексей aka kpblc
Moderator

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


Если equal тоже вернет nil, то сравнивай хендлы объектов (если они, конечно, существуют...).
P.S. Опоздал. Секунд на 10
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.01.2010, 15:27
#4
Елпанов Евгений

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если equal тоже вернет nil
не вернет!

Код:
[Выделить все]
(equal vl (vlax-ename->vla-object ent))
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 12.01.2010, 16:03
#5
Кулик Алексей aka kpblc
Moderator

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


Вернет. Точнее, может вернуть (в файле всего один объект - отрезок):
Код:
[Выделить все]
_$ (vl-load-com)

_$ (setq ent (car (entsel)) vl (vlax-ename->vla-object (car (entsel))))
#<VLA-OBJECT IAcadLine 0f17165c>
_$ (eq ent vl)
nil
_$ (equal ent vl)
nil
_$ (= ent vl)
nil
_$
Но при этом:
Код:
[Выделить все]
_$ (= (cdr(assoc 5(entget ent)))(vla-get-Handle vl))
T
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.01.2010, 16:35
#6
Do$

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


Надо же, equal действительно возвращает T:
Код:
[Выделить все]
(setq ent (car (entsel)) vl (vlax-ename->vla-object ent))
(equal (vlax-ename->vla-object ent) vl)
То что доктор прописал, спасибо!
Do$ вне форума  
 
Непрочитано 12.01.2010, 16:41
#7
Елпанов Евгений

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Точнее, может вернуть
так ты же сравниваешь бульдогов с носорогами...
equal правильно сравнивает одинаковые типы данных.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 12.01.2010, 23:10
#8
Кулик Алексей aka kpblc
Moderator

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


Елпанов Евгений, звиняй, весь день в беготне, мозги и закипели
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как установить, что две VLA-ссылки указывают на один и тот же объект?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рифмоплетство. Kryaker Разное 554 14.11.2023 11:59
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41