File: INCLUDE\DIFRKMTY\D_INTERN.H
1 //##############################################################################
2 // //
3 // D_INTERN.H //
4 // //
5 // Subsystem: Diffraktometrie/ Reflektometrie //
6 // allgemeine, intern genutzte Fenster //
7 // Benutzung durch andere Subsysteme erforderlich: NEIN //
8 // //
9 //##############################################################################
10
11 #ifndef _D_INTERN_H
12 #define _D_INTERN_H
13
14 #include "utils\u_utils.h" // TModalDlg
15 #include "MOTRSTRG\M_MOTCOM.H" // _MAXLENUINT
16
17 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
18
19 const UINT stdx= 500; //! Standardgroesse Koordinatensystemaussschnitt x
20 const UINT stdy= 500; //! Standardgroesse Koordinatensystemaussschnitt y
21
22 //! Bildschirm hat x und y Ausdehnung
23 struct TScreen
24 {
25 int x0, x1, dx,
26 y0, y1, dy;
27 };
28
29 struct TDisplay
30 {
31 double dThetaWindow, dMoveRelation, dOmegaMin, dOmegaMax;
32 double dThetaMinFirst, dThetaMaxFirst, dThetaMinLast, dThetaMaxLast;
33 float fAngleRange, fAngleStep;
34 BOOL bPsd;
35 };
36
37 const UINT _COLORS= 256; //! Anzahl benutzter Farben (256)
38
39 class TColorTable
40 {
41 public:
42 TColorTable() : ColorMap(_COLORS, 255) {
43 place.left= place.top= place.right= place.bottom= 0;
44 zMin= zMax= 0;
45 strcpy(zUnit, "");
46 };
47
48 RECT place;
49 float zMin, zMax;
50 char zUnit[ _MAXLENUNIT+1 ];
51 TFloatList ColorMap;
52 };
53
54 //! Koordinatensystem mit x,y,z
55 //! und jeweils einer Angabe 1 Pixel in x,y,z Richtung
56 //! entspricht *SF Koordinatensystemeinheit
57 //! und eingestellter Ausgabetyp
58 struct TCoorSystem
59 {
60 double xMin, xMax, xSF;
61 double yMin, yMax, ySF;
62 double zMin, zMax, zSF;
63 EScale xScal, yScal, zScal;
64 };
65
66 //! Aufzaezhlung Ausgabetypen/Darstellungsformen
67 enum EOutputType
68 {
69 otReciprokeLatticeBitmap= 1, otMatrixBitmap= 2, otCurve= 3 // die zugeordneten nummerischen Werte müssen so belassen werden, weil sie zum Zugriff auf die Elemente in einer ComboBox benutzt werden
70 }; //! weil sowieso nicht implementiert, Number, BarGraph, Histogram
71
72 //! Umrechnung Alt-/Neugrad...
73 #define DegToRad(val) ((val) * 0.01745329251994)
74 #define RadToDeg(val) ((val) / 0.01745329251994)
75
76 //! Umrechnung in Reziproke Einheiten
77 #define ArToRLx(_ome, _the) ((cos((_the)-(_ome))- cos(_ome)))
78 #define ArToRLy(_ome, _the) ((sin((_the)-(_ome))+ sin(_ome)))
79 /*
80 17.07.2003 geändert, weil Umrechnung so korrekt und Darstellung nicht gespiegelt...
81 #define ArToRLx(_ome, _the) ((cos(_ome) - cos((_the) - (_ome))))
82 #define ArToRLy(_ome, _the) ((sin(_ome) + sin((_the) - (_ome))))
83 */
84
85 class TPlotWindow; // forward
86
87 //##############################################################################
88 // TCurveFreeScalDlg
89 //##############################################################################
90 //! neuer Dialog für freie Intensitaetskalierung
91
92 class TCurveFreeScalDlg : public TModalDlg
93 {
94 friend class TCurveFreeScalColorWindow;
95 public:
96 TCurveFreeScalDlg( TPlotWindow* );
97
98 // Überschriebenes aus der (Fenster-)Basisklasse
99 private:
100 virtual BOOL Dlg_OnInit( HWND, HWND, LPARAM );
101 virtual void Dlg_OnCommand( HWND, int, HWND, UINT );
102 virtual BOOL CanClose( void );
103 virtual void LeaveDialog( void );
104
105 // Verwaltung der Steuerelemente in den 8 Bereichen
106 private:
107 int GetFarbeId(UINT);
108 int GetBereichId(UINT);
109
110 // ATTRIBUT(E)
111 private:
112 //! Plotdaten werden gebraucht
113 TPlotWindow *PlotWindow; // nicht im Destruktor freigeben, wird im Konstruktor übergeben und muss vom Aufrufer verwaltet werden
114 };
115
116 //##############################################################################
117 // TCurveShowParamDlg
118 //##############################################################################
119 //! Dialog zum Einstellen der PlotFenster-Parameter
120
121 class TCurveShowParamDlg : public TModalDlg
122 {
123 public:
124 TCurveShowParamDlg( TPlotWindow* );
125
126 // Überschriebenes aus der (Fenster-)Basisklasse
127 private:
128 virtual BOOL Dlg_OnInit( HWND, HWND, LPARAM );
129 virtual void Dlg_OnCommand( HWND, int, HWND, UINT );
130 virtual void Dlg_OnHScrollBar(HWND , HWND , UINT , int );
131 virtual BOOL CanClose( void );
132 virtual void LeaveDialog( void );
133
134 // ATTRIBUT(E)
135 private:
136 //! fast alle Plotdaten werden gebraucht
137 TPlotWindow *PlotWindow; // nicht im Destruktor freigeben, wird im Konstruktor übergeben und muss vom Aufrufer verwaltet werden
138
139 //! Groesse der x und y-Achse ueber Scrollbalken beeinflussbar
140 int scrolldxpos, scrolldypos;
141
142 //! nicht mehr benoetigt
143 // TOutputType bOutputToShow;
144
145 //! einige Handles behalten...
146 HWND hWndOutputT, hWndScaleT, hWndScrolldx, hWndScrolldy;
147
148 // Kanal- oder Winkeldarstellung (zum Wiederherstellen der letzten Einstellung, wenn RL-Bitmap aktiv)
149 BOOL bSavedSecondaryCoor;
150 };
151
152 //##############################################################################
153 // TBitmapSource
154 //##############################################################################
155 //! Klasse um Bitmaps aus Kurvendaten zu errechnen und darzustellen
156
157 class TBMContens
158 {
159 public:
160 TBMContens() { omega= theta= intens= 0; };
161
162 float omega, theta, intens;
163 };
164
165 const RLAreaPkts= 41;
166
167 class TBitmapSource
168 {
169 friend class TPlotWindow;
170 friend class TCurveShowParamDlg;
171 friend class TCurveFreeScalDlg;
172 friend class TCurveFreeScalColorWindow;
173
174 public:
175 //! Konstruktor
176 TBitmapSource( TPlotWindow* );
177
178 //! Destruktor
179 virtual ~TBitmapSource();
180
181 public:
182 //! wird aufgerufen, wenn ein Bitmap nachgeladen werden soll (m_arscan.cpp)
183 // derzeit nicht verwendet 17.05.2004 BOOL ProcessBitmapFile( HFILE );
184
185 //! generiert den Header fuer ein Bitmap, setzt Koordinatensystem und Screen
186 void FormatDBaseToBitmapSource( void );
187
188 //! ermöglicht ein Update, derzeit leer implementiert
189 void UpdateBitmapSource( void ) {};
190
191 // Zugriff auf m_Daten
192 public:
193 bool IsDatenInited() { return m_DatenInited; };
194
195 //*** zudem wird in der DEBUG-Version eine TraceErr-Fehlermeldung ausgegeben
196 // bei zu großen/ kleinen Zeilen/ Spalten wird der Wert aus der letzten Zeile/ Spalte zurückgegeben***
197 float GetOmega(UINT aRow, UINT aCol);
198 float GetTheta(UINT aRow, UINT aCol);
199 float GetIntens(UINT aRow, UINT aCol);
200
201 // bei zu großen/ kleinen Zeilen/ Spalten wird nichts gesetzt und false zurückgegeben***
202 bool SetOmega(UINT aRow, UINT aCol, float aValue);
203 bool SetTheta(UINT aRow, UINT aCol, float aValue);
204 bool SetIntens(UINT aRow, UINT aCol, float aValue);
205
206 private:
207 void CreateDaten(UINT aRows, UINT aCols);
208 bool CheckKoord(UINT &aRow, UINT &aCol); // korrigiert aRow und aCol bei Überschreitung und gibt false zurück; ***
209 void FreeDaten();
210
211 void New( void );
212
213 //! laedt Bitmap Ressource - benoetigt?
214 void LoadBitmap( HDC );
215
216 //! berechnet Bytes pro Zeile*Hoehe des Bitmaps - Gesamtgroesse im Speicher
217 DWORD GetImageSize( void );
218
219 //! ruft bei RL_Bitmap DrawMeasurementArea()
220 //! berechnet Position der Anordnung der Farblegende
221 //! setzt Min,MaxIntensitaeten
222 //! ruft DrawColorTable()
223 void DrawBitmapFrame( HDC, TScreen& );
224
225 //! setzt Screen-Variablen, entsprechend der Bildschirmgroesse
226 //! setzt Units, Orientation, Scaling
227 void SetScreen( HDC, TScreen& );
228
229 //! berechnet zu den Intensitäten entsprechende Farbwerte und zeichnet die Farb-Legende
230 void DrawColorTable( HDC, TColorTable& );
231
232 //! falls RL-Bitmapdarstellung, berechnet und zeichnet
233 //! das untersuchte Messgebiet im den reziproken Raum
234 void DrawMeasurementArea( HDC );
235
236 //! fuellt den Header eines Bitmaps mit Farbwerten der Palette
237 void FillBMInfoFromPalette( LOGPALETTE* );
238
239 //! Bitblock-Transfer von hMemDC (dem gegebenen Quell-DC)
240 //! zu diesem HDC (dem Ziel-DC) - entspricht der Darstellung eines Bitmaps
241 void DrawBitmap( HDC, int, int, TScreen& );
242
243 //! function creates a device-dependent bitmap (DDB) from a device-independent
244 //! bitmap (DIB) and, optionally, sets the bitmap bits
245 HBITMAP CreateGDIObject( HDC );
246
247 //! Zwischenablageoperation, wenn Typ CF_DIB
248 HGLOBAL RenderDIB( void );
249
250 //! ruft CreatePaletteFromDIB(), ansonsten CreateDefaultPalette()
251 LOGPALETTE *GetPalette( void );
252
253 //! generiert Palette von DIB (Device independend Bitmap)
254 LOGPALETTE *CreatePaletteFromDIB( void );
255
256 //! generiert neue Palette (Graustufen oder Bunt)
257 LOGPALETTE *CreateDefaultPalette( void );
258
259 //! gibt Darstellungtyp zurueck
260 //! wird nicht benutzt
261 // TOutputType GetType( void );
262
263 //! um Intensitaetsabstufungen im User Falle zu generieren
264 //! ansonsten werden Defaultwerte gesetzt
265 //! fuellt ColorTable.ColorMap[cnt] mit Werten
266 void ColorDef(void);
267
268 //! setzt Variablenfelder farbe[] und ber[]
269 //! so dass ein linearer Verlauf abhaengig von Min-,MaxIntensitaet
270 void BereichDef(void);
271
272 //! gibt zu uebergebener Intensitaet entsprechende Intensitaetsfarbe zurueck
273 int GetColor( float );
274
275 //! generiere MatrixBitmap
276 void GenerateAngleSpaceBitmap(void);
277
278 //! genriere RL-Bitmap
279 void GenerateRLBitmap( void );
280
281 // ATTRIBUT(E)
282 private:
283 // ehemalig global definiert
284 double clogval;
285 double clinval;
286 HBITMAP hBitmap;
287 POINT RLArea[RLAreaPkts];
288
289 private:
290 //! Zeiger auf zugehoeriges TPlotWindow-Objekt
291 TPlotWindow *PlotWindow; // nicht im Destruktor freigeben, wird im Konstruktor übergeben und muss vom Aufrufer verwaltet werden
292
293 //! eigenes Koordinatensystem fuer Bitmapberechnung
294 TCoorSystem *BMCoorSys; // nicht im Destruktor freigeben, wird von DataWnd übernommen
295
296 //! Zeiger auf zugehoerigen TCurveFreeScalColorWindow-Dialog
297 TCurveFreeScalColorWindow *UserFarb; // wird im Destruktor freigegeben
298
299
300 //! Zeiger auf "Daten"feld
301 //! hier wird zu jeder [x,y]-Pixelkoordinate der zugehoerigen
302 //! Theta-/OmegaWert gespeichert (nur RL-Bitmap)
303 TBMContens **m_Daten; // wird im Destruktor freigegeben
304
305 // Dimensionen des <m_Daten>-Feldes
306 UINT m_DatenRows, m_DatenCols;
307
308 //! (bei RL-Bitmap wird zu jedem Bildpunkt Theta/Omega gespeichert)
309 // gibt an, ob <m_Daten> schon initialisiert wurde
310 bool m_DatenInited;
311
312
313 //! False - keine Graustufendarstellung, True - Graustufendarstellung in Bitmaps
314 //! wird im ini-File mit "swPalette" gesetzt
315 BOOL bGrayScalePalette;
316
317 //! Zeiger auf ColorTable-Objekt
318 TColorTable ColorTable;
319
320 //! wichtig fuer Bitmap-Generierung
321 HGLOBAL hDIBInfo;
322
323 HGLOBAL hDIBData;
324
325 HGLOBAL hMemPal;
326
327 HPALETTE hPalette, hOldPalette;
328
329 //! nicht mehr benoetigt, da GenerateAngleSpaceBitmap() geaendert
330 //! int nEnlargedLines;
331
332 //! int nAddedPoints;
333
334 //! Feld mit Intensitaetsabstufungen im Falle von "User Skalierung"
335 TFloatList ber;
336
337 //! Feld mit Farbabstufungen im Falle von "User Skalierung"
338 TIntList farbe;
339
340 //! Speicherung des alten Filenamens
341 //! zwecks Vergleich, wenn neues "Daten"feld angelegt werden muss
342 char Fileold[MaxString];
343 };
344
345 //##############################################################################
346 // TCurveFreeScalColorWindow
347 //##############################################################################
348
349 class TCurveFreeScalColorWindow : public TMDIWindow
350 {
351 public:
352 //! Konstruktor
353 TCurveFreeScalColorWindow(HINSTANCE, TPlotWindow*);
354
355 //! Destruktor
356 virtual ~TCurveFreeScalColorWindow(void);
357
358 // Überschriebenes aus der (Fenster-)Basisklasse
359 private:
360 virtual void OnCreate();
361 virtual BOOL SetTitle();
362 virtual void DoPaint(HDC, PAINTSTRUCT*);
363
364 // Sonstiges
365 private:
366 //! zeichne Farblegende
367 void DrawColorTable(HDC);
368
369 // ATTRIBUT(E)
370 protected:
371 //! Zeiger auf TPlotWindow-Objekt
372 TPlotWindow *PlotWindow; // nicht im Destruktor freigeben, wird im Konstruktor übergeben und muss vom Aufrufer verwaltet werden
373 };
374
375 #endif // _D_INTERN_H
376
377 //#############################################################################
378 // LastLine
379 //#############################################################################
380