#include <Link.h>
#include <Axis.h>
Link::Link( Axis* aSuperiorAxis, Axis* aSubordinateAxis, float aScale ) {
superiorAxis = aSuperiorAxis;
subordinateAxis = aSubordinateAxis;
scale = aScale; };
Link::~Link() {
// Remove from the superior chain
Link** superLinkPtrPtr = &subordinateAxis->firstSuperiorLink;
while ( true ) {
Link* superLink = *superLinkPtrPtr;
if ( ! superLink )
break; // program error
if ( superLink == this ) { // byppass self
*superLinkPtrPtr = nextSuperiorLink;
break; };
superLinkPtrPtr = &superLink->nextSuperiorLink; };
// Remove from the subordinate chain
Link** subordinateLinkPtrPtr = &superiorAxis->firstSubordinateLink;
while( true ) {
Link* subLink = *subordinateLinkPtrPtr;
if ( ! subLink )
break; // not found program error
if ( subLink == this ) {
*subordinateLinkPtrPtr = nextSubordinateLink;
break; };
subordinateLinkPtrPtr = &subLink->nextSubordinateLink; }; };
void
Link::calculateTransformedTargets( float microstepDeltaF ) {
subordinateAxis->interpolationMicrostepBuffer += microstepDeltaF * scale; };