Перейти к публикации

Изучаем Toolkit


Sergey___1978

Рекомендованные сообщения



Еще не понятно в каких единицах эти кординаты заданы.

Вроде увеличиваешь х на 10, смещается не на 10, а на 4.2.

делаешь х=20, координата 8.4 полуается. Как будто бы пропорции соблюдаются, но в каких это единицах и почему когда х=0 и у=0, в ноль не становится не понятно.

Ссылка на сообщение
Поделиться на других сайтах

Еще не понятно в каких единицах эти кординаты заданы.

Не в процентах от размера листа?

Ссылка на сообщение
Поделиться на других сайтах

Ну даже если и в процентах, то почему когда задаю (0,0,0), то в начало системы координат листа не становится символ.

Кажется я понял его систему. Если формат будет квадратным, то только в таком случае при (0,0,0) будет в начале системы координат.

Будем проверять. Если это так, то сам наверно никогда бы не догадался.

Ссылка на сообщение
Поделиться на других сайтах

Почитайте в документации про системы координат модели, экрана, чертежа (кажется тоже есть). Там есть функции преобразования из одной системы в другую.

Ссылка на сообщение
Поделиться на других сайтах

Почитал и ничего не понял, зачем надо так все усложнять. Как я понял это 13 глава справки.

Ссылка на сообщение
Поделиться на других сайтах

Глава

Core: Coordinate Systems and Transformations

Я, честно говоря, сам плохо понимаю эту тему, каким-то чудесным образом, методом научного тыка добился нужного результата. Кажется я там инвертировал матрицу системы координат, вобщем пробуйте...

Ссылка на сообщение
Поделиться на других сайтах

Именно с простановкой символов был результат или в чем то другом?

Что-то у меня чудесным образом не получается ничего сделать пока.

Будем ждать чудес.

Ссылка на сообщение
Поделиться на других сайтах

Короче повозился я с этими матрицами и векторами и понял только одно. А оно мне надо вообще? Все равно для каждого формата координаты будут разными, так проще подогнать их один раз для каждого формата хотя бы с точностью до сотых и решен вопрос. Символ попадет в нужное мне на форматке место.

Ссылка на сообщение
Поделиться на других сайтах

Не знаю на счет Toolkit,. НО что касается чертежей и форматов. То нулевая точка в них (форматах) вещь задаваемая. Так что очень сильно зависит где ее задать. У меня она например задана в нижнем левом углу формата...

Ссылка на сообщение
Поделиться на других сайтах

Именно с простановкой символов был результат или в чем то другом?

Что-то у меня чудесным образом не получается ничего сделать пока.

Будем ждать чудес.

Вставлял таблицу.

Чудес не надо ждать, их надо натворить :smile:

ProDrawingSheetTrfGet(*p_drawing, 1, sheet_size, transform);

ProUtilMatrixInvert(transform, transform_invert);

status = UserConfigoptGet("TOOL_TABLE_POSITION", str_coords, options);

if (status == PRO_TK_E_NOT_FOUND)

return (-1);

sscanf(str_coords, "%lf %lf", &drw_point[0], &drw_point[1]);

ProPntTrfEval(drw_point, transform_invert, scn_point);

status = ProDwgtableRetrieve(*p_drawing, w_table_name, exec_path_dir, 0, scn_point, NULL, NULL, p_tool_table);

Ссылка на сообщение
Поделиться на других сайтах

Чудеса, да и только, все заработало, спасибейше огромное VIKTOR.

Вся загвоздка и правда только в этой строке заключалась:

ProUtilMatrixInvert(transform, transform_invert);

Когда нашел пример для установки таблицы на чертеж по координатам сразу стало все понятно как трансформировать координаты.

Ссылка на сообщение
Поделиться на других сайтах

Еще вопрос по примеру с таблицей.

Пытаюсь скомпилировать пример из тулкита. Компилятор ругается на эти строки:

/*--------------------------------------------------------------------*\

Get the root solid, and the transform from the root to the

component owning the csys

\*--------------------------------------------------------------------*/

if (csys_comppath.table_num>0)

{

solid = csys_comppath.owner;

ProAsmcomppathTrfGet(&csys_comppath, PRO_B_FALSE, trf);

}

else

{

solid = csys_geom.owner;

ProUtilMatrixCopy(NULL, trf);

}

а конкретно на: solid = csys_geom.owner;

Пишет:

.\ex1.cpp(1028) : error C2440: '=' : cannot convert from 'ProMdl' to 'ProSolid'

Conversion from 'void*' to pointer to non-'void' requires an explicit cast

Это же пример, неужели там ошибка?

Ссылка на сообщение
Поделиться на других сайтах

Попробуй неявное перевод

solid = (ProSolid)csys_geom.owner

Например

