/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
FILE : UgCreoSweepCreate.c
PURPOSE : This example shows how to create Sweep using new element tree introduced
in Creo 1.0. Element tree is documented in ProSweep.h
Example uses a dashboard to take necessary inputs required for
elements. Initially all non-sketcher elements are filled to create
incomplete feature & then feature is redefined with section added to
element PRO_E_SKECTHER
To run this example model must be current part or assembly
#include <UgCreoSweepCreate.h>
#define sweep_create_log(call) ProTKPrintf ("Status for %s is = %d\n", call, status);
static OtkSweepElemtreeValues elemValues;
static FILE* sweep_create_logfile=NULL;
static ProFileName sweep_msgfilename;
/*********************************************/
ProError UgCreoSweepCreate ()
{
ProError status=PRO_TK_NO_ERROR;
ProUIDashboardShowOptions options;
ProMdl currModel;
ProMdlType mdlType;
sweep_create_logfile = fopen("Create_Creo_Sweep.log","w");
status = ProMdlCurrentGet(&currModel);
sweep_create_log("ProMdlCurrentGet");
if(!currModel)
{
ProStringToWstring(sweep_msgfilename,"msg_ugfeatcreat.txt");
status = ProMessageDisplay(sweep_msgfilename,"USER Bad Context:");
sweep_create_log("ProMessageDisplay");
return PRO_TK_BAD_CONTEXT;
}
status = ProMdlTypeGet(currModel,&mdlType);
sweep_create_log("ProMdlTypeGet");
if((mdlType != PRO_MDL_ASSEMBLY) && (mdlType != PRO_MDL_PART))
{
status = ProMessageDisplay(sweep_msgfilename,"USER Invalid Type :");
sweep_create_log("ProMessageDisplay");
return PRO_TK_BAD_CONTEXT;
}
else
{
/*Fill default values*/
elemValues.curvesCollected=0;
elemValues.dirReferselected=1;
strcpy(elemValues.PRO_E_STD_FEATURE_NAME_value ,"Creo Sweep");
elemValues.PRO_E_EXT_SURF_CUT_SOLID_TYPE_value = PRO_SWEEP_FEAT_TYPE_SOLID;
elemValues.PRO_E_FRM_NORMAL_value = PRO_FRAME_NORM_ORIGIN;
elemValues.PRO_E_FRM_USER_X_value = 0;
status = UgSweepAppDashboardOptionsSetup (L"TK_Dashboard", 2, UgSweepAppSetupAllPagesFromFile,NULL,&options);
if(status==PRO_TK_NO_ERROR)
status = ProUIDashboardShow (options);
}
fclose(sweep_create_logfile);
return PRO_TK_NO_ERROR;
}
ProError UgSweepAppBuildElementTree ()
{
ProError status=PRO_TK_NO_ERROR;
ProElement elem_0_0,elem_1_1,elem_1_2,elem_1_3;
ProElement elem_2_0,elem_3_0,elem_4_0,elem_4_1,elem_5_0,elem_2_1;
ProElement elem_3_1,elem_3_2 = NULL,elem_4_2,elem_5_1,elem_5_2;
ProElement elem_1_4,elem_1_5,elem_1_6,elem_1_7,elem_1_8;
ProElement elem_2_2,elemtree,elem_3_3,elem_3_4,elem_3_5;
ProFeature tk_feat;
ProMdl currMdl;
ProSelection mdlSel;
ProModelitem currMdlitem;
ProFeatureCreateOptions *cr_opts=NULL;
ProFeatureCreateOptions complete_options[] = {PRO_FEAT_CR_INCOMPLETE_FEAT};
ProErrorlist p_errors;
ProElempath elemPath;
ProElempathItem sktElempathitems[]= {
{PRO_ELEM_PATH_ITEM_TYPE_ID,PRO_E_SWEEP_PROF_COMP},
{PRO_ELEM_PATH_ITEM_TYPE_ID,PRO_E_SWEEP_SECTION},
{PRO_ELEM_PATH_ITEM_TYPE_ID,PRO_E_SKETCHER}
};
ProSection sketch;
ProElement sketch_elem;
ProBoolean is_incomplete=PRO_B_FALSE;
wchar_t temp_feat_name[PRO_NAME_SIZE];
/*PRO_E_FEATURE_TREE */
status = ProElementAlloc(PRO_E_FEATURE_TREE,&elem_0_0);
sweep_create_log("ProElementAlloc");
/*PRO_E_FEATURE_FORM*/
status = ProElementAlloc(PRO_E_FEATURE_FORM,&elem_1_1);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_1_1,4);
sweep_create_log("ProElementIntegerSet");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_1);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_SWEEP_TYPE*/
status = ProElementAlloc(PRO_E_SWEEP_TYPE,&elem_1_2);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_1_2,PRO_SWEEP_TYPE_MULTI_TRAJ);
sweep_create_log("ProElementIntegerSet");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_2);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_SWEEP_FRAME_COMP*/
status = ProElementAlloc(PRO_E_SWEEP_FRAME_COMP,&elem_1_3);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_3);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_FRM_OPT_TRAJ*/
status = ProElementAlloc(PRO_E_FRM_OPT_TRAJ,&elem_2_0);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_2_0);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_OPT_TRAJ*/
status = ProElementAlloc(PRO_E_OPT_TRAJ,&elem_3_0);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_2_0,NULL,elem_3_0);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_STD_SEC_METHOD*/
status = ProElementAlloc(PRO_E_STD_SEC_METHOD,&elem_4_0);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_4_0,PRO_SEC_SELECT);
sweep_create_log("ProElementIntegerSet");
status = ProElemtreeElementAdd(elem_3_0,NULL,elem_4_0);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_STD_SEC_SELECT*/
status = ProElementAlloc(PRO_E_STD_SEC_SELECT,&elem_4_1);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_3_0,NULL,elem_4_1);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_STD_CURVE_COLLECTION_APPL*/
status = ProElementAlloc(PRO_E_STD_CURVE_COLLECTION_APPL,&elem_5_0);
sweep_create_log("ProElemtreeElementAdd");
status = ProElementCollectionSet(elem_5_0,elemValues.PRO_E_FRM_OPT_TRAJ_crvColl);
sweep_create_log("ProElementCollectionSet");
status = ProElemtreeElementAdd(elem_4_1,NULL,elem_5_0);
sweep_create_log("ProElemtreeElementAdd");
status = ProCollectionFree(&(elemValues.PRO_E_FRM_OPT_TRAJ_crvColl));
sweep_create_log("ProCollectionFree");
/*PRO_E_FRAME_SETUP*/
status = ProElementAlloc(PRO_E_FRAME_SETUP,&elem_2_1);
sweep_create_log("ProElemtreeElementAdd");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_2_1);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_FRM_NORMAL*/
status = ProElementAlloc(PRO_E_FRM_NORMAL,&elem_3_1);
sweep_create_log("ProElemtreeElementAdd");
status = ProElementIntegerSet(elem_3_1,elemValues.PRO_E_FRM_NORMAL_value);
sweep_create_log("ProElementIntegerSet");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_3_1);
sweep_create_log("ProElemtreeElementAdd");
if((elemValues.PRO_E_FRM_NORMAL_value==PRO_FRAME_PIVOT_DIR) || (elemValues.PRO_E_FRM_NORMAL_value==PRO_FRAME_CONST_Z_DIR))
{
if(elemValues.PRO_E_FRM_NORMAL_value==PRO_FRAME_PIVOT_DIR)
{
/*PRO_E_FRM_PIVOT_DIR*/
status = ProElementAlloc(PRO_E_FRM_PIVOT_DIR,&elem_3_2);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_3_2);
sweep_create_log("ProElemtreeElementAdd");
}
else if(elemValues.PRO_E_FRM_NORMAL_value==PRO_FRAME_CONST_Z_DIR)
{
/*PRO_E_FRM_CONST_Z*/
status = ProElementAlloc(PRO_E_FRM_CONST_Z,&elem_3_2);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_3_2);
sweep_create_log("ProElemtreeElementAdd");
}
/*PRO_E_DIRECTION_COMPOUND*/
status = ProElementAlloc(PRO_E_DIRECTION_COMPOUND,&elem_4_2);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_3_2,NULL,elem_4_2);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_DIRECTION_REFERENCE*/
status = ProElementAlloc(PRO_E_DIRECTION_REFERENCE,&elem_5_1);
sweep_create_log("ProElementAlloc");
status = ProElementReferenceSet(elem_5_1,elemValues.PRO_E_DIRECTION_REFERENCE_value);
sweep_create_log("ProElementReferenceSet");
status = ProElemtreeElementAdd(elem_4_2,NULL,elem_5_1);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_DIRECTION_FLIP*/
status = ProElementAlloc(PRO_E_DIRECTION_REFERENCE,&elem_5_2);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_5_1,PRO_DIRECTION_FLIP_ALONG );
sweep_create_log("ProElementReferenceSet");
status = ProElemtreeElementAdd(elem_4_2,NULL,elem_5_2);
sweep_create_log("ProElemtreeElementAdd");
}
/*PRO_E_FRM_ORIENT*/
status = ProElementAlloc(PRO_E_FRM_ORIENT,&elem_3_3);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_3_3);
sweep_create_log("ProElemtreeElementAdd");
if(elemValues.PRO_E_FRM_NORMAL_value=PRO_FRAME_PIVOT_DIR)
{
status = ProElementIntegerSet(elem_3_3,PRO_FRAME_CONSTANT);
sweep_create_log("ProElementReferenceSet");
}
else
{
status = ProElementIntegerSet(elem_3_3,PRO_FRAME_MIN);
sweep_create_log("ProElementReferenceSet");
//PRO_E_FRM_USER_X
status = ProElementAlloc(PRO_E_FRM_USER_X,&elem_3_4);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_3_4,elemValues.PRO_E_FRM_USER_X_value);
sweep_create_log("ProElementIntegerSet");
status = ProElemtreeElementAdd(elem_1_3,NULL,elem_3_4);
sweep_create_log("ProElemtreeElementAdd");
}
/*PRO_E_STD_FEATURE_NAME*/
status = ProElementAlloc(PRO_E_STD_FEATURE_NAME,&elem_1_4);
sweep_create_log("ProElementAlloc");
ProStringToWstring(temp_feat_name,elemValues.PRO_E_STD_FEATURE_NAME_value);
status = ProElementWstringSet(elem_1_4,temp_feat_name);
sweep_create_log("ProElementWstringSet");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_4);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_EXT_SURF_CUT_SOLID_TYPE*/
status = ProElementAlloc(PRO_E_EXT_SURF_CUT_SOLID_TYPE,&elem_1_5);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_1_5,elemValues.PRO_E_EXT_SURF_CUT_SOLID_TYPE_value);
sweep_create_log("ProElementWstringSet");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_5);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_REMOVE_MATERIAL*/
status = ProElementAlloc(PRO_E_REMOVE_MATERIAL,&elem_1_6);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_1_6,elemValues.PRO_E_REMOVE_MATERIAL_value);
sweep_create_log("ProElementWstringSet");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_6);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_FEAT_FORM_IS_THIN*/
status = ProElementAlloc(PRO_E_FEAT_FORM_IS_THIN,&elem_1_7);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_1_7,elemValues.PRO_E_FEAT_FORM_IS_THIN_value);
sweep_create_log("ProElementWstringSet");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_7);
sweep_create_log("ProElemtreeElementAdd");
/*PRO_E_SWP_ATTR*/
status = ProElementAlloc(PRO_E_SWP_ATTR,&elem_1_8);
sweep_create_log("ProElementAlloc");
status = ProElemtreeElementAdd(elem_0_0,NULL,elem_1_8);
sweep_create_log("ProElemtreeElementAdd");
if(elemValues.PRO_E_EXT_SURF_CUT_SOLID_TYPE_value=PRO_SWEEP_FEAT_TYPE_SURFACE )
{
/*PRO_E_END_SRF_ATTR*/
status = ProElementAlloc(PRO_E_END_SRF_ATTR,&elem_2_2);
sweep_create_log("ProElementAlloc");
status = ProElementIntegerSet(elem_2_2,elemValues.PRO_E_END_SRF_ATTR_value);
sweep_create_log("ProElementIntegerSet");
status = ProElemtreeElementAdd(elem_1_8,NULL,elem_2_2);
sweep_create_log("ProElemtreeElementAdd");
}
/*Create Incomplete feature */
status = ProArrayAlloc(0,sizeof(ProFeatureCreateOptions),1,(ProArray*)&cr_opts);
sweep_create_log("ProArrayAlloc");
status = ProArrayObjectAdd((ProArray*)&cr_opts,PRO_VALUE_UNUSED,1,(void*)&(complete_options[0]));
sweep_create_log("ProArrayObjectAdd");
status = ProMdlCurrentGet(&currMdl);
sweep_create_log("ProMdlCurrentGet");
status = ProMdlToModelitem(currMdl,&currMdlitem);
sweep_create_log("ProMdlToModelitem");
status = ProSelectionAlloc(NULL,&currMdlitem,&mdlSel);
sweep_create_log("ProSelectionAlloc");
status = ProFeatureWithoptionsCreate(mdlSel,elem_0_0,cr_opts,PRO_REGEN_NO_FLAGS,&tk_feat,&p_errors);
sweep_create_log("ProFeatureWithoptionsCreate");
/*Fill PRO_E_SKETCHER & Redfine feature*/
status = ProFeatureElemtreeExtract(&tk_feat,NULL,PRO_FEAT_EXTRACT_NO_OPTS,&elemtree);
sweep_create_log("ProFeatureElemtreeExtract");
status = ProElempathAlloc(&elemPath);
sweep_create_log("ProFeatureElemtreeExtract ");
status = ProElempathDataSet(elemPath,sktElempathitems,3);
sweep_create_log("ProFeatureElemtreeExtract ");
status = ProElemtreeElementGet(elemtree,elemPath,&sketch_elem);
sweep_create_log("ProFeatureElemtreeExtract ");
status = ProElementSpecialvalueGet(sketch_elem,NULL,(ProAppData*)&sketch);
sweep_create_log("ProFeatureElemtreeExtract ");
/* Adding a Circle and a Rectangle */
UgSweepAppAddRectangle (sketch,0);
UgSweepAppAddCircle (sketch);
status = ProFeatureWithoptionsRedefine( NULL,&tk_feat,elemtree,cr_opts,PRO_REGEN_NO_FLAGS,&p_errors);
sweep_create_log("ProFeatureWithoptionsRedefine ");
/*Add one more Rectangle */
UgSweepAppAddRectangle (sketch,30);
status = ProFeatureWithoptionsRedefine( NULL,&tk_feat,elemtree,cr_opts,PRO_REGEN_NO_FLAGS,&p_errors);
sweep_create_log("ProFeatureWithoptionsRedefine ");
/* Add a Ellipse */
UgSweepAppAddEllipse (sketch);
status = ProElementSpecialvalueSet(sketch_elem,(ProAppData)sketch);
sweep_create_log("ProElementSpecialvalueSet ");
status = ProFeatureWithoptionsRedefine( NULL,&tk_feat,elemtree,cr_opts,PRO_REGEN_NO_FLAGS,&p_errors);
sweep_create_log("ProFeatureWithoptionsRedefine ");
status = ProFeatureElemtreeExtract(&tk_feat,NULL,PRO_FEAT_EXTRACT_NO_OPTS,&elemtree);
sweep_create_log("ProFeatureElemtreeExtract ");
status = ProFeatureIsIncomplete(&tk_feat,&is_incomplete);
sweep_create_log("ProFeatureIsIncomplete ");
if(is_incomplete)
status = ProElemtreeWrite(elemtree,PRO_ELEMTREE_XML,L"./incomplete_tree.xml");
sweep_create_log("ProElemtreeWrite ");
status = ProElempathFree(&elemPath);
sweep_create_log("ProElempathFree ");
status = ProSectionFree(&sketch);
sweep_create_log("ProSectionFree ");
status = ProElementFree(&elemtree);
sweep_create_log("ProElementFree ");
status = ProArrayFree((ProArray*)&cr_opts);
sweep_create_log("ProElemtreeWrite ");
return status;
}
ProError UgSweepAppDashboardOptionsSetup (ProName dashboard_name,int num_slideup_panels,
UgSweepAppDashboardPageSetupProcedure procedure,
ProAppData app_data,ProUIDashboardShowOptions* p_options)
{
ProUIDashboardPageOptions main_page;
ProUIDashboardPageOptions *slideup_pages=NULL;
ProUIDashboardShowOptions options;
int ii=0;
ProError status = PRO_TK_NO_ERROR;
/* Setup main page */
(*procedure) (dashboard_name, 0, app_data, &main_page);
/* Setup slideup pages */
ProArrayAlloc (2, sizeof (ProUIDashboardPageOptions),2, (ProArray*)&slideup_pages);
(*procedure) (dashboard_name, 1, app_data, &(slideup_pages[0]));
(*procedure) (dashboard_name,2, app_data, &(slideup_pages[1]));
status = ProUIDashboardshowoptionsAlloc (main_page, slideup_pages, NULL, &options);
sweep_create_log("ProUIDashboardshowoptionsAlloc ");
status = ProUIDashboardshowoptionsTitleSet(options,L"Creo Sweep");
sweep_create_log("ProUIDashboardshowoptionsTitleSet ");
*p_options = options;
return (PRO_TK_NO_ERROR);
}
ProError UgSweepAppSetupAllPagesFromFile (ProName dashboard_name,
int page_no,
ProAppData appdata,
ProUIDashboardPageOptions* p_options)
{
ProCharLine page_name;
ProCharLine sec_resource_name;
ProUIDashboardPageOptions options;
ProError status = PRO_TK_NO_ERROR;
UgSweepAppDashboardPageData* page_data = (UgSweepAppDashboardPageData*)calloc (1, sizeof (UgSweepAppDashboardPageData));
page_data->action = (ProUIDashboardpageCallbackFunction)UgSweepAppPageWriteAction;
page_data->create_action = (ProUIDashboardpageCallbackFunction)NULL;
switch(page_no)
{
case 0:
page_data->create_action = (ProUIDashboardpageCallbackFunction)UgSweepDashboardMainPageSetup;
status = ProUIDashboardpageoptionsAlloc ("dashboard_main_page", "MainPage", page_data, &options);
sweep_create_log("ProUIDashboardpageoptionsAlloc ");
break;
case 1:
page_data->create_action = (ProUIDashboardpageCallbackFunction)UgSweepAppDashboardSlideupPageSetup;
status = ProUIDashboardpageoptionsAlloc ("dashboard_reference_page", "referenceSlidepage", page_data, &options);
sweep_create_log("ProUIDashboardpageoptionsAlloc ");
break;
case 2:
page_data->create_action = (ProUIDashboardpageCallbackFunction)UgSweepAppDashboardOptionPageSetup;
status = ProUIDashboardpageoptionsAlloc ("dashboard_options_page", "optionSlidepage", page_data, &options);
sweep_create_log("ProUIDashboardpageoptionsAlloc ");
break;
}
status = ProUIDashboardpageoptionsNotificationSet (options, (ProUIDashboardpageCallbackFunction)UgSweepStdDashboardPageNotification, appdata);
sweep_create_log("ProUIDashboardpageoptionsNotificationSet ");
*p_options = options;
return (PRO_TK_NO_ERROR);
}
/* Write the page details. */
ProError UgSweepAppPageWriteAction (ProUIDashboardPage page,ProUIDashboardPageEventType event_type,
ProAppData appdata)
{
ProAppData page_app_data;
UgSweepAppDashboardPageData* page_data=NULL;
ProAppData user_data;
ProUIDashboard dashboard;
ProError status = PRO_TK_NO_ERROR;
status = ProUIDashboardpageUserdataGet (page, &page_app_data);
sweep_create_log("ProUIDashboardpageUserdataGet ");
page_data = (UgSweepAppDashboardPageData*)page_app_data;
if (event_type == PRO_UI_DASHBOARD_PAGE_CREATE || event_type == PRO_UI_DASHBOARD_PAGE_SHOW)
{
if (page_data->create_action != (ProUIDashboardpageCallbackFunction)NULL)
(*(page_data->create_action)) (page, event_type, appdata);
}
if (event_type == PRO_UI_DASHBOARD_PAGE_DESTROY && appdata!=NULL)
{
if(page_data)
{
free(page_data);
}
}
return (PRO_TK_NO_ERROR);
}
ProError UgSweepStdDashboardPageNotification (ProUIDashboardPage page,ProUIDashboardPageEventType event_type,
ProAppData appdata)
{
ProAppData page_app_data;
UgSweepAppDashboardPageData* page_data;
ProError status;
status = ProUIDashboardpageUserdataGet (page, &page_app_data);
sweep_create_log("ProUIDashboardpageUserdataGet ")
page_data = (UgSweepAppDashboardPageData*)page_app_data;
(*page_data->action) (page, event_type, appdata);
return (PRO_TK_NO_ERROR);
}
ProError UgSweepDashboardMainPageSetup (ProUIDashboardPage page,ProUIDashboardEventType event_type,
ProAppData appdata)
{
char* device_name=NULL;
ProUIDashboard dashboard;
char* std_layout=NULL;
ProUIGridopts grid_opts;
ProError status = PRO_TK_NO_ERROR;
char* comp_dashname=NULL;
status = ProUIDashboardpageDevicenameGet (page, &device_name);
sweep_create_log("ProUIDashboardpageDevicenameGet ");
status = ProUIDashboardpageDashboardGet (page, &dashboard);
sweep_create_log("ProUIDashboardpageDashboardGet ");
status = ProUIDashboardStdlayoutGet (dashboard, &std_layout);
sweep_create_log("ProUIDashboardStdlayoutGet ");
elemValues.sweepDashboard = dashboard;
status = ProUIDashboardpageComponentnameGet(page,"SldorSrf",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIRadiogroupSelectActionSet (device_name,comp_dashname,Select_SldorSrf_CB, appdata);
sweep_create_log("ProUIRadiogroupSelectActionSet ");
status = ProUIDashboardpageComponentnameGet(page,"RemoveMat",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUICheckbuttonActivateActionSet (device_name,comp_dashname,Activate_RemoveMat_CB, appdata);
sweep_create_log("ProUICheckbuttonActivateActionSet ");
status = ProUIDashboardpageComponentnameGet(page,"ThinFeat",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUICheckbuttonActivateActionSet (device_name,comp_dashname,Activate_ThinFeat_CB, appdata);
sweep_create_log("ProUICheckbuttonActivateActionSet ");
PRO_UI_GRIDOPTS_DEFAULT(grid_opts);
grid_opts.row = 0;
grid_opts.column = 0;
grid_opts.top_offset = 18;
grid_opts.left_offset = 13;
status = ProUILayoutPushbuttonAdd (device_name, std_layout, "DONE_BTN",&grid_opts);
sweep_create_log("ProUILayoutPushbuttonAdd ");
status = ProUIPushbuttonBitmapSet(device_name,"DONE_BTN","dash_done");
sweep_create_log("ProUIPushbuttonBitmapSet ");
status = ProUIPushbuttonDisable(device_name,"DONE_BTN");
sweep_create_log("ProUIPushbuttonDisable ");
status = ProUIPushbuttonActivateActionSet (device_name,"DONE_BTN",Activate_DONE_CB,appdata);
sweep_create_log("ProUIPushbuttonActivateActionSet ");
PRO_UI_GRIDOPTS_DEFAULT(grid_opts);
grid_opts.row = 0;
grid_opts.column = 1;
grid_opts.top_offset = 18;
grid_opts.left_offset = 13;
grid_opts.right_offset = 13;
status = ProUILayoutPushbuttonAdd (device_name, std_layout, "CANCEL",&grid_opts);
sweep_create_log("ProUILayoutPushbuttonAdd ");
status = ProUIPushbuttonBitmapSet(device_name,"CANCEL","dash_quit");
sweep_create_log("ProUIPushbuttonBitmapSet ");
status = ProUIPushbuttonActivateActionSet (device_name,"CANCEL",Activate_Cancel_CB, appdata);
sweep_create_log("ProUIPushbuttonActivateActionSet ");
return PRO_TK_NO_ERROR;
}
ProError UgSweepAppDashboardSlideupPageSetup (ProUIDashboardPage page,ProUIDashboardEventType event_type,
ProAppData appdata)
{
char* comp_dashname=NULL;
ProError status=PRO_TK_NO_ERROR;
char* device_name;
ProUIDashboard dashboard;
status = ProUIDashboardpageDashboardGet (page, &dashboard);
sweep_create_log("ProUIDashboardpageDashboardGet ");
status = ProUIDashboardpageDevicenameGet (page, &device_name);
sweep_create_log("ProUIDashboardpageDevicenameGet ");
status = ProUIDashboardpageComponentnameGet(page,"PRO_E_FRM_NORMAL",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIOptionmenuSelectActionSet (device_name, comp_dashname,Select_PRO_E_FRM_NORMAL_CB, appdata);
sweep_create_log("ProUIOptionmenuSelectActionSet ");
status = ProUIDashboardpageComponentnameGet(page,"CollElemPb",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIPushbuttonActivateActionSet (device_name, comp_dashname,Activate_PushButton3_CB, appdata);
sweep_create_log("ProUIPushbuttonActivateActionSet ");
status = ProUIDashboardpageComponentnameGet(page,"DirElemList",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIListSelectActionSet (device_name, comp_dashname,Activate_DirElemList_CB, appdata);
sweep_create_log("ProUIListSelectActionSet ");
status = ProUIDashboardpageComponentnameGet(page,"PBRemove",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIPushbuttonActivateActionSet (device_name,comp_dashname,Activate_PBRemove_CB, appdata);
sweep_create_log("ProUIPushbuttonActivateActionSet ");
return PRO_TK_NO_ERROR;
}
ProError UgSweepAppDashboardOptionPageSetup (ProUIDashboardPage page,
ProUIDashboardEventType event_type,
ProAppData appdata)
{
char* comp_dashname=NULL;
ProError status=PRO_TK_NO_ERROR;
char* device_name;
ProUIDashboard dashboard;
status = ProUIDashboardpageDashboardGet (page, &dashboard);
sweep_create_log("ProUIDashboardpageDashboardGet ");
status = ProUIDashboardpageDevicenameGet (page, &device_name);
sweep_create_log("ProUIDashboardpageDevicenameGet ");
status = ProUIDashboardpageComponentnameGet(page,"CapEndCB",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUICheckbuttonActivateActionSet (device_name, comp_dashname,
Activate_CheckButton1_CB, appdata);
sweep_create_log("ProUICheckbuttonActivateActionSet ");
status = ProUIDashboardpageComponentnameGet(page,"FeatNameIP",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIInputpanelActivateActionSet (device_name, comp_dashname,
Activate_InputPanel1_CB, appdata);
sweep_create_log("ProUIInputpanelActivateActionSet ");
return PRO_TK_NO_ERROR;
}
void Select_SldorSrf_CB (char *dialog,char *component,ProAppData appdata)
{
char** sel_names=NULL;
ProError status=PRO_TK_NO_ERROR;
int num_sels=0;
ProUIDashboardPage page;
char* comp_dashname=NULL;
char* deviceName=NULL;
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_options_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
status = ProUIDashboardpageComponentnameGet(page,"CapEndCB",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIDashboardpageDevicenameGet(page,&deviceName);
sweep_create_log("ProUIDashboardpageDevicenameGet ");
status = ProUIRadiogroupSelectednamesGet(dialog,component,&num_sels,&sel_names);
sweep_create_log("ProUIRadiogroupSelectednamesGet ");
if(!status)
{
if (strcmp (sel_names[0],"PRO_SWEEP_FEAT_TYPE_SOLID") == 0)
{
elemValues.PRO_E_EXT_SURF_CUT_SOLID_TYPE_value = PRO_SWEEP_FEAT_TYPE_SOLID;
status = ProUICheckbuttonDisable(deviceName,comp_dashname);
sweep_create_log("ProUICheckbuttonEnable ");
}
else if (strcmp (sel_names[0],"PRO_SWEEP_FEAT_TYPE_SURFACE") == 0)
{
elemValues.PRO_E_EXT_SURF_CUT_SOLID_TYPE_value = PRO_SWEEP_FEAT_TYPE_SURFACE;
status = ProUICheckbuttonEnable(deviceName,comp_dashname);
sweep_create_log("ProUICheckbuttonEnable ");
}
}
return;
}
void Activate_RemoveMat_CB (char *dialog,char *component,ProAppData appdata)
{
ProBoolean checked = PRO_B_FALSE;
ProError status=PRO_TK_NO_ERROR;
status = ProUICheckbuttonGetState (dialog, component, &checked);
sweep_create_log("ProUICheckbuttonGetState ");
if(checked)
elemValues.PRO_E_REMOVE_MATERIAL_value = PRO_SWEEP_MATERIAL_REMOVE;
else
elemValues.PRO_E_REMOVE_MATERIAL_value = PRO_SWEEP_MATERIAL_ADD;
}
void Activate_ThinFeat_CB (char *dialog,char *component,ProAppData appdata)
{
ProBoolean checked = PRO_B_FALSE;
ProError status=PRO_TK_NO_ERROR;
status = ProUICheckbuttonGetState (dialog, component, &checked);
sweep_create_log("ProUICheckbuttonGetState ");
if(checked)
elemValues.PRO_E_FEAT_FORM_IS_THIN_value = PRO_SWEEP_FEAT_FORM_THIN;
else
elemValues.PRO_E_FEAT_FORM_IS_THIN_value = PRO_SWEEP_FEAT_FORM_NO_THIN;
return;
}
void Activate_DONE_CB (char *dialog,char *component,ProAppData appData)
{
ProError status=PRO_TK_NO_ERROR;
status = UgSweepAppBuildElementTree();
sweep_create_log("UgSweepAppBuildElementTree");
status = ProUIDashboardDestroy(elemValues.sweepDashboard);
sweep_create_log("ProUIDashboardDestroy ");
}
void Activate_Cancel_CB (char *dialog,char *component,ProAppData appData)
{
ProError status=PRO_TK_NO_ERROR;
status = ProUIDashboardDestroy(elemValues.sweepDashboard);
sweep_create_log("ProUIDashboardDestroy ");
}
void Select_PRO_E_FRM_NORMAL_CB (char *dialog, char *component,ProAppData appdata)
{
ProError status = PRO_TK_NO_ERROR;
int num_sels=0;
char** sel_names=NULL;
ProUIDashboardPage page;
char* comp_dashname=NULL;
status = ProUIOptionmenuSelectednamesGet (dialog, component, &num_sels, &sel_names);
sweep_create_log("ProUIDashboardDestroy ");
if (strcmp (sel_names[0],"PRO_FRAME_NORM_ORIGIN") == 0)
elemValues.PRO_E_FRM_NORMAL_value = PRO_FRAME_NORM_ORIGIN;
else if (strcmp (sel_names[0],"PRO_FRAME_PIVOT_DIR") == 0)
elemValues.PRO_E_FRM_NORMAL_value = PRO_FRAME_PIVOT_DIR;
else if (strcmp (sel_names[0],"PRO_FRAME_CONST_Z_DIR") == 0)
elemValues.PRO_E_FRM_NORMAL_value = PRO_FRAME_CONST_Z_DIR;
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_reference_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
status = ProUIDashboardpageComponentnameGet(page,"DirElemList",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
if(strcmp (sel_names[0],"PRO_FRAME_PIVOT_DIR") == 0 || strcmp (sel_names[0],"PRO_FRAME_CONST_Z_DIR") == 0)
{
status = ProUIListEnable(dialog,comp_dashname);
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_main_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
elemValues.dirReferselected=0;
EnableDonebutton(&page);
}
else
{
status = ProUIListDisable(dialog,comp_dashname);
elemValues.dirReferselected=1;
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_main_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
EnableDonebutton(&page);
}
}
void Activate_PushButton3_CB (char* dialog, char* component, ProAppData appData)
{
ProChaincollUIControl collection_types [] = {PRO_CHAINCOLLUI_ALLOW_ALL};
ProSelection *crvSels=NULL;
int n_crvSels=0;
ProError status=PRO_TK_NO_ERROR;
char device_name[PRO_NAME_SIZE];
ProUIDashboardPage page;
status = ProCrvcollectionAlloc(&(elemValues.PRO_E_FRM_OPT_TRAJ_crvColl));
sweep_create_log("ProCrvcollectionAlloc ");
status = ProSelbufferClear();
sweep_create_log("ProSelbufferClear ");
status = ProCurvesCollect(collection_types,1,NULL,NULL,&(elemValues.PRO_E_FRM_OPT_TRAJ_crvColl),&crvSels,&n_crvSels);
sweep_create_log("ProCurvesCollect ")
if(!status)
{
elemValues.curvesCollected = 1;
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_main_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
EnableDonebutton(&page);
}
status = ProSelectionarrayFree(crvSels);
sweep_create_log("ProSelectionarrayFree ");
}
void Activate_DirElemList_CB (char *dialog, char *component, ProAppData appData)
{
ProError status = PRO_TK_NO_ERROR;
wchar_t w_name[PRO_NAME_SIZE+15];
char label[PRO_NAME_SIZE+15]="\0";
char ItemName[PRO_NAME_SIZE]="\0";
ProUIDashboardPage page;
ProSelection *sels=NULL;
int num_sels=0;
ProModelitem mdlItem;
wchar_t *label_arr=NULL;
status = ProSelect("edge,curve,csys,surface,axis",1,NULL,NULL,NULL,NULL,&sels,&num_sels);
sweep_create_log("ProSelect");
if(!status)
{
status = ProSelectionToReference(sels[0],&(elemValues.PRO_E_DIRECTION_REFERENCE_value));
sweep_create_log("ProSelectionToReference");
status = ProSelectionModelitemGet(sels[0],&mdlItem);
sweep_create_log("ProSelectionModelitemGet");
status = ProModelitemNameGet(&mdlItem,w_name);
sweep_create_log("ProModelitemNameGet");
if(!status)
ProWstringToString(ItemName,w_name);
sprintf(label,"Type: %d Id: %d Name:%s",(int)mdlItem.type,mdlItem.id,ItemName);
ProStringToWstring(w_name,label);
label_arr= w_name;
status = ProUIListLabelsSet(dialog,component,1,&label_arr);
sweep_create_log("ProUIListLabelsSet ")
elemValues.dirReferselected=1;
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_main_page",&page);
sweep_create_log("ProUIDashboardPageGet ")
EnableDonebutton(&page);
}
}
void Activate_CheckButton1_CB (char *dialog,char *component,ProAppData appData)
{
ProBoolean checked = PRO_B_FALSE;
ProError status=PRO_TK_NO_ERROR;
status = ProUICheckbuttonGetState (dialog, component, &checked);
sweep_create_log("ProUICheckbuttonGetState ");
if(checked)
elemValues.PRO_E_END_SRF_ATTR_value = PRO_SWEEP_END_SRF_CAPPED;
else
elemValues.PRO_E_END_SRF_ATTR_value = PRO_SWEEP_END_SRF_OPEN;
}
void Activate_InputPanel1_CB (char *dialog,char *component, ProAppData appData)
{
ProError status=PRO_TK_NO_ERROR;
wchar_t* w_name=NULL;
status = ProUIInputpanelWidestringGet(dialog,component,&w_name);
sweep_create_log("ProUIInputpanelWidestringGet ");
if(!status)
{
ProWstringToString(elemValues.PRO_E_STD_FEATURE_NAME_value,w_name);
status = ProWstringFree(w_name);
sweep_create_log("ProWstringFree ");
}
}
void Activate_PBRemove_CB (char *dialog,char *component, ProAppData appData)
{
ProError status=PRO_TK_NO_ERROR;
ProUIDashboardPage page;
char* comp_dashname=NULL;
wchar_t* w_label = L"<iB1> Select 1 item";
elemValues.PRO_E_DIRECTION_REFERENCE_value=0;
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_reference_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
status = ProUIDashboardpageComponentnameGet(page,"DirElemList",&comp_dashname);
sweep_create_log("ProUIDashboardpageComponentnameGet ");
status = ProUIListLabelsSet(dialog,comp_dashname,1,&w_label);
sweep_create_log("ProUIListLabelsSet ");
status = ProUIDashboardPageGet(elemValues.sweepDashboard,"dashboard_main_page",&page);
sweep_create_log("ProUIDashboardPageGet ");
elemValues.dirReferselected=0;
EnableDonebutton(&page);
}
void EnableDonebutton(ProUIDashboard* page)
{
ProError status=PRO_TK_NO_ERROR;
char* device_name=NULL;
char* comp_name=NULL;
ProUIDashboard dashboard;
status = ProUIDashboardpageDashboardGet(*page,&dashboard);
sweep_create_log("ProUIDashboardpageDashboardGet ");
status = ProUIDashboardpageDevicenameGet(*page,&device_name);
sweep_create_log("ProUIDashboardpageDevicenameGet ");
if(elemValues.curvesCollected && elemValues.dirReferselected)
{
status = ProUIPushbuttonEnable(device_name,"DONE_BTN");
sweep_create_log("ProUIPushbuttonEnable ");
}
else
{
status = ProUIPushbuttonDisable(device_name,"DONE_BTN");
sweep_create_log("ProUIPushbuttonEnable ");
}
return;
}
ProError UgSweepAppAddRectangle (ProSection nsketch,int offset)
{
Pro2dLinedef rect_entity1,rect_entity2,rect_entity3,rect_entity4;
int ent_id=0;
rect_entity1.type = PRO_2D_LINE;
rect_entity1.end1[0] = -50 + (-offset);
rect_entity1.end1[1] = 40 + offset;
rect_entity1.end2[0] = 50 + offset;
rect_entity1.end2[1] = 40 + offset;
rect_entity2.type = PRO_2D_LINE;
rect_entity2.end1[0] = 50 + offset;
rect_entity2.end1[1] = 40 + offset;
rect_entity2.end2[0] = 50 + offset;
rect_entity2.end2[1] = -40 + (-offset);
rect_entity3.type = PRO_2D_LINE;
rect_entity3.end1[0] = 50 + offset;
rect_entity3.end1[1] = -40 + (-offset);
rect_entity3.end2[0] = -50 + (-offset);
rect_entity3.end2[1] = -40 + (-offset);
rect_entity4.type = PRO_2D_LINE;
rect_entity4.end1[0] = -50 + (-offset);
rect_entity4.end1[1] = -40 + (-offset);
rect_entity4.end2[0] = -50 + (-offset);
rect_entity4.end2[1] = 40 + offset;
status = ProSectionEntityAdd(nsketch,(Pro2dEntdef*)&(rect_entity1),&ent_id);
sweep_create_log("ProSectionEntityAdd ");
status = ProSectionEntityAdd(nsketch,(Pro2dEntdef*)&(rect_entity2),&ent_id);
sweep_create_log("ProSectionEntityAdd ");
status = ProSectionEntityAdd(nsketch,(Pro2dEntdef*)&(rect_entity3),&ent_id);
sweep_create_log("ProSectionEntityAdd ");
status = ProSectionEntityAdd(nsketch,(Pro2dEntdef*)&(rect_entity4),&ent_id);
sweep_create_log("ProSectionEntityAdd ");
status = ProSectionIntentManagerModeSet(nsketch, PRO_B_TRUE);
sweep_create_log("ProSectionIntentManagerModeSet ");
status = ProSectionIntentManagerModeSet(nsketch, PRO_B_FALSE);
sweep_create_log("ProSectionIntentManagerModeSet ");
return;
}
ProError UgSweepAppAddCircle (ProSection nsketch)
{
Pro2dCircledef circle_entity;
int ent_id=0;
circle_entity.type = PRO_2D_CIRCLE;
circle_entity.center[0] = 0.0;
circle_entity.center[1] = 0.0;
circle_entity.radius = 30.00;
status = ProSectionEntityAdd(nsketch,(Pro2dEntdef*)&(circle_entity),&ent_id);
sweep_create_log("ProSectionEntityAdd ");
status = ProSectionIntentManagerModeSet(nsketch, PRO_B_TRUE);
sweep_create_log("ProSectionIntentManagerModeSet ");
status = ProSectionIntentManagerModeSet(nsketch, PRO_B_FALSE);
sweep_create_log("ProSectionIntentManagerModeSet ");
return;
}
ProError UgSweepAppAddEllipse (ProSection nsketch)
{
Pro2dEllipsedef ellipse_entity;
int ent_id=0;
ellipse_entity.type = PRO_2D_ELLIPSE;
ellipse_entity.origin[0] = 0;
ellipse_entity.origin[1] = 0;
ellipse_entity.x_radius = 150;
ellipse_entity.y_radius = 100;
status = ProSectionEntityAdd(nsketch,(Pro2dEntdef*)&(ellipse_entity),&ent_id);
sweep_create_log("ProSectionEntityAdd ");
status = ProSectionIntentManagerModeSet(nsketch, PRO_B_TRUE);
sweep_create_log("ProSectionIntentManagerModeSet ");
status = ProSectionIntentManagerModeSet(nsketch, PRO_B_FALSE);
sweep_create_log("ProSectionIntentManagerModeSet ");
return;
}