|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Глючит vla-SelectOnScreen! Знатоки ActiveX - отзовитесь!
Москва
Регистрация: 10.01.2005
Сообщений: 89
|
||
Просмотров: 7291
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Несколько моментов.
1. Определение активного пространства. При работе в модели через лист будет возвращаться не то, что надо. Вариант определения есть здесь 2. По-моему, очищать набор мало. Надо бы его и удалить (это не релиз объекта, а именно удаление). Посмотри на vbamaker.narod.ru - там операции с наборами через VBA идут, но аналог провести можно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Слушай, я полностью код не смотрел, попробуй нечто типа такого:
Код:
Знатоком ActiveX не числюсь, надо ждать Лентяя или Apelsinov'a.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.01.2005
Москва
Сообщений: 89
![]() |
To kpbIc: Ошибка происходит в строке (setq ass (vla-get-ActiveSelectionSet *doc*)), потому что в свойствах AcadDocument в свойстве ActiveSelectionSet сидит такая ошибка error: Automation Error. Calling method AddItems of interface IAcadSelectionSet failed (смотрел через inspeсt), поэтому что clear ее, что delete - все равно.. vl-catch-all-error-p возвращает ошибку (T) поэтому дальше ниче не выполняется..
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Погоди, а внутрь if'a у тебя вход что, выполняется?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
Jurasic
Итак разбор полетов: *** Код:
если от того, что какая-то бяка им что-то назначит- так она им и после загрузки этого лиспа наприсваивать может... *** vlxx-ActiveSpace- это Крыс прошелся уже... *** vlxx-AddCircle Значит, что оно делает: оно вставляет в пространство окружность (я бы тут защиту поставил, а то вдруг там слой залочен или еще что...), затем присваивает ей свойства. А потом вдруг (entlast) - нет уж activeX так activeX. А то фигня это. Если уж очень надо, то vlax-vla-object->ename, а сдесь можно и просто obj вернуть. *** C:JCirclefromAr Код:
Код:
Код:
Код:
Код:
Код:
Код:
а вот теперь как раз неплохо бы - Код:
Код:
P/S/ никаких НАБОРОВ тут нет, и неоткуда. то что ass потом ругается - это уже последствия, ищите причину.
__________________
apel.fas |
|||
![]() |
|
||||
Регистрация: 10.01.2005
Москва
Сообщений: 89
![]() |
To Apelsinov Спасибо за конструктивную критику! Со всем согласен, кроме: "зачем обнулять все глобальные" - если файл только что открыт, или программа только что загружена, *vlxx-activedocument* вернет указатель на прошлый файл ибо MDI!! И т.д.....
В "эту хрень" можно "нафигачить" и обработчик ошибок и еще кучу проверок, но ответа на вопрос так и не получить..... А вопрос простой: как стереть (вообще/совсем) стереть из чертежа исходные объекты, так чтобы не портить ActiveSelectionSet?? |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
Jurasic
Цитата:
Цитата:
Код:
найти что именно приводит к Вашей ошибке может и не получится, это такие дебри... А вот если Вы залатаете все дырочки в программе (локальные, очистка и т.п.) то и ошибка исчезнет, ибо она где-то там. Ну и еще, возможно, стоит отказаться от ass и заполнять свой обьект выбора, попутно его создавая. НАБОР - это то что вернет (ssget). Это из другой песни.
__________________
apel.fas |
|||
![]() |
|
||||
Регистрация: 10.01.2005
Москва
Сообщений: 89
![]() |
Всем спасибо! KpbIc'у и Apelsinov'у особенно! Выкладываю последний вариант программы, может кому понадобится...
Еще раз напомню что программа заменяет выделенные дуги и эллипсы соответствующими по радиусу окружностями. Для эллипсов за радиус берется MajorRadius. [ATTACH]1143532346.zip[/ATTACH] |
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Дорогой Jurassic , Хоть меня тут и держат зазнатока, но код ваш ниаслил, потому как он мудер больно. Хотя фильтр с "или" мне понравился. Я тут выкидывал как-то прграммку на несколько строк, но работающую, так что держите ее снова. Код:
Код:
|
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Дорогой Jurassic ,
Пока я ваял свой вариант, вы уже успели вылодить новую версию вашей программы. Не могу не отметить, что она не сыободна от недостатков предыдущей, как-то: перегружена переменными, каждое свойство вновь созданного обрабатывается отдельно, хотя для этого удобнее использовать списки и т.д. Предлагаю вам свой вариант, в котором окружность (эллипс) наследуют свойства дуги, из которой они образуются. Это всего лишь требует введения двух(!) операций в мою вспомогательную функцию а2с: Код:
|
|||
![]() |
|
||||
Регистрация: 10.01.2005
Москва
Сообщений: 89
![]() |
Лентяй! Долго же вас не было!!!!
![]() ![]() |
|||
![]() |