Creo Object Toolkit, WCreateFeature
Hello,
I'm trying to perform a simple feature creation opertaion using the wfcWSolid::WCreateFeature function in otk.
The feature element tree has been generated using the cxx element tree generator provided by PTC and is meant to create a default coordinate system in a part. Here is the element tree def:
wfcElements_ptr CreateDefaultCoord(pfcModel_ptr Model)
{
wfcElements_ptr newElems = new wfcElements();
wfcElement_ptr newElem;
CreateElem localElem;
otkxEnums localEnum;
CollectionHelpers localCollnHelper;
/* Element id: 386 : PRO_E_FEATURE_TREE */
localElem.CreateCompoundElem(PRO_E_FEATURE_TREE, 0, newElems);
/* Element id: 387 : PRO_E_FEATURE_TYPE */
localElem.CreateIntegerElem(PRO_E_FEATURE_TYPE, 979, 1, newElems);
/* Element id: 1964 : PRO_E_STD_FEATURE_NAME */
localElem.CreateStringElem(PRO_E_STD_FEATURE_NAME, "CS0", 1, newElems);
/* Element id: 2134 : PRO_E_CSYS_ORIGIN_CONSTRS */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTRS, 1, newElems);
/* Element id: 2147 : PRO_E_CSYS_OFFSET_TYPE */
localElem.CreateIntegerElem(PRO_E_CSYS_OFFSET_TYPE, 0, 1, newElems);
/* Element id: 3953 : PRO_E_CSYS_ONSURF_TYPE */
localElem.CreateIntegerElem(PRO_E_CSYS_ONSURF_TYPE, 0, 1, newElems);
/* Element id: 3954 : PRO_E_CSYS_DIM_CONSTRS */
localElem.CreateCompoundElem(PRO_E_CSYS_DIM_CONSTRS, 1, newElems);
/* Element id: 2137 : PRO_E_CSYS_ORIENTMOVES */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIENTMOVES, 1, newElems);
/* Element id: 3054 : PRO_E_CSYS_NORMAL_TO_SCREEN */
localElem.CreateIntegerElem(PRO_E_CSYS_NORMAL_TO_SCREEN, 0, 1, newElems);
/* Element id: 3050 : PRO_E_CSYS_ORIENT_BY_METHOD */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENT_BY_METHOD, 0, 1, newElems);
/* Element id: 2142 : PRO_E_CSYS_ORIENTSELAXIS1_REF */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIENTSELAXIS1_REF, 1, newElems);
/* Element id: 3167 : PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT, 0, 1, newElems);
/* Element id: 2143 : PRO_E_CSYS_ORIENTSELAXIS1_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS1_OPT, 0, 1, newElems);
/* Element id: 3052 : PRO_E_CSYS_ORIENTSELAXIS1_FLIP */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS1_FLIP, 0, 1, newElems);
/* Element id: 2144 : PRO_E_CSYS_ORIENTSELAXIS2_REF */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIENTSELAXIS2_REF, 1, newElems);
/* Element id: 3168 : PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT, 0, 1, newElems);
/* Element id: 2145 : PRO_E_CSYS_ORIENTSELAXIS2_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS2_OPT, 0, 1, newElems);
/* Element id: 3053 : PRO_E_CSYS_ORIENTSELAXIS2_FLIP */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS2_FLIP, 0, 1, newElems);
/* Element id: 4123 : PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT, 0, 1, newElems);
/* Element id: 4124 : PRO_E_CSYS_ORIENTSELAXIS2_ROT */
localElem.CreateDoubleElem(PRO_E_CSYS_ORIENTSELAXIS2_ROT, 0, 1, newElems);
/* Element id: 3051 : PRO_E_CSYS_TYPE_MECH */
localElem.CreateIntegerElem(PRO_E_CSYS_TYPE_MECH, 0, 1, newElems);
/* Element id: 3932 : PRO_E_CSYS_FOLLOW_SRF_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_FOLLOW_SRF_OPT, 0, 1, newElems);
/* Element id: 6133 : PRO_E_CSYS_NAME_DISPLAY_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_NAME_DISPLAY_OPT, 1, 1, newElems);
/* Element id: 6140 : PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT */
localElem.CreateIntegerElem(PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT, 0, 1, newElems);
/* Element id: 6139 : PRO_E_CSYS_AXIS_LENGTH */
localElem.CreateDoubleElem(PRO_E_CSYS_AXIS_LENGTH, 0, 1, newElems);
return (newElems);
}
Below is the remaining code for creating the element tree and adding it to a part solid. The issue is that this code crashes at the WCreateFeature line:
...
part = pfcPart::cast(wfcGetObjectFromHandle(wfcProMdlHandle, (void*)pro_part));
pfcModel_ptr model = pfcModel::cast(part);
wfcWSolid_ptr wSolid_ptr = wfcWSolid::cast(model);
#pragma endregion
#pragma region Create Coordinate System
wfcFeatCreateOptions_ptr featOpts = wfcFeatCreateOptions::create();
featOpts->append(wfcFeatCreateOption_nil);
wfcWRegenInstructions_ptr regenInstr = wfcWRegenInstructions::Create();
wfcElements_ptr elements = CreateDefaultCoord(model);
wfcElementTree_ptr elementTree = session->CreateElementTree(elements);
try
{
wfcWFeature_ptr feature = wSolid_ptr->WCreateFeature(elementTree, featOpts, regenInstr); <-- Crash
}
catch (const std::exception& e)
{
throw e;
}
...
Do you have any idea of why this does not work?
Kind Regards
Daniel
