⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataview.cpp

📁 模糊聚類分析源碼。包含教學文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  x_mouse_move = x;  y_mouse_move = y;  }template <class DATA>void DataView<DATA>::mouse_click  (  int button,  int state,  int x,  int y  )  {  mouse_button = button;  MenuCoord CDM(x-xDispMenu,y-yDispMenu);  MenuCoord CAM(x-xAppMenu,y-yAppMenu);  if (state == DISPLAY_UP_BUTTON)    {    if (    (x==x_mouse_click_down)         && (y==y_mouse_click_down)       )      {      if (button == DISPLAY_LEFT_BUTTON)        {        if (    (displayDispMenu)              && (dispMenu.m_bbox.encloses(CDM))           )          {          int b = dispMenu.evaluate_click(x-xDispMenu,y-yDispMenu);          if (b!=-1)             {            evaluate_display_menu_click(b);            display_again();            }          }        if (    (displayAppMenu)             && (appMenu.m_bbox.encloses(CAM))           )          {          int b = appMenu.evaluate_click(x-xAppMenu,y-yAppMenu);          if (b!=-1)             {            if (appButtonHandler!=NULL) appButtonHandler(b);            display_again();            }          }        if (    (!displayAppMenu)              && (    (!displayDispMenu)                  || (!dispMenu.m_bbox.encloses(CDM))                )             )          {          displayAppMenu = true;          xAppMenu = x; yAppMenu = y;          display_again();          }        } else      if (button == DISPLAY_RIGHT_BUTTON)        {        if (    (displayAppMenu)             && (appMenu.m_bbox.encloses(CAM))           )          {          displayAppMenu = false;          display_again();          } else         if (!displayDispMenu)          {          displayDispMenu = true;          xDispMenu = x; yDispMenu = y;          display_again();          } else         if (dispMenu.m_bbox.encloses(CDM))          {          displayDispMenu = false;          display_again();          }         }      }    } else  if (state == DISPLAY_DOWN_BUTTON)    {    x_mouse_click_down = x;    y_mouse_click_down = y;    x_mouse_move = x;    y_mouse_move = y;    }  }template <class DATA>void DataView<DATA>::display  (  )  {  if (perspectiveView)     display_mode_3d      (      focus_coord(DATAVIEW_AXIS_X),      focus_coord(DATAVIEW_AXIS_Y),      focus_coord(DATAVIEW_AXIS_Z),      view_coord(DATAVIEW_AXIS_DISTANCE),      view_coord(DATAVIEW_AXIS_TWIST),      view_coord(DATAVIEW_AXIS_ELEVATION),      view_coord(DATAVIEW_AXIS_AZIMUTH)      );  else     display_mode_2d      (      focus_coord(DATAVIEW_AXIS_X),      focus_coord(DATAVIEW_AXIS_Y),      focus_coord(DATAVIEW_AXIS_Z),      view_coord(DATAVIEW_AXIS_DISTANCE)      );  if (statisticsView)    {    DispCoord X;    display_color(COLOR_WHITE);              X = focus_coord; X(DATAVIEW_AXIS_X)-=0.5;    display_line_intern(focus_coord,X,0.0);    X(DATAVIEW_AXIS_X)+=0.5; X(DATAVIEW_AXIS_Y)-=0.5;    display_line_intern(focus_coord,X,0.0);    X(DATAVIEW_AXIS_Y)+=0.5; X(DATAVIEW_AXIS_Z)-=0.5;    display_line_intern(focus_coord,X,0.0);    display_color(COLOR_RED);    X(DATAVIEW_AXIS_Z)+=0.5; X(DATAVIEW_AXIS_X)+=1.0;    display_line_intern(focus_coord,X,0.0);          display_color(COLOR_GREEN);    X(DATAVIEW_AXIS_X)-=1.0; X(DATAVIEW_AXIS_Y)+=1.0;    display_line_intern(focus_coord,X,0.0);          display_color(COLOR_BLUE);    X(DATAVIEW_AXIS_Y)-=1.0; X(DATAVIEW_AXIS_Z)+=1.0;    display_line_intern(focus_coord,X,0.0);    }  display_scale(scalefac(0),scalefac(1),scalefac(2));    if (appDisplayFunc!=NULL) appDisplayFunc();    if (statisticsView)    {    DispCoord X,Y;    display_color(COLOR_RED);    display_point_intern(red_coord,0.5);    display_color(COLOR_GREEN);    display_point_intern(green_coord,0.5);          display_color(COLOR_BLUE);    display_point_intern(blue_coord,0.5);               display_color(COLOR_DARKGRAY);    boundBox.include(red_coord);    boundBox.include(blue_coord);    boundBox.include(green_coord);    X = boundBox.lowerBound; Y = boundBox.upperBound;    display_cube(X(0),X(1),X(2),Y(0),Y(1),Y(2));    }  // display menus  if (displayDispMenu)    {    dispMenu.display(xDispMenu,yDispMenu);    }   if (displayAppMenu)    {    appMenu.display(xAppMenu,yAppMenu);    }  if (statisticsView)    {    statistics();    }  }template <class DATA>void DataView<DATA>::set_focus  (  const DATA& a_focus  )  {  convert_coord(a_focus,focus_coord);  for (int i=0;i<4;++i) focus_coord[i]*=scalefac[i];  }template <class DATA>void DataView<DATA>::set_red  (  const DATA& a_red  )  {  convert_coord(a_red,red_coord);  for (int i=0;i<4;++i) red_coord[i]*=scalefac[i];  }template <class DATA>void DataView<DATA>::set_green  (  const DATA& a_green  )  {  convert_coord(a_green,green_coord);  for (int i=0;i<4;++i) green_coord[i]*=scalefac[i];  }template <class DATA>void DataView<DATA>::set_blue  (  const DATA& a_blue  )  {  convert_coord(a_blue,blue_coord);  for (int i=0;i<4;++i) blue_coord[i]*=scalefac[i];  }template <class DATA>void DataView<DATA>::reset_bbox  (  )  {  boundBox.reset();  }template <class DATA>void DataView<DATA>::evaluate_display_menu_click(int b)  {  int i,row,column;    if ((b>=DATAVIEW_BUTTON_MOMO) && (b<DATAVIEW_BUTTON_MOMO+80))    {    column = (b-DATAVIEW_BUTTON_MOMO)/10;    row = (b-DATAVIEW_BUTTON_MOMO)-column*10;    if (column < 4)      {      if (dispMenu.m_buttons[b].state == ButtonOn)         rotate[row]=column;      else        rotate[row]=-1;        for (i=0;i<4;++i) if (i!=column)        {        dispMenu.m_buttons[100+row+10*i].state = ButtonOff;        }      }    else // column >= 4      {      if (dispMenu.m_buttons[b].state == ButtonOn)        cartesian[row]=column-4;      else        cartesian[row]=-1;        for (i=4;i<8;++i) if (i!=column)        {        dispMenu.m_buttons[100+row+10*i].state = ButtonOff;        }      }      } else  if  ((b>=200) && (b<280))    {        column = (b-200)/10;    row = (b-200)-column*10;    if (column<4)      { // axis grid      for (i=0;i<data_size;++i)        {        if (i!=row) dispMenu.m_buttons[200+column*10+i].state = ButtonOff;        }      if (dispMenu.m_buttons[b].state==ButtonOff) axis[column]=-1; else axis[column] = row;        }    else if ((column==5) || (column==7))      { // scaling section      float factor = (column==5) ? 1.1 : 1.0/1.1;      scalefac(row) *= factor;      scaletext[row][0]=scaletext[row][DISPLAY_SCALE_OUTPUT_LENGTH]='\0';      ostrstream output(scaletext[row],DISPLAY_SCALE_OUTPUT_LENGTH,ios::trunc);       output << scalefac(row) << '\0';       dispMenu.m_buttons[b].state=ButtonOff;      }      } else  if (    (b>=DATAVIEW_BUTTON_CONTROL_BASE)        && (b<DATAVIEW_BUTTON_CONTROL_BASE+DATAVIEW_CONTROL_MODES)     )    {    for (i=DATAVIEW_BUTTON_CONTROL_BASE;         i<DATAVIEW_BUTTON_CONTROL_BASE+DATAVIEW_CONTROL_MODES;         ++i        )      {      if (i!=b) dispMenu.m_buttons[i].state = ButtonOff;      }    dispMenu.m_buttons[b].state = ButtonOn;      controlMode = b-DATAVIEW_BUTTON_CONTROL_BASE;    switch (controlMode)      {      case DATAVIEW_CONTROL_EYE: break;      case DATAVIEW_CONTROL_FOCUS: cart_coord = &focus_coord; break;      case DATAVIEW_CONTROL_RED: cart_coord = &red_coord; break;      case DATAVIEW_CONTROL_BLUE: cart_coord = &blue_coord; break;      case DATAVIEW_CONTROL_GREEN: cart_coord = &green_coord; break;      default: error("unexpected control mode",SOURCELOC);      }    } else  switch (b)    {    case 995 :    case 996 :        // 2d/3d ortho/perspective      if (perspectiveView)        {        perspectiveView = false;        dispMenu.m_buttons[995].state=ButtonOn; // 2d        dispMenu.m_buttons[996].state=ButtonOff; // 3d        }      else          {        perspectiveView = true;        dispMenu.m_buttons[995].state=ButtonOff; // 2d        dispMenu.m_buttons[996].state=ButtonOn; // 3d        }      break;    case 997 : // reset      view_coord(DATAVIEW_AXIS_DISTANCE) = 5.0;      view_coord(DATAVIEW_AXIS_ELEVATION) = 0.0;      view_coord(DATAVIEW_AXIS_TWIST) = 0.0;      view_coord(DATAVIEW_AXIS_AZIMUTH) = 0.0;      focus_coord(DATAVIEW_AXIS_X) = 0.0;      focus_coord(DATAVIEW_AXIS_Y) = 0.0;      focus_coord(DATAVIEW_AXIS_Z) = 0.0;      focus_coord(DATAVIEW_AXIS_T) = 0.0;      for (row=0;row<4;++row)         {         scalefac(row)=1.0;        scaletext[row][0]=scaletext[row][DISPLAY_SCALE_OUTPUT_LENGTH]='\0';        ostrstream output(scaletext[row],DISPLAY_SCALE_OUTPUT_LENGTH,ios::trunc);         output << scalefac(row) << '\0';         }      dispMenu.m_buttons[997].state=ButtonOff; // reset      break;    case DATAVIEW_BUTTON_BOUNDING_BOX :      estimateBoundBox = (dispMenu.m_buttons[b].state==ButtonOn);      boundBox.reset();      break;    case DATAVIEW_BUTTON_SCALE_BB_4AXES :      // bounding box is a box with edge length of 10.0            for (row=0;row<4;++row)        {        TRange length( equal(boundBox.length(row),0) ? 1.0 : boundBox.length(row) );        scalefac(row) = 10.0/length;        scaletext[row][0]=scaletext[row][DISPLAY_SCALE_OUTPUT_LENGTH]='\0';        ostrstream output(scaletext[row],DISPLAY_SCALE_OUTPUT_LENGTH,ios::trunc);         output << scalefac(row) << '\0';         focus_coord(row) = 10.0*boundBox.mean(row)/length;        }      dispMenu.m_buttons[b].state = ButtonOff;       break;    case DATAVIEW_BUTTON_SCALE_BB_PROP :      // bounding box is a box with edge length of 10.0      {         TRange length(0);        for (row=0;row<4;++row)          {          if (length<boundBox.length(row)) length=boundBox.length(row);          }            if (equal(length,0)) length=1;        for (row=0;row<4;++row)          {          scalefac(row) = 10.0/length;          scaletext[row][0]=scaletext[row][DISPLAY_SCALE_OUTPUT_LENGTH]='\0';          ostrstream output(scaletext[row],DISPLAY_SCALE_OUTPUT_LENGTH,ios::trunc);           output << scalefac(row) << '\0';           focus_coord(row) = 10.0*boundBox.mean(row)/length;          }        dispMenu.m_buttons[b].state = ButtonOff;       }          break;    case DATAVIEW_BUTTON_CENTER_FOCUS :      dispMenu.m_buttons[b].state = ButtonOff;       for (row=0;row<4;++row)        {        focus_coord(row) = boundBox.mean(row)*scalefac(row);        }      break;    case DATAVIEW_BUTTON_DISPLAY_STATISTICS :      statisticsView = (dispMenu.m_buttons[b].state==ButtonOn);      break;    case DATAVIEW_BUTTON_EXIT :      if (appExitHandler!=NULL) appExitHandler();      exit(0);      break;    case DATAVIEW_BUTTON_SCALEFAC1 :    case DATAVIEW_BUTTON_SCALEFAC2 :    case DATAVIEW_BUTTON_SCALEFAC3 :    case DATAVIEW_BUTTON_SCALEFAC4 :    case DATAVIEW_BUTTON_SCALEFAC5 :      dispMenu.m_buttons[DATAVIEW_BUTTON_SCALEFAC + sensitivityGrade].state = ButtonOff;      sensitivityGrade = b - DATAVIEW_BUTTON_SCALEFAC;      dispMenu.m_buttons[DATAVIEW_BUTTON_SCALEFAC + sensitivityGrade].state = ButtonOn;      sensitivity = sensitivityMap[sensitivityGrade];      break;    }  }template <class DATA>void DataView<DATA>::display(int w,int h, char* name)  {  int n0,x0,y0,i,j;  ButtonState s;  x0=0; y0=0; n0=DATAVIEW_BUTTON_MOMO;  s=ButtonPassive;  dispMenu.add( Button(x0    , y0+ 0, 50, 20, "MOMO", s, n0+80) );  dispMenu.add( Button(x0+ 50+ 0, y0+ 0, 20, 20, "a", s, n0+81) );  dispMenu.add( Button(x0+ 50+20, y0+ 0, 20, 20, "e", s, n0+82) );  dispMenu.add( Button(x0+ 50+40, y0+ 0, 20, 20, "t", s, n0+83) );  dispMenu.add( Button(x0+ 50+60, y0+ 0, 20, 20, "d", s, n0+84) );  dispMenu.add( Button(x0+135+ 0, y0+ 0, 20, 20, "x", s, n0+85) );  dispMenu.add( Button(x0+135+20, y0+ 0, 20, 20, "y", s, n0+86) );  dispMenu.add( Button(x0+135+40, y0+ 0, 20, 20, "z", s, n0+87) );  dispMenu.add( Button(x0+135+60, y0+ 0, 20, 20, "t", s, n0+88) );  dispMenu.add( Button(x0    , y0+20, 45, 20, "h+lb", s, n0+89) );  dispMenu.add( Button(x0    , y0+40, 45, 20, "v+lb", s, n0+90) );  dispMenu.add( Button(x0    , y0+60, 45, 20, "h+rb", s, n0+91) );  dispMenu.add( Button(x0    , y0+80, 45, 20, "v+rb", s, n0+92) );  /* Button ID's     MoMo   az el tw  d   x  y  z  t                       h+lb    0 10 20 30  40 50 60 70                     v+lb    1 11 21 31  41 51 61 71                     h+rb    2 12 22 32  42 52 62 72                     v+rb    3 13 23 33  43 53 63 73 */  for (i=0;i<4;++i)     for (j=0;j<4;++j)      {      if (rotate[i]==j) s = ButtonOn; else s = ButtonOff;      dispMenu.add( Button(x0+46+i*20,y0+20+j*20,20,20,"",s,n0+i*10+j) );      if (cartesian[i]==j) s = ButtonOn; else s = ButtonOff;      dispMenu.add( Button(x0+135+i*20,y0+20+j*20,20,20,"",s,n0+(i+4)*10+j) );      }  /* Button ID's     DiAx    x  y  z  t   - scale +                     0       0 10 20 30                     1       1 11 21 31                     2       2 12 22 32                     ...                     7 (max)                          */     x0=0; y0=100; n0=200;  for (i=0;i<data_size;++i)    {    dispMenu.add( Button(x0,y0+20+i*20,20,20,"x", ButtonPassive, n0+80+i) );    for (j=0;j<4;++j)      {      s = (axis[j]==i) ? ButtonOn : ButtonOff;      dispMenu.add( Button(x0+46+j*20,y0+20+i*20,20,20,"",s,n0+j*10+i) );      }    dispMenu.add( Button(x0+135,y0+20+i*20,15,20,"+", ButtonOff, n0+50+i) );    dispMenu.add( Button(x0+150,y0+20+i*20,50,20,scaletext[i], ButtonPassive, n0+60+i) );    dispMenu.add( Button(x0+200,y0+20+i*20,15,20,"-", ButtonOff, n0+70+i) );    }  dispMenu.add( Button(x0    , y0+ 0, 50, 20, "DIAX", ButtonPassive, n0+90) );  dispMenu.add( Button(x0+ 50, y0+ 0, 20, 20, "x",    ButtonPassive, n0+91) );  dispMenu.add( Button(x0+ 70, y0+ 0, 20, 20, "y",    ButtonPassive, n0+92) );  dispMenu.add( Button(x0+ 90, y0+ 0, 20, 20, "z",    ButtonPassive, n0+93) );  dispMenu.add( Button(x0+110, y0+ 0, 20, 20, "t",    ButtonPassive, n0+94) );  x0=220; y0=0; n0=DATAVIEW_BUTTON_CONTROL_BASE;  dispMenu.add( Button(x0   ,y0+20,75,20,"  eye",ButtonOn,n0+DATAVIEW_CONTROL_EYE) );  dispMenu.add( Button(x0   ,y0+40,75,20," focus",ButtonOff,n0+DATAVIEW_CONTROL_FOCUS) );  dispMenu.add( Button(x0   ,y0+60,25,20,"RL",ButtonOff,n0+DATAVIEW_CONTROL_RED) );  dispMenu.add( Button(x0+25,y0+60,25,20,"GL",ButtonOff,n0+DATAVIEW_CONTROL_GREEN) );  dispMenu.add( Button(x0+50,y0+60,25,20,"BL",ButtonOff,n0+DATAVIEW_CONTROL_BLUE) );    // ortho/perspective view  x0=220; y0=100; n0=1000;  dispMenu.add( Button(x0   ,y0 ,15, 20, "1",ButtonOff,DATAVIEW_BUTTON_SCALEFAC1) );  dispMenu.add( Button(x0+15,y0 ,15, 20, "2",ButtonOff,DATAVIEW_BUTTON_SCALEFAC2) );  dispMenu.add( Button(x0+30,y0 ,15, 20, "3",ButtonOn ,DATAVIEW_BUTTON_SCALEFAC3) );  dispMenu.add( Button(x0+45,y0 ,15, 20, "4",ButtonOff,DATAVIEW_BUTTON_SCALEFAC4) );  dispMenu.add( Button(x0+60,y0 ,15, 20, "5",ButtonOff,DATAVIEW_BUTTON_SCALEFAC5) );  n0=995;  // [2D] [3D] [RE]     2D-view/3D-view/reset-view  dispMenu.add( Button(x0   ,y0+20,25, 20, "2D",ButtonOff,n0) );  dispMenu.add( Button(x0+25,y0+20,25, 20, "3D",ButtonOn, n0+1) );  dispMenu.add( Button(x0+50,y0+20,25, 20, "RE",ButtonOff, n0+2) );  // [MK] [BX] [CF]     marker on.off/calc bounding box on.off/center focus  dispMenu.add( Button(x0   ,y0+40,25, 20, "MK",ButtonOn,DATAVIEW_BUTTON_DISPLAY_STATISTICS) );  dispMenu.add( Button(x0+25,y0+40,25, 20, "BX",ButtonOn,DATAVIEW_BUTTON_BOUNDING_BOX) );  dispMenu.add( Button(x0+50,y0+40,25, 20, "CF",ButtonOff,DATAVIEW_BUTTON_CENTER_FOCUS) );  // [S4] [SP] scale scene and center focus/ scale proportional  dispMenu.add( Button(x0   ,y0+60,25,20,"S4",ButtonOff,DATAVIEW_BUTTON_SCALE_BB_4AXES) );  dispMenu.add( Button(x0+25,y0+60,25,20,"SP",ButtonOff,DATAVIEW_BUTTON_SCALE_BB_PROP) );  // [exit] exit program  dispMenu.add( Button(x0   ,y0+80,75,20,"exit",ButtonOff,DATAVIEW_BUTTON_EXIT));      display_init(w,h,name);  p_DV = this;  display_loop(display_call,mouse_click_call,mouse_move_call);  }// template instantiation#include "Box.cpp"#include "Tuple.cpp"//#include "matvecop.cpp"#ifdef _SGI_SOURCE#  pragma instantiate Tuple<2,int> #  pragma instantiate Tuple<4,float> #  pragma instantiate Box< Tuple<2,int> >#  pragma instantiate Box< Tuple<4,float> >//#  pragma instantiate map<int, Button, less<int> >#endif#endif // DataView_SOURCE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -