|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
11.03.2004, 15:53 | #1 | |
Вопросик по ActiveX
Инженер по системам безопасности
Рига
Регистрация: 23.11.2003
Сообщений: 1,099
|
||
Просмотров: 4418
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>Kos Такой странный вопрос от непоминания что происходит, ведь и "пустой" список и несозданная переменная в результате nil. После ссылки данной VK, стало понятнее что ошибка возникает при попытке преобразовать "неправильный" массив который формируеться при отсутствии пересечения.
Вот нашел вроде рабочий примерчик на каком то польском сайте: Код:
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Да, кстати правильный пример. У меня получилось:
Код:
Кстати если использовать конструкцию для отлавливания ошибочного массива, которая встречаеться в одном примере который везде разошелся но почему то не работает: Код:
|
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Хе-хе... vla-IntersectWith всегда выполняется.... и не даст ошибку, если ее аргументы указаны правильно. Ведь массив создается всегда. Вопрос в том - какой именно массив!!! Другое дело - vlax-safearray->list. Если массив неправильный, то ошибку даст именно эта функция. Тогда уж проверяйте
Код:
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Я постепенно убеждаюсь что надо пользоваться отладчиком. Не вы первый мне это говорите, но 95% ошибок я как то сразу нахожу. Для контроля пременных я обычно вставляю (princ ....). И создаю различные конструкции из ;;; и дописок.
То что ошибку выдает именно vlax-safearray->list, я понял после вашей ссылки. Насчет того что я мучался целый вечер, это правда. Но мучался я не просто так, до этого вышеописанные функции были для меня "темным лесом". Теперь я их достаточно подробно изучил, когда оно с книжкой, просмотром примеров и эспериментами, оно очень полезно. Да и не привык я вставлять к себе в проги то в чем досконально не разобрался. Теперь я знаю работу всех аргументов vl-intersectwith, а не только AcExtendNone. Умею узнавать размерность массива, точно знаю про значния в "неправильном" массиве который она создает и еще кучу вещей. Дописал прогу. Потом "нарвался" на один неприятный частный случай. Теперь придеться подробно изучить функции работы с кривыми. |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Тогда может быть интересно будет также узнать, что сама по себе vla-intersectwith при всем удобстве использования, по жизни является еще и довольно таки глючной функцией. Лично получил от нее по лбу, когда она не распознала реальную точку пересечения двух отрезков (LINE), в то время как Лисповская (inters) ее вычислила. А еще науке известны случаи, когда она возвращала четыре точки вместо двух, но расположенные чуть выше и чуть ниже реальных точек....
Вот такая вот веселуха (( |
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>VK Проблемка в том что у меня не линии, а полилинии. Можно конечно расчленить их на сегменты, но уж слишком сложно получится.
Жизнь покажет что там может быть. Насчет четырех точек, все конечно может быть, то по самой сути программы, набор для проверки на пересечение выбираеться из полилиний с определенными расширенными данными, расстояние между пересечениями в подавляющем количестве случаев не может быть мение 80 единиц. Думаю что "двоение" получилось на расстояниях отличающихся на несколько далеких знаков после запятой. Хотя как знать... Реальные "глюки" всегда проявляються при работе с реальными чертежами. |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Двоение-то ладно... его можно выловить... а вот когда совсем точка не будет найдена.... Если точка не найдена - то запрос от пользователя? Глупость какая-то.... Если полилинии состоят исключительно из отрезков (без дуг) и не очень длинные, то можно попробовать искать точку все-же через inters в вложенных циклах, предварительно получив списки вершин полилиний. ИМХО конечно.
|
|||