예제 #1
0
void ImodvBkgColor::newColorSlot(int red, int green, int blue)
{
  ImodvApp *a = Imodv;

  a->rbgcolor->setRgb(red, green, blue);
  imodvDraw(a);
}
예제 #2
0
파일: mv_image.cpp 프로젝트: LabShare/IMOD
// 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);
}
예제 #3
0
// 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);
}
예제 #4
0
파일: mv_image.cpp 프로젝트: LabShare/IMOD
// 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);
  }
}
예제 #5
0
파일: mv_image.cpp 프로젝트: LabShare/IMOD
// 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);
}
예제 #6
0
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);
}
예제 #7
0
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);
}
예제 #8
0
파일: mv_image.cpp 프로젝트: LabShare/IMOD
// User toggles false color
void ImodvImage::falseToggled(bool state)
{
  sFalsecolor = state ? 1 : 0;
  makeColorMap();
  imodvDraw(Imodv);
}
예제 #9
0
// 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;
  }
}
예제 #10
0
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();
}