@@ -107,16 +107,15 @@ void HangprinterKinematics::Recalc() noexcept
107107
108108 // This is the difference between a "line length" and a "line position"
109109 // "line length" == ("line position" + "line length in origin")
110- lineLengthsOrigin[A_AXIS ] = fastSqrtf (fsquare (anchors[A_AXIS ][0 ]) + fsquare (anchors[A_AXIS ][1 ]) + fsquare (anchors[A_AXIS ][2 ]));
111- lineLengthsOrigin[B_AXIS ] = fastSqrtf (fsquare (anchors[B_AXIS ][0 ]) + fsquare (anchors[B_AXIS ][1 ]) + fsquare (anchors[B_AXIS ][2 ]));
112- lineLengthsOrigin[C_AXIS ] = fastSqrtf (fsquare (anchors[C_AXIS ][0 ]) + fsquare (anchors[C_AXIS ][1 ]) + fsquare (anchors[C_AXIS ][2 ]));
113- lineLengthsOrigin[D_AXIS ] = fastSqrtf (fsquare (anchors[D_AXIS ][0 ]) + fsquare (anchors[D_AXIS ][1 ]) + fsquare (anchors[D_AXIS ][2 ]));
114-
110+ for (size_t i = 0 ; i < HANGPRINTER_AXES ; ++i)
111+ {
112+ lineLengthsOrigin[i] = fastSqrtf (fsquare (anchors[i][0 ]) + fsquare (anchors[i][1 ]) + fsquare (anchors[i][2 ]));
113+ }
115114
116115 // Line buildup compensation
117116 float stepsPerUnitTimesRTmp[HANGPRINTER_AXES ] = { 0.0 };
118117 Platform& platform = reprap.GetPlatform (); // No const because we want to set drive steper per unit
119- for (size_t i = 0 ; i < HANGPRINTER_AXES ; i++ )
118+ for (size_t i = 0 ; i < HANGPRINTER_AXES ; ++i )
120119 {
121120 const uint8_t driver = platform.GetAxisDriversConfig (i).driverNumbers [0 ].localDriver ; // Only supports single driver
122121 bool dummy;
@@ -275,22 +274,15 @@ bool HangprinterKinematics::CartesianToMotorSteps(const float machinePos[], cons
275274 size_t numVisibleAxes, size_t numTotalAxes, int32_t motorPos[], bool isCoordinated) const noexcept
276275{
277276 float squaredLineLengths[HANGPRINTER_AXES ];
278- squaredLineLengths[A_AXIS ] = LineLengthSquared (machinePos, anchors[A_AXIS ]);
279- squaredLineLengths[B_AXIS ] = LineLengthSquared (machinePos, anchors[B_AXIS ]);
280- squaredLineLengths[C_AXIS ] = LineLengthSquared (machinePos, anchors[C_AXIS ]);
281- squaredLineLengths[D_AXIS ] = LineLengthSquared (machinePos, anchors[D_AXIS ]);
282-
283277 float linePos[HANGPRINTER_AXES ];
278+
284279 for (size_t i = 0 ; i < HANGPRINTER_AXES ; ++i)
285280 {
281+ squaredLineLengths[i] = LineLengthSquared (machinePos, anchors[i]);
286282 linePos[i] = fastSqrtf (squaredLineLengths[i]) - lineLengthsOrigin[i];
283+ motorPos[i] = lrintf (k0[i] * (fastSqrtf (spoolRadiiSq[i] + linePos[i] * k2[i]) - spoolRadii[i]));
287284 }
288285
289- motorPos[A_AXIS ] = lrintf (k0[A_AXIS ] * (fastSqrtf (spoolRadiiSq[A_AXIS ] + linePos[A_AXIS ] * k2[A_AXIS ]) - spoolRadii[A_AXIS ]));
290- motorPos[B_AXIS ] = lrintf (k0[B_AXIS ] * (fastSqrtf (spoolRadiiSq[B_AXIS ] + linePos[B_AXIS ] * k2[B_AXIS ]) - spoolRadii[B_AXIS ]));
291- motorPos[C_AXIS ] = lrintf (k0[C_AXIS ] * (fastSqrtf (spoolRadiiSq[C_AXIS ] + linePos[C_AXIS ] * k2[C_AXIS ]) - spoolRadii[C_AXIS ]));
292- motorPos[D_AXIS ] = lrintf (k0[D_AXIS ] * (fastSqrtf (spoolRadiiSq[D_AXIS ] + linePos[D_AXIS ] * k2[D_AXIS ]) - spoolRadii[D_AXIS ]));
293-
294286 return true ;
295287}
296288
@@ -587,10 +579,12 @@ void HangprinterKinematics::ForwardTransform(float const a, float const b, float
587579// Print all the parameters for debugging
588580void HangprinterKinematics::PrintParameters (const StringRef& reply) const noexcept
589581{
590- reply.printf (" Anchor coordinates (%.2f,%.2f,%.2f) (%.2f,%.2f,%.2f) (%.2f,%.2f,%.2f)\n " ,
591- (double )anchors[A_AXIS ][X_AXIS ], (double )anchors[A_AXIS ][Y_AXIS ], (double )anchors[A_AXIS ][Z_AXIS ],
592- (double )anchors[B_AXIS ][X_AXIS ], (double )anchors[B_AXIS ][Y_AXIS ], (double )anchors[B_AXIS ][Z_AXIS ],
593- (double )anchors[C_AXIS ][X_AXIS ], (double )anchors[C_AXIS ][Y_AXIS ], (double )anchors[C_AXIS ][Z_AXIS ]);
582+ reply.printf (" Anchor coordinates" );
583+ for (size_t i = 0 ; i < HANGPRINTER_AXES ; ++i)
584+ {
585+ reply.printf (" (%.2f,%.2f,%.2f)" , (double )anchors[i][X_AXIS ], (double )anchors[i][Y_AXIS ], (double )anchors[i][Z_AXIS ]);
586+ }
587+ reply.printf (" \n " );
594588}
595589
596590#if DUAL_CAN
0 commit comments