source: Sophya/trunk/SophyaPI/PIext/graphexecut.cc@ 3546

Last change on this file since 3546 was 3546, checked in by ansari, 17 years ago

Ajout commande pirgbdisp pour lecture d'objet PIPixRGBArray (image RGB) et son affichage, Reza 17/11/2008

File size: 45.5 KB
Line 
1#include "sopnamsp.h"
2#include "piacmd.h"
3
4#include <stdio.h>
5#include <stdlib.h>
6#include <math.h>
7
8#include "graphexecut.h"
9
10#include "strutilxx.h"
11
12#include "pistdimgapp.h"
13#include "nobjmgr.h"
14
15#include "nomgadapter.h"
16#include "piyfxdrw.h"
17#include "pibargraph.h"
18#include "pitxtdrw.h"
19
20
21
22/* --Methode-- */
23PIAGraphicExecutor::PIAGraphicExecutor(PIACmd* piac, NamedObjMgr* omg, PIStdImgApp* app)
24{
25mpiac = piac;
26mObjMgr = omg;
27mImgApp = app;
28RegisterCommands();
29}
30
31PIAGraphicExecutor::~PIAGraphicExecutor()
32{
33}
34
35
36/* Macro pour tester si flag normalized coordinate est present */
37#define _CkBoolNC_(_jk_) ((tokens.size()>_jk_) && (tokens[_jk_] == "true")) ? true : false;
38
39
40/* --Methode-- */
41int PIAGraphicExecutor::Execute(string& kw, vector<string>& tokens, string& toks)
42{
43// >>>>>>>>>>> Fenetre graphique , changement d'attributs graphiques
44if (kw == "zone") {
45 while (tokens.size() < 2) tokens.push_back("1");
46 int nx, ny;
47 nx = ny = 1;
48 nx = atoi(tokens[0].c_str()); ny = atoi(tokens[1].c_str());
49 if (mImgApp) {
50 mImgApp->LockMutex(); // <ZThread> global event loop synchronisation
51 mImgApp->SetZone(nx, ny);
52 mImgApp->UnlockMutex(true); // <ZThread> global event loop synchronisation
53 }
54}
55else if (kw == "newwin") {
56 int nx=1, ny=1;
57 int sx=0, sy=0;
58 //if(tokens.size() < 2) { cout << "Usage: newwin nx ny" << endl; return(0); }
59 if(tokens.size() > 0) nx = atoi(tokens[0].c_str());
60 if(tokens.size() > 1) ny = atoi(tokens[1].c_str());
61 if(tokens.size() > 3) {
62 sx = atoi(tokens[2].c_str());
63 sy = atoi(tokens[3].c_str());
64 }
65 if (mImgApp) {
66 mImgApp->LockMutex(); // <ZThread> global event loop synchronisation
67 mImgApp->CreateGraphWin(nx, ny, sx, sy);
68 mImgApp->UnlockMutex(true); // <ZThread> global event loop synchronisation
69 }
70}
71else if (kw == "stacknext") {
72 mImgApp->LockMutex(); // <ZThread> global event loop synchronisation
73 mImgApp->StackWinNext();
74 mImgApp->UnlockMutex(true); // <ZThread> global event loop synchronisation
75}
76else if (kw == "graphicatt") {
77 if (tokens.size() < 1) { cout << "Usage: graphicatt attributes_list (att=def->defaut)" << endl; return(0); }
78 string opts = tokens[0];
79 if (tokens.size() > 1)
80 for(unsigned int kt=1; kt<tokens.size(); kt++) { opts += ' '; opts += tokens[kt]; }
81 if (mImgApp) mImgApp->SetDefaultGraphicAttributes(opts);
82 }
83else if (kw == "setaxesatt") {
84 if (tokens.size() < 1) { cout << "Usage: setaxesatt attributes_list " << endl; return(0); }
85 string opts = tokens[0];
86 if (tokens.size() > 1)
87 for(unsigned int kt=1; kt<tokens.size(); kt++) { opts += ' '; opts += tokens[kt]; }
88 if (mImgApp) mImgApp->SetDefaultAxesAttributes(opts);
89 }
90else if (kw == "setinsetlimits") {
91 if (tokens.size() < 4) { cout << "Usage: setinsetlimits xmin xmax ymin ymax" << endl; return(0); }
92 double xmin = atof(tokens[0].c_str());
93 double xmax = atof(tokens[1].c_str());
94 double ymin = atof(tokens[2].c_str());
95 double ymax = atof(tokens[3].c_str());
96 mImgApp->SetInsetLimits(xmin, xmax, ymin, ymax);
97 }
98else if (kw == "drpanel") {
99 if (tokens.size() < 4) {
100 cout << "Usage: drpanel xmin xmax ymin ymax [gratt] [name]" << endl;
101 return(0);
102 }
103 double xmin = atof(tokens[0].c_str());
104 double xmax = atof(tokens[1].c_str());
105 double ymin = atof(tokens[2].c_str());
106 double ymax = atof(tokens[3].c_str());
107 char buff[128];
108 sprintf(buff, "axesnone xylimits=%g,%g,%g,%g ", xmin, xmax, ymin, ymax);
109 string sop = buff;
110 if (tokens.size() > 4) sop += tokens[4];
111 string name;
112 if (tokens.size() > 5) name = tokens[5];
113 PIFuncDrawer* gdr = new PIFuncDrawer(NULL);
114 mImgApp->DispScDrawer(gdr, name, sop);
115}
116//---- Ajout d'elements graphiques
117else if (kw == "addtext") {
118 if (tokens.size() < 3) {
119 cout << "Usage: addtext x y txt [colfontatt] [fgnc]" << endl;
120 return(0);
121 }
122 double xp = atof(tokens[0].c_str());
123 double yp = atof(tokens[1].c_str());
124 string txt = tokens[2];
125 string sop;
126 if (tokens.size() > 3) sop = tokens[3];
127 bool fgnc = _CkBoolNC_(4);
128 mImgApp->AddText(txt, xp, yp, sop, fgnc);
129 }
130else if (kw == "addctext") {
131 if (tokens.size() < 5) {
132 cout << "Usage: addctext x y txt s_up s_dn [colfontatt] [updnfatt] [fgnc] " << endl;
133 return(0);
134 }
135 double xp = atof(tokens[0].c_str());
136 double yp = atof(tokens[1].c_str());
137 string sop;
138 if (tokens.size() > 5) sop = tokens[5];
139 string sopfss;
140 if (tokens.size() > 6) sopfss = tokens[6];
141 bool fgnc = _CkBoolNC_(7);
142 mImgApp->AddCompText(tokens[2], tokens[3], tokens[4], xp, yp, sop, sopfss, fgnc);
143 }
144else if ((kw == "addline") || (kw == "addrect") || (kw == "addfrect") ||
145 (kw == "addoval") || (kw == "addfoval") ||
146 (kw == "addarrow") ) {
147 if (tokens.size() < 4) {
148 if ( (kw == "addoval") || (kw == "addfoval") )
149 cout << "Usage addoval/addfoval/addarrow xc yc dx dy [colatt] [fgnc]" << endl;
150 else
151 cout << "Usage: addline/addrect/addfrect/addarrow x1 y1 x2 y2 [colatt] [fgnc]" << endl;
152 return(0);
153 }
154 double xp1 = atof(tokens[0].c_str());
155 double yp1 = atof(tokens[1].c_str());
156 double xp2 = atof(tokens[2].c_str());
157 double yp2 = atof(tokens[3].c_str());
158 string sop;
159 if (tokens.size() > 4) sop = tokens[4];
160 bool fgnc = _CkBoolNC_(5);
161 if (kw == "addline") mImgApp->AddLine(xp1, yp1, xp2, yp2, sop, false, fgnc);
162 else if (kw == "addarrow") mImgApp->AddLine(xp1, yp1, xp2, yp2, sop, true, fgnc);
163 else {
164 bool fgfill = ((kw == "addrect") || (kw == "addoval")) ? false : true;
165 if ( (kw == "addrect") || (kw == "addfrect") )
166 mImgApp->AddRectangle(xp1, yp1, xp2, yp2, sop, fgfill, fgnc);
167 else mImgApp->AddOval(xp1, yp1, xp2, yp2, sop, fgfill, fgnc);
168 }
169}
170else if ((kw == "addcirc") || (kw == "addfcirc")) {
171 if (tokens.size() < 3) {
172 cout << "Usage: addcirc/addfcirc xc yc r [colatt] [fgnc]" << endl;
173 return(0);
174 }
175 double xc = atof(tokens[0].c_str());
176 double yc = atof(tokens[1].c_str());
177 double rad = atof(tokens[2].c_str());
178 string sop;
179 if (tokens.size() > 3) sop = tokens[3];
180 bool fgnc = _CkBoolNC_(4);
181 bool fgfill = (kw == "addcirc") ? false : true;
182 mImgApp->AddCircle(xc, yc, rad, sop, fgfill, fgnc);
183 }
184else if ((kw == "addarca") || (kw == "addfarca")) {
185 if (tokens.size() < 5) {
186 cout << "Usage: addarca/addfarca xc yc r a da [colatt] [fgnc]" << endl;
187 return(0);
188 }
189 double xc = atof(tokens[0].c_str());
190 double yc = atof(tokens[1].c_str());
191 double rad = atof(tokens[2].c_str());
192 double ang = atof(tokens[3].c_str());
193 double dang = atof(tokens[4].c_str());
194 string sop;
195 if (tokens.size() > 5) sop = tokens[5];
196 bool fgnc = _CkBoolNC_(6);
197 bool fgfill = (kw == "addarca") ? false : true;
198 mImgApp->AddArc(xc, yc, rad, ang, dang, sop, fgfill, fgnc);
199 }
200else if (kw == "addmarker") {
201 if (tokens.size() < 2) {
202 cout << "Usage: addmarker x y [gratt] [fgnc]" << endl;
203 return(0);
204 }
205 double xm = atof(tokens[0].c_str());
206 double ym = atof(tokens[1].c_str());
207 string sop;
208 if (tokens.size() > 2) sop = tokens[2];
209 bool fgnc = _CkBoolNC_(3);
210 mImgApp->AddCircle(xm, ym, -1, sop, false, fgnc);
211}
212else if ((kw == "addarc") || (kw == "addfarc") ) {
213 if (tokens.size() < 6) {
214 cout << "Usage: addarc/addfarc x1 y1 x2 y2 x3 y3 [gratt] [fgnc]" << endl;
215 return(0);
216 }
217 double x1 = atof(tokens[0].c_str());
218 double y1 = atof(tokens[1].c_str());
219 double x2 = atof(tokens[2].c_str());
220 double y2 = atof(tokens[3].c_str());
221 double x3 = atof(tokens[4].c_str());
222 double y3 = atof(tokens[5].c_str());
223 string sop;
224 if (tokens.size() > 6) sop = tokens[6];
225 bool fgnc = _CkBoolNC_(7);
226 bool fgfill = (kw == "addarc") ? false : true;
227 mImgApp->AddArc(x1, y1, x2, y2, x3, y3, sop, fgfill, fgnc);
228}
229else if ((kw == "addpoly") || (kw == "addfpoly")) {
230 if (tokens.size() < 1) {
231 cout << "Usage: addpoly/addfpoly 'x1,y1 x2,y2 x3,y3 ...' [gratt] [fgnc]" << endl;
232 return(0);
233 }
234 vector<string> sxy;
235 vector<double> xpol, ypol;
236 double xp, yp;
237 FillVStringFrString(tokens[0], sxy);
238 for(int jkk=0; jkk<sxy.size(); jkk++) {
239 xp = yp = 0;
240 if (sscanf(sxy[jkk].c_str(), "%lg,%lg", &xp, &yp) == 2) {
241 xpol.push_back(xp);
242 ypol.push_back(yp);
243 }
244 }
245 string sop;
246 if (tokens.size() > 1) sop = tokens[1];
247 bool fgnc = _CkBoolNC_(2);
248 bool fgfill = (kw == "addpoly") ? false : true;
249 mImgApp->AddPoly(xpol, ypol, sop, fgfill, fgnc);
250 }
251
252
253else if ((kw == "settitle") || (kw == "addtitle")) {
254 if (tokens.size() < 1) { cout << "Usage: settitle/addtitle TopTitle [BotTitle] [fontatt]" << endl; return(0); }
255 if(tokens.size()<2) tokens.push_back("");
256 string gropt;
257 if(tokens.size()>2) gropt = tokens[2];
258 mImgApp->SetTitle(tokens[0], tokens[1], gropt);
259}
260
261else if ((kw == "setaxelabels") || (kw == "addaxelabels")) {
262 if (tokens.size() < 2) { cout << "Usage: setaxelabels/addaxelabels xLabel yLabel [fontatt]" << endl; return(0); }
263 string gropt;
264 if(tokens.size()>2) gropt = tokens[2];
265 mImgApp->SetAxeLabels(tokens[0], tokens[1], gropt);
266}
267
268// >>>>>>>>>>> Affichage des objets
269else if ( (kw == "disp") || (kw == "surf") || (kw == "imag") || (kw == "imagnav") ) {
270 if (tokens.size() < 1) { cout << "Usage: disp/surf/imag/imagnav nameobj [opt]" << endl; return(0); }
271 string opt = "next";
272 if (tokens.size() > 1) opt = tokens[1];
273 if (kw == "disp") mObjMgr->DisplayObj(tokens[0], opt);
274 else if (kw == "surf") mObjMgr->DisplaySurf3D(tokens[0], opt);
275 else if (kw == "imag") mObjMgr->DisplayImage(tokens[0], opt, false);
276 else if (kw == "imagnav") mObjMgr->DisplayImage(tokens[0], opt, true);
277 }
278
279else if (kw == "nt2d") {
280 if (tokens.size() < 3) {
281 cout << "Usage: nt2d nameobj varx vary [errx erry wt label opt]" << endl;
282 return(0);
283 }
284 while (tokens.size() < 8) tokens.push_back("");
285 string ph = "";
286 mObjMgr->DisplayNT(tokens[0], tokens[1], tokens[2], ph, tokens[3], tokens[4], ph,
287 tokens[5], tokens[6], ph, false, tokens[7], false);
288 }
289else if ((kw == "nt2dcn")||(kw == "nt2dci")) {
290 if (tokens.size() < 4) {
291 cout << "Usage: nt2dcn nameobj color varx vary [errx erry wt label opt]" << endl;
292 return(0);
293 }
294 while (tokens.size() < 9) tokens.push_back("");
295 string ph = "";
296 bool colidx = false;
297 if (kw == "nt2dci") colidx = true;
298 mObjMgr->DisplayNT(tokens[0], tokens[2], tokens[3], ph, tokens[4], tokens[5], ph,
299 tokens[6], tokens[7], tokens[1], colidx, tokens[8], false);
300 }
301else if (kw == "nt3d") {
302 if (tokens.size() < 7) {
303 cout << "Usage: nt3d nameobj varx vary varz [errx erry errz wt label opt]" << endl;
304 return(0);
305 }
306 while (tokens.size() < 10) tokens.push_back("");
307 string ph = "";
308 mObjMgr->DisplayNT(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5],
309 tokens[6], tokens[7], tokens[8], ph, false, tokens[9], true);
310 }
311else if (kw == "vecplot") {
312 if (tokens.size() < 2) {
313 cout << "Usage: vecplot nameVecX nameVecY [opt]" << endl;
314 return(0);
315 }
316 while (tokens.size() < 3) tokens.push_back("");
317 mObjMgr->DisplayVector(tokens[0], tokens[1], tokens[2]);
318}
319else if (kw == "bargraph") return BarGraph(kw, tokens);
320else if (kw == "textdrawer") return TextDrawer(kw, tokens);
321else if (kw == "pirgbdisp") {
322 if (tokens.size() < 1) {
323 cout << "Usage: pirgbdisp PI-RGB_FileName [gr_opt]" << endl;
324 return(0);
325 }
326 string gropt = "lut=rgb rgb216cm ";
327 if (tokens.size() > 1) gropt += tokens[1];
328 PIPixRGBArray * rgbimg = new PIPixRGBArray(tokens[0].c_str());
329 P2DPixRGBAdapter * argbimg = new P2DPixRGBAdapter(rgbimg, true);
330 mImgApp->DispImage(argbimg, tokens[0], gropt);
331}
332// Obsolete : ne pas virer SVP, cmv 26/7/99
333else if (kw == "gfd2d") {
334 cout<<"----- gfd2d OBSOLETE: utilisez nt2d -----"<<endl;
335 if(tokens.size()<2)
336 {cout<<"Usage: gfd2d nomobj numvarx erreur=(x y xy) opt"<<endl;
337 return(0);}
338 string numvary = "";
339 string err = "";
340 string opt = "next";
341 if(tokens.size()>2) err = tokens[2];
342 if(tokens.size()>3) opt = tokens[3];
343 mObjMgr->DisplayGFD(tokens[0],tokens[1],numvary,err,opt);
344 }
345
346else if (kw == "gfd3d") {
347 cout<<"----- gfd3d OBSOLETE: utilisez nt3d -----"<<endl;
348 if(tokens.size()<3)
349 {cout<<"Usage: gfd3d nameobj numvarx numvary erreur=(x y z xy xz yz xyz) opt"<<endl;
350 return(0);}
351 string err = "";
352 string opt = "next";
353 if(tokens.size()>3) err = tokens[3];
354 if(tokens.size()>4) opt = tokens[4];
355 mObjMgr->DisplayGFD(tokens[0],tokens[1],tokens[2],err,opt);
356 }
357
358
359else {
360 cerr << "PIAGraphicExecutor::Do() Erreur - Commande " << kw << " inconuue ! " << endl;
361 return(-1);
362 }
363
364return(0);
365}
366
367/* --Methode-- */
368bool PIAGraphicExecutor::IsThreadable(string const & keyw)
369{
370 return false;
371}
372
373
374/* --Methode-- */
375void PIAGraphicExecutor::RegisterCommands()
376{
377string kw, usage, grp;
378
379RegisterPIGraphicsHelp(mpiac);
380
381grp = "Graphics";
382string gdesc = "Basic graphics and object display commands";
383mpiac->AddHelpGroup(grp, gdesc);
384kw = "zone";
385usage = "To Divide the Graphic window \n Usage: zone [nx=1 ny=1]";
386usage += "\n Related commands: newwin";
387mpiac->RegisterCommand(kw, usage, this, grp);
388kw = "newwin";
389usage = "To Create a New Graphic window, with zones \n";
390usage += " Window size can be specified \n";
391usage += " Usage: newwin [nx ny [sizeX sizeY]] ";
392usage += "\n Related commands: zone";
393mpiac->RegisterCommand(kw, usage, this, grp);
394kw = "stacknext";
395usage = "Displays the next widget on stack window \n Usage: stacknext";
396mpiac->RegisterCommand(kw, usage, this, grp);
397
398kw = "graphicatt";
399usage = "To change default graphic options\n Usage: graphicatt att_list\n";
400usage += "att_list=def back to default values, Example: gratt 'red circlemarker5'";
401usage += "\n ------------------ Graphic attribute list ------------------\n";
402usage += ">> Colors: defcol black white grey red blue green yellow\n";
403usage += " magenta cyan turquoise navyblue orange siennared purple\n";
404usage += " limegreen gold violet violetred blueviolet darkviolet\n";
405usage += " or \"color=name\" \"fgcolor=name\" \"bgcolor=name\" ex: \"color=red\"\n";
406usage += ">> Lines: defline normalline thinline thickline dashedline thindashedline\n";
407usage += " thickdashedline dottedline thindottedline thickdottedline\n";
408usage += " or \"line=type,width\" ex: \"line=dotted,7\"\n";
409usage += ">> Fonts:\n";
410usage += " > Att: deffontatt normalfont boldfont italicfont bolditalicfont \n";
411usage += " smallfont smallboldfont smallitalicfont smallbolditalicfont\n";
412usage += " bigfont bigboldfont bigitalicfont bigbolditalicfont\n";
413usage += " hugefont hugeboldfont hugeitalicfont hugebolditalicfont\n";
414usage += " > Names: deffont courierfont helveticafont timesfont symbolfont \n";
415usage += " or \"font=name,type,size\" ex: \"font=courrier,bolditalic,10\"\n";
416usage += ">> Marker: dotmarker<T> plusmarker<T> crossmarker<T> circlemarker<T>\n";
417usage += " fcirclemarker<T> boxmarker<T> fboxmarker<T> trianglemarker<T>\n";
418usage += " ftrianglemarker<T> starmarker<T> fstarmarker<T>\n";
419usage += " with <T> = 1 3 5 7 .. 15 , Example fboxmarker5 , plusmarker9 ...\n";
420usage += " or \"marker=type,size\" ex: \"marker=plus,10\"\n";
421usage += ">> ArrowMarker: basicarrow<T> trianglearrow<T> ftrianglearrow<T>\n";
422usage += " arrowshapedarrow<T> farrowshapedarrow<T>\n";
423usage += " with <T> = 5 7 .. 15 , Example trianglearrow7 ...\n";
424usage += " or \"arrow=type,size\" ex: \"arrow=arrowshaped,10\"\n";
425usage += "------ Specific options for image displays:\n";
426usage += ">> ColorTables: defcmap grey32 invgrey32 colrj32 colbr32\n";
427usage += " grey128 invgrey128 colrj128 colbr128\n";
428usage += " red32cm green32cm blue32cm yellow32cm\n";
429usage += " orange32cm cyan32cm violet32cm\n";
430usage += " midas_pastel midas_heat midas_rainbow3 midas_bluered\n";
431usage += " midas_bluewhite midas_redwhite\n";
432usage += " multicol16 multicol64 rgb216cm rgb512cm rgb4096cm\n";
433usage += ">> revcmap : reverse colorMap\n";
434usage += ">> ZoomFactors : zoomxN ex: zoomx1 zoomx2 zoomx3 ...\n";
435usage += " zoom/N ex: zoom/2 zoom/3 zoom/4 ...\n";
436usage += ">> imagecenter=ix,iy : Position the image in widget\n";
437usage += ">> lut=ltyp,min,max : Sets LUT type and min/max\n";
438usage += " (ltyp=lin/log/sqrt/square/rgb)\n";
439usage += ">> autolut=alt[,ns[,min,max]] : AutoLut method selection \n";
440usage += " (alt=minmax/meansig/hispeak/histail/hisrng)\n";
441usage += ">> invx,invy,exchxy : image axes configuration\n";
442usage += "--- General purpose options:\n";
443usage += ">> stat,stats / nsta,nstat,nostat,nostats : Toggle statistic display\n";
444usage += ">> title,tit / notitle,notit -> Toggle automatic title display\n";
445usage += ">> Choose display window: next same win stack inset\n";
446usage += ">> for Axes / Axe labels / LogScale / xylimits / defdrrect\n";
447usage += " see setaxesatt command\n";
448usage += "\n";
449usage += " Related commands: setaxesatt setinsetlimits ";
450mpiac->RegisterCommand(kw, usage, this, grp);
451
452kw = "setaxesatt";
453usage = "To set default axes attributes \n Usage: setaxesatt att_list \n";
454usage += "Color/Line/Font attributes and axes attributes \n";
455usage += ">> Axes: axesnone stdaxes=defaxes=boxaxes boxaxesgrid \n";
456usage += " fineaxes fineaxesgrid centeredaxes finecenteredaxes \n";
457usage += " centeredaxesgrid finecenteredaxesgrid\n";
458usage += " axescenter=x0,y0 (only with centered axes, default \"axescenter=\")\n";
459usage += " grid nogrid labels nolabels \n";
460usage += " ticks noticks minorticks nominorticks \n";
461usage += " extticks intticks extintticks \n";
462usage += " nbticks=X_NTicks,Y_NTicks \n";
463usage += " tickslen=MajTickLenFrac,MinTickLenFrac \n";
464usage += ">> Axe labels font size: fixedfontsize/autofontsize=fszf \n";
465usage += " autofontsize=fsizef: Font size computed automatically \n";
466usage += " fixedfontsize: Use font size attribute (BaseDrawer) \n";
467usage += ">> Scale type: linx liny logx logy -> Lin/Log Scales for 2D plots \n";
468usage += ">> AxeDirection: Reverse X/Y axe drawing direction \n";
469usage += " revax revay axelr axedu (or axerl/axeud -> revax/revay) \n";
470usage += ">> xylimits=xmin,xmax,ymin,ymax -> Forces X-Y limits in 2-D plots \n";
471usage += ">> defdrrect=xmin,xmax,ymin,ymax -> Defines drawing rectangle 2-D plots \n";
472usage += " The rectangle is defined as a fraction of the widget size\n";
473mpiac->RegisterCommand(kw, usage, this, grp);
474
475kw = "setinsetlimits";
476usage = "Define the display rectangle for drawers added as insets \n";
477usage += " over existing graphic objects - limits expressed as fraction \n";
478usage += " graphic object size (0. .. 1.) Xmax at right, YMax top \n ";
479usage += " Usage: setinsetlimits xmin xmax ymin ymax";
480usage += "\n Related commands: graphicatt /inset";
481mpiac->RegisterCommand(kw, usage, this, grp);
482
483kw = "drpanel";
484usage = "Creates a new 2D drawing zone for addtext, addline \n";
485usage += " Usage: drpanel xmin xmax ymin ymax [GrAtt] [Name]";
486usage += "\n Related commands: addtext addline addrect addcirc ...";
487mpiac->RegisterCommand(kw, usage, this, grp);
488
489kw = "addtext";
490usage = "Adds a text string to the current graphic object";
491usage += "\n at the specified position (+ color/font/pos/dir attributes) ";
492usage += "\n The Base/AxesDrawer is used to handle added text strings" ;
493usage += "\n Alt<E> to remove the added element";
494usage += "\n Usage: addtext x y TextString [ColFontPosAtt] [fgnc=false/true]";
495usage += "\n (use quotes '' for multi word text strings) ";
496usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
497usage += "\n Text position/direction attribute: ";
498usage += "\n horizleft horizcenter horizright";
499usage += "\n vertbottom vertcenter verttop ";
500usage += "\n textdirhoriz textdirvertup textdirvertdown ";
501usage += "\n Related commands: addctext addline addarrow addrect addfrect";
502usage += "\n addcirc addfcirc addarc addfrac addpoly addfpoly settitle graphicatt";
503mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
504
505kw = "addctext";
506usage = "Adds a composite text string with superscript and subscripts ";
507usage += "\n at the specified position (+ color/font/pos/dir attributes) ";
508usage += "\n Usage: addctext x y Text sUp sDown [ColFontPosAtt] [UpDownFontAtt] [fgnc]";
509usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
510usage += "\n Related commands: addtext addline addrect ...";
511usage += "\n (See command addtext and graphicatt for more details)";
512mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
513
514kw = "addline";
515usage = "Adds a line to the current graphic object";
516usage += "\n at the specified position (+ graphic attribute)";
517usage += "\n The Base/AxesDrawer is used to handle added lines";
518usage += "\n Alt<E> to remove the added element";
519usage += "\n Usage: addline x1 y1 x2 y2 [GraphicAtt] [fgnc=false/true]";
520usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
521usage += "\n Related commands: addarrow addtext addrect addfrect ";
522usage += "\n addmarker addcirc addfcirc addarc addfarc addpoly addfpoly graphicatt";
523mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
524
525kw = "addarrow";
526usage = "Adds an arrow to the current graphic object";
527usage += "\n at the specified position (+ graphic attribute)";
528usage += "\n The Base/AxesDrawer is used to handle added lines";
529usage += "\n Alt<E> to remove the added element";
530usage += "\n Usage: addarrow x1 y1 x2 y2 [GraphicAtt] [fgnc=false/true]";
531usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
532usage += "\n Related commands: addline addtext addrect addfrect ";
533usage += "\n addmarker addcirc addfcirc addarc addfarc addpoly addfpoly graphicatt";
534mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
535kw = "addarrow_nc";
536
537kw = "addrect";
538usage = "Adds a rectangle to the current graphic object";
539usage += "\n between the specified positions (+ graphic attribute)";
540usage += "\n The Base/AxesDrawer is used to handle added rectangle";
541usage += "\n Alt<E> to remove added element";
542usage += "\n Usage: addrect x1 y1 x2 y2 [GraphicAtt] [fgnc=false/true]";
543usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
544usage += "\n Related commands: addtext addline addarrow addfrect";
545usage += "\n addcirc addfcirc addarc addfarc addpoly addfpoly graphicatt";
546mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
547
548kw = "addfrect";
549usage = "Adds a filled rectangle to the current graphic object";
550usage += "\n between the specified positions (+ graphic attribute)";
551usage += "\n The Base/AxesDrawer is used to handle added rectangle";
552usage += "\n Alt<E> to remove added element";
553usage += "\n Usage: addfrect x1 y1 x2 y2 [GraphicAtt] [fgnc=false/true]";
554usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
555usage += "\n Related commands: addtext addline addarrow addrect";
556usage += "\n addcirc addfcirc addpoly addfpoly graphicatt";
557mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
558
559kw = "addmarker";
560usage = "Adds a marker to the current graphic object";
561usage += "\n at the specified position (+ graphic attribute)";
562usage += "\n The Base/AxesDrawer is used to handle added circles";
563usage += "\n Alt<E> to remove added element";
564usage += "\n Usage: addmarker xpos ypos [GraphicAtt] [fgnc=false/true]";
565usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
566usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
567usage += "\n addcirc addfcirc addarc addfarc addpoly addfpoly graphicatt";
568mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
569
570kw = "addcirc";
571usage = "Adds a circle to the current graphic object";
572usage += "\n with the specified center and radius (+ graphic attribute)";
573usage += "\n The Base/AxesDrawer is used to handle added circles";
574usage += "\n Alt<E> to remove added element";
575usage += "\n Usage: addcirc xcenter ycenter radius [GraphicAtt] [fgnc=false/true]";
576usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
577usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
578usage += "\n addfcirc addarc addfarc addpoly addfpoly graphicatt";
579mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
580
581kw = "addfcirc";
582usage = "Adds a filled circle to the current graphic object";
583usage += "\n with the specified center and radius (+ graphic attribute)";
584usage += "\n The Base/AxesDrawer is used to handle added circles";
585usage += "\n Alt<E> to remove added element";
586usage += "\n Usage: addcirc xcenter ycenter radius [GraphicAtt] [fgnc=false/true]";
587usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
588usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
589usage += "\n addcirc addarc addfarc addpoly addfpoly graphicatt";
590mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
591
592kw = "addoval";
593usage = "Adds an oval (ellipse) to the current graphic object";
594usage += "\n centered on xc,yc - semi-axis ds,dy (+ graphic attribute)";
595usage += "\n The Base/AxesDrawer is used to handle added rectangle";
596usage += "\n Alt<E> to remove added element";
597usage += "\n Usage: addoval xc yc dx dy [GraphicAtt] [fgnc=false/true]";
598usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
599usage += "\n Related commands: addfoval addline addarrow addfrect addcirc addfcirc";
600usage += "\n addcirc addfcirc addarc addfarc addpoly addfpoly graphicatt";
601mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
602
603kw = "addfoval";
604usage = "Adds a filled oval (ellipse) to the current graphic object";
605usage += "\n centered on xc,yc - semi-axis ds,dy (+ graphic attribute)";
606usage += "\n The Base/AxesDrawer is used to handle added rectangle";
607usage += "\n Alt<E> to remove added element";
608usage += "\n Usage: addfoval xc yc dx dy [GraphicAtt] [fgnc=false/true]";
609usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
610usage += "\n Related commands: addoval addline addarrow addfrect addcirc addfcirc";
611usage += "\n addcirc addfcirc addarc addfarc addpoly addfpoly graphicatt";
612mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
613
614kw = "addarca";
615usage = "Adds an arc to the current graphic object";
616usage += "\n defined by the circle (center+radius), start angle and angular extension";
617usage += "\n Angles are specified in degrees";
618usage += "\n Usage: addarca xc yc r a0deg dadeg [GraphicAtt] [fgnc=false/true]";
619usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
620usage += "\n Related commands: addtext addline addfarca addarc ...";
621mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
622
623kw = "addfarca";
624usage = "Adds a filled arc to the current graphic object";
625usage += "\n defined by the circle (center+radius), start angle and angular extension";
626usage += "\n Angles are specified in degrees";
627usage += "\n Usage: addfarca xc yc r a0deg dadeg [GraphicAtt] [fgnc=false/true]";
628usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
629usage += "\n Related commands: addtext addline addarca addarc ...";
630mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
631
632kw = "addarc";
633usage = "Adds an arc to the current graphic object";
634usage += "\n defined by 3 points (+ graphic attribute)";
635usage += "\n The Base/AxesDrawer is used to handle added arcs";
636usage += "\n Alt<E> to remove the added element";
637usage += "\n Usage: addarc x1 y1 x2 y2 x3 y3 [GraphicAtt] [fgnc=false/true]";
638usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
639usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
640usage += "\n addcirc addfcirc addfarc addarca addpoly addfpoly graphicatt";
641mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
642
643kw = "addfarc";
644usage = "Adds a filled arc to the current graphic object";
645usage += "\n defined by 3 points (+ graphic attribute)";
646usage += "\n The Base/AxesDrawer is used to handle added arcs";
647usage += "\n Alt<E> to remove added element";
648usage += "\n Usage: addarc x1 y1 x2 y2 x3 y3 [GraphicAtt] [fgnc=false/true]";
649usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
650usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
651usage += "\n addcirc addfcirc addfarc addpoly addfpoly graphicatt";
652mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
653
654kw = "addpoly";
655usage = "Adds a polyline/polygon to the current graphic object";
656usage += "\n Usage: addploy 'x1,y1 x2,y2 x3,y3 ...' [GraphicAtt] [fgnc=false/true]";
657usage += "\n Coordinates specified as pairs x,y in a single word (use simple or double quotes";
658usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
659usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
660usage += "\n addcirc addfcirc addfarc graphicatt";
661mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
662
663kw = "addfpoly";
664usage = "Adds a filled polygon to the current graphic object";
665usage += "\n Usage: addploy 'x1,y1 x2,y2 x3,y3 ...' [GraphicAtt] [fgnc=false/true]";
666usage += "\n Coordinates specified as pairs x,y in a single word (use simple or double quotes";
667usage += "\n if fgnc==true : Normalized 0..1 coordinates specification (def=false)";
668usage += "\n Related commands: addtext addline addarrow addfrect addfrect";
669usage += "\n addcirc addfcirc addfarc graphicatt";
670mpiac->RegisterCommand(kw, usage, this, "Graphic-Elts");
671
672kw = "settitle";
673usage = "Set the title string (top title / bottom title) for the current graphic object";
674usage += "\n Usage: settitle TopTitle [BottomTitle] [fontAtt]";
675usage += "\n Related commands: addtext graphicatt";
676mpiac->RegisterCommand(kw, usage, this, grp);
677
678kw = "addtitle";
679usage = "Set the title string (top title / bottom title) \n";
680usage += " alias for settitle ";
681mpiac->RegisterCommand(kw, usage, this, grp);
682
683kw = "setaxelabels";
684usage = "Set the X and Y axis labels for the current 2D graphic object \n";
685usage += "\n Usage: setaxelabels xLabel yLabel [ColorFntAtt]";
686usage += "\n Related commands: settitle addtext graphicatt";
687mpiac->RegisterCommand(kw, usage, this, grp);
688
689kw = "addaxelabels";
690usage = "Set the X and Y axis labels for the current 2D graphic object";
691usage += " alias for setaxelabels ";
692mpiac->RegisterCommand(kw, usage, this, grp);
693
694grp = "Obj. Display";
695kw = "disp";
696usage = "Displays an object \n Usage: disp nameobj [graphic_attributes]";
697usage += "\n Related commands: surf nt2d nt3d vecplot";
698mpiac->RegisterCommand(kw, usage, this, grp);
699kw = "imag";
700usage = "Displays an object as an image \n Usage: imag nameobj [graphic_attributes]";
701usage += "\n Related commands: disp imagnav surf nt2d nt3d vecplot";
702mpiac->RegisterCommand(kw, usage, this, grp);
703kw = "imagnav";
704usage = "Displays an object as an image with the ImageNavigator viewer \n";
705usage += "Usage: imagnav nameobj [graphic_attributes]";
706usage += "\n Related commands: disp imag surf nt2d nt3d vecplot";
707mpiac->RegisterCommand(kw, usage, this, grp);
708kw = "surf";
709usage = "Displays an object as a 3D surface \n Usage: surf nameobj [graphic_attributes]";
710usage += "\n Related commands: disp nt2d nt3d vecplot";
711mpiac->RegisterCommand(kw, usage, this, grp);
712kw = "nt2d";
713usage = "Displays Points (X-Y) [with error-bar / Weight / Label ] from an NTuple ";
714usage += "\n Usage : nt2d nameobj varx vary [errx erry wt label graphic_attributes]";
715usage += "\n Related commands: disp surf nt2dcn nt2dci nt3d gfd2d vecplot";
716mpiac->RegisterCommand(kw, usage, this, grp);
717kw = "nt2dcn";
718usage = "Displays Points (X-Y) [with error-bar / Weight / Label ] from an NTuple ";
719usage = " with colors specified by a column content (as color names) ";
720usage += "\n Usage : nt2dcn nameobj color varx vary [errx erry wt label graphic_attributes]";
721usage += "\n Related commands: disp surf nt2d nt2dci nt3d gfd2d vecplot";
722mpiac->RegisterCommand(kw, usage, this, grp);
723kw = "nt2dci";
724usage = "Displays Points (X-Y) [with error-bar / Weight / Label ] from an NTuple ";
725usage = " with colors specified by a column content (as color index) ";
726usage += "\n Usage : nt2dci nameobj color varx vary [errx erry wt label graphic_attributes]";
727usage += "\n Related commands: disp surf nt2d nt2dci nt3d gfd2d vecplot";
728mpiac->RegisterCommand(kw, usage, this, grp);
729kw = "nt3d";
730usage = "Displays 3D-Points (X-Y-Z) [with error-bars / Weight / Label ] from an NTuple ";
731usage += "\n Usage : nt3d nameobj varx vary varz [errx erry errz wt label graphic_attributes]";
732usage += "\n Related commands: disp surf nt2d gfd3d ";
733mpiac->RegisterCommand(kw, usage, this, grp);
734kw = "vecplot";
735usage = "Displays Points (X-Y) with coordinates defined by two vectors ";
736usage += "\n Usage : vecplot nameVecX nameVecY [graphic_attributes]";
737usage += "\n Related commands: disp nt2d ";
738mpiac->RegisterCommand(kw, usage, this, grp);
739
740kw = "bargraph";
741usage = "Bar-Graph view of a sequence of values ";
742usage += "\n Usage: bargraph ValueVarName [gr_opt] ";
743usage += "\n or bargraph ValueVarName LabelVarName ColPosVarName [gr_opt] ";
744usage += "\n ValueVarName,LabelVarName,ColPosVarName are PIACmd interpreter ";
745usage += "\n variable name (vectors) ";
746usage += "\n - ValueVarName: Sequence of values to be represented";
747usage += "\n - LabelVarName: Corresponding labels";
748usage += "\n - ColPosVarName: Corresponding colors or color,position pairs ";
749usage += "\n Use a dash (-) or ! as placeholder for LabelVarName/ColPosVarName";
750usage += "\n Specific graphic options: fill/nofill packfrac=value ";
751usage += "\n horizontalbars/verticalbars barvaluelabel/nobarvaluelabel";
752usage += "\n Related commands: disp nt2d vecplot ...";
753mpiac->RegisterCommand(kw, usage, this, grp);
754kw = "textdrawer";
755usage = "Multi line text darwer ";
756usage += "\n Usage : textdrawer LinesVarName AttVarName [gr_opt] ";
757usage += "\n LinesVarName,AttVarName are PIACmd interpreter variables";
758usage += "\n - LinesVarName: Lines to be displayed";
759usage += "\n - AttVarName: Corresponding font/marker/color attributes";
760usage += "\n Use a dash (-) or ! as placeholder for AttVarName";
761usage += "\n Specific graphic options: frame/noframe";
762usage += "\n Related commands: disp ... ";
763mpiac->RegisterCommand(kw, usage, this, grp);
764
765kw = "pirgbdisp";
766usage = "Read and display RGB-image object (PIPixRGBArray) from file ";
767usage += "\n Usage : pirgbdisp PI-RGB_FileName [gr_opt] ";
768mpiac->RegisterCommand(kw, usage, this, grp);
769
770// Ceci est maintenant obsolete, on garde pour info.
771kw = "gfd2d";
772usage = "Displays Points (X-Y) with error-bars from a GeneralFit Data ";
773usage += "\n Usage : gfd2d nameobj numvarx erreur=(x y xy) [graphic_attributes]";
774usage += "\n Related commands: gfd3d nt2d nt3d ";
775usage += "\n ----- OBSOLETE: utilisez nt2d -----";
776mpiac->RegisterCommand(kw, usage, this, grp);
777kw = "gfd3d";
778usage = "Displays 3D-Points (X-Y-Z) with error-bars from a GeneralFit Data ";
779usage += "\n Usage : gfd3d nameobj numvarx numvary erreur=(x y z xy xz yz xyz) [graphic_attributes]";
780usage += "\n Related commands: gfd2d nt2d nt3d ";
781usage += "\n ----- OBSOLETE: utilisez nt3d -----";
782mpiac->RegisterCommand(kw, usage, this, grp);
783
784}
785
786
787/* --Methode-- */
788void PIAGraphicExecutor::RegisterPIGraphicsHelp(PIACmd* piac)
789// Methode pour enregistrer le Help des Widgets et Windows de piapp
790{
791string kw,grp,usage;
792
793grp = "Graphics";
794
795kw = "PIImage";
796usage = "Manages the display of a 2-D array (P2DArrayAdapter) as an image \n";
797usage += "and controls a zoom widget, as well as a global image view widget \n";
798usage += ">>>> Mouse controls : \n";
799usage += "o Button-1: Display current coordinates and pixel value\n";
800usage += " Position the cursor an refresh the zoom widget\n";
801usage += "o Button-2: Defines an image zone and positions the cursor \n";
802usage += "o Button-3: Moves the viewed portion of the array inside the window \n";
803usage += ">>>> Keyboard controls : \n";
804usage += "o <Alt>R : Refresh display \n";
805usage += "o <Alt>O : Shows the PIImageTools (image display parameter controls) \n";
806usage += "o <Alt>G : Show the PIDrawerTools (Graphic attributes of overlayed graphics (Drawers)) \n";
807usage += "o <Alt>D : Shows the drawer manipulation pop-up menu \n";
808usage += "o <Alt>V : Copy/Paste / Text paste at the current cursor position \n";
809usage += "o <Alt>C : Copy/Paste / Copies the selected regions content as text in the copy/paste buffer \n";
810usage += "o <Alt>X : Show/Hide the Cut Window \n";
811usage += "o <Alt>Z : Removes added graphic elements (handled by BaseDrawer - 0) \n";
812usage += "o <Alt>E : Removes the last added graphic element \n";
813usage += "o <Alt>+ or <Cntl>+ : Zoom in \n";
814usage += "o <Alt>- or <Cntl>- : Zoom out \n";
815usage += "o Cursor keys : Moves the image cursor \n";
816piac->RegisterHelp(kw, usage, grp);
817
818kw = "PIScDrawWdg";
819usage = "Manages display of 2-D drawers with interactive zoom \n";
820usage += ">>>> Mouse controls : \n";
821usage += "o Button-1: Display current coordinates \n";
822usage += "o Button-2: Defines a rectangle for zoom \n";
823usage += "o Button-3: Defines a rectangle for Text-Info (<Alt>I) \n";
824usage += ">>>> Keyboard controls : \n";
825usage += "o <Alt>R : Refresh display \n";
826usage += "o <Alt>O : Displays a specific control window (default: PIDrawerTools) \n";
827usage += " (2-D histograms, contour plot ...) \n";
828usage += "o <Alt>G : Show the PIDrawerTools (Graphic attributes of displayed Drawers) \n";
829usage += " Drawer 0 manages the axes, as well as the added text \n";
830usage += "o <Alt>D : Shows the drawer manipulation pop-up menu \n";
831usage += "o <Alt>V : Copy/Paste / Text paste at the current position \n";
832usage += "o <Alt>Z : Removes added graphic elements (handled by BaseDrawer - 0) \n";
833usage += "o <Alt>E : Removes the last added graphic element \n";
834usage += "o <Alt>I : Shows (or updates) a text info window on the selected rectangle \n";
835usage += "o <Alt>M : Activate/Deactivate a measurement cursor on Button-1\n";
836usage += "o <Alt>L : Deactivate DX,DY print (see below)\n";
837usage += ">>>> Mouse + Keyboard controls : \n";
838usage += "o Button-1 + <Alt>K : Set (reset) the reference point for DX,DY print \n";
839piac->RegisterHelp(kw, usage, grp);
840
841kw = "PIDraw3DWdg";
842usage = "Manages display of 3-D objects (drawers) \n";
843usage += ">>>> Mouse controls : \n";
844usage += "o Button-2: Rotates the observer (camera) around object \n";
845usage += "o Shift-Button-2: Rotates object with camera fixed \n";
846usage += " The object rotation mode can be assigned to Button-2 with <Alt>S \n";
847usage += "o Button-3: Zoom control (Camera distance And/Or view angle) \n";
848usage += ">>>> Keyboard controls : \n";
849usage += "o <Alt>R : Resets the 3-D view and refreshes the display \n";
850usage += "o <Alt>O : Displays a specific control window (default: PIDrawerTools) \n";
851usage += " (2-D histograms, contour plot ...) \n";
852usage += "o <Alt>G : Show the PIDrawerTools (Graphic attributes of displayed Drawers) \n";
853usage += " Drawer 0 manages the axes, as well as the added text \n";
854usage += "o <Alt>D : Shows the drawer manipulation pop-up menu \n";
855usage += "o <Alt>V : Copy/Paste / Text paste at the current position (Drawer 0)\n";
856usage += "o <Alt>Z : Removes added graphic elements (handled by BaseDrawer - 0) \n";
857usage += "o <Alt>E : Removes the last added graphic element \n";
858usage += "o <Alt>A : Activate/Deactivate axes drawing \n";
859usage += "o <Alt>S : Activate/Deactivate object rotation mode on Button-2 \n";
860piac->RegisterHelp(kw, usage, grp);
861
862kw = "Windows";
863usage = "Objects can be displayed in different windows, or overlayed on the \n";
864usage += "previous display. The graphics attributes next,win,stack,same control \n";
865usage += "the display window. \n";
866usage += "o GraphicWindow : This is the default mode (gr_att=next)\n";
867usage += " Graphic windows can be divided int zones. Object is displayed \n";
868usage += " in the next available position, removing a previously displayed \n";
869usage += " widget if necessary \n";
870usage += "o Window : An object is displayed in its own window (gr_att= win) \n";
871usage += "o StackWindow : multpile widgets can be stacked in a StackWindow (gr_att= stack) \n";
872usage += " A single widget is displayed a any time. Different widgets in a StackWindow \n";
873usage += " can be displayed using the stacknext command, as well as the StackTools item \n";
874usage += " in the Tools menu (from Menubar). An automatic cyclic display mode can also \n";
875usage += " be activated using the StackTools menu (Blink) \n";
876usage += "o Most objects can be also be displayed overlayed \n";
877usage += " on the last displayed widget (gr_att= same) \n";
878usage += " or by specifying a widget name samew=Widgetname \n";
879usage += "o The widget/window name can be specified (gr_att wname=Name) \n";
880usage += "o The overlay can be on a selected rectangle of the last \n";
881usage += " displayed widget (gr_att: inset or inset=fxmin,fxmax,fymin,fymax) \n";
882usage += "\n Related commands: newwin zone stacknext graphicatt setinsetlimits";
883piac->RegisterHelp(kw, usage, grp);
884
885kw = "PIConsole";
886usage = "Text output area and command editing window (console) \n";
887usage += ">>>> Mouse controls : \n";
888usage += "o Button-1: Rectangle selection for copy/paste \n";
889usage += "o Button-2: Paste text in the command editing line \n";
890usage += "o Button-3: activate display option menu \n";
891usage += ">>>> Keyboard controls : \n";
892usage += "o <Alt>O : activate display option menu \n";
893usage += "o <Alt>V : Paste text in the command editing line \n";
894usage += "o <Alt>A : Selection of the whole window for copy \n";
895usage += "o <Alt>L : Command history (List of command history buffer) \n";
896usage += "o <Ctl>A : Command editing -> Goto the beginning of line \n";
897usage += "o <Ctl>E : Command editing -> Goto the end of line \n";
898usage += "o <Ctl>K : Command editing -> Clear to the end of line \n";
899usage += "o <Ctl>C : Stop/break command execution by PIACmd/Commander \n";
900usage += "o Cursor left,right : Command editing -> Move cursor \n";
901usage += "o Cursor Up,Down : recall command from history buffer \n";
902usage += "o Backspace,Del : Command editing \n";
903usage += "o <Return>,<Enter> : Execute command \n";
904piac->RegisterHelp(kw, usage, grp);
905}
906
907/* --Methode-- */
908int PIAGraphicExecutor::BarGraph(string& keyw, vector<string>& tokens)
909{
910 //PAS necessaire pour le moment-- if (kw != "bargraph") return 2;
911 if (tokens.size() < 1) {
912 cout << "Usage: bargraph ValueVarName [gr_opt]" << endl;
913 cout << " or bargraph ValueVarName LabelVarName ColPosVarName [gr_opt]" << endl;
914 return(0);
915 }
916 PIBarGraph* bgd = NULL;
917 vector<string> barvals;
918 string gropt;
919 if (!mpiac->GetVar(tokens[0], barvals)) {
920 cout << "bargraph/Error: No variable with name " << tokens[0] << endl;
921 return(1);
922 }
923 if (tokens.size() < 3) {
924 bgd = new PIBarGraph;
925 for(int k=0; k<barvals.size(); k++)
926 bgd->AddBar(atof(barvals[k].c_str()));
927 if (tokens.size() > 1) gropt = tokens[1];
928 }
929 else {
930 vector<string> barlabs;
931 if (!mpiac->GetVar(tokens[1], barlabs)) {
932 cout << "bargraph/Warning: No variable with name " << tokens[1]
933 << " using Values as labels " << endl;
934 barlabs = barvals;
935 }
936 vector<string> barcols;
937 if (!mpiac->GetVar(tokens[2], barcols)) {
938 cout << "bargraph/Warning: No variable with name " << tokens[1]
939 << " using default attributes " << endl;
940 for(int kad=0; kad<barvals.size(); kad++) barcols.push_back("");
941 }
942 if ( (barvals.size() != barlabs.size()) ||
943 (barvals.size() != barcols.size()) ) {
944 cout << "bargraph/Error: Variables " << tokens[0] << "," << tokens[1]
945 << "," << tokens[2] << " have different sizes" << endl;
946 return(1);
947 }
948 bgd = new PIBarGraph;
949 // Synchronisation necessaire a cause de PIGraphicAtt qui peuvent faire appel a des fontes (Pb Serveur X)
950 mImgApp->LockMutex(); // <ZThread> global event loop synchronisation
951 for(int k=0; k<barvals.size(); k++) {
952 double id = k+1;
953 size_t p = barcols[k].find(',');
954 vector<string> sgra;
955 if (p < barcols[k].length()-1) {
956 mImgApp->ParseDisplayOption(barcols[k].substr(0, p), sgra);
957 id = atof(barcols[k].substr(p+1).c_str());
958 }
959 else mImgApp->ParseDisplayOption(barcols[k], sgra);
960 PIGraphicAtt gracol(sgra);
961 bgd->AddBar(id, atof(barvals[k].c_str()), barlabs[k], gracol.GetColor());
962 }
963 mImgApp->UnlockMutex(true); // <ZThread> global event loop synchronisation
964 if (tokens.size() > 3) gropt = tokens[3];
965 }
966 string grname = "BarGraph";
967 mImgApp->DispScDrawer(bgd, grname, gropt);
968 return 0;
969}
970
971/* --Methode-- */
972int PIAGraphicExecutor::TextDrawer(string& keyw, vector<string>& tokens)
973{
974 if (tokens.size() < 2) {
975 cout << "Usage: textdrawer TextLinesVarName AttVarName [gr_opt]" << endl;
976 return(0);
977 }
978 vector<string> txtlines;
979 if (!mpiac->GetVar(tokens[0], txtlines)) {
980 cout << "textdrawer/Error: No variable with name" << tokens[0] << endl;
981 return(1);
982 }
983 vector<string> lineatt;
984 if (!mpiac->GetVar(tokens[1], lineatt)) {
985 cout << "textdrawer/Warning: No variable with name" << tokens[1]
986 << " using default attributes " << endl;
987 for(int kad=0; kad<txtlines.size(); kad++) lineatt.push_back("");
988 }
989 if ( (txtlines.size() != lineatt.size()) ) {
990 cout << "textdrawer/Error: Variables " << tokens[0] << "," << tokens[1]
991 << " have different sizes" << endl;
992 return(1);
993 }
994 PITextDrawer* txd = new PITextDrawer;
995 // Synchronisation necessaire a cause de PIGraphicAtt qui peuvent faire appel a des fontes (Pb Serveur X)
996 mImgApp->LockMutex(); // <ZThread> global event loop synchronisation
997 for(int k=0; k<txtlines.size(); k++) {
998 vector<string> sgra;
999 mImgApp->ParseDisplayOption(lineatt[k], sgra);
1000 PIGraphicAtt gra(sgra);
1001 txd->AddLine(txtlines[k], gra);
1002 }
1003 mImgApp->UnlockMutex(true); // <ZThread> global event loop synchronisation
1004 string grname = "TextDrawer";
1005 string gropt = "inset ";
1006 if (tokens.size() > 2) gropt += tokens[2];
1007 mImgApp->DispScDrawer(txd, grname, gropt);
1008 return 0;
1009}
Note: See TracBrowser for help on using the repository browser.