source: Sophya/trunk/SophyaPI/PIext/pigfd2.cc@ 179

Last change on this file since 179 was 171, checked in by ercodmgr, 27 years ago

Adaptation a PDynLinkMgr Reza 21/12/98

File size: 2.5 KB
RevLine 
[165]1#include <stdio.h>
2#include "pigfd2.h"
3
4/* --Methode-- */
5PIGenFitDat3D::PIGenFitDat3D(GeneralFitData* gfd, bool ad)
6: PIDrawer3D(), mGFD(gfd), mAdDO(ad)
7, VarX(0), VarY(1), ErrX(false), ErrY(false), ErrZ(false)
8{
9SelectXY(0,1);
10SelectErrBar(false,false,false);
11}
12
13PIGenFitDat3D::~PIGenFitDat3D()
14{
15if(mAdDO && mGFD) delete mGFD;
16}
17
18/* --Methode-- */
19void PIGenFitDat3D::SelectXY(int varx,int vary)
20{
21VarX = VarY = -1;
22if(mGFD == NULL) return;
23if(varx<0 || varx>=mGFD->NVar()) return;
24if(vary<0 || vary>=mGFD->NVar()) return;
25VarX = varx; VarY = vary;
26}
27
28/* --Methode-- */
29void PIGenFitDat3D::SelectErrBar(bool erbx,bool erby,bool erbz)
30{
31ErrX = erbx; ErrY = erby; ErrZ = erbz;
32if(mGFD == NULL) {ErrX = ErrY = ErrZ = false; return;}
33if(!mGFD->HasXErrors()) ErrX = ErrY = false;
34}
35
36/* --Methode-- */
37void PIGenFitDat3D::UpdateLimits()
38{
39if(!mGFD) return;
40if(mGFD->NData()<=0) return;
41if(VarX<0 || VarY<0) return;
42double xmin=9.e19, xmax=-9.e19, ymin=9.e19, ymax=-9.e19, zmin=9.e19, zmax=-9.e19;
43mGFD->GetMinMax(10*VarX+2,xmin,xmax);
44mGFD->GetMinMax(10*VarY+2,ymin,ymax);
45mGFD->GetMinMax(0,zmin, zmax);
46if(xmax<=xmin) xmax = xmin+1.;
47if(ymax<=ymin) ymax = ymin+1.;
48if(zmax<=zmin) zmax = zmin+1.;
49// Voir commentaires pintuple3d.cc
50float D = xmax-xmin;
51if (D < (ymax-ymin)) D = ymax-ymin;
52D *= 1.4;
53Set3DView((xmin+xmax)/2., (ymin+ymax)/2, (zmin+zmax)/2.,
54 (xmin+xmax)/2.+D , (ymin+ymax)/2.+2.*D , zmin+(zmax-zmin)*0.2, 0.3, 0.3);
[171]55
56xMin = xmin - 0.05*(xmax-xmin);
57xMax = xmax + 0.05*(xmax-xmin);
58yMin = ymin - 0.05*(ymax-ymin);
59yMax = ymax + 0.05*(ymax-ymin);
60zMin = zmin - 0.05*(zmax-zmin);
61zMax = zmax + 0.05*(zmax-zmin);
62
[165]63}
64
65/* --Methode-- */
66void PIGenFitDat3D::Draw(PIGraphicUC* g, float xmin, float ymin, float xmax, float ymax)
67{
68if (!mGFD) return;
69if(mGFD->NData()<=0) return;
70if(VarX<0 || VarY<0) return;
71// On plotte les barre d'erreurs ligne demandee explicitement
72if(mLAtt!=PI_NotDefLineAtt) SelectErrBar(true,true,true);
73
74#if defined(__DECCXX) || defined(__KCC__)
75PIGraphic3D* g3 = dynamic_cast<PIGraphic3D*>(g);
76#else
77PIGraphic3D* g3 = (PIGraphic3D*)(g);
78#endif
79
80if (mLAtt == PI_NotDefLineAtt) g3->SelLine(PI_ThinLine);
81
82float xp,yp,zp,er;
83for (int i=0; i<mGFD->NData(); i++) {
84 xp = mGFD->Absc(VarX,i);
85 yp = mGFD->Absc(VarY,i);
86 zp = mGFD->Val(i);
87 if(ErrX) {
88 er = mGFD->EAbsc(VarX,i);
89 if(er>0.) g3->DrawLine3D(xp-er,yp,zp,xp+er,yp,zp);
90 }
91 if(ErrY) {
92 er = mGFD->EAbsc(VarY,i);
93 g3->DrawLine3D(xp,yp-er,zp,xp,yp+er,zp);
94 }
95 if(ErrZ) {
96 er = mGFD->EVal(i);
97 g3->DrawLine3D(xp,yp,zp-er,xp,yp,zp+er);
98 }
99 g3->DrawMarker3D(xp,yp,zp);
100}
101
102return;
103}
Note: See TracBrowser for help on using the repository browser.