Как пользоваться методом GetpMathPoint для ksToleranceBranch

Автор Xmanager, 24.03.10, 02:44:23

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Xmanager

Здравствуйте.
Третий вечер безрезультатно борюсь с этой локальной мини-задачей при написании библиотеки. Работаю в КОМПАС 10, автоматизация на C++Builder 6.0.
Задача следующая: для произвольного объекта допуска формы определить координаты конечной точки опоры.
Структура параметров ksToleranceParam получена по указателю на графический объект. На чертеже заведомо линия опоры имеет несколько точек излома. Для определения координат конечной точки опоры пытаюсь для начала получить указатель на динамический массив точек опоры из структуры ksToleranceBranch. Однако этот массив при вызове метода  GetpMathPoint() постоянно оказывается пустым.

Фрагмент кода:

//--------------------------
ksToleranceParam * par = (ksToleranceParam*)kompas->GetParamStruct(ko_ToleranceParam);
//параметры допуска формы
doc->ksGetObjParam(  obj,   //указатель на графический объект
                        par,  //указатель на структуру параметров
                        ALLPARAM ); //тип считывания параметров

//Интерфейс динамического массива опор допуска формы
ksDynamicArray* branArr = (ksDynamicArray*)par->GetBranchArr();
//Интерфейс параметров "опоры" допуска формы
ksToleranceBranch * tolBran = (ksToleranceBranch*)kompas->GetParamStruct( ko_ToleranceBranch );
tolBran->Init();
//допустим, проверим параметры 0-й линии опоры
branArr->ksGetArrayItem(0, tolBran);
ksDynamicArray* arr = (ksDynamicArray*)tolBran->GetpMathPoint();

int count = arr->ksGetArrayCount(); //а счетчик равен 0
//--------------------------

При этом значения свойств arrowType(тип опоры) и tCorner(вариант точки выхода) по указателю tolBran определяются корректно.
Помогите советом, кто может!

bergovin

Возможно вы не описали (присвоили значения) всем используемым константам

Slaviation

Это похоже ошибка в API, в методе ksToleranceBranch::GetpMathPoint

Xmanager

Цитата: bergovin от 24.03.10, 09:23:49
Возможно вы не описали (присвоили значения) всем используемым константам
Из констант в моем случае используется только obj - ее описание и значение сомнений не вызывает.

Цитата: Slaviation от 24.03.10, 09:27:03
Это похоже ошибка в API, в методе ksToleranceBranch::GetpMathPoint
А вот это печально(((. Практически сводится на нет вся моя мат. модель решаемой задачи.

Может быть существуют альтернативные способы определения координат конечной точки опоры?
Очень срочно надо проект сдавать, надеюсь только на вашу помощь, господа!

bergovin

Цитата: Xmanager от 24.03.10, 16:09:20
Из констант в моем случае используется только obj
Вообщето obj - это переменная
а константа- ko_ToleranceBranch, ko_ToleranceParam ... и др.

Xmanager

Цитата: bergovin от 24.03.10, 16:15:17
Цитата: Xmanager от 24.03.10, 16:09:20
Из констант в моем случае используется только obj
Вообщето obj - это переменная
а константа- ko_ToleranceBranch, ko_ToleranceParam ... и др.

По сути это ничего не меняет.
Не требуется описывать ko_ToleranceBranch, ko_ToleranceParam - это системные константы типов интерфейсов параметров объектов.
Невозможно получить указатель на нужный массив точек, даже если сразу передавать методу GetParamStruct значения, а не индентификаторы констант:

//-------------------------
ksToleranceParam * par = (ksToleranceParam*)kompas->GetParamStruct(68);
ksToleranceBranch * tolBran = (ksToleranceBranch*)kompas->GetParamStruct(67);
//-------------------------

Не могу найти выход из сложившейся ситуации






Slaviation

Эта ошибка разработчиками SDK исправлена. Вероятно исправление будет доступно пользователям SDK только в составе следующей версии КОМПАС-3D (V12)
Посоветую вам обратиться в техническую поддержку для получения исправленных модулей API5 или за рекомендациями о возможности получения точек опор через интерфейсы API7.

Xmanager

Спасибо всем, теперь жду ответа от техподдержки.
Жаль столько времени впустую убил, пока искал причину ошибки.