error = ProModelitemInit((ProMdl)drawing,,,,,,,

еще

error = ProDwgtableRetrieve((ProDrawing)drawing,

w_name, w_path, ver, point,(ProSolid) mdl, NULL, &table);

точно не помню но в чертежах подобное преобразование применял из солида в чертеж.

Ссылка на сообщение
Поделиться на других сайтах

Не могу понять почему?

Применяю вот такую команду для удаления листа чертежа:

ProDrawingSheetDelete(drawing1,del_sheet);

Все нормально удаляется, но если на данном листе что-то выделено, прое вылетает в аут.

Что это может быть?

Полный код функции такой:

int Format_Del_Sheet()

{

ProDrawing drawing1;

int del_sheet=0;

ProMdlCurrentGet((ProMdl*)&drawing1);

ProDrawingCurrentSheetGet(drawing1,&del_sheet);

ProDrawingSheetDelete(drawing1,del_sheet);

return(0);

}

Ссылка на сообщение
Поделиться на других сайтах

Еще один вопрос над которым бьюсь уже не один день.

Имеем сборку из нескольких деталей.

Параметры подсборок и деталей, которые принадлежат им самим научился читать и записывать, а вот с параметрами компонентов сборки, которые принадлежат сборке (локальные параметры) что-то ничего не получается.

Может кто сталкивался?

Ссылка на сообщение
Поделиться на других сайтах

Еще один вопрос над которым бьюсь уже не один день.

Имеем сборку из нескольких деталей.

Параметры подсборок и деталей, которые принадлежат им самим научился читать и записывать, а вот с параметрами компонентов сборки, которые принадлежат сборке (локальные параметры) что-то ничего не получается.

Может кто сталкивался?

Надо для сборки использовать

ProSolidFeatVisit

Фильтр

extern "C" ProError CompFilter (ProFeature *feature, ProAppData app_data)

{

ProError status;

ProFeattype ftype;

/*----------------------------------------------------------------*\

Get the feature type

\*----------------------------------------------------------------*/

status = ProFeatureTypeGet (feature, &ftype);

/*----------------------------------------------------------------*\

If the feature is an assembly component,

return NO ERROR,

else

return CONTINUE

\*----------------------------------------------------------------*/

if (ftype == PRO_FEAT_COMPONENT)

return (PRO_TK_NO_ERROR);

return (PRO_TK_CONTINUE);

}

Ну а когда пробегаем по списку элементов проверяем и зачитываем или создаем

ProModelitemInit(p_asm_par, feature->id, PRO_FEATURE, &p_modelitem);

ProAsmcompMdlGet (feature , &mdl);

ProMdlDataGet (mdl, &mdldata);

wcscpy(full_name, mdldata.name);

wcscat(full_name, L".");

wcscat(full_name, mdldata.type);

if (wcscmp(full_name, name_component)==0)

{

value.type = PRO_PARAM_STRING;

wcscpy(value.value.s_val, val_poz);//передаем номер позиции

param.type = PRO_PARAMETER;

param.owner.who.model = &p_asm_par;

status = ProParameterInit (&p_modelitem, name_param, &param);

if (status == PRO_TK_E_NOT_FOUND)

{

status = ProParameterCreate (&p_modelitem, wname_par, &value, &param);

}

else

{

status = ProParameterValueSet (&param, &value);

}

///////////////////////////////////////

}

Если для конткретного компонента то тут нужен будет CID - идентификатор компонента.

Если CID известен то вот

extern "C" DllExport void AllComponentVisit(char* name_comp, char* poz, char* name_par, char* component_CID)

{

ProError err;

ProMdl model;

ProName w_name_comp;

ProName w_name_par;

ProName w_value_par;

ProModelitem component;

ProParameter param;

ProParamvalue p_value;

int comp_id;

ProMode mode;

ProDrawing drawing;

ProMdlType mdl_type;

comp_id = atoi(component_CID);

ProStringToWstring(w_name_comp, name_comp);

ProStringToWstring(w_name_par, name_par);

ProStringToWstring(w_value_par, poz);

err = ProModeCurrentGet(&mode);

if (mode == PRO_MODE_DRAWING)

{

err = ProMdlCurrentGet((ProMdl*)&drawing);

err = ProDrawingCurrentsolidGet(drawing, (ProSolid*)&model);

ProSolid *solids = NULL;

int num;

err = ProDrawingSolidsCollect (drawing, &solids);

if (err == PRO_TK_NO_ERROR)

{

err = ProArraySizeGet ((ProArray)solids, &num);

asem = solids[0];

err = ProMdlTypeGet (asem, &mdl_type);

if (err != PRO_TK_NO_ERROR || (mdl_type != PRO_MDL_ASSEMBLY))

{

MessageBox(NULL, L"Активная модель чертежа не является сборкой! Невозможно запустить приложение!", L"Предупреждение", MB_OK);

err = ProArrayFree ((ProArray*)&solids);

exit(0);

}

}

}

else

{

err = ProMdlCurrentGet(&model);

}

err = ProFeatureReadonlyUnset((ProSolid)model);

err = ProModelitemInit(model, comp_id, PRO_FEATURE, &component);

err = ProParamvalueSet(&p_value,&w_value_par,PRO_PARAM_STRING);

err = ProParameterInit(&component,w_name_par,&param);

if(err == PRO_TK_E_NOT_FOUND)

{

err=ProParameterCreate(&component,w_name_par,&p_value,&param);

}

if(err == PRO_TK_NO_ERROR)

{

err = ProParameterValueSet(&param, &p_value);

}

err = ProParameterDesignationAdd(&param);

}

Ну код старый если что лишнее - то звиняйте.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...