PrincipalAxesDD.h
Go to the documentation of this file.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 <display/Display/DisplayCoordinateSystem.h>
00036
00037
00038 #include <display/DisplayDatas/DisplayData.h>
00039 #include <display/Utilities/StatusSink.h>
00040
00041 namespace casa {
00042
00043
00044 class WorldCanvas;
00045 class WorldCanvasHolder;
00046 template <class T> class Vector;
00047 class String;
00048 class AttributeBuffer;
00049 class WCPositionEvent;
00050 class WCMotionEvent;
00051 class WCRefreshEvent;
00052 class DisplayCoordinateSystem;
00053 class WCCSNLAxisLabeller;
00054 class PrincipalAxesDM;
00055
00056 class ImageAnalysis;
00057 template <class T> class ImageInterface;
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 class PrincipalAxesDD : public DisplayData {
00070
00071 public:
00072
00073
00074 PrincipalAxesDD( uInt xAxis, uInt yAxis, Int mAxis = -1, Bool axisLabels = True, viewer::StatusSink *sink=0 );
00075
00076
00077 virtual ~PrincipalAxesDD();
00078
00079
00080
00081 virtual Bool linToWorld(Vector<Double> &world,
00082 const Vector<Double> &lin);
00083 virtual Bool worldToLin(Vector<Double> &lin,
00084 const Vector<Double> &world);
00085 virtual Bool linToFullWorld(Vector<Double> &fullWorld,
00086 const Vector<Double> &lin);
00087
00088
00089
00090
00091 virtual String showPosition(const Vector<Double> &world,
00092 const Bool &displayAxesOnly = False);
00093
00094
00095
00096
00097 virtual String showPosition(const Vector<Double> &world,
00098 const Bool &showAbs, const Bool &displayAxesOnly);
00099
00100 virtual void setSubstituteTitleText( const String text );
00101
00102
00103 virtual Bool conformsToCS(const WorldCanvas &wc);
00104
00105
00106
00107 virtual Vector<String> worldAxisNames() const;
00108 virtual Vector<String> worldAxisUnits() const;
00109 virtual Vector<Double> worldAxisIncrements();
00110 virtual void worldAxisType(Coordinate::Type &type, Int &coordinate,
00111 Int &axisincoord, const uInt &worldaxisnum);
00112 virtual String worldAxisCode(const uInt &worldaxisnum);
00113
00114
00115
00116
00117
00118 virtual uInt nelements(const WorldCanvasHolder &wcHolder) const;
00119 virtual uInt nelements() const;
00120
00121
00122
00123
00124 virtual void setDataMin(Double datmin);
00125 virtual void setDataMax(Double datmax);
00126 virtual Double getDataMin() const;
00127 virtual Double getDataMax() const;
00128
00129
00130
00131
00132 virtual Bool sizeControl(WorldCanvasHolder& wcHolder,
00133 AttributeBuffer& holderBuf);
00134
00135
00136 virtual void positionEH(const WCPositionEvent& ev);
00137
00138
00139 virtual void motionEH(const WCMotionEvent& ev);
00140
00141
00142
00143 virtual void refreshEH(const WCRefreshEvent& ev);
00144
00145
00146 virtual Bool labelAxes(const WCRefreshEvent &ev);
00147 virtual Bool canLabelAxes() const;
00148
00149
00150 virtual void cleanup();
00151
00152
00153 virtual void setDefaultOptions();
00154
00155
00156
00157 virtual Bool setOptions(Record &rec, Record &recOut);
00158
00159
00160
00161 virtual Record getOptions( bool scrub ) const;
00162
00163
00164 virtual Bool setLabellerOptions(Record &rec, Record &recout);
00165
00166
00167 virtual Record getLabellerOptions( bool scrub=false ) const;
00168
00169
00170
00171
00172 virtual void setAxes(const uInt xAxis, const uInt yAxis, const uInt mAxis,
00173 const IPosition fixedPos, Bool reset=True);
00174
00175
00176 virtual uInt nDim() {
00177 return dataDim();
00178 }
00179
00180
00181 DisplayCoordinateSystem coordinateSystem() const {
00182 return itsCoordSys;
00183 }
00184
00185
00186 DisplayCoordinateSystem originalCoordinateSystem() const {
00187 return itsOrigCoordSys;
00188 }
00189
00190
00191 void setCoordinateSystem(const DisplayCoordinateSystem &coordsys);
00192
00193
00194
00195 void restoreCoordinateSystem();
00196
00197
00198
00199 void installFakeCoordinateSystem();
00200 void removeFakeCoordinateSystem();
00201
00202
00203
00204
00205 virtual String className() {
00206 return String("PrincipalAxesDD");
00207 }
00208
00209
00210 virtual IPosition fixedPosition() const {
00211 return itsFixedPosition;
00212 }
00213
00214
00215 virtual vector<int> displayAxes() const {
00216 return itsDisplayAxes;
00217 }
00218
00219
00220 virtual String pixelTreatment() const {
00221 return itsOptionsPixelTreatment;
00222 }
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240 virtual Bool getFullCoord(Vector<Double> &fullWorld,
00241 Vector<Double> &fullPixel,
00242 const Vector<Double> &world);
00243
00244 virtual void notifyUnregister(WorldCanvasHolder& wcHolder,
00245 Bool ignoreRefresh = False);
00246
00247
00248 Int xlatePixelAxes( Int idx ) const {
00249 return itsTransPixelAxes[idx];
00250 }
00251 Int xlateFixedPixelAxes( Int idx ) const {
00252 return itsFixedPosition[idx];
00253 }
00254 const String &xaxisStr( ) const {
00255 return itsOptionsXAxis;
00256 }
00257 const String &yaxisStr( ) const {
00258 return itsOptionsYAxis;
00259 }
00260 const String &zaxisStr( ) const {
00261 return itsOptionsZAxis;
00262 }
00263 const String &spectStr( ) const;
00264
00265
00266 Vector<String> worldToPixelAxisNames (const DisplayCoordinateSystem& cSys) const;
00267
00268 const String &spectralunitStr( ) const;
00269 const static String HISTOGRAM_RANGE;
00270
00271 bool hasMovieDimension( ) const {
00272 return has_nonsingleton_nondegenerate_nondisplayed_axis( *this );
00273 }
00274
00275 std::string errorMessage( ) const { return error_string; }
00276
00277 protected:
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290 virtual Bool setActiveZIndex_(Int zindex);
00291
00292
00293
00294 virtual void drawBeamEllipse_(WorldCanvas* ) { }
00295
00296
00297
00298 friend class PrincipalAxesDM;
00299
00300 virtual void setNumImages(const uInt nimages) {
00301 itsNumImages = nimages;
00302 }
00303
00304 static bool has_nonsingleton_nondegenerate_nondisplayed_axis( const DisplayData &other );
00305
00306
00307 Bool iAmRubbish;
00308
00309
00310 Double datamin;
00311 Double datamax;
00312
00313
00314
00315 uInt nArrayAxes;
00316 uInt nPixelAxes;
00317 uInt nWorldAxes;
00318
00319
00320 Coordinate::formatType itsNotation;
00321
00322
00323 void setup(IPosition fixedPos);
00324
00325
00326 virtual void setupElements();
00327 virtual void getMinAndMax() = 0;
00328
00329
00330
00331 Bool indexInserted(Int index, Int length, Vector<Int>& testVec);
00332
00333
00334
00335 void normalToTransposed(Vector<Double>& coord, const Vector<Int>& transPos);
00336 void transposedToNormal(Vector<Double>& coord, const Vector<Int>& transPos);
00337
00338
00339
00340 void setVelocityState (DisplayCoordinateSystem& cSys,
00341 const String& velTypeString,
00342 const String& unitString);
00343
00344
00345 void setSpectralFormatting (DisplayCoordinateSystem& cSys,
00346 const String& velTypeString,
00347 const String& unitString,
00348 const String& frequency_system = "");
00349
00350
00351
00352 Bool findActiveImage(WorldCanvasHolder &wcHolder);
00353
00354
00355 PrincipalAxesDD();
00356
00357
00358 PrincipalAxesDD(const PrincipalAxesDD &other);
00359
00360
00361 void operator=(const PrincipalAxesDD &other);
00362
00363
00364
00365
00366
00367 ImageAnalysis *create_image_analysis( SHARED_PTR<ImageInterface<float> > ) const;
00368 ImageAnalysis *create_image_analysis( SHARED_PTR<ImageInterface<Complex> > ) const {
00369 return 0;
00370 }
00371
00372 std::string error_string;
00373
00374 private:
00375
00376
00377
00378 Int itsXAxisNum;
00379 Int itsYAxisNum;
00380 Int itsZAxisNum;
00381
00382
00383 vector<int> itsDisplayAxes;
00384
00385
00386
00387 String itsOptionsXAxis, itsOptionsYAxis, itsOptionsZAxis;
00388 IPosition itsFixedPosition;
00389
00390
00391 String itsOptionsPixelTreatment;
00392
00393
00394 uInt itsNumImages;
00395
00396
00397 DisplayCoordinateSystem itsOrigCoordSys;
00398 DisplayCoordinateSystem itsCoordSysBackup;
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411 DisplayCoordinateSystem itsCoordSys;
00412
00413
00414 PtrBlock<void *> itsAxisLabellers;
00415
00416
00417 String itsOptionsAspect;
00418
00419
00420
00421
00422
00423
00424 DisplayCoordinateSystem itsPosTrackCoordSys;
00425 String itsSpectralUnit;
00426 String itsSpectralQuantity;
00427 Bool itsAbsolute;
00428 Bool itsFractionalPixels;
00429
00430
00431 AttributeBuffer sizeControlBuf;
00432
00433
00434 Vector<Double> itsAddPixPos;
00435
00436
00437 Vector<Int> itsTransPixelAxes;
00438 Vector<Int> itsTransWorldAxes;
00439
00440
00441 Vector<Double> itsWorldMin, itsWorldMax;
00442
00443
00444
00445 Vector<Double> itsWorldInTmp1, itsPixelInTmp1;
00446 Vector<Bool> itsWorldAxesTmp1, itsPixelAxesTmp1;
00447 Vector<Double> itsFullWorldTmp1;
00448
00449 Vector<Double> itsPixelInTmp2;
00450
00451 Vector<Double> itsWorldInTmp3, itsWorldOutTmp3;
00452 Vector<Double> itsPixelInTmp3, itsPixelOutTmp3;
00453 Vector<Bool> itsWorldAxesTmp3, itsPixelAxesTmp3;
00454
00455 Vector<Double> itsFullWorldTmp4, itsFullPixelTmp4;
00456
00457 Bool itsUsesAxisLabels;
00458
00459
00460 Bool canHaveVelocityUnit (const DisplayCoordinateSystem& cSys) const;
00461
00462
00463 void removePixelAxes (DisplayCoordinateSystem& cSys,
00464 uInt startAxis,
00465 const IPosition& fixedPosition);
00466
00467 viewer::StatusSink *ssink;
00468 String titleText;
00469
00470 };
00471
00472
00473 }
00474
00475 #endif