-+-+-+-+-+-+-+-+ START OF PART 275 -+-+-+-+-+-+-+-+ X Pevent eventdata; X Ploc inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X Plocrec locrec; X Pviewmapping3 tempmap; X X if (!inputmode) X `7B X tempmap = viewmap; X tempmap.window.xmin = ptk_readfloat(viewwsid, 0.0,`20 X "Input window, xmin (0.0) >", &echoarea); X tempmap.window.xmax = ptk_readfloat(viewwsid, 1.0,`20 X "Input window, xmax (1.0) >", &echoarea); X tempmap.window.ymin = ptk_readfloat(viewwsid, 0.0,`20 X "Input window, ymin (0.0) >", &echoarea); X tempmap.window.ymax = ptk_readfloat(viewwsid, 1.0,`20 X "Input window, ymax (1.0) >", &echoarea); X if (checkmapping(&tempmap)) X `7B X viewmap.window = tempmap.window; X updatemxviewplane(); X updatemxvmm(); X updatemxviewvolume(); X updatedcwindow(); X predrawallstruct(viewwsid, PALWAYS); X `7D X `7D X else X `7B X ptk_setrotatortitle(rot2d1, "scale window"); X ptk_setrotatortitle(rot2d2, "shift window"); X pos = ptk_point(0.1, 0.88); X ptk_setmenuposition(rot2d1, &pos); X pos = ptk_point(0.1, 0.66); X ptk_setmenuposition(rot2d2, &pos); X ptk_postmenu(viewwsid, rot2d1); X ptk_postmenu(viewwsid, rot2d2); X predrawallstruct(viewwsid, PALWAYS); X psetlocmode(viewwsid, 1, PEVENT, PES_ECHO); X tempmap = viewmap; X quit = FALSE; X do X `7B X pawaitevent(0.0, &eventdata); X if ((eventdata.class == PI_LOCATOR) && (eventdata.ws == viewwsid)) X `7B X pgetloc(&inputloc); X geninput.inputclass = PI_LOCATOR; X geninput.ptkugeninput.locpoint = inputloc.position; X tempmap.window = viewmap.window; X if (ptk_scanmenus(viewwsid, &geninput, &menuoutput)) X `7B X psetlocmode(viewwsid, 1, PREQUEST, PES_ECHO); X if ((menuoutput.menuid == rot2d1) `7C`7C X (menuoutput.menuid == rot2d2)) X`09 `7B X if (menuoutput.menuid == rot2d1) X do_scalewindow(&menuoutput, &tempmap.window); X else X do_shiftwindow(&menuoutput, &tempmap.window); X if (checkmapping(&tempmap)) X `09 `7B X viewmap.window = tempmap.window; X updatemxviewplane(); X updatemxvmm(); X updatemxviewvolume(); X updatedcwindow(); X predrawallstruct(viewwsid, PALWAYS); X `7D X `09 `7D X psetlocmode(viewwsid, 1, PEVENT, PES_ECHO); X `7D X else X `7B X quit = TRUE; X `7D X `7D X `7D while (!quit); X `7D X ptk_unpostmenu(viewwsid, rot2d1); X ptk_unpostmenu(viewwsid, rot2d2); X`7D /* do_viewwindow */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_scaleviewport(C(ptksmenuoutput *) menuout, C(Plimit3 *) vwpt) XPreANSI(ptksmenuoutput *menuout) XPreANSI(Plimit3 *vwpt) X`7B X Ppoint3 scale; X X switch (menuout->itemnum) X `7B X case 1: /* increase y */ X scale = ptk_point3(1.0, 1.0 + (0.1 * menuout->value.y), 1.0); X break; X X case 2: /* decrease y */ X scale = ptk_point3(1.0, 1.0 - (0.1 * (1.0 - menuout->value.y)), 1.0); X break; X X case 3: /* decrease x */ X scale = ptk_point3(1.0 - (0.1 * (1.0 - menuout->value.x)), 1.0, 1.0); X break; X X case 4: /* increase x */ X scale = ptk_point3(1.0 + (0.1 * menuout->value.x), 1.0, 1.0); X break; X X case 5: /* increase z */ X scale = ptk_point3(1.0, 1.0, 1.0 + (0.1 * menuout->value.y)); X break; X X case 6: /* decrease z */ X scale = ptk_point3(1.0, 1.0, 1.0 - (0.1 * menuout->value.y)); X break; X `7D X ptk_scalelimits3(&scale, vwpt); X`7D /* do_scaleviewport */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_shiftviewport(C(ptksmenuoutput *) menuout, C(Plimit3 *) vwpt) XPreANSI(ptksmenuoutput *menuout) XPreANSI(Plimit3 *vwpt) X`7B X Ppoint3 shift; X X switch (menuout->itemnum) X `7B X case 1: /* increase y */ X shift = ptk_point3(0.0, (menuout->value.y * movefactor), 0.0); X break; X X case 2: /* decrease y */ X shift = ptk_point3(0.0, -((1.0 - menuout->value.y) * movefactor), 0.0) V; X break; X X case 3: /* decrease x */ X shift = ptk_point3(-((1.0 - menuout->value.x) * movefactor), 0.0, 0.0) V; X break; X X case 4: /* increase x */ X shift = ptk_point3((menuout->value.x * movefactor), 0.0, 0.0); X break; X X case 5: /* increase z */ X shift = ptk_point3(0.0, 0.0, (menuout->value.y * movefactor)); X break; X X case 6: /* decrease z */ X shift = ptk_point3(0.0, 0.0, -(menuout->value.y * movefactor)); X break; X `7D X ptk_shiftlimits3(&shift, vwpt); X`7D /* do_shiftviewport */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_projviewport() X`7B X Ppoint pos; X ptkboolean projvwptquit; X Pevent eventdata; X Ploc inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X Plocrec locrec; X Pviewmapping3 tempmap; X X if (!inputmode) X `7B X tempmap = viewmap; X tempmap.viewport.xmin = ptk_readfloat(viewwsid, 0.0,`20 X "Input viewport, xmin (0.0) >", &echoarea); X tempmap.viewport.xmax = ptk_readfloat(viewwsid, 1.0,`20 X "Input viewport, xmax (1.0) >", &echoarea); X tempmap.viewport.ymin = ptk_readfloat(viewwsid, 0.0,`20 X "Input viewport, ymin (0.0) >", &echoarea); X tempmap.viewport.ymax = ptk_readfloat(viewwsid, 1.0,`20 X "Input viewport, ymax (1.0) >", &echoarea); X tempmap.viewport.zmin = ptk_readfloat(viewwsid, 0.0,`20 X "Input viewport, zmin (0.0) >", &echoarea); X tempmap.viewport.zmax = ptk_readfloat(viewwsid, 1.0,`20 X "Input viewport, zmax (1.0) >", &echoarea); X if (checkmapping(&tempmap)) X `7B X viewmap.viewport = tempmap.viewport; X updatemxvmm(); X updatemxprojviewport(); X updatedcwindow(); X predrawallstruct(viewwsid, PALWAYS); X `7D X `7D X else X `7B X ptk_setrotatortitle(rot3d1, "scale viewport"); X ptk_setrotatortitle(rot3d2, "shift viewport"); X pos = ptk_point(0.15, 0.88); X ptk_setmenuposition(rot3d1, &pos); X pos = ptk_point(0.15, 0.66); X ptk_setmenuposition(rot3d2, &pos); X ptk_postmenu(viewwsid, rot3d1); X ptk_postmenu(viewwsid, rot3d2); X predrawallstruct(viewwsid, PALWAYS); X psetlocmode(viewwsid, 1, PEVENT, PES_ECHO); X tempmap = viewmap; X projvwptquit = FALSE; X do X `7B X pawaitevent(0.0, &eventdata); X if ((eventdata.class == PI_LOCATOR) && (eventdata.ws == viewwsid)) X `7B X pgetloc(&inputloc); X geninput.inputclass = PI_LOCATOR; X geninput.ptkugeninput.locpoint = inputloc.position; X tempmap.viewport = viewmap.viewport; X if (ptk_scanmenus(viewwsid, &geninput, &menuoutput)) X `7B X psetlocmode(viewwsid, 1, PREQUEST, PES_ECHO); X if ((menuoutput.menuid == rot3d1) `7C`7C X (menuoutput.menuid == rot3d2)) X `09 `7B X if (menuoutput.menuid == rot3d1) X do_scaleviewport(&menuoutput, &tempmap.viewport); X else X do_shiftviewport(&menuoutput, &tempmap.viewport); X if (checkmapping(&tempmap)) X `09 `7B X viewmap.viewport = tempmap.viewport; X updatemxvmm(); X updatemxprojviewport(); X updatedcwindow(); X predrawallstruct(viewwsid, PALWAYS); X `7D X `09 `7D X psetlocmode(viewwsid, 1, PEVENT, PES_ECHO); X `7D X else X `7B X projvwptquit = TRUE; X `7D X `7D X `7D while (!projvwptquit); X `7D X ptk_unpostmenu(viewwsid, rot3d1); X ptk_unpostmenu(viewwsid, rot3d2); X`7D /* do_projviewport */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_projection() X`7B X if (viewmap.proj == PPARALLEL) X viewmap.proj = PPERSPECTIVE; X else X viewmap.proj = PPARALLEL; X updatemxvmm(); X updatedcwindow(); X`7D /* do_projection */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_inquire() X`7B X ptk_printfterminal(terminalwindow, "vrp = %f, %f, %f\n", vrp.x, vrp.y, X vrp.z); X ptk_printfterminal(terminalwindow, "vpn = %f, %f, %f\n", vpn.x, vpn.y, X vpn.z); X ptk_printfterminal(terminalwindow, "vup = %f, %f, %f\n", vup.x, vup.y, X vup.z); X ptk_printfterminal(terminalwindow, "prp = %f, %f, %f\n", viewmap.prp.x,`20 X viewmap.prp.y, viewmap.prp.z); X ptk_printfterminal(terminalwindow, "view plane = %f\n",`20 X viewmap.view_plane); `20 X ptk_printfterminal(terminalwindow, "front plane = %f\n",`20 X viewmap.front_plane); X ptk_printfterminal(terminalwindow, "back plane = %f\n",`20 X viewmap.back_plane); X ptk_writelnterminal(terminalwindow, "view window:"); X ptk_printfterminal(terminalwindow, "xmin = %f, xmax = %f\n",`20 X viewmap.window.xmin, viewmap.window.xmax); X ptk_printfterminal(terminalwindow, "ymin = %f, ymax = %f\n",`20 X viewmap.window.ymin, viewmap.window.ymax); X ptk_writelnterminal(terminalwindow, "projection viewport:"); X ptk_printfterminal(terminalwindow, "xmin = %f, xmax = %f\n",`20 X viewmap.viewport.xmin, viewmap.viewport.xmax); X ptk_printfterminal(terminalwindow, "ymin = %f, ymax = %f\n",`20 X viewmap.viewport.ymin, viewmap.viewport.ymax); X ptk_printfterminal(terminalwindow, "zmin = %f, zmax = %f\n",`20 X viewmap.viewport.zmin, viewmap.viewport.zmax); X predrawallstruct(viewwsid, PALWAYS); X`7D /* do_inquire */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void makemenus(C(void)) X`7B X Pint err; X Ppoint topleft; X Ppoint box, size, pos; X X /* view menu */ X viewmenuid = ptk_stringtoint("menuid", "viewmenu");`20 X box = ptk_point(0.1, 0.05); X topleft = ptk_point(0.0, 1.0); X ptk_createboxmenu(viewmenuid, &topleft, &box); X ptk_setboxmenuattrs(viewwsid, viewmenuid, PTP_DOWN, menutextfont,`20 X menutextcolourind, menucolourind, X menucolourind, tlcolourind, brcolourind);`20 X ptk_createtextmenuitem(viewmenuid, "orient'n", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(viewmenuid, "mapping", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(viewmenuid, "clipping", 3, PEDIT_INSERT, &err); X ptk_createtextmenuitem(viewmenuid, "reset", 4, PEDIT_INSERT, &err); X ptk_createtextmenuitem(viewmenuid, "keyboard", 5, PEDIT_INSERT, &err); X ptk_createtextmenuitem(viewmenuid, "inquire", 6, PEDIT_INSERT, &err); X ptk_createtextmenuitem(viewmenuid, "exit", 7, PEDIT_INSERT, &err); X X /* view orientation menu */ X orimenuid = ptk_stringtoint("menuid", "orientationmenu");`20 X box = ptk_point(0.1, 0.05); X topleft = ptk_point(0.0, 1.0); X ptk_createboxmenu(orimenuid, &topleft, &box); X ptk_setboxmenuattrs(viewwsid, orimenuid, PTP_DOWN, menutextfont,`20 X menutextcolourind, menucolourind, X menucolourind, tlcolourind, brcolourind);`20 X ptk_createtextmenuitem(orimenuid, "vrp", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(orimenuid, "vpn", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(orimenuid, "vup", 3, PEDIT_INSERT, &err); X X /* view clipping menu */ X clipmenuid = ptk_stringtoint("menuid", "clippingmenu");`20 X box = ptk_point(0.1, 0.05); X topleft = ptk_point(0.0, 1.0); X ptk_createboxmenu(clipmenuid, &topleft, &box);`20 X ptk_setboxmenuattrs(viewwsid, clipmenuid, PTP_DOWN, menutextfont,`20 X menutextcolourind, menucolourind, X menucolourind, tlcolourind, brcolourind);`20 X ptk_createtextmenuitem(clipmenuid, "x-y ON", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(clipmenuid, "front ON", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(clipmenuid, "back ON", 3, PEDIT_INSERT, &err); X X /* view mapping menu */ X mapmenuid = ptk_stringtoint("menuid", "mappingmenu");`20 X box = ptk_point(0.1, 0.05); X topleft = ptk_point(0.0, 1.0); X ptk_createboxmenu(mapmenuid, &topleft, &box); X ptk_setboxmenuattrs(viewwsid, mapmenuid, PTP_DOWN, menutextfont,`20 X menutextcolourind, menucolourind, X menucolourind, tlcolourind, brcolourind);`20 X ptk_createtextmenuitem(mapmenuid, "prp", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mapmenuid, "front pl.", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mapmenuid, "back pl.", 3, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mapmenuid, "view pl.", 4, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mapmenuid, "window", 5, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mapmenuid, "viewport", 6, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mapmenuid, "perspective", 7, PEDIT_INSERT, &err); X X /* window menu */ X windowmenuid = ptk_stringtoint("menuid", "windowmenu");`20 X box = ptk_point(0.1, 0.05); X topleft = ptk_point(0.0, 1.0); X ptk_createboxmenu(windowmenuid, &topleft, &box); X ptk_setboxmenuattrs(viewwsid, windowmenuid, PTP_DOWN, menutextfont,`20 X menutextcolourind, menucolourind, X menucolourind, tlcolourind, brcolourind);`20 X ptk_createtextmenuitem(windowmenuid, "close", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(windowmenuid, "move", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(windowmenuid, "resize", 3, PEDIT_INSERT, &err); X ptk_createtextmenuitem(windowmenuid, "front", 4, PEDIT_INSERT, &err); X ptk_createtextmenuitem(windowmenuid, "back", 5, PEDIT_INSERT, &err); X ptk_createtextmenuitem(windowmenuid, "camera", 6, PEDIT_INSERT, &err); X X /* camera interface */ X `20 X /* rotators */ X rot3d1 = ptk_stringtoint("menuid", "rotator3d1");`20 X rot3d2 = ptk_stringtoint("menuid", "rotator3d2");`20 X rot2d1 = ptk_stringtoint("menuid", "rotator2d1");`20 +-+-+-+-+-+-+-+- END OF PART 275 +-+-+-+-+-+-+-+-