From 5d1ddcb4951cdd30a44f9e2642197d47230bb01e Mon Sep 17 00:00:00 2001
From: kitfox
Date: Sun, 19 Aug 2007 19:51:23 +0000
Subject: Added pickng by rectangular areas. Fixed bug with picking by point.
git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@45 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b
---
src/main/java/com/kitfox/svg/Group.java | 21 +++++++++++++++++++++
src/main/java/com/kitfox/svg/ImageSVG.java | 19 +++++++------------
src/main/java/com/kitfox/svg/RenderableElement.java | 2 ++
src/main/java/com/kitfox/svg/SVGDiagram.java | 12 ++++++++++++
src/main/java/com/kitfox/svg/ShapeElement.java | 21 ++++++++++-----------
src/main/java/com/kitfox/svg/app/SVGPlayer.java | 2 +-
src/main/java/com/kitfox/svg/app/SVGViewer.java | 2 +-
src/main/res/res/help/about/about.html | 2 +-
8 files changed, 55 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/kitfox/svg/Group.java b/src/main/java/com/kitfox/svg/Group.java
index 8446049..5b4db2b 100644
--- a/src/main/java/com/kitfox/svg/Group.java
+++ b/src/main/java/com/kitfox/svg/Group.java
@@ -121,6 +121,27 @@ public class Group extends ShapeElement {
}
}
+ void pick(Rectangle2D pickArea, AffineTransform ltw, Vector retVec) throws SVGException
+ {
+ if (xform != null)
+ {
+ ltw = new AffineTransform(ltw);
+ ltw.concatenate(xform);
+ }
+
+
+ for (Iterator it = children.iterator(); it.hasNext();)
+ {
+ SVGElement ele = (SVGElement)it.next();
+ if (ele instanceof RenderableElement)
+ {
+ RenderableElement rendEle = (RenderableElement)ele;
+
+ rendEle.pick(pickArea, ltw, retVec);
+ }
+ }
+ }
+
public void render(Graphics2D g) throws SVGException
{
//Don't process if not visible
diff --git a/src/main/java/com/kitfox/svg/ImageSVG.java b/src/main/java/com/kitfox/svg/ImageSVG.java
index 2d981bc..eb61215 100644
--- a/src/main/java/com/kitfox/svg/ImageSVG.java
+++ b/src/main/java/com/kitfox/svg/ImageSVG.java
@@ -122,20 +122,15 @@ public class ImageSVG extends RenderableElement
void pick(Point2D point, Vector retVec) throws SVGException
{
- /*
- Point2D xPoint = new Point2D.Double();
- try
- {
- xform.inverseTransform(point, xPoint);
- }
- catch (NoninvertibleTransformException ex)
+ if (getBoundingBox().contains(point))
{
- throw new SVGException(ex);
+ retVec.add(getPath(null));
}
- */
-
-// if (bounds.contains(xPoint))
- if (getBoundingBox().contains(point))
+ }
+
+ void pick(Rectangle2D pickArea, AffineTransform ltw, Vector retVec) throws SVGException
+ {
+ if (ltw.createTransformedShape(getBoundingBox()).intersects(pickArea))
{
retVec.add(getPath(null));
}
diff --git a/src/main/java/com/kitfox/svg/RenderableElement.java b/src/main/java/com/kitfox/svg/RenderableElement.java
index 878a132..379afcf 100644
--- a/src/main/java/com/kitfox/svg/RenderableElement.java
+++ b/src/main/java/com/kitfox/svg/RenderableElement.java
@@ -87,6 +87,8 @@ abstract public class RenderableElement extends TransformableElement
abstract void pick(Point2D point, Vector retVec) throws SVGException;
+ abstract void pick(Rectangle2D pickArea, AffineTransform ltw, Vector retVec) throws SVGException;
+
abstract public Rectangle2D getBoundingBox() throws SVGException;
/*
public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent)
diff --git a/src/main/java/com/kitfox/svg/SVGDiagram.java b/src/main/java/com/kitfox/svg/SVGDiagram.java
index aaab400..cdbfa68 100644
--- a/src/main/java/com/kitfox/svg/SVGDiagram.java
+++ b/src/main/java/com/kitfox/svg/SVGDiagram.java
@@ -110,6 +110,18 @@ public class SVGDiagram implements Serializable
return retVec;
}
+ public Vector pick(Rectangle2D pickArea, Vector retVec) throws SVGException
+ {
+ if (retVec == null)
+ {
+ retVec = new Vector();
+ }
+
+ root.pick(pickArea, new AffineTransform(), retVec);
+
+ return retVec;
+ }
+
public SVGUniverse getUniverse()
{
return universe;
diff --git a/src/main/java/com/kitfox/svg/ShapeElement.java b/src/main/java/com/kitfox/svg/ShapeElement.java
index e122753..9bb7b27 100644
--- a/src/main/java/com/kitfox/svg/ShapeElement.java
+++ b/src/main/java/com/kitfox/svg/ShapeElement.java
@@ -66,20 +66,19 @@ abstract public class ShapeElement extends RenderableElement
void pick(Point2D point, Vector retVec) throws SVGException
{
- /*
- Point2D xPoint = new Point2D.Double();
- try
- {
- xform.inverseTransform(point, xPoint);
- }
- catch (NoninvertibleTransformException ex)
+ StyleAttribute styleAttrib = new StyleAttribute();
+// if (getStyle(styleAttrib.setName("fill")) && getShape().contains(point))
+ if (getShape().contains(point))
{
- throw new SVGException(ex);
+ retVec.add(getPath(null));
}
- */
-
+ }
+
+ void pick(Rectangle2D pickArea, AffineTransform ltw, Vector retVec) throws SVGException
+ {
StyleAttribute styleAttrib = new StyleAttribute();
- if (getStyle(styleAttrib.setName("fill")) && getShape().contains(point))
+// if (getStyle(styleAttrib.setName("fill")) && getShape().contains(point))
+ if (ltw.createTransformedShape(getShape()).intersects(pickArea))
{
retVec.add(getPath(null));
}
diff --git a/src/main/java/com/kitfox/svg/app/SVGPlayer.java b/src/main/java/com/kitfox/svg/app/SVGPlayer.java
index 5a9a86b..d2c4b33 100644
--- a/src/main/java/com/kitfox/svg/app/SVGPlayer.java
+++ b/src/main/java/com/kitfox/svg/app/SVGPlayer.java
@@ -337,7 +337,7 @@ public class SVGPlayer extends javax.swing.JFrame
try
{
- URL url = new URL(urlStrn);
+ URL url = new URL(URLEncoder.encode(urlStrn, "UTF-8"));
loadURL(url);
}
catch (Exception e)
diff --git a/src/main/java/com/kitfox/svg/app/SVGViewer.java b/src/main/java/com/kitfox/svg/app/SVGViewer.java
index a9c7507..c991f35 100644
--- a/src/main/java/com/kitfox/svg/app/SVGViewer.java
+++ b/src/main/java/com/kitfox/svg/app/SVGViewer.java
@@ -290,7 +290,7 @@ is.close();
try
{
- URL url = new URL(urlStrn);
+ URL url = new URL(URLEncoder.encode(urlStrn, "UTF-8"));
loadURL(url);
}
catch (Exception e)
diff --git a/src/main/res/res/help/about/about.html b/src/main/res/res/help/about/about.html
index 06443bc..4f57e6c 100644
--- a/src/main/res/res/help/about/about.html
+++ b/src/main/res/res/help/about/about.html
@@ -13,7 +13,7 @@
http://svgsalamander.dev.java.net
http://www.kitfox.com
- Last built: 2007, July, 18 11:59
+ Last built: 2007, July, 30 02:07