void ImodvBkgColor::newColorSlot(int red, int green, int blue) { ImodvApp *a = Imodv; a->rbgcolor->setRgb(red, green, blue); imodvDraw(a); }
// Set the black/white levels from 3dmod void ImodvImage::copyBWclicked() { sBlackLevel = App->cvi->blackInRange; sWhiteLevel = App->cvi->whiteInRange; mSliders->setValue(IIS_BLACK, sBlackLevel); mSliders->setValue(IIS_WHITE, sWhiteLevel); makeColorMap(); imodvDraw(Imodv); }
// Toggle a flag in the world structure that corresponds to a checkable item static void toggleWorldFlag(int &globalVal, b3dUInt32 mask, int menuID) { imodvRegisterModelChg(); imodvFinishChgUnit(); globalVal = 1 - globalVal; setOrClearFlags(&Imodv->imod->view->world, mask, globalVal); Imodv->mainWin->setCheckableItem(menuID, globalVal); imodvDraw(Imodv); }
// respond to a change of transparency or contrast void ImodvImage::sliderMoved(int which, int value, bool dragging) { switch (which) { case IIS_X_COORD: Imodv->vi->xmouse = value - 1; ivwBindMouse(Imodv->vi); break; case IIS_Y_COORD: Imodv->vi->ymouse = value - 1; ivwBindMouse(Imodv->vi); break; case IIS_Z_COORD: Imodv->vi->zmouse = value - 1; ivwBindMouse(Imodv->vi); break; case IIS_X_SIZE: sXdrawSize = value; break; case IIS_Y_SIZE: sYdrawSize = value; break; case IIS_Z_SIZE: sZdrawSize = value; break; case IIS_SLICES: sNumSlices = value; break; case IIS_TRANSPARENCY: sImageTrans = value; Imodv->texTrans = sImageTrans; break; case IIS_BLACK: sBlackLevel = value; makeColorMap(); break; case IIS_WHITE: sWhiteLevel = value; makeColorMap(); break; } // draw if slider clicked or is in hot state if (!dragging || ImodPrefs->hotSliderActive(mCtrlPressed)) { if (which > IIS_Z_COORD) imodvDraw(Imodv); else imodDraw(Imodv->vi, IMOD_DRAW_XYZ); } }
// Viewing image is turned on or off void ImodvImage::viewToggled(bool state, int flag) { if (!state) { sFlags &= ~flag; if (!sFlags) Imodv->texMap = 0; } else { sFlags |= flag; Imodv->texMap = 1; } imodvStereoUpdate(); imodvDraw(Imodv); }
void imodvDepthcueToggle(int state) { ImodvApp *a = Imodv; imodvRegisterModelChg(); imodvFinishChgUnit(); a->depthcue = state; if (!state) a->imod->view->world &= ~VIEW_WORLD_DEPTH_CUE; else a->imod->view->world |= VIEW_WORLD_DEPTH_CUE; imodvDraw(a); }
void imodvDepthcueStartEnd(int value, bool end, bool dragging) { static bool sliding = false; if (!sliding) { imodvRegisterModelChg(); imodvFinishChgUnit(); } sliding = dragging; if (end) { idcData.fend = value; Imodv->imod->view->dcend = (float)value * 0.01f; } else { idcData.fstart = value; Imodv->imod->view->dcstart = (float)value * 0.01f; } imodvDraw(Imodv); }
// User toggles false color void ImodvImage::falseToggled(bool state) { sFalsecolor = state ? 1 : 0; makeColorMap(); imodvDraw(Imodv); }
// The view menu dispatch function void imodvViewMenu(int item) { ImodvApp *a = Imodv; Iobj *xobj; Icont *cont; bool freeXobj; switch (item) { case VVIEW_MENU_DB: imodv_setbuffer(a, 1 - a->dblBuf, -1, -1); a->mainWin->setEnabledMenuItem(VVIEW_MENU_TRANSBKGD, a->dblBuf && (a->enableDepthDBal >= 0 || a->enableDepthDBstAl >= 0)); break; case VVIEW_MENU_TRANSBKGD: imodv_setbuffer(a, -1, -1, 1 - a->transBkgd); if (a->transBkgd) a->transBkgd = 0; else a->transBkgd = a->alphaVisual; a->mainWin->setCheckableItem(VVIEW_MENU_TRANSBKGD, a->transBkgd); a->mainWin->setEnabledMenuItem(VVIEW_MENU_DB, a->dbPossible && a->enableDepthSB >= 0 && !a->transBkgd); break; case VVIEW_MENU_INVERTZ: toggleWorldFlag(a->invertZ, VIEW_WORLD_INVERT_Z, VVIEW_MENU_INVERTZ); break; case VVIEW_MENU_LIGHTING: toggleWorldFlag(a->lighting, VIEW_WORLD_LIGHT, VVIEW_MENU_LIGHTING); break; case VVIEW_MENU_WIREFRAME: toggleWorldFlag(a->wireframe, VIEW_WORLD_WIREFRAME, VVIEW_MENU_WIREFRAME); break; case VVIEW_MENU_LOWRES: toggleWorldFlag(a->lowres, VIEW_WORLD_LOWRES, VVIEW_MENU_LOWRES); break; case VVIEW_MENU_STEREO: imodvStereoEditDialog(a, 1); break; case VVIEW_MENU_DEPTH: imodvDepthCueEditDialog(a, 1); break; case VVIEW_MENU_SCALEBAR: scaleBarOpen(); break; case VVIEW_MENU_RESIZE: a->mainWin->openResizeTool(a); break; case VVIEW_MENU_BOUNDBOX: freeXobj = true; if (a->boundBoxExtraObj <= 0) { a->boundBoxExtraObj = ivwGetFreeExtraObjectNumber(a->vi); if (a->boundBoxExtraObj <= 0) return; xobj = ivwGetAnExtraObject(a->vi, a->boundBoxExtraObj); if (xobj) { imodObjectDefault(xobj); strcpy(xobj->name, "Volume bounding box extra object"); xobj->cont = imodContoursNew(6); if (xobj->cont) { xobj->contsize = 6; xobj->flags |= IMOD_OBJFLAG_OPEN | IMOD_OBJFLAG_WILD | IMOD_OBJFLAG_EXTRA_MODV | IMOD_OBJFLAG_EXTRA_EDIT | IMOD_OBJFLAG_ANTI_ALIAS | IMOD_OBJFLAG_MODV_ONLY; xobj->red = 1.; xobj->green = 1.; xobj->blue = 0.; xobj->linewidth = 2; if (!imodvAddBoundingBox(a)) freeXobj = false; } } } if (freeXobj) { ivwFreeExtraObject(a->vi, a->boundBoxExtraObj); a->boundBoxExtraObj = 0; } a->mainWin->setCheckableItem(VVIEW_MENU_BOUNDBOX, !freeXobj); imodvObjedNewView(); imodvDraw(a); break; case VVIEW_MENU_CURPNT: freeXobj = true; if (a->curPointExtraObj <= 0) { a->curPointExtraObj = ivwGetFreeExtraObjectNumber(a->vi); if (a->curPointExtraObj <= 0) return; xobj = ivwGetAnExtraObject(a->vi, a->curPointExtraObj); if (xobj) { imodObjectDefault(xobj); strcpy(xobj->name, "Current point extra object"); xobj->flags |= IMOD_OBJFLAG_SCAT | IMOD_OBJFLAG_MESH | IMOD_OBJFLAG_NOLINE | IMOD_OBJFLAG_FILL | IMOD_OBJFLAG_EXTRA_MODV | IMOD_OBJFLAG_EXTRA_EDIT | IMOD_OBJFLAG_MODV_ONLY; xobj->pdrawsize = 7. * a->vi->xybin; xobj->red = 1.; xobj->green = 0.; xobj->blue = 0.; xobj->quality = 4; cont = imodContourNew(); if (cont) { imodPointAppendXYZ(cont, 0., 0., 0.); imodPointSetSize(cont, 0, 5. * a->vi->xybin); if (cont->psize && cont->sizes && imodObjectAddContour(xobj, cont) >= 0) freeXobj = false; free(cont); } } } if (freeXobj) { ivwFreeExtraObject(a->vi, a->curPointExtraObj); a->curPointExtraObj = 0; } a->mainWin->setCheckableItem(VVIEW_MENU_CURPNT, !freeXobj); imodvObjedNewView(); imodvDraw(a); break; } }
void ImodvOlist::actionButtonClicked(int which) { Imod *imod = Imodv->imod; IobjGroup *group, *ogroup; int ob, index, changed = 1; if (which != OBJGRP_NEW && which != OBJGRP_DELETE) { group = (IobjGroup *)ilistItem(imod->groupList, imod->curObjGroup); if (!group) return; } switch (which) { case OBJGRP_NEW: imodvRegisterModelChg(); group = objGroupListExpand(&imod->groupList); if (!group) break; ogroup = (IobjGroup *)ilistItem(imod->groupList, imod->curObjGroup); if (ogroup) group->objList = ilistDup(ogroup->objList); imod->curObjGroup = ilistSize(imod->groupList) - 1; updateGroups(Imodv); break; case OBJGRP_DELETE: if (imod->curObjGroup < 0) return; imodvRegisterModelChg(); if (objGroupListRemove(imod->groupList, imod->curObjGroup)) break; imod->curObjGroup = B3DMIN(B3DMAX(0, imod->curObjGroup - 1), ilistSize(imod->groupList) - 1); updateGroups(Imodv); break; case OBJGRP_CLEAR: imodvRegisterModelChg(); ilistTruncate(group->objList, 0); updateGroups(Imodv); break; case OBJGRP_ADDALL: imodvRegisterModelChg(); if (group->objList) ilistTruncate(group->objList, 0); for (ob = 0; ob < imod->objsize; ob++) if (objGroupAppend(group, ob)) return; updateGroups(Imodv); break; case OBJGRP_SWAP: imodvRegisterModelChg(); for (ob = 0; ob < imod->objsize; ob++) { index = objGroupLookup(group, ob); if (index >= 0) ilistRemove(group->objList, index); else if (objGroupAppend(group, ob)) return; } updateGroups(Imodv); break; case OBJGRP_TURNON: case OBJGRP_TURNOFF: case OBJGRP_OTHERSON: case OBJGRP_OTHERSOFF: changed = 0; for (ob = 0; ob < imod->objsize; ob++) { index = objGroupLookup(group, ob); if (((index >= 0 && which == OBJGRP_TURNON) || (index < 0 && which == OBJGRP_OTHERSON)) && iobjOff(imod->obj[ob].flags)) { imodvRegisterObjectChg(ob); imod->obj[ob].flags &= ~IMOD_OBJFLAG_OFF; changed = 1; } else if (((index >= 0 && which == OBJGRP_TURNOFF) || (index < 0 && which == OBJGRP_OTHERSOFF)) && !iobjOff(imod->obj[ob].flags)) { imodvRegisterObjectChg(ob); imod->obj[ob].flags |= IMOD_OBJFLAG_OFF; changed = 1; } } imodvDraw(Imodv); imodvDrawImodImages(); imodvObjedNewView(); break; } if (changed) imodvFinishChgUnit(); }