Тема: Зависание ACAD при сохранении чертежа

Всем привет.
Может кто сталкивался с такой проблемой:
Есть ARX-модуль со своими графическими и не графическими объектами. Также команды по работе с ними. Иногда, при сохранении чертежа (_QSAVE) пользователем (с помощью любимой кнопки со значком дискеты) просиходит зависание ACAD. ProgresBar в строке состояния останавливается и все:=(
При этом ACAD захватывает и память и ресурсы процессора, т.е. он чего то делает.
Все возможные точки в своей проге (dwgIn\Out, сообщения реакторов и т.п.) вроде проверил. Точки остановки на них не срабатывают, а если и просиходит остановка на точке то метод отрабатывает корректно.
Есть подозрение что такое сучает при работе с чертежом из сети.

Re: Зависание ACAD при сохранении чертежа

После разбрасывания точек остановки и отладке проблема оказалась в методе saveAs
Фокус:
es = poly.getPointAt(i, verts[1]);
es = poly.getDistAtPoint(verts[1], dist);
В обоих случаях es = eOk, но значение расстояния получаем dist = 1.#QNAN00000000000
Далее из за этого закручивался вечный цикл.
Вот такие делы...

Re: Зависание ACAD при сохранении чертежа

Вопрос все равно открыт...
Почему может быть получено такое значение

Re: Зависание ACAD при сохранении чертежа

Попробуй изменить на:

AcGePoint3d p;
es = poly.getPointAt(i, p); vert[1] = p;
double param = 0;
es = poly.getParamAtPoint(p,param);
es = poly.getDistAtParam(param, dist);

Интересно каким будет dist и значения es.

Re: Зависание ACAD при сохранении чертежа

А еще лучше перестраховаться:

AcGePoint3d p,pointOnCurve;
es = poly.getPointAt(i, p); vert[1] = p;
es = poly.getClosestPointTo(p,pointOnCurve);
double param = 0;
es = poly.getParamAtPoint(pointOnCurve,param);
es = poly.getDistAtParam(param, dist);

Re: Зависание ACAD при сохранении чертежа

Спасибо за ответ
При использовании первого решения:
es = eOk
param = 66(в полилинии всего 107 вершин)
dist = 1.#QNAN00000000000
При использовании второго решения аналогичная картина :(
Как оказалось проблема в следующем.
     1. В своем объекте я агрегирую полинию
     2. Полилиния используется для расчетов но на рисунке не отображается
     3. В полилинии було 107 вершин, причем вышло так что 61-я вершина
        точно совпадает с 62,
        но мало того для них были заданы bulges (setBulgeAt) c разными знаками.
     4. Как это случилось остается загадкой
Вот такие фокусы может таить полилиния

Re: Зависание ACAD при сохранении чертежа

А решил проблему так
if(dist<0) continue;
Оказалось что если dist = 1.#QNAN00000000000 то это условие срабатывает и удаетя избежать входа в вечный цикл.
Но это излечение следствия, а не причины.
Причину ищу.