Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #if FEATURE_AUTOLEVEL
- void Printer::transformToPrinter(float x,float y,float z,float &transX,float &transY,float &transZ) {
- #if FEATURE_AXISCOMP
- // Axis compensation:
- x = x + y * EEPROM::axisCompTanXY() + z * EEPROM::axisCompTanXZ();
- y = y + z * EEPROM::axisCompTanYZ();
- #endif
- transX = x * autolevelTransformation[0] + y * autolevelTransformation[3] + z * autolevelTransformation[6];
- transY = x * autolevelTransformation[1] + y * autolevelTransformation[4] + z * autolevelTransformation[7];
- transZ = x * autolevelTransformation[2] + y * autolevelTransformation[5] + z * autolevelTransformation[8];
- }
- void Printer::transformFromPrinter(float x,float y,float z,float &transX,float &transY,float &transZ) {
- transX = x * autolevelTransformation[0] + y * autolevelTransformation[1] + z * autolevelTransformation[2];
- transY = x * autolevelTransformation[3] + y * autolevelTransformation[4] + z * autolevelTransformation[5];
- transZ = x * autolevelTransformation[6] + y * autolevelTransformation[7] + z * autolevelTransformation[8];
- #if FEATURE_AXISCOMP
- // Axis compensation:
- transY = transY - transZ * EEPROM::axisCompTanYZ();
- transX = transX - transY * EEPROM::axisCompTanXY() - transZ * EEPROM::axisCompTanXZ();
- #endif
- }
- void Printer::resetTransformationMatrix(bool silent) {
- autolevelTransformation[0] = autolevelTransformation[4] = autolevelTransformation[8] = 1;
- autolevelTransformation[1] = autolevelTransformation[2] = autolevelTransformation[3] =
- autolevelTransformation[5] = autolevelTransformation[6] = autolevelTransformation[7] = 0;
- if(!silent)
- Com::printInfoFLN(Com::tAutolevelReset);
- }
- void Printer::buildTransformationMatrix(float h1,float h2,float h3) {
- float ax = EEPROM::zProbeX2()-EEPROM::zProbeX1();
- float ay = EEPROM::zProbeY2()-EEPROM::zProbeY1();
- float az = h1-h2;
- float bx = EEPROM::zProbeX3()-EEPROM::zProbeX1();
- float by = EEPROM::zProbeY3()-EEPROM::zProbeY1();
- float bz = h1-h3;
- // First z direction
- autolevelTransformation[6] = ay * bz - az * by;
- autolevelTransformation[7] = az * bx - ax * bz;
- autolevelTransformation[8] = ax * by - ay * bx;
- float len = sqrt(autolevelTransformation[6] * autolevelTransformation[6] + autolevelTransformation[7] * autolevelTransformation[7] + autolevelTransformation[8] * autolevelTransformation[8]);
- if(autolevelTransformation[8] < 0) len = -len;
- autolevelTransformation[6] /= len;
- autolevelTransformation[7] /= len;
- autolevelTransformation[8] /= len;
- autolevelTransformation[3] = 0;
- autolevelTransformation[4] = autolevelTransformation[8];
- autolevelTransformation[5] = -autolevelTransformation[7];
- // cross(y,z)
- autolevelTransformation[0] = autolevelTransformation[4] * autolevelTransformation[8] - autolevelTransformation[5] * autolevelTransformation[7];
- autolevelTransformation[1] = autolevelTransformation[5] * autolevelTransformation[6];// - autolevelTransformation[3] * autolevelTransformation[8];
- autolevelTransformation[2] = /*autolevelTransformation[3] * autolevelTransformation[7]*/ - autolevelTransformation[4] * autolevelTransformation[6];
- len = sqrt(autolevelTransformation[0] * autolevelTransformation[0] + autolevelTransformation[1] * autolevelTransformation[1] + autolevelTransformation[2] * autolevelTransformation[2]);
- autolevelTransformation[0] /= len;
- autolevelTransformation[1] /= len;
- autolevelTransformation[2] /= len;
- len = sqrt(autolevelTransformation[4] * autolevelTransformation[4] + autolevelTransformation[5] * autolevelTransformation[5]);
- autolevelTransformation[4] /= len;
- autolevelTransformation[5] /= len;
- Com::printArrayFLN(Com::tTransformationMatrix,autolevelTransformation, 9, 6);
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment