private void SendControlParameters(List <Point3D> ViewPoint, byte[, ,] ImgDataToFlash) { List <Point3D> ViewDescriptor = new List <Point3D>(); if (GlobalProperties.ViewPointMode) { ViewDescriptor.Add(ViewPoint[0]); ViewDescriptor.Add(ViewPoint[1]); ViewDescriptor.Add(ViewPoint[2]); } Visualization.ProjectDescriptor(ViewPoint, CenterProjXY, imgR, FrameRows); List <Point3D> currentOrientation = calibrateModule.RecalcOrientation(ViewPoint); if (GlobalProperties.ViewPointMode) { if (checkBoxPan.Checked) { ViewDescriptor.Add(currentOrientation[0].Clone()); } else { ViewDescriptor.Add(new Point3D(0, 0, 0)); } ViewDescriptor.Add(currentOrientation[1]); ViewDescriptor.Add(currentOrientation[2]); ViewDescriptor.Add(currentOrientation[3]); } // Recalibrate every frame if (calibrateModule.p0translation != null) { // Move current frame with translation of calibration frame Geometry.p_add(currentOrientation, calibrateModule.p0translation, -1); // Rotation of whole current coordinate system with parameters of calibration Geometry.p_rotY(currentOrientation, calibrateModule.ySinCosAxis, -1); Geometry.p_rotZ(currentOrientation, calibrateModule.zSinCosAxis, -1); Geometry.p_rotX(currentOrientation, calibrateModule.xSinCosAxis, -1); // Move back current frame with translation of calibration frame Geometry.p_add(currentOrientation, calibrateModule.p0translation, 1); CalibrationCopy = Geometry.CloneList(calibrateModule.CalibrationOrientation[0]); // Move current frame to origin and calculate align parameters TranslationCurr = currentOrientation[0].Clone(); Geometry.p_add(currentOrientation, currentOrientation[0].Clone(), -1); currParam = Geometry.align_calc_pars( currentOrientation[0], currentOrientation[1], currentOrientation[2]); // Rotate Current frame coordinate system to coincide with XYZ ySinCosCurr = Geometry.calc_rotY(currentOrientation[1]); Geometry.p_rotY(currentOrientation, ySinCosCurr, -1); zSinCosCurr = Geometry.calc_rotZ(currentOrientation[1]); Geometry.p_rotZ(currentOrientation, zSinCosCurr, -1); xSinCosCurr = Geometry.calc_rotX(currentOrientation[2]); Geometry.p_rotX(currentOrientation, xSinCosCurr, -1); //Align current orientation with parameters of calibration and current frame parameters before rotation Geometry.align(currentOrientation, currParam, calibrateModule.AlignParamCalibration); // Translate back with current frame translation Geometry.p_add(currentOrientation, TranslationCurr.Clone(), 1); //VisualizeCoordinateSystem(currentOrientation, true); } OnSendParameters(ViewDescriptor, currentOrientation); if (calibrateModule.IsCalibrate) { calibrateModule.CalcCalibration(ViewPoint, ImgDataToFlash); } if ((checkBoxCharts.Checked) && (!chartPoint.IsDisposed)) { // chartPt1.UpdateChart(ViewPoint[1].X, ViewPoint[1].Y, ViewPoint[1].Z); // chartPtD1.UpdateChart(dArr1.X, dArr1.Y, dArr1.Z); } // Call subscribers for this event //if (checkBoxDrawViewPoint.Checked && (DrawViewPoint != null)) // DrawViewPoint(this, new DrawViewPointEventArgs(ViewPoint, true)); }