Revision: 838
Author: heuermh
Date: Tue Oct 27 14:15:02 2009
Log: adding Point2D getCenter() method to PSWTPath, with unit tests
http://code.google.com/p/piccolo2d/source/detail?r=838
Added:
/piccolo2d.java/trunk/swt/src/test/java/edu/umd/cs/piccolox/swt/PSWTPathTest.java
Modified:
/piccolo2d.java/trunk/swt/src/main/java/edu/umd/cs/piccolox/swt/PSWTPath.java
=======================================
--- /dev/null
+++
/piccolo2d.java/trunk/swt/src/test/java/edu/umd/cs/piccolox/swt/PSWTPathTest.java
Tue Oct 27 14:15:02 2009
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2008-2009, Piccolo2D project, http://piccolo2d.org
+ * Copyright (c) 1998-2008, University of Maryland
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
this list of conditions
+ * and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright
notice, this list of conditions
+ * and the following disclaimer in the documentation and/or other
materials provided with the
+ * distribution.
+ *
+ * None of the name of the University of Maryland, the name of the
Piccolo2D project, or the names of its
+ * contributors may be used to endorse or promote products derived from
this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package edu.umd.cs.piccolox.swt;
+
+import java.awt.geom.Point2D;
+
+import junit.framework.TestCase;
+
+import edu.umd.cs.piccolo.util.PBounds;
+
+/**
+ * Unit test for PSWTPath.
+ */
+public class PSWTPathTest extends TestCase {
+
+ public void testCenterEmpty() {
+ PSWTPath path = new PSWTPath();
+
+ PBounds bounds = path.getBoundsReference();
+ assertEquals(0.0d, bounds.getX(), 0.1d);
+ assertEquals(0.0d, bounds.getY(), 0.1d);
+ assertEquals(0.0d, bounds.getHeight(), 0.1d);
+ assertEquals(0.0d, bounds.getWidth(), 0.1d);
+
+ Point2D center = path.getCenter();
+ assertEquals(0.0d, center.getX(), 0.1d);
+ assertEquals(0.0d, center.getY(), 0.1d);
+ }
+
+ public void testCenter() {
+ PSWTPath path = PSWTPath.createRectangle(10.0f, 20.0f, 100.0f,
200.0f);
+
+ PBounds bounds = path.getBoundsReference();
+ // hard to believe the tolerance in SWT is this poor
+ assertEquals(10.0d, bounds.getX(), 1.0d);
+ assertEquals(20.0d, bounds.getY(), 1.0d);
+ assertEquals(200.0d, bounds.getHeight(), 2.0d);
+ assertEquals(100.0d, bounds.getWidth(), 2.0d);
+
+ Point2D center = path.getCenter();
+ assertEquals(60.0d, center.getX(), 0.1d);
+ assertEquals(120.0d, center.getY(), 0.1d);
+ }
+
+ public void testCenterScale() {
+ PSWTPath path = PSWTPath.createRectangle(10.0f, 20.0f, 100.0f,
200.0f);
+ path.scale(10.0d);
+
+ PBounds bounds = path.getBoundsReference();
+ // hard to believe the tolerance in SWT is this poor
+ assertEquals(10.0d, bounds.getX(), 1.0d);
+ assertEquals(20.0d, bounds.getY(), 1.0d);
+ assertEquals(200.0d, bounds.getHeight(), 2.0d);
+ assertEquals(100.0d, bounds.getWidth(), 2.0d);
+
+ // center is calculated in terms of local bounds, not full bounds
+ Point2D center = path.getCenter();
+ assertEquals(60.0d, center.getX(), 0.1d);
+ assertEquals(120.0d, center.getY(), 0.1d);
+ }
+
+ public void testCenterRotate() {
+ PSWTPath path = PSWTPath.createRectangle(10.0f, 20.0f, 100.0f,
200.0f);
+ path.rotate(Math.PI / 8.0d);
+
+ PBounds bounds = path.getBoundsReference();
+ // hard to believe the tolerance in SWT is this poor
+ assertEquals(10.0d, bounds.getX(), 1.0d);
+ assertEquals(20.0d, bounds.getY(), 1.0d);
+ assertEquals(200.0d, bounds.getHeight(), 2.0d);
+ assertEquals(100.0d, bounds.getWidth(), 2.0d);
+
+ // center is calculated in terms of local bounds, not full bounds
+ Point2D center = path.getCenter();
+ assertEquals(60.0d, center.getX(), 0.1d);
+ assertEquals(120.0d, center.getY(), 0.1d);
+ }
+}
=======================================
---
/piccolo2d.java/trunk/swt/src/main/java/edu/umd/cs/piccolox/swt/PSWTPath.java
Mon Oct 26 12:26:02 2009
+++
/piccolo2d.java/trunk/swt/src/main/java/edu/umd/cs/piccolox/swt/PSWTPath.java
Tue Oct 27 14:15:02 2009
@@ -560,4 +560,14 @@
}
setShape(path);
}
-}
+
+ /**
+ * Return the center of this SWT path node, based on its bounds.
+ *
+ * @return the center of this SWT path node, based on its bounds
+ */
+ public Point2D getCenter() {
+ PBounds bounds = getBoundsReference();
+ return new Point2D.Double(bounds.x + (bounds.width / 2.0),
bounds.y + (bounds.height / 2.0));
+ }
+}
--~--~---------~--~----~------------~-------~--~----~
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en
-~----------~----~----~----~------~----~------~--~---