Risks: tiny - isolated to LzDrawView.arc()
Rewards: big - fixes arc() behavior, something that a lot of people need!

--
Regards,
Max Carlson
OpenLaszlo.org
--- Begin Message ---
Author: max
Date: 2007-04-05 15:44:12 -0700 (Thu, 05 Apr 2007)
New Revision: 4589

Added:
   openlaszlo/trunk/test/drawing/arctest.lzx
Modified:
   openlaszlo/trunk/WEB-INF/lps/lfc/views/LzDrawView.as
Log:
Change 20070402-maxcarlson-O by [EMAIL PROTECTED] on 2007-04-02 21:02:15 PDT
    in /Users/maxcarlson/openlaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Fix drawview.arc() method in trunk

New Features:

Bugs Fixed: LPP-2343 - arc(..) positions arc incorrectly if starting angle is 
not equal to 0

Technical Reviewer: promanik
QA Reviewer: antun
Doc Reviewer: (pending)

Documentation:

Release Notes:

Details: Merged changes from legals and 
http://www.openlaszlo.org/jira/browse/LPP-3491 to trunk.  Added testcase.  
Verified testcase.


Tests:

Files:
A      test/drawing/arctest.lzx
M      WEB-INF/lps/lfc/views/LzDrawView.as
!      docs/src/wrappers/chart-basezoomarea.xml
!      docs/src/wrappers/resources/contactsdata.xml
!      docs/src/wrappers/data/columnchart-data-example1.xml
!      docs/src/wrappers/data/ebay.xml
!      docs/src/wrappers/data/columnchart-data-example2.xml
!      docs/src/wrappers/data/ebay1.xml
!      docs/src/wrappers/data/ebay1000.xml
!      docs/src/wrappers/data/simple-redsox-data.xml
!      docs/src/wrappers/data/pie-data.xml
!      docs/src/wrappers/data/pie-data2.xml
!      docs/src/wrappers/data/simple.xml
!      docs/src/wrappers/data/redsox-data.xml
!      docs/src/wrappers/data/redsox-data1.xml
!      docs/src/wrappers/data/redsox-data2.xml
!      docs/guide/cookie.jsp
!      docs/guide/hello.lzx.test

Changeset: 
http://svn.openlaszlo.org/openlaszlo/patches/20070402-maxcarlson-O.tar


Modified: openlaszlo/trunk/WEB-INF/lps/lfc/views/LzDrawView.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/views/LzDrawView.as        2007-04-05 
19:54:25 UTC (rev 4588)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/views/LzDrawView.as        2007-04-05 
22:44:12 UTC (rev 4589)
@@ -3,7 +3,7 @@
  *****************************************************************************/
 
 //* A_LZ_COPYRIGHT_BEGIN ******************************************************
-//* Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.            *
+//* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.            *
 //* Use is subject to license terms.                                          *
 //* A_LZ_COPYRIGHT_END ********************************************************
 
@@ -280,12 +280,14 @@
 // @param Number clockwise: anticlockwise if true, clockwise otherwise 
 //-----------------------------------------------------------------------------
 LzDrawView.prototype.arc = function(x, y, radius, startAngle, endAngle, 
clockwise) {
-       x += radius*Math.cos(startAngle);
-       y += radius*Math.sin(startAngle);
-       startAngle *= 180/Math.PI;
-       endAngle *= 180/Math.PI;
-    var arc = clockwise == true ? startAngle - endAngle : endAngle - 
startAngle;
-       this.moveTo(x, y);
+    var sx = x + radius*Math.cos(startAngle);
+    var sy = y + radius*Math.sin(2 * Math.PI - startAngle);
+    startAngle *= 180/Math.PI;
+    endAngle *= 180/Math.PI;
+    var arc = clockwise == true ? ((endAngle - startAngle) - 360): endAngle - 
startAngle; 
+    //move pen to the point along the circle at startAngle
+    this.moveTo(sx, sy);
+    //retain the center of the arc as the center point passed in.
     return this._drawArc(x, y, radius, arc, startAngle);
 }
 
@@ -452,7 +454,7 @@
         yRadius = radius;
     }
     // Init vars
-    var segAngle, theta, angle, angleMid, segs, ax, ay, bx, by, cx, cy;
+    var segAngle, theta, angle, angleMid, segs,bx, by, cx, cy;
     // no sense in drawing more than is needed :)
     if (Math.abs(arc)>360) {
         arc = 360;
@@ -464,13 +466,11 @@
     // Now calculate the sweep of each segment
     segAngle = arc/segs;
     // The math requires radians rather than degrees. To convert from degrees
-    // use the formula (degrees/180)*Math.PI to get radians. 
+    // use the formula (degrees/180)*Math.PI to get radians.
     theta = -(segAngle/180)*Math.PI;
     // convert angle startAngle to radians
     angle = -(startAngle/180)*Math.PI;
-    // find our starting points (ax,ay) relative to the secified x,y
-    ax = x-Math.cos(angle)*radius;
-    ay = y-Math.sin(angle)*yRadius;
+
     // if our arc is larger than 45 degrees, draw as 45 degree segments
     // so that we match Flash's native circle routines.
     if (segs>0) {
@@ -481,19 +481,19 @@
             // find the angle halfway between the last angle and the new
             angleMid = angle-(theta/2);
             // calculate our end point
-            bx = ax+Math.cos(angle)*radius;
-            by = ay+Math.sin(angle)*yRadius;
+            bx = x+Math.cos(angle)*radius;
+            by = y+Math.sin(angle)*yRadius;
             // calculate our control point
-            cx = ax+Math.cos(angleMid)*(radius/Math.cos(theta/2));
-            cy = ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
+            cx = x+Math.cos(angleMid)*(radius/Math.cos(theta/2));
+            cy = y+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
             // draw the arc segment
             this.quadraticCurveTo(cx, cy, bx, by);
         }
     }
     // In the native draw methods the user must specify the end point
     // which means that they always know where they are ending at, but
-    // here the endpoint is unknown unless the user calculates it on their 
-    // own. Lets be nice and let save them the hassle by passing it back. 
+    // here the endpoint is unknown unless the user calculates it on their
+    // own. Lets be nice and let save them the hassle by passing it back.
     return {x:bx, y:by};
 }
 

Added: openlaszlo/trunk/test/drawing/arctest.lzx


Property changes on: openlaszlo/trunk/test/drawing/arctest.lzx
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native


_______________________________________________
Laszlo-checkins mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-checkins

--- End Message ---

Reply via email to