vla-get-activeselectionset и Region
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > vla-get-activeselectionset и Region

vla-get-activeselectionset и Region

Ответ
Поиск в этой теме
Непрочитано 20.02.2006, 17:32 #1
vla-get-activeselectionset и Region
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,996

Пока в чертеже нет Region'ов
Код:
[Выделить все]
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
  (setq axss (vla-get-activeselectionset adoc))
возвращает что-то типа
Цитата:
#<VLA-OBJECT IAcadDocument 03bc85e0>
#<VLA-OBJECT IAcadSelectionSet 03bf2804>
Но стоит только только ему появится, как получаем
Цитата:
_$ (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(setq axss (vla-get-activeselectionset adoc))
#<VLA-OBJECT IAcadDocument 03bc85e0>
; ошибка: Ошибка Automation. Вызов метода AddItems из интерфейса IAcadSelectionSet завершился неудачно
Удаляем регион - опять все нормально.
Как обойти сей трабл или это у меня такой Автокад?
Автокад 2004 RUS.
Просмотров: 4225
 
Непрочитано 20.02.2006, 17:46
#2
Елпанов Евгений

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


Более чем странно...
Подтверждаю, у меня на 2004 en получилась такая же фигня!
Елпанов Евгений вне форума  
 
Непрочитано 20.02.2006, 18:00
#3
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Да действительно так и есть (2004 EN). Надо дома на других версиях попробывать...
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 20.02.2006, 18:28
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Та же самая картина на 2002 EN и 2006 RU
VVA вне форума  
 
Непрочитано 20.02.2006, 18:56
#5
Александр Ривилис

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


Судя по всему дело не в самом REGION, а в том что команда _REGION портит ActiveSelectionSet Если после добавления REGION выполнить команду _SELECT и что-то выбрать - этой ошибки нет (проверял в AutoCAD 2004...2006)
Александр Ривилис вне форума  
 
Непрочитано 20.02.2006, 19:27
#6
Пастух


 
Сообщений: n/a


У меня есть предположение и даже почти уверенность в следующем:
Все объекты, участвовавшие в работе некоторой команды AutoCAD записываются в некоторый внутренний набор.
При вызове свойства activeselectionset указатели на все примитивы из этого внутреннего набора копируются в именованный набор CURRENT. Именно указатель на этот набор и возвращает свойство документа activeselectionset.
При выполнении команды REGION во внутренний набор попадает примитив, участвующий в ней, например полилиния.
Но команда REGION при установке по умолчанию системной переменной DELOBJ удаляет полилинию.
При попытке получить свойство activeselectionset AutoCAD пытается скопировать указатель на удаленную полилинию в набор CURRENT и, естественно выдает ошибку.
Установите DELOBJ в 0 и проверьте!
 
 
Непрочитано 20.02.2006, 22:42
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
Установите DELOBJ в 0 и проверьте!
Пастух докапался до истины. Баг однако, или назовём более мягко особенность...

Кстати после создания региона при DELOBJ=1 (ssget "_P") nil :?

>VVA
А зачем вам именно активный набор? Есть много других способов получить желаемый результат. К примеру (ssget "_I") т. е. все примитивы с подсвеченными ручками или перед созданием региона, запомнить последний примитив и идти от него функцией (entnext). Вроде работает если вы бага не обнаружите
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 21.02.2006, 09:46
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Задача стояла наоборот, если есть, то расчленить регионы. Вначале так и делал (setq ssnab (ssget "_X" '((0 . "REGION"))))Но конструкция (command "_EXPLODE" ssnab) расчленяет только один регион
Идея пришла одна: vla-explode. Не прошло через активный набор, сделал чере цикл по ssnab и (vla-Explode (vlax-ename->vla-object (ssname ssnab i)))
VVA вне форума  
 
Непрочитано 21.02.2006, 09:55
#9
Кулик Алексей aka kpblc
Moderator

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


> VVA : Я понимаю, что это не гуд, но тем не менее можно попробовать нечто типа:
Код:
[Выделить все]
(setq selset (ssget "_X" '((0 . "REGION"))))
(while (and selset
	    (> (sslength selset) 0)
	    ) ;_ end of and
  (setq item (ssname selset 0))
  (ssdel item selset)
  (if (vl-catch-all-error-p
	(vl-catch-all-apply 'vla-explode (list (vlax-ename->vla-object item)))
	) ;_ end of VL-CATCH-ALL-ERROR-P
    (princ "\nНевозможно разбить регион")
    ) ;_ end of if
  ) ;_ end of while
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > vla-get-activeselectionset и Region