File: TOPOGRFY\M_TOPO.CPP

    1 //## Kommentare dieser Form (mit zwei Doppelkreuzen) sind von Marlies Gollnick ~:)
    2 #include "utils\u_utils.h"
    3 #include "winresrc\rc_def.h" // Ressourcen-IDs
    4 #pragma hdrstop
    5 
    6 // m_topo.cpp
    7 // (C) 1993,1994 by Heiko Damerow MPG AG "Röntgenbeugung"
    8 // Modul Topographie
    9 
   10 #include "swintrac\m_dlg.h" // für TCounterWindow
   11 //#include "datavisa\datavisa.h"
   12 #include "detecuse\detecuse.h"
   13 #include "workflow\workflow.h"
   14 #include "motrstrg\motrstrg.h"
   15 
   16 #include "topogrfy\topogrfy.h"
   17 
   18 //! neu: klier Allgemeine Einstellungen
   19 #include "mespara\mespara.h"
   20 
   21 //! neu: klier Protokollbuch
   22 #include "protocol\protocol.h"
   23 
   24 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
   25 
   26 //## Formatierte Zeitausgabe
   27 #define M_TimeString(buffer,TTicks)  \
   28   (sprintf( (LPSTR)buffer,"%02d:%02d:%02d", \
   29   (int)(TTicks/3600000l),           \
   30   (int)(TTicks/60000l) % 60,        \
   31   (int)(TTicks/1000l) % 60));
   32 
   33 
   34 /*
   35 * Container-Klasse TTopographyOld für Topographie-Parameter
   36 * Dialog zum Ausführen der Topographie: TTopographyExecuteDlg
   37 * Dialog zum Setzen der Parameter: TTopographySetParamDlg
   38 */
   39 
   40 extern TSteering Steering;
   41 
   42 TTopographyOld TopographyOld;
   43 TMacroTag* MWorkPoint;
   44 
   45 //***** Parameter-Repräsentation für die Topographie ***************************
   46 
   47 //##Belegung einiger Variablen von TTopographie mit Initialwerten
   48 TTopographyOld::TTopographyOld(void)
   49 {
   50         fMoveStep= 0.3f;
   51         fMaxAngleEscape= 50;     // arcsec
   52         lMeasurementTime= 600;     // Sekunden
   53         nNumberCycle= 1;    //##Anzahl der Mehrfachbelichtungen muss != 0
   54         //##sein, da sonst Topographie Einstellungsfenster
   55         //##nicht mit OK zu schliessen ist
   56         bMultibleShot= FALSE;  //##Mehrfachbelichtung
   57         dStartAngle= -20.0;  // arcsec
   58         fAngleBetweenShots= 3.0;
   59         fFailure= 0.02f;  //##Messfehler des Counters wird nicht mehr
   60         //##geaendert
   61         bMonitorUsed= FALSE;
   62         Sensor= NULL;
   63         Monitor= NULL;
   64         nMotor= -1;
   65 };
   66 
   67 //##Einlesen einiger Werte aus dem Ini-File
   68 void TTopographyOld::Initialize(void)
   69 {
   70         char Ident[]= "Topography";
   71         char buf[MaxString];
   72 
   73         GetPrivateProfileString(Ident, "WorkPoint", "-60.0", buf, MaxString, GetCFile());
   74         fWorkPoint= fabs(atof(buf) / 100.0);
   75         bSmallAngleSide= (atof(buf) < 0);
   76         GetPrivateProfileString(Ident, "ControlRange", "3.0", buf, MaxString, GetCFile());
   77         fControlRange= atof(buf) / 100.0;
   78         GetPrivateProfileString(Ident, "ControlStep", "0.2", buf, MaxString, GetCFile());
   79         fControlStep= atof(buf);
   80         GetPrivateProfileString(Ident, "ExposureTime", "10.0", buf, MaxString, GetCFile());
   81         fMaxTime= atof(buf);     //##Detektormesszeit
   82         GetPrivateProfileString(Ident, "ExposureCounts", "10000", buf, MaxString, GetCFile());
   83         dwMaxCounts= atol(buf);
   84 };
   85 
   86 //*** Benutzer-Schnittstelle für die Topographie *******************************
   87 //******************************************************************************
   88 
   89 //##Konstruktor des Topographie Ausfuehrungs Fensters
   90 //##Belegung einiger Initialwerte (Zustandsvariablen, sowie Counter und
   91 //##Motor, falls dies noch nicht geschehen ist)
   92 TTopographyExecuteDlg::TTopographyExecuteDlg(void): TModalDlg("TopographyExecute", GetMainInstance())
   93 {
   94         //##Belegung einiger Zustandvariablen
   95         bStarted= FALSE;
   96         bSetupOk= TRUE;   //##Motor und Counter sind durch Nutzer gesetzt
   97         bControlActive= FALSE;
   98         bTimeRunning= FALSE;
   99         bExeptionOccured= FALSE;
  100         bAdditionalTime= FALSE;
  101         //## wird TTopographyExecuteDlg ohne vorherige Ausfuehrung von
  102         //## TTopographySetParamDlg zum ersten mal aufgerufen, so werden
  103         //## der Sensor auf den aktuellen Zaehler gesetzt und
  104         //## nMotor auf Omega
  105         if (TopographyOld.Sensor == NULL)
  106         {
  107                 TopographyOld.Sensor= TDetectorManager::DetectorManager().GetDetector();
  108                 TopographyOld.Monitor= Detector;
  109                 TopographyOld.bMonitorUsed= FALSE;
  110                 bSetupOk= FALSE;
  111         }
  112         if (TopographyOld.nMotor == -1)
  113         {
  114                 //## als Motorenachse Omega setzen
  115                 TopographyOld.nMotor= mlGetIdByName(Omega);
  116                 bSetupOk= FALSE;
  117         }
  118 };
  119 
  120 
  121 //##diese Funktion wird nach Empfang der Message WM_INITDIALOG aufgerufen
  122 //##siehe DialogProc in dlg_tpl.cpp
  123 //##weitere Initialisierung vor Darstellung des Topographie Ausfuehren Fensters
  124 //##(Counter, Motor)
  125 BOOL TTopographyExecuteDlg::Dlg_OnInit(HWND hwnd, HWND hwndCtl, LPARAM lParam)
  126 {
  127         char buf[MaxString];
  128         // Detektor initialisieren
  129         Detector= TopographyOld.Sensor;
  130         nMotor= TopographyOld.nMotor;
  131         //##falls zum Zaehler kein Fenster angezeigt wird, neues Zaehlerfenster
  132         //##oeffnen
  133         if ( Detector->GetCounterWnd()==0 )
  134                 (new TCounterWindow(GetMainInstance(), Detector))->Show(); 
  135         // initialize motor
  136         //##setzt den aktiven Motor auf nMotor
  137         mlSetAxis(nMotor);
  138         //##weisst nMotor den aktiven Motor zu, nachdem zuvor der aktive Motor
  139         //##auf den Wert von nMotor gesetzt wurde -> eigentlich sinnlos
  140         nMotor= mlGetAxis();
  141         //## Werte des aktuellen Motors in allgemeinere Settings Struktur (m_motcom.h
  142         //## TMSettingS) eintragen
  143         mPushSettings();
  144 
  145         CurrentTime= StartTime= 0;
  146 
  147         //##Festlegung von Beschriftung und darzustellenden Werten fuer das
  148         //##Fenster
  149         M_TimeString (buf, CurrentTime);
  150         SetDlgItemText(GetHandle(), id_MeasurementTime, (LPSTR)buf);
  151         sprintf(buf, "%.2f", 0.0);
  152         SetDlgItemText(GetHandle(), id_Angle, (LPSTR)buf);
  153         sprintf(buf, "%d", TopographyOld.nNumberCycle);
  154         SetDlgItemText(GetHandle(), id_RemainderCyclus, (LPSTR)buf);
  155         RestShots= TopographyOld.nNumberCycle;
  156         if (TopographyOld.bMultibleShot)
  157                 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Topographie starten");
  158         else
  159                 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Regeln starten");
  160         // Ablaufsteuerung initialisieren
  161         //## Reportausgabe fuer Steering wird auf true gesetzt
  162         Steering.Visualising( TRUE, FALSE );
  163         //## Makro zur Arbeitspunkteinstellung holen und anpassen
  164         MWorkPoint= Steering.GetMacroByName("SetupTopography");
  165         if (TopographyOld.bSmallAngleSide)
  166                 MWorkPoint->CmdList[1].P1= SmallSide;
  167         else
  168                 MWorkPoint->CmdList[1].P1= LargeSide;
  169         sprintf(MWorkPoint->CmdList[1].P3, mGetDF(), fabs(TopographyOld.fWorkPoint));
  170         //##cm_Initialize und cm_ParamSet Message senden, und deren Abarbeitung
  171         //##abwarten
  172         SendMessage(GetHandle(), WM_COMMAND, cm_Initialize, 0);
  173         SendMessage(GetHandle(), WM_COMMAND, cm_ParamSet, 0);
  174         //##Zustandsvariablen setzen
  175         bStartPointOk= FALSE;
  176         bStarted= TRUE;
  177         return TRUE;
  178 };
  179 
  180 //##Zeitueberpruefung fuer die Mehrfachbelichtung und
  181 //##nach Messzeitende Ausgabe Beepton
  182 void TTopographyExecuteDlg::Dlg_OnTimer(HWND hwnd, UINT id)
  183 {
  184         char buf[MaxString];
  185 
  186         switch (id)
  187         {
  188                 //## Gesamtmesszeit war abgelaufen; Ausgabe eines regelmaessigen Beeptons
  189                 case 99:
  190                         MessageBeep(0);
  191                         DelayTime(100);
  192                         MessageBeep(0);
  193                         return;
  194 
  195                 //##Zeitueberpruefung waehrend der Mehrfachbelichtung
  196                 case 88:    // Timer für Mehrfach-Belichtung
  197                         FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
  198                         //## Test ob noch innerhalb der Messzeit
  199                         if ((CurrentTime / 1000) < (DWORD) TopographyOld.lMeasurementTime)
  200                                 return;
  201                         KillTimer(GetHandle(), 88);
  202                         RestShots--;
  203                         //## weitere Messzyklen
  204                         if (RestShots)
  205                         {
  206                                 sprintf(buf, "%d", RestShots);
  207                                 SetDlgItemText(GetHandle(), id_RemainderCyclus, (LPSTR)buf);
  208                                 sprintf(buf, mGetDF(), TopographyOld.fAngleBetweenShots);
  209                                 //##Weiterfuehrung der Probe, der Timer wird durch den case Zweig
  210                                 //##cm_SteeringReady von Dlg_OnCommand (nach Ende der Steering Aktion)
  211                                 //##neu gesetzt
  212                                 Steering.Reset();
  213                                 Steering.StartUp(GetHandle(), nMotor, Detector);
  214                                 Steering.StartCmdExecution(MoveToPoint, Relative, 0, buf, GetHandle());
  215                                 return;
  216                         }
  217                         //## alle Messzyklen beendet
  218                         sprintf(buf, "%d", RestShots);
  219                         SetDlgItemText(GetHandle(), id_RemainderCyclus, (LPSTR)buf);
  220                         bExeptionOccured= TRUE;
  221                         //## Timer fuer Beepton aktivieren
  222                         SetTimer(GetHandle(), 99, 2000, NULL);
  223                         //##Zusatzzeit; Hinweisbox anzeigen
  224                         bAdditionalTime= TRUE;
  225                         strcpy(buf, "Meß-Zeit abgelaufen ! \n\n");
  226                         MessageBox(buf, "Topographie - Information", MBINFO);
  227                         FORWARD_WM_COMMAND(hwnd, cm_SwitchControl, 0, 0, PostMessage);
  228                         KillTimer(GetHandle(), 99);
  229                         break;
  230         }
  231 };
  232 
  233 //## Behandlung verschiedener Nachrichten
  234 void TTopographyExecuteDlg::Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
  235 {
  236         TModalDlg *dlg= 0;
  237         static HWND hDlgItem= NULL;
  238         char buf[2*MaxString];
  239         float fExpTime;
  240 
  241         switch (id)
  242         {
  243                 //##Aenderung des Messzustandes (Messung laeuft <-> keine Messung)
  244                 case cm_SwitchControl:
  245                         //## !!! Der Kommentar hier ist falsch an dieser Stelle !!!
  246                         //## Er bezieht sich auf den indirekten else Zweig der Abfrage
  247                         //## if(bControlActive), auch das Erfassen der Intensitaet wird
  248                         //## durch Steering uebernommen und erfolgt nicht hier.
  249                         // Starten der Regelung: Es wird zuerst die aktuelle Intensität gemessen
  250                         // und zum Regel-Sollwert erklärt. Dann erfolgt der Start des
  251                         // Regelalgorithmus.
  252 
  253                         //***** Topography was active **********************************************
  254 
  255                         //##Ende der Messzeit wurde erreicht, Benutzer hat Hinweisfenster
  256                         //##quittiert Timer stoppen bzw. Nachregelmechanismus anhalten
  257                         //##Zustandsvariablen setzen, Buttonbeschriftung von stoppen auf
  258                         //##starten aendern
  259                         if (bControlActive)
  260                         {
  261                                 if (TopographyOld.bMultibleShot)
  262                                         KillTimer(GetHandle(), 88);
  263                                 else
  264                                         Steering.ToggleInterrupt();
  265                                 // Herstellen des Ausgangszustandes
  266                                 bTimeFinish= FALSE;
  267                                 bTimeRunning= FALSE;
  268                                 bAdditionalTime= FALSE;
  269                                 if (TopographyOld.bMultibleShot)
  270                                         SetDlgItemText(GetHandle(), cm_SwitchControl, "&Topographie starten");
  271                                 else
  272                                         SetDlgItemText(GetHandle(), cm_SwitchControl, "&Regeln starten");
  273                                 StartTime= CurrentTime= 0;
  274                                 bControlActive= !bControlActive;
  275                                 SendMessage(GetHandle(), WM_COMMAND, cm_ParamSet, 0);
  276                                 bControlActive= FALSE;
  277 
  278                                 //! neu: klier Protokollbuch  geändert 01.03.2003
  279                                 if (IsProtocolTopographyOn())
  280                                 {
  281                                         if (!TopographyOld.bMultibleShot)
  282                                                 SetProtocolTopographyImpsnach(Steering.GetIntensity());
  283                                         SetProtocolTopographyDFvor( Steering.dStartPoint );
  284                                         SetProtocolTopographyDFnach( mGetValue(Distance) );
  285                                         SaveProtocolTopographyParameter();
  286                                         ViewOnProtocolTopographyDlg();
  287                                         if (IsProtocolTopographyOn())
  288                                                 SetProtocolTopographyReadOnly();
  289                                         SetProtocolTopographyOff();
  290                                 }
  291 
  292                                 //## aktiviert Button Startpositon einstellen; anstelle von !bControlActive
  293                                 //## sollte direkt TRUE angegeben werden
  294                                 EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), !bControlActive);
  295                                 break;
  296                         }
  297                         //***** Topography will be activated  **************************************
  298                         //##Messung gestartet; Anzeigefelder und Buttonbeschriftungen anpassen,
  299                         //##Zeitzaehlung beginnen, bei Mehrfachbelichtung Timer starten, bei
  300                         //##Einfachbelichtung Steering Steuerung (fuer Nachregeln) starten
  301 
  302                         //! neu: klier Protokollbuch  geändert 01.03.2003
  303                         if (MessageBox("Sollen die Messung im Protokollbuch gespeichert werden?",
  304                                                    "Protokollbuch - Info", MB_YESNO) == IDYES)
  305                         {
  306                                 SetProtocolTopographyOn();
  307                                 SetProtocolTopographyImpMax(Steering.fPeakIntensity);
  308                                 int nOldTopographyMotor= mlGetAxis();
  309                                 mlSetAxis(mlGetIdByName(Collimator));
  310                                 SetProtocolTopographyKKruemmung(mGetValue(Distance));
  311                                 mlSetAxis(nOldTopographyMotor);
  312                                 SetProtocolTopographyHWB(Steering.GetHwb()); // ! neu Kullmann+Reinecker: fHwb durch Accessor-Methode GetHwb() ersetzt
  313                                 SetProtocolTopographyEXPT(TopographyOld.lMeasurementTime);
  314                                 SetProtocolTopographyINCDF(TopographyOld.fControlStep);
  315                                 SetProtocolTopographyNBEXPOS(TopographyOld.nNumberCycle);
  316                                 if (TopographyOld.bMultibleShot)
  317                                 {
  318                                         SetProtocolTopographyRSA(TopographyOld.dStartAngle);
  319                                         SetProtocolTopographyABE(TopographyOld.fAngleBetweenShots);
  320                                 }
  321                                 else
  322                                 {
  323                                         SetProtocolTopographyCRT(TopographyOld.fMaxTime);
  324                                         SetProtocolTopographySTE();
  325                                         SetProtocolTopographyCONLIMIT();
  326                                         if (TopographyOld.bSmallAngleSide)
  327                                                 SetProtocolTopographyCONPOINT( -TopographyOld.fWorkPoint);
  328                                         else
  329                                                 SetProtocolTopographyCONPOINT(TopographyOld.fWorkPoint);
  330                                 }
  331                                 ViewOnProtocolTopographyDlg();
  332                         }
  333                         else
  334                                 SetProtocolTopographyOff();
  335 
  336                         bExeptionOccured= FALSE;
  337                         CurrentTime= 0;
  338                         M_TimeString (buf, CurrentTime);
  339                         SetDlgItemText(GetHandle(), id_RemainderTime, buf);
  340                         StartTime= CurrentTime= GetTickCount();
  341                         SetDlgItemText(GetHandle(), id_Text, "");
  342                         bTimeRunning= TRUE;
  343                         if (TopographyOld.bMultibleShot)
  344                         {
  345                                 // Mehrfach-Belichtung
  346                                 // Start-Position wurde anfahren
  347                                 RestShots= TopographyOld.nNumberCycle;
  348                                 SetTimer(GetHandle(), 88, 500, NULL);
  349                                 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Topographie stoppen");
  350                         }
  351                         else
  352                         {
  353                                 //##Steering auf Grundzustand setzen, Fenster, Motor und Counter
  354                                 //##an Steering uebergeben, Motorschrittweite setzen
  355                                 Steering.Reset();
  356                                 Steering.StartUp(GetHandle(), nMotor, Detector);
  357                                 mSetValue(Width, TopographyOld.fControlStep);
  358                                 StartTime= CurrentTime= GetTickCount();
  359                                 // Parameter für Regelung laden
  360                                 //##Eintragen von Werten in die Kommandostruktur zum Nachregeln
  361                                 //##und ausfuehren des Kommandos ControlFlank durch Steering
  362                                 sprintf(buf, mGetDF(), TopographyOld.fControlRange);
  363                                 if (TopographyOld.bSmallAngleSide)
  364                                         Steering.StartCmdExecution(ControlFlank, SmallSide, 0, buf, GetHandle());
  365                                 else
  366                                         Steering.StartCmdExecution(ControlFlank, LargeSide, 0, buf, GetHandle());
  367                                 SetDlgItemText(GetHandle(), cm_SwitchControl, "&Regeln stoppen");
  368                         }
  369                         bControlActive= TRUE;
  370                         EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), !bControlActive);
  371                         break;
  372 
  373                 //##Initalisierung
  374                 case cm_Initialize:
  375                         //##Counter mit Zeitintervall zum Zaehlen, maximaler Impulsrate und
  376                         //##Messfehlerwert (0.02) initialisieren
  377                         if (Detector->IsActive())
  378                         {
  379                                 Detector->MeasureStop();
  380                                 Detector->SetExposureSettings( TExposureSettings( TopographyOld.fMaxTime,
  381                                                                                            TopographyOld.dwMaxCounts) );
  382                                 Detector->MeasureStart();
  383                         }
  384                         else
  385                                 Detector->SetExposureSettings( TExposureSettings( TopographyOld.fMaxTime,
  386                                                                                            TopographyOld.dwMaxCounts) );
  387 
  388                         //##Eintragen von Werten in die Anzeigfelder des Topographie Ausfuehren
  389                         //##Fensters
  390                         sprintf(buf, "%.1f", TopographyOld.fMaxTime);
  391                         SetDlgItemText(GetHandle(), id_ExposureTime, buf);
  392                         RestShots= TopographyOld.nNumberCycle;
  393                         sprintf(buf, "%d", RestShots);
  394                         SetDlgItemText(GetHandle(), id_RemainderCyclus, buf);
  395                         mSetValue(Width, TopographyOld.fControlStep);
  396                         //##Ausgabe einer Warnmeldung, falls Motor oder Counter vor Aufruf
  397                         //##von Topographie Ausfuehren nicht gesetzt waren
  398                         if (!bSetupOk)
  399                         {
  400                                 strcpy(buf, "Die Einstellungen für Topograpie könnten\n\r");
  401                                 strcat(buf, "noch nicht exakt eingestellt sein !\n\r");
  402                                 strcat(buf, " Nehmen Sie bitte Ihre Einstellungen vor.");
  403                         }
  404                         else
  405                                 strcpy(buf, "");
  406                         SetDlgItemText(GetHandle(), id_Text, (LPSTR)buf);
  407                         break;
  408 
  409                 //##Button "Startposition einstellen" wurde ausgewaehlt
  410                 case cm_GotoWorkPoint:
  411                         // StartPosition anfahren
  412                         //##nachfolgende Ausgabe erfolgt auch, wenn der Arbeitspunkt
  413                         //##nicht angefahren wird, die Ausgabe sollte eigentlich
  414                         //##nach Ueberpruefung durch die if Bedingung erfolgen
  415                         //##alt:
  416                         //##strcpy(buf,"Arbeitspunkt wird angefahren.");
  417                         //##SetDlgItemText(GetHandle(),id_Text,(LPSTR)buf);
  418                         if (bStartPointOk && TopographyOld.bMultibleShot)
  419                         {
  420                                 // prevents the multible relative movement
  421                                 sprintf(buf, "Die Startposition wurde bereits angefahren !");
  422                                 MessageBox(buf, "Topographie - Information", MBINFO);
  423                                 break;
  424                         }
  425                         //##die naechsten zwei Zeilen sind neu hier
  426                         strcpy(buf, "Arbeitspunkt wird angefahren.");
  427                         SetDlgItemText(GetHandle(), id_Text, (LPSTR)buf);
  428                         //##Motorschrittweite setzen
  429                         mSetValue(Width, TopographyOld.fMoveStep);
  430                         //##Button "Startposition anfahren" und
  431                         //##"Regelung starten"/"Topographie starten" deaktivieren
  432                         EnableWindow(GetDlgItem(GetHandle(), cm_SwitchControl), FALSE);
  433                         EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), FALSE);
  434                         Steering.Reset();
  435                         Steering.StartUp(GetHandle(), nMotor, Detector);
  436                         //##Anfahren des um dStartAngle vom aktuellen Stand entfernten Punktes
  437                         if (TopographyOld.bMultibleShot)
  438                         {
  439                                 sprintf(buf, mGetDF(), TopographyOld.dStartAngle);
  440                                 Steering.StartCmdExecution(MoveToPoint, Relative, 0, buf, GetHandle());
  441                         }
  442                         //##Arbeitspunkt anfahren durch Makroausfuehrung
  443                         else
  444                                 Steering.StartMacroExecution(MWorkPoint, GetHandle());
  445                         break;
  446 
  447                 // Arbeitspunkt wurde eingestellt
  448                 case cm_SetupPosition:
  449                         //##Buttons aktivieren
  450                         EnableWindow(GetDlgItem(GetHandle(), cm_SwitchControl), TRUE);
  451                         EnableWindow(GetDlgItem(GetHandle(), cm_GotoWorkPoint), TRUE);
  452                         //##Ausgabe Hinweistext
  453                         strcpy(buf, ">>>>>>>>>>  X_RAY OFF  <<<<<<<<<<<<\n");
  454                         strcat(buf, "Bitte Film-Kassette auflegen !\n");
  455                         strcat(buf, "Die Aufnahme kann gestartet werden !");
  456                         SetDlgItemText(GetHandle(), id_Text, (LPSTR)buf);
  457                         bStartPointOk= TRUE;
  458                         //##fuer die Mehrfachbelichtung setzte
  459                         if (TopographyOld.bMultibleShot)
  460                         {
  461                                 //##Steering.dStartPoint wird auf die aktuelle Motorposition plus
  462                                 //##Verschiebungsweite gesetzt -> Warum??? dStartPoint wird im
  463                                 //##Topographie Zusammenhang eigentlich nicht genutzt
  464                                 Steering.dStartPoint= mGetValue(Distance) + TopographyOld.dStartAngle;
  465                                 SendMessage(GetHandle(), WM_COMMAND, cm_ParamSet, 0);
  466                         }
  467                         break;
  468 
  469                 //##Steering ist mit seiner Aktion fertig
  470                 case cm_SteeringReady:
  471                         //##falls die Steering Aktion sich auf einen Umsetzungsschritt
  472                         //##bei der Mehrfachbelichtung bezog, Timer fuer die naechste
  473                         //##Runde neu initialisieren
  474                         if (bControlActive && TopographyOld.bMultibleShot)
  475                         {
  476                                 StartTime= CurrentTime= GetTickCount();
  477                                 bTimeRunning= TRUE;
  478                                 SetTimer(GetHandle(), 88, 500, NULL);
  479                                 break;
  480                         }
  481                         //##Steering Aktion hat sich auf Arbeitspunkt bzw. Startposition anfahren
  482                         //##bezogen
  483                         FORWARD_WM_COMMAND(GetHandle(), cm_SetupPosition, 0, 0, PostMessage);
  484                         break;
  485 
  486                 //##es liegen neue Zaehlerwerte vor
  487                 case cm_CounterSet:
  488                         if (TopographyOld.bMultibleShot)
  489                                 break;
  490                         // Meß-Werte speichern
  491                         if (TopographyOld.bMonitorUsed)
  492                         {
  493                                 float norm;
  494                                 // Meß-Signal normieren
  495                                 TopographyOld.Monitor->GetIntegral(norm);
  496                                 Steering.SetNorm(norm);
  497                         }
  498                         //##Anzeige des Zaehlerfensters aktualisieren
  499                         Detector->UpdateViews(TRUE);
  500                         Steering.DetectorRequest();
  501                         // Anzeige der Regel-Größen
  502                         FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
  503                         FORWARD_WM_COMMAND(GetHandle(), cm_InquireExeption, 0, 0, PostMessage);
  504                         break;
  505 
  506                 //##Nutzer hat Eingabefeld Detektor-Messzeit angewaehlt
  507                 case id_ExposureTime:
  508                         if (bStarted)
  509                                 hDlgItem= GetDlgItem(GetHandle(), id_ExposureTime);
  510                         break;
  511 
  512                 //##Nutzer hat Return gedrueckt
  513                 case IDOK:
  514                         //##falls das Return sich nicht auf ein Dialogfeld bezieht,
  515                         //##Standardbehandlung durch TModalDlg
  516                         if (!hDlgItem)
  517                         {
  518                                 TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
  519                                 break;
  520                         }
  521                         // Der Nutzer hat mit Return eine neue Meßzeit eingegeben
  522                         if (hDlgItem == GetDlgItem(GetHandle(), id_ExposureTime))
  523                         {
  524                                 //##neue Zaehlermesszeit wird eingelesen und fuer den Zaehler
  525                                 //##eingestellt, allerdings erfolgt keine Speicherung des Wertes
  526                                 //##in fMaxTime -> Wert wird zwar fuer den Detektor geaendert und
  527                                 //##auch im Topographie Fenster angezeigt, wird allerdings
  528                                 //##das Topographie Einstellen Fenster aufgerufen, so steht dort
  529                                 //##der alte Wert
  530                                 GetDlgItemText(GetHandle(), id_ExposureTime, (LPSTR)buf, 10);
  531                                 fExpTime= atof(buf);
  532                                 Detector->SetExposureSettings( TExposureSettings ( fExpTime,
  533                                                                                            TopographyOld.dwMaxCounts) );
  534                                 sprintf(buf, "%.1f", fExpTime);
  535                                 SetDlgItemText(GetHandle(), id_ExposureTime, (LPSTR)buf);
  536                                 //##NEU nachfolgende Zeile merkt sich den neuen Zaehlermesszeitwert
  537                                 //##Topographie global -> oben beschriebener Fehler behoben
  538                                 TopographyOld.fMaxTime= fExpTime;
  539                         }
  540                         hDlgItem= NULL;
  541                         SetFocus(GetDlgItem(GetHandle(), cm_SwitchControl));
  542                         break;
  543 
  544                 //##Button "Einstellungen" wurde betaetigt
  545                 case cm_TopographyParam:
  546                         //##Topographie Einstellungen Dialog
  547                         dlg= (TTopographySetParamDlg *)new TTopographySetParamDlg(TRUE);
  548                         if ( dlg ) dlg->ExecuteDialog(GetHandle());
  549                         _FREEOBJ(dlg);
  550                         // spezifische Parameter für einen Sensor setzen
  551                         Detector->MeasureStop();
  552                         Detector->SetExposureSettings( TExposureSettings ( TopographyOld.fMaxTime,
  553                                                                                    TopographyOld.dwMaxCounts) );
  554                         Detector->MeasureStart();
  555                         //##Ausgabe der neuen Detektormesszeit
  556                         sprintf(buf, "%.1f", TopographyOld.fMaxTime);
  557                         SetDlgItemText(GetHandle(), id_ExposureTime, buf);
  558                         //##neue Motorschrittweite an den Motor weitergeben
  559                         mSetValue(Width, TopographyOld.fControlStep);
  560                         break;
  561 
  562                 //##Anzeigen im Topographie Ausfuehren Fenster aktualisieren
  563                 case cm_ParamSet:
  564                         sprintf(buf, "%d", RestShots);
  565                         SetDlgItemText(GetHandle(), id_RemainderCyclus, buf);
  566                         if (!bControlActive)
  567                                 break;
  568                         //##abgelaufende Zeit berechnen
  569                         if (bTimeRunning)
  570                         {
  571 
  572                                 //! neu: klier Protokollbuch
  573                                 if (CurrentTime == StartTime)
  574                                         if (!TopographyOld.bMultibleShot && IsProtocolTopographyOn())
  575                                                 SetProtocolTopographyImpsvor(Steering.GetIntensity());
  576 
  577                                 CurrentTime= GetTickCount();
  578                                 CurrentTime -= StartTime;
  579                         }
  580                         //##Drift anzeigen
  581                         sprintf(buf, "%.2lf", mGetValue(Distance) - Steering.dStartPoint);
  582                         SetDlgItemText(GetHandle(), id_Angle, buf);
  583                         if (bAdditionalTime)
  584                         {
  585                                 // Ausgabe der zusätzlichen Meßzeit
  586                                 M_TimeString (buf, CurrentTime);
  587                                 SetDlgItemText(GetHandle(), id_RemainderTime, buf);
  588                         }
  589                         else
  590                         {
  591                                 M_TimeString (buf, CurrentTime);
  592                                 SetDlgItemText(GetHandle(), id_MeasurementTime, buf);
  593                         }
  594                         break;
  595 
  596                 //##es ist moeglicherweise ein Abbruchfall eingetreten
  597                 case cm_InquireExeption:
  598                         if (bExeptionOccured)
  599                                 break;
  600                         // Feststellen, ob eine Abbruch-Bedingung erfüllt ist
  601                         //##Intensitaet unter Minimumintensitaet
  602                         if (Steering.GetIntensity() < (0.01 * Steering.fStartIntensity))
  603                         {
  604                                 bExeptionOccured= TRUE;
  605                                 //##Beep Timer starten und Hinweisbox
  606                                 SetTimer(GetHandle(), 99, 2000, NULL);
  607                                 KillTimer(GetHandle(), TimerIdInformation);
  608                                 sprintf(buf, "%s", "Intensitäts-Abfall unter 1% !");
  609                                 MessageBox(buf, "Topographie - Information", MBINFO);
  610                                 KillTimer(GetHandle(), 99);
  611                         }
  612                         if (TopographyOld.bMultibleShot)
  613                                 break;
  614                         //##es wurde um mehr als fMaxAngleEscape vom Arbeitspunkt abgewichen
  615                         if (TopographyOld.fMaxAngleEscape <
  616                                         fabs(Steering.dStartPoint - Steering.GetDistance()))
  617                         {
  618                                 bExeptionOccured= TRUE;
  619                                 //##Beep Timer starten und Hinweisbox
  620                                 KillTimer(GetHandle(), TimerIdInformation);
  621                                 sprintf(buf, "%s", "Regel-Bereich wurde verlassen !");
  622                                 MessageBox(buf, "Topographie - Information", MBINFO);
  623                                 KillTimer(GetHandle(), 99);
  624                         }
  625                         //##Messzeit ist abgelaufen
  626                         if ((CurrentTime / 1000) > (DWORD) TopographyOld.lMeasurementTime)
  627                         {
  628                                 bTimeFinish= TRUE;
  629                                 bExeptionOccured= TRUE;
  630                                 //##Beep Timer starten und Hinweisbox
  631                                 SetTimer(GetHandle(), 99, 2000, NULL);
  632                                 bAdditionalTime= TRUE;
  633                                 StartTime= GetTickCount();
  634                                 strcpy(buf, "Meß-Zeit abgelaufen ! \n\n");
  635                                 strcat(buf, "Bei Bestätigung wird Regelung gestoppt.");
  636                                 MessageBox(buf, "Topographie - Information", MBINFO);
  637                                 KillTimer(GetHandle(), 99);
  638                                 FORWARD_WM_COMMAND(GetHandle(), cm_SwitchControl, 0, 0, PostMessage);
  639                         }
  640                         break;
  641 
  642                 case IDCANCEL:
  643                         //! neu: klier Protokollbuch
  644                         if (IsProtocolTopographyOn())
  645                                 SetProtocolTopographyOff();
  646                         // Kullmann+Reinecker: Hier muss kein break hin, weiter bei TModalDlg::Dlg_OnCommand!
  647                 
  648                 default:
  649                         TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
  650         }
  651 };
  652 
  653 //##Beenden des Topographie Ausfuehren Fensters
  654 void TTopographyExecuteDlg::LeaveDialog(void)
  655 {
  656         //##Wo wurde dieser Timer gesetzt? Ist er fuer die Topographie ueberhaupt
  657         //##relevant?
  658         KillTimer(GetHandle(), TimerIdInformation);
  659         //##"BeepTimer" stoppen
  660         KillTimer(GetHandle(), 99);
  661         //##aktuelle Motor zuruecksetzen
  662         mPopSettings(ThisPosition);
  663         //##Detektor zuruecksetzen
  664         Detector->MeasureStop();
  665         Detector->PopSettings();
  666         Detector->SetControlWnd(NULL);
  667         Detector->MeasureStart();
  668         if (!bSetupOk)
  669                 TopographyOld.Sensor= NULL;
  670 };
  671 
  672 //******************************************************************************
  673 //##Konstruktor; restrictions gibt an, ob das Fenster von Topographie Ausfuehren
  674 //##aus aufgerufen wurde
  675 TTopographySetParamDlg::TTopographySetParamDlg(int restrictions) : TModalDlg("TopographyParam", GetMainInstance() )
  676 {
  677         nRestrictions= restrictions;
  678         //##falls Detektor noch nicht gesetzt, auf aktuellen Detektor setzen
  679         if (TopographyOld.Sensor == NULL)
  680         {
  681                 TopographyOld.Sensor= TDetectorManager::DetectorManager().GetDetector();
  682                 TopographyOld.Monitor= TopographyOld.Sensor;
  683                 TopographyOld.bMonitorUsed= FALSE;
  684         }
  685         //##falls noch kein Motor gesetzt, wenn moeglich auf Omega setzen, sonst auf
  686         //##den aktuellen
  687         if (TopographyOld.nMotor < 0)
  688                 if (mlIsAxisValid(Omega))
  689                         TopographyOld.nMotor= mlGetIdByName(Omega);
  690                 else
  691                         TopographyOld.nMotor= mlGetAxis();
  692 };
  693 
  694 
  695 //##Initalisierung
  696 BOOL TTopographySetParamDlg::Dlg_OnInit(HWND hwnd, HWND hwndCtl, LPARAM lParam)
  697 {
  698         if (nRestrictions)
  699         {
  700                 //##Wird das Einstellungsfenster von dem Topographie Fenster aus
  701                 //##aufgerufen, so ist nur fuer einige Werte die Eingabe moeglich. Alle
  702                 //##anderen Eingabefelder werden hier deaktiviert und erscheinen dann
  703                 //##im Fenster ausgegraut.
  704                 EnableWindow(GetDlgItem(GetHandle(), id_ChooseMotor), FALSE);
  705                 //Datum: 02.08.2002 EnableWindow(GetDlgItem(GetHandle(),cm_RotateMotor),FALSE);
  706                 EnableWindow(GetDlgItem(GetHandle(), id_ChooseDetector), FALSE);
  707                 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), FALSE);
  708                 EnableWindow(GetDlgItem(GetHandle(), id_Shots), FALSE);
  709                 EnableWindow(GetDlgItem(GetHandle(), id_MaxAngleEscape), FALSE);
  710                 EnableWindow(GetDlgItem(GetHandle(), id_StepWidth), FALSE);
  711                 EnableWindow(GetDlgItem(GetHandle(), id_From), FALSE);
  712                 EnableWindow(GetDlgItem(GetHandle(), id_MultipleShot), FALSE);
  713                 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), FALSE);
  714                 EnableWindow(GetDlgItem(GetHandle(), id_ControlRange), FALSE);
  715                 EnableWindow(GetDlgItem(GetHandle(), id_MoveStep), FALSE);
  716                 // EnableWindow(GetDlgItem(GetHandle(),id_ControlStep),FALSE);
  717         }
  718         nMotor= TopographyOld.nMotor;
  719         Detector= TopographyOld.Sensor;
  720         Monitor= TopographyOld.Monitor;
  721         //##Motoren- /Detektorenauswahlliste aufbauen
  722         hDetectorList= GetDlgItem(GetHandle(), id_ChooseDetector);
  723         hMotorList= GetDlgItem(GetHandle(), id_ChooseMotor);
  724         TDetectorManager::DetectorManager().FillDetectorComboBox(hDetectorList, 0);
  725         for (int i= 0; i < mlGetAxisNumber(); i++)
  726         {
  727                 mlSetAxis(i);
  728                 ComboBox_AddString( hMotorList, mGetAxisName() );
  729         }
  730         mlSetAxis(nMotor);
  731         FORWARD_WM_COMMAND(hwnd, cm_ParamSet, hwndCtl, 0, SendMessage);
  732         return TRUE;
  733 };
  734 
  735 //##Bearbeitung verschiedener Nachrichten an das Topographie Einstellen Fenster
  736 void TTopographySetParamDlg::Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
  737 {
  738         char buf[MaxString];
  739         float valuef;
  740         int idx;
  741 
  742         switch (id)
  743         {
  744                 //##aktualisieren der Anzeige/Eingabefelder
  745                 case cm_ParamSet:
  746                         ComboBox_SelectString(hMotorList, 0, mGetAxisName());
  747                         ComboBox_SelectString(hDetectorList, 0, Detector->GetCharacteristic());
  748                         SetDlgItemText(GetHandle(), id_Unit, mGetUnitName());
  749                         //##SetFocus funktioniert nicht, "verbiegt" aber handle,
  750                         //##so dass getHandle in Folge fehlerhaften Wert liefert
  751                         //##
  752                         //##SetFocus(GetDlgItem(GetHandle(),IDCANCEL));
  753                         valuef= TopographyOld.fWorkPoint * 100;
  754                         if (TopographyOld.bSmallAngleSide)
  755                                 valuef *= -1.0;
  756                         sprintf(buf, "%.1f", valuef);
  757                         SetDlgItemText(GetHandle(), id_WorkPoint, buf);
  758                         SetDlgItemInt(GetHandle(), id_Shots, TopographyOld.nNumberCycle, FALSE);
  759                         sprintf(buf, "%.1f", TopographyOld.fMaxAngleEscape);
  760                         SetDlgItemText(GetHandle(), id_MaxAngleEscape, buf);
  761                         //## Schrittweite beim Regeln
  762                         sprintf(buf, mGetSF(), TopographyOld.fControlStep);
  763                         SetDlgItemText(GetHandle(), id_ControlStep, buf);
  764                         sprintf(buf, mGetSF(), TopographyOld.fMoveStep);
  765                         SetDlgItemText(GetHandle(), id_MoveStep, buf);
  766                         sprintf(buf, "%.1f", TopographyOld.fControlRange*100);
  767                         SetDlgItemText(GetHandle(), id_ControlRange, buf);
  768                         sprintf(buf, "%.1f", TopographyOld.fMaxTime);
  769                         SetDlgItemText(GetHandle(), id_MaxTime, buf);
  770                         //##da lMeasurementTime ein long Wert ist, darf hier nicht nach int
  771                         //##gecastet werden, anstelle der Formatierungsangabe %.d fuer int
  772                         //##muss %.ld fuer long int stehen
  773                         //## alt: sprintf(buf,"%.d",(int)(TopographyOld.lMeasurementTime/60l));
  774                         //##NEU:
  775                         sprintf(buf, "%.ld", (TopographyOld.lMeasurementTime / 60l));
  776                         SetDlgItemText(GetHandle(), id_MeasurementTime, buf);
  777                         sprintf(buf, "%lu", TopographyOld.dwMaxCounts);
  778                         SetDlgItemText(GetHandle(), id_MaxCounts, buf);
  779                         CheckDlgButton(GetHandle(), id_MultipleShot, TopographyOld.bMultibleShot);
  780                         sprintf(buf, "%.1f", TopographyOld.fAngleBetweenShots);
  781                         SetDlgItemText(GetHandle(), id_StepWidth, buf);
  782                         sprintf(buf, "%.1f", TopographyOld.dStartAngle);
  783                         SetDlgItemText(GetHandle(), id_From, buf);
  784                         //##Falls Fenster von Topographie Ausfuehren aufgerufen wird
  785                         //## nRestriction == true, vom Hauptmenue aus nRestriction == false
  786                         //##-> Einfluss auf Aktivierung von Eingabefeldern
  787                         if (!nRestrictions)
  788                         {
  789                                 EnableWindow(GetDlgItem(GetHandle(), id_Shots), TopographyOld.bMultibleShot);
  790                                 EnableWindow(GetDlgItem(GetHandle(), id_From), TopographyOld.bMultibleShot);
  791                                 EnableWindow(GetDlgItem(GetHandle(), id_StepWidth), TopographyOld.bMultibleShot);
  792                                 EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), !TopographyOld.bMultibleShot);
  793                                 EnableWindow(GetDlgItem(GetHandle(), id_ControlRange), !TopographyOld.bMultibleShot);
  794                         }
  795                         break;
  796 
  797                 //##Motor Auswahlbox wurde angewaehlt
  798                 case id_ChooseMotor:
  799                         if (codeNotify==CBN_SELCHANGE)
  800                         {
  801                                 idx= ComboBox_GetCurSel(hMotorList);
  802                                 //##ueberprueft ob tatsaechlich ein neuer Motor gewaehlt wurde
  803                                 if ((nMotor != idx) && (idx != CB_ERR))
  804                                 {
  805                                         //##initialisiert den ausgewaehlten Motor, aktualisiert die Anzeige
  806                                         mlSetAxis(idx);
  807                                         nMotor= mlGetAxis();
  808                                         FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
  809                                 }
  810                         }
  811                         break;
  812 
  813                 //##Detektor Auswahlbox wurde angewaehlt
  814                 case id_ChooseDetector:
  815                         if (codeNotify==CBN_SELCHANGE) 
  816                         {
  817                                 idx= ComboBox_GetCurSel(hDetectorList);
  818                                 if ((Detector != TDetectorManager::DetectorManager().GetDetector(idx)) && (idx != CB_ERR))
  819                                 {
  820                                         //##setzt den ausgewaehlten Detektor als aktuellen Detektor ein,
  821                                         //##aktualisiert die Anzeige
  822                                         Detector= TDetectorManager::DetectorManager().GetDetector(idx);
  823                                         FORWARD_WM_COMMAND(hwnd, cm_ParamSet, 0, 0, SendMessage);
  824                                 }
  825                         }
  826                         break;
  827 
  828                 //Datum: 02.08.2002
  829                 /*//##Zu Zeit nicht genutzt (ehemals gab es neben der Motorauswahl-Box
  830                 //##Schalter, mit dem sich die Auswahl rotieren lassen sollte)
  831                 case cm_RotateMotor:
  832                         mlSetAxis(nMotor+1);
  833                         nMotor= mlGetAxis();
  834                         FORWARD_WM_COMMAND(hwnd,cm_ParamSet,0,0,SendMessage);
  835                         break;*/
  836 
  837                 //##Aktivieren bzw. Deaktivieren der Mehrfachbelichtungs Checkbox
  838                 //##Bei Aktivierung:
  839                 //##Eingabefelder im Bereich Mehrfachbelichtung werden aktiviert
  840                 //##Arbeitspunkt Lage und Belichtungsregelung Bereich deaktiviert
  841                 //##Bei Deaktivierung entsprechend umgekehrte Aktivierung/Deaktivierung
  842                 //##der Eingabefelder
  843                 case id_MultipleShot:
  844                         TopographyOld.bMultibleShot= IsDlgButtonChecked(GetHandle(), id_MultipleShot);
  845                         EnableWindow(GetDlgItem(GetHandle(), id_Shots), TopographyOld.bMultibleShot);
  846                         EnableWindow(GetDlgItem(GetHandle(), id_From), TopographyOld.bMultibleShot);
  847                         EnableWindow(GetDlgItem(GetHandle(), id_StepWidth), TopographyOld.bMultibleShot);
  848                         EnableWindow(GetDlgItem(GetHandle(), id_WorkPoint), !TopographyOld.bMultibleShot);
  849                         EnableWindow(GetDlgItem(GetHandle(), id_ControlRange), !TopographyOld.bMultibleShot);
  850                         break;
  851 
  852                 default:
  853                         TModalDlg::Dlg_OnCommand(hwnd, id, hwndCtl, codeNotify);
  854         }
  855 };
  856 
  857 //##Testet nacheinander fuer alle Eingabefelder, ob die Werte im
  858 //##Wertebereich liegen (im Moment nur Test auf Ungleichheit mit Null,
  859 //##siehe auch Fehlerprotokoll) und uebernimmt sie dabei als Variablenwerte
  860 //##von TTopographie
  861 //##Einzelfaelle ausfuehren
  862 BOOL TTopographySetParamDlg::CanClose(void)
  863 {
  864         char buf[MaxString];
  865         float valueF;
  866         //##wird nicht mehr benoetigt siehe Aenderung zur Uebernahme von nNumberCycle
  867         //##short   valueI;
  868         long valueL;
  869 
  870         //##Feststellen ob Mehrfachbelichtung ausgewaehlt wurde
  871         TopographyOld.bMultibleShot= IsDlgButtonChecked(GetHandle(), id_MultipleShot);
  872 
  873         //##Regelbereich nach Intensitaet in Prozent
  874         GetDlgItemText(GetHandle(), id_ControlRange, buf, 10);
  875         valueF= atof(buf);
  876         //##ein negativer Prozentwert macht keinen Sinn, die Werte muessen >= 0.01
  877         //##sonst gibt es bei erneuter Darstellung Probleme, da maximal vier Zeichen
  878         //##zur Verfuegung stehen
  879         //## alt: if(0.0 != valueF)
  880         //##NEU:
  881         if (valueF >= 0.01)
  882         {
  883                 TopographyOld.fControlRange= valueF / 100.0;
  884         }
  885         else
  886                 return FALSE;
  887 
  888         //##Abstand bei Mehrfachbelichtungen
  889         GetDlgItemText(GetHandle(), id_StepWidth, buf, 10);
  890         valueF= atof(buf);
  891         //##hier gibt es Probleme bei der erneuten Darstellung, falls der Betrag des
  892         //##eingebenen Wertes < 0.001
  893         //## alt: if(0.0 != valueF)
  894         //##NEU:
  895         if ((valueF >= 0.001) || (valueF <= -0.001))
  896         {
  897                 TopographyOld.fAngleBetweenShots= valueF;
  898         }
  899         else
  900                 return FALSE;
  901 
  902         //##fuer die Mehrfachbelichtung die relative Startposition zur aktuellen
  903         //##Motorposition
  904         GetDlgItemText(GetHandle(), id_From, buf, 10);
  905         TopographyOld.dStartAngle= atof(buf);
  906 
  907         //##Regel Schrittweite
  908         GetDlgItemText(GetHandle(), id_ControlStep, buf, 10);
  909         valueF= atof(buf);
  910         //##negative Werte sind hier nicht sinnvoll, bei der erneuten Darstellung
  911         //##gibt es Probleme, falls der Betrag des eingegebenen Wertes < 0.00001
  912         //## alt: if(0.0 != valueF)
  913         //##NEU:
  914         if ( valueF >= 0.00001 )
  915         {
  916                 TopographyOld.fControlStep= valueF;
  917         }
  918         else
  919                 return FALSE;
  920 
  921         //##Schrittweite zum Anfahren des Arbeitspunktes
  922         GetDlgItemText(GetHandle(), id_MoveStep, buf, 10);
  923         valueF= atof(buf);
  924         //##negative Werte sind hier nicht sinnvoll, bei der erneuten Darstellung
  925         //##gibt es Probleme, falls der Betrag des eingegebenen Wertes < 0.0001
  926         //## alt: if(0.0 != valueF)
  927         //##NEU:
  928         if ( valueF >= 0.0001 )
  929         {
  930                 TopographyOld.fMoveStep= valueF;
  931         }
  932         else
  933                 return FALSE;
  934 
  935         //##maximale Abweichung vom Arbeitspunkt
  936         GetDlgItemText(GetHandle(), id_MaxAngleEscape, buf, 10);
  937         valueF= atof(buf);
  938         //##negative Werte sind hierfuer nicht sinnvoll, ist der eingegebene
  939         //##Wert < 0.01, so wird er bei der naechsten Darstellung als 0.0 angezeigt
  940         //## alt:if(0.0 != valueF)
  941         //##NEU:
  942         if (valueF >= 0.01 )
  943         {
  944                 TopographyOld.fMaxAngleEscape= valueF;
  945         }
  946         else
  947                 return FALSE;
  948 
  949         //##Belichtungszeit
  950         GetDlgItemText(GetHandle(), id_MeasurementTime, buf, 10);
  951         valueL= atol(buf);
  952         //##eine negative Belichtungszeit macht keinen Sinn, da es sich
  953         //##um einen long Wert handelt, sollte nicht mit einem double Wert
  954         //##(0.0) verglichen werden
  955         //## alt: if(0.0 != valueL)
  956         //##NEU:
  957         if ( (valueL > 0) )
  958         {
  959                 TopographyOld.lMeasurementTime= valueL * 60l;
  960         }
  961         else
  962                 return FALSE;
  963 
  964         //##Anzahl Zyklen fuer Mehrfachbelichtung
  965         //##eigentlich wird dieser Wert nur benoetigt, falls Mehrfachbelichtung
  966         //##angekreuzt ist
  967         GetDlgItemText(GetHandle(), id_Shots, buf, 10);
  968         //##nNumberCycle ist vom Type WORD (vorzeichenlos, max. 65535)
  969         //##im Eingabefeld koennen aber auch groessere Werte und negative Werte
  970         //##eingegeben werden, beides fuehrt zu Ueberlaeufen
  971         //##alt: valueI= (short)atoi(buf);
  972         //##alt: if(0.0 != valueI)
  973         //##NEU:
  974         valueL= atol(buf);
  975         if ( (valueL > 0) && (valueL <= 65535L) )
  976         {
  977                 TopographyOld.nNumberCycle= valueL;
  978         }
  979         else
  980                 return FALSE;
  981 
  982         //##Lage des Arbeitspunktes relativ zur aktuellen Intensitaet
  983         GetDlgItemText(GetHandle(), id_WorkPoint, buf, 10);
  984         valueF= atof(buf);
  985         //##ist der Betrag < 0.001 gibt es bei erneuter Darstellung Probleme
  986         //## alt: if(0.0 != valueF)
  987         //##NEU:
  988         if ( (valueF >= 0.001) || (valueF <= -0.001))
  989         {
  990                 TopographyOld.bSmallAngleSide= (valueF < 0.0);
  991                 TopographyOld.fWorkPoint= fabs(valueF / 100);
  992         }
  993         else
  994                 return FALSE;
  995 
  996         //##maximale Zaehlzeit des Detektors
  997         GetDlgItemText(GetHandle(), id_MaxTime, buf, 10);
  998         valueF= atof(buf);
  999         //##negative Werte sind nicht sinnvoll, ist der Wert < 0.0001 ist
 1000         //##die Neudarstellung fehlerhaft
 1001         //## alt: if(0.0 != valueF)
 1002         //##NEU:
 1003         if ( valueF >= 0.0001 )
 1004         {
 1005                 TopographyOld.fMaxTime= valueF;
 1006         }
 1007         else
 1008                 return FALSE;
 1009 
 1010         //##maximale Zaehlercounts
 1011         GetDlgItemText(GetHandle(), id_MaxCounts, buf, 10);
 1012         valueL= atol(buf);
 1013         //##ein negativer Wert ist hier nicht sinnvoll, da es sich um einen
 1014         //##long Wert handelt, sollte nicht mit einem double Wert (0.0)
 1015         //##verglichen werden
 1016         // alt: if(0.0 != valueL)
 1017         //##NEU:
 1018         if ( valueL > 0 )
 1019         {
 1020                 TopographyOld.dwMaxCounts= valueL;
 1021         }
 1022         else
 1023                 return FALSE;
 1024 
 1025         TopographyOld.nMotor= nMotor;
 1026         TopographyOld.Sensor= Detector;
 1027         TopographyOld.Monitor= Monitor;
 1028         return TRUE;
 1029 };
 1030 
 1031 //##Aufraeumen beim Schliessen des Einstellungen Topographie Fenster
 1032 void TTopographySetParamDlg::LeaveDialog(void)
 1033 {
 1034         //JP 12.08.2002
 1035         // Vorher sollte da wenigstens ein vernuenftiger Wert reingeschrieben werden
 1036         // mlSetAxis(nOldMotor);
 1037 };
 1038 //******************************************************************************
 1039 // __LastLine__
 1040 
 1041