-+-+-+-+-+-+-+-+ START OF PART 277 -+-+-+-+-+-+-+-+ X pinitloc(viewwsid, 1, &initloc, 1, &echo, &locrec); X `7D X ptk_unpostmenu(viewwsid, windowmenuid); `20 X break; X X case 4: /* front */ X ptk_unpostmenu(viewwsid, windowmenuid); X ptk_frontwindow(windoutput->windowid); X break; X X case 5: /* back */ X ptk_unpostmenu(viewwsid, windowmenuid); X ptk_backwindow(windoutput->windowid); X break; X X case 6: /* camera */ X ptk_unpostmenu(viewwsid, windowmenuid); X camerainterface(windoutput->windowid); X break; X `7D `20 X predrawallstruct(viewwsid, PALWAYS); X`7D /* do_windowmenu */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void viewmainloop() X`7B X ptkboolean viewquit; X Pevent eventdata; X Ploc initloc, inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X ptkswindowoutput windowoutput; X Plocrec locrec; X Plimit echo; X X viewquit = FALSE; X psetlocmode(viewwsid, 1, PREQUEST, PES_ECHO); X initloc.view_index = 0; X initloc.position = ptk_point(0.5, 0.5); X echo = ptk_limit(0.0, maxdevx, 0.0, maxdevy); X pinitloc(viewwsid, 1, &initloc, 1, &echo, &locrec); X psetlocmode(viewwsid, 1, PEVENT, PES_ECHO); 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 if (ptk_scanmenus(viewwsid, &geninput, &menuoutput)) X `7B X psetlocmode(viewwsid, 1, PREQUEST, PES_ECHO); X if (menuoutput.menuid == orimenuid) X`09`7B X do_orimenu(menuoutput.itemnum); X predrawallstruct(viewwsid, PALWAYS); X`09`7D X else X if (menuoutput.menuid == mapmenuid) X`09`7B X do_mapmenu(menuoutput.itemnum); X predrawallstruct(viewwsid, PALWAYS); X`09`7D X else X if (menuoutput.menuid == clipmenuid) X`09`7B X do_clipmenu(menuoutput.itemnum); X predrawallstruct(viewwsid, PALWAYS); X`09`7D X else X if (menuoutput.menuid == viewmenuid) X`09`7B X if (menuoutput.itemnum == 7) X viewquit = TRUE; X else X do_viewmenu(menuoutput.itemnum, &inputloc.position); X`09`7D X else X if (menuoutput.menuid == windowmenuid) X`09`7B X do_windowmenu(menuoutput.itemnum, &windowoutput); X curmenu = 0; X `7D X psetlocmode(viewwsid, 1, PEVENT, PES_ECHO); X `7D X else X if (ptk_scanwindows(viewwsid, &geninput, &windowoutput)) X `7B X Pint err; X X if (windowoutput.windowarea == PTKEWINDOWICON) X ptk_createtextmenuitem(windowmenuid, "open", 1, PEDIT_REPLACE, &er Vr); X else X ptk_createtextmenuitem(windowmenuid, "close", 1, PEDIT_REPLACE, &e Vrr); X if ((windowoutput.windowid == dcwindow) `7C`7C X (windowoutput.windowid == terminalwindow)) X ptk_delmenuitem(windowmenuid, 6); X else X ptk_createtextmenuitem(windowmenuid, "camera", 6, PEDIT_REPLACE, & Verr); X ptk_unpostallmenu(viewwsid); X if ((curmenu != windowmenuid) `7C`7C (curwindow != windowoutput.wind Vowid)) X`09`7B X ptk_setmenuposition(windowmenuid, &inputloc.position); X ptk_postmenu(viewwsid, windowmenuid); X curwindow = windowoutput.windowid; X curmenu = windowmenuid; X `7D X else X`09`7B X curwindow = 0; X curmenu = 0; X `7D X predrawallstruct(viewwsid, PALWAYS); X `7D X else X `7B X curwindow = 0; X ptk_unpostallmenu(viewwsid); X if (curmenu != viewmenuid) X`09`7B X ptk_setmenuposition(viewmenuid, &inputloc.position); X ptk_postmenu(viewwsid, viewmenuid); X curmenu = viewmenuid; X `7D X else X curmenu = 0; X predrawallstruct(viewwsid, PALWAYS); X `7D X `7D X `7D while (!viewquit); X#ifdef SUN X pflushevents(viewwsid, PF_LOCATOR, 1); X#endif X#ifdef VMS X pflushevents(viewwsid, PI_LOCATOR, 1); X#endif X`7D /* viewmainloop */ X X/*-------------------------------------------------------------------------- V*/ X X/*function:external*/ Xextern void ptk_vieweditor(C(Pint) wsid, C(Pintlst *) stids,`20 X C(Pviewrep3 *) rep) XPreANSI(Pint wsid) XPreANSI(Pintlst *stids) XPreANSI(Pviewrep3 *rep) X/* X** \parambegin X** \param`7BPint`7D`7Bwsid`7D`7Bworkstation identifier`7D`7BIN`7D X** \param`7BPintlst *`7D`7Bstids`7D`7Blist of structure identifiers`7D`7BIN` V7D X** \param`7BPviewrep3 *`7D`7Brep`7D`7Bview representation`7D`7BOUT`7D X** \paramend X** \blurb`7BThis function starts the interactive PHIGS view editor, on X** workstation \pardesc`7Bws`7D. X** This function requires hashtables X** "structureid", "label", "name", "viewindex", "topologyid", "menuid", X** "windowid".`7D X*/ X`7B X Ppoint pos, size; X Pint lenstr, err, stcom, totsize, i; X Pintlst pmenus, pwindows; X Pstructpostlst structs; X Pdefmode defmode; X Pmod modmode; X Pdspsurf dspsurf; X Pvisualrep visualrep; X Pcobundl backrep; X X /* inquire and set display update state */ X pinqdisplayupdatest(wsid, &err, &defmode, &modmode, &dspsurf, &visualrep); X psetdisplayupdatest(wsid, PWAIT, PNIVE);`20 X X /* inquire and set background colour */ X pinqcolourrep(wsid, 0, PSET, &err, &backrep); X ptk_setbackgroundcolourind(wsid, backgroundcolourind); X X /* inquire all posted menus and windows */ X ptk_inqpostedmenus(wsid, 0, &pmenus, &totsize, &err); X pmenus.integers = (Pint *)calloc(totsize, sizeof(Pint)); X ptk_inqpostedmenus(wsid, totsize, &pmenus, &totsize, &err); X pmenus.number = totsize; X ptk_inqpostedwindows(wsid, 0, &pwindows, &totsize, &err); X pwindows.integers = (Pint *)calloc(totsize, sizeof(Pint)); X ptk_inqpostedwindows(wsid, totsize, &pwindows, &totsize, &err); X pwindows.number = totsize; X /* clear menus and windows */ X for (i = 0; i < pmenus.number; i++) X ptk_unpostmenu(wsid, pmenus.integers`5Bi`5D); X for (i = 0; i < pwindows.number; i++) X ptk_unpostwindow(wsid, pwindows.integers`5Bi`5D); X X /* inquire all other posted structure */ X pinqpostedstruct(wsid, 0, 0, &err, &structs, &totsize); X structs.postings = (Pstructpost *)calloc(totsize, sizeof(Pstructpost)); X pinqpostedstruct(wsid, totsize, 0, &err, &structs, &totsize); X structs.number = totsize; X /* clear all posted structures */ X punpostallstruct(wsid); X X /* clear workstation */ X X viewwsid = wsid; X ptk_inqmaxdevicecoords(wsid, &maxdevx, &maxdevy); X echoarea = ptk_limit(0.0, maxdevx * 0.5, 0.0, maxdevy * 0.05); X /* set up windows */ X pos = ptk_point(0.25, 0.25); X size = ptk_point(0.45, 0.45); `20 X X wcwindow = ptk_stringtoint("windowid", "view$wcwindow"); X vrcwindow = ptk_stringtoint("windowid", "view$vrcwindow"); X npcwindow = ptk_stringtoint("windowid", "view$npcwindow"); X dcwindow = ptk_stringtoint("windowid", "view$dcwindow"); X terminalwindow = ptk_stringtoint("windowid", "view$terminalwindow"); X viewscene = ptk_stringtoint("structureid", "view$scene"); X wcscene = ptk_stringtoint("structureid", "view$wcscene"); X vrcscene = ptk_stringtoint("structureid", "view$vrcscene"); X npcscene = ptk_stringtoint("structureid", "view$npcscene"); X dcscene = ptk_stringtoint("structureid", "view$dcscene"); X ptk_createwindow(wsid, wcwindow, &size, &pos, "world coords"); X ptk_setwindowattrs(wcwindow, windowtextfont, bannertextcolourind, X bannercolourind, windowcolourind, X bannercolourind, tlcolourind, brcolourind); X pos = ptk_point(0.25, 0.75); X ptk_createwindow(wsid, vrcwindow, &size, &pos, "view reference coords"); X ptk_setwindowattrs(vrcwindow, windowtextfont, bannertextcolourind, X bannercolourind, windowcolourind, X bannercolourind, tlcolourind, brcolourind); X pos = ptk_point(0.75, 0.75); X ptk_createwindow(wsid, npcwindow, &size, &pos,`20 X "normalised projection coords"); X ptk_setwindowattrs(npcwindow, windowtextfont, bannertextcolourind, X bannercolourind, windowcolourind, X bannercolourind, tlcolourind, brcolourind); X pos = ptk_point(0.75, 0.25); X ptk_createwindow(wsid, dcwindow, &size, &pos, "device coords"); X ptk_setwindowattrs(dcwindow, windowtextfont, bannertextcolourind, X bannercolourind, windowcolourind, X bannercolourind, tlcolourind, brcolourind); X pos = ptk_point(0.5, 0.5); X ptk_createwindow(wsid, terminalwindow, &size, &pos, "terminal"); X ptk_setwindowattrs(terminalwindow, windowtextfont, bannertextcolourind, X bannercolourind, windowcolourind, X bannercolourind, tlcolourind, brcolourind); X ptk_setwindowtype(terminalwindow, PTKETERMINALWINDOW); X ptk_postwindow(wcwindow); X ptk_postwindow(vrcwindow);`20 X ptk_postwindow(npcwindow); X ptk_postwindow(dcwindow); X ptk_postwindow(terminalwindow); X ptk_closewindow(terminalwindow); X X /* set up menus */ X makemenus(); X `20 X do_scene(stids); X X makeviewstructs(); X X initialiseeditor(); X `20 X updatemxvom(); X updatemxinvvom(); X updatemxvmm(); X updatemxviewvolume(); X updatemxprojviewport(); X updatemxprp(); X updatemxviewplane(); X X updatewindows();`20 X predrawallstruct(viewwsid, PALWAYS); X X /* interaction loop */ X viewmainloop(); X X /* tidy up before exit */ X ptk_delwindow(wcwindow); X ptk_delwindow(vrcwindow); X ptk_delwindow(npcwindow); X ptk_delwindow(dcwindow); X ptk_delwindow(terminalwindow); X X ptk_delmenu(viewmenuid); X ptk_delmenu(orimenuid); X ptk_delmenu(mapmenuid); X ptk_delmenu(windowmenuid);`20 X ptk_delmenu(clipmenuid); X X ptk_delmenu(rot3d1); X ptk_delmenu(rot3d2); X ptk_delmenu(rot2d1); X ptk_delmenu(rot2d2); X ptk_delmenu(rot1d); X X pdelstruct(wcaxes);`20 X ptk_delstring("structureid", "view$wcaxes"); X pdelstruct(vrcaxes); X ptk_delstring("structureid", "view$vrcaxes"); X pdelstruct(npccube); X ptk_delstring("structureid", "view$npccube"); X pdelstruct(projviewport); X ptk_delstring("structureid", "view$projviewport"); X pdelstruct(viewvolume); X ptk_delstring("structureid", "view$viewvolume"); X pdelstruct(prpmarker); X ptk_delstring("structureid", "view$prpmarker"); X pdelstruct(viewplane); X ptk_delstring("structureid", "view$viewplane"); X X pdelstruct(viewscene); X ptk_delstring("structureid", "view$scene"); X pdelstruct(wcscene); X ptk_delstring("structureid", "view$wcscene"); X pdelstruct(vrcscene); X ptk_delstring("structureid", "view$vrcscene"); X pdelstruct(npcscene); X ptk_delstring("structureid", "view$npcscene"); X pdelstruct(dcscene);`20 X ptk_delstring("structureid", "view$dcscene"); X X ptk_delstring("label", "view$mx_inv_vom"); X ptk_delstring("label", "view$mx_view_volume"); X ptk_delstring("label", "view$mx_prp"); X ptk_delstring("label", "view$mx_proj_viewport"); X ptk_delstring("label", "view$mx_vom"); X ptk_delstring("label", "view$mx_vmm"); X ptk_delstring("label", "view$mx_view_plane"); X X ptk_delstring("windowid", "view$wcwindow"); X ptk_delstring("windowid", "view$vrcwindow"); X ptk_delstring("windowid", "view$npcwindow"); X ptk_delstring("windowid", "view$dcwindow"); X ptk_delstring("windowid", "view$terminalwindow"); X X /* return view representation */ X memcpy(rep->orientation_matrix, vommat, sizeof(Pmatrix3));`20 X memcpy(rep->mapping_matrix, vmmmat, sizeof(Pmatrix3));`20 X rep->clip_xy = clipxy; X rep->clip_front = clipfront; X rep->clip_back = clipback; X rep->clip_limit = viewmap.viewport; X X /* repost all menus, windows and other structs */ X for (i = 0; i < structs.number; i++) X ppoststruct(wsid, structs.postings`5Bi`5D.id, structs.postings`5Bi`5D.pr Viority); X for (i = 0; i < pwindows.number; i++) X ptk_postwindow(pwindows.integers`5Bi`5D); X for (i = 0; i < pmenus.number; i++) X ptk_postmenu(wsid, pmenus.integers`5Bi`5D); X free(structs.postings); X free(pmenus.integers); X free(pwindows.integers); X X /* background colour */ X psetcolourrep(wsid, 0, &backrep); X X predrawallstruct(wsid, PALWAYS); X X /* restore display update state */ X psetdisplayupdatest(wsid, defmode, modmode);`20 X`7D /* ptk_vieweditor */ X X/*-------------------------------------------------------------------------- V*/ X X/*function:external*/ Xextern void ptk_setvieweditorattrs(C(Pint) menufont, C(Pint) windowfont, X C(Pint) menucol, C(Pint) menutextcol,`20 X C(Pint) windowcol, C(Pint) bannercol, C(Pint) bannertextcol,`2 V0 X C(Pint) tlcol, C(Pint) brcol, C(Pint) arrowcol, C(Pint) arrowedgecol) XPreANSI(Pint menufont) XPreANSI(Pint windowfont) XPreANSI(Pint menucol) XPreANSI(Pint menutextcol) XPreANSI(Pint windowcol) XPreANSI(Pint bannercol) XPreANSI(Pint bannertextcol) XPreANSI(Pint tlcol) XPreANSI(Pint brcol) XPreANSI(Pint arrowcol) XPreANSI(Pint arrowedgecol) X/* X** \parambegin X** \param`7BPint`7D`7Bmenufont`7D`7Bmenu text font`7D`7BIN`7D X** \param`7BPint`7D`7Bwindowfont`7D`7Bwindow text font`7D`7BIN`7D X** \param`7BPint`7D`7Bmenucol`7D`7Bmenu colour index`7D`7BIN`7D X** \param`7BPint`7D`7Bmenutextcol`7D`7Bmenu text colour index`7D`7BIN`7D X** \param`7BPint`7D`7Bwindowcol`7D`7Bwindow interior colour index`7D`7BIN`7D X** \param`7BPint`7D`7Bbannercol`7D`7Bwindow banner colour index`7D`7BIN`7D X** \param`7BPint`7D`7Bbannertextcol`7D`7Bwindow banner text colour index`7D` V7BIN`7D X** \param`7BPint`7D`7Btlcol`7D`7Btop-left colour index`7D`7BIN`7D X** \param`7BPint`7D`7Bbrcol`7D`7Bbottom-right colour index`7D`7BIN`7D X** \param`7BPint`7D`7Barrowcol`7D`7Barrow colour index`7D`7BIN`7D X** \param`7BPint`7D`7Barrowedgecol`7D`7Barrow edge colour index`7D`7BIN`7D X** \paramend X** \blurb`7BThis function enables the application to X** set the text font and colour attribute values for the menus and windows X** used in the PHIGS view editor.`7D X*/ X`7B X menutextfont = menufont; X windowtextfont = windowfont; X menucolourind = menucol; X windowcolourind = windowcol; X menutextcolourind = menutextcol; X bannercolourind = bannercol; +-+-+-+-+-+-+-+- END OF PART 277 +-+-+-+-+-+-+-+-