You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2011/10/26 12:10:06 UTC
svn commit: r1189105 [2/2] - in /poi/trunk/src:
ooxml/java/org/apache/poi/xslf/model/geom/
ooxml/java/org/apache/poi/xslf/model/geom/expr/
ooxml/java/org/apache/poi/xslf/model/geom/path/
ooxml/java/org/apache/poi/xslf/usermodel/ ooxml/testcases/org/apa...
Added: poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/SqrtExpression.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/SqrtExpression.java?rev=1189105&view=auto
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/SqrtExpression.java (added)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/SqrtExpression.java Wed Oct 26 10:10:05 2011
@@ -0,0 +1,46 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.apache.poi.xslf.model.geom;
+
+import java.util.regex.Matcher;
+
+/**
+ * Square Root Formula:
+ * <gd name="x" fmla="sqrt y"/>
+ *
+ * <p>
+ * Arguments: 1 (fmla="sqrt x")
+ * Usage: "sqrt x" = sqrt(x) = value of this guide
+ * </p>
+ * @author Yegor Kozlov
+ */
+public class SqrtExpression implements Expression {
+ private String arg;
+
+ SqrtExpression(Matcher m){
+ arg =m.group(1);
+ }
+
+ public double evaluate(Context ctx){
+ double val = ctx.getValue(arg);
+ return Math.sqrt(val);
+ }
+
+}
Added: poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/TanExpression.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/TanExpression.java?rev=1189105&view=auto
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/TanExpression.java (added)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/model/geom/TanExpression.java Wed Oct 26 10:10:05 2011
@@ -0,0 +1,50 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.apache.poi.xslf.model.geom;
+
+import java.util.regex.Matcher;
+
+/**
+ * Tangent Formula:
+ *
+ * <gd name="z" fmla="tan x y"/>
+ *
+ * <p>
+ * Arguments: 2 (fmla="tan x y")
+ * Usage: "tan x y" = (x * tan( y )) = value of this guide
+ * </p>
+ *
+ * @author Yegor Kozlov
+ */
+public class TanExpression implements Expression {
+ private String arg1, arg2;
+
+ TanExpression(Matcher m){
+ arg1 = m.group(1);
+ arg2 = m.group(2);
+ }
+
+ public double evaluate(Context ctx){
+ double x = ctx.getValue(arg1);
+ double y = ctx.getValue(arg2);
+ return x * Math.tan(Math.toRadians(y / 60000));
+ }
+
+}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java?rev=1189105&r1=1189104&r2=1189105&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java Wed Oct 26 10:10:05 2011
@@ -21,6 +21,10 @@ package org.apache.poi.xslf.usermodel;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
+import org.apache.poi.xslf.model.geom.Context;
+import org.apache.poi.xslf.model.geom.CustomGeometry;
+import org.apache.poi.xslf.model.geom.Path;
+import org.apache.poi.xslf.model.geom.PresetGeometries;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuideList;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
@@ -42,6 +46,7 @@ import org.openxmlformats.schemas.presen
import java.awt.*;
import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;
@@ -100,39 +105,4 @@ public class XSLFAutoShape extends XSLFT
}
return txBody;
}
-
- int getAdjustValue(String name, int defaultValue){
- /*
- CTShape shape = (CTShape) getXmlObject();
- CTGeomGuideList av = shape.getSpPr().getPrstGeom().getAvLst();
- if(av != null){
- for(CTGeomGuide gd : av.getGdList()){
- if(gd.getName().equals(name)) {
- String fmla = gd.getFmla();
- Matcher m = adjPtrn.matcher(fmla);
- if(m.matches()){
- int val = Integer.parseInt(m.group(1));
- return 21600*val/100000;
- }
- }
- }
- }
- */
- return defaultValue;
- }
-
- @Override
- protected java.awt.Shape getOutline(){
- java.awt.Shape outline = XSLFPresetGeometry.getOutline(this);
- Rectangle2D anchor = getAnchor();
-
- AffineTransform at = new AffineTransform();
- at.translate(anchor.getX(), anchor.getY());
- at.scale(
- 1.0f/21600*anchor.getWidth(),
- 1.0f/21600*anchor.getHeight()
- );
- return outline == null ? anchor : at.createTransformedShape(outline);
- }
-
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java?rev=1189105&r1=1189104&r2=1189105&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java Wed Oct 26 10:10:05 2011
@@ -223,18 +223,6 @@ public class XSLFConnectorShape extends
}
}
- @Override
- protected java.awt.Shape getOutline() {
- Rectangle2D anchor = getAnchor();
- double x1 = anchor.getX(),
- y1 = anchor.getY(),
- x2 = anchor.getX() + anchor.getWidth(),
- y2 = anchor.getY() + anchor.getHeight();
-
-
- return new Line2D.Double(x1, y1, x2, y2);
- }
-
Shape getTailDecoration() {
LineEndLength tailLength = getLineTailLength();
LineEndWidth tailWidth = getLineTailWidth();
@@ -307,9 +295,10 @@ public class XSLFConnectorShape extends
double scaleX = 1;
switch (getLineHeadDecoration()) {
case OVAL:
- scaleY = Math.pow(2, headWidth.ordinal());
- scaleX = Math.pow(2, headLength.ordinal());
shape = new Ellipse2D.Double(0, 0, lineWidth * scaleX, lineWidth * scaleY);
+ bounds = shape.getBounds2D();
+ at.translate(x1 - bounds.getWidth() / 2, y1 - bounds.getHeight() / 2);
+ at.rotate(alpha, bounds.getX() + bounds.getWidth() / 2, bounds.getY() + bounds.getHeight() / 2);
break;
case STEALTH:
case ARROW:
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java?rev=1189105&r1=1189104&r2=1189105&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java Wed Oct 26 10:10:05 2011
@@ -19,35 +19,22 @@
package org.apache.poi.xslf.usermodel;
+import org.apache.poi.xslf.model.geom.*;
import org.apache.poi.xslf.usermodel.LineCap;
import org.apache.poi.xslf.usermodel.LineDash;
import org.apache.poi.xslf.model.PropertyFetcher;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
import org.apache.xmlbeans.XmlObject;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTLineProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetLineDashProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrix;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.STLineCap;
-import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal;
-import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTEffectStyleItem;
+import org.openxmlformats.schemas.drawingml.x2006.main.*;
import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;
import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;
import java.awt.*;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
/**
* @author Yegor Kozlov
@@ -674,4 +661,55 @@ public abstract class XSLFSimpleShape ex
return ok;
}
+
+ @Override
+ protected java.awt.Shape getOutline(){
+ PresetGeometries dict = PresetGeometries.getInstance();
+ String name = getSpPr().getPrstGeom().getPrst().toString();
+ CustomGeometry geom = dict.get(name);
+ Rectangle2D anchor = getAnchor();
+ if(geom != null) {
+ // the guides in the shape definitions are all defined relative to each other,
+ // so we build the path starting from (0,0).
+ final Rectangle2D anchorEmu = new Rectangle2D.Double(
+ 0,
+ 0,
+ Units.toEMU(anchor.getWidth()),
+ Units.toEMU(anchor.getHeight())
+ );
+
+ GeneralPath path = new GeneralPath();
+ Context ctx = new Context(geom, new IAdjustableShape() {
+ public Rectangle2D getAnchor() {
+ return anchorEmu;
+ }
+
+ public Guide getAdjustValue(String name) {
+ CTPresetGeometry2D prst = getSpPr().getPrstGeom();
+ if(prst.isSetAvLst()) {
+ for(CTGeomGuide g : prst.getAvLst().getGdList()){
+ if(g.getName().equals(name)) {
+ return new Guide(g);
+ }
+ }
+ }
+ return null;
+ }
+ });
+
+ for(Path p : geom){
+ path.append( p.getPath(ctx) , false);
+ }
+
+ // translate the result to the canvas coordinates in points
+ AffineTransform at = new AffineTransform();
+ at.scale(
+ 1.0/Units.EMU_PER_POINT, 1.0/Units.EMU_PER_POINT);
+ at.translate(Units.toEMU(anchor.getX()), Units.toEMU(anchor.getY()));
+ return at.createTransformedShape(path);
+ } else {
+ return anchor;
+ }
+ }
+
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java?rev=1189105&r1=1189104&r2=1189105&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java Wed Oct 26 10:10:05 2011
@@ -23,6 +23,9 @@ import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
import org.apache.poi.xslf.model.PropertyFetcher;
import org.apache.poi.xslf.model.TextBodyPropertyFetcher;
+import org.apache.poi.xslf.model.geom.Context;
+import org.apache.poi.xslf.model.geom.CustomGeometry;
+import org.apache.poi.xslf.model.geom.Path;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties;
@@ -33,6 +36,7 @@ import org.openxmlformats.schemas.drawin
import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;
import java.awt.*;
+import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
@@ -391,15 +395,14 @@ public abstract class XSLFTextShape exte
Color fillColor = getFillColor();
Color lineColor = getLineColor();
if(shadow != null) {
- shadow.draw(graphics);
+ //shadow.draw(graphics);
}
-
if (fillColor != null) {
graphics.setColor(fillColor);
applyFill(graphics);
graphics.fill(outline);
}
-
+
if (lineColor != null){
graphics.setColor(lineColor);
applyStroke(graphics);
Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java?rev=1189105&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java Wed Oct 26 10:10:05 2011
@@ -0,0 +1,40 @@
+package org.apache.poi.xslf.geom;
+
+import junit.framework.TestCase;
+import org.apache.poi.xslf.model.geom.*;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
+
+/**
+ * Date: 10/24/11
+ *
+ * @author Yegor Kozlov
+ */
+public class TestFormulaParser extends TestCase {
+ public void testParse(){
+
+ Formula[] ops = {
+ new Guide("adj1", "val 100"),
+ new Guide("adj2", "val 200"),
+ new Guide("adj3", "val -1"),
+ new Guide("a1", "*/ adj1 2 adj2"), // a1 = 100*2 / 200
+ new Guide("a2", "+- adj2 a1 adj1"), // a2 = 200 + a1 - 100
+ new Guide("a3", "+/ adj1 adj2 adj2"), // a3 = (100 + 200) / 200
+ new Guide("a4", "?: adj3 adj1 adj2"), // a4 = adj3 > 0 ? adj1 : adj2
+ new Guide("a5", "abs -2"),
+ };
+
+ CustomGeometry geom = new CustomGeometry(CTCustomGeometry2D.Factory.newInstance());
+ Context ctx = new Context(geom, null);
+ for(Formula fmla : ops) {
+ ctx.evaluate(fmla);
+ }
+
+ assertEquals(100.0, ctx.getValue("adj1"));
+ assertEquals(200.0, ctx.getValue("adj2"));
+ assertEquals(1.0, ctx.getValue("a1"));
+ assertEquals(101.0, ctx.getValue("a2"));
+ assertEquals(1.5, ctx.getValue("a3"));
+ assertEquals(200.0, ctx.getValue("a4"));
+ assertEquals(2.0, ctx.getValue("a5"));
+ }
+}
Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java?rev=1189105&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java Wed Oct 26 10:10:05 2011
@@ -0,0 +1,39 @@
+package org.apache.poi.xslf.geom;
+
+import junit.framework.TestCase;
+import org.apache.poi.xslf.model.geom.*;
+
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Rectangle2D;
+import java.util.Map;
+
+/**
+ * Date: 10/24/11
+ *
+ * @author Yegor Kozlov
+ */
+public class TestPresetGeometries extends TestCase {
+ public void testRead(){
+
+ Map<String, CustomGeometry> shapes = PresetGeometries.getInstance();
+ assertEquals(186, shapes.size());
+
+
+ for(String name : shapes.keySet()) {
+ CustomGeometry geom = shapes.get(name);
+ Context ctx = new Context(geom, new IAdjustableShape() {
+ public Rectangle2D getAnchor() {
+ return new Rectangle2D.Double(0, 0, 100, 100);
+ }
+
+ public Guide getAdjustValue(String name) {
+ return null;
+ }
+ });
+ for(Path p : geom){
+ GeneralPath path = p.getPath(ctx);
+ assertNotNull(path);
+ }
+ }
+ }
+}
Modified: poi/trunk/src/resources/scratchpad/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/resources/scratchpad/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml?rev=1189105&r1=1189104&r2=1189105&view=diff
==============================================================================
--- poi/trunk/src/resources/scratchpad/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml (original)
+++ poi/trunk/src/resources/scratchpad/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml Wed Oct 26 10:10:05 2011
@@ -10875,7 +10875,7 @@
<gd name="dx2" fmla="*/ ss a2 100000" />
<gd name="x2" fmla="+- l dx2 0" />
<gd name="dy1" fmla="*/ h a1 200000" />
- <gd name="y1" fmla="+- vc 0 dy" />
+ <gd name="y1" fmla="+- vc 0 dy1" />
<gd name="y2" fmla="+- vc dy1 0" />
<gd name="dx1" fmla="*/ y1 dx2 hd2" />
<gd name="x1" fmla="+- x2 0 dx1" />
@@ -19912,4 +19912,4 @@
</path>
</pathLst>
</wedgeRoundRectCallout>
-</presetShapeDefinitons>
\ No newline at end of file
+</presetShapeDefinitons>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org