void SvgDottedArc(struct ADrawTag *ctx, unsigned int cx, unsigned int cy, unsigned int w, unsigned int h, unsigned int s, unsigned int e) { unsigned int sx, sy, ex, ey; /* Get start and end x,y */ arcPoint(cx, cy, w, h, s, &sx, &sy); arcPoint(cx, cy, w, h, e, &ex, &ey); fprintf(getSvgFile(ctx), "<path d=\"M %u %u A%u,%u 0 0,1 %u,%u\" stroke=\"%s\" fill=\"none\" stroke-dasharray=\"2,2\"/>", sx, sy, w / 2, h / 2, ex, ey, getSvgPen(ctx)); }
int tcGetPosReal(TC_STRUCT const * const tc, int of_point, EmcPose * const pos) { PmCartesian xyz; PmCartesian abc; PmCartesian uvw; double progress=0.0; switch (of_point) { case TC_GET_PROGRESS: progress = tc->progress; break; case TC_GET_ENDPOINT: progress = tc->target; break; case TC_GET_STARTPOINT: progress = 0.0; break; } switch (tc->motion_type){ case TC_RIGIDTAP: if(tc->coords.rigidtap.state > REVERSING) { pmCartLinePoint(&tc->coords.rigidtap.aux_xyz, progress, &xyz); } else { pmCartLinePoint(&tc->coords.rigidtap.xyz, progress, &xyz); } // no rotary move allowed while tapping abc = tc->coords.rigidtap.abc; uvw = tc->coords.rigidtap.uvw; break; case TC_LINEAR: pmCartLinePoint(&tc->coords.line.xyz, progress * tc->coords.line.xyz.tmag / tc->target, &xyz); pmCartLinePoint(&tc->coords.line.uvw, progress * tc->coords.line.uvw.tmag / tc->target, &uvw); pmCartLinePoint(&tc->coords.line.abc, progress * tc->coords.line.abc.tmag / tc->target, &abc); break; case TC_CIRCULAR: pmCirclePoint(&tc->coords.circle.xyz, progress * tc->coords.circle.xyz.angle / tc->target, &xyz); pmCartLinePoint(&tc->coords.circle.abc, progress * tc->coords.circle.abc.tmag / tc->target, &abc); pmCartLinePoint(&tc->coords.circle.uvw, progress * tc->coords.circle.uvw.tmag / tc->target, &uvw); break; case TC_SPHERICAL: arcPoint(&tc->coords.arc.xyz, progress, &xyz); abc = tc->coords.arc.abc; uvw = tc->coords.arc.uvw; break; } pmCartesianToEmcPose(&xyz, &abc, &uvw, pos); return 0; }