diff options
Diffstat (limited to 'app/bin/tbezier.c')
-rw-r--r-- | app/bin/tbezier.c | 79 |
1 files changed, 37 insertions, 42 deletions
diff --git a/app/bin/tbezier.c b/app/bin/tbezier.c index 8d7ca6c..80feedb 100644 --- a/app/bin/tbezier.c +++ b/app/bin/tbezier.c @@ -334,7 +334,7 @@ static void UpdateBezier( track_p trk, int inx, descData_p descUpd, BOOL_T final } if (updateEndPts) { if ( GetTrkEndTrk(trk,0) == NULL ) { - SetTrkEndPoint( trk, 0, bezData.pos[0], NormalizeAngle( FindAngle(bezData.pos[0], bezData.pos[1]) ) ); + SetTrkEndPoint( trk, 0, bezData.pos[0], NormalizeAngle( FindAngle(bezData.pos[1], bezData.pos[0]) ) ); bezData.angle[0] = GetTrkEndAngle(trk,0); bezDesc[A0].mode |= DESC_CHANGE; GetTrackParams(PARAMS_CORNU,trk,xx->bezierData.pos[0],¶ms); @@ -584,7 +584,6 @@ static void ReadBezier( char * line ) static void MoveBezier( track_p trk, coOrd orig ) { struct extraData *xx = GetTrkExtraData(trk); - UndoModify(trk); for (int i=0;i<4;i++) { xx->bezierData.pos[i].x += orig.x; xx->bezierData.pos[i].y += orig.y; @@ -597,7 +596,6 @@ static void MoveBezier( track_p trk, coOrd orig ) static void RotateBezier( track_p trk, coOrd orig, ANGLE_T angle ) { struct extraData *xx = GetTrkExtraData(trk); - UndoModify(trk); for (int i=0;i<5;i++) { Rotate( &xx->bezierData.pos[i], orig, angle ); } @@ -609,7 +607,6 @@ static void RotateBezier( track_p trk, coOrd orig, ANGLE_T angle ) static void RescaleBezier( track_p trk, FLOAT_T ratio ) { struct extraData *xx = GetTrkExtraData(trk); - UndoModify(trk); xx->bezierData.pos[0].x *= ratio; xx->bezierData.pos[0].y *= ratio; xx->bezierData.pos[1].x *= ratio; @@ -774,7 +771,7 @@ LOG( log_traverseBezier, 2, ( " TraverseBezierL D%0.3f A%0.3f\n", dist, angle ) *distR = dist; //Tell caller what is left //Must be at one end or another trvTrk->pos = GetTrkEndPos(trk,ep); - trvTrk->angle = NormalizeAngle(GetTrkEndAngle(trk, ep)+(segs_backwards?180:0)); + trvTrk->angle = NormalizeAngle(GetTrkEndAngle(trk, ep));//+(segs_backwards?180:0)) trvTrk->trk = GetTrkEndTrk(trk,ep); //go to next track if (trvTrk->trk==NULL) { trvTrk->pos = pos2; @@ -1205,47 +1202,45 @@ LOG( log_bezierSegments, 1, ( " BezTr1-Exit -> A%0.3f B%d R%d N%d D%0.3f\n", case SEGPROC_TRAVERSE2: if (segPtr->type != SEG_BEZTRK) return; //Not SEG_BEZLIN LOG( log_bezierSegments, 1, ( " BezTr2-Enter D%0.3f SD%d SI%d SB%d\n", data->traverse2.dist, data->traverse2.segDir, data->traverse2.BezSegInx, data->traverse2.segs_backwards)) - if (data->traverse2.dist <= segPtr->u.b.length) { - - segProcData.traverse2.pos = data->traverse2.pos; - DIST_T dist = data->traverse2.dist; - segProcData.traverse2.dist = data->traverse2.dist; - segProcData.traverse2.angle = data->traverse2.angle; - segProcData.traverse2.segDir = data->traverse2.segDir; - segs_backwards = data->traverse2.segs_backwards; - BOOL_T backwards = data->traverse2.segDir; - inx = data->traverse2.BezSegInx; //Special from Traverse1 - while (inx>=0 && inx<segPtr->bezSegs.cnt) { - subSegsPtr = (trkSeg_p)segPtr->bezSegs.ptr+inx; - SegProc(SEGPROC_TRAVERSE2, subSegsPtr, &segProcData); - if (segProcData.traverse2.dist<=0) { //Done - data->traverse2.angle = segProcData.traverse2.angle; - data->traverse2.dist = 0; - data->traverse2.pos = segProcData.traverse2.pos; + segProcData.traverse2.pos = data->traverse2.pos; + DIST_T dist = data->traverse2.dist; + segProcData.traverse2.dist = data->traverse2.dist; + segProcData.traverse2.angle = data->traverse2.angle; + segProcData.traverse2.segDir = data->traverse2.segDir; + segs_backwards = data->traverse2.segs_backwards; + BOOL_T backwards = data->traverse2.segDir; + inx = data->traverse2.BezSegInx; //Special from Traverse1 + while (inx>=0 && inx<segPtr->bezSegs.cnt) { + subSegsPtr = (trkSeg_p)segPtr->bezSegs.ptr+inx; + SegProc(SEGPROC_TRAVERSE2, subSegsPtr, &segProcData); + if (segProcData.traverse2.dist<=0) { //Done + data->traverse2.angle = segProcData.traverse2.angle; + data->traverse2.dist = 0; + data->traverse2.pos = segProcData.traverse2.pos; LOG( log_bezierSegments, 1, ( " BezTr2-Exit1 -> A%0.3f P[%0.3f %0.3f] \n", data->traverse2.angle, data->traverse2.pos.x, data->traverse2.pos.y )) - return; - } else dist = segProcData.traverse2.dist; - p2 = segProcData.traverse2.pos; - a2 = segProcData.traverse2.angle; + return; + } else dist = segProcData.traverse2.dist; + p2 = segProcData.traverse2.pos; + a2 = segProcData.traverse2.angle; LOG( log_bezierSegments, 2, ( " BezTr2-Tr2 D%0.3f P[%0.3f %0.3f] A%0.3f\n", dist, p2.x, p2.y, a2 )) - segProcData.traverse1.pos = p2; - segProcData.traverse1.angle = a2; - inx = segs_backwards?inx-1:inx+1; - if (inx<0 || inx>=segPtr->bezSegs.cnt) break; - subSegsPtr = (trkSeg_p)segPtr->bezSegs.ptr+inx; - SegProc(SEGPROC_TRAVERSE1, subSegsPtr, &segProcData); - BOOL_T reverse_seg = segProcData.traverse1.reverse_seg; //For Info only - backwards = segProcData.traverse1.backwards; - dist += segProcData.traverse1.dist; //Add extra if needed - this is if we have to go from the other end of this seg - segProcData.traverse2.dist = dist; //distance left - segProcData.traverse2.segDir = backwards; //which way - segProcData.traverse2.pos = p2; - segProcData.traverse2.angle = a2; + segProcData.traverse1.pos = p2; + segProcData.traverse1.angle = a2 ; + inx = segs_backwards?inx-1:inx+1; + if (inx<0 || inx>=segPtr->bezSegs.cnt) break; + subSegsPtr = (trkSeg_p)segPtr->bezSegs.ptr+inx; + SegProc(SEGPROC_TRAVERSE1, subSegsPtr, &segProcData); + BOOL_T reverse_seg = segProcData.traverse1.reverse_seg; //For Info only + backwards = segProcData.traverse1.backwards; + BOOL_T neg_seg = segProcData.traverse1.negative; + dist += segProcData.traverse1.dist; //Add extra if needed - this is if we have to go from the other end of this seg + segProcData.traverse2.dist = dist; //distance left + segProcData.traverse2.segDir = backwards; //which way + segProcData.traverse2.pos = p2; + segProcData.traverse2.angle = NormalizeAngle(a2 + neg_seg?180:0); LOG( log_bezierSegments, 2, ( " BezTr2-Loop A%0.3f P[%0.3f %0.3f] D%0.3f SI%d B%d RS%d\n", a2, p2.x, p2.y, dist, inx, backwards, reverse_seg )) - } - data->traverse2.dist = dist; - } else data->traverse2.dist -= segPtr->u.b.length; //we got here because the desired point is not inside the segment + } + data->traverse2.dist = dist; if (segs_backwards) { data->traverse2.pos = segPtr->u.b.pos[0]; // Backwards so point 0 data->traverse2.angle = segPtr->u.b.angle0; |