Guest User

Bed Comp Segment from Repetier Firmware

a guest
Jan 22nd, 2016
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.78 KB | None | 0 0
  1. #if FEATURE_AUTOLEVEL
  2. void Printer::transformToPrinter(float x,float y,float z,float &transX,float &transY,float &transZ) {
  3. #if FEATURE_AXISCOMP
  4.     // Axis compensation:
  5.     x = x + y * EEPROM::axisCompTanXY() + z * EEPROM::axisCompTanXZ();
  6.     y = y + z * EEPROM::axisCompTanYZ();
  7. #endif
  8.     transX = x * autolevelTransformation[0] + y * autolevelTransformation[3] + z * autolevelTransformation[6];
  9.     transY = x * autolevelTransformation[1] + y * autolevelTransformation[4] + z * autolevelTransformation[7];
  10.     transZ = x * autolevelTransformation[2] + y * autolevelTransformation[5] + z * autolevelTransformation[8];
  11. }
  12.  
  13. void Printer::transformFromPrinter(float x,float y,float z,float &transX,float &transY,float &transZ) {
  14.     transX = x * autolevelTransformation[0] + y * autolevelTransformation[1] + z * autolevelTransformation[2];
  15.     transY = x * autolevelTransformation[3] + y * autolevelTransformation[4] + z * autolevelTransformation[5];
  16.     transZ = x * autolevelTransformation[6] + y * autolevelTransformation[7] + z * autolevelTransformation[8];
  17. #if FEATURE_AXISCOMP
  18.     // Axis compensation:
  19.     transY = transY - transZ * EEPROM::axisCompTanYZ();
  20.     transX = transX - transY * EEPROM::axisCompTanXY() - transZ * EEPROM::axisCompTanXZ();
  21. #endif
  22. }
  23.  
  24. void Printer::resetTransformationMatrix(bool silent) {
  25.     autolevelTransformation[0] = autolevelTransformation[4] = autolevelTransformation[8] = 1;
  26.     autolevelTransformation[1] = autolevelTransformation[2] = autolevelTransformation[3] =
  27.                                      autolevelTransformation[5] = autolevelTransformation[6] = autolevelTransformation[7] = 0;
  28.     if(!silent)
  29.         Com::printInfoFLN(Com::tAutolevelReset);
  30. }
  31.  
  32. void Printer::buildTransformationMatrix(float h1,float h2,float h3) {
  33.     float ax = EEPROM::zProbeX2()-EEPROM::zProbeX1();
  34.     float ay = EEPROM::zProbeY2()-EEPROM::zProbeY1();
  35.     float az = h1-h2;
  36.     float bx = EEPROM::zProbeX3()-EEPROM::zProbeX1();
  37.     float by = EEPROM::zProbeY3()-EEPROM::zProbeY1();
  38.     float bz = h1-h3;
  39.     // First z direction
  40.     autolevelTransformation[6] = ay * bz - az * by;
  41.     autolevelTransformation[7] = az * bx - ax * bz;
  42.     autolevelTransformation[8] = ax * by - ay * bx;
  43.     float len = sqrt(autolevelTransformation[6] * autolevelTransformation[6] + autolevelTransformation[7] * autolevelTransformation[7] + autolevelTransformation[8] * autolevelTransformation[8]);
  44.     if(autolevelTransformation[8] < 0) len = -len;
  45.     autolevelTransformation[6] /= len;
  46.     autolevelTransformation[7] /= len;
  47.     autolevelTransformation[8] /= len;
  48.     autolevelTransformation[3] = 0;
  49.     autolevelTransformation[4] = autolevelTransformation[8];
  50.     autolevelTransformation[5] = -autolevelTransformation[7];
  51.     // cross(y,z)
  52.     autolevelTransformation[0] = autolevelTransformation[4] * autolevelTransformation[8] - autolevelTransformation[5] * autolevelTransformation[7];
  53.     autolevelTransformation[1] = autolevelTransformation[5] * autolevelTransformation[6];// - autolevelTransformation[3] * autolevelTransformation[8];
  54.     autolevelTransformation[2] = /*autolevelTransformation[3] * autolevelTransformation[7]*/ - autolevelTransformation[4] * autolevelTransformation[6];
  55.     len = sqrt(autolevelTransformation[0] * autolevelTransformation[0] + autolevelTransformation[1] * autolevelTransformation[1] + autolevelTransformation[2] * autolevelTransformation[2]);
  56.     autolevelTransformation[0] /= len;
  57.     autolevelTransformation[1] /= len;
  58.     autolevelTransformation[2] /= len;
  59.     len = sqrt(autolevelTransformation[4] * autolevelTransformation[4] + autolevelTransformation[5] * autolevelTransformation[5]);
  60.     autolevelTransformation[4] /= len;
  61.     autolevelTransformation[5] /= len;
  62.     Com::printArrayFLN(Com::tTransformationMatrix,autolevelTransformation, 9, 6);
  63. }
  64. #endif
Advertisement
Add Comment
Please, Sign In to add comment