Changeset 184 in Sophya for trunk/SophyaPI


Ignore:
Timestamp:
Jan 10, 1999, 5:13:13 PM (27 years ago)
Author:
ercodmgr
Message:

Trace d'axes 3D et programme pitst Reza 10/01/99

Location:
trunk/SophyaPI/PI
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PI/pi3ddrw.cc

    r170 r184  
    2626  lCO = 10.;  dlCO = 3.; 
    2727  v3D_obs = false;
    28   xMin = yMin = zMin = -1.; 
    29   xMax = yMax = zMax = 1.;
     28  x3Min = y3Min = z3Min = -1.; 
     29  x3Max = y3Max = z3Max = 1.;
    3030}
    3131
     
    8484}
    8585
    86 
     86/* --Methode-- */
     87void PIDrawer3D::DrawAxes(PIGraphicUC* g)
     88{
     89  if (axesFlags == kAxesNone) return;
     90#if defined(__DECCXX) || defined(__KCC__)
     91  PIGraphic3D* g3 = dynamic_cast<PIGraphic3D*>(g);
     92#else
     93  PIGraphic3D* g3 = (PIGraphic3D*)(g);
     94#endif
     95  Draw3DBoxe(g3, XMin3(), XMax3(), YMin3(), YMax3(), ZMin3(), ZMax3(),
     96                 XMin3(), XMax3(), YMin3(), YMax3(), ZMin3(), ZMax3()); 
     97}
     98
     99/* --Methode-- */
     100void PIDrawer3D::Draw3DBoxe(PIGraphic3D* g3,
     101                            float xx1, float xx2, float yy1, float yy2,
     102                            float zz1, float zz2, float xl1, float xl2,
     103                            float yl1, float yl2, float zl1, float zl2)
     104{
     105  if (mLAtt == PI_NotDefLineAtt)    g3->SelLine(PI_ThinLine);
     106
     107  PIGrCoord x1,y1,z1,x2,y2,z2;
     108  char strg[64];
     109  int k;
     110  int NTicks = 5;  // Nb de ticks sur chaque axe
     111
     112  x1 = xx1;  y1 = yy1;  z1 = zz1;
     113  x2 = xx2;   y2 = yy1;   z2 = zz1;
     114  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     115  y1 = y2 = yy2;
     116  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     117  z1 = z2 = zz2;
     118  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     119  y1 = y2 = yy1; 
     120  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     121
     122// Trace des ticks et labels axe X :
     123  x1 = x2 = xx1;   y1 = y2 = yy1;  z1 = z2 = zz1;
     124  for (k=0; k<NTicks; k++) {
     125    x1 = x2 = (xx1+(float)k*(xx2-xx1)/(NTicks-1.));
     126    z1 = zz1; z2 = zz1-0.02*(zz2-zz1);
     127    y1 = y2 = yy1;
     128    g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     129    z2 = zz1-0.05*(zz2-zz1);
     130    y2 = yy1-0.075*(yy2-yy1); 
     131    sprintf(strg,"%.2g", xl1+(float)k*(xl2-xl1)/(NTicks-1.));
     132    g3->DrawString3D(x2, y2, z2, strg);
     133    }
     134  x2 = xx2+0.075*(xx2-xx1);  y2 = yy1;   z2 = zz1-0.05*(zz2-zz1);
     135  g3->DrawString3D(x2, y2, z2, "X");
     136
     137  x1 = xx1;  y1 = yy1;  z1 = zz1;
     138  x2 = xx1;   y2 = yy2;   z2 = zz1;
     139  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     140  x1 = x2 = xx2;
     141  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     142  z1 = z2 = zz2;
     143  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     144  x1 = x2 = xx1; 
     145  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     146  x1 = x2 = xx2;   y1 = y2 = yy1;  z1 = z2 = zz1;
     147  for (k=1; k<NTicks; k++) {   // Attention, par le tick 0 pour Y
     148    y1 = y2 = (yy1+(float)k*(yy2-yy1)/(NTicks-1.));
     149    z2 = zz1-0.02*(zz2-zz1);
     150    x1 = x2 = xx2;
     151    g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     152    z2 = zz1-0.05*(zz2-zz1);
     153    x2 = xx2+0.075*(xx2-xx1); 
     154    sprintf(strg,"%.2g", yl1+(float)k*(yl2-yl1)/(NTicks-1.));
     155    g3->DrawString3D(x2, y2, z2, strg);
     156    }
     157  x2 = xx2;  y2 = yy2+0.075*(yy2-yy1);   z2 = zz1-0.05*(zz2-zz1);
     158  g3->DrawString3D(x2, y2, z2, "Y");
     159
     160  x1 = xx1;  y1 = yy1;  z1 = zz1;
     161  x2 = xx1;   y2 = yy1;   z2 = zz2;
     162  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     163  x1 = x2 = xx2;
     164  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     165  y1 = y2 = yy2;
     166  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     167  x1 = x2 = xx1; 
     168  g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     169  x1 = x2 = xx1;   y1 = y2 = yy1;  z1 = z2 = zz1;
     170  for (k=0; k<NTicks; k++) {
     171    z1 = z2 = (zz1+(float)k*(zz2-zz1)/(NTicks-1.));
     172    y2 = yy1-0.015*(yy2-yy1);
     173    x2 = xx1-0.015*(xx2-xx1);
     174    g3->DrawLine3D(x1, y1, z1, x2, y2, z2);
     175    x2 = xx1-0.1*(xx2-xx1); 
     176    y2 = yy1-0.1*(yy2-yy1); 
     177    sprintf(strg,"%.2g", zl1+(float)k*(zl2-zl1)/(NTicks-1.));
     178    g3->DrawString3D(x2, y2, z2, strg);
     179    }
     180  x2 = xx1-0.075*(xx2-xx1);  y2 = yy1-0.075*(yy2-yy1);   z2 = zz2+0.05*(zz2-zz1);
     181  g3->DrawString3D(x2, y2, z2, "Z");
     182
     183}
    87184
    88185// ......................................................................
     
    115212
    116213  mGr3d = new PIGraphic3D(mWGrC, 0, 0, sx, sy);
     214  rOfg = false;
     215  axfg = true;
     216  skcfg = false;
    117217}
    118218
     
    180280  else Set3DView(xc, yc, zc, xo, yo, zo, dax, day, dco, psi);
    181281  Refresh();
    182   mBDrw->Refresh();  // ? Pour reecrire par-dessus ce qui a ete efface
    183282}
    184283
     
    226325  }
    227326int id = AddDrawer(dr3, false, false, ad);
     327if (m3DrIl.size() == 0)  dr3->SetAxesFlags(kStdAxes);
    228328m3DrIl.push_back(id);
    229329return(id);
     
    256356    PIDrwTools::ShowPIDrwTools();   // Fentre axes et options de trace
    257357    }
    258   }
    259 }
     358  if (key == 'A' || key == 'a')  {    // On affiche ou on enleve les axes
     359    axfg = !axfg;
     360    list<int>::iterator it;
     361    if (axfg)
     362      for(it = m3DrIl.begin(); it != m3DrIl.end(); it++) 
     363         GetDrawerId(*it)->SetAxesFlags(kAxesNone);
     364    else {
     365      it = m3DrIl.begin();
     366      if (it != m3DrIl.end())  GetDrawerId(*it)->SetAxesFlags(kStdAxes);
     367      }
     368    Refresh();
     369    }
     370//  <Alt>S active la sensibilite de la zone centrale pour tourner l'objet
     371  if (key == 'S' || key == 's')  skcfg = !skcfg; 
     372  if (key == 'R' || key == 'r')  Update3DView();
     373  }
     374}
     375
    260376/* --Methode-- */
    261377void PIDraw3DWdg::PasteSelection(unsigned int typ, void *pdata, unsigned int l)
     
    291407  rOfg = false;
    292408  if (kmod ==  PIKM_Shift)  rOfg = true;
    293   else {
     409  else if (skcfg) {
    294410    int dmix = x-XSize()/2;
    295411    int dmiy = y-YSize()/2;
     
    361477  SetDrawers3DView();
    362478  Refresh();
    363   mBDrw->Refresh();
    364479}
    365480
     
    425540  SetDrawers3DView();
    426541  Refresh();
    427   mBDrw->Refresh();
    428542}
    429543
  • trunk/SophyaPI/PI/pi3ddrw.h

    r170 r184  
    3131  virtual PIGraphicUC*  SetDrwWdg(PIBaseWdgGen* drw, int x0, int y0, int dx, int dy, PIGraphicGen* g);
    3232
    33   float ZMin() const {return zMin;}
    34   float ZMax() const {return zMax;}
     33  virtual void          DrawAxes(PIGraphicUC* g);
     34  virtual void          Draw3DBoxe(PIGraphic3D* g3, float xx1, float xx2, float yy1, float yy2,
     35                                                    float zz1, float zz2, float xl1, float xl2,
     36                                                    float yl1, float yl2, float zl1, float zl2);
     37
     38  float XMin3() const {return x3Min;}
     39  float XMax3() const {return x3Max;}
     40  float YMin3() const {return y3Min;}
     41  float YMax3() const {return y3Max;}
     42  float ZMin3() const {return z3Min;}
     43  float ZMax3() const {return z3Max;}
    3544
    3645protected :
     
    4150  float lCO, dlCO;   // Distance Camera-Centre du champ et profondeur de champ
    4251  bool v3D_obs;      // Si defini par Set3DView_Obs
    43   float zMin, zMax;  // Pour delimiter le cube 3D (avec x/yMin-Max)
     52  float x3Min, x3Max;  // Pour delimiter le cube 3D
     53  float y3Min, y3Max;  // Pour delimiter le cube 3D
     54  float z3Min, z3Max;  // Pour delimiter le cube 3D
    4455};
    4556
     
    106117  float cXc, cYc, cZc;         // Pour garder position du centre de champ
    107118  float clCO, cDax, cDay;      // Pour garder les valeurs avant Zoom In/Out
    108   bool  rOfg;                  // Vrai si on fait tourner l'objet et pas la camera
     119  bool  rOfg;                  // si Vrai  on fait tourner l'objet et pas la camera
     120  bool  axfg;                  // si Vrai on trace les axes
     121  bool  skcfg;                 // si Vrai click-2 au centre -> rotation objet
    109122};
    110123
  • trunk/SophyaPI/PI/pisurfdr.cc

    r180 r184  
    5555 
    5656  Set3DView((xmin+xmax)/2., (ymin+ymax)/2, zmin+(zmax-zmin)*0.40,
    57             (xmin+xmax)/2.+D , (ymin+ymax)/2.+2*D , zmin+(zmax-zmin)*0.60, 0.25, 0.25); 
     57            (xmin+xmax)/2.+D , (ymin+ymax)/2.-2.5*D , zmin+(zmax-zmin)*0.85, 0.25, 0.25); 
    5858 
    59   xMin = xmin - 0.05*(xmax-xmin);
    60   xMax = xmax + 0.05*(xmax-xmin);
    61   yMin = ymin - 0.05*(ymax-ymin);
    62   yMax = ymax + 0.05*(ymax-ymin);
    63   zMin = zmin - 0.05*(zmax-zmin);
    64   zMax = zmax + 0.05*(zmax-zmin);
     59  x3Min = xmin;   x3Max = xmax;
     60  y3Min = ymin;   y3Max = ymax;
     61  z3Min = zmin-0.05*(zmax-zmin);   z3Max = zmax+0.05*(zmax-zmin);
    6562
    6663//  printf("PISurfaceDrawer::UpdateLimits() : %g-%g  %g-%g  %g-%g (%g) \n", xmin,xmax,ymin,ymax,zmin,zmax,D);
     
    8683
    8784/* --Methode-- */
    88 void PISurfaceDrawer::Draw(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax)
    89 {
    90   if (mArr == NULL)  return;
    91 
     85void PISurfaceDrawer::DrawAxes(PIGraphicUC* g)
     86{
     87  if (axesFlags == kAxesNone) return;
    9288#if defined(__DECCXX) || defined(__KCC__)
    9389  PIGraphic3D* g3 = dynamic_cast<PIGraphic3D*>(g);
     
    9591  PIGraphic3D* g3 = (PIGraphic3D*)(g);
    9692#endif
    97 
    98 //  g3->SelForeground(PI_White);
     93  Draw3DBoxe(g3, XMin3(), XMax3(), YMin3(), YMax3(), ZMin3(), ZMax3(),
     94                 mXmin, mXmax, mYmin, mYmax, mZmin-0.05*(mZmax-mZmin), mZmax+0.05*(mZmax-mZmin));
     95}
     96
     97/* --Methode-- */
     98void PISurfaceDrawer::Draw(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax)
     99{
     100// On trace les axes - En attendant de faire mieux - Reza 8/12/98
     101  if (axesFlags != kAxesNone)  DrawAxes(g);
     102
     103  if (mArr == NULL)  return;
     104
     105#if defined(__DECCXX) || defined(__KCC__)
     106  PIGraphic3D* g3 = dynamic_cast<PIGraphic3D*>(g);
     107#else
     108  PIGraphic3D* g3 = (PIGraphic3D*)(g);
     109#endif
     110
    99111  g3->SelBackground(PI_White);
    100112//  g3->Erase(xmin, ymin, xmax-xmin, ymax-ymin);
  • trunk/SophyaPI/PI/pisurfdr.h

    r120 r184  
    1818
    1919  virtual void          Draw(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax);
     20  virtual void          DrawAxes(PIGraphicUC* g);
     21
    2022protected :
    2123  P2DArrayAdapter* mArr;
Note: See TracChangeset for help on using the changeset viewer.