/*===========================================================================*\ FILE : TestGtol.c PURPOSE: gtol - demo & test HISTORY: DATE AUTHOR MODIFICATIONS 13-Mar-99 J-01-04 akh $$1 Created 07-Dec-00 J-01-23 JCN $$2 Don't print composite information if not SURFACE or POSITION Gtol.info -> GtolAll.info \*===========================================================================*/ /*=================================================================*\ Pro/Toolkit includes \*=================================================================*/ #include #include #include #include #include #include #include #include #include #include #include /*=================================================================*\ Application includes \*=================================================================*/ #include "TestError.h" #include "UtilMessage.h" #include "UtilMenu.h" #include "UtilTypes.h" #include "UtilString.h" #include "UtilCollect.h" /*=================================================================*\ Application macros \*=================================================================*/ #define mnLastItem -1 #define mnFirstItem -1 #define TestGtS_Unit 0x20 #define TestGtS_Stat 0x10 #define TestGtS_Diam 0x08 #define TestGtS_Free 0x04 #define TestGtS_All 0x02 #define TestGtS_Tan 0x01 #define YesNoStr(a) (a ? "Yes" : "No") #define IsMenuDone(a) ((a == mnLastItem)||(a == mnFirstItem))?(PRO_B_FALSE):(PRO_B_TRUE) /*=================================================================*\ Application global types \*=================================================================*/ typedef struct test_gtol_symbol { ProGtolType gtType; int symbols; char sel_param[80]; }TestGtolSymbol; /*=================================================================*\ Application global data \*=================================================================*/ static ProUtilMenuButtons mnGtolType[] ={ {"GtolType", mnFirstItem, TEST_CALL_PRO_MENU_DELETE}, {"Straightness", PROGTOLTYPE_STRAIGHTNESS, 0}, {"Flatness", PROGTOLTYPE_FLATNESS, 0}, {"Circular", PROGTOLTYPE_CIRCULAR, 0}, {"Cylindrical", PROGTOLTYPE_CYLINDRICAL, 0}, {"Line", PROGTOLTYPE_LINE, 0}, {"Surface", PROGTOLTYPE_SURFACE, 0}, {"Angular", PROGTOLTYPE_ANGULAR, 0}, {"Perpendicular", PROGTOLTYPE_PERPENDICULAR, 0}, {"Parallel", PROGTOLTYPE_PARALLEL, 0}, {"Position", PROGTOLTYPE_POSITION, 0}, {"Concentricity", PROGTOLTYPE_CONCENTRICITY, 0}, {"Symmetry", PROGTOLTYPE_SYMMETRY, 0}, {"Circular Runout", PROGTOLTYPE_CIRCULAR_RUNOUT,0}, {"Total Highway", PROGTOLTYPE_TOTAL_RUNOUT, 0}, {"", mnLastItem,0}}; static ProUtilMenuButtons mnGtolRefItemType[] = { {"RefItemType", mnFirstItem, TEST_CALL_PRO_MENU_DELETE}, {"edge", PROGTOLRTYPE_EDGE, 0}, {"axis", PROGTOLRTYPE_AXIS, 0}, {"surface", PROGTOLRTYPE_SURF, 0}, {"feature", PROGTOLRTYPE_FEAT, 0}, {"datum", PROGTOLRTYPE_DATUM, 0}, {"", mnLastItem, 0}}; static ProUtilMenuButtons mnGtolPlacementType[]={ {"Placement", mnFirstItem,TEST_CALL_PRO_MENU_DELETE}, {"Datum", PROGTOLPTYPE_DATUM, 0}, {"Dimension", PROGTOLPTYPE_DIMENSION, 0}, {"Dim. Related", PROGTOLPTYPE_DIM_RELATED,0}, {"Free note", PROGTOLPTYPE_FREENOTE, 0}, {"Leaders", PROGTOLPTYPE_LEADERS, 0}, {"Tanleader", PROGTOLPTYPE_TANLEADER, 0}, {"NormLeader", PROGTOLPTYPE_NORMLEADER, 0}, {"Gtol", PROGTOLPTYPE_GTOL, 0}, {"", mnLastItem, 0}}; static ProUtilMenuButtons mnGtolLeaderType[]={ {"Leader Type", mnFirstItem,TEST_CALL_PRO_MENU_DELETE}, {"Arrow head", PROLEADERTYPE_ARROWHEAD, 0}, {"Dot", PROLEADERTYPE_DOT, 0}, {"Fille dot", PROLEADERTYPE_FILLEDDOT, 0}, {"No arrow", PROLEADERTYPE_NOARROW, 0}, {"Slash", PROLEADERTYPE_SLASH, 0}, {"Integral", PROLEADERTYPE_INTEGRAL, 0}, {"Box", PROLEADERTYPE_BOX, 0}, {"Filled box", PROLEADERTYPE_FILLEDBOX, 0}, {"Double arrow",PROLEADERTYPE_DOUBLEARROW,0}, {"", mnLastItem, 0}}; static ProUtilMenuButtons mnGtolMaterialCond[]={ {"Material Cond.", mnFirstItem, TEST_CALL_PRO_MENU_DELETE}, {"UnKnown", PROGTOLMATCOND_UNKNOWN, 0}, {"LMC", PROGTOLMATCOND_LMC, 0}, {"MMC", PROGTOLMATCOND_MMC, 0}, {"RFC", PROGTOLMATCOND_RFS, 0}, {"Default RFS", PROGTOLMATCOND_DEFAULT_RFS, 0}, {"", mnLastItem, 0}}; static ProUtilMenuButtons mnGtolReferenceType[]={ {"Reference type", mnFirstItem, TEST_CALL_PRO_MENU_DELETE}, {"None", PROGTOLREFTYPE_NONE, 0}, {"Primary", PROGTOLREFTYPE_PRIMARY, 0}, {"Secondary", PROGTOLREFTYPE_SECONDARY, 0}, {"Tertiary", PROGTOLREFTYPE_TERTIARY, 0}, {"", mnLastItem, 0}}; static ProUtilMenuButtons mnGtolProjzone[]={ {"Proj. zone", mnFirstItem, TEST_CALL_PRO_MENU_DELETE}, {"None", PROGTOLPROJZONE_NONE, 0}, {"Below", PROGTOLPROJZONE_BELOWGTOL, 0}, {"Inside", PROGTOLPROJZONE_INSIDEGTOL, 0}, {"", mnLastItem, 0}}; static TestGtolSymbol TestGtolSymbolTbl[]={ {PROGTOLTYPE_UNKNOWN, TestGtS_Stat, ""}, {PROGTOLTYPE_STRAIGHTNESS, TestGtS_Stat | TestGtS_Diam | TestGtS_Free | TestGtS_Unit, "surface,axis,edge"}, {PROGTOLTYPE_FLATNESS, TestGtS_Stat | TestGtS_Free | TestGtS_Unit, "sldface"}, {PROGTOLTYPE_CIRCULAR, TestGtS_Stat | TestGtS_Free, "surface"}, {PROGTOLTYPE_CYLINDRICAL, TestGtS_Stat | TestGtS_Free, "surface"}, {PROGTOLTYPE_LINE, TestGtS_Stat | TestGtS_All | TestGtS_Tan, "edge"}, {PROGTOLTYPE_SURFACE, TestGtS_Stat | TestGtS_All | TestGtS_Tan, "surface"}, {PROGTOLTYPE_ANGULAR, TestGtS_Stat | TestGtS_Diam | TestGtS_Tan, "datum,surface,axis"}, {PROGTOLTYPE_PERPENDICULAR, TestGtS_Stat | TestGtS_Diam | TestGtS_Tan | TestGtS_Unit, "surface,axis,datum"}, {PROGTOLTYPE_PARALLEL , TestGtS_Stat | TestGtS_Diam | TestGtS_Tan | TestGtS_Unit, "surface,axis"}, {PROGTOLTYPE_POSITION, TestGtS_Stat | TestGtS_Diam | TestGtS_Free, "point,axis,datum,csys,feature,edge,curve"}, {PROGTOLTYPE_CONCENTRICITY, TestGtS_Stat | TestGtS_Diam | TestGtS_Free, "axis,surface"}, {PROGTOLTYPE_SYMMETRY, TestGtS_Stat | TestGtS_Free, "point,axis,datum,csys,feature,edge,curve"}, {PROGTOLTYPE_CIRCULAR_RUNOUT, TestGtS_Stat, "surface"}, {PROGTOLTYPE_TOTAL_RUNOUT, TestGtS_Stat, "surface"}, {-1, -1, ""}}; static char *NumeralStr[]={ "First", "Second", "Third" }; static char *strDatumRef[]={ "primary", "secondary", "tertiary" }; /*====================================================================*\ Function : TestGtolSymInfoGet() Purpose : return in \*====================================================================*/ ProError TestGtolSymInfoGet(ProGtolType gtType, TestGtolSymbol *info) { int i=0; if(info == NULL) return(PRO_TK_BAD_INPUTS); while(TestGtolSymbolTbl[i].gtType!=-1) { if(TestGtolSymbolTbl[i].gtType == gtType) { memcpy(info, &TestGtolSymbolTbl[i],sizeof(TestGtolSymbol)); return(PRO_TK_NO_ERROR); } i++; } return(PRO_TK_E_NOT_FOUND); } /*====================================================================*\ Function : TestGtolSymIsEnable() Purpose : If specified symbol enabled for gtol then return PRO_B_TRUE. \*====================================================================*/ ProBoolean TestGtolSymIsEnable(ProGtolType gtType, int sym) { ProError error; TestGtolSymbol info; error = TestGtolSymInfoGet(gtType, &info); if(error != PRO_TK_NO_ERROR) return(PRO_B_FALSE); return(((info.symbols & sym)!=0)?(PRO_B_TRUE):(PRO_B_FALSE)); } /*====================================================================*\ Function : TestGtolSymSelParam() Purpose : Return string for ProSelect function. \*====================================================================*/ char* TestGtolSymSelParam(ProGtolType gtType) { static TestGtolSymbol info; ProError error; error = TestGtolSymInfoGet(gtType, &info); if(error != PRO_TK_NO_ERROR) return(NULL); return(info.sel_param); } /*====================================================================*\ Function : ProArrayObjectAdd() Purpose : Visit action function. Add visited object to array. \*====================================================================*/ ProError TestGtolCollectVisit(ProGtol *gtol, ProError status, ProAppData app_data) { ProError error; /*--------------------------------------------------------------------*\ Add visited object to array \*--------------------------------------------------------------------*/ error = ProArrayObjectAdd((ProArray*)app_data,PRO_VALUE_UNUSED,1,gtol); TEST_CALL_REPORT ("ProArrayObjectAdd()", "TestGtolCollectVisit()", error, error != PRO_TK_NO_ERROR); return(error); } /*====================================================================*\ Function : TestGtolCollect() Purpose : Collect all gtol in the model. \*====================================================================*/ ProError TestGtolCollect(ProMdl mdl, ProGtol **gtol) { ProGtol *tmp_gtol = NULL; ProError error; if((gtol==NULL)||(mdl==NULL)) return(PRO_TK_BAD_INPUTS); /*--------------------------------------------------------------------*\ Alloc memory for gtol array. \*--------------------------------------------------------------------*/ error = ProArrayAlloc(0, sizeof(ProGtol),1,(ProArray*)&tmp_gtol); TEST_CALL_REPORT ("ProArrayAlloc()", "TestGtolCollect()", error, error != PRO_TK_NO_ERROR); if(error!=PRO_TK_NO_ERROR) return(error); /*--------------------------------------------------------------------*\ Visit and add all gtol from the specified model. \*--------------------------------------------------------------------*/ error = ProMdlGtolVisit(mdl,(ProGtolVisitAction)TestGtolCollectVisit, PRO_TK_NO_ERROR,(ProAppData)&tmp_gtol); TEST_CALL_REPORT ("ProMdlGtolVisit()", "TestGtolCollect()", error, error != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------*\ If error then free memory. \*--------------------------------------------------------------------*/ if(error!=PRO_TK_NO_ERROR) { if(tmp_gtol!=NULL) { error=ProArrayFree((ProArray*)&tmp_gtol); TEST_CALL_REPORT ("ProArrayFree()", "TestGtolCollect()", error, error != PRO_TK_NO_ERROR); tmp_gtol = NULL; } return(error); } *gtol = tmp_gtol; return(PRO_TK_NO_ERROR); } /*====================================================================*\ Function : TestGtolPlacementPrn() Purpose : Print information about gtol placement. \*====================================================================*/ ProError TestGtolPlacementPrn(FILE *fp, ProGtoldata data) { ProGtolleader *leaders; ProLeaderType lead_type; int n, i; ProSelection attachment; ProCharLine cname; ProGtol gtol; ProDimension dimension; ProGtolPlacementType plcType; ProError error; ProPoint3d location; /*--------------------------------------------------------------------*\ Get gtol placement information \*--------------------------------------------------------------------*/ error = ProGtoldataPlacementGet(data, &plcType, &dimension, &leaders, location, >ol); TEST_CALL_REPORT ("ProGtoldataPlacementGet()", "TestGtolPlacementPrn()", error, error != PRO_TK_NO_ERROR); if(error!=PRO_TK_NO_ERROR) return(error); ProUtilGtolPlacementTypeStr(plcType, cname); fprintf(fp, "Placement type: %s\n", cname); if((plcType == PROGTOLPTYPE_DIMENSION)||(plcType == PROGTOLPTYPE_DIM_RELATED)) fprintf(fp, "Dimension id: %d\n", dimension.id); if(plcType == PROGTOLPTYPE_GTOL) fprintf(fp, "Geometric tolerance id: %d\n", gtol.id); /*--------------------------------------------------------------------*\ Print information about gtol location and leaders if gtol have it. \*--------------------------------------------------------------------*/ switch (plcType) { case PROGTOLPTYPE_LEADERS: case PROGTOLPTYPE_TANLEADER: case PROGTOLPTYPE_NORMLEADER: error = ProArraySizeGet((ProArray)leaders, &n); if((error==PRO_TK_NO_ERROR)&&(n>0)) for(i=0; i %d\n", error ); printf( "--------------------------_> %s\n", cline ); if((error!=PRO_TK_NO_ERROR)||(n_sel<0)) return(PRO_TK_BAD_INPUTS); error = ProSelectionModelitemGet(sel[0], &mdl_item); TEST_CALL_REPORT ("ProSelectionModelitemGet()", "TestGtoldataReferenceSet()", error, error != PRO_TK_NO_ERROR); switch (mdl_item.type) { case PRO_EDGE : ref_item_type = PROGTOLRTYPE_EDGE; break; case PRO_AXIS : ref_item_type = PROGTOLRTYPE_AXIS; break; case PRO_SURFACE : ref_item_type = PROGTOLRTYPE_SURF; break; case PRO_FEATURE : ref_item_type = PROGTOLRTYPE_FEAT; break; case PRO_DATUM_PLANE : ref_item_type = PROGTOLRTYPE_DATUM; break; default: return(PRO_TK_BAD_INPUTS); } error = ProGtoldataReferenceSet(data, ref_item_type, sel[0], &status); TEST_CALL_REPORT ("ProGtoldataReferenceSet()", "TestGtoldataReferenceSet()", error, error != PRO_TK_NO_ERROR); if(error == PRO_TK_CANT_MODIFY) { ProUtilMsgPrint("gen", "TEST %0s", "Can't modify this parameter."); return(PRO_TK_NO_ERROR); } return(error); } /*====================================================================*\ Function : TestGtolCreate() Purpose : Create new gtol in the specified model. \*====================================================================*/ ProError TestGtolCreate(ProMdl mdl) { ProGtoldata data; ProGtol gtol; ProGtolType type; ProGtoldataStatus status; ProBoolean IsComplete=PRO_B_FALSE, is_overall, is_PerUnit; ProError error; /*--------------------------------------------------------------------*\ Alloc memory for gtol data. \*--------------------------------------------------------------------*/ error = ProGtoldataAlloc(mdl, &data); TEST_CALL_REPORT ("ProGtoldataAlloc()", "TestGtolCreate()", error, error != PRO_TK_NO_ERROR); if(error!=PRO_TK_NO_ERROR) return(error); while(1==1) { /*--------------------------------------------------------------------*\ Choice gtol type. \*--------------------------------------------------------------------*/ type = TestGtolSelType(); if(type<0) break; error = ProGtoldataTypeSet(data, type, &status); TEST_CALL_REPORT ("ProGtoldataTypeSet()", "TestGtolCreate()", error, error != PRO_TK_NO_ERROR); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Sets the model that will contain the gtol. \*--------------------------------------------------------------------*/ error = ProGtoldataModelSet(data, mdl, &status); TEST_CALL_REPORT ("ProGtoldataModelSet()", "TestGtolCreate()", error, error != PRO_TK_NO_ERROR); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Sets references. \*--------------------------------------------------------------------*/ error = TestGtoldataReferenceSet(data); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Sets gtol placement. \*--------------------------------------------------------------------*/ error = TestGtolPlacementSet(mdl, data); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Sets gtol datum references. \*--------------------------------------------------------------------*/ error = TestGtoldatumrefSet(data); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Sets gtol value. \*--------------------------------------------------------------------*/ is_overall = (TestGtolSymIsEnable(type, TestGtS_Unit) == PRO_B_TRUE)? (PRO_B_FALSE):(PRO_B_TRUE); if(is_overall == PRO_B_FALSE) { ProUtilMsgPrint("gen", "TEST %0s", "Overall tolerance ?(y/n):"); is_overall = (ProUtilYesnoGet("Yes") == 1)?(PRO_B_TRUE):(PRO_B_FALSE); } if (is_overall == PRO_B_TRUE); { error = TestGtoldataValueSet(data); if(error!=PRO_TK_NO_ERROR) break; } /*--------------------------------------------------------------------*\ Set the per unit tolerance of a gtol. \*--------------------------------------------------------------------*/ if(TestGtolSymIsEnable(type, TestGtS_Unit) == PRO_B_TRUE) { is_PerUnit = (is_overall == PRO_B_FALSE)?(PRO_B_TRUE):(PRO_B_FALSE); if(is_PerUnit == PRO_B_FALSE) { ProUtilMsgPrint("gen", "TEST %0s", "Per unit tolerance? (y/n):"); is_PerUnit = (ProUtilYesnoGet("Yes") == 1)?(PRO_B_TRUE):(PRO_B_FALSE); } if (is_PerUnit == PRO_B_TRUE); { error = TestGtoldataPerUnitSet(data); if(error!=PRO_TK_NO_ERROR) break; } } /*--------------------------------------------------------------------*\ Sets gtol composite property. \*--------------------------------------------------------------------*/ error = TestGtolCompositeSet(data); if(error!=PRO_TK_NO_ERROR) break; #if 0 /*--------------------------------------------------------------------*\ Set the material condition of a gtol. \*--------------------------------------------------------------------*/ error = TestGtolMatCondSet(data); if(error!=PRO_TK_NO_ERROR) break; #endif /*--------------------------------------------------------------------*\ Set whether a gtol shows the statistical tolerance symbol. \*--------------------------------------------------------------------*/ if(TestGtolSymIsEnable(type, TestGtS_Stat) == PRO_B_TRUE) { error = TestGtoldataStatTolSet(data); if(error!=PRO_TK_NO_ERROR) break; } /*--------------------------------------------------------------------*\ Set whether a gtol shows the diameter tolerance symbol. \*--------------------------------------------------------------------*/ if (TestGtolSymIsEnable(type, TestGtS_Diam) == PRO_B_TRUE) { error = TestGtoldataDiameterSet(data); if(error!=PRO_TK_NO_ERROR) break; } /*--------------------------------------------------------------------*\ Set whether a gtol shows the free state symbol. \*--------------------------------------------------------------------*/ if (TestGtolSymIsEnable(type, TestGtS_Free) == PRO_B_TRUE) { error = TestGtoldataFreeStateSet(data); if(error!=PRO_TK_NO_ERROR) break; } /*--------------------------------------------------------------------*\ Sets whether a gtol shows the all around symbol. \*--------------------------------------------------------------------*/ if (TestGtolSymIsEnable(type, TestGtS_All) == PRO_B_TRUE) { error = TestGtoldataAllAroundSet(data); if(error!=PRO_TK_NO_ERROR) break; } /*--------------------------------------------------------------------*\ Sets whether a gtol shows the tangent plane symbol. \*--------------------------------------------------------------------*/ if (TestGtolSymIsEnable(type, TestGtS_Tan) == PRO_B_TRUE) { error = TestGtoldataTangentPlaneSet(data); if(error!=PRO_TK_NO_ERROR) break; } /*--------------------------------------------------------------------*\ Sets the projected tolerance zone for a gtol. \*--------------------------------------------------------------------*/ error = TestGtoldataProjZoneSet(data); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Sets the profile boundary for a gtol. \*--------------------------------------------------------------------*/ error = TestGtoldataProfBoundarySet(data); if(error!=PRO_TK_NO_ERROR) break; /*--------------------------------------------------------------------*\ Create new gtol. \*--------------------------------------------------------------------*/ error = ProGtolCreate(data, >ol); TEST_CALL_REPORT ("ProGtolCreate()", "TestGtolCreate()", error, error != PRO_TK_NO_ERROR); if(error == PRO_TK_NO_ERROR) IsComplete=PRO_B_TRUE; break; } if(IsComplete == PRO_B_TRUE) ProUtilMsgPrint("gen", "TEST %0s", "Gtol normal created"); else ProUtilMsgPrint("gen", "TEST %0s", "Can't create gtol."); /*--------------------------------------------------------------------*\ Free memory. \*--------------------------------------------------------------------*/ error = ProGtoldataFree(&data); TEST_CALL_REPORT ("ProGtoldataFree()", "TestGtolCreate()", error, error != PRO_TK_NO_ERROR); return(PRO_TK_NO_ERROR); } /*====================================================================*\ Function : TestGtolRefSet() Purpose : Sets a datum plane or axis to be a gtol reference. \*====================================================================*/ ProError TestGtolRefSet(ProMdl mdl) { ProError error; ProGeomitem geomitem; ProSelection *sel; int n_sel; ProBoolean is_in_dim; ProDimension in_dim; ProUtilMsgPrint("gen", "TEST %0s", "Select axis or datum"); /*--------------------------------------------------------------------*\ Select datum or axis. \*--------------------------------------------------------------------*/ error = ProSelect("datum,axis", 1,NULL, NULL, NULL, NULL, &sel, &n_sel); TEST_CALL_REPORT ("ProSelect()", "TestGtolRefSet()", error, error != PRO_TK_NO_ERROR); if((error!=PRO_TK_NO_ERROR)||(n_sel<0)) return(PRO_TK_E_NOT_FOUND); error = ProSelectionModelitemGet(sel[0],(ProModelitem*)&geomitem); TEST_CALL_REPORT ("ProSelectionModelitemGet()", "TestGtolRefSet()", error, error != PRO_TK_NO_ERROR); ProUtilMsgPrint("gen", "TEST %0s", "In dim tolerance ?(y/n):"); if(ProUtilYesnoGet("Yes") == 1) { /*--------------------------------------------------------------------*\ if "In dim tolerance" then select dimension. \*--------------------------------------------------------------------*/ is_in_dim = PRO_B_FALSE; ProUtilMsgPrint("gen", "TEST %0s", "Select dimension"); error = ProSelect("dimension,ref_dim", 1,NULL, NULL, NULL, NULL, &sel, &n_sel); TEST_CALL_REPORT ("ProSelect()", "TestGtolRefSet()", error, error != PRO_TK_NO_ERROR); if((error!=PRO_TK_NO_ERROR)||(n_sel<0)) return(PRO_TK_E_NOT_FOUND); error = ProSelectionModelitemGet(sel[0],(ProModelitem*)&in_dim); TEST_CALL_REPORT ("ProSelectionModelitemGet()", "TestGtolRefSet()", error, error != PRO_TK_NO_ERROR); } else { is_in_dim = PRO_B_TRUE; ProUtilMsgPrint("gen", "TEST %0s", "Gtol is FREE."); } error = ProGeomitemGtolrefSet(&geomitem,(is_in_dim == PRO_B_TRUE)?(&in_dim):(NULL)); TEST_CALL_REPORT ("ProGeomitemGtolrefSet()", "TestGtolRefSet()", error, error != PRO_TK_NO_ERROR); return(error); } /*====================================================================*\ Function : TestGtolRefClear() Purpose : Clears a datum plane or axis so it is no longer a gtol reference. \*====================================================================*/ ProError TestGtolRefClear(ProMdl mdl) { ProError error; ProGeomitem geomitem; ProSelection *sel; int n_sel; ProUtilMsgPrint("gen", "TEST %0s", "Select axis or datum"); /*--------------------------------------------------------------------*\ Select target (datum or axis). \*--------------------------------------------------------------------*/ error = ProSelect("datum,axis", 1,NULL, NULL, NULL, NULL, &sel, &n_sel); TEST_CALL_REPORT ("ProSelect()", "TestGtolRefClear()", error, error != PRO_TK_NO_ERROR); if((error!=PRO_TK_NO_ERROR)||(n_sel<0)) return(PRO_TK_E_NOT_FOUND); error = ProSelectionModelitemGet(sel[0],(ProModelitem*)&geomitem); TEST_CALL_REPORT ("ProSelectionModelitemGet()", "TestGtolRefClear()", error, error != PRO_TK_NO_ERROR); error = ProGeomitemGtolrefClear(&geomitem); TEST_CALL_REPORT ("ProGeomitemGtolrefClear()", "TestGtolRefClear()", error, error != PRO_TK_NO_ERROR); return(PRO_TK_NO_ERROR); } /*====================================================================*\ Function : TestGtolRefInfo() Purpose : Shows whether a datum plane or axis is a gtol reference \*====================================================================*/ ProError TestGtolRefInfo(ProMdl mdl) { ProError error; ProGeomitem geomitem; ProSelection *sel; int n_sel; ProBoolean ref_datum, is_in_dim; ProCharLine cline; ProDimension in_dim; ProUtilMsgPrint("gen", "TEST %0s", "Select axis or datum"); /*--------------------------------------------------------------------*\ Select target (datum or axis). \*--------------------------------------------------------------------*/ error = ProSelect("datum,axis", 1,NULL, NULL, NULL, NULL, &sel, &n_sel); TEST_CALL_REPORT ("ProSelect()", "TestGtolRefInfo()", error, error != PRO_TK_NO_ERROR); if((error!=PRO_TK_NO_ERROR)||(n_sel<0)) return(PRO_TK_E_NOT_FOUND); error = ProSelectionModelitemGet(sel[0],(ProModelitem*)&geomitem); TEST_CALL_REPORT ("ProSelectionModelitemGet()", "TestGtolRefInfo()", error, error != PRO_TK_NO_ERROR); error = ProGeomitemIsGtolref(&geomitem, &ref_datum, &is_in_dim, &in_dim); TEST_CALL_REPORT ("ProGeomitemIsGtolref()", "TestGtolRefInfo()", error, error != PRO_TK_NO_ERROR); if(error != PRO_TK_NO_ERROR) return(error); sprintf(cline, "Gtol reference: %s; %s", YesNoStr(ref_datum), (is_in_dim == PRO_B_TRUE)?("In dim"):("Free")); ProUtilMsgPrint("gen", "TEST %0s", cline); return(PRO_TK_NO_ERROR); } /*====================================================================*\ Function : TestGtolInfo() Purpose : Create menu for choice mode of get information about gtol. \*====================================================================*/ ProError TestGtolInfo(ProMdl mdl) { int menu_id; /*=================================================================*\ Setup menu actions \*=================================================================*/ ProMenuFileRegister("TkGtolInfo","tkgtolinfo.mnu",&menu_id); ProMenubuttonActionSet("TkGtolInfo","-Selected", (ProMenubuttonAction)TestGtolInfoSel, mdl, 0); ProMenubuttonActionSet("TkGtolInfo","-All", (ProMenubuttonAction)TestGtolInfoAll, mdl, 0); ProMenubuttonActionSet("TkGtolInfo","TkGtolInfo", (ProMenubuttonAction)ProMenuDelete, mdl, 0); /*=================================================================*\ Create new menu \*=================================================================*/ ProMenuCreate(PROMENUTYPE_MAIN, "TkGtolInfo", NULL); ProMenuProcess("", &menu_id); return(PRO_TK_NO_ERROR); } /*====================================================================*\ Function : TestGtolRefMenu() Purpose : Create menu for change datupm plane or axis property. \*====================================================================*/ ProError TestGtolRefMenu(ProMdl mdl) { int menu_id; ProError error; /*=================================================================*\ Setup menu actions \*=================================================================*/ ProMenuFileRegister("TkGtolRef","tkgtolref.mnu",&menu_id); ProMenubuttonActionSet("TkGtolRef","-Set", (ProMenubuttonAction)TestGtolRefSet, mdl, 0); ProMenubuttonActionSet("TkGtolRef","-Clear", (ProMenubuttonAction)TestGtolRefClear, mdl, 0); ProMenubuttonActionSet("TkGtolRef","-Info", (ProMenubuttonAction)TestGtolRefInfo, mdl, 0); ProMenubuttonActionSet("TkGtolRef","TkGtolRef", (ProMenubuttonAction)ProMenuDelete, mdl, 0); /*=================================================================*\ Create new menu \*=================================================================*/ ProMenuCreate(PROMENUTYPE_MAIN, "TkGtolRef", NULL); ProMenuProcess("", &menu_id); return(PRO_TK_NO_ERROR); } /*====================================================================*\ Function : TestGtolMainMenu() Purpose : Create main menu for gtol test and demo. \*====================================================================*/ ProError TestGtolMainMenu() { int menu_id; ProMdl mdl; ProError error; error = ProMdlCurrentGet(&mdl); TEST_CALL_REPORT ("ProMdlCurrentGet()", "TestGtolMainMenu()", error, error != PRO_TK_NO_ERROR); /*=================================================================*\ Setup menu actions \*=================================================================*/ ProMenuFileRegister("TkGtol","tkgtol.mnu",&menu_id); ProMenubuttonActionSet("TkGtol","-Add", (ProMenubuttonAction)TestGtolCreate, mdl, 0); ProMenubuttonActionSet("TkGtol","-Modify", (ProMenubuttonAction)TestGtolModify, mdl, 0); ProMenubuttonActionSet("TkGtol","-Delete all", (ProMenubuttonAction)TestGtolDeleteAll, mdl, 0); ProMenubuttonActionSet("TkGtol","-Show all", (ProMenubuttonAction)TestMdlGtolShow, mdl, 0); ProMenubuttonActionSet("TkGtol","-Info", (ProMenubuttonAction)TestGtolInfo, mdl, 0); ProMenubuttonActionSet("TkGtol","-Reference", (ProMenubuttonAction)TestGtolRefMenu, mdl, 0); ProMenubuttonActionSet("TkGtol","TkGtol", (ProMenubuttonAction)ProMenuDelete, NULL, 0); /*=================================================================*\ Create new menu \*=================================================================*/ ProMenuCreate(PROMENUTYPE_MAIN, "TkGtol", NULL); ProMenuProcess("", &menu_id); return(PRO_TK_NO_ERROR); }