File: INCLUDE\DIFRKMTY\D_EXTERN.H

    1 //##############################################################################
    2 //                                                                            //
    3 // D_EXTERN.H                                                                 //
    4 //                                                                            //
    5 // Subsystem: Diffraktometrie/ Reflektometrie                                 //
    6 //            DIE MDI-Fensterbasisklasse                                      //
    7 // Benutzung durch andere Subsysteme erforderlich: NEIN                       //
    8 //                                                                            //
    9 //##############################################################################
   10 
   11 #ifndef _D_EXTERN_H
   12 #define _D_EXTERN_H
   13 
   14 #include "internls\evrythng.h" // TMDIWindow
   15 
   16 #include "difrkmty\d_intern.h" // TBitmapSource, TCoorSystem
   17 #include "datavisa\datavisa.h" // TCurve, TOutputFormat, TScreen
   18 
   19 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
   20 
   21 const char EOL[]= "\r\n";
   22 const int P_X= 0;
   23 const int P_Y= 1;
   24 const int P_Z= 2;
   25 
   26 const int DATAOFFSET= 1000; // Anzahl von Zeichen vom Dateianfang bis zum [DATA]-Abschnitt; muss konstant und unverändert bleiden, damit der enthaltene [Header]-Abschnitt aktualisiert werden kann = Austausch durch einen neuen Block von <DATAOFFST>-Zeichen
   27 
   28 typedef struct
   29 {
   30         float x, y;
   31         int Ord;
   32 } TKSystem[4];
   33 
   34 enum EFileFormat 
   35 {
   36         ffUnknown= 0, ffStandardFile= 1, ffShiftedStandard, ffTripel, ffTupel, ffBitmap, ffBkFile, ffDtnFile
   37         // 21.04.2004 ffShiftedBitmap, ffTiff8, ffTiff12, ffRAW8, ffRAW12
   38 };
   39 
   40 enum ExScanType
   41 {
   42         stUnknown= 0, stStandardScan= 1, stOmega2ThetaScan, stContinuousScan, stPsdEnergyScan,
   43         stPsdPositionScan, stOmega2ThetaScanList, stScanList
   44 };
   45 
   46 enum EHAlign
   47 {
   48         haLeft, haCenter, haRight
   49 };
   50 
   51 enum EVAlign
   52 {
   53         vaTop, vaCenter, vaBottom
   54 };
   55 
   56 struct TKSProperties
   57 {
   58         BOOL bLogarithmicY;
   59         float fMinX, fMaxX, fMinY, fMaxY;
   60 };
   61 
   62 struct TFloatPoint {
   63         float x, y;
   64 };
   65 
   66 //##############################################################################
   67 // TPlotWindow
   68 //##############################################################################
   69 // stellt die Basisfunktionalität zur Darstellung und Bewertung von Kurven dar
   70 
   71 enum EWindowType {wtUnknown= 0, wtScan= 251, wtAreaScan= 252}; 
   72 
   73 class TPlotWindow : public TFileWindow
   74 {
   75         friend class TCurveShowParamDlg;
   76         friend class TCurveFreeScalDlg;
   77         friend class TBitmapSource;
   78         friend class TCurveFreeScalColor;
   79 
   80 public:
   81         //! Konstruktor
   82         TPlotWindow( HINSTANCE );
   83 
   84         //! Destruktor
   85         virtual  ~TPlotWindow( void );
   86 
   87 // Überschriebenes aus der (Fenster-)Basisklasse; z.T. wieder in TAreaScanWindow und TScanWindow überschrieben
   88 protected:
   89         virtual HICON GetIcon ( void ) const;
   90 
   91         //! welchen Mauscursor in diesem Fenster anzeigen?
   92         virtual HCURSOR GetCursor( void ) const
   93         {
   94                 return LoadCursor(NULL, IDC_CROSS);
   95         };
   96 
   97         virtual BOOL New( void );
   98 
   99         virtual LRESULT OnEvent ( HWND, UINT, WPARAM, LPARAM );
  100         virtual LRESULT OnCommand ( WPARAM, LPARAM );
  101 
  102         // 21.04.2004 virtual void OnSize( WPARAM, LPARAM );
  103 
  104         //! wenn Darstellungstyp ein Bitmap, dann bereite Zwischenablage vor
  105         virtual void OnRenderFormat( WPARAM, LPARAM );
  106         
  107         //! raeumt Zwischenablage auf, wenn Besitzer der Zwischenablage tot
  108         virtual void OnRenderAllFormats( WPARAM, LPARAM );
  109 
  110         //! DoPaint wird von EvPaint aufgerufen und automatisch von Windows angefordert,
  111         //! um den Inhalt des Fensters neu anzuzeigen
  112         virtual void DoPaint( HDC, PAINTSTRUCT * );
  113 
  114         //! Kopieren mit Hilfe der Zwischenablage - Typen: CF_DIB, CF_PALETTE
  115         virtual void DoCopy( void );
  116 
  117 // Mausbedienung
  118         //! behandelt Kommando: linke Maustaste wurde gedrueckt
  119         virtual void OnLButtonDown( WPARAM, LPARAM );
  120 
  121         //! wenn linke Maustaste gedrueckt gehalten und dabei bewegt wird,
  122         //! wird der Abstand zur Pos. des ersten Mausklicks berechnet
  123         virtual void OnMouseMove( WPARAM, LPARAM );
  124 
  125         //! gibt Handle zum zeichnen im Kindfenster zurück + linke Maustaste
  126         //! als nicht gedrueckt kennzeichnen
  127         virtual void OnLButtonUp( WPARAM, LPARAM );
  128 
  129 // wird in TAreaScanWindow und TScanWindow wieder überschrieben
  130 protected:
  131         // rechnet die Bildschirmkoordinaten in entsprechende Winkel/ Kanäle/ Intensitäten um
  132         void Screen2Title(float, float, // Bildschirmkoordinaten (x, y)
  133                           float&, float&, float&, // Zahlenwerte (x, y, z), wobei z die zweizeilige Beschriftung bei DTN-File
  134                                           bool); // Kanalausgabe in 5er Schritten runden
  135 
  136         // gibt die Beschriftung für den jeweiligen Achsenabschnitt der X- und Y-Achse zurück
  137         virtual void GetTitleX(int, int, char *, bool);
  138         virtual void GetTitleY(int, int, char *, bool);
  139 
  140         virtual bool CanSwitchChannelAngle() { // Umschaltung Winkel-/ Kanaldarstellung erlaubt
  141                 if ( VisualDB.bPsd ) return true; // nur wenn PSD angeschlossen
  142                 else return false;
  143         }
  144 
  145         //! im Falle von cm_MoveScanReady
  146         virtual void SetKSProperties( TKSProperties* );
  147 
  148         //! Theta-Offset entfernt
  149         virtual double GetThetaOffset( int )
  150         {
  151                 return 0.0;
  152         };
  153 
  154         virtual BOOL SaveFile(EAskType);
  155 
  156         //! fuelle TKSystem mit Standardwerten
  157         virtual BOOL SetMeasurementArea( TKSystem & );
  158 
  159         //! setze neue Koordinatensystembereiche
  160         virtual void SetRanges( void );
  161 
  162         //! sichert Daten in der SecondCurve
  163         //! im Falle von cm_MoveScanReady
  164         virtual void PickUpData( LPARAM );
  165 
  166 // dismante curve
  167 protected:
  168         //! fixiert die aktuelle Hauptkurve -> setzt Pointer von SecondCurve auf
  169         //! MainCurve
  170         void FreezeCurve( void );
  171 
  172         //! setzt SecondCurve auf Initialwerte zurueck (loeschen aller Meßtripel)
  173         //! zeichnet Scan-Fenster neu
  174         void KillSecondCurve( void );
  175 
  176         //! speichert fixierte Kurve (SecondCurve) unter auszuwaehlendem Dateinamen
  177         //! mit Extension *.bk
  178         void SaveSecondCurve( void );
  179 
  180         //! setzt den Filetyp, nach dem Laden von alten Daten
  181         void SetLoadFormat(EFileFormat);
  182 
  183 // in TAreaScanWindow oder TScanWindow verwendet
  184 protected:
  185         //! Funktion, die die benötigte Nachkommastellengenauigkeit
  186         //! berechnet und die nötigen Nachkommastellen zurückliefert
  187         int GetNachkommaStelle(TCoorSystem* pCoorSys, int x, int y);
  188 
  189 // Zeichnen
  190 private:
  191         // filtert Signal zur besseren Darstellung von Peaks
  192         // Staerke des Filters durch m_FilterStrength aenderbar
  193         void FilterPLine(LPPOINT, int &);
  194 
  195         // füllt die Struktur lpPoints mit den Werten für eine Kurve
  196         // um damit später dann die Kurve darzustellen
  197         void FormatCurveToPLine( TCurve *, LPPOINT, int & );
  198 
  199         // zeichnet eine Reihe von Punkten - im Gegensatz zu Polyline werden die Punkt nicht verbunden
  200         void Dottedline(HDC, const POINT *, int);
  201 
  202         //! setzt Variable bEnablePaint
  203         void EnablePaint( void )
  204         {
  205                 bEnablePaint= TRUE;
  206                 bPaintPoint= FALSE; // ALLES neu zeichnen
  207         };
  208 
  209         //! setzt Variable bEnablePaint
  210         void DisablePaint( void )
  211         {
  212                 bEnablePaint= FALSE;
  213         };
  214 
  215         // wie ::TextOut bzw. ::GetTextExtentPoint, jedoch für mehrzeilige Strings
  216         static BOOL GetTextExtentPointEx(HDC, LPCTSTR, int, LPSIZE);
  217         // die neuen letzten beiden Parameter geben an wie die x- und y-Koordinaten zu betrachten sind (bei center geben sie den Mittelpunkt des auszugebenden Textes an, etc.)
  218         static void TextOutEx(HDC, int, int, LPCTSTR, int, EHAlign= haLeft, EVAlign= vaTop);
  219 
  220         //! zeichnet Koord.System
  221         void DrawCoordinateSystem( HDC );
  222 
  223 // ATTRIBUT(E)
  224 public:
  225         // ehemalig extern-Verweise aus D_INTERN.CPP
  226         float tilesx; //! Standard Anzahl Abzissenbeschriftungen
  227         float tilesy; //! Standard Anzahl Ordinatenbeschriftungen
  228         int scrolldxposmin; //! Minimum Abzissenausdehnung
  229         int scrolldxposmax; //! Maximum Abzissenausdehnung
  230         int scrolldyposmin; //! Minimum Ordinatenausdehnung
  231         int scrolldyposmax; //! Maximum Ordinatenausdehnung
  232         int xBorder; //! der Rand zw. y-Achse und unterem Fensterrand
  233         int yBorder; //! der Rand zw. x-Achse und linkem Fensterrand
  234         WORD RLdx; //! RLdx ist die x-Punkte Ausdehnung
  235         WORD RLdy; //! RLdy ist die y-Punkte Ausdehnung - einstellbar im Visualising Options Menu       
  236         BOOL bIncreasePP; //! bIncreasePP ist die "groessere Punkte" Einstellmoeglichkeit Visualising Options Menu
  237         float MinIntensitaet;
  238         float MaxIntensitaet;   
  239         TFloatPoint mPoint1, mPoint2; //! zum Aufzeichnen der Mausbewegungen beim Ziehen einer Linie mit der Maus
  240         bool DataaquisitionActive;
  241 
  242         //! Abzissen/Scanachsebeschriftung
  243         char abzisse[ _MAXLENUNIT+1 ];
  244 
  245         //! Zeiger auf zugehoeries Bitmap
  246         TBitmapSource *BSource; // im Destruktor freigegeben
  247 
  248         BOOL m_Dotted; // Linien gepunktet zeichnen?
  249         BOOL m_HasFilter; // Low-Pass Filter verwenden?
  250         float m_FilterStrength; // Einfluss in Prozent?
  251 
  252 protected:
  253         TCurve *MainCurve; // hier nicht im Destruktor freigeben: wird nur von TAreaScanWindow und TScanWindow initialisiert; darf bei TAreaScanWindow nicht im Destruktor freigegeben werden (wird von TDataBase verwaltet); bei TScanWindow wird MainCurve im Destruktor freigegeben
  254         TCurve *SecondCurve; // im Destruktor freigegeben
  255 
  256         // zur Umrechnung der Motoreinheiten beim AreaScan
  257         EUnitType m_MotorUnit, m_DetectorUnit;
  258 
  259         EWindowType WindowType;
  260         BOOL bMeasurementActive;
  261 
  262         //! gibt Darstellungstyp an
  263         EOutputType eOutputType;        
  264 
  265         //! FIX Fehler 39
  266         TDisplay VisualDB;
  267 
  268         //! beiinhaltet den geladenen FileTyp
  269         EFileFormat eLoadFormat;
  270         
  271         //! erstes und alternatives Koordinatensystem
  272         TCoorSystem CoorSys, AltCoorSys; // AltCoorSys sollte nicht zusammen mit otCurve verwendet werden, weil nach einmaligem Zeichnen auf CoorSys zurückgeschaltet wird (d.h. ein Fenster-Update zeichnet dann wieder mit CoorSys)
  273 
  274         BOOL bAltCoorSystem; // TRUE==beim nächsten Zeichnen AltCoorSys benutzen; siehe AltCoorSys
  275 
  276         //! MinIntensitaet, MaxIntensitaet
  277         float LowerBound, UpperBound;
  278 
  279         //! XY-Skalierung an/ aus
  280         BOOL bXY_Scaling;
  281 
  282         TScreen Screen;
  283 
  284         // Art der Beschriftung für x-Achse, TRUE==Kanal, sonst Winkel 
  285         BOOL bSecondaryCoor; 
  286 
  287 private:
  288         HFONT hFont;
  289 
  290         //! beinhaltet Handle auf ein DC (WinAPI)
  291         HDC DragDC;
  292 
  293         //! Darstellung zulassen oder nicht
  294         BOOL bEnablePaint;
  295 
  296         //! Mousebutton unten/oben
  297         BOOL bButtonDown;
  298 
  299         //! Koordinaten wohin mit der Maus geklickt wurde
  300         float xo, yo;
  301 };
  302 
  303 #endif // _D_EXTERN_H
  304 
  305 //#############################################################################
  306 // LastLine
  307 //#############################################################################
  308