00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef TRIALDISPLAY_PRINCIPALAXESDD_H
00029 #define TRIALDISPLAY_PRINCIPALAXESDD_H
00030
00031
00032 #include <casa/aips.h>
00033
00034
00035 #include <coordinates/Coordinates/CoordinateSystem.h>
00036
00037
00038 #include <display/DisplayDatas/DisplayData.h>
00039
00040 namespace casa {
00041
00042
00043 class WorldCanvas;
00044 class WorldCanvasHolder;
00045 template <class T> class Vector;
00046 class String;
00047 class AttributeBuffer;
00048 class WCPositionEvent;
00049 class WCMotionEvent;
00050 class WCRefreshEvent;
00051 class CoordinateSystem;
00052 class WCCSNLAxisLabeller;
00053 class PrincipalAxesDM;
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 class PrincipalAxesDD : public DisplayData {
00066
00067 public:
00068
00069
00070 PrincipalAxesDD(uInt xAxis, uInt yAxis, Int mAxis = -1,
00071 Bool axisLabels = True);
00072
00073
00074 virtual ~PrincipalAxesDD();
00075
00076
00077
00078 virtual Bool linToWorld(Vector<Double> &world,
00079 const Vector<Double> &lin);
00080 virtual Bool worldToLin(Vector<Double> &lin,
00081 const Vector<Double> &world);
00082 virtual Bool linToFullWorld(Vector<Double> &fullWorld,
00083 const Vector<Double> &lin);
00084
00085
00086
00087
00088 virtual String showPosition(const Vector<Double> &world,
00089 const Bool &displayAxesOnly = False);
00090
00091
00092
00093
00094 virtual String showPosition(const Vector<Double> &world,
00095 const Bool &showAbs, const Bool &displayAxesOnly);
00096
00097
00098
00099
00100 virtual Bool conformsToCS(const WorldCanvasHolder& wch);
00101
00102
00103
00104 virtual Vector<String> worldAxisNames();
00105 virtual Vector<String> worldAxisUnits();
00106 virtual Vector<Double> worldAxisIncrements();
00107 virtual void worldAxisType(Coordinate::Type &type, Int &coordinate,
00108 Int &axisincoord, const uInt &worldaxisnum);
00109 virtual String worldAxisCode(const uInt &worldaxisnum);
00110
00111
00112
00113
00114
00115 virtual const uInt nelements(const WorldCanvasHolder &wcHolder) const;
00116 virtual const uInt nelements() const;
00117
00118
00119
00120
00121 virtual void setDataMin(Double datmin);
00122 virtual void setDataMax(Double datmax);
00123 virtual Double getDataMin();
00124 virtual Double getDataMax();
00125
00126
00127
00128
00129 virtual Bool sizeControl(WorldCanvasHolder& wcHolder,
00130 AttributeBuffer& holderBuf);
00131
00132
00133 virtual void positionEH(const WCPositionEvent& ev);
00134
00135
00136 virtual void motionEH(const WCMotionEvent& ev);
00137
00138
00139
00140 virtual void refreshEH(const WCRefreshEvent& ev);
00141
00142
00143 virtual Bool labelAxes(const WCRefreshEvent &ev);
00144
00145
00146 virtual void cleanup();
00147
00148
00149 virtual void setDefaultOptions();
00150
00151
00152
00153 virtual Bool setOptions(Record &rec, Record &recOut);
00154
00155
00156 virtual Record getOptions();
00157
00158
00159 virtual Bool setLabellerOptions(Record &rec, Record &recout);
00160
00161
00162 virtual Record getLabellerOptions();
00163
00164
00165
00166
00167 virtual void setAxes(const uInt xAxis, const uInt yAxis, const uInt mAxis,
00168 const IPosition fixedPos, Bool reset=True);
00169
00170
00171 virtual uInt nDim()
00172 { return dataDim(); }
00173
00174
00175 CoordinateSystem coordinateSystem() const
00176 { return itsCoordSys; }
00177
00178
00179 CoordinateSystem originalCoordinateSystem() const
00180 { return itsOrigCoordSys; }
00181
00182
00183 void setCoordinateSystem(const CoordinateSystem &coordsys);
00184
00185
00186
00187 void restoreCoordinateSystem();
00188
00189
00190
00191 void installFakeCoordinateSystem();
00192 void removeFakeCoordinateSystem();
00193
00194
00195
00196
00197 virtual String className() { return String("PrincipalAxesDD"); }
00198
00199
00200 virtual IPosition fixedPosition() const
00201 { return itsFixedPosition; }
00202
00203
00204 virtual Vector<Int> displayAxes() const
00205 { return itsDisplayAxes; }
00206
00207
00208 virtual String pixelTreatment() const
00209 { return itsOptionsPixelTreatment; }
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227 virtual Bool getFullCoord(Vector<Double> &fullWorld,
00228 Vector<Double> &fullPixel,
00229 const Vector<Double> &world);
00230
00231 virtual void notifyUnregister(WorldCanvasHolder& wcHolder,
00232 Bool ignoreRefresh = False);
00233
00234 protected:
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 virtual Bool setActiveZIndex_(Int zindex);
00248
00249
00250
00251 virtual void drawBeamEllipse_(WorldCanvas* wc) { }
00252
00253
00254
00255 friend class PrincipalAxesDM;
00256
00257 virtual void setNumImages(const uInt nimages)
00258 { itsNumImages = nimages; }
00259
00260
00261 Bool iAmRubbish;
00262
00263
00264 Double datamin;
00265 Double datamax;
00266
00267
00268
00269 uInt nArrayAxes;
00270 uInt nPixelAxes;
00271 uInt nWorldAxes;
00272
00273
00274 Coordinate::formatType itsNotation;
00275
00276
00277 void setup(IPosition fixedPos);
00278
00279
00280 virtual const IPosition dataShape() = 0;
00281 virtual const uInt dataDim() = 0;
00282 virtual const Unit dataUnit() = 0;
00283 virtual void setupElements();
00284 virtual void getMinAndMax() = 0;
00285
00286
00287
00288 Bool indexInserted(Int index, Int length, Vector<Int>& testVec);
00289
00290
00291
00292 void normalToTransposed(Vector<Double>& coord, const Vector<Int>& transPos);
00293 void transposedToNormal(Vector<Double>& coord, const Vector<Int>& transPos);
00294
00295
00296
00297 void setVelocityState (CoordinateSystem& cSys,
00298 const String& velTypeString,
00299 const String& unitString);
00300
00301
00302 void setSpectralFormatting (CoordinateSystem& cSys,
00303 const String& velTypeString,
00304 const String& unitString);
00305
00306
00307
00308 Bool findActiveImage(WorldCanvasHolder &wcHolder);
00309
00310
00311 PrincipalAxesDD();
00312
00313
00314 PrincipalAxesDD(const PrincipalAxesDD &other);
00315
00316
00317 void operator=(const PrincipalAxesDD &other);
00318
00319 private:
00320
00321
00322
00323 Int itsXAxisNum;
00324 Int itsYAxisNum;
00325 Int itsZAxisNum;
00326
00327
00328 Vector<Int> itsDisplayAxes;
00329
00330
00331
00332 String itsOptionsXAxis, itsOptionsYAxis, itsOptionsZAxis;
00333 IPosition itsFixedPosition;
00334
00335
00336 String itsOptionsPixelTreatment;
00337
00338
00339 uInt itsNumImages;
00340
00341
00342 CoordinateSystem itsOrigCoordSys;
00343 CoordinateSystem itsCoordSysBackup;
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356 CoordinateSystem itsCoordSys;
00357
00358
00359 PtrBlock<void *> itsAxisLabellers;
00360
00361
00362 String itsOptionsAspect;
00363
00364
00365
00366
00367
00368
00369 CoordinateSystem itsPosTrackCoordSys;
00370 String itsSpectralUnit;
00371 String itsDoppler;
00372 Bool itsAbsolute;
00373 Bool itsFractionalPixels;
00374
00375
00376 AttributeBuffer sizeControlBuf;
00377
00378
00379 Vector<Double> itsAddPixPos;
00380
00381
00382 Vector<Int> itsTransPixelAxes;
00383 Vector<Int> itsTransWorldAxes;
00384
00385
00386 Vector<Double> itsWorldMin, itsWorldMax;
00387
00388
00389
00390 Vector<Double> itsWorldInTmp1, itsPixelInTmp1;
00391 Vector<Bool> itsWorldAxesTmp1, itsPixelAxesTmp1;
00392 Vector<Double> itsFullWorldTmp1;
00393
00394 Vector<Double> itsPixelInTmp2;
00395
00396 Vector<Double> itsWorldInTmp3, itsWorldOutTmp3;
00397 Vector<Double> itsPixelInTmp3, itsPixelOutTmp3;
00398 Vector<Bool> itsWorldAxesTmp3, itsPixelAxesTmp3;
00399
00400 Vector<Double> itsFullWorldTmp4, itsFullPixelTmp4;
00401
00402 Bool itsUsesAxisLabels;
00403
00404
00405 Bool canHaveVelocityUnit (const CoordinateSystem& cSys) const;
00406
00407
00408 void removePixelAxes (CoordinateSystem& cSys,
00409 uInt startAxis,
00410 const IPosition& fixedPosition);
00411
00412
00413 Vector<String> worldToPixelAxisNames (const CoordinateSystem& cSys) const;
00414
00415 };
00416
00417
00418 }
00419
00420 #endif