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