X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Farc.cpp;h=9848d38a80e5272dc45ceb52c2963e80a08e4a6f;hb=669a05b5a52bd759f0ea08772e0ed17222b015a0;hp=ad08a572979dc651c6a13592a8126a3001b06d9b;hpb=eb711912d64f17cf9c18c74c4d78d9867bd066ad;p=architektonas diff --git a/src/arc.cpp b/src/arc.cpp index ad08a57..9848d38 100644 --- a/src/arc.cpp +++ b/src/arc.cpp @@ -71,7 +71,8 @@ Arc::~Arc() Vector oldLine = (p3 * (radius * 1.25)) + position; pen = QPen(QColor(0x80, 0x80, 0x80), 1.0, Qt::DashLine); painter->SetPen(pen); - painter->DrawLine((int)position.x, (int)position.y, (int)oldLine.x, (int)oldLine.y); +// painter->DrawLine((int)position.x, (int)position.y, (int)oldLine.x, (int)oldLine.y); + painter->DrawLine(position, oldLine); } // In rotating and setting the span, we draw a line showing where @@ -109,6 +110,7 @@ Arc::~Arc() text = text.arg(radius, 0, 'd', 4).arg(radius / oldRadius * 100.0, 0, 'd', 0); } +#if 0 pen = QPen(QColor(0x00, 0xFF, 0x00), 1.0, Qt::SolidLine); painter->SetPen(pen); painter->SetBrush(QBrush(QColor(0x40, 0xFF, 0x40, 0x9F))); @@ -120,6 +122,9 @@ Arc::~Arc() pen = QPen(QColor(0x00, 0x5F, 0xDF)); painter->SetPen(pen); painter->DrawText(textRect, Qt::AlignVCenter, text); +#else + painter->DrawInformativeText(text); +#endif } } @@ -147,52 +152,16 @@ Also: should put the snap logic into the Object base class (as a static method). /*virtual*/ bool Arc::Collided(Vector point) { objectWasDragged = false; -// Vector v1 = point - position; // Head minus tail (vector points at "point") - -#if 1 bool hitSomething = HitTest(point); draggingCenter = hitCenter; draggingEdge = hitArc; draggingRotate = hitRotate; draggingSpan = hitSpan; -#else - // Check for collision with various things... - hitHandle1 = false; // Moving - hitHandle2 = false; // Rotation - hitHandle3 = false; // Setting span of the arc - hitHandle4 = false; // Resizing -/* -What we have: -the center of the arc -the starting angle -the span of the arc -The point on a unit circle given an angle a is x = cos(a), y = sin(a) -This vector is already unitized, so all we need to do to get our point is to multiply it by -radius (to get the length correct) and add it to the center point (to get the correct position). -*/ - Vector v1 = point - position; // Head minus tail (vector points at "point") - Point p1(cos(startAngle), sin(startAngle)); - Point p2(cos(startAngle + angleSpan), sin(startAngle + angleSpan)); - Vector handle2 = (p1 * radius) + position; - Vector handle3 = (p2 * radius) + position; - double pointerAngle = v1.Angle(); -#if 1 - // Center handle - if (v1.Magnitude() < 10.0) - hitHandle1 = true; - // Span handle - else if (Vector(handle3 - point).Magnitude() < 10.0) - hitHandle3 = true; - // Rotate handle - else if (Vector(handle2 - point).Magnitude() < 10.0) - hitHandle2 = true; - // Resize handle (the arc itself) - else if ((v1.Magnitude() < radius + 3.0) && (v1.Magnitude() > radius - 3.0) - && AngleInArcSpan(pointerAngle)) - hitHandle4 = true; -#endif -#endif + // Now that we've done our hit testing on the non-snapped point, snap it if + // necessary... + if (snapToGrid) + point = SnapPointToGrid(point); /* State Management: @@ -226,7 +195,6 @@ Selected| | | | so let's do like this: */ -// if (hitCenter || hitArc || hitRotate || hitSpan) if (hitSomething) { oldState = state;