Index: trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/laseradjustthread.cpp
===================================================================
--- trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/laseradjustthread.cpp	(revision 4487)
+++ trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/laseradjustthread.cpp	(revision 4488)
@@ -71,9 +71,9 @@
 			getSpot();
 
-//			qsMsg.sprintf( "Spot at: %d,%d",
-//				       		   m_iSpotX, m_iSpotY );
+//			qsMsg.sprintf( "Spot at: %5.1f,%5.1f",
+//				       		   m_dSpotX, m_dSpotY );
 //			QThread::postEvent( m_pReceiver, new ThreadEvent( qsMsg ) );
 
-    	if( m_iSpotX != -1 )
+    	if( m_dSpotX != -1. )
     	{
 				int x,y;
@@ -85,7 +85,7 @@
 					// check that the movement is in the allowed range
           // of the motors (-2500 - 2500)
-					if( ( abs(x + m_pPanel->getX()) > 2500 )
+					if( ( abs(x - m_pPanel->getX()) > 2500 )
 							||
-						  ( abs(y + m_pPanel->getY()) > 2500 ) )
+						  ( abs(y - m_pPanel->getY()) > 2500 ) )
             break;
 
@@ -103,9 +103,11 @@
 		getSpot();
 		getDistToRef(dX, dY);
+		int x,y;
+		calcSteps( x, y );
 
 		pMotor->switchLaser( false );
 		m_pPanel->setLaserOn( false );
 
-		if( (dX > 1.5) || (dY > 1.5) )
+		if( (fabs(dX) > 1.5) || (fabs(dY) > 1.5) )
 		{
 			AMCError aErr( IDS_ERROR_NO_CONVERGENCE );
@@ -154,5 +156,5 @@
   int iNumLEDs = 0;
 
-  m_iCenterX = m_iCenterY = 1;
+  m_dCenterX = m_dCenterY = 1.;
   m_qlSpots.clear();
 
@@ -197,12 +199,12 @@
 		}
     else
-			m_qlSpots.append( new VideoSpot( pActualSpot->getX(), pActualSpot->getY()) );
+			m_qlSpots.append( new VideoSpot( pActualSpot->getX(), pActualSpot->getY(), pActualSpot->getNumPixel()) );
   }
   if( iNumLEDs != 0)
 	{
-		m_iCenterX = (int) rint(dX / iNumLEDs);
-		m_iCenterY = (int) rint(dY / iNumLEDs);
-	}
-//  qDebug("Center at: %d %d -- with %d LEDs",m_iCenterX, m_iCenterY, iNumLEDs );
+		m_dCenterX = dX / iNumLEDs;
+		m_dCenterY = dY / iNumLEDs;
+	}
+//  qDebug("Center at: %5.1f %5.1f -- with %d LEDs",m_dCenterX, m_dCenterY, iNumLEDs );
 }
 
@@ -210,19 +212,19 @@
 void LaserAdjustThread::getDistToRef( double& p_dX, double& p_dY )
 {
-	int iRefX = m_pPanel->getLaserX();
-	int iRefY = m_pPanel->getLaserY();
+	double dRefX = m_pPanel->getLaserX();
+	double dRefY = m_pPanel->getLaserY();
 
 	// Adapt spot for shift of camera center.
-	int iDx, iDy;
-  iDx = m_iCenterX - CAMERA_X;
-  iDy = m_iCenterY - CAMERA_Y;
-  m_iSpotX -= iDx;
-  m_iSpotY -= iDy;
-//	qDebug("Spot at x,y: %4d %4d", m_iSpotX, m_iSpotY );
+	double dDx, dDy;
+  dDx = m_dCenterX - CAMERA_X;
+  dDy = m_dCenterY - CAMERA_Y;
+  m_dSpotX -= dDx;
+  m_dSpotY -= dDy;
+//	qDebug("Spot at x,y: %5.1f %5.1f", m_dSpotX, m_dSpotY );
 
 	// Now we calculate the distance of the real spot to the stored reference position
-	p_dX = (double) (iRefX - m_iSpotX);
-	p_dY = (double) (iRefY - m_iSpotY);
-//	qDebug("Dx Dy: %4.0f %4.0f", dX, dY );
+	p_dX = dRefX - m_dSpotX;
+	p_dY = dRefY - m_dSpotY;
+//	qDebug("Dx Dy: %5.1f %5.1f", p_dX, p_dY );
 }
 
