/*============================================================================*\ FILE : TestDrawingView.c PURPOSE : Test ProDrawingView functionality HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 15-Oct-99 I-03-20 akh $$1 First version \*============================================================================*/ /*----------------------------------------------------------------------------*\ Pro/TOOLKIT includes \*----------------------------------------------------------------------------*/ #include "ProSelection.h" #include "ProMessage.h" #include "ProMenu.h" #include "ProMdl.h" #include "ProDrawing.h" #include "ProUtil.h" #include "ProWindows.h" #include "ProCsys.h" #include "ProDwgtable.h" /*----------------------------------------------------------------------------*\ Application includes \*----------------------------------------------------------------------------*/ #include "UtilMessage.h" #include "UtilMenu.h" #include "UtilFiles.h" /*----------------------------------------------------------------------------*\ Pro/DEVELOP includes \*----------------------------------------------------------------------------*/ #include "pd_prototype.h" /*----------------------------------------------------------------------------*\ Application macros \*----------------------------------------------------------------------------*/ #define SET_SCALE 1 #define MOVE 2 #define DELETE 3 #define DISPLAY_STATUS 4 #define VIEW_PROJECTION 0 #define VIEW_GENERAL 1 #define DISPLAY_STYLE 0 #define QUILT_HRL 1 #define TAN_DISPLAY 2 #define CABLE_DISPLAY 3 #define CONCEPT_MODEL 4 #define WELD_XSEC 5 #define DRAWING_VIEWS ".dvw" /*===========================================================================*\ Function : ProTestDrawingView Purpose : \*===========================================================================*/ int ProTestDrawingView(ProMdl *mod) { int menu_id; ProDrawing drawing; ProError err; int ProTestDwgInfo(); int ProTestDwgViewModify(); int ProTestViewCreate(); if (mod == NULL) err = ProMdlCurrentGet ((ProMdl*)&drawing); else drawing = (ProDrawing)*mod; err = ProMenuFileRegister("DrawView","tkdrwview.mnu", &menu_id); err = ProMenubuttonActionSet("DrawView","Info", (ProMenubuttonAction)ProTestDwgInfo, drawing, 0); err = ProMenubuttonActionSet("DrawView","Set Scale", (ProMenubuttonAction)ProTestDwgViewModify, drawing, SET_SCALE); err = ProMenubuttonActionSet("DrawView","Move", (ProMenubuttonAction)ProTestDwgViewModify, drawing, MOVE); err = ProMenubuttonActionSet("DrawView","Delete", (ProMenubuttonAction)ProTestDwgViewModify, drawing, DELETE); err = ProMenubuttonActionSet("DrawView","SetDisplay", (ProMenubuttonAction)ProTestDwgViewModify, drawing, DISPLAY_STATUS); err = ProMenubuttonActionSet("DrawView","Create", (ProMenubuttonAction)ProTestViewCreate, drawing, 0); err = ProMenubuttonActionSet("DrawView","DrawView", (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenuCreate(PROMENUTYPE_MAIN, "DrawView",&menu_id); err = ProMenuProcess("", &menu_id); return (0); } /*===========================================================================*\ Function : ProTestDwgInfo Purpose : \*===========================================================================*/ int ProTestDwgInfo(ProDrawing drawing) { ProCharLine fname; ProName wfname; FILE *fp_dview; ProError err; int n_views = 0, i; ProView *views = NULL; fp_dview = ProUtilGenFilePtr((ProMdl)drawing, DRAWING_VIEWS, fname, "w"); if (fp_dview == NULL) return (-1); /* Bug in function ProDrawingViewsCollect in the pipe mode */ fprintf(fp_dview, "File name : %s\n", fname); err = ProDrawingViewsCollect(drawing, &views); TEST_CALL_REPORT ("ProDrawingViewsCollect()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err == PRO_TK_NO_ERROR) { err = ProArraySizeGet(views, &n_views); TEST_CALL_REPORT ("ProArraySizeGet()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR); for(i = 0; i < n_views; i++) { fprintf(fp_dview, "\nView(%d) ", i); ProTestViewInfoPrint (drawing, views[i], fp_dview); } } err = ProArrayFree ((ProArray*)&views); fclose(fp_dview); ProStringToWstring(wfname, fname); err = ProInfoWindowDisplay(wfname, NULL, NULL); return (0); } /*===========================================================================*\ Function : ProTestViewInfoPrint Purpose : \*===========================================================================*/ int ProTestViewInfoPrint (ProDrawing drawing, ProView view, FILE *fp_dview) { ProSolid solid; ProError err; ProPoint3d out_line[2]; ProMdldata data; ProBoolean overlay; ProName name; ProCharLine model_name, type; double scale = 0.0; ProDrawingViewDisplay disp_status; char* ProTesDisplayStyleToStr(ProDisplayStyle ); char* ProTestTanedgeDisplayToStr(ProTanedgeDisplay ); char* ProTestCableDisplayToStr(ProCableDisplay ); err = ProDrawingViewSolidGet(drawing, view, &solid); TEST_CALL_REPORT ("ProDrawingViewSolidGet()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR); err = ProMdlDataGet(ProSolidToMdl(solid), &data); ProWstringToString(model_name, data.name); ProWstringToString(type, data.type); fprintf(fp_dview, "Model displayed in a view:\t%s.%s\t\n", model_name, type); err = ProDrawingViewNameGet (drawing, view, name); TEST_CALL_REPORT ("ProDrawingViewNameGet()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR); fprintf(fp_dview, "View name: %s\n", ProWstringToString (model_name, name)); err = ProDrawingViewScaleGet(drawing, view, &scale); TEST_CALL_REPORT ("ProDrawingViewScaleGet()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR); err = ProDrawingViewDisplayGet (drawing, view, &disp_status); TEST_CALL_REPORT ("ProDrawingViewDisplayGet()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR); fprintf(fp_dview, "Display Style: %s\n", ProTesDisplayStyleToStr (disp_status.style)); fprintf(fp_dview, "Tanedge Display: %s\n", ProTestTanedgeDisplayToStr (disp_status.tangent_edge_display)); fprintf(fp_dview, "Cable Display: %s\n", ProTestCableDisplayToStr (disp_status.cable_display)); fprintf(fp_dview, "Quilt Hlr: %s\n", disp_status.quilt_hlr ? "TRUE" : "FALSE" ); fprintf(fp_dview, "Concept Model: %s\n", disp_status.concept_model ? "TRUE" : "FALSE" ); fprintf(fp_dview, "Weld Xsec: %s\n", disp_status.weld_xsec ? "TRUE" : "FALSE" ); err = ProDrawingViewOutlineGet (drawing, view, out_line); TEST_CALL_REPORT ("ProDrawingViewOutlineGet()", "ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR); fprintf(fp_dview, "Out line: x_pnt[1] = %6.1f x_pnt[2] = %6.1f " "x_pnt[3] = %6.1f\n", out_line[0][0], out_line[0][1], out_line[0][2]); fprintf(fp_dview, "Out line: y_pnt[1] = %6.1f y_pnt[2] = %6.1f " "y_pnt[3] = %6.1f\n", out_line[1][0], out_line[1][1], out_line[1][2]); return(0); } /*===========================================================================*\ Function : ProTestDwgViewModify Purpose : \*===========================================================================*/ int ProTestDwgViewModify(ProDrawing drawing, int arg) { double scale; ProCharLine message, astr; ProModelitem sel_item; ProBoolean delete_children; ProSelection *sel; ProView view; ProError err; ProSolid solid; int n_sel, view_id = 0; ProPoint3d pnt, to_pnt, sel_pnt; ProVector tvec; ProMatrix trans; ProMouseButton btn; ProDrawingViewDisplay disp_status; /* Pick the view */ ProUtilMsgPrint("gen", "TEST %0s", "Select a feature to identify a view"); err = ProSelect("feature", 1, NULL, NULL, NULL, NULL, &sel, &n_sel); if (n_sel <= 0 || err!=PRO_TK_NO_ERROR) return (0); err = ProSelectionViewGet(sel[0], &view); TEST_CALL_REPORT ("ProSelectionViewGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); err = ProSelectionPoint3dGet (sel[0], pnt); TEST_CALL_REPORT ("ProSelectionViewGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); err = ProSelectionModelitemGet (sel[0], &sel_item); TEST_CALL_REPORT ("ProSelectionViewGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); view_id = prodb_view_ptr_to_id((Prohandle)view); pro_transform_to_draw(pnt, (Prohandle)drawing, view_id, sel_pnt); /* Bug in function ProDrawingViewTransformGet() */ #if 0 err = ProDrawingViewTransformGet (drawing, view, PRO_B_TRUE, trans); TEST_CALL_REPORT ("ProDrawingViewTransformGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); #endif switch (arg) { case SET_SCALE : /* Set the view scale */ /* Get the current scale to use as a default */ err = ProDrawingViewScaleGet(drawing, view, &scale); TEST_CALL_REPORT ("ProDrawingViewScaleGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); sprintf(message,"scale [%5.2f] ",scale); sprintf(astr, "Enter %s: ", message); ProUtilMsgPrint("gen", "TEST %0s", astr); if(ProMessageDoubleRead(NULL, &scale) != PRO_TK_NO_ERROR) return (0); err = ProDrawingViewScaleSet(drawing, view, scale); TEST_CALL_REPORT ("ProDrawingViewScaleSet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); break; case MOVE : /* Translate the view */ ProUtilMsgPrint("gen", "TEST %0s", "Select the new position: "); err = ProMousePickGet(PRO_LEFT_BUTTON, &btn, to_pnt); TEST_CALL_REPORT ("ProMousePickGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); tvec[0] = to_pnt[0] - sel_pnt[0]; tvec[1] = to_pnt[1] - sel_pnt[1]; tvec[2] = to_pnt[2] - sel_pnt[2]; err = ProDrawingViewMove(drawing, view, tvec); TEST_CALL_REPORT ("ProDrawingViewMove()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); break; case DELETE : ProUtilMsgPrint("gen", "TEST %0s", "Delete children too [N] ?"); delete_children = (ProBoolean)ProUtilYesnoGet("No"); err = ProDrawingViewSolidGet (drawing, view, &solid); TEST_CALL_REPORT ("ProDrawingViewSolidGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); err = ProDrawingViewDelete(drawing, view, delete_children); TEST_CALL_REPORT ("ProDrawingViewDelete()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); break; case DISPLAY_STATUS : err = ProDrawingViewDisplayGet (drawing, view, &disp_status); TEST_CALL_REPORT ("ProDrawingViewDisplayGet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); ProTesViewDispChoise (&disp_status); err = ProDrawingViewDisplaySet (drawing, view, &disp_status); TEST_CALL_REPORT ("ProDrawingViewDisplaySet()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); break; default: break; } err = ProWindowRepaint (PRO_VALUE_UNUSED); TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR); return (0); } /*===========================================================================*\ Function : ProTesViewDispChoise Purpose : \*===========================================================================*/ int ProTesViewDispChoise (ProDrawingViewDisplay *disp_status) { ProError err; int menu_id; void ProTesViewDispSet (ProDrawingViewDisplay *, int ); err = ProMenuFileRegister("ViewDisplay","tkviewdisp.mnu", &menu_id); err = ProMenubuttonActionSet("ViewDisplay","ViewDisplay", (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenubuttonActionSet("ViewDisplay","DispStyle", (ProMenubuttonAction)ProTesViewDispSet, disp_status, DISPLAY_STYLE); err = ProMenubuttonActionSet("ViewDisplay","QuiltHrl", (ProMenubuttonAction)ProTesViewDispSet, disp_status, QUILT_HRL); err = ProMenubuttonActionSet("ViewDisplay","TanDisplay", (ProMenubuttonAction)ProTesViewDispSet, disp_status, TAN_DISPLAY); err = ProMenubuttonActionSet("ViewDisplay","CableDisplay", (ProMenubuttonAction)ProTesViewDispSet, disp_status, CABLE_DISPLAY); err = ProMenubuttonActionSet("ViewDisplay","ConceptModel", (ProMenubuttonAction)ProTesViewDispSet, disp_status, CONCEPT_MODEL); err = ProMenubuttonActionSet("ViewDisplay","WeldXsec", (ProMenubuttonAction)ProTesViewDispSet, disp_status, WELD_XSEC); err = ProMenubuttonActionSet("ViewDisplay","Done", (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenuCreate(PROMENUTYPE_MAIN, "ViewDisplay",&menu_id); err = ProMenuProcess("ViewDisplay", &menu_id); return (0); } /*===========================================================================*\ Function : ProTesViewDispSet Purpose : \*===========================================================================*/ void ProTesViewDispSet (ProDrawingViewDisplay *disp_status, int action) { ProError err; static ProUtilMenuButtons disp_style[] = { {"DisplayStyle", 0, TEST_CALL_PRO_MENU_DELETE}, {"Default", PRO_DISPSTYLE_DEFAULT, 0}, {"Wireframe", PRO_DISPSTYLE_WIREFRAME, 0}, {"HiddenLine", PRO_DISPSTYLE_HIDDEN_LINE, 0}, {"NoHidden", PRO_DISPSTYLE_NO_HIDDEN, 0}, {"Shared", PRO_DISPSTYLE_SHADED, 0}, {"",0,0} }; static ProUtilMenuButtons cab_disp[] = { {"CableDisplay", 0, TEST_CALL_PRO_MENU_DELETE}, {"Default", PRO_CABLEDISP_DEFAULT, 0}, {"Centerline", PRO_CABLEDISP_CENTERLINE, 0}, {"Thick", PRO_CABLEDISP_THICK, 0}, {"",0,0} }; static ProUtilMenuButtons tang_disp[] = { {"TanedgeDisplay", 0, TEST_CALL_PRO_MENU_DELETE}, {"Default", PRO_TANEDGE_DEFAULT, 0}, {"None", PRO_TANEDGE_NONE, 0}, {"Centerline", PRO_TANEDGE_CENTERLINE, 0}, {"Phantom", PRO_TANEDGE_PHANTOM, 0}, {"Dimmed", PRO_TANEDGE_DIMMED, 0}, {"Solid", PRO_TANEDGE_SOLID, 0}, {"",0,0} }; switch (action) { case DISPLAY_STYLE: err = ProUtilMenuIntValueSelect(disp_style, (int*)&disp_status->style); break; case QUILT_HRL: ProUtilMsgPrint("gen", "TEST %0s", "Quilt hrl (Yes/No)? [N]:"); disp_status->quilt_hlr = (ProBoolean)ProUtilYesnoGet ("No"); break; case TAN_DISPLAY: err = ProUtilMenuIntValueSelect(tang_disp, (int*)&disp_status->tangent_edge_display); break; case CABLE_DISPLAY: err = ProUtilMenuIntValueSelect(cab_disp, (int*)&disp_status->cable_display); break; case CONCEPT_MODEL: ProUtilMsgPrint("gen", "TEST %0s", "Concept Model (Yes/No)? [N]:"); disp_status->concept_model = (ProBoolean)ProUtilYesnoGet ("No"); break; case WELD_XSEC: ProUtilMsgPrint("gen", "TEST %0s", "Weld Xsec (Yes/No)? [N]:"); disp_status->weld_xsec = (ProBoolean)ProUtilYesnoGet ("No"); break; default: break; } } /*===========================================================================*\ Function : ProTestViewCreate Purpose : \*===========================================================================*/ int ProTestViewCreate(ProDrawing drawing) { ProError err; ProSolid solid; ProModelitem sel_item; ProSelection *sel; int n_sheet = 0, view_type = 0, n_sel = 0, win_id, old_win_id; ProBoolean exploded = PRO_B_FALSE; ProPoint3d sel_pnt; double scale = 0.0; ProView view, parent_view; ProCharLine sel_path, line; ProPath current_dir, ch_dir, def_path; ProType type; ProName w_name, w_type; ProMouseButton btn; ProCsys csys; ProMatrix orientation; ProMatrix def_matrix = { { 0.921061, 0.000000, 0.389418, 0.000000}, {-0.305042, 0.621610, 0.721492, 0.000000}, {-0.242066, -0.783327, 0.572541, 0.000000}, { 0.000000, 0.000000, 0.000000, 1.000000} }; static ProUtilMenuButtons create_opt[] = { {"CreateOpt", 0, TEST_CALL_PRO_MENU_DELETE}, {"General", VIEW_GENERAL, 0}, {"Projection", VIEW_PROJECTION, 0}, {"",0,0} }; err = ProUtilMenuIntValueSelect(create_opt, &view_type); err = ProDrawingCurrentSheetGet (drawing, &n_sheet); TEST_CALL_REPORT ("ProDrawingCurrentSheetGet()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); if (view_type) { err = ProUtilFileOpen ("*.*", sel_path); if (err != PRO_TK_NO_ERROR) return (0); err = ProDirectoryCurrentGet(current_dir); ProStringToWstring (ch_dir, sel_path); err = ProFilenameParse(ch_dir, def_path, w_name, w_type, NULL); err = ProDirectoryChange(def_path); err = ProPathCreate(NULL, w_name, w_type, PRO_VALUE_UNUSED, def_path); ProWstringToString(line, def_path); if(ProUtilConfirmNameType(line, sel_path, &type) != PRO_TK_BAD_INPUTS) { err = ProMdlRetrieve(w_name, (ProMdlType)type, (ProMdl*)&solid); TEST_CALL_REPORT ("ProMdlRetrieve()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); } err = ProDirectoryChange(current_dir); err = ProDrawingSolidAdd(drawing, solid); TEST_CALL_REPORT ("ProDrawingSolidAdd()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_IN_USE); if (type == PRO_ASSEMBLY) { ProUtilMsgPrint("gen", "TEST %0s", "Create exploded view? [N]:"); exploded = (ProBoolean)ProUtilYesnoGet ("No"); } ProUtilMsgPrint("gen", "TEST %0s", "Pick point for view"); while(ProMousePickGet(PRO_LEFT_BUTTON, &btn, sel_pnt) != PRO_TK_NO_ERROR); sel_pnt[2] = 0; ProUtilMsgPrint("gen", "TEST %0s", "Enter view scale factor"); if (ProMessageDoubleRead(NULL, &scale) != PRO_TK_NO_ERROR) return (0); err = ProWindowCurrentGet(&old_win_id); err = ProAccessorywindowCreate (w_name, type, &win_id); err = ProMdlDisplay(solid); err = ProWindowCurrentSet(win_id); ProUtilMsgPrint("gen", "TEST %0s", "Select csys"); err = ProSelect("csys", 1, NULL, NULL, NULL, NULL, &sel, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel < 1) ProUtilMatrixCopy (def_matrix, orientation); else { ProUtilMatrixCopy (NULL, orientation); err = ProSelectionModelitemGet (sel[0], &sel_item); err = ProCsysInit (solid, sel_item.id, &csys); prodb_unpack_csys((Prohandle)csys, orientation[0], orientation[1], orientation[2], orientation[3]); orientation[3][0] = orientation[3][1] = orientation[3][2] = 0.0; } ProWindowCurrentSet(old_win_id); ProWindowDelete(win_id); err = ProDrawingGeneralviewCreate (drawing, solid, n_sheet, exploded, sel_pnt, scale, orientation, &view); TEST_CALL_REPORT ("ProDrawingGeneralviewCreate()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); } else { ProUtilMsgPrint("gen", "TEST %0s", "Select a parent view."); err = ProSelect("feature", 1, NULL, NULL, NULL, NULL, &sel, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel < 1) return (0); err = ProSelectionViewGet(sel[0], &parent_view); TEST_CALL_REPORT ("ProSelectionViewGet()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); err = ProSelectionModelitemGet (sel[0], &sel_item); TEST_CALL_REPORT ("ProSelectionModelitemGet()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); err = ProMdlTypeGet (sel_item.owner, (ProMdlType*)&type); TEST_CALL_REPORT ("ProMdlTypeGet()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); if (type == PRO_ASSEMBLY) { ProUtilMsgPrint("gen", "TEST %0s", "Create exploded view? [N]:"); exploded = (ProBoolean)ProUtilYesnoGet ("No"); } ProUtilMsgPrint("gen", "TEST %0s", "Pick point for view"); while (ProMousePickGet(PRO_LEFT_BUTTON, &btn, sel_pnt) != PRO_TK_NO_ERROR); err = ProDrawingProjectedviewCreate (drawing, parent_view, exploded, sel_pnt, &view); TEST_CALL_REPORT ("ProDrawingProjectedviewCreate()", "ProTestViewCreate()", err, err != PRO_TK_NO_ERROR); } return (0); } /*===========================================================================*\ Function : ProTesDisplayStyleToStr Purpose : \*===========================================================================*/ char* ProTesDisplayStyleToStr( ProDisplayStyle type ) { switch (type) { case PRO_DISPSTYLE_DEFAULT : return "DEFAULT"; case PRO_DISPSTYLE_WIREFRAME : return "WIREFRAME"; case PRO_DISPSTYLE_HIDDEN_LINE : return "HIDDEN_LINE"; case PRO_DISPSTYLE_NO_HIDDEN: return "NO_HIDDEN"; case PRO_DISPSTYLE_SHADED : return "SHADED"; default : return "INVALID"; } } /*===========================================================================*\ Function : ProTestTanedgeDisplayToStr Purpose : \*===========================================================================*/ char* ProTestTanedgeDisplayToStr( ProTanedgeDisplay type ) { switch (type) { case PRO_TANEDGE_DEFAULT : return "DEFAULT"; case PRO_TANEDGE_NONE : return "NONE"; case PRO_TANEDGE_CENTERLINE : return "CENTERLINE"; case PRO_TANEDGE_PHANTOM: return "PHANTOM"; case PRO_TANEDGE_DIMMED : return "DIMMED"; case PRO_TANEDGE_SOLID : return "SOLID"; default : return "INVALID"; } } /*===========================================================================*\ Function : ProTesDisplayStyleToStr Purpose : \*===========================================================================*/ char* ProTestCableDisplayToStr( ProCableDisplay type ) { switch (type) { case PRO_CABLEDISP_DEFAULT : return "DEFAULT"; case PRO_CABLEDISP_CENTERLINE : return "CENTERLINE"; case PRO_CABLEDISP_THICK: return "THICK"; default : return "INVALID"; } }