Community Tip - Did you get called away in the middle of writing a post? Don't worry you can find your unfinished post later in the Drafts section of your profile page. X
Hi All,
I have a model in which no default coordinate system present.
Is there any way to get or create default coordinate system(global coordinate system) using toolkit API?
There is not direct API / function to create a CSYS with Toolkit.
When you search create CSYS toolkit in the knowledge one can find this article :
https://www.ptc.com/en/support/article?n=CS221868
Basically the methodology relies on Element Tree.
in case lots of low level code is not your thing here are some options:
ProMacroLoad( L"~ Command `ProCmdDefDatumCsys`");
ProMacroExecute(); would get you default coordinate systems...
Otherwise making a UDF from default csys feature and using ProUdfCreate(...) would require less code...
Another option is to make an XML out of a default csys elemtree and to use it with ProElemtreeFromXMLCreate(...) - still less typing and code maintenance...
HIH.
FV.
To top your valid suggestions and help the questioner ponder:
Up to you to pick the appropriate solution.
An Example for the Element Tree Method:
int createACoordinateSystem_first_try = 1;
void createACoordinateSystem(ProFeature * feat) {
	ProElement pro_e_feature_tree, pro_e_feature_type, pro_e_csys_method, pro_e_std_feature_name;
	ProErrorlist errs;
	ProError tkerr;
	ProValueData value_data;
	ProValue value;
	ProFeatureCreateOptions opts[1];
	ProName wide_string = L"";
	ProModelitem p_mdl_itm;
	ProSelection sel;
	wcscpy_s(wide_string, PRO_NAME_SIZE, L"NAME");
	ProElementAlloc(PRO_E_FEATURE_TREE, &pro_e_feature_tree);
	ProElementAlloc(PRO_E_FEATURE_TYPE, &pro_e_feature_type);
	value_data.type = PRO_VALUE_TYPE_INT;
	value_data.v.i = PRO_FEAT_CSYS; /* 979 */ 
	ProValueAlloc(&value);
	ProValueDataSet ( value, &value_data );
	ProElementValueSet ( pro_e_feature_type, value );
	ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_feature_type );
	ProElementAlloc ( PRO_E_STD_FEATURE_NAME, &pro_e_std_feature_name ); 
	value_data.type = PRO_VALUE_TYPE_WSTRING;
	value_data.v.w = wide_string;
	ProValueAlloc ( &value );
	ProValueDataSet ( value, &value_data );
	ProElementValueSet ( pro_e_std_feature_name, value );
	ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_std_feature_name );
	ProElementAlloc(PRO_E_CSYS_METHOD, &pro_e_csys_method);
	value_data.type = PRO_VALUE_TYPE_INT;
	value_data.v.i = PRO_CSYS_DEFAULT;
	ProValueAlloc(&value);
	ProValueDataSet ( value, &value_data );
	ProElementValueSet ( pro_e_csys_method, value );
	ProElemtreeElementAdd ( pro_e_feature_tree, NULL, pro_e_csys_method );
	
	opts[0] = PRO_FEAT_CR_DEFINE_MISS_ELEMS;
	tkerr = ProMdlToModelitem(addFirstKEsFeatureVisitModel, &p_mdl_itm);
	tkerr = ProSelectionAlloc(NULL, &p_mdl_itm, &sel);
	tkerr = ProFeatureCreate(sel, pro_e_feature_tree, opts, 1, feat, &errs);
	if (tkerr != PRO_TK_NO_ERROR) {
		if (createACoordinateSystem_first_try == 1) {
			// Can't create the coordinate system at first
			createACoordinateSystem_first_try --;
		} else {
			// Can't create the coordinate system
		}
	}
	ProSelectionFree(&sel);
	ProElementFree(&pro_e_feature_tree);
}
Br,
Eike
Eike,
Are you sure this code is valid for wildfire and creo releases?
PRO_E_CSYS_METHOD element had been obsolete for quite some time now...
Below is a feature tree for default csys (creo variety).
😀FV.
Element tree
============
FEATURE_TREE   (COMPOUND) 
 |---FEATURE_TYPE  VALUE (INT)       = 979
 |---STD_FEATURE_NAME  VALUE (WSTRING)   = CS1
 |---CSYS_ORIGIN_CONSTRS   (ARRAY) 
 |---CSYS_OFFSET_TYPE  VALUE (INT)       = 0
 |---CSYS_ONSURF_TYPE  VALUE (INT)       = 0
 |---CSYS_DIM_CONSTRS   (ARRAY) 
 |---CSYS_ORIENTMOVES   (ARRAY) 
 |---CSYS_NORMAL_TO_SCREEN  VALUE (INT)       = 0
 |---CSYS_ORIENT_BY_METHOD  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS1_REF  VALUE (SELECTION) = 
 |---CSYS_ORIENTSELAXIS1_REF_OPT  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS1_OPT  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS1_FLIP  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS2_REF  VALUE (SELECTION) = 
 |---CSYS_ORIENTSELAXIS2_REF_OPT  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS2_OPT  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS2_FLIP  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS2_ROT_OPT  VALUE (INT)       = 0
 |---CSYS_ORIENTSELAXIS2_ROT  VALUE (DOUBLE)    = 0.000000
 |---CSYS_TYPE_MECH  VALUE (INT)       = 0
 |---CSYS_FOLLOW_SRF_OPT  VALUE (INT)       = 0
 |---CSYS_NAME_DISPLAY_OPT  VALUE (INT)       = 1
 |---CSYS_DISPLAY_ZOOM_DEP_OPT  VALUE (INT)       = 0
 |---CSYS_AXIS_LENGTH  VALUE (DOUBLE)    = 0.000000
Just copied it from some old code, tested it with a new Creo-Version but didn't update it ^.^ It works for my case but isn't secure to run.
Thanks Felkis.
Br,
Eike
Might be easier to fire off a Mapkey to get that done.
 
					
				
				
			
		