@@ -231,35 +233,18 @@
 {
   double dX, dY;
-	getDistToRef(dX, dY );
-
-	double dAlpha1 = atan( m_pPanel->getSlopeX() );
-	double dAlpha2 = atan( m_pPanel->getSlopeY() );
-//	qDebug("alpha1, alpha2: %7.2f %7.2f", dAlpha1 * 180.0 / 3.1415, dAlpha2 * 180.0 / 3.1415 );
-	double dSinA1 = sin( dAlpha1 );
-	double dSinA2 = sin( dAlpha2 );
-	double dCosA1 = cos( dAlpha1 );
-	double dCosA2 = cos( dAlpha2 );
-
-	double dFacX = dX - ( dY * dCosA2 / dSinA2 );
-	dFacX /= ( dCosA1 - dSinA1 * dCosA2 / dSinA2 );
-	double dFacY = (dY - dFacX * dSinA1) / dSinA2;
-//	qDebug("Factor x,y: %8.2f %8.2f", dFacX, dFacY );
-
-	p_iX = (int) ( dFacX * m_pPanel->getConversionX() );
-	p_iY = (int) ( dFacY * m_pPanel->getConversionY() );
-
-  // convert number of steps to an even number
-	p_iX = (p_iX >> 1) << 1;
-	p_iY = (p_iY >> 1) << 1;
+//	if( m_pPanel->isReversed() )
+//		getDistToRef(dY, dX );
+//  else
+	getDistToRef( dX, dY );
+	m_pPanel->calcSteps( dX, dY, p_iX, p_iY );
 
 	qDebug("Steps till reference: %4d %4d", p_iX, p_iY );
   QCString qsMsg;
-	qsMsg.sprintf( "%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %5d %5d",
+	qsMsg.sprintf( "%3d %3d %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f %5d %5d",
 				 				 m_pPanel->i(), m_pPanel->j(),
-								 m_iCenterX, m_iCenterY,
-								 m_iSpotX, m_iSpotY,
+								 m_dCenterX, m_dCenterY,
+								 m_dSpotX, m_dSpotY,
 				  			 m_pPanel->getLaserX(), m_pPanel->getLaserY(),
-								 (int) rint(dX), (int) rint(dY),
-								 p_iX, p_iY );
+							 	 dX, dY, p_iX, p_iY );
 	QThread::postEvent( m_pReceiver, new ThreadEvent( qsMsg ) );
 }
@@ -310,11 +295,11 @@
 	{
 		VideoSpot* pSpot = m_qlSpots.first();
-		m_iSpotX = pSpot->getX();
-		m_iSpotY = pSpot->getY();
+		m_dSpotX = pSpot->getX();
+		m_dSpotY = pSpot->getY();
 	}
 	else
 	{
-		m_iSpotX = -1;
-		m_iSpotY = -1;
+		m_dSpotX = -1.;
+		m_dSpotY = -1.;
 		if( m_qlSpots.count() == 0)
 		{
Index: trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/laseradjustthread.h
===================================================================
--- trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/laseradjustthread.h	(revision 4487)
+++ trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/laseradjustthread.h	(revision 4488)
@@ -43,11 +43,11 @@
 	bool							m_zOn;
   /**  */
-  int								m_iCenterX;
+  double						m_dCenterX;
   /**  */
-  int								m_iCenterY;
+  double						m_dCenterY;
   /**  */
-  int								m_iSpotX;
+  double						m_dSpotX;
   /**  */
-  int								m_iSpotY;
+  double						m_dSpotY;
   /** No descriptions */
 	QList<VideoSpot>  m_qlSpotList;
