File: INCLUDE\DIFRKMTY\S_EXTERN.H
1 //##############################################################################
2 // //
3 // S_EXTERN.H //
4 // //
5 // Subsystem: Diffraktometrie/ Reflektometrie //
6 // DAS MDI-Fenster für Continious-, Step- und DynamicStepScan //
7 // Benutzung durch andere Subsysteme erforderlich: JA //
8 // //
9 //##############################################################################
10
11 #ifndef _S_EXTERN_H
12 #define _S_EXTERN_H
13
14 #include "difrkmty\d_extern.h" // TPlotWindow, TSaveFormat
15
16 #include "detecuse\detecuse.h" // TDetector
17
18 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
19
20 //! Anzahl der max. unterschiedlichen Schrittweiten (dyn. Schrittweite)
21 const int nMaxScaleIdx= 10;
22
23 //##############################################################################
24 // TScanParameters
25 //##############################################################################
26 //! Datenhaltung für Continious-, Step- und DynamicStepScan
27
28 class TScanParameters
29 {
30 //! einlesen der Ini-Daten zu [Scan] und setzen von Defaultwerten für StepScan
31 public:
32 TScanParameters( void );
33
34 //ATTRIBUT(E)
35 public:
36 //! aktueller Detektor zum Messen
37 TDetector *Detector; // nicht im Destruktor freigeben, wird durch Detektorsubsystem verwaltet
38 //! Detektor fuer Monitor
39 TDetector *Monitor; // nicht im Destruktor freigeben, wird durch Detektorsubsystem verwaltet
40
41 //! beinhaltet Nummer der aktuellen Achse
42 int nMotor;
43
44 //! Speicherformat fuer Kurven
45 EFileFormat eSaveFormat;
46
47 //! Art des aktuellen Scan(StandardScan, Omegea2Theta o. ContinuousScan)
48 ExScanType eScanType;
49
50 //! Speichern nach Beendigung der Messung
51 BOOL bSaveOnReady;
52
53 //! Anzahl der Messpunkte(nur bei Cont.Scan)
54 int nCollectionAmount;
55
56 // Omega
57 //! Startwinkel des Scans
58 double dArgumentMin, dArgumentMax, dArgumentWidth;
59 //! Geschwindigkeit des aktuellen Motors
60 double dSpeed;
61
62 //! gibt 2ThetaStartposition fuer einen zu fahrenden Stepscan an beim O2T-Scan an
63 double d2ThetaStart;
64
65 WORD nNumberCycle; // Anzahl der Mess-Zyklen
66 float fMaxTime; // Maximale Messzeit
67 DWORD dwMaxCounts; // Maximale Anzahl Impulse
68
69 //! Speichern waehrend der Messung
70 BOOL bSaveContinuous;
71
72 //! gibt an ob dynamische Schrittweitensteuerung aktiv
73 BOOL bDynamicStepWidth;
74 //! Anzahl der verschied. Schrittweiten
75 int nStepScaleLevels;
76
77 //! Liste enthaelt in den ersten 10 werten die intensitaeten und in den
78 //! zweiten 10 werten den zughoer. Schrittweitenfaktor
79 TFloatList Scaler;
80 };
81
82 //##############################################################################
83 // TScanWindow
84 //##############################################################################
85 // DAS MDI-Fenster für Continious-, Step- und DynamicStepScan
86
87 class TScanWindow : public TScanParameters, public TPlotWindow
88 {
89 //Kullmann+Reinecker: zahlreiche unnötige friend-Deklarationen entfernt
90 friend class TScanCmd;
91 friend class TSaveDataCmd;
92
93 public:
94 TScanWindow( HINSTANCE );
95 virtual ~TScanWindow();
96
97 // Überschriebenes aus der (Fenster-)Basisklasse
98 private:
99 virtual void OnCreate();
100 virtual LRESULT OnCommand(WPARAM wParam, LPARAM lParam);
101
102 virtual void OnPopupMenuInit ( WPARAM, LPARAM );
103
104 virtual BOOL SetTitle( void );
105
106 virtual BOOL CanNew()
107 { return !bLineScanStarted || bInterrupted; /*Messung beendet*/ }
108 virtual BOOL CanOpenFile()
109 { return !bLineScanStarted || bInterrupted; /*Messung beendet*/ }
110 virtual BOOL CanSave()
111 { return !bLineScanStarted || bInterrupted; /*Messung beendet*/ }
112 virtual BOOL IsScanning(BOOL &PsdContinious)
113 { PsdContinious= FALSE; return bLineScanStarted; }
114
115 virtual BOOL New( void );
116 virtual BOOL LoadOldData();
117 //! speichern einer .crv Datei
118 //! ask== NoAskForSave(0x9900) => speichert unter Namen aus FileName
119 //! ohne Abfrage
120 //! == SaveWithNewName(0x9901) => speichert unter Namen, der in der
121 //! Dialogbox erst noch enzugeben ist
122 //! Rueckkehrcode False wenn Fehler bei anlegen der Datei oder bei
123 //! speichern der Headerinfo. sonst true
124 virtual BOOL SaveFile( EAskType );
125 //! haengt aktuelles tripel der Messkurve an Datei mit FileName an
126 //! aufruf nur bei kontinuierlichem Speichern
127 //! Rueckkehrcode False wenn fehler bei oeffnen der Datei sonst true
128 virtual BOOL UpdateFile();
129
130 //! Ablaufsteuerung
131 virtual void SteeringReady( LPARAM ); // Ende
132 virtual void SteeringReset( LPARAM ); // Abbruch
133 virtual void Interrupt(); //! unterbricht Scanvorgang
134
135 //! erhaelt Messpunkt, stellt ihn dar, speichert ihn ggf.
136 virtual void CounterSetRequest( LPARAM );
137
138 //! passt x+y-Scale des Koord.sys an neue Werte an
139 virtual void SetRanges( void );
140
141 //! liefert Klassennamen
142 virtual LPCSTR ClassName()
143 {
144 return "Scan";
145 };
146
147 //! liefert Charakteristik
148 virtual LPCSTR GetCharacteristic()
149 {
150 return "Curve";
151 };
152
153 // Überschriebenes aus TPlotWindow
154 private:
155 // gibt die Beschriftung der X- und Y-Achse zurück
156 virtual void GetTitleX(int, int, char *, bool);
157 virtual void GetTitleY(int, int, char *, bool);
158
159 //! sichert Koordinatensystem in AltCoorsys
160 //! m_main.cpp im Falle von cm_MoveScanReady
161 virtual void SetKSProperties( TKSProperties* );
162
163 // Laden+Speichern
164 private:
165 //! laden der Messungsdaten aus einer .crv bzw. .bk datei
166 //! wird von TScanWindow::LoadOldData() in m_scan.cpp aufgerufen
167 //! hFile ist Filehandle der Messdatei
168 //! Rueckkehrcode False wenn Datei zu kurz oder [HEADER] nicht vorhanden
169 //! sonst true
170 BOOL LoadMeasurementInfo( TTxtRead& );
171 //BOOL LoadMeasurementInfo( HFILE );
172
173 //! Speichern bzw. Aktualisieren der Headerinformation
174 //! Par.==0 => neu erstellen
175 //! ==1 => aktualisieren
176 //! Rueckkehrcode False wenn Fehler bei speichern sonst true
177 BOOL SaveMeasurementInfo( BOOL );
178
179 // Protokollbuch
180 private:
181 //! klier 01.03.2003 Protokollbuch
182 //! Initialisiert Speicherung im Protokollbuch
183 void InitializeMeasurementProtocol( void );
184
185 //! klier 01.03.2003 Protokollbuch
186 //! Speichert Informationen im Protokollbuch
187 void SetMeasurementProtocolParameter( void );
188
189 // Sonstiges
190 private:
191 // Methoden fuer die Initialisierung verschiedener Scan-Tasks
192 void InitializeStandardScanTask();
193 void InitializeOmega2ThetaScanTask();
194 void InitializeContinuousScanTask();
195
196 // 21.04.2004 BOOL SaveDataBase( void );
197 // 21.04.2004 void StopMeasurement();
198 // 21.04.2004 void ExecuteNextCmd( void );
199
200 //ATTRIBUT(E)
201 private:
202 // wie bMeasurementActive, aber bereits beim Anfahren der Startposition == TRUE
203 BOOL bLineScanStarted;
204
205 //! soll Scanstart vor Aufruf einer Einstellungsbox verhindern
206 //! (Fehler 2)
207 BOOL bScanSetupOk;
208
209 TDetector *oldDetector; // nicht im Destruktor freigegeben, wird durch das Detektorsubsystem verwaltet
210 };
211
212 #endif // _S_EXTERN_H
213
214 //#############################################################################
215 // LastLine
216 //#############################################################################
217