Community Tip - If community subscription notifications are filling up your inbox you can set up a daily digest and get all your notifications in a single email. X
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
Solved! Go to Solution.
Solved this issue by first creating dtm planes and then the coord using the following element tree:
wfcElements_ptr CreateFeature_7(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, "CS1", 1, newElems);
/* Element id: 2134 : PRO_E_CSYS_ORIGIN_CONSTRS */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTRS, 1, newElems);
/* Element id: 2135 : PRO_E_CSYS_ORIGIN_CONSTR */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTR, 2, newElems);
/* Element id: 2136 : PRO_E_CSYS_ORIGIN_CONSTR_REF */
localElem.CreateSelectionElem(PRO_E_CSYS_ORIGIN_CONSTR_REF, 3, Model, 1, 2, newElems);
/* Element id: 2135 : PRO_E_CSYS_ORIGIN_CONSTR */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTR, 2, newElems);
/* Element id: 2136 : PRO_E_CSYS_ORIGIN_CONSTR_REF */
localElem.CreateSelectionElem(PRO_E_CSYS_ORIGIN_CONSTR_REF, 3, Model, 1, 4, newElems);
/* Element id: 2135 : PRO_E_CSYS_ORIGIN_CONSTR */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTR, 2, newElems);
/* Element id: 2136 : PRO_E_CSYS_ORIGIN_CONSTR_REF */
localElem.CreateSelectionElem(PRO_E_CSYS_ORIGIN_CONSTR_REF, 3, Model, 1, 6, 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.CreateSelectionElem(PRO_E_CSYS_ORIENTSELAXIS1_REF, 1, Model, 1, 2, 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.CreateSelectionElem(PRO_E_CSYS_ORIENTSELAXIS2_REF, 1, Model, 1, 4, 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, 1, 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);
}
Thanks to everyone who participate in helping me out!
Regards
Daniel
wfcElements_ptr CreateDefaultCoord(pfcModel_ptr Model)
this one is questionable - returning a pointer to an object which supposedly keeps a record of its references, while the pointed object goes out of scope...
CreateElem localElem;
this one is also questionable - some kind of a 'helper' instance initiated on stack. Impossible to know if it is doing what it should be doing...
would be a good idea to serialize elementTree after this call:
wfcElementTree_ptr elementTree = session->CreateElementTree(elements);
to see if a tree was populated and if it was a valid one.
also, enum's are from pro/toolkit and the code looks like it had been written in otk_cpp style.
Your first point might have something to do with it, but my hesitation to believe so is that the code you've mentioned is created by PTC.
Removing
CreateElem localElem;
Equals the same error.
A deserialized version looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<PRO_E_FEATURE_TREE AppName="Pro/ENGINEER" AppVersion="6.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ProTKFeature.xsd" type="compound">
<PRO_E_FEATURE_TYPE type="int">PRO_FEAT_CSYS</PRO_E_FEATURE_TYPE>
<PRO_E_STD_FEATURE_NAME type="wstring">CS0</PRO_E_STD_FEATURE_NAME>
<PRO_E_CSYS_ORIGIN_CONSTRS type="array">
</PRO_E_CSYS_ORIGIN_CONSTRS>
<PRO_E_CSYS_OFFSET_TYPE type="int">0</PRO_E_CSYS_OFFSET_TYPE>
<PRO_E_CSYS_ONSURF_TYPE type="int">0</PRO_E_CSYS_ONSURF_TYPE>
<PRO_E_CSYS_DIM_CONSTRS type="array">
</PRO_E_CSYS_DIM_CONSTRS>
<PRO_E_CSYS_ORIENTMOVES type="array">
</PRO_E_CSYS_ORIENTMOVES>
<PRO_E_CSYS_NORMAL_TO_SCREEN type="int">0</PRO_E_CSYS_NORMAL_TO_SCREEN>
<PRO_E_CSYS_ORIENT_BY_METHOD type="int">0</PRO_E_CSYS_ORIENT_BY_METHOD>
<PRO_E_CSYS_ORIENTSELAXIS1_REF></PRO_E_CSYS_ORIENTSELAXIS1_REF>
<PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT>
<PRO_E_CSYS_ORIENTSELAXIS1_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_OPT>
<PRO_E_CSYS_ORIENTSELAXIS1_FLIP type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_FLIP>
<PRO_E_CSYS_ORIENTSELAXIS2_REF></PRO_E_CSYS_ORIENTSELAXIS2_REF>
<PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_FLIP type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_FLIP>
<PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_ROT type="double">0.000000</PRO_E_CSYS_ORIENTSELAXIS2_ROT>
<PRO_E_CSYS_TYPE_MECH type="int">0</PRO_E_CSYS_TYPE_MECH>
<PRO_E_CSYS_FOLLOW_SRF_OPT type="int">0</PRO_E_CSYS_FOLLOW_SRF_OPT>
<PRO_E_CSYS_NAME_DISPLAY_OPT type="int">1</PRO_E_CSYS_NAME_DISPLAY_OPT>
<PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT type="int">0</PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT>
<PRO_E_CSYS_AXIS_LENGTH type="double">0.000000</PRO_E_CSYS_AXIS_LENGTH>
</PRO_E_FEATURE_TREE>
Further details are that the error is of class pfcXToolkitGeneralError.
PRO_E_CSYS_ORIENTSELAXIS1_REF and PRO_E_CSYS_ORIENTSELAXIS2_REF must have 'selection' type in XML.
The shown XML output had listed them as 'null'
I would check this statement.
/* Element id: 2142 : PRO_E_CSYS_ORIENTSELAXIS1_REF */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIENTSELAXIS1_REF, 1, newElems);
This code does not match what the equivalent Pro/Toolkit code would or should be doing behind the scenes.
In Pro/Toolkit those elements should be created with ProElementReferenceSet with ProReference ref = NULL; (in versions prior to Creo 4 one would need to allocate ref with ProReferenceAlloc(&ref); as well).
HIH.
Well identified, I've observed a difference between what the
<?xml version="1.0" encoding="UTF-8"?>
<PRO_E_FEATURE_TREE AppName="Pro/ENGINEER" AppVersion="6.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ProTKFeature.xsd" type="compound">
<PRO_E_FEATURE_TYPE type="int">PRO_FEAT_CSYS</PRO_E_FEATURE_TYPE>
<PRO_E_STD_FEATURE_NAME type="wstring">DEFAULT</PRO_E_STD_FEATURE_NAME>
<PRO_E_CSYS_ORIGIN_CONSTRS type="array">
</PRO_E_CSYS_ORIGIN_CONSTRS>
<PRO_E_CSYS_OFFSET_TYPE type="int">0</PRO_E_CSYS_OFFSET_TYPE>
<PRO_E_CSYS_ONSURF_TYPE type="int">0</PRO_E_CSYS_ONSURF_TYPE>
<PRO_E_CSYS_DIM_CONSTRS type="array">
</PRO_E_CSYS_DIM_CONSTRS>
<PRO_E_CSYS_ORIENTMOVES type="array">
</PRO_E_CSYS_ORIENTMOVES>
<PRO_E_CSYS_NORMAL_TO_SCREEN type="int">0</PRO_E_CSYS_NORMAL_TO_SCREEN>
<PRO_E_CSYS_ORIENT_BY_METHOD type="int">0</PRO_E_CSYS_ORIENT_BY_METHOD>
<PRO_E_CSYS_ORIENTSELAXIS1_REF type="selection"></PRO_E_CSYS_ORIENTSELAXIS1_REF>
<PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT>
<PRO_E_CSYS_ORIENTSELAXIS1_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_OPT>
<PRO_E_CSYS_ORIENTSELAXIS1_FLIP type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_FLIP>
<PRO_E_CSYS_ORIENTSELAXIS2_REF type="selection"></PRO_E_CSYS_ORIENTSELAXIS2_REF>
<PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_FLIP type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_FLIP>
<PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_ROT type="double">0.000000</PRO_E_CSYS_ORIENTSELAXIS2_ROT>
<PRO_E_CSYS_TYPE_MECH type="int">0</PRO_E_CSYS_TYPE_MECH>
<PRO_E_CSYS_FOLLOW_SRF_OPT type="int">0</PRO_E_CSYS_FOLLOW_SRF_OPT>
<PRO_E_CSYS_NAME_DISPLAY_OPT type="int">1</PRO_E_CSYS_NAME_DISPLAY_OPT>
<PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT type="int">0</PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT>
<PRO_E_CSYS_AXIS_LENGTH type="double">0.000000</PRO_E_CSYS_AXIS_LENGTH>
</PRO_E_FEATURE_TREE>
If this is then loaded with CreateElementTreeFromXML() and saved with WriteElementTreeToFile() the following is written:
<?xml version="1.0" encoding="UTF-8"?>
<PRO_E_FEATURE_TREE AppName="Pro/ENGINEER" AppVersion="6.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ProTKFeature.xsd" type="compound">
<PRO_E_FEATURE_TYPE type="int">PRO_FEAT_CSYS</PRO_E_FEATURE_TYPE>
<PRO_E_STD_FEATURE_NAME type="wstring">DEFAULT</PRO_E_STD_FEATURE_NAME>
<PRO_E_CSYS_ORIGIN_CONSTRS type="array">
</PRO_E_CSYS_ORIGIN_CONSTRS>
<PRO_E_CSYS_OFFSET_TYPE type="int">0</PRO_E_CSYS_OFFSET_TYPE>
<PRO_E_CSYS_ONSURF_TYPE type="int">0</PRO_E_CSYS_ONSURF_TYPE>
<PRO_E_CSYS_DIM_CONSTRS type="array">
</PRO_E_CSYS_DIM_CONSTRS>
<PRO_E_CSYS_ORIENTMOVES type="array">
</PRO_E_CSYS_ORIENTMOVES>
<PRO_E_CSYS_NORMAL_TO_SCREEN type="int">0</PRO_E_CSYS_NORMAL_TO_SCREEN>
<PRO_E_CSYS_ORIENT_BY_METHOD type="int">0</PRO_E_CSYS_ORIENT_BY_METHOD>
<PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_REF_OPT>
<PRO_E_CSYS_ORIENTSELAXIS1_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_OPT>
<PRO_E_CSYS_ORIENTSELAXIS1_FLIP type="int">0</PRO_E_CSYS_ORIENTSELAXIS1_FLIP>
<PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_REF_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_FLIP type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_FLIP>
<PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT type="int">0</PRO_E_CSYS_ORIENTSELAXIS2_ROT_OPT>
<PRO_E_CSYS_ORIENTSELAXIS2_ROT type="double">0.000000</PRO_E_CSYS_ORIENTSELAXIS2_ROT>
<PRO_E_CSYS_TYPE_MECH type="int">0</PRO_E_CSYS_TYPE_MECH>
<PRO_E_CSYS_FOLLOW_SRF_OPT type="int">0</PRO_E_CSYS_FOLLOW_SRF_OPT>
<PRO_E_CSYS_NAME_DISPLAY_OPT type="int">1</PRO_E_CSYS_NAME_DISPLAY_OPT>
<PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT type="int">0</PRO_E_CSYS_DISPLAY_ZOOM_DEP_OPT>
<PRO_E_CSYS_AXIS_LENGTH type="double">0.000000</PRO_E_CSYS_AXIS_LENGTH>
</PRO_E_FEATURE_TREE>
But I cant verify if this is the root cause.
You try this, with an empty part? I guess this feature requires to be in insert mode (if the part is not empty), and it should be feature #1. And the feature name needs to be unique as well, only to be mentioned.
This is done with a empty part, so the feature should be unique.
@Daniel wrote:
This is done with a empty part, so the feature should be unique.
write a default csys feature tree into an xml file. Make a datum plane in an empty part and add a default csys after the plane with CreateElementTreeFromXML(...) . Delete the plane.
Did you succeeded doing this programatically? I tried it and it work with creating the dtm planes, but it still crashes at the creation of the dtm CSYS.
works fine using Pro/Toolkit API's...
Solved this issue by first creating dtm planes and then the coord using the following element tree:
wfcElements_ptr CreateFeature_7(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, "CS1", 1, newElems);
/* Element id: 2134 : PRO_E_CSYS_ORIGIN_CONSTRS */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTRS, 1, newElems);
/* Element id: 2135 : PRO_E_CSYS_ORIGIN_CONSTR */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTR, 2, newElems);
/* Element id: 2136 : PRO_E_CSYS_ORIGIN_CONSTR_REF */
localElem.CreateSelectionElem(PRO_E_CSYS_ORIGIN_CONSTR_REF, 3, Model, 1, 2, newElems);
/* Element id: 2135 : PRO_E_CSYS_ORIGIN_CONSTR */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTR, 2, newElems);
/* Element id: 2136 : PRO_E_CSYS_ORIGIN_CONSTR_REF */
localElem.CreateSelectionElem(PRO_E_CSYS_ORIGIN_CONSTR_REF, 3, Model, 1, 4, newElems);
/* Element id: 2135 : PRO_E_CSYS_ORIGIN_CONSTR */
localElem.CreateCompoundElem(PRO_E_CSYS_ORIGIN_CONSTR, 2, newElems);
/* Element id: 2136 : PRO_E_CSYS_ORIGIN_CONSTR_REF */
localElem.CreateSelectionElem(PRO_E_CSYS_ORIGIN_CONSTR_REF, 3, Model, 1, 6, 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.CreateSelectionElem(PRO_E_CSYS_ORIENTSELAXIS1_REF, 1, Model, 1, 2, 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.CreateSelectionElem(PRO_E_CSYS_ORIENTSELAXIS2_REF, 1, Model, 1, 4, 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, 1, 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);
}
Thanks to everyone who participate in helping me out!
Regards
Daniel