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

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

Проблема с остановкой программы на VBA

Ответ
Поиск в этой теме
Непрочитано 19.08.2009, 08:18 #1
Проблема с остановкой программы на VBA
Linetzev
 
Регистрация: 05.08.2009
Сообщений: 7

Мной была написана программа на VBA, предназначенная для черчения путевой ситуации жд.станций. Программа определяет габариты до жд. путей и создает также несколько текстовых файлов. Алгоритм успешно работал на вкладке ThisDrawing. Однако основным его (алгоритма) недостатком было неудобное хранение и редактирование основных настроек программы. В связи с чем алгоритм был модифицирован: создана форма для радактирования данных и на этой форме кнопка, запускающая основной алгоритм черчения и расчета плана путей.
Проблема в следующем: при больших объемах данных алгоритм с формой вроде бы останавливается (команды Unload form: End), однако на чертеже ACAD ModelSpace привычный курсор ACAD (крест) не появляется, хотя Zoom работает (т.е. чертеж невозможно сохранить), а редакторе VBA выполнение команды меню Run\Reset приводит к зависанию VBA и ACAD.
При небольших объемах данных все работает нормально.
В первоначальном алгоритме на вкладке ThisDrawing все работает нормально при любых объемах данных.
Подскажите что нужно сделать?
Просмотров: 3230
 
Непрочитано 19.08.2009, 08:26
#2
Кулик Алексей aka kpblc
Moderator

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


Значит надо менять сам алгоритм отрисовки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.08.2009, 08:41
#3
Linetzev


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


До конкретной отрисовки еще не доходит. При расчете габаритов (это самый длинный и сложный блок программы - выполняется "почти" аналитически - через массивы) делал Exit Sub и наблюдал эту проблему.
"Почти" потому что, чтобы рассчитать габариты на чертеж выводятся текстовые объекты-индексы исходного массива (он огромен), далее делается SelectionSet и выбирается часть индексов этого массива (для экономии времени расчета), далее с данными массива этих индексов делаются аналитические расчеты. Где здесь я как раз ставлю Exit Sub и наблюдаю эту проблему.
По завершению расчетов габаритов все TEXTы удаляются, а потом выполняется полная отрисовка чертежа
Linetzev вне форума  
 
Непрочитано 19.08.2009, 08:59
#4
Кулик Алексей aka kpblc
Moderator

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


Linetzev, а то, что нельзя безнаказанно создавать безумное количество примитивов в AutoCAD - это учитывается или нет? Почему нельзя выполнять выборку полностью аналитически?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.08.2009, 14:58
#5
Linetzev


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


Безумное количество примитивов - в моем случае это порядка 20-40 тысяч на готовом чертеже и не более 5 тысяч TEXTов для SelectionSet.
Мне не хватает знаний это сделать полностью аналитически, а путем сравнения координат это очень долго - мне так кажется. Первоначально построенная конструкция включала 5 вложенных циклов с выходом по условию, результат приходилось ждать очень долго и возможности этой процедуры были не очень хороши.
Дело в том, что на жд станциях очень много путей - габариты от непутевых точек и междупутья (жд пути тоже состоят из точек) приходится определять многократно. Кроме того, некоторые непутевые точки (светофоры) должны быть обязательно присоеденены к своему пути (светофор всегда справа от пути). Ускорение процесса (моя идея) - резкое сокращение области расчетных точек через SelectionSet.
Еще хочу сказать что объект SelectionSet создается один раз в начале работы и удаляется в конце, а в промежутках - очищается. может быть в этом дело?
Как реализовать алгоритм по-другому я не знаю. Может подскажете или ссылку дадите?

Последний раз редактировалось Linetzev, 19.08.2009 в 15:21.
Linetzev вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проблема с остановкой программы на VBA



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль к VBA karp_b Программирование 24 29.08.2013 12:43
Vba глюк активизации формы Artem011 Программирование 2 29.04.2009 08:09
VBA-AutoCAD программы для геодезистов, маркшейдеров Sergey Klimkin Программирование 5 05.09.2008 22:55
шаблоны.. блоки.. программы.. kolobrod Программирование 9 29.01.2007 11:15