/*====================================================================*\ FILE : TestDisplist.c PURPOSE : ProDisplist test. HISTORY: DATE BUILD AUTHOR MODIFICATIONS 20 Jan 97 H-01-21 Alexey $$1 First version. 06 Feb 97 H-01-25 Alexey $$2 Added ProTestDisplistDraw() 19-Oct-97 H-03-27 Pavel $$3 Added TEST_CALL_REPORT for ProDisplistCallback 04-Dec-97 H-03-33 Pavel $$4 Added Ray demo 27-Feb-98 H-03-40 Pavel $$5 Added TEST_CALL_REPORT 15-Dec-98 I-01-28 agsh $$6 correct TEST_CALL_REPORT for functions whith bugs \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include "ProToolkit.h" #include "ProMdl.h" #include "ProDisplist.h" #include "ProMessage.h" #include "ProMenu.h" #include "ProUtil.h" /*--------------------------------------------------------------------*\ Pro/DEVELOP includes \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ C System includes \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "TestGraphics.h" #include "UtilMatrix.h" #include "UtilMessage.h" /*--------------------------------------------------------------------*\ Macros \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Data types \*--------------------------------------------------------------------*/ typedef enum tag_DispListActions { DISP_LIST_DEL = 0, DISP_LIST_CREATE, DISP_LIST_DISPLAY } DispListActions; /*--------------------------------------------------------------------*\ Application global/external data \*--------------------------------------------------------------------*/ /*---------------------------------------------------------------------*\ Functions declaration \*---------------------------------------------------------------------*/ int ProTest2dDisplistMenu( void*, int ); int ProTest2dDisplist( void*, int ); int ProTest3dDisplistMenu( void*, int ); int ProTest3dDisplist( void*, int ); int ProTestDisplistInvalidate( ProMdl*, int ); int ProTestDisplistDraw( void ); int ProTestEntityDrawMenu( void* p_dummy, int int_dummy ); /*---------------------------------------------------------------------*\ Function: ProTest2dDisplistMenu() Purpose: On-button function. Set up the display list menu Returns: 0 - success; -1 - error. Now ignored. \*---------------------------------------------------------------------*/ int ProTest2dDisplistMenu( void* p_dummy, int int_dummy ) { ProError status; int menu_id; /* The identifier of the created menu */ int action; ProMdl part; /* Get current Pro/E object */ status = ProMdlCurrentGet( &part ); TEST_CALL_REPORT( "ProMdlCurrentGet()", "ProTest2dDisplistMenu()", status, status != PRO_TK_NO_ERROR); if( status == PRO_TK_BAD_CONTEXT ) { ProUtilMsgPrint( "gen", "TEST %0s", "An object is required" ); return -1; } /*---------------------------------*\ Create new menu Disp List \*---------------------------------*/ /* Load base menu from file */ status = ProMenuFileRegister( "Disp List", "tkdlist.mnu", &menu_id ); TEST_CALL_REPORT( "ProMenuFileRegister()", "ProTest2dDisplistMenu()", status, status != PRO_TK_NO_ERROR ); /* Define menu buttons */ ProMenubuttonActionSet( "Disp List", "Cre DispList", ProTest2dDisplist, NULL, DISP_LIST_CREATE ); ProMenubuttonActionSet( "Disp List", "Del DispList", ProTest2dDisplist, NULL, DISP_LIST_DEL ); ProMenubuttonActionSet( "Disp List", "Disp DispList", ProTest2dDisplist, NULL, DISP_LIST_DISPLAY ); ProMenubuttonActionSet( "Disp List", "Invld DispList", (ProMenubuttonAction)ProTestDisplistInvalidate, &part, 0 ); ProMenubuttonActionSet( "Disp List", "Done", (ProMenubuttonAction)ProMenuDelete, NULL, 0 ); ProMenubuttonActionSet( "Disp List", "Disp List", (ProMenubuttonAction)ProMenuDelete, NULL, 0 ); /*--------------------------*\ Run menu Disp List \*--------------------------*/ status = ProMenuCreate( PROMENUTYPE_MAIN, "Disp List", &menu_id ); TEST_CALL_REPORT( "ProMenuCreate()", "ProTest2dDisplistMenu()", status, status != PRO_TK_NO_ERROR ); if( status == PRO_TK_NO_ERROR ) { status = ProMenuProcess( "Disp List", &action ); TEST_CALL_REPORT( "ProMenuProcess()", "ProTest2dDisplistMenu()", status, status != PRO_TK_NO_ERROR ); } return 0; } /*---------------------------------------------------------------------*\ Function: ProTest2dDisplist() Purpose: On-button function. Manipulate a 2D diplay list. Returns: 0 - success; Now ignored. \*---------------------------------------------------------------------*/ int ProTest2dDisplist( void* p_dummy, int option ) { ProError status; int id; /* The disp list id */ ProMatrix matrix; /* Points are in the object's csys */ status = ProWindowCurrentMatrixGet( matrix ); TEST_CALL_REPORT( "ProWindowCurrentMatrixGet()", "ProTest2dDisplist()", status, status != PRO_TK_NO_ERROR ); switch( option ) { case DISP_LIST_DEL: /* Delete */ /* Get the display list id */ ProUtilMsgPrint( "gen", "TEST %0s", "Enter the Display List id: " ); status = ProMessageIntegerRead( NULL, &id ); TEST_CALL_REPORT( "ProMessageIntegerRead()", "ProTest2dDisplist()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) break; /* Delete the specified display list */ status = ProDisplist2dDelete( id ); TEST_CALL_REPORT( "ProDisplist2dDelete()", "ProTest2dDisplist()", status, status != PRO_TK_NO_ERROR ); break; case DISP_LIST_CREATE: /* Create */ /* Get the display list id */ ProUtilMsgPrint( "gen", "TEST %0s", "Enter the Display List id: "); status = ProMessageIntegerRead( NULL, &id ); TEST_CALL_REPORT( "ProMessageIntegerRead()", "ProTest2dDisplist()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) break; status = ProDisplist2dCreate( id, matrix, ProTestDisplistDraw ); TEST_CALL_REPORT( "ProDisplist2dCreate()", "ProTest2dDisplist()", status, status != PRO_TK_NO_ERROR ); /* bug in the function ProDisplist2dDisplay() */ status = ProDisplist2dDisplay( id, matrix ); TEST_CALL_REPORT( "ProDisplist2dDisplay()", "ProTest2dDisplist()", status, 0 ); break; case DISP_LIST_DISPLAY: /* Display */ /* Get the display list id */ ProUtilMsgPrint( "gen", "TEST %0s", "Enter the Display List id: "); status = ProMessageIntegerRead( NULL, &id ); TEST_CALL_REPORT( "ProMessageIntegerRead()", "ProTest2dDisplist()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) break; /* bug in the function ProDisplist2dDisplay() */ status = ProDisplist2dDisplay( id, matrix ); TEST_CALL_REPORT( "ProDisplist2dDisplay()", "ProTest2dDisplist()", status, 0 ); break; default: break; } ProWindowRepaint( PRO_VALUE_UNUSED ); return 0; } /*---------------------------------------------------------------------*\ Function: ProTest3dDisplistMenu() Purpose: On-button function. Set up the display list menu Returns: 0 - success; -1 - error. Now ignored. \*---------------------------------------------------------------------*/ int ProTest3dDisplistMenu( void* p_dummy, int int_dummy ) { ProError status; int menu_id; /* The identifier of the created menu */ int action; ProMdl part; /* Get current Pro/E object */ status = ProMdlCurrentGet( &part ); TEST_CALL_REPORT( "ProMdlCurrentGet()", "ProTest3dDisplistMenu()", status, status != PRO_TK_NO_ERROR); if( status == PRO_TK_BAD_CONTEXT ) { ProUtilMsgPrint( "gen", "TEST %0s", "An object is required" ); return -1; } /*---------------------------------*\ Create new menu Disp List \*---------------------------------*/ /* Load base menu from file */ status = ProMenuFileRegister( "Disp List", "tkdlist.mnu", &menu_id ); TEST_CALL_REPORT( "ProMenuFileRegister()", "ProTest3dDisplistMenu()", status, status != PRO_TK_NO_ERROR ); /* Define menu buttons */ ProMenubuttonActionSet( "Disp List", "Cre DispList", ProTest3dDisplist, NULL, DISP_LIST_CREATE ); ProMenubuttonActionSet( "Disp List", "Del DispList", ProTest3dDisplist, NULL, DISP_LIST_DEL ); ProMenubuttonActionSet( "Disp List", "Disp DispList", ProTest3dDisplist, NULL, DISP_LIST_DISPLAY ); ProMenubuttonActionSet( "Disp List", "Invld DispList", (ProMenubuttonAction)ProTestDisplistInvalidate, &part, 0 ); ProMenubuttonActionSet( "Disp List", "Done", (ProMenubuttonAction)ProMenuDelete, NULL, 0 ); ProMenubuttonActionSet( "Disp List", "Disp List", (ProMenubuttonAction)ProMenuDelete, NULL, 0 ); /*--------------------------*\ Run menu Disp List \*--------------------------*/ status = ProMenuCreate( PROMENUTYPE_MAIN, "Disp List", &menu_id ); TEST_CALL_REPORT( "ProMenuCreate()", "ProTest3dDisplistMenu()", status, status != PRO_TK_NO_ERROR ); if( status == PRO_TK_NO_ERROR ) { status = ProMenuProcess( "Disp List", &action ); TEST_CALL_REPORT( "ProMenuProcess()", "ProTest3dDisplistMenu()", status, status != PRO_TK_NO_ERROR ); } return 0; } /*---------------------------------------------------------------------*\ Function: ProTest3dDisplist() Purpose: On-button function. Manipulate a 3D diplay list. Returns: 0 - success; Now ignored. \*---------------------------------------------------------------------*/ int ProTest3dDisplist( void* p_dummy, int option ) { ProError status; int id; /* The disp list id */ ProMatrix matrix; /* Points are in the object's csys */ status = ProWindowCurrentMatrixGet( matrix ); TEST_CALL_REPORT( "ProWindowCurrentMatrixGet()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); switch( option ) { case DISP_LIST_DEL: /* Delete */ /* Get the display list id */ ProUtilMsgPrint( "gen", "TEST %0s", "Enter the Display List id: " ); status = ProMessageIntegerRead( NULL, &id ); TEST_CALL_REPORT( "ProMessageIntegerRead()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) break; /* Delete the specified display list */ status = ProDisplist3dDelete( id ); TEST_CALL_REPORT( "ProDisplist3dDelete()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); break; case DISP_LIST_CREATE: /* Create */ /* Get the display list id */ ProUtilMsgPrint( "gen", "TEST %0s", "Enter the Display List id: "); status = ProMessageIntegerRead( NULL, &id ); TEST_CALL_REPORT( "ProMessageIntegerRead()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) break; status = ProDisplist3dCreate( id, ProTestDisplistDraw ); TEST_CALL_REPORT( "ProDisplist3dCreate()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); status = ProDisplist3dDisplay( id, matrix ); TEST_CALL_REPORT( "ProDisplist3dDisplay()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); break; case DISP_LIST_DISPLAY: /* Display */ /* Get the display list id */ ProUtilMsgPrint( "gen", "TEST %0s", "Enter the Display List id: "); status = ProMessageIntegerRead( NULL, &id ); TEST_CALL_REPORT( "ProMessageIntegerRead()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) break; status = ProDisplist3dDisplay( id, matrix ); TEST_CALL_REPORT( "ProDisplist3dDisplay()", "ProTest3dDisplist()", status, status != PRO_TK_NO_ERROR ); break; default: break; } ProWindowRepaint( PRO_VALUE_UNUSED ); return 0; } /*---------------------------------------------------------------------*\ Function: ProTestDisplistInvalidate() Purpose: On-button function. Invalidate the 2 or 3 dimensional display list Returns: 0 - success; -1 - error. Now ignored. \*---------------------------------------------------------------------*/ int ProTestDisplistInvalidate( ProMdl* p_model, int int_dummy ) { ProError status; status = ProDisplistInvalidate( *p_model ); TEST_CALL_REPORT( "ProDisplistInvalidate()", "ProTestDisplistInvalidate()", status, status != PRO_TK_NO_ERROR ); return (status == PRO_TK_NO_ERROR) ? 0 : -1; } /*---------------------------------------------------------------------*\ Function: ProTestDisplistDraw() Purpose: Call some graphics functions to create the disp list Returns: PRO_TK_NO_ERROR - success; \*---------------------------------------------------------------------*/ int ProTestDisplistDraw( void ) { TEST_CALL_REPORT("ProDisplistCallback()", "ProTestDisplistDraw()", 0, 0); ProTestEntityDrawMenu (NULL, 0); return PRO_TK_NO_ERROR; }