Skip to main content
1-Visitor
January 16, 2020
Question

Is there any creo toolkit API to create default coordinate system (global coordinate system)?

  • January 16, 2020
  • 2 replies
  • 2774 views

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?

2 replies

21-Topaz I
January 16, 2020

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. 

17-Peridot
January 16, 2020

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.

15-Moonstone
January 17, 2020

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

17-Peridot
January 16, 2020

Might be easier to fire off a Mapkey to get that done.