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