@@ -277,13 +277,21 @@ | |||||
<filename name="${optional.package}/ANTLR*"/> | <filename name="${optional.package}/ANTLR*"/> | ||||
</selector> | </selector> | ||||
<selector id="needs.imageio"> | |||||
<or> | |||||
<filename name="${optional.package}/image/ImageIO*"/> | |||||
<filename name="${optional.type.package}/imageio/"/> | |||||
</or> | |||||
</selector> | |||||
<selector id="needs.jmf"> | <selector id="needs.jmf"> | ||||
<filename name="${optional.package}/sound/"/> | <filename name="${optional.package}/sound/"/> | ||||
</selector> | </selector> | ||||
<selector id="needs.jai"> | <selector id="needs.jai"> | ||||
<or> | <or> | ||||
<filename name="${optional.package}/image/"/> | |||||
<filename name="${optional.package}/image/Image.*"/> | |||||
<filename name="${optional.package}/image/ImageTest.*"/> | |||||
<filename name="${optional.type.package}/image/"/> | <filename name="${optional.type.package}/image/"/> | ||||
</or> | </or> | ||||
</selector> | </selector> | ||||
@@ -329,6 +337,7 @@ | |||||
<selector refid="needs.apache-xalan2"/> | <selector refid="needs.apache-xalan2"/> | ||||
<selector refid="needs.commons-logging"/> | <selector refid="needs.commons-logging"/> | ||||
<selector refid="needs.commons-net"/> | <selector refid="needs.commons-net"/> | ||||
<selector refid="needs.imageio"/> | |||||
<selector refid="needs.jai"/> | <selector refid="needs.jai"/> | ||||
<selector refid="needs.javamail"/> | <selector refid="needs.javamail"/> | ||||
<selector refid="needs.jdepend"/> | <selector refid="needs.jdepend"/> | ||||
@@ -444,6 +453,9 @@ | |||||
<available property="apache.oro.present" | <available property="apache.oro.present" | ||||
classname="org.apache.oro.text.regex.Perl5Matcher" | classname="org.apache.oro.text.regex.Perl5Matcher" | ||||
classpathref="classpath" ignoresystemclasses="${ignoresystemclasses}"/> | classpathref="classpath" ignoresystemclasses="${ignoresystemclasses}"/> | ||||
<available property="imageio.present" | |||||
classname="javax.imageio.ImageIO" | |||||
classpathref="classpath"/> | |||||
<available property="jmf.present" | <available property="jmf.present" | ||||
classname="javax.sound.sampled.Clip" | classname="javax.sound.sampled.Clip" | ||||
classpathref="classpath"/> | classpathref="classpath"/> | ||||
@@ -602,6 +614,7 @@ | |||||
<selector refid="needs.netrexx" unless="netrexx.present"/> | <selector refid="needs.netrexx" unless="netrexx.present"/> | ||||
<selector refid="needs.commons-net" unless="commons.net.present"/> | <selector refid="needs.commons-net" unless="commons.net.present"/> | ||||
<selector refid="needs.antlr" unless="antlr.present"/> | <selector refid="needs.antlr" unless="antlr.present"/> | ||||
<selector refid="needs.imageio" unless="imageio.present"/> | |||||
<selector refid="needs.jmf" unless="jmf.present"/> | <selector refid="needs.jmf" unless="jmf.present"/> | ||||
<selector refid="needs.jai" unless="jai.present"/> | <selector refid="needs.jai" unless="jai.present"/> | ||||
<selector refid="needs.jdepend" unless="jdepend.present"/> | <selector refid="needs.jdepend" unless="jdepend.present"/> | ||||
@@ -770,6 +783,7 @@ | |||||
<optional-jar dep="netrexx"/> | <optional-jar dep="netrexx"/> | ||||
<optional-jar dep="commons-net"/> | <optional-jar dep="commons-net"/> | ||||
<optional-jar dep="antlr"/> | <optional-jar dep="antlr"/> | ||||
<optional-jar dep="imageio"/> | |||||
<optional-jar dep="jmf"/> | <optional-jar dep="jmf"/> | ||||
<optional-jar dep="jai"/> | <optional-jar dep="jai"/> | ||||
<optional-jar dep="swing"/> | <optional-jar dep="swing"/> | ||||
@@ -864,6 +878,7 @@ | |||||
<optional-src-jar dep="netrexx"/> | <optional-src-jar dep="netrexx"/> | ||||
<optional-src-jar dep="commons-net"/> | <optional-src-jar dep="commons-net"/> | ||||
<optional-src-jar dep="antlr"/> | <optional-src-jar dep="antlr"/> | ||||
<optional-src-jar dep="imageio"/> | |||||
<optional-src-jar dep="jmf"/> | <optional-src-jar dep="jmf"/> | ||||
<optional-src-jar dep="jai"/> | <optional-src-jar dep="jai"/> | ||||
<optional-src-jar dep="swing"/> | <optional-src-jar dep="swing"/> | ||||
@@ -0,0 +1,501 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- | |||||
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. | |||||
--> | |||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"> | |||||
<key attr.name="Description" attr.type="string" for="graph" id="d0"/> | |||||
<key for="port" id="d1" yfiles.type="portgraphics"/> | |||||
<key for="port" id="d2" yfiles.type="portgeometry"/> | |||||
<key for="port" id="d3" yfiles.type="portuserdata"/> | |||||
<key attr.name="url" attr.type="string" for="node" id="d4"/> | |||||
<key attr.name="description" attr.type="string" for="node" id="d5"/> | |||||
<key for="node" id="d6" yfiles.type="nodegraphics"/> | |||||
<key for="graphml" id="d7" yfiles.type="resources"/> | |||||
<key for="edge" id="d8" yfiles.type="portconstraints"/> | |||||
<key attr.name="url" attr.type="string" for="edge" id="d9"/> | |||||
<key attr.name="description" attr.type="string" for="edge" id="d10"/> | |||||
<key for="edge" id="d11" yfiles.type="edgegraphics"/> | |||||
<graph edgedefault="directed" id="G"> | |||||
<data key="d0" xml:space="preserve"/> | |||||
<node id="n0"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="47.0" width="245.0" x="207.5" y="-113.12162162162163"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="234.9150390625" x="5.04248046875" xml:space="preserve" y="3.0">org.apache.tools.ant.types.DataType<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve"> </y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n1"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="119.51351351351354" width="155.85546875" x="252.0" y="0.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="105.10546875" x="25.375" xml:space="preserve" y="3.0">ImageOperation<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">instructions : Vector</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve">addRotate(Rotate : instr) | |||||
addDraw(Draw : instr) | |||||
addText(Text : instr) | |||||
addScale(Scale : instr)</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n2"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLNoteNode> | |||||
<y:Geometry height="105.0" width="260.55078125" x="-419.1051056860584" y="469.59294436906373"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="SansSerif" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="88.796875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="250.55078125" x="5.0" xml:space="preserve" y="8.1015625">The setType() method forces type to | |||||
one of the values of java.awt.geom.Arc2D: | |||||
open = Arc2D.OPEN | |||||
pie = Arc2D.PIE | |||||
chord = Arc2D.CHORD | |||||
Parameter is not case-sensitive.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
</y:UMLNoteNode> | |||||
</data> | |||||
</node> | |||||
<node id="n3"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="88.0" width="168.0" x="-24.0" y="106.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="n" textColor="#000000" verticalTextPosition="bottom" visible="true" width="73.37353515625" x="47.313232421875" xml:space="preserve" y="3.0">BasicShape</y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">stroke_width : int = 0 | |||||
fill : String = "transparent" | |||||
stroke : String = "black"</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n4"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="76.0" width="366.0" x="537.0" y="105.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="n" textColor="#000000" verticalTextPosition="bottom" visible="true" width="132.33056640625" x="116.834716796875" xml:space="preserve" y="3.0">TransformOperation</y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve">executeTransformOperation(PlanarImage img) : PlanarImage | |||||
addRectangle(Rectangle instr)</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n5"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="83.94054054054055" width="237.505859375" x="209.59510287695048" y="478.2061205031355"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.9482421875" x="69.27880859375" xml:space="preserve" y="26.1328125">DrawOperation<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="interface" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve">executeDrawOperation() : PlanarImage</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n6"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLNoteNode> | |||||
<y:Geometry height="75.75675675675677" width="216.060546875" x="220.31775912695048" y="635.8665334262349"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="SansSerif" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="206.060546875" x="5.0" xml:space="preserve" y="7.612753378378443">The implementing class uses | |||||
ColorMapper to evaluate the color. | |||||
Only the values defined in | |||||
ColorMapper are used.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
</y:UMLNoteNode> | |||||
</data> | |||||
</node> | |||||
<node id="n7"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="271.4234234234233" width="251.275390625" x="562.7103372519505" y="541.3371349640008"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="85.34521484375" x="82.965087890625" xml:space="preserve" y="3.0">ColorMapper<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">COLOR_BLACK : String = "black" | |||||
COLOR_BLUE : String = "blue" | |||||
COLOR_CYAN : String = "cyan" | |||||
COLOR_DARKGRAY : String = "darkgray" | |||||
COLOR_GRAY : String = "gray" | |||||
COLOR_LIGHTGRAY : String = "lightgray" | |||||
COLOR_DARKGREY : String = "darkgrey" | |||||
COLOR_GREY : String = "grey" | |||||
COLOR_LIGHTGREY : String = "lightgrey" | |||||
COLOR_GREEN : String = "green" | |||||
COLOR_MAGENTA : String = "magenta" | |||||
COLOR_ORANGE : String = "orange" | |||||
COLOR_PINK : String = "pink" | |||||
COLOR_RED : String = "red" | |||||
COLOR_WHITE : String = "white" | |||||
COLOR_YELLOW : String = "yellow"</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n8"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="130.0" width="146.0" x="257.0" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="32.2978515625" x="56.85107421875" xml:space="preserve" y="3.0">Text<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">string : String = "" | |||||
font : String = "Arial" | |||||
point : int = 10 | |||||
bold : boolean = false | |||||
color : String = "black" | |||||
italic : boolean = false</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n9"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="59.0" width="126.0" x="447.0" y="271.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="44.35205078125" x="40.823974609375" xml:space="preserve" y="3.0">Rotate<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">angle : float = 0.0F</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n10"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="88.0" width="212.0" x="614.0" y="271.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="35.83984375" x="88.080078125" xml:space="preserve" y="3.0">Scale<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">width : String = "100%" | |||||
height : String = "100%" | |||||
keepProportions : boolean = false</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n11"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="104.0" width="142.0" x="874.0" y="270.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.25244140625" x="52.873779296875" xml:space="preserve" y="3.0">Draw<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">xloc : int = 0 | |||||
yloc : int = 0</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve">addEllipse(Ellipse elip) | |||||
addArc(Arc arc)</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n12"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="102.0" width="120.0" x="3.168249660787012" y="272.5"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.33740234375" x="27.331298828125" xml:space="preserve" y="3.0">Rectangle<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">height : int = 0 | |||||
width : int = 0 | |||||
archeight : int = 0 | |||||
arcwidth : int = 0</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n13"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="74.0" width="120.0" x="-165.13229308005424" y="270.8783783783784"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="44.37109375" x="37.814453125" xml:space="preserve" y="3.0">Ellipse<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">height : int = 0 | |||||
width : int = 0</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n14"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="115.0" width="167.0" x="-375.3690637720489" y="270.5"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.947265625" x="71.0263671875" xml:space="preserve" y="3.0">Arc<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">height : int = 0 | |||||
width : int = 0 | |||||
start : int = 0 | |||||
stop : int = 0 | |||||
type : enumerated = open</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<edge id="e0" source="n1" target="n0"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.11753822740667" xml:space="preserve" y="-42.11074086736787"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e1" source="n3" target="n1"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="50.41847892259207" xml:space="preserve" y="4.406343693110614"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e2" source="n4" target="n1"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="30.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-60.071704848044874" xml:space="preserve" y="-56.61291038197166"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e3" source="n5" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-71.15174118848563" xml:space="preserve" y="-152.95377159050008"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e4" source="n5" target="n9"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="94.22024485236568" xml:space="preserve" y="-80.64710502773585"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e5" source="n5" target="n10"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="140.61508526079365" xml:space="preserve" y="-50.905946341704976"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e6" source="n9" target="n4"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="81.36808268229174" xml:space="preserve" y="-35.51629638671875"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e7" source="n10" target="n4"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.1015625" xml:space="preserve" y="-54.1005859375"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e8" source="n11" target="n4"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-17.583335869279836" xml:space="preserve" y="-58.28909731112401"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e9" source="n8" target="n1"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.08168461626724" xml:space="preserve" y="-85.2969236631651"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e10" source="n5" target="n8"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.446206886230925" xml:space="preserve" y="-47.146909230854135"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e11" source="n6" target="n5"> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#808080" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.101572603512977" xml:space="preserve" y="-45.90001897598199"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e12" source="n7" target="n6"> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#808080" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-67.06248989648702" xml:space="preserve" y="-39.64733927051532"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e13" source="n2" target="n14"> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#808080" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="25.446152710310912" xml:space="preserve" y="-51.156591780311885"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e14" source="n14" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="-50.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="160.70285069869294" xml:space="preserve" y="-37.02040127821758"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e15" source="n13" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="61.78918119362366" xml:space="preserve" y="-30.36348007332839"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e16" source="n12" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="25.390592784586175" xml:space="preserve" y="-48.2745361328125"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
</graph> | |||||
<data key="d7"> | |||||
<y:Resources/> | |||||
</data> | |||||
</graphml> |
@@ -25,13 +25,357 @@ | |||||
<body> | <body> | ||||
<h2 id="image">Image</h2> | <h2 id="image">Image</h2> | ||||
<h3><em><u>Deprecated</u></em></h3> | |||||
<p><em>This task has been <u>deprecated</u>, because Java Advanced Image API depends on internal | |||||
classes which were removed in Java 9. Use the <code>ImageIO</code> task instead.</em></p> | |||||
<h3>Description</h3> | <h3>Description</h3> | ||||
<p>Applies a chain of image operations on a set of files.</p> | <p>Applies a chain of image operations on a set of files.</p> | ||||
<p>Requires <a href="../install.html#librarydependencies">Java Advanced Image API</a> from Sun.</p> | <p>Requires <a href="../install.html#librarydependencies">Java Advanced Image API</a> from Sun.</p> | ||||
<h5>Overview of used datatypes</h5> | <h5>Overview of used datatypes</h5> | ||||
<img src="image-classdiagram.gif" border="0" alt="Class-Diagram"> | |||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" | |||||
color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" | |||||
stroke-linecap="square" viewBox="0 0 1446 937" stroke-miterlimit="10" shape-rendering="auto" | |||||
stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" | |||||
font-family="Sans-Serif" font-style="normal" stroke-linejoin="miter" font-size="12px" role="img" | |||||
stroke-dashoffset="0" image-rendering="auto" aria-labelledby="diagramTitle diagramDescription"> | |||||
<title id="diagramTitle">ImageOperation class diagram</title> | |||||
<desc id="diagramDescription">A diagram of Ant DataType classes used by Image task.</desc> | |||||
<defs id="genericDefs"/> | |||||
<g> | |||||
<defs id="defs1"> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"> | |||||
<path d="M0 0 L1446 0 L1446 937 L0 937 L0 0 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"> | |||||
<path d="M-425 -119 L1021 -119 L1021 818 L-425 818 L-425 -119 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"> | |||||
<path d="M207 -113 L207 -66 L452 -66 L452 -113 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"> | |||||
<path d="M252 0 L252 119 L407 119 L407 0 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath5"> | |||||
<path d="M-24 106 L-24 194 L144 194 L144 106 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6"> | |||||
<path d="M537 105 L537 181 L903 181 L903 105 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath7"> | |||||
<path d="M209 478 L209 561 L446 561 L446 478 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath8"> | |||||
<path d="M562 541 L562 812 L813 812 L813 541 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath9"> | |||||
<path d="M257 272 L257 402 L403 402 L403 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath10"> | |||||
<path d="M447 271 L447 330 L573 330 L573 271 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath11"> | |||||
<path d="M614 271 L614 359 L826 359 L826 271 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath12"> | |||||
<path d="M874 270 L874 374 L1016 374 L1016 270 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath13"> | |||||
<path d="M3 272 L3 374 L123 374 L123 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath14"> | |||||
<path d="M-165 270 L-165 344 L-45 344 L-45 270 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath15"> | |||||
<path d="M-375 270 L-375 385 L-208 385 L-208 270 Z"/> | |||||
</clipPath> | |||||
</defs> | |||||
<g fill="rgb(255,204,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)" stroke="rgb(255,204,153)"> | |||||
<rect x="208" width="243" height="45" y="-112" clip-path="url(#clipPath2)" stroke="none"/> | |||||
</g> | |||||
<g fill="rgb(255,255,218)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)" stroke="rgb(255,255,218)"> | |||||
<rect x="207" width="1" height="47" y="-113" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<rect x="208" width="243" height="1" y="-113" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<rect x="208" y="-67" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="244" height="1" stroke="none"/> | |||||
<rect x="451" y="-113" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="46" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="214.5425" xml:space="preserve" y="-95.5533" clip-path="url(#clipPath3)" stroke="none">org.apache.tools.ant.types.DataType</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="-87" fill="none" x1="208" clip-path="url(#clipPath3)" x2="451" y1="-87"/> | |||||
<line y2="-77" fill="none" x1="208" clip-path="url(#clipPath3)" x2="451" y1="-77"/> | |||||
<text stroke-linecap="butt" x="212.5" y="-61.2095" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve"> </text> | |||||
<rect x="253" y="1" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="153" height="117" stroke="none"/> | |||||
<rect x="252" y="0" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="119" stroke="none"/> | |||||
<rect x="253" y="0" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="153" height="1" stroke="none"/> | |||||
<rect x="253" y="118" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="154" height="1" stroke="none"/> | |||||
<rect x="406" y="0" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="118" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="279.375" xml:space="preserve" y="17.5684" clip-path="url(#clipPath4)" stroke="none">ImageOperation</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="25" fill="none" x1="253" clip-path="url(#clipPath4)" x2="406" y1="25"/> | |||||
<text stroke-linecap="butt" x="257" y="41.9121" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">instructions : Vector</text> | |||||
<line y2="49" fill="none" x1="253" clip-path="url(#clipPath4)" x2="406" y1="49"/> | |||||
<text stroke-linecap="butt" x="257" y="66.0449" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addRotate(Rotate : instr)</text> | |||||
<text stroke-linecap="butt" x="257" y="80.1777" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addDraw(Draw : instr)</text> | |||||
<text stroke-linecap="butt" x="257" y="94.3105" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addText(Text : instr)</text> | |||||
<text stroke-linecap="butt" x="257" y="108.4434" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addScale(Scale : instr)</text> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M-419.1051 469.593 L-173.5543 469.593 L-173.5543 484.593 L-158.5543 484.593 L-158.5543 574.593 L-419.1051 574.593 Z" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M-173.5543 469.593 L-173.5543 484.593 L-158.5543 484.593 Z" fill-rule="evenodd" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<text stroke-linecap="butt" x="-412.1051" y="491.2961" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">The setType() method forces type to</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="505.4289" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">one of the values of java.awt.geom.Arc2D:</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="519.5617" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">open = Arc2D.OPEN</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="533.6945" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">pie = Arc2D.PIE</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="547.8273" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">chord = Arc2D.CHORD</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="561.9601" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">Parameter is not case-sensitive.</text> | |||||
<rect x="-23" y="107" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="166" height="86" stroke="none"/> | |||||
<rect x="-24" y="106" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="88" stroke="none"/> | |||||
<rect x="-23" y="106" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="166" height="1" stroke="none"/> | |||||
<rect x="-23" y="193" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="167" height="1" stroke="none"/> | |||||
<rect x="143" y="106" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="87" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="25.3132" xml:space="preserve" y="123.5684" clip-path="url(#clipPath5)" stroke="none">BasicShape</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="131" fill="none" x1="-23" clip-path="url(#clipPath5)" x2="143" y1="131"/> | |||||
<text stroke-linecap="butt" x="-19" y="147.9121" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">stroke_width : int = 0</text> | |||||
<text stroke-linecap="butt" x="-19" y="162.0449" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">fill : String = "transparent"</text> | |||||
<text stroke-linecap="butt" x="-19" y="176.1777" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">stroke : String = "black"</text> | |||||
<line y2="183" fill="none" x1="-23" clip-path="url(#clipPath5)" x2="143" y1="183"/> | |||||
<rect x="538" y="106" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="364" height="74" stroke="none"/> | |||||
<rect x="537" y="105" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="76" stroke="none"/> | |||||
<rect x="538" y="105" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="364" height="1" stroke="none"/> | |||||
<rect x="538" y="180" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="365" height="1" stroke="none"/> | |||||
<rect x="902" y="105" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="75" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="655.8347" xml:space="preserve" y="122.5684" clip-path="url(#clipPath6)" stroke="none">TransformOperation</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="130" fill="none" x1="538" clip-path="url(#clipPath6)" x2="902" y1="130"/> | |||||
<line y2="140" fill="none" x1="538" clip-path="url(#clipPath6)" x2="902" y1="140"/> | |||||
<text stroke-linecap="butt" x="542" y="156.9121" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">executeTransformOperation(PlanarImage img) : PlanarImage</text> | |||||
<text stroke-linecap="butt" x="542" y="171.0449" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addRectangle(Rectangle instr)</text> | |||||
<rect x="210" y="479" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="235" height="81" stroke="none"/> | |||||
<rect x="209" y="478" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="83" stroke="none"/> | |||||
<rect x="210" y="478" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="235" height="1" stroke="none"/> | |||||
<rect x="210" y="560" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="236" height="1" stroke="none"/> | |||||
<rect x="445" y="478" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="82" stroke="none"/> | |||||
<text stroke-linecap="butt" x="283.8344" y="494.8077" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve"><<interface>></text> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="280.8739" xml:space="preserve" y="518.9073" clip-path="url(#clipPath7)" stroke="none">DrawOperation</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="526" fill="none" x1="210" clip-path="url(#clipPath7)" x2="446" y1="526"/> | |||||
<line y2="536" fill="none" x1="210" clip-path="url(#clipPath7)" x2="446" y1="536"/> | |||||
<text stroke-linecap="butt" x="214.5951" y="553.251" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">executeDrawOperation() : PlanarImage</text> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M220.3178 635.8665 L421.3783 635.8665 L421.3783 650.8665 L436.3783 650.8665 L436.3783 711.6233 L220.3178 711.6233 Z" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M421.3783 635.8665 L421.3783 650.8665 L436.3783 650.8665 Z" fill-rule="evenodd" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<text stroke-linecap="butt" x="227.3178" y="657.0809" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">The implementing class uses</text> | |||||
<text stroke-linecap="butt" x="227.3178" y="671.2137" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">ColorMapper to evaluate the color.</text> | |||||
<text stroke-linecap="butt" x="227.3178" y="685.3465" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">Only the values defined in</text> | |||||
<text stroke-linecap="butt" x="227.3178" y="699.4793" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">ColorMapper are used.</text> | |||||
<rect x="563" y="542" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="249" height="269" stroke="none"/> | |||||
<rect x="562" y="541" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="271" stroke="none"/> | |||||
<rect x="563" y="541" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="249" height="1" stroke="none"/> | |||||
<rect x="563" y="811" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="250" height="1" stroke="none"/> | |||||
<rect x="812" y="541" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="270" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="647.6754" xml:space="preserve" y="558.9055" clip-path="url(#clipPath8)" stroke="none">ColorMapper</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="566" fill="none" x1="563" clip-path="url(#clipPath8)" x2="812" y1="566"/> | |||||
<text stroke-linecap="butt" x="567.7103" y="583.2493" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_BLACK : String = "black"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="597.3821" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_BLUE : String = "blue"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="611.5149" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_CYAN : String = "cyan"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="625.6477" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_DARKGRAY : String = "darkgray"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="639.7805" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_GRAY : String = "gray"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="653.9133" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_LIGHTGRAY : String = "lightgray"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="668.0461" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_DARKGREY : String = "darkgrey"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="682.179" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_GREY : String = "grey"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="696.3118" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_LIGHTGREY : String = "lightgrey"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="710.4446" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_GREEN : String = "green"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="724.5774" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_MAGENTA : String = "magenta"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="738.7102" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_ORANGE : String = "orange"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="752.843" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_PINK : String = "pink"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="766.9758" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_RED : String = "red"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="781.1086" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_WHITE : String = "white"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="795.2415" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_YELLOW : String = "yellow"</text> | |||||
<line y2="802" fill="none" x1="563" clip-path="url(#clipPath8)" x2="812" y1="802"/> | |||||
<rect x="258" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="144" height="128" stroke="none"/> | |||||
<rect x="257" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="130" stroke="none"/> | |||||
<rect x="258" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="144" height="1" stroke="none"/> | |||||
<rect x="258" y="401" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="145" height="1" stroke="none"/> | |||||
<rect x="402" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="129" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="315.8511" xml:space="preserve" y="289.5684" clip-path="url(#clipPath9)" stroke="none">Text</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="297" fill="none" x1="258" clip-path="url(#clipPath9)" x2="402" y1="297"/> | |||||
<text stroke-linecap="butt" x="262" y="313.9121" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">string : String = ""</text> | |||||
<text stroke-linecap="butt" x="262" y="328.0449" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">font : String = "Arial"</text> | |||||
<text stroke-linecap="butt" x="262" y="342.1777" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">point : int = 10</text> | |||||
<text stroke-linecap="butt" x="262" y="356.3105" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">bold : boolean = false</text> | |||||
<text stroke-linecap="butt" x="262" y="370.4434" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">color : String = "black"</text> | |||||
<text stroke-linecap="butt" x="262" y="384.5762" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">italic : boolean = false</text> | |||||
<line y2="392" fill="none" x1="258" clip-path="url(#clipPath9)" x2="402" y1="392"/> | |||||
<rect x="448" y="272" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="124" height="57" stroke="none"/> | |||||
<rect x="447" y="271" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="59" stroke="none"/> | |||||
<rect x="448" y="271" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="124" height="1" stroke="none"/> | |||||
<rect x="448" y="329" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="125" height="1" stroke="none"/> | |||||
<rect x="572" y="271" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="58" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="489.824" xml:space="preserve" y="288.5684" clip-path="url(#clipPath10)" stroke="none">Rotate</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="296" fill="none" x1="448" clip-path="url(#clipPath10)" x2="572" y1="296"/> | |||||
<text stroke-linecap="butt" x="452" y="312.9121" clip-path="url(#clipPath10)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">angle : float = 0.0F</text> | |||||
<line y2="320" fill="none" x1="448" clip-path="url(#clipPath10)" x2="572" y1="320"/> | |||||
<rect x="615" y="272" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="210" height="86" stroke="none"/> | |||||
<rect x="614" y="271" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="88" stroke="none"/> | |||||
<rect x="615" y="271" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="210" height="1" stroke="none"/> | |||||
<rect x="615" y="358" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="211" height="1" stroke="none"/> | |||||
<rect x="825" y="271" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="87" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="704.0801" xml:space="preserve" y="288.5684" clip-path="url(#clipPath11)" stroke="none">Scale</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="296" fill="none" x1="615" clip-path="url(#clipPath11)" x2="825" y1="296"/> | |||||
<text stroke-linecap="butt" x="619" y="312.9121" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">width : String = "100%"</text> | |||||
<text stroke-linecap="butt" x="619" y="327.0449" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">height : String = "100%"</text> | |||||
<text stroke-linecap="butt" x="619" y="341.1777" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">keepProportions : boolean = false</text> | |||||
<line y2="348" fill="none" x1="615" clip-path="url(#clipPath11)" x2="825" y1="348"/> | |||||
<rect x="875" y="271" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="140" height="102" stroke="none"/> | |||||
<rect x="874" y="270" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="104" stroke="none"/> | |||||
<rect x="875" y="270" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="140" height="1" stroke="none"/> | |||||
<rect x="875" y="373" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="141" height="1" stroke="none"/> | |||||
<rect x="1015" y="270" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="103" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="928.8738" xml:space="preserve" y="287.5684" clip-path="url(#clipPath12)" stroke="none">Draw</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="295" fill="none" x1="875" clip-path="url(#clipPath12)" x2="1015" y1="295"/> | |||||
<text stroke-linecap="butt" x="879" y="311.9121" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">xloc : int = 0</text> | |||||
<text stroke-linecap="butt" x="879" y="326.0449" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">yloc : int = 0</text> | |||||
<line y2="333" fill="none" x1="875" clip-path="url(#clipPath12)" x2="1015" y1="333"/> | |||||
<text stroke-linecap="butt" x="879" y="350.1777" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addEllipse(Ellipse elip)</text> | |||||
<text stroke-linecap="butt" x="879" y="364.3105" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addArc(Arc arc)</text> | |||||
<rect x="4" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="118" height="100" stroke="none"/> | |||||
<rect x="3" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="102" stroke="none"/> | |||||
<rect x="4" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="118" height="1" stroke="none"/> | |||||
<rect x="4" y="373" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="119" height="1" stroke="none"/> | |||||
<rect x="122" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="101" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="32.4995" xml:space="preserve" y="290.0684" clip-path="url(#clipPath13)" stroke="none">Rectangle</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="297" fill="none" x1="4" clip-path="url(#clipPath13)" x2="122" y1="297"/> | |||||
<text stroke-linecap="butt" x="8.1683" y="314.4121" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">height : int = 0</text> | |||||
<text stroke-linecap="butt" x="8.1683" y="328.5449" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">width : int = 0</text> | |||||
<text stroke-linecap="butt" x="8.1683" y="342.6777" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">archeight : int = 0</text> | |||||
<text stroke-linecap="butt" x="8.1683" y="356.8105" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">arcwidth : int = 0</text> | |||||
<line y2="364" fill="none" x1="4" clip-path="url(#clipPath13)" x2="122" y1="364"/> | |||||
<rect x="-164" y="271" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="118" height="72" stroke="none"/> | |||||
<rect x="-165" y="270" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="74" stroke="none"/> | |||||
<rect x="-164" y="270" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="118" height="1" stroke="none"/> | |||||
<rect x="-164" y="343" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="119" height="1" stroke="none"/> | |||||
<rect x="-46" y="270" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="73" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="-125.3178" xml:space="preserve" y="288.4467" clip-path="url(#clipPath14)" stroke="none">Ellipse</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="296" fill="none" x1="-164" clip-path="url(#clipPath14)" x2="-46" y1="296"/> | |||||
<text stroke-linecap="butt" x="-160.1323" y="312.7905" clip-path="url(#clipPath14)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">height : int = 0</text> | |||||
<text stroke-linecap="butt" x="-160.1323" y="326.9233" clip-path="url(#clipPath14)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">width : int = 0</text> | |||||
<line y2="334" fill="none" x1="-164" clip-path="url(#clipPath14)" x2="-46" y1="334"/> | |||||
<rect x="-374" y="271" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="165" height="113" stroke="none"/> | |||||
<rect x="-375" y="270" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="115" stroke="none"/> | |||||
<rect x="-374" y="270" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="165" height="1" stroke="none"/> | |||||
<rect x="-374" y="384" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="166" height="1" stroke="none"/> | |||||
<rect x="-209" y="270" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="114" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="-302.3427" xml:space="preserve" y="288.0684" clip-path="url(#clipPath15)" stroke="none">Arc</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,425,119)"> | |||||
<line y2="295" fill="none" x1="-374" clip-path="url(#clipPath15)" x2="-209" y1="295"/> | |||||
<text stroke-linecap="butt" x="-370.369" y="312.4121" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">height : int = 0</text> | |||||
<text stroke-linecap="butt" x="-370.369" y="326.5449" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">width : int = 0</text> | |||||
<text stroke-linecap="butt" x="-370.369" y="340.6777" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">start : int = 0</text> | |||||
<text stroke-linecap="butt" x="-370.369" y="354.8105" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">stop : int = 0</text> | |||||
<text stroke-linecap="butt" x="-370.369" y="368.9434" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">type : enumerated = open</text> | |||||
<line y2="376" fill="none" x1="-374" clip-path="url(#clipPath15)" x2="-209" y1="376"/> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M329.9567 -0.0165 L329.9814 -51.1265" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
</g> | |||||
<g stroke-linecap="butt" transform="matrix(1,0,0,1,425,119)" fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="white" stroke-miterlimit="1.45"> | |||||
<path d="M329.9886 -66.1265 L323.9809 -50.1294 L335.9809 -50.1236 Z" stroke="none" clip-path="url(#clipPath2)"/> | |||||
<path fill="none" d="M329.9886 -66.1265 L323.9809 -50.1294 L335.9809 -50.1236 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="358.0742" xml:space="preserve" y="-28.5257" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M143.99 121.9202 L237.7586 90.5711" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M251.9846 85.815 L234.9077 85.1978 L238.7126 96.5786 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M251.9846 85.815 L234.9077 85.1978 L238.7126 96.5786 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="196.4084" xml:space="preserve" y="139.9281" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M537.0108 119.8758 L422.2672 86.5641" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M407.8619 82.3821 L421.5547 92.605 L424.9003 81.0808 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M407.8619 82.3821 L421.5547 92.605 L424.9003 81.0808 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="478.9391" xml:space="preserve" y="76.8644" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M297.9329 478.2198 L91.9199 194.0324" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="228.7811" xml:space="preserve" y="338.8676" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" stroke-dasharray="6,2" d="M328.348 635.8402 L328.348 562.1666" clip-path="url(#clipPath2)" stroke="gray"/> | |||||
<text fill="black" x="356.4496" xml:space="preserve" y="603.5417" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" stroke-dasharray="6,2" d="M562.7084 675.8958 L436.4021 674.7366" clip-path="url(#clipPath2)" stroke="gray"/> | |||||
<text fill="black" x="497.6459" xml:space="preserve" y="649.85" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M328.7267 478.1836 L329.414 401.9734" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="357.1729" xml:space="preserve" y="444.6382" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M329.9831 271.9873 L329.9472 134.5243" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M329.9433 119.5243 L323.9475 135.5259 L335.9475 135.5227 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M329.9433 119.5243 L323.9475 135.5259 L335.9475 135.5227 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="358.0648" xml:space="preserve" y="200.2919" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M363.0508 478.2094 L485.6221 329.9808" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="459.2711" xml:space="preserve" y="411.1639" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M549.3494 270.988 L657.3173 190.0121" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M669.3173 181.0121 L652.9172 185.8121 L660.1172 195.412 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M669.3173 181.0121 L652.9172 185.8121 L660.1172 195.412 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="632.7175" xml:space="preserve" y="249.0732" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M408.4521 478.2119 L635.9901 359.0106" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="551.0673" xml:space="preserve" y="440.9075" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M720 271.0342 L720 195.9789" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M720 180.9789 L714 196.9789 L726 196.9789 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M720 180.9789 L714 196.9789 L726 196.9789 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="748.1016" xml:space="preserve" y="230.5352" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M879.6588 270.0175 L779.488 190.326" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M767.7495 180.9874 L776.5351 195.6439 L784.0059 186.2532 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M767.7495 180.9874 L776.5351 195.6439 L784.0059 186.2532 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="864.0755" xml:space="preserve" y="225.3299" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M62.2362 272.4581 L61.077 208.976" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M60.8031 193.9785 L55.0962 210.0854 L67.0942 209.8663 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M60.8031 193.9785 L55.0962 210.0854 L67.0942 209.8663 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="89.6268" xml:space="preserve" y="237.7852" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M-66.4496 270.8949 L3.1286 204.3732" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M13.9706 194.0074 L-1.7406 200.7274 L6.5521 209.4011 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M13.9706 194.0074 L-1.7406 200.7274 L6.5521 209.4011 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="-2.6604" xml:space="preserve" y="254.133" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" stroke-dasharray="6,2" d="M-289.6512 469.6367 L-290.9686 385.5053" clip-path="url(#clipPath2)" stroke="gray"/> | |||||
<text fill="black" x="-262.205" xml:space="preserve" y="432.0816" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M-271.2088 270.4844 L-38.071 185.6754" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M-23.9747 180.5476 L-41.0619 180.3788 L-36.9596 191.6558 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M-23.9747 180.5476 L-41.0619 180.3788 L-36.9596 191.6558 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="-108.5059" xml:space="preserve" y="247.0655" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
</g> | |||||
</g> | |||||
</svg> | |||||
<h3>Parameters</h3> | <h3>Parameters</h3> | ||||
<table class="attr"> | <table class="attr"> | ||||
<tr> | <tr> | ||||
@@ -115,12 +459,8 @@ attributes of <code><fileset></code> as well as the | |||||
nested <code><include></code>, <code><exclude></code> | nested <code><include></code>, <code><exclude></code> | ||||
and <code><patternset></code> elements.</p> | and <code><patternset></code> elements.</p> | ||||
<h4>ImageOperation</h4> | |||||
<p>Adds an ImageOperation to chain.</p> | |||||
<h5>Nested elements</h5> | |||||
<p>ImageOperation can handle | |||||
nested <code>Rotate</code>, <code>Draw</code>, <code>Rectangle</code>, <code>Text</code> | |||||
and <code>Scale</code> objects.</p> | |||||
<p>The following ImageOperation objects can be specified as nested | |||||
elements: <code>Rotate</code>, <code>Scale</code> and <code>Draw</code>.</p> | |||||
<h4>Rotate</h4> | <h4>Rotate</h4> | ||||
<p>Adds a Rotate ImageOperation to chain.</p> | <p>Adds a Rotate ImageOperation to chain.</p> | ||||
@@ -151,7 +491,7 @@ and <code>Scale</code> objects.</p> | |||||
<td>proportions</td> | <td>proportions</td> | ||||
<td>Sets which dimension to control proportions from. Valid values are: | <td>Sets which dimension to control proportions from. Valid values are: | ||||
<ul> | <ul> | ||||
<li><q>ignore</q>— treat the dimensions independently.</li> | |||||
<li><q>ignore</q>—treat the dimensions independently.</li> | |||||
<li><q>height</q>—keep proportions based on the width.</li> | <li><q>height</q>—keep proportions based on the width.</li> | ||||
<li><q>width</q>—keep proportions based on the height.</li> | <li><q>width</q>—keep proportions based on the height.</li> | ||||
<li><q>cover</q>—keep proportions and fit in the supplied dimensions.</li> | <li><q>cover</q>—keep proportions and fit in the supplied dimensions.</li> | ||||
@@ -162,14 +502,12 @@ and <code>Scale</code> objects.</p> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>width</td> | <td>width</td> | ||||
<td>Sets the width of the image, either as an integer or a %.</td> | |||||
<!-- todo: if integer, what kind? cm, px, inches, ... --> | |||||
<td>Sets the width of the image, either as an integer (pixels) or a %.</td> | |||||
<td>No; defaults to <q>100%</q></td> | <td>No; defaults to <q>100%</q></td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>height</td> | <td>height</td> | ||||
<td>Sets the height of the image, either as an integer or a %.</td> | |||||
<!-- todo: if integer, what kind? cm, px, inches, ... --> | |||||
<td>Sets the height of the image, either as an integer (pixels) or a %.</td> | |||||
<td>No; defaults to <q>100%</q></td> | <td>No; defaults to <q>100%</q></td> | ||||
</tr> | </tr> | ||||
</table> | </table> | ||||
@@ -195,6 +533,8 @@ object.</p> | |||||
<td>No; defaults to <q>0</q></td> | <td>No; defaults to <q>0</q></td> | ||||
</tr> | </tr> | ||||
</table> | </table> | ||||
<p>For description of nested elements, please see the documentation | |||||
of <a href="imageio.html#draw">ImageIO task</a>.</p> | |||||
<h4>mapper</h4> | <h4>mapper</h4> | ||||
<p><em>Since Apache Ant 1.8.0</em></p> | <p><em>Since Apache Ant 1.8.0</em></p> | ||||
@@ -209,8 +549,8 @@ element.</p> | |||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
<p>Create thumbnails of my images and make sure they all fit within the 160x160 size whether the | |||||
image is portrait or landscape.</p> | |||||
<p>Create thumbnails of my images and make sure they all fit within the 160×160 pixel size | |||||
whether the image is portrait or landscape.</p> | |||||
<pre> | <pre> | ||||
<image destdir="samples/low" overwrite="yes"> | <image destdir="samples/low" overwrite="yes"> | ||||
<fileset dir="samples/full"> | <fileset dir="samples/full"> | ||||
@@ -219,7 +559,7 @@ image is portrait or landscape.</p> | |||||
<scale width="160" height="160" proportions="fit"/> | <scale width="160" height="160" proportions="fit"/> | ||||
</image></pre> | </image></pre> | ||||
<p>Create a thumbnail for all PNG files in <samp>src</samp> of the size of 40 pixel keeping the | |||||
<p>Create a thumbnail for all PNG files in <samp>src</samp> of the size of 40 pixels keeping the | |||||
proportions and store the <samp>src</samp>.</p> | proportions and store the <samp>src</samp>.</p> | ||||
<pre> | <pre> | ||||
<image srcdir="src" includes="*.png"> | <image srcdir="src" includes="*.png"> | ||||
@@ -0,0 +1,498 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- | |||||
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. | |||||
--> | |||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"> | |||||
<key attr.name="Description" attr.type="string" for="graph" id="d0"/> | |||||
<key for="port" id="d1" yfiles.type="portgraphics"/> | |||||
<key for="port" id="d2" yfiles.type="portgeometry"/> | |||||
<key for="port" id="d3" yfiles.type="portuserdata"/> | |||||
<key attr.name="url" attr.type="string" for="node" id="d4"/> | |||||
<key attr.name="description" attr.type="string" for="node" id="d5"/> | |||||
<key for="node" id="d6" yfiles.type="nodegraphics"/> | |||||
<key for="graphml" id="d7" yfiles.type="resources"/> | |||||
<key for="edge" id="d8" yfiles.type="portconstraints"/> | |||||
<key attr.name="url" attr.type="string" for="edge" id="d9"/> | |||||
<key attr.name="description" attr.type="string" for="edge" id="d10"/> | |||||
<key for="edge" id="d11" yfiles.type="edgegraphics"/> | |||||
<graph edgedefault="directed" id="G"> | |||||
<data key="d0" xml:space="preserve"/> | |||||
<node id="n0"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="47.0" width="245.0" x="207.5" y="-113.12162162162163"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="234.9150390625" x="5.04248046875" xml:space="preserve" y="3.0">org.apache.tools.ant.types.DataType<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve"> </y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n1"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="104.0" width="182.0" x="239.0" y="26.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="105.10546875" x="38.447265625" xml:space="preserve" y="3.0">ImageOperation<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">instructions : List</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve">addDraw(Draw : instr) | |||||
addRotate(Rotate : instr) | |||||
addScale(Scale : instr)</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n2"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLNoteNode> | |||||
<y:Geometry height="105.0" width="260.55078125" x="-419.1051056860584" y="469.59294436906373"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="SansSerif" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="88.796875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="250.55078125" x="5.0" xml:space="preserve" y="8.1015625">The setType() method forces type to | |||||
one of the values of java.awt.geom.Arc2D: | |||||
open = Arc2D.OPEN | |||||
pie = Arc2D.PIE | |||||
chord = Arc2D.CHORD | |||||
Parameter is not case-sensitive.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
</y:UMLNoteNode> | |||||
</data> | |||||
</node> | |||||
<node id="n3"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="115.0" width="168.0" x="-24.0" y="106.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="n" textColor="#000000" verticalTextPosition="bottom" visible="true" width="73.37353515625" x="47.313232421875" xml:space="preserve" y="3.0">BasicShape</y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">height : int = 0 | |||||
width : int = 0 | |||||
strokeWidth : int = 0 | |||||
stroke : String = "black" | |||||
fill : String = "transparent"</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n4"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="61.0" width="386.0" x="527.0" y="105.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="n" textColor="#000000" verticalTextPosition="bottom" visible="true" width="132.33056640625" x="126.834716796875" xml:space="preserve" y="3.0">TransformOperation</y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve">executeTransformOperation(BufferedImage img) : BufferedImage</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n5"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="84.0" width="246.0" x="206.0" y="478.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="italic" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.9482421875" x="73.52587890625" xml:space="preserve" y="26.1328125">DrawOperation<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="interface" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve">executeDrawOperation() : BufferedImage</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n6"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLNoteNode> | |||||
<y:Geometry height="75.75675675675677" width="216.060546875" x="220.31775912695048" y="635.8665334262349"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="SansSerif" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="206.060546875" x="5.0" xml:space="preserve" y="7.612753378378443">The implementing class uses | |||||
ColorMapper to evaluate the color. | |||||
Only the values defined in | |||||
ColorMapper are used.<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
</y:UMLNoteNode> | |||||
</data> | |||||
</node> | |||||
<node id="n7"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="271.4234234234233" width="251.275390625" x="562.7103372519505" y="541.3371349640008"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="85.34521484375" x="82.965087890625" xml:space="preserve" y="3.0">ColorMapper<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">COLOR_BLACK : String = "black" | |||||
COLOR_BLUE : String = "blue" | |||||
COLOR_CYAN : String = "cyan" | |||||
COLOR_DARKGRAY : String = "darkgray" | |||||
COLOR_GRAY : String = "gray" | |||||
COLOR_LIGHTGRAY : String = "lightgray" | |||||
COLOR_DARKGREY : String = "darkgrey" | |||||
COLOR_GREY : String = "grey" | |||||
COLOR_LIGHTGREY : String = "lightgrey" | |||||
COLOR_GREEN : String = "green" | |||||
COLOR_MAGENTA : String = "magenta" | |||||
COLOR_ORANGE : String = "orange" | |||||
COLOR_PINK : String = "pink" | |||||
COLOR_RED : String = "red" | |||||
COLOR_WHITE : String = "white" | |||||
COLOR_YELLOW : String = "yellow"</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n8"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="130.0" width="146.0" x="257.0" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="32.2978515625" x="56.85107421875" xml:space="preserve" y="3.0">Text<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">string : String = "" | |||||
font : String = "Arial" | |||||
point : int = 10 | |||||
bold : boolean = false | |||||
color : String = "black" | |||||
italic : boolean = false</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n9"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="59.0" width="122.0" x="449.0" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="44.35205078125" x="38.823974609375" xml:space="preserve" y="3.0">Rotate<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">angle : float = 0.0F</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n10"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="88.0" width="212.0" x="614.0" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="35.83984375" x="88.080078125" xml:space="preserve" y="3.0">Scale<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">width : String = "100%" | |||||
height : String = "100%" | |||||
keepProportions : boolean = false</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n11"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="130.0" width="180.0" x="874.0" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.25244140625" x="71.873779296875" xml:space="preserve" y="3.0">Draw<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">xloc : int = 0 | |||||
yloc : int = 0</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve">addText(Text : text) | |||||
addRectangle(Rectangle rect) | |||||
addEllipse(Ellipse elip) | |||||
addArc(Arc arc)</y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n12"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="74.0" width="122.0" x="0.0" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.33740234375" x="28.331298828125" xml:space="preserve" y="3.0">Rectangle<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">archeight : int = 0 | |||||
arcwidth : int = 0</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n13"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="45.0" width="122.0" x="-166.13229308005424" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="44.37109375" x="38.814453125" xml:space="preserve" y="3.0">Ellipse<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve"/> | |||||
<y:MethodLabel xml:space="preserve"> </y:MethodLabel> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<node id="n14"> | |||||
<data key="d4" xml:space="preserve"/> | |||||
<data key="d6"> | |||||
<y:UMLClassNode> | |||||
<y:Geometry height="88.0" width="167.0" x="-375.3690637720489" y="272.0"/> | |||||
<y:Fill color="#FFCC99" transparent="false"/> | |||||
<y:BorderStyle color="#000000" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="SansSerif" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.947265625" x="71.0263671875" xml:space="preserve" y="3.0">Arc<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> | |||||
<y:UML clipContent="true" constraint="" hasDetailsColor="false" omitDetails="false" stereotype="" use3DEffect="true"> | |||||
<y:AttributeLabel xml:space="preserve">start : int = 0 | |||||
stop : int = 0 | |||||
type : enumerated = open</y:AttributeLabel> | |||||
<y:MethodLabel xml:space="preserve"/> | |||||
</y:UML> | |||||
</y:UMLClassNode> | |||||
</data> | |||||
</node> | |||||
<edge id="e0" source="n1" target="n0"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.1015625" xml:space="preserve" y="-55.113770252949486"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e1" source="n3" target="n1"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="43.66826814854102" xml:space="preserve" y="7.339041583081126"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e2" source="n4" target="n1"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="24.541169749339424" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-49.40849066634263" xml:space="preserve" y="-49.29658468306819"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e3" source="n5" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-64.77475497688485" xml:space="preserve" y="-139.5514023191172"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e4" source="n5" target="n9"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="93.83537882510757" xml:space="preserve" y="-80.02171272585866"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e5" source="n5" target="n10"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="141.8268161095399" xml:space="preserve" y="-51.25926438261342"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e6" source="n9" target="n4"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="88.76195858042456" xml:space="preserve" y="-44.07133119943154"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e7" source="n10" target="n4"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.1015625" xml:space="preserve" y="-62.0430908203125"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e8" source="n11" target="n4"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-26.439794564087606" xml:space="preserve" y="-66.58883222234243"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e9" source="n8" target="n1"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.1015625" xml:space="preserve" y="-80.0950927734375"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e10" source="n5" target="n8"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.309432546745086" xml:space="preserve" y="-47.024658203125"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e11" source="n6" target="n5"> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#808080" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="26.258473013120465" xml:space="preserve" y="-46.00484363844498"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e12" source="n7" target="n6"> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#808080" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="-67.06248989648702" xml:space="preserve" y="-39.64733927051532"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e13" source="n2" target="n14"> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#808080" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="none"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="25.296792915327387" xml:space="preserve" y="-63.858496077186885"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e14" source="n14" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="-39.69264350185832" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="158.34186581905368" xml:space="preserve" y="-29.575788755683107"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e15" source="n13" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="58.336471410972415" xml:space="preserve" y="-20.144000203114217"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e16" source="n12" target="n3"> | |||||
<data key="d9" xml:space="preserve"/> | |||||
<data key="d11"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="white_delta"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="DejaVu Sans Mono" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="7.796875" x="25.926868159120588" xml:space="preserve" y="-34.5875244140625"> <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> | |||||
<y:BendStyle smoothed="true"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
</graph> | |||||
<data key="d7"> | |||||
<y:Resources/> | |||||
</data> | |||||
</graphml> |
@@ -0,0 +1,693 @@ | |||||
<!-- | |||||
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. | |||||
--> | |||||
<html> | |||||
<head> | |||||
<meta http-equiv="Content-Language" content="en-us"> | |||||
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css"> | |||||
<title>Image Task</title> | |||||
</head> | |||||
<body> | |||||
<h2 id="imageio">ImageIO</h2> | |||||
<h3>Description</h3> | |||||
<p>Applies a chain of image operations on a set of files.</p> | |||||
<p>Uses AWT and ImageIO; replaces <a href="image.html">image</a> task for Java 9+. The task can be | |||||
used with Java 8 as well, see parameter table for limitations.</p> | |||||
<h5>Overview of used datatypes</h5> | |||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" | |||||
color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" | |||||
stroke-linecap="square" viewBox="0 0 1504 957" stroke-miterlimit="10" shape-rendering="auto" | |||||
stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" | |||||
font-family="Sans-Serif" font-style="normal" stroke-linejoin="miter" font-size="12px" role="img" | |||||
stroke-dashoffset="0" image-rendering="auto" aria-labelledby="diagramTitle diagramDescription"> | |||||
<title id="diagramTitle">ImageOperation class diagram</title> | |||||
<desc id="diagramDescription">A diagram of Ant DataType classes used by ImageIO task.</desc> | |||||
<defs id="genericDefs"/> | |||||
<g> | |||||
<defs id="defs1"> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"> | |||||
<path d="M0 0 L1504 0 L1504 957 L0 957 L0 0 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"> | |||||
<path d="M-435 -129 L1069 -129 L1069 828 L-435 828 L-435 -129 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"> | |||||
<path d="M207 -113 L207 -66 L452 -66 L452 -113 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"> | |||||
<path d="M239 26 L239 130 L421 130 L421 26 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath5"> | |||||
<path d="M-24 106 L-24 221 L144 221 L144 106 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6"> | |||||
<path d="M527 105 L527 166 L913 166 L913 105 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath7"> | |||||
<path d="M206 478 L206 562 L452 562 L452 478 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath8"> | |||||
<path d="M562 541 L562 812 L813 812 L813 541 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath9"> | |||||
<path d="M257 272 L257 402 L403 402 L403 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath10"> | |||||
<path d="M449 272 L449 331 L571 331 L571 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath11"> | |||||
<path d="M614 272 L614 360 L826 360 L826 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath12"> | |||||
<path d="M874 272 L874 402 L1054 402 L1054 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath13"> | |||||
<path d="M0 272 L0 346 L122 346 L122 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath14"> | |||||
<path d="M-166 272 L-166 317 L-44 317 L-44 272 Z"/> | |||||
</clipPath> | |||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath15"> | |||||
<path d="M-375 272 L-375 360 L-208 360 L-208 272 Z"/> | |||||
</clipPath> | |||||
</defs> | |||||
<g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(435,129)" stroke="white"> | |||||
<rect x="-435" width="1504" height="957" y="-129" clip-path="url(#clipPath2)" stroke="none"/> | |||||
</g> | |||||
<g fill="rgb(255,204,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)" stroke="rgb(255,204,153)"> | |||||
<rect x="208" width="243" height="45" y="-112" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<rect x="207" y="-113" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="47" stroke="none"/> | |||||
<rect x="208" y="-113" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="243" height="1" stroke="none"/> | |||||
<rect x="208" y="-67" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="244" height="1" stroke="none"/> | |||||
<rect x="451" y="-113" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="46" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="214.5425" xml:space="preserve" y="-95.5533" clip-path="url(#clipPath3)" stroke="none">org.apache.tools.ant.types.DataType</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="-87" fill="none" x1="208" clip-path="url(#clipPath3)" x2="451" y1="-87"/> | |||||
<line y2="-77" fill="none" x1="208" clip-path="url(#clipPath3)" x2="451" y1="-77"/> | |||||
<text stroke-linecap="butt" x="212.5" y="-61.2095" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve"> </text> | |||||
<rect x="240" y="27" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="180" height="102" stroke="none"/> | |||||
<rect x="239" y="26" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="104" stroke="none"/> | |||||
<rect x="240" y="26" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="180" height="1" stroke="none"/> | |||||
<rect x="240" y="129" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="181" height="1" stroke="none"/> | |||||
<rect x="420" y="26" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="103" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="279.4473" xml:space="preserve" y="43.5684" clip-path="url(#clipPath4)" stroke="none">ImageOperation</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="51" fill="none" x1="240" clip-path="url(#clipPath4)" x2="420" y1="51"/> | |||||
<text stroke-linecap="butt" x="244" y="67.9121" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">instructions : List</text> | |||||
<line y2="75" fill="none" x1="240" clip-path="url(#clipPath4)" x2="420" y1="75"/> | |||||
<text stroke-linecap="butt" x="244" y="92.0449" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addDraw(Draw : instr)</text> | |||||
<text stroke-linecap="butt" x="244" y="106.1777" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addRotate(Rotate : instr)</text> | |||||
<text stroke-linecap="butt" x="244" y="120.3105" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addScale(Scale : instr)</text> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M-419.1051 469.593 L-173.5543 469.593 L-173.5543 484.593 L-158.5543 484.593 L-158.5543 574.593 L-419.1051 574.593 Z" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M-173.5543 469.593 L-173.5543 484.593 L-158.5543 484.593 Z" fill-rule="evenodd" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<text stroke-linecap="butt" x="-412.1051" y="491.2961" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">The setType() method forces type to</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="505.4289" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">one of the values of java.awt.geom.Arc2D:</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="519.5617" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">open = Arc2D.OPEN</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="533.6945" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">pie = Arc2D.PIE</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="547.8273" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">chord = Arc2D.CHORD</text> | |||||
<text stroke-linecap="butt" x="-412.1051" y="561.9601" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">Parameter is not case-sensitive.</text> | |||||
<rect x="-23" y="107" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="166" height="113" stroke="none"/> | |||||
<rect x="-24" y="106" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="115" stroke="none"/> | |||||
<rect x="-23" y="106" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="166" height="1" stroke="none"/> | |||||
<rect x="-23" y="220" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="167" height="1" stroke="none"/> | |||||
<rect x="143" y="106" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="114" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="25.3132" xml:space="preserve" y="123.5684" clip-path="url(#clipPath5)" stroke="none">BasicShape</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="131" fill="none" x1="-23" clip-path="url(#clipPath5)" x2="143" y1="131"/> | |||||
<text stroke-linecap="butt" x="-19" y="147.9121" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">height : int = 0</text> | |||||
<text stroke-linecap="butt" x="-19" y="162.0449" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">width : int = 0</text> | |||||
<text stroke-linecap="butt" x="-19" y="176.1777" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">strokeWidth : int = 0</text> | |||||
<text stroke-linecap="butt" x="-19" y="190.3105" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">stroke : String = "black"</text> | |||||
<text stroke-linecap="butt" x="-19" y="204.4434" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">fill : String = "transparent"</text> | |||||
<line y2="211" fill="none" x1="-23" clip-path="url(#clipPath5)" x2="143" y1="211"/> | |||||
<rect x="528" y="106" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="384" height="59" stroke="none"/> | |||||
<rect x="527" y="105" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="61" stroke="none"/> | |||||
<rect x="528" y="105" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="384" height="1" stroke="none"/> | |||||
<rect x="528" y="165" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="385" height="1" stroke="none"/> | |||||
<rect x="912" y="105" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="60" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="655.8347" xml:space="preserve" y="122.5684" clip-path="url(#clipPath6)" stroke="none">TransformOperation</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="130" fill="none" x1="528" clip-path="url(#clipPath6)" x2="912" y1="130"/> | |||||
<line y2="140" fill="none" x1="528" clip-path="url(#clipPath6)" x2="912" y1="140"/> | |||||
<text stroke-linecap="butt" x="532" y="156.9121" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">executeTransformOperation(BufferedImage img) : BufferedImage</text> | |||||
<rect x="207" y="479" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="244" height="82" stroke="none"/> | |||||
<rect x="206" y="478" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="84" stroke="none"/> | |||||
<rect x="207" y="478" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="244" height="1" stroke="none"/> | |||||
<rect x="207" y="561" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="245" height="1" stroke="none"/> | |||||
<rect x="451" y="478" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="83" stroke="none"/> | |||||
<text stroke-linecap="butt" x="284.4863" y="494.6016" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve"><<interface>></text> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" font-style="italic" stroke-miterlimit="1.45"> | |||||
<text x="281.5259" xml:space="preserve" y="518.7012" clip-path="url(#clipPath7)" stroke="none">DrawOperation</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="526" fill="none" x1="207" clip-path="url(#clipPath7)" x2="451" y1="526"/> | |||||
<line y2="536" fill="none" x1="207" clip-path="url(#clipPath7)" x2="451" y1="536"/> | |||||
<text stroke-linecap="butt" x="211" y="553.0449" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">executeDrawOperation() : BufferedImage</text> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M220.3178 635.8665 L421.3783 635.8665 L421.3783 650.8665 L436.3783 650.8665 L436.3783 711.6233 L220.3178 711.6233 Z" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M421.3783 635.8665 L421.3783 650.8665 L436.3783 650.8665 Z" fill-rule="evenodd" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
<text stroke-linecap="butt" x="227.3178" y="657.0809" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">The implementing class uses</text> | |||||
<text stroke-linecap="butt" x="227.3178" y="671.2137" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">ColorMapper to evaluate the color.</text> | |||||
<text stroke-linecap="butt" x="227.3178" y="685.3465" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">Only the values defined in</text> | |||||
<text stroke-linecap="butt" x="227.3178" y="699.4793" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">ColorMapper are used.</text> | |||||
<rect x="563" y="542" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="249" height="269" stroke="none"/> | |||||
<rect x="562" y="541" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="271" stroke="none"/> | |||||
<rect x="563" y="541" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="249" height="1" stroke="none"/> | |||||
<rect x="563" y="811" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="250" height="1" stroke="none"/> | |||||
<rect x="812" y="541" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="270" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="647.6754" xml:space="preserve" y="558.9055" clip-path="url(#clipPath8)" stroke="none">ColorMapper</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="566" fill="none" x1="563" clip-path="url(#clipPath8)" x2="812" y1="566"/> | |||||
<text stroke-linecap="butt" x="567.7103" y="583.2493" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_BLACK : String = "black"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="597.3821" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_BLUE : String = "blue"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="611.5149" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_CYAN : String = "cyan"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="625.6477" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_DARKGRAY : String = "darkgray"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="639.7805" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_GRAY : String = "gray"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="653.9133" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_LIGHTGRAY : String = "lightgray"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="668.0461" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_DARKGREY : String = "darkgrey"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="682.179" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_GREY : String = "grey"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="696.3118" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_LIGHTGREY : String = "lightgrey"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="710.4446" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_GREEN : String = "green"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="724.5774" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_MAGENTA : String = "magenta"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="738.7102" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_ORANGE : String = "orange"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="752.843" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_PINK : String = "pink"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="766.9758" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_RED : String = "red"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="781.1086" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_WHITE : String = "white"</text> | |||||
<text stroke-linecap="butt" x="567.7103" y="795.2415" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">COLOR_YELLOW : String = "yellow"</text> | |||||
<line y2="802" fill="none" x1="563" clip-path="url(#clipPath8)" x2="812" y1="802"/> | |||||
<rect x="258" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="144" height="128" stroke="none"/> | |||||
<rect x="257" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="130" stroke="none"/> | |||||
<rect x="258" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="144" height="1" stroke="none"/> | |||||
<rect x="258" y="401" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="145" height="1" stroke="none"/> | |||||
<rect x="402" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="129" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="315.8511" xml:space="preserve" y="289.5684" clip-path="url(#clipPath9)" stroke="none">Text</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="258" clip-path="url(#clipPath9)" x2="402" y1="297"/> | |||||
<text stroke-linecap="butt" x="262" y="313.9121" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">string : String = ""</text> | |||||
<text stroke-linecap="butt" x="262" y="328.0449" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">font : String = "Arial"</text> | |||||
<text stroke-linecap="butt" x="262" y="342.1777" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">point : int = 10</text> | |||||
<text stroke-linecap="butt" x="262" y="356.3105" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">bold : boolean = false</text> | |||||
<text stroke-linecap="butt" x="262" y="370.4434" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">color : String = "black"</text> | |||||
<text stroke-linecap="butt" x="262" y="384.5762" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">italic : boolean = false</text> | |||||
<line y2="392" fill="none" x1="258" clip-path="url(#clipPath9)" x2="402" y1="392"/> | |||||
<rect x="450" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="120" height="57" stroke="none"/> | |||||
<rect x="449" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="59" stroke="none"/> | |||||
<rect x="450" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="120" height="1" stroke="none"/> | |||||
<rect x="450" y="330" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="121" height="1" stroke="none"/> | |||||
<rect x="570" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="58" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="489.824" xml:space="preserve" y="289.5684" clip-path="url(#clipPath10)" stroke="none">Rotate</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="450" clip-path="url(#clipPath10)" x2="570" y1="297"/> | |||||
<text stroke-linecap="butt" x="454" y="313.9121" clip-path="url(#clipPath10)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">angle : float = 0.0F</text> | |||||
<line y2="321" fill="none" x1="450" clip-path="url(#clipPath10)" x2="570" y1="321"/> | |||||
<rect x="615" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="210" height="86" stroke="none"/> | |||||
<rect x="614" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="88" stroke="none"/> | |||||
<rect x="615" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="210" height="1" stroke="none"/> | |||||
<rect x="615" y="359" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="211" height="1" stroke="none"/> | |||||
<rect x="825" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="87" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="704.0801" xml:space="preserve" y="289.5684" clip-path="url(#clipPath11)" stroke="none">Scale</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="615" clip-path="url(#clipPath11)" x2="825" y1="297"/> | |||||
<text stroke-linecap="butt" x="619" y="313.9121" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">width : String = "100%"</text> | |||||
<text stroke-linecap="butt" x="619" y="328.0449" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">height : String = "100%"</text> | |||||
<text stroke-linecap="butt" x="619" y="342.1777" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">keepProportions : boolean = false</text> | |||||
<line y2="349" fill="none" x1="615" clip-path="url(#clipPath11)" x2="825" y1="349"/> | |||||
<rect x="875" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="178" height="128" stroke="none"/> | |||||
<rect x="874" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="130" stroke="none"/> | |||||
<rect x="875" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="178" height="1" stroke="none"/> | |||||
<rect x="875" y="401" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="179" height="1" stroke="none"/> | |||||
<rect x="1053" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="129" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="947.8738" xml:space="preserve" y="289.5684" clip-path="url(#clipPath12)" stroke="none">Draw</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="875" clip-path="url(#clipPath12)" x2="1053" y1="297"/> | |||||
<text stroke-linecap="butt" x="879" y="313.9121" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">xloc : int = 0</text> | |||||
<text stroke-linecap="butt" x="879" y="328.0449" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">yloc : int = 0</text> | |||||
<line y2="335" fill="none" x1="875" clip-path="url(#clipPath12)" x2="1053" y1="335"/> | |||||
<text stroke-linecap="butt" x="879" y="352.1777" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addText(Text : text)</text> | |||||
<text stroke-linecap="butt" x="879" y="366.3105" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addRectangle(Rectangle rect)</text> | |||||
<text stroke-linecap="butt" x="879" y="380.4434" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addEllipse(Ellipse elip)</text> | |||||
<text stroke-linecap="butt" x="879" y="394.5762" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">addArc(Arc arc)</text> | |||||
<rect x="1" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="120" height="72" stroke="none"/> | |||||
<rect x="0" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="74" stroke="none"/> | |||||
<rect x="1" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="120" height="1" stroke="none"/> | |||||
<rect x="1" y="345" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="121" height="1" stroke="none"/> | |||||
<rect x="121" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="73" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="30.3313" xml:space="preserve" y="289.5684" clip-path="url(#clipPath13)" stroke="none">Rectangle</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="1" clip-path="url(#clipPath13)" x2="121" y1="297"/> | |||||
<text stroke-linecap="butt" x="5" y="313.9121" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">archeight : int = 0</text> | |||||
<text stroke-linecap="butt" x="5" y="328.0449" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">arcwidth : int = 0</text> | |||||
<line y2="335" fill="none" x1="1" clip-path="url(#clipPath13)" x2="121" y1="335"/> | |||||
<rect x="-165" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="120" height="43" stroke="none"/> | |||||
<rect x="-166" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="45" stroke="none"/> | |||||
<rect x="-165" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="120" height="1" stroke="none"/> | |||||
<rect x="-165" y="316" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="121" height="1" stroke="none"/> | |||||
<rect x="-45" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="44" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="-125.3178" xml:space="preserve" y="289.5684" clip-path="url(#clipPath14)" stroke="none">Ellipse</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="-165" clip-path="url(#clipPath14)" x2="-45" y1="297"/> | |||||
<line y2="307" fill="none" x1="-165" clip-path="url(#clipPath14)" x2="-45" y1="307"/> | |||||
<text stroke-linecap="butt" x="-161.1323" y="323.9121" clip-path="url(#clipPath14)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve"> </text> | |||||
<rect x="-374" y="273" clip-path="url(#clipPath2)" fill="rgb(255,204,153)" width="165" height="86" stroke="none"/> | |||||
<rect x="-375" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="1" height="88" stroke="none"/> | |||||
<rect x="-374" y="272" clip-path="url(#clipPath2)" fill="rgb(255,255,218)" width="165" height="1" stroke="none"/> | |||||
<rect x="-374" y="359" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="166" height="1" stroke="none"/> | |||||
<rect x="-209" y="272" clip-path="url(#clipPath2)" fill="rgb(178,142,107)" width="1" height="87" stroke="none"/> | |||||
</g> | |||||
<g font-size="13px" stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> | |||||
<text x="-302.3427" xml:space="preserve" y="289.5684" clip-path="url(#clipPath15)" stroke="none">Arc</text> | |||||
</g> | |||||
<g text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,435,129)"> | |||||
<line y2="297" fill="none" x1="-374" clip-path="url(#clipPath15)" x2="-209" y1="297"/> | |||||
<text stroke-linecap="butt" x="-370.369" y="313.9121" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">start : int = 0</text> | |||||
<text stroke-linecap="butt" x="-370.369" y="328.0449" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">stop : int = 0</text> | |||||
<text stroke-linecap="butt" x="-370.369" y="342.1777" clip-path="url(#clipPath15)" font-family="sans-serif" stroke="none" stroke-miterlimit="1.45" xml:space="preserve">type : enumerated = open</text> | |||||
<line y2="349" fill="none" x1="-374" clip-path="url(#clipPath15)" x2="-209" y1="349"/> | |||||
<path fill="none" stroke-miterlimit="1.45" d="M330 25.9866 L330 -51.1105" clip-path="url(#clipPath2)" stroke-linecap="butt"/> | |||||
</g> | |||||
<g stroke-linecap="butt" transform="matrix(1,0,0,1,435,129)" fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" stroke="white" stroke-miterlimit="1.45"> | |||||
<path d="M330 -66.1105 L324 -50.1105 L336 -50.1105 Z" stroke="none" clip-path="url(#clipPath2)"/> | |||||
<path fill="none" d="M330 -66.1105 L324 -50.1105 L336 -50.1105 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="358.1016" xml:space="preserve" y="-15.5257" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M144.0125 136.8961 L224.6586 111.3581" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M238.9587 106.8297 L221.8939 105.9399 L225.5166 117.3801 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M238.9587 106.8297 L221.8939 105.9399 L225.5166 117.3801 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="189.6807" xml:space="preserve" y="157.8367" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M527.0471 119.4512 L435.6495 100.2246" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M420.9707 97.1368 L435.3929 106.302 L437.8632 94.559 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M420.9707 97.1368 L435.3929 106.302 L437.8632 94.559 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="479.6386" xml:space="preserve" y="83.7562" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M297.296 477.9833 L103.3633 220.9684" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="234.5212" xml:space="preserve" y="352.0335" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" stroke-dasharray="6,2" d="M328.5086 635.8717 L328.8219 562.0092" clip-path="url(#clipPath2)" stroke="gray"/> | |||||
<text fill="black" x="356.7671" xml:space="preserve" y="603.4684" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" stroke-dasharray="6,2" d="M562.7084 675.8958 L436.4021 674.7366" clip-path="url(#clipPath2)" stroke="gray"/> | |||||
<text fill="black" x="497.6459" xml:space="preserve" y="649.85" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M329.2297 477.9583 L329.6448 402.0074" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="357.5392" xml:space="preserve" y="444.5352" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M330 272.0287 L330 144.9652" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M330 129.9652 L324 145.9652 L336 145.9652 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M330 129.9652 L324 145.9652 L336 145.9652 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="358.1016" xml:space="preserve" y="205.5352" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M363.7992 477.991 L485.5677 330.9942" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="459.6346" xml:space="preserve" y="411.5709" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M547.2986 272.0164 L669.6319 175.3148" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M681.3994 166.0128 L665.1266 171.2279 L672.5682 180.6419 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M681.3994 166.0128 L665.1266 171.2279 L672.5682 180.6419 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="638.0605" xml:space="preserve" y="241.5466" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M409.4958 478.0022 L635.665 360.0009" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="553.3226" xml:space="preserve" y="440.3445" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M720 271.9767 L720 180.9874" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M720 165.9874 L714 181.9874 L726 181.9874 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M720 165.9874 L714 181.9874 L726 181.9874 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="748.1016" xml:space="preserve" y="223.5352" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M885.2778 271.9897 L768.5073 175.5583" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M756.9413 166.0069 L765.4578 180.8214 L773.0989 171.5687 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M756.9413 166.0069 L765.4578 180.8214 L773.0989 171.5687 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="860.838" xml:space="preserve" y="219.0024" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M60.7458 272.0211 L60.4984 236.019" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M60.3953 221.0194 L54.5054 237.0602 L66.5051 236.9778 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M60.3953 221.0194 L54.5054 237.0602 L66.5051 236.9778 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="88.6727" xml:space="preserve" y="251.0352" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M-76.7703 272.0004 L-24.2436 230.3307" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M-12.4923 221.0084 L-28.756 226.2517 L-21.2981 235.6528 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M-12.4923 221.0084 L-28.756 226.2517 L-21.2981 235.6528 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="-16.4339" xml:space="preserve" y="265.4579" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" stroke-dasharray="6,2" d="M-289.604 469.5886 L-291.2204 359.9842" clip-path="url(#clipPath2)" stroke="gray"/> | |||||
<text fill="black" x="-262.3073" xml:space="preserve" y="419.3316" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
<path fill="none" d="M-278.4248 271.9972 L-38.2704 195.005" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<path d="M-23.9865 190.4256 L-41.0544 189.5967 L-37.391 201.0238 Z" clip-path="url(#clipPath2)" stroke="none"/> | |||||
<path fill="none" d="M-23.9865 190.4256 L-41.0544 189.5967 L-37.391 201.0238 Z" clip-path="url(#clipPath2)" stroke="black"/> | |||||
<text fill="black" x="-118.083" xml:space="preserve" y="256.023" clip-path="url(#clipPath2)" stroke="none"> </text> | |||||
</g> | |||||
</g> | |||||
</svg> | |||||
<h3>Parameters</h3> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>failonerror</td> | |||||
<td>Boolean value. If <q>false</q>, note errors to the output but keep going.</td> | |||||
<td>No; defaults to <q>true</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>srcdir</td> | |||||
<td>Directory containing the images.</td> | |||||
<td>Yes, unless nested fileset is used</td> | |||||
</tr> | |||||
<tr> | |||||
<td>encoding</td> | |||||
<td>Image format.<br/>Valid (case insensitive) | |||||
are: <q>bmp</q>, <q>gif</q>, <q>jpeg</q>, <q>jpg</q>, <q>png</q>, <q>tif</q>, <q>tiff</q>, <q>wbmp</q> | |||||
(Java 8 VM lacks support for TIFF, which can be provided | |||||
by <a href="../install.html#librarydependencies">external libraries</a>).</td> | |||||
<td>No; defaults to the format of the first original file</td> | |||||
</tr> | |||||
<tr> | |||||
<td>overwrite</td> | |||||
<td>Boolean value. Sets whether or not to overwrite a file if there is naming conflict.</td> | |||||
<td>No; defaults to <q>false</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>gc</td> | |||||
<td>Boolean value. Enables garbage collection after each image processed.</td> | |||||
<td>No; defaults to <q>false</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>destdir</td> | |||||
<td>Directory where the result images are stored.</td> | |||||
<td>No; defaults to value of <var>srcdir</var></td> | |||||
</tr> | |||||
<!-- attributes inherited from MatchingTask --> | |||||
<tr> | |||||
<td>includes</td> | |||||
<td>comma- or space-separated list of patterns of files that must be included.</td> | |||||
<td>No; defaults to all (<q>**</q>)</td> | |||||
</tr> | |||||
<tr> | |||||
<td>includesfile</td> | |||||
<td>name of a file. Each line of this file is taken to be an include pattern</td> | |||||
<td>No</td> | |||||
</tr> | |||||
<tr> | |||||
<td>excludes</td> | |||||
<td>comma- or space-separated list of patterns of files that must be excluded.</td> | |||||
<td>No; defaults to default excludes or none if <var>defaultexcludes</var> is <q>no</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>excludesfile</td> | |||||
<td>name of a file. Each line of this file is taken to be an exclude pattern</td> | |||||
<td>No</td> | |||||
</tr> | |||||
<tr> | |||||
<td>defaultexcludes</td> | |||||
<td>indicates whether default excludes should be used or not (<q>yes|no</q>).</td> | |||||
<td>No; defaults to <q>yes</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>caseSensitive</td> | |||||
<td>Boolean value. Sets case sensitivity of the file system.</td> | |||||
<td>No; defaults to <q>false</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>followSymlinks</td> | |||||
<td>Boolean value. Sets whether or not symbolic links should be followed.</td> | |||||
<td>No; defaults to <q>true</q></td> | |||||
</tr> | |||||
</table> | |||||
<h3>Parameters specified as nested elements</h3> | |||||
<p>This task forms an implicit <a href="../Types/fileset.html">FileSet</a> and supports most | |||||
attributes of <code><fileset></code> as well as the | |||||
nested <code><include></code>, <code><exclude></code> | |||||
and <code><patternset></code> elements.</p> | |||||
<p>The following ImageOperation objects can be specified as nested | |||||
elements: <code>Rotate</code>, <code>Scale</code> and <code>Draw</code>.</p> | |||||
<h4>Rotate</h4> | |||||
<p>Adds a Rotate ImageOperation to chain.</p> | |||||
<h5>Parameters</h5> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>angle</td> | |||||
<td>Float value. Sets the angle of rotation in degrees.</td> | |||||
<td>No; defaults to <q>0.0F</q></td> | |||||
</tr> | |||||
</table> | |||||
<h4>Scale</h4> | |||||
<p>Adds a Scale ImageOperation to chain.</p> | |||||
<h5>Parameters</h5> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>proportions</td> | |||||
<td>Sets which dimension to control proportions from. Valid values are: | |||||
<ul> | |||||
<li><q>ignore</q>—treat the dimensions independently.</li> | |||||
<li><q>height</q>—keep proportions based on the width.</li> | |||||
<li><q>width</q>—keep proportions based on the height.</li> | |||||
<li><q>cover</q>—keep proportions and fit in the supplied dimensions.</li> | |||||
<li><q>fit</q>—keep proportions and cover the supplied dimensions.</li> | |||||
</ul> | |||||
</td> | |||||
<td>No; defaults to <q>ignore</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>width</td> | |||||
<td>Sets the width of the image, either as an integer (pixels) or a %.</td> | |||||
<td>No; defaults to <q>100%</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>height</td> | |||||
<td>Sets the height of the image, either as an integer (pixels) or a %.</td> | |||||
<td>No; defaults to <q>100%</q></td> | |||||
</tr> | |||||
</table> | |||||
<h4 id="draw">Draw</h4> | |||||
<p>Adds a Draw ImageOperation to chain. DrawOperation DataType objects can be nested inside the Draw | |||||
object.</p> | |||||
<h5>Parameters</h5> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>xloc</td> | |||||
<td>X-Position where to draw nested image elements.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>yloc</td> | |||||
<td>Y-Position where to draw nested image elements.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
</table> | |||||
<h5>Nested elements</h5> | |||||
<p>Both Text and BasicShape objects can be nested. Currently supported BasicShape objects are Arc, | |||||
Ellipse and Rectangle.</p> | |||||
<h6>Common parameters of BasicShape objects</h6> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>height</td> | |||||
<td>Height of a BasicShape.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>width</td> | |||||
<td>Width of a BasicShape.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>strokewidth</td> | |||||
<td>Stroke width of a BasicShape.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>color</td> | |||||
<td>Color of a BasicShape.</td> | |||||
<td>No; defaults to <q>black</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>fill</td> | |||||
<td>Fill of a BasicShape.</td> | |||||
<td>No; defaults to <q>transparent</q></td> | |||||
</tr> | |||||
</table> | |||||
<h6>Parameters specific to Arc objects</h6> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>start</td> | |||||
<td>Start angle of an arc in degrees.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>stop</td> | |||||
<td>Angle extent of an arc in degrees.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>type</td> | |||||
<td>One of <q>chord</q>, <q>open</q>, <q>pie</q>.</td> | |||||
<td>No; defaults to <q>open</q></td> | |||||
</tr> | |||||
</table> | |||||
<h6>Parameters specific to Ellipse objects</h6> | |||||
<p>None.</p> | |||||
<h6>Parameters specific to Rectangle objects</h6> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>archeight</td> | |||||
<td>Vertical diameter of the arc at the corners of the rectangle.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>arcwidth</td> | |||||
<td>Horisontal diameter of the arc at the corners of the rectangle.</td> | |||||
<td>No; defaults to <q>0</q></td> | |||||
</tr> | |||||
</table> | |||||
<h6>Parameters of Text</h6> | |||||
<table class="attr"> | |||||
<tr> | |||||
<th scope="col">Attribute</th> | |||||
<th scope="col">Description</th> | |||||
<th scope="col">Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>string</td> | |||||
<td>The text string.</td> | |||||
<td>No; defaults to <q></q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>font</td> | |||||
<td>The font to set the text in.</td> | |||||
<td>No; defaults to <q>Arial</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>point</td> | |||||
<td>Size of the font in points.</td> | |||||
<td>No; defaults to <q>10</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>bold</td> | |||||
<td>Whether the font is bold.</td> | |||||
<td>No; defaults to <q>false</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>color</td> | |||||
<td>Color of the text.</td> | |||||
<td>No; defaults to <q>black</q></td> | |||||
</tr> | |||||
<tr> | |||||
<td>italic</td> | |||||
<td>Whether the font is italic.</td> | |||||
<td>No; defaults to <q>false</q></td> | |||||
</tr> | |||||
</table> | |||||
<h4>mapper</h4> | |||||
<p>You can define filename transformations by using a | |||||
nested <a href="../Types/mapper.html">mapper</a> element. The default mapper used | |||||
by <code><image></code> is the <a href="../Types/mapper.html#identity-mapper">identity | |||||
mapper</a>.</p> | |||||
<p>You can also use a <code>filenamemapper</code> type in place of the <code>mapper</code> | |||||
element.</p> | |||||
<h3>Examples</h3> | |||||
<p>Create thumbnails of my images and make sure they all fit within the 160×160 pixel size | |||||
whether the image is portrait or landscape.</p> | |||||
<pre> | |||||
<image destdir="samples/low" overwrite="yes"> | |||||
<fileset dir="samples/full"> | |||||
<include name="**/*.jpg"/> | |||||
</fileset> | |||||
<scale width="160" height="160" proportions="fit"/> | |||||
</image></pre> | |||||
<p>Create a thumbnail for all PNG files in <samp>src</samp> of the size of 40 pixels keeping the | |||||
proportions and store the <samp>src</samp>.</p> | |||||
<pre> | |||||
<image srcdir="src" includes="*.png"> | |||||
<scale proportions="width" width="40"/> | |||||
</image></pre> | |||||
<p>Same as above but store the result in <samp>dest</samp>.</p> | |||||
<pre> | |||||
<image srcdir="src" destdir="dest" includes="*.png"> | |||||
<scale proportions="width" width="40"/> | |||||
</image></pre> | |||||
<p>Same as above but store the result to files with original names prefixed | |||||
by <samp>scaled-</samp>.</p> | |||||
<pre> | |||||
<image srcdir="src" destdir="dest" includes="*.png"> | |||||
<scale proportions="width" width="40"/> | |||||
<globmapper from="*" to="scaled-*"/> | |||||
</image></pre> | |||||
</body> | |||||
</html> |
@@ -898,10 +898,8 @@ these tasks available. Please refer to the <a href="#optionalTasks">Installing A | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>activation.jar<br/> | <td>activation.jar<br/> | ||||
(included in Java 6 to Java 10 but | |||||
the <code>java.activation</code> module is deprecated and marked | |||||
for removal in Java 9 and needs to be enabled explicitly on Java | |||||
10)</td> | |||||
(included in Java 6 to Java 10 but the <code>java.activation</code> module is deprecated and marked for removal in | |||||
Java 9 and needs to be enabled explicitly on Java 10)</td> | |||||
<td><a href="Tasks/mail.html">mail</a> task with MIME encoding, | <td><a href="Tasks/mail.html">mail</a> task with MIME encoding, | ||||
and <em><u>deprecated</u></em> <a href="Tasks/mimemail.html">mimemail</a> task</td> | and <em><u>deprecated</u></em> <a href="Tasks/mimemail.html">mimemail</a> task</td> | ||||
<td><a href="https://github.com/javaee/activation" | <td><a href="https://github.com/javaee/activation" | ||||
@@ -930,6 +928,12 @@ these tasks available. Please refer to the <a href="#optionalTasks">Installing A | |||||
<td><a href="https://download.java.net/media/jai/builds/release/1_1_3/INSTALL.html" | <td><a href="https://download.java.net/media/jai/builds/release/1_1_3/INSTALL.html" | ||||
target="_top">https://download.java.net/media/jai/builds/release/1_1_3/INSTALL.html</a></td> | target="_top">https://download.java.net/media/jai/builds/release/1_1_3/INSTALL.html</a></td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td>jai-imageio-core.jar</td> | |||||
<td><a href="Tasks/imageio.html">imageio</a> task for TIFF support on Java 8, as well as PCX, PNM, RAW support</td> | |||||
<td><a href="https://github.com/jai-imageio/jai-imageio-core/releases" | |||||
target="_top">https://github.com/jai-imageio/jai-imageio-core/releases</a></td> | |||||
</tr> | |||||
<tr> | <tr> | ||||
<td>XZ—XZ for Java <strong>1.6 or later</strong></td> | <td>XZ—XZ for Java <strong>1.6 or later</strong></td> | ||||
<td><a href="Tasks/pack.html">xz</a> and <a href="Tasks/unpack.html">unxz</a> | <td><a href="Tasks/pack.html">xz</a> and <a href="Tasks/unpack.html">unxz</a> | ||||
@@ -89,7 +89,8 @@ | |||||
<li><a href="Tasks/unpack.html">GUnzip</a></li> | <li><a href="Tasks/unpack.html">GUnzip</a></li> | ||||
<li><a href="Tasks/pack.html">GZip</a></li> | <li><a href="Tasks/pack.html">GZip</a></li> | ||||
<li><a href="Tasks/hostinfo.html">Hostinfo</a></li> | <li><a href="Tasks/hostinfo.html">Hostinfo</a></li> | ||||
<li><a href="Tasks/image.html">Image</a></li> | |||||
<li><a href="Tasks/image.html"><em>Image</em></a></li> | |||||
<li><a href="Tasks/imageio.html">ImageIO</a></li> | |||||
<li><a href="Tasks/import.html">Import</a></li> | <li><a href="Tasks/import.html">Import</a></li> | ||||
<li><a href="Tasks/include.html">Include</a></li> | <li><a href="Tasks/include.html">Include</a></li> | ||||
<li><a href="Tasks/input.html">Input</a></li> | <li><a href="Tasks/input.html">Input</a></li> | ||||
@@ -91,6 +91,12 @@ | |||||
<artifact name="ant-commons-net" type="jar.asc" ext="jar.asc"/> | <artifact name="ant-commons-net" type="jar.asc" ext="jar.asc"/> | ||||
<artifact name="ant-commons-net" type="source" ext="jar" e:classifier="sources"/> | <artifact name="ant-commons-net" type="source" ext="jar" e:classifier="sources"/> | ||||
<artifact name="ant-commons-net" type="source.asc" ext="jar.asc" e:classifier="sources"/> | <artifact name="ant-commons-net" type="source.asc" ext="jar.asc" e:classifier="sources"/> | ||||
<artifact name="ant-imageio" type="pom" ext="pom"/> | |||||
<artifact name="ant-imageio" type="pom.asc" ext="pom.asc"/> | |||||
<artifact name="ant-imageio" type="jar" ext="jar"/> | |||||
<artifact name="ant-imageio" type="jar.asc" ext="jar.asc"/> | |||||
<artifact name="ant-imageio" type="source" ext="jar" e:classifier="sources"/> | |||||
<artifact name="ant-imageio" type="source.asc" ext="jar.asc" e:classifier="sources"/> | |||||
<artifact name="ant-jai" type="pom" ext="pom"/> | <artifact name="ant-jai" type="pom" ext="pom"/> | ||||
<artifact name="ant-jai" type="pom.asc" ext="pom.asc"/> | <artifact name="ant-jai" type="pom.asc" ext="pom.asc"/> | ||||
<artifact name="ant-jai" type="jar" ext="jar"/> | <artifact name="ant-jai" type="jar" ext="jar"/> | ||||
@@ -0,0 +1,66 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!-- | |||||
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. | |||||
--> | |||||
<!-- | |||||
This POM has been created manually by the Ant Development Team. | |||||
Please contact us if you are not satisfied with the data contained in this POM. | |||||
URL : http://ant.apache.org | |||||
--> | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||||
<parent> | |||||
<groupId>org.apache.ant</groupId> | |||||
<artifactId>ant-parent</artifactId> | |||||
<relativePath>../pom.xml</relativePath> | |||||
<version>1.10.6-SNAPSHOT</version> | |||||
</parent> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<url>http://ant.apache.org/</url> | |||||
<groupId>org.apache.ant</groupId> | |||||
<artifactId>ant-imageio</artifactId> | |||||
<version>1.10.6-SNAPSHOT</version> | |||||
<name>Apache Ant + ImageIO</name> | |||||
<description>imageio task and corresponding types.</description> | |||||
<dependencies> | |||||
<dependency> | |||||
<groupId>org.apache.ant</groupId> | |||||
<artifactId>ant</artifactId> | |||||
<version>1.10.6-SNAPSHOT</version> | |||||
<scope>compile</scope> | |||||
</dependency> | |||||
</dependencies> | |||||
<build> | |||||
<plugins> | |||||
<plugin> | |||||
<groupId>org.apache.maven.plugins</groupId> | |||||
<artifactId>maven-compiler-plugin</artifactId> | |||||
<configuration> | |||||
<includes> | |||||
<include>org/apache/tools/ant/taskdefs/optional/image/ImageIOTask.java</include> | |||||
<include>org/apache/tools/ant/types/optional/imageio/*</include> | |||||
</includes> | |||||
</configuration> | |||||
</plugin> | |||||
</plugins> | |||||
<sourceDirectory>../../../../src/main</sourceDirectory> | |||||
<testSourceDirectory>../../../../src/testcases</testSourceDirectory> | |||||
<outputDirectory>../../../../target/${project.artifactId}/classes</outputDirectory> | |||||
<testOutputDirectory>../../../../target/${project.artifactId}/testcases</testOutputDirectory> | |||||
<directory>../../../../target/${project.artifactId}</directory> | |||||
</build> | |||||
</project> |
@@ -70,7 +70,7 @@ | |||||
<artifactId>maven-compiler-plugin</artifactId> | <artifactId>maven-compiler-plugin</artifactId> | ||||
<configuration> | <configuration> | ||||
<includes> | <includes> | ||||
<include>org/apache/tools/ant/taskdefs/optional/image/*</include> | |||||
<include>org/apache/tools/ant/taskdefs/optional/image/Image.java</include> | |||||
<include>org/apache/tools/ant/types/optional/image/*</include> | <include>org/apache/tools/ant/types/optional/image/*</include> | ||||
</includes> | </includes> | ||||
</configuration> | </configuration> | ||||
@@ -0,0 +1,97 @@ | |||||
<?xml version="1.0"?> | |||||
<!-- | |||||
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. | |||||
--> | |||||
<project name="image-test" default="main" basedir="."> | |||||
<import file="../../../buildfiletest-base.xml"/> | |||||
<target name="setUp"> | |||||
<mkdir dir="${output}"/> | |||||
<property name="src.dir" location="${basedir}/src"/> | |||||
</target> | |||||
<target name="main" depends="testSimpleScale"/> | |||||
<!-- this should produce a single file in the dest dir --> | |||||
<target name="testSimpleScale" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="no" failonerror="no"> | |||||
<scale width="300" proportions="width"/> | |||||
</imageio> | |||||
</target> | |||||
<!-- this should put some text in the log --> | |||||
<target name="testEchoToLog" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="no" failonerror="no"> | |||||
<scale width="300" proportions="width"/> | |||||
</imageio> | |||||
</target> | |||||
<!-- this should produce a single file in the dest dir --> | |||||
<target name="testFailOnError" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="no" failonerror="yes"> | |||||
<scale width="300" proportions="width"/> | |||||
</imageio> | |||||
</target> | |||||
<!-- this should produce a single file in the dest dir, overwriting any existing file --> | |||||
<target name="testOverwriteTrue" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="yes" failonerror="no"> | |||||
<scale width="300" proportions="width"/> | |||||
</imageio> | |||||
</target> | |||||
<!-- this should produce a single file in the dest dir, overwriting any existing file --> | |||||
<target name="testDrawOverwriteTrue" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="yes" failonerror="no"> | |||||
<scale width="300" proportions="width"/> | |||||
<draw xloc="10" yloc="10"> | |||||
<rectangle height="50" width="50" strokewidth="2"/> | |||||
<text string="Test"/> | |||||
</draw> | |||||
</imageio> | |||||
</target> | |||||
<!-- this should not overwrite the existing file --> | |||||
<target name="testOverwriteFalse" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="no" failonerror="no"> | |||||
<scale width="300" proportions="width"/> | |||||
</imageio> | |||||
</target> | |||||
<!-- this tests a special case of rotation --> | |||||
<target name="testFlip" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="no" failonerror="no"> | |||||
<rotate angle="-180"/> | |||||
</imageio> | |||||
</target> | |||||
<target name="testSimpleScaleWithMapper" depends="setUp"> | |||||
<imageio includes="*.jpg" srcdir="${src.dir}" destdir="${output}" | |||||
overwrite="no" failonerror="no"> | |||||
<scale width="300" proportions="width"/> | |||||
<globmapper from="*" to="scaled-*"/> | |||||
</imageio> | |||||
</target> | |||||
</project> |
@@ -148,6 +148,7 @@ depend=org.apache.tools.ant.taskdefs.optional.depend.Depend | |||||
ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar | ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar | ||||
ftp=org.apache.tools.ant.taskdefs.optional.net.FTP | ftp=org.apache.tools.ant.taskdefs.optional.net.FTP | ||||
image=org.apache.tools.ant.taskdefs.optional.image.Image | image=org.apache.tools.ant.taskdefs.optional.image.Image | ||||
imageio=org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
iplanet-ejbc=org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask | iplanet-ejbc=org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask | ||||
jarlib-available=org.apache.tools.ant.taskdefs.optional.extension.JarLibAvailableTask | jarlib-available=org.apache.tools.ant.taskdefs.optional.extension.JarLibAvailableTask | ||||
jarlib-display=org.apache.tools.ant.taskdefs.optional.extension.JarLibDisplayTask | jarlib-display=org.apache.tools.ant.taskdefs.optional.extension.JarLibDisplayTask | ||||
@@ -197,7 +198,6 @@ vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL | |||||
wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc | wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc | ||||
xmlvalidate=org.apache.tools.ant.taskdefs.optional.XMLValidateTask | xmlvalidate=org.apache.tools.ant.taskdefs.optional.XMLValidateTask | ||||
# deprecated ant tasks (kept for back compatibility) | # deprecated ant tasks (kept for back compatibility) | ||||
copydir=org.apache.tools.ant.taskdefs.Copydir | copydir=org.apache.tools.ant.taskdefs.Copydir | ||||
copyfile=org.apache.tools.ant.taskdefs.Copyfile | copyfile=org.apache.tools.ant.taskdefs.Copyfile | ||||
@@ -358,8 +358,8 @@ public class Image extends MatchingTask { | |||||
} | } | ||||
// deal with the filesets | // deal with the filesets | ||||
for (FileSet fs : filesets) { | for (FileSet fs : filesets) { | ||||
writeCount += processDir(fs.getDir(getProject()), | |||||
fs.getDirectoryScanner(getProject()).getIncludedFiles(), | |||||
writeCount += processDir(fs.getDir(), | |||||
fs.getDirectoryScanner().getIncludedFiles(), | |||||
dest, mapper); | dest, mapper); | ||||
} | } | ||||
@@ -0,0 +1,389 @@ | |||||
/* | |||||
* 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.tools.ant.taskdefs.optional.image; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.taskdefs.MatchingTask; | |||||
import org.apache.tools.ant.types.FileSet; | |||||
import org.apache.tools.ant.types.Mapper; | |||||
import org.apache.tools.ant.types.optional.imageio.Draw; | |||||
import org.apache.tools.ant.types.optional.imageio.ImageOperation; | |||||
import org.apache.tools.ant.types.optional.imageio.Rotate; | |||||
import org.apache.tools.ant.types.optional.imageio.Scale; | |||||
import org.apache.tools.ant.types.optional.imageio.TransformOperation; | |||||
import org.apache.tools.ant.util.FileNameMapper; | |||||
import org.apache.tools.ant.util.IdentityMapper; | |||||
import org.apache.tools.ant.util.StringUtils; | |||||
import javax.imageio.ImageIO; | |||||
import javax.imageio.ImageReader; | |||||
import javax.imageio.stream.ImageInputStream; | |||||
import java.awt.image.BufferedImage; | |||||
import java.io.File; | |||||
import java.io.IOException; | |||||
import java.util.ArrayList; | |||||
import java.util.Arrays; | |||||
import java.util.Iterator; | |||||
import java.util.List; | |||||
import java.util.stream.Collectors; | |||||
/** | |||||
* A MatchingTask which relies on Java ImageIO to read existing image files | |||||
* and write the results of AWT image manipulation operations. | |||||
* The operations are represented as ImageOperation DataType objects. | |||||
* The task replaces a JAI-based Image task which no longer works with Java 9+. | |||||
* | |||||
* @see ImageOperation | |||||
* @see org.apache.tools.ant.types.DataType | |||||
*/ | |||||
public class ImageIOTask extends MatchingTask { | |||||
private final List<ImageOperation> instructions = new ArrayList<>(); | |||||
private boolean overwrite = false; | |||||
private final List<FileSet> filesets = new ArrayList<>(); | |||||
private File srcDir = null; | |||||
private File destDir = null; | |||||
private String format; | |||||
private boolean garbageCollect = false; | |||||
private boolean failOnError = true; | |||||
private Mapper mapperElement = null; | |||||
/** | |||||
* Add a set of files to be deleted. | |||||
* @param set the FileSet to add. | |||||
*/ | |||||
public void addFileset(FileSet set) { | |||||
filesets.add(set); | |||||
} | |||||
/** | |||||
* Set whether to fail on error. | |||||
* If false, note errors to the output but keep going. | |||||
* @param flag true or false. | |||||
*/ | |||||
public void setFailOnError(boolean flag) { | |||||
failOnError = flag; | |||||
} | |||||
/** | |||||
* Set the source dir to find the image files. | |||||
* @param srcDir the directory in which the image files reside. | |||||
*/ | |||||
public void setSrcdir(File srcDir) { | |||||
this.srcDir = srcDir; | |||||
} | |||||
/** | |||||
* Set the image format. | |||||
* @param encoding the String image format. | |||||
*/ | |||||
public void setEncoding(String encoding) { | |||||
format = encoding; | |||||
} | |||||
/** | |||||
* Set whether to overwrite a file if there is a naming conflict. | |||||
* @param overwrite whether to overwrite. | |||||
*/ | |||||
public void setOverwrite(boolean overwrite) { | |||||
this.overwrite = overwrite; | |||||
} | |||||
/** | |||||
* Set whether to invoke Garbage Collection after each image processed. | |||||
* Defaults to false. | |||||
* @param gc whether to invoke the garbage collector. | |||||
*/ | |||||
public void setGc(boolean gc) { | |||||
garbageCollect = gc; | |||||
} | |||||
/** | |||||
* Set the destination directory for manipulated images. | |||||
* @param destDir The destination directory. | |||||
*/ | |||||
public void setDestDir(File destDir) { | |||||
this.destDir = destDir; | |||||
} | |||||
/** | |||||
* Add an ImageOperation to chain. | |||||
* @param instr The ImageOperation to append to the chain. | |||||
*/ | |||||
public void addImageOperation(ImageOperation instr) { | |||||
instructions.add(instr); | |||||
} | |||||
/** | |||||
* Add a Rotate ImageOperation to the chain. | |||||
* @param instr The Rotate operation to add to the chain. | |||||
* @see Rotate | |||||
*/ | |||||
public void addRotate(Rotate instr) { | |||||
instructions.add(instr); | |||||
} | |||||
/** | |||||
* Add a Scale ImageOperation to the chain. | |||||
* @param instr The Scale operation to add to the chain. | |||||
* @see Scale | |||||
*/ | |||||
public void addScale(Scale instr) { | |||||
instructions.add(instr); | |||||
} | |||||
/** | |||||
* Add a Draw ImageOperation to the chain. DrawOperation | |||||
* DataType objects can be nested inside the Draw object. | |||||
* @param instr The Draw operation to add to the chain. | |||||
* @see Draw | |||||
* @see org.apache.tools.ant.types.optional.image.DrawOperation | |||||
*/ | |||||
public void addDraw(Draw instr) { | |||||
instructions.add(instr); | |||||
} | |||||
/** | |||||
* Add an ImageOperation to chain. | |||||
* @param instr The ImageOperation to append to the chain. | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public void add(ImageOperation instr) { | |||||
addImageOperation(instr); | |||||
} | |||||
/** | |||||
* Defines the mapper to map source to destination files. | |||||
* @return a mapper to be configured | |||||
* @exception BuildException if more than one mapper is defined | |||||
* @since Ant 1.8.0 | |||||
*/ | |||||
public Mapper createMapper() throws BuildException { | |||||
if (mapperElement != null) { | |||||
throw new BuildException("Cannot define more than one mapper", | |||||
getLocation()); | |||||
} | |||||
mapperElement = new Mapper(getProject()); | |||||
return mapperElement; | |||||
} | |||||
/** | |||||
* Add a nested filenamemapper. | |||||
* @param fileNameMapper the mapper to add. | |||||
* @since Ant 1.8.0 | |||||
*/ | |||||
public void add(FileNameMapper fileNameMapper) { | |||||
createMapper().add(fileNameMapper); | |||||
} | |||||
/** | |||||
* Executes all the chained ImageOperations on the files inside | |||||
* the directory. | |||||
* @param srcDir File | |||||
* @param srcNames String[] | |||||
* @param dstDir File | |||||
* @param mapper FileNameMapper | |||||
* @return int | |||||
* @since Ant 1.8.0 | |||||
*/ | |||||
public int processDir(final File srcDir, final String[] srcNames, | |||||
final File dstDir, final FileNameMapper mapper) { | |||||
int writeCount = 0; | |||||
for (final String srcName : srcNames) { | |||||
final File srcFile = new File(srcDir, srcName).getAbsoluteFile(); | |||||
final String[] dstNames = mapper.mapFileName(srcName); | |||||
if (dstNames == null) { | |||||
log(srcFile + " skipped, don't know how to handle it", | |||||
Project.MSG_VERBOSE); | |||||
continue; | |||||
} | |||||
for (String dstName : dstNames) { | |||||
final File dstFile = new File(dstDir, dstName).getAbsoluteFile(); | |||||
if (dstFile.exists()) { | |||||
// avoid overwriting unless necessary | |||||
if (!overwrite | |||||
&& srcFile.lastModified() <= dstFile.lastModified()) { | |||||
log(srcFile + " omitted as " + dstFile | |||||
+ " is up to date.", Project.MSG_VERBOSE); | |||||
// don't overwrite the file | |||||
continue; | |||||
} | |||||
// avoid extra work while overwriting | |||||
if (!srcFile.equals(dstFile)) { | |||||
dstFile.delete(); | |||||
} | |||||
} | |||||
processFile(srcFile, dstFile); | |||||
++writeCount; | |||||
} | |||||
} | |||||
// run the garbage collector if wanted | |||||
if (garbageCollect) { | |||||
System.gc(); | |||||
} | |||||
return writeCount; | |||||
} | |||||
/** | |||||
* Executes all the chained ImageOperations on the file | |||||
* specified. | |||||
* @param file The file to be processed. | |||||
* @deprecated this method isn't used anymore | |||||
*/ | |||||
@Deprecated | |||||
public void processFile(File file) { | |||||
processFile(file, new File(destDir == null | |||||
? srcDir : destDir, file.getName())); | |||||
} | |||||
/** | |||||
* Executes all the chained ImageOperations on the file | |||||
* specified. | |||||
* @param file The file to be processed. | |||||
* @param newFile The file to write to. | |||||
* @since Ant 1.8.0 | |||||
*/ | |||||
public void processFile(File file, File newFile) { | |||||
log("Processing File: " + file.getAbsolutePath()); | |||||
try (ImageInputStream input = ImageIO.createImageInputStream(file)) { | |||||
Iterator<ImageReader> readers = ImageIO.getImageReaders(input); | |||||
if (!readers.hasNext()) { | |||||
log("No decoder available, skipping"); | |||||
return; | |||||
} | |||||
ImageReader reader = readers.next(); | |||||
if (format == null) { | |||||
format = reader.getFormatName(); | |||||
} | |||||
reader.setInput(input); | |||||
BufferedImage image = reader.read(0); | |||||
reader.dispose(); | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof TransformOperation) { | |||||
image = ((TransformOperation) instr).executeTransformOperation(image); | |||||
} else { | |||||
log("Not a TransformOperation: " + instr); | |||||
} | |||||
} | |||||
File dstParent = newFile.getParentFile(); | |||||
if (!dstParent.isDirectory() | |||||
&& !(dstParent.mkdirs() || dstParent.isDirectory())) { | |||||
throw new BuildException("Failed to create parent directory %s", | |||||
dstParent); | |||||
} | |||||
if (overwrite && newFile.exists() && !newFile.equals(file)) { | |||||
newFile.delete(); | |||||
} | |||||
if (!ImageIO.write(image, format, newFile)) { | |||||
log("Failed to save the transformed file"); | |||||
} | |||||
} catch (IOException | RuntimeException err) { | |||||
if (!file.equals(newFile)) { | |||||
newFile.delete(); | |||||
} | |||||
if (!failOnError) { | |||||
log("Error processing file: " + err); | |||||
} else { | |||||
throw new BuildException(err); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* Executes the Task. | |||||
* @throws BuildException on error. | |||||
*/ | |||||
@Override | |||||
public void execute() throws BuildException { | |||||
validateAttributes(); | |||||
try { | |||||
File dest = (destDir != null) ? destDir : srcDir; | |||||
int writeCount = 0; | |||||
// build mapper | |||||
final FileNameMapper mapper = mapperElement == null | |||||
? new IdentityMapper() : mapperElement.getImplementation(); | |||||
// deal with specified srcDir | |||||
if (srcDir != null) { | |||||
writeCount += processDir(srcDir, | |||||
super.getDirectoryScanner(srcDir).getIncludedFiles(), dest, | |||||
mapper); | |||||
} | |||||
// deal with the filesets | |||||
for (FileSet fs : filesets) { | |||||
writeCount += processDir(fs.getDir(), | |||||
fs.getDirectoryScanner().getIncludedFiles(), | |||||
dest, mapper); | |||||
} | |||||
if (writeCount > 0) { | |||||
log("Processed " + writeCount + (writeCount == 1 ? " image." : " images.")); | |||||
} | |||||
} catch (Exception err) { | |||||
log(StringUtils.getStackTrace(err), Project.MSG_ERR); | |||||
throw new BuildException(err.getMessage()); | |||||
} | |||||
} | |||||
/** | |||||
* Ensure we have a consistent and legal set of attributes, and set | |||||
* any internal flags necessary based on different combinations | |||||
* of attributes. | |||||
* @throws BuildException on error. | |||||
*/ | |||||
protected void validateAttributes() throws BuildException { | |||||
if (srcDir == null && filesets.isEmpty()) { | |||||
throw new BuildException( | |||||
"Specify at least one source--a srcDir or a fileset."); | |||||
} | |||||
if (srcDir == null && destDir == null) { | |||||
throw new BuildException("Specify the destDir, or the srcDir."); | |||||
} | |||||
if (format != null && !Arrays.asList(ImageIO.getReaderFormatNames()).contains(format)) { | |||||
throw new BuildException("Unknown image format '" + format + "'" | |||||
+ System.lineSeparator() + "Use any of " | |||||
+ Arrays.stream(ImageIO.getReaderFormatNames()).sorted() | |||||
.collect(Collectors.joining(", "))); | |||||
} | |||||
} | |||||
} | |||||
@@ -32,7 +32,7 @@ import javax.media.jai.PlanarImage; | |||||
public class Text extends ImageOperation implements DrawOperation { | public class Text extends ImageOperation implements DrawOperation { | ||||
private static final int DEFAULT_POINT = 10; | private static final int DEFAULT_POINT = 10; | ||||
private String strText = ""; | |||||
private String string = ""; | |||||
private String font = "Arial"; | private String font = "Arial"; | ||||
private int point = DEFAULT_POINT; | private int point = DEFAULT_POINT; | ||||
private boolean bold = false; | private boolean bold = false; | ||||
@@ -44,7 +44,7 @@ public class Text extends ImageOperation implements DrawOperation { | |||||
* @param str the string to be used. | * @param str the string to be used. | ||||
*/ | */ | ||||
public void setString(String str) { | public void setString(String str) { | ||||
strText = str; | |||||
string = str; | |||||
} | } | ||||
/** | /** | ||||
@@ -93,7 +93,7 @@ public class Text extends ImageOperation implements DrawOperation { | |||||
*/ | */ | ||||
@Override | @Override | ||||
public PlanarImage executeDrawOperation() { | public PlanarImage executeDrawOperation() { | ||||
log("\tCreating Text \"" + strText + "\""); | |||||
log("\tCreating Text \"" + string + "\""); | |||||
int width = 1; | int width = 1; | ||||
int height = 1; | int height = 1; | ||||
@@ -107,7 +107,7 @@ public class Text extends ImageOperation implements DrawOperation { | |||||
Font f = createFont(); | Font f = createFont(); | ||||
FontMetrics fmetrics = graphics.getFontMetrics(f); | FontMetrics fmetrics = graphics.getFontMetrics(f); | ||||
height = fmetrics.getMaxAscent() + fmetrics.getMaxDescent(); | height = fmetrics.getMaxAscent() + fmetrics.getMaxDescent(); | ||||
width = fmetrics.stringWidth(strText); | |||||
width = fmetrics.stringWidth(string); | |||||
bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | ||||
graphics = bi.createGraphics(); | graphics = bi.createGraphics(); | ||||
@@ -119,7 +119,7 @@ public class Text extends ImageOperation implements DrawOperation { | |||||
graphics.setFont(f); | graphics.setFont(f); | ||||
graphics.setColor(ColorMapper.getColorByName(color)); | graphics.setColor(ColorMapper.getColorByName(color)); | ||||
graphics.drawString(strText, 0, height - fmetrics.getMaxDescent()); | |||||
graphics.drawString(string, 0, height - fmetrics.getMaxDescent()); | |||||
return PlanarImage.wrapRenderedImage(bi); | return PlanarImage.wrapRenderedImage(bi); | ||||
} | } | ||||
@@ -0,0 +1,97 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.BasicStroke; | |||||
import java.awt.Graphics2D; | |||||
import java.awt.geom.Arc2D; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* Draw an arc. | |||||
*/ | |||||
public class Arc extends BasicShape implements DrawOperation { | |||||
private int start = 0; | |||||
private int stop = 0; | |||||
private int type = Arc2D.OPEN; | |||||
/** | |||||
* Set the start of the arc. | |||||
* @param start the start of the arc. | |||||
*/ | |||||
public void setStart(int start) { | |||||
this.start = start; | |||||
} | |||||
/** | |||||
* Set the stop of the arc. | |||||
* @param stop the stop of the arc. | |||||
*/ | |||||
public void setStop(int stop) { | |||||
this.stop = stop; | |||||
} | |||||
/** | |||||
* Set the type of arc. | |||||
* @param strType the type to use - open, pie or chord. | |||||
* @todo refactor using an EnumeratedAttribute | |||||
*/ | |||||
public void setType(String strType) { | |||||
if ("open".equalsIgnoreCase(strType)) { | |||||
type = Arc2D.OPEN; | |||||
} else if ("pie".equalsIgnoreCase(strType)) { | |||||
type = Arc2D.PIE; | |||||
} else if ("chord".equalsIgnoreCase(strType)) { | |||||
type = Arc2D.CHORD; | |||||
} | |||||
} | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public BufferedImage executeDrawOperation() { | |||||
BufferedImage bi = new BufferedImage(width + (strokeWidth * 2), | |||||
height + (strokeWidth * 2), BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||||
Graphics2D graphics = bi.createGraphics(); | |||||
if (!"transparent".equalsIgnoreCase(stroke)) { | |||||
BasicStroke bStroke = new BasicStroke(strokeWidth); | |||||
graphics.setColor(ColorMapper.getColorByName(stroke)); | |||||
graphics.setStroke(bStroke); | |||||
graphics.draw(new Arc2D.Double(strokeWidth, strokeWidth, width, | |||||
height, start, stop, type)); | |||||
} | |||||
if (!"transparent".equalsIgnoreCase(fill)) { | |||||
graphics.setColor(ColorMapper.getColorByName(fill)); | |||||
graphics.fill(new Arc2D.Double(strokeWidth, strokeWidth, | |||||
width, height, start, stop, type)); | |||||
} | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
BufferedImage img = ((DrawOperation) instr).executeDrawOperation(); | |||||
graphics.drawImage(img, null, 0, 0); | |||||
} else if (instr instanceof TransformOperation) { | |||||
bi = ((TransformOperation) instr).executeTransformOperation(bi); | |||||
graphics = bi.createGraphics(); | |||||
} | |||||
} | |||||
return bi; | |||||
} | |||||
} |
@@ -0,0 +1,70 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
/** Draw a basic shape */ | |||||
public abstract class BasicShape extends ImageOperation implements DrawOperation { | |||||
// CheckStyle:VisibilityModifier OFF - bc | |||||
protected int width = 0; | |||||
protected int height = 0; | |||||
protected int strokeWidth = 0; | |||||
protected String stroke = "black"; | |||||
protected String fill = "transparent"; | |||||
// CheckStyle:VisibilityModifier ON | |||||
/** | |||||
* Set the width. | |||||
* @param w the width of the shape. | |||||
*/ | |||||
public void setWidth(int w) { | |||||
width = w; | |||||
} | |||||
/** | |||||
* Set the height. | |||||
* @param h the height of the shape. | |||||
*/ | |||||
public void setHeight(int h) { | |||||
height = h; | |||||
} | |||||
/** | |||||
* Set the stroke width attribute. | |||||
* @param sw the value to use. | |||||
*/ | |||||
public void setStrokewidth(int sw) { | |||||
strokeWidth = sw; | |||||
} | |||||
/** | |||||
* Set the stroke attribute. | |||||
* @param col the color value to use. | |||||
*/ | |||||
public void setStroke(String col) { | |||||
stroke = col; | |||||
} | |||||
/** | |||||
* Set the fill attribute. | |||||
* @param col the color value to use. | |||||
*/ | |||||
public void setFill(String col) { | |||||
fill = col; | |||||
} | |||||
} |
@@ -0,0 +1,108 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.Color; | |||||
import java.util.Locale; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public final class ColorMapper { | |||||
/** black string */ | |||||
public static final String COLOR_BLACK = "black"; | |||||
/** blue string */ | |||||
public static final String COLOR_BLUE = "blue"; | |||||
/** cyan string */ | |||||
public static final String COLOR_CYAN = "cyan"; | |||||
/** black string */ | |||||
public static final String COLOR_DARKGRAY = "darkgray"; | |||||
/** gray string */ | |||||
public static final String COLOR_GRAY = "gray"; | |||||
/** lightgray string */ | |||||
public static final String COLOR_LIGHTGRAY = "lightgray"; | |||||
// Gotta at least put in the proper spelling :-P | |||||
/** darkgrey string */ | |||||
public static final String COLOR_DARKGREY = "darkgrey"; | |||||
/** grey string */ | |||||
public static final String COLOR_GREY = "grey"; | |||||
/** lightgrey string */ | |||||
public static final String COLOR_LIGHTGREY = "lightgrey"; | |||||
/** green string */ | |||||
public static final String COLOR_GREEN = "green"; | |||||
/** magenta string */ | |||||
public static final String COLOR_MAGENTA = "magenta"; | |||||
/** orange string */ | |||||
public static final String COLOR_ORANGE = "orange"; | |||||
/** pink string */ | |||||
public static final String COLOR_PINK = "pink"; | |||||
/** reg string */ | |||||
public static final String COLOR_RED = "red"; | |||||
/** white string */ | |||||
public static final String COLOR_WHITE = "white"; | |||||
/** yellow string */ | |||||
public static final String COLOR_YELLOW = "yellow"; | |||||
/** | |||||
* Convert a color name to a color value. | |||||
* @param colorName a string repr of the color. | |||||
* @return the color value. | |||||
* @todo refactor to use an EnumeratedAttribute (maybe?) | |||||
*/ | |||||
public static Color getColorByName(String colorName) { | |||||
switch (colorName.toLowerCase(Locale.ENGLISH)) { | |||||
case COLOR_BLUE: | |||||
return Color.blue; | |||||
case COLOR_CYAN: | |||||
return Color.cyan; | |||||
case COLOR_DARKGRAY: | |||||
case COLOR_DARKGREY: | |||||
return Color.darkGray; | |||||
case COLOR_GRAY: | |||||
case COLOR_GREY: | |||||
return Color.gray; | |||||
case COLOR_LIGHTGRAY: | |||||
case COLOR_LIGHTGREY: | |||||
return Color.lightGray; | |||||
case COLOR_GREEN: | |||||
return Color.green; | |||||
case COLOR_MAGENTA: | |||||
return Color.magenta; | |||||
case COLOR_ORANGE: | |||||
return Color.orange; | |||||
case COLOR_PINK: | |||||
return Color.pink; | |||||
case COLOR_RED: | |||||
return Color.red; | |||||
case COLOR_WHITE: | |||||
return Color.white; | |||||
case COLOR_YELLOW: | |||||
return Color.yellow; | |||||
case COLOR_BLACK: | |||||
default: | |||||
return Color.black; | |||||
} | |||||
} | |||||
/** private constructor for Utility class */ | |||||
private ColorMapper() { | |||||
} | |||||
} |
@@ -0,0 +1,98 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.Graphics2D; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public class Draw extends TransformOperation { | |||||
private int xloc = 0; | |||||
private int yloc = 0; | |||||
/** | |||||
* Set the X location. | |||||
* @param x the value to use. | |||||
*/ | |||||
public void setXloc(int x) { | |||||
xloc = x; | |||||
} | |||||
/** | |||||
* Set the Y location. | |||||
* @param y the value to use. | |||||
*/ | |||||
public void setYloc(int y) { | |||||
yloc = y; | |||||
} | |||||
/** | |||||
* Add text to the operation. | |||||
* @param text the text to add. | |||||
*/ | |||||
public void addText(Text text) { | |||||
instructions.add(text); | |||||
} | |||||
/** | |||||
* Add a rectangle to the operation. | |||||
* @param rect the rectangle to add. | |||||
*/ | |||||
public void addRectangle(Rectangle rect) { | |||||
instructions.add(rect); | |||||
} | |||||
/** | |||||
* Add an ellipse. | |||||
* @param elip the ellipse to add. | |||||
*/ | |||||
public void addEllipse(Ellipse elip) { | |||||
instructions.add(elip); | |||||
} | |||||
/** | |||||
* Add an arc. | |||||
* @param arc the arc to add. | |||||
*/ | |||||
public void addArc(Arc arc) { | |||||
instructions.add(arc); | |||||
} | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public BufferedImage executeTransformOperation(BufferedImage bi) { | |||||
Graphics2D graphics = bi.createGraphics(); | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
BufferedImage op = ((DrawOperation) instr).executeDrawOperation(); | |||||
log("\tDrawing to x=" + xloc + " y=" + yloc); | |||||
graphics.drawImage(op, null, xloc, yloc); | |||||
} else if (instr instanceof TransformOperation) { | |||||
BufferedImage child | |||||
= ((TransformOperation) instr).executeTransformOperation(null); | |||||
log("\tDrawing to x=" + xloc + " y=" + yloc); | |||||
graphics.drawImage(child, null, xloc, yloc); | |||||
} | |||||
} | |||||
return bi; | |||||
} | |||||
} |
@@ -0,0 +1,39 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* Interface which represents an Operation which is "drawable", such | |||||
* as a Rectangle, Circle or Text. The Operation is responsible for | |||||
* creating its own image buffer and drawing itself into it, then | |||||
* wrapping and returning it as a PlanarImage. This allows multiple | |||||
* "drawable" objects to be nested. | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public interface DrawOperation { | |||||
/** | |||||
* Abstract method which is intended to create an image buffer | |||||
* and return it so it can be drawn into another object. Use | |||||
* an Alpha channel for a "transparent" background. | |||||
* @return a planar image | |||||
*/ | |||||
BufferedImage executeDrawOperation(); | |||||
} |
@@ -0,0 +1,60 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.BasicStroke; | |||||
import java.awt.Graphics2D; | |||||
import java.awt.geom.Ellipse2D; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* Draw an ellipse. | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public class Ellipse extends BasicShape implements DrawOperation { | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public BufferedImage executeDrawOperation() { | |||||
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||||
Graphics2D graphics = bi.createGraphics(); | |||||
if (!"transparent".equalsIgnoreCase(stroke)) { | |||||
BasicStroke bStroke = new BasicStroke(strokeWidth); | |||||
graphics.setColor(ColorMapper.getColorByName(stroke)); | |||||
graphics.setStroke(bStroke); | |||||
graphics.draw(new Ellipse2D.Double(0, 0, width, height)); | |||||
} | |||||
if (!"transparent".equalsIgnoreCase(fill)) { | |||||
graphics.setColor(ColorMapper.getColorByName(fill)); | |||||
graphics.fill(new Ellipse2D.Double(0, 0, width, height)); | |||||
} | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
BufferedImage img = ((DrawOperation) instr).executeDrawOperation(); | |||||
graphics.drawImage(img, null, 0, 0); | |||||
} else if (instr instanceof TransformOperation) { | |||||
bi = ((TransformOperation) instr).executeTransformOperation(bi); | |||||
graphics = bi.createGraphics(); | |||||
} | |||||
} | |||||
return bi; | |||||
} | |||||
} |
@@ -0,0 +1,57 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import org.apache.tools.ant.types.DataType; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public abstract class ImageOperation extends DataType { | |||||
// CheckStyle:VisibilityModifier OFF - bc | |||||
protected final List<ImageOperation> instructions = new ArrayList<>(); | |||||
// CheckStyle:VisibilityModifier ON | |||||
/** | |||||
* Add a rotate to the operation. | |||||
* @param instr the rotate to add. | |||||
*/ | |||||
public void addRotate(Rotate instr) { | |||||
instructions.add(instr); | |||||
} | |||||
/** | |||||
* Add a draw to the operation. | |||||
* @param instr the draw to add. | |||||
*/ | |||||
public void addDraw(Draw instr) { | |||||
instructions.add(instr); | |||||
} | |||||
/** | |||||
* Add a scale to the operation. | |||||
* @param instr the scale to add. | |||||
*/ | |||||
public void addScale(Scale instr) { | |||||
instructions.add(instr); | |||||
} | |||||
} |
@@ -0,0 +1,92 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.BasicStroke; | |||||
import java.awt.Graphics2D; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public class Rectangle extends BasicShape implements DrawOperation { | |||||
private int arcwidth = 0; | |||||
private int archeight = 0; | |||||
/** | |||||
* Set the arc width. | |||||
* @param w the value to use. | |||||
*/ | |||||
public void setArcwidth(int w) { | |||||
arcwidth = w; | |||||
} | |||||
/** | |||||
* Set the arc height. | |||||
* @param h the value to use. | |||||
*/ | |||||
public void setArcheight(int h) { | |||||
archeight = h; | |||||
} | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public BufferedImage executeDrawOperation() { | |||||
log("\tCreating Rectangle w=" + width + " h=" + height + " arcw=" | |||||
+ arcwidth + " arch=" + archeight); | |||||
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||||
Graphics2D graphics = bi.createGraphics(); | |||||
if (!"transparent".equalsIgnoreCase(stroke)) { | |||||
BasicStroke bStroke = new BasicStroke(strokeWidth); | |||||
graphics.setColor(ColorMapper.getColorByName(stroke)); | |||||
graphics.setStroke(bStroke); | |||||
if (arcwidth == 0 && archeight == 0) { | |||||
graphics.drawRect(0, 0, width, height); | |||||
} else { | |||||
graphics.drawRoundRect(0, 0, width, height, arcwidth, archeight); | |||||
} | |||||
} | |||||
if (!"transparent".equalsIgnoreCase(fill)) { | |||||
graphics.setColor(ColorMapper.getColorByName(fill)); | |||||
if (arcwidth == 0 && archeight == 0) { | |||||
graphics.fillRect(strokeWidth, strokeWidth, | |||||
width - (strokeWidth * 2), height - (strokeWidth * 2)); | |||||
} else { | |||||
graphics.fillRoundRect(strokeWidth, strokeWidth, | |||||
width - (strokeWidth * 2), height - (strokeWidth * 2), | |||||
arcwidth, archeight); | |||||
} | |||||
} | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
BufferedImage img = ((DrawOperation) instr).executeDrawOperation(); | |||||
graphics.drawImage(img, null, 0, 0); | |||||
} else if (instr instanceof TransformOperation) { | |||||
bi = ((TransformOperation) instr).executeTransformOperation(bi); | |||||
graphics = bi.createGraphics(); | |||||
} | |||||
} | |||||
return bi; | |||||
} | |||||
} |
@@ -0,0 +1,151 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import org.apache.tools.ant.Project; | |||||
import java.awt.Color; | |||||
import java.awt.Graphics2D; | |||||
import java.awt.geom.AffineTransform; | |||||
import java.awt.geom.Point2D; | |||||
import java.awt.geom.Rectangle2D; | |||||
import java.awt.image.AffineTransformOp; | |||||
import java.awt.image.BufferedImage; | |||||
import java.util.Arrays; | |||||
/** | |||||
* ImageOperation to rotate an image by a certain degree | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public class Rotate extends TransformOperation implements DrawOperation { | |||||
private static final float HALF_CIRCLE = 180.0F; | |||||
private float angle = 0.0F; | |||||
/** | |||||
* Sets the angle of rotation in degrees. | |||||
* @param ang The angle at which to rotate the image | |||||
*/ | |||||
public void setAngle(String ang) { | |||||
angle = Float.parseFloat(ang) % (2 * HALF_CIRCLE); | |||||
} | |||||
/** | |||||
* Rotate an image. | |||||
* @param image the image to rotate. | |||||
* @return the rotated image. | |||||
*/ | |||||
public BufferedImage performRotate(BufferedImage image) { | |||||
// Float zero can be negative | |||||
if (Float.compare(Math.abs(angle), 0.0F) == 0) { | |||||
return image; | |||||
} | |||||
if (angle < 0) { | |||||
angle += 2 * HALF_CIRCLE; | |||||
} | |||||
// 180 degree rotation == flip the image vertically and horizontally | |||||
if (Float.compare(angle, HALF_CIRCLE) == 0) { | |||||
log("Flipping an image", Project.MSG_DEBUG); | |||||
AffineTransform tx = AffineTransform.getScaleInstance(-1, -1); | |||||
tx.translate(-image.getWidth(null), -image.getHeight(null)); | |||||
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); | |||||
return op.filter(image, null); | |||||
} | |||||
AffineTransform tx = AffineTransform.getRotateInstance((float) (angle | |||||
* (Math.PI / HALF_CIRCLE))); | |||||
// Figure out the new bounding box | |||||
Rectangle2D box = getBoundingBox(image, tx); | |||||
AffineTransform translation = AffineTransform.getTranslateInstance(-box.getMinX(), | |||||
-box.getMinY()); | |||||
tx.preConcatenate(translation); | |||||
BufferedImage rotatedImage = new BufferedImage((int) Math.round(box.getWidth()), | |||||
(int) Math.round(box.getHeight()), image.getType()); | |||||
// Avoid black space around the rotated image | |||||
Graphics2D graphics = rotatedImage.createGraphics(); | |||||
graphics.setPaint(new Color(image.getRGB(0, 0))); | |||||
graphics.fillRect(0, 0, rotatedImage.getWidth(), rotatedImage.getHeight()); | |||||
graphics.dispose(); | |||||
// Rotate | |||||
AffineTransformOp rotateOp = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); | |||||
rotateOp.filter(image, rotatedImage); | |||||
return rotatedImage; | |||||
} | |||||
private Rectangle2D getBoundingBox(BufferedImage image, AffineTransform tx) { | |||||
int xmax = image.getWidth() - 1; | |||||
int ymax = image.getHeight() - 1; | |||||
Point2D[] corners = new Point2D.Double[4]; | |||||
corners[0] = new Point2D.Double(0, 0); | |||||
corners[1] = new Point2D.Double(xmax, 0); | |||||
corners[2] = new Point2D.Double(xmax, ymax); | |||||
corners[3] = new Point2D.Double(0, ymax); | |||||
tx.transform(corners, 0, corners, 0, 4); | |||||
// Create bounding box of transformed corner points | |||||
Rectangle2D boundingBox = new Rectangle2D.Double(); | |||||
Arrays.stream(corners, 0, 4).forEach(boundingBox::add); | |||||
return boundingBox; | |||||
} | |||||
/** | |||||
* Performs the image rotation when being handled as a TransformOperation. | |||||
* @param image The image to perform the transformation on. | |||||
* @return the transformed image. | |||||
*/ | |||||
@Override | |||||
public BufferedImage executeTransformOperation(BufferedImage image) { | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
// If this TransformOperation has DrawOperation children | |||||
// then Rotate the first child and return. | |||||
BufferedImage op = ((DrawOperation) instr).executeDrawOperation(); | |||||
return performRotate(op); | |||||
} | |||||
if (instr instanceof TransformOperation) { | |||||
image = ((TransformOperation) instr).executeTransformOperation(image); | |||||
} | |||||
} | |||||
image = performRotate(image); | |||||
return image; | |||||
} | |||||
/** | |||||
* Performs the image rotation when being handled as a DrawOperation. | |||||
* It absolutely requires that there be a DrawOperation nested beneath it, | |||||
* but only the FIRST DrawOperation will be handled since it can only return | |||||
* ONE image. | |||||
* @return the image. | |||||
*/ | |||||
@Override | |||||
public BufferedImage executeDrawOperation() { | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
// If this TransformOperation has DrawOperation children | |||||
// then Rotate the first child and return. | |||||
BufferedImage op = ((DrawOperation) instr).executeDrawOperation(); | |||||
return performRotate(op); | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} |
@@ -0,0 +1,170 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
import java.awt.geom.AffineTransform; | |||||
import java.awt.image.AffineTransformOp; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public class Scale extends TransformOperation implements DrawOperation { | |||||
private static final int HUNDRED = 100; | |||||
private String widthStr = "100%"; | |||||
private String heightStr = "100%"; | |||||
private boolean xPercent = true; | |||||
private boolean yPercent = true; | |||||
private String proportions = "ignore"; | |||||
/** Enumerated class for proportions attribute. */ | |||||
public static class ProportionsAttribute extends EnumeratedAttribute { | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public String[] getValues() { | |||||
return new String[] { "ignore", "width", "height", "cover", "fit" }; | |||||
} | |||||
} | |||||
/** | |||||
* Sets the behaviour regarding the image proportions. | |||||
* @param pa the enumerated value. | |||||
*/ | |||||
public void setProportions(ProportionsAttribute pa) { | |||||
proportions = pa.getValue(); | |||||
} | |||||
/** | |||||
* Sets the width of the image, either as an integer or a %. | |||||
* Defaults to 100%. | |||||
* @param width the value to use. | |||||
*/ | |||||
public void setWidth(String width) { | |||||
widthStr = width; | |||||
} | |||||
/** | |||||
* Sets the height of the image, either as an integer or a %. Defaults to 100%. | |||||
* @param height the value to use. | |||||
*/ | |||||
public void setHeight(String height) { | |||||
heightStr = height; | |||||
} | |||||
/** | |||||
* Get the width. | |||||
* @return the value converted from the width string. | |||||
*/ | |||||
public float getWidth() { | |||||
int percIndex = widthStr.indexOf('%'); | |||||
if (percIndex > 0) { | |||||
xPercent = true; | |||||
float width = Float.parseFloat(widthStr.substring(0, percIndex)); | |||||
return width / HUNDRED; | |||||
} | |||||
xPercent = false; | |||||
return Float.parseFloat(widthStr); | |||||
} | |||||
/** | |||||
* Get the height. | |||||
* @return the value converted from the height string. | |||||
*/ | |||||
public float getHeight() { | |||||
int percIndex = heightStr.indexOf('%'); | |||||
if (percIndex > 0) { | |||||
yPercent = true; | |||||
return Float.parseFloat(heightStr.substring(0, percIndex)) / HUNDRED; | |||||
} | |||||
yPercent = false; | |||||
return Float.parseFloat(heightStr); | |||||
} | |||||
/** | |||||
* Scale an image. | |||||
* @param image the image to scale. | |||||
* @return the scaled image. | |||||
*/ | |||||
public BufferedImage performScale(BufferedImage image) { | |||||
float xFl = getWidth(); | |||||
float yFl = getHeight(); | |||||
if (!xPercent) { | |||||
xFl /= image.getWidth(); | |||||
} | |||||
if (!yPercent) { | |||||
yFl /= image.getHeight(); | |||||
} | |||||
if ("width".equals(proportions)) { | |||||
yFl = xFl; | |||||
} else if ("height".equals(proportions)) { | |||||
xFl = yFl; | |||||
} else if ("fit".equals(proportions)) { | |||||
yFl = Math.min(xFl, yFl); | |||||
xFl = yFl; | |||||
} else if ("cover".equals(proportions)) { | |||||
yFl = Math.max(xFl, yFl); | |||||
xFl = yFl; | |||||
} | |||||
log("\tScaling to " + (xFl * HUNDRED) + "% x " | |||||
+ (yFl * HUNDRED) + "%"); | |||||
AffineTransform tx = AffineTransform.getScaleInstance(xFl, yFl); | |||||
BufferedImage scaleImage = new BufferedImage((int) (xFl * image.getWidth()), | |||||
(int) (yFl * image.getHeight()), image.getType()); | |||||
AffineTransformOp scaleOp = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); | |||||
scaleOp.filter(image, scaleImage); | |||||
return scaleImage; | |||||
} | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public BufferedImage executeTransformOperation(BufferedImage image) { | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
return performScale(image); | |||||
} | |||||
if (instr instanceof TransformOperation) { | |||||
image = ((TransformOperation) instr).executeTransformOperation(image); | |||||
} | |||||
} | |||||
return performScale(image); | |||||
} | |||||
/** {@inheritDoc}. */ | |||||
@Override | |||||
public BufferedImage executeDrawOperation() { | |||||
for (ImageOperation instr : instructions) { | |||||
if (instr instanceof DrawOperation) { | |||||
BufferedImage image = null; | |||||
// If this TransformOperation has DrawOperation children | |||||
// then Rotate the first child and return. | |||||
performScale(image); | |||||
return image; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} |
@@ -0,0 +1,134 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.Font; | |||||
import java.awt.FontMetrics; | |||||
import java.awt.Graphics2D; | |||||
import java.awt.RenderingHints; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public class Text extends ImageOperation implements DrawOperation { | |||||
private static final int DEFAULT_POINT = 10; | |||||
private String string = ""; | |||||
private String font = "Arial"; | |||||
private int point = DEFAULT_POINT; | |||||
private boolean bold = false; | |||||
private boolean italic = false; | |||||
private String color = "black"; | |||||
/** | |||||
* Set the string to be used as text. | |||||
* @param str the string to be used. | |||||
*/ | |||||
public void setString(String str) { | |||||
string = str; | |||||
} | |||||
/** | |||||
* Set the font to be used to draw the text. | |||||
* @param f the font to be used. | |||||
*/ | |||||
public void setFont(String f) { | |||||
font = f; | |||||
} | |||||
/** | |||||
* Set the number of points to be used. | |||||
* @param p an integer value as a string. | |||||
*/ | |||||
public void setPoint(String p) { | |||||
point = Integer.parseInt(p); | |||||
} | |||||
/** | |||||
* Set the color of the text. | |||||
* @param c the color name. | |||||
*/ | |||||
public void setColor(String c) { | |||||
color = c; | |||||
} | |||||
/** | |||||
* @todo is this used? | |||||
* @param state not used at the moment. | |||||
*/ | |||||
public void setBold(boolean state) { | |||||
bold = state; | |||||
} | |||||
/** | |||||
* @todo is this used? | |||||
* @param state not used at the moment. | |||||
*/ | |||||
public void setItalic(boolean state) { | |||||
italic = state; | |||||
} | |||||
/** | |||||
* Draw the text. | |||||
* @return the resultant image. | |||||
*/ | |||||
@Override | |||||
public BufferedImage executeDrawOperation() { | |||||
log("\tCreating Text \"" + string + "\""); | |||||
int width = 1; | |||||
int height = 1; | |||||
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||||
Graphics2D graphics = bi.createGraphics(); | |||||
graphics.setRenderingHint( | |||||
RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); | |||||
graphics.setRenderingHint( | |||||
RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); | |||||
Font f = createFont(); | |||||
FontMetrics fmetrics = graphics.getFontMetrics(f); | |||||
height = fmetrics.getMaxAscent() + fmetrics.getMaxDescent(); | |||||
width = fmetrics.stringWidth(string); | |||||
bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||||
graphics = bi.createGraphics(); | |||||
graphics.setRenderingHint( | |||||
RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); | |||||
graphics.setRenderingHint( | |||||
RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); | |||||
graphics.setFont(f); | |||||
graphics.setColor(ColorMapper.getColorByName(color)); | |||||
graphics.drawString(string, 0, height - fmetrics.getMaxDescent()); | |||||
return bi; | |||||
} | |||||
private Font createFont() { | |||||
int style = Font.PLAIN; | |||||
if (bold) { | |||||
style |= Font.BOLD; | |||||
} | |||||
if (italic) { | |||||
style |= Font.ITALIC; | |||||
} | |||||
return new Font(font, style, point); | |||||
} | |||||
} |
@@ -0,0 +1,33 @@ | |||||
/* | |||||
* 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.tools.ant.types.optional.imageio; | |||||
import java.awt.image.BufferedImage; | |||||
/** | |||||
* | |||||
* @see org.apache.tools.ant.taskdefs.optional.image.ImageIOTask | |||||
*/ | |||||
public abstract class TransformOperation extends ImageOperation { | |||||
/** | |||||
* Performs the transformations. | |||||
* @param img The image to perform the transformation on. | |||||
* @return the transformed image. | |||||
*/ | |||||
public abstract BufferedImage executeTransformOperation(BufferedImage img); | |||||
} |
@@ -0,0 +1,145 @@ | |||||
/* | |||||
* 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.tools.ant.taskdefs.optional.image; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.BuildFileRule; | |||||
import org.apache.tools.ant.util.FileUtils; | |||||
import org.junit.Before; | |||||
import org.junit.Rule; | |||||
import org.junit.Test; | |||||
import org.junit.rules.ExpectedException; | |||||
import java.io.File; | |||||
import static org.hamcrest.Matchers.containsString; | |||||
import static org.junit.Assert.assertEquals; | |||||
import static org.junit.Assert.assertThat; | |||||
import static org.junit.Assert.assertTrue; | |||||
import static org.junit.Assume.assumeTrue; | |||||
/** | |||||
* Tests ImageIOTask. | |||||
* | |||||
* @since Ant 1.10.6 | |||||
*/ | |||||
public class ImageIOTest { | |||||
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||||
private static final String LARGEIMAGE = "largeimage.jpg"; | |||||
@Rule | |||||
public BuildFileRule buildRule = new BuildFileRule(); | |||||
@Rule | |||||
public ExpectedException thrown = ExpectedException.none(); | |||||
@Before | |||||
public void setUp() { | |||||
buildRule.configureProject("src/etc/testcases/taskdefs/optional/image/imageio.xml"); | |||||
} | |||||
@Test | |||||
public void testEchoToLog() { | |||||
buildRule.executeTarget("testEchoToLog"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
} | |||||
@Test | |||||
public void testSimpleScale() { | |||||
buildRule.executeTarget("testSimpleScale"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
File f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
assertTrue("Did not create " + f.getAbsolutePath(), f.exists()); | |||||
} | |||||
@Test | |||||
public void testOverwriteTrue() { | |||||
buildRule.executeTarget("testSimpleScale"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
File f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
assumeTrue("Could not change file modification date", | |||||
f.setLastModified(f.lastModified() - FILE_UTILS.getFileTimestampGranularity() * 2)); | |||||
long lastModified = f.lastModified(); | |||||
buildRule.executeTarget("testOverwriteTrue"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
long overwrittenLastModified = f.lastModified(); | |||||
assertTrue("File was not overwritten.", lastModified < overwrittenLastModified); | |||||
} | |||||
@Test | |||||
public void testDrawOverwriteTrue() { | |||||
buildRule.executeTarget("testSimpleScale"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
File f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
assumeTrue("Could not change file modification date", | |||||
f.setLastModified(f.lastModified() - FILE_UTILS.getFileTimestampGranularity() * 2)); | |||||
long lastModified = f.lastModified(); | |||||
buildRule.executeTarget("testDrawOverwriteTrue"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
long overwrittenLastModified = f.lastModified(); | |||||
assertTrue("File was not overwritten.", lastModified < overwrittenLastModified); | |||||
} | |||||
@Test | |||||
public void testOverwriteFalse() { | |||||
buildRule.executeTarget("testSimpleScale"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
File f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
long lastModified = f.lastModified(); | |||||
buildRule.executeTarget("testOverwriteFalse"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
long overwrittenLastModified = f.lastModified(); | |||||
assertEquals("File was overwritten.", lastModified, overwrittenLastModified); | |||||
} | |||||
@Test | |||||
public void testSimpleScaleWithMapper() { | |||||
buildRule.executeTarget("testSimpleScaleWithMapper"); | |||||
assertThat(buildRule.getLog(), containsString("Processing File")); | |||||
File f = new File(buildRule.getOutputDir(), "scaled-" + LARGEIMAGE); | |||||
assertTrue("Did not create " + f.getAbsolutePath(), f.exists()); | |||||
} | |||||
@Test | |||||
public void testFlip() { | |||||
buildRule.executeTarget("testFlip"); | |||||
assertThat(buildRule.getFullLog(), containsString("Flipping an image")); | |||||
File f = new File(buildRule.getOutputDir(), LARGEIMAGE); | |||||
assertTrue("Did not create " + f.getAbsolutePath(), f.exists()); | |||||
} | |||||
@Test | |||||
public void testFailOnError() { | |||||
final String message = "Unsupported Image Type"; | |||||
thrown.expect(BuildException.class); | |||||
thrown.expectMessage(message); | |||||
try { | |||||
buildRule.executeTarget("testFailOnError"); | |||||
} finally { | |||||
assertThat(buildRule.getLog(), containsString(message)); | |||||
} | |||||
} | |||||
} |