Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/rsc/palettes.xml
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/rsc/palettes.xml	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/rsc/palettes.xml	(revision 10281)
@@ -0,0 +1,6031 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<palettes>
+	<palette_list>
+		<name>Ninguna</name>
+		<name>purple-red+stripes</name>
+		<name>blue-white</name>
+		<name>ocean</name>
+		<name>red-temperature</name>
+		<name>16level</name>
+		<name>blue-green-red-yellow</name>
+		<name>blue-pastel-red</name>
+		<name>blue-red</name>
+		<name>blue-waves</name>
+		<name>green-red-blue</name>
+		<name>green-white-exponential</name>
+		<name>hardcandy</name>
+		<name>haze</name>
+		<name>mac-style</name>
+		<name>nature</name>
+		<name>pastels</name>
+		<name>plasma</name>
+		<name>prism</name>
+		<name>rainbow</name>
+		<name>red-purple</name>
+		<name>std-gamma-II</name>
+		<name>steps</name>
+		<name>stern-special</name>
+	</palette_list>
+	<palette name="purple-red+stripes" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,0" value="1" />
+			<entry class="" argb="255,127,127,127" value="2" />
+			<entry class="" argb="255,191,0,191" value="3" />
+			<entry class="" argb="255,188,0,192" value="4" />
+			<entry class="" argb="255,186,0,192" value="5" />
+			<entry class="" argb="255,184,0,193" value="6" />
+			<entry class="" argb="255,182,0,194" value="7" />
+			<entry class="" argb="255,179,0,195" value="8" />
+			<entry class="" argb="255,177,0,195" value="9" />
+			<entry class="" argb="255,140,0,157" value="10" />
+			<entry class="" argb="255,138,0,157" value="11" />
+			<entry class="" argb="255,170,0,198" value="12" />
+			<entry class="" argb="255,168,0,198" value="13" />
+			<entry class="" argb="255,165,0,199" value="14" />
+			<entry class="" argb="255,163,0,200" value="15" />
+			<entry class="" argb="255,161,0,201" value="16" />
+			<entry class="" argb="255,158,0,202" value="17" />
+			<entry class="" argb="255,156,0,202" value="18" />
+			<entry class="" argb="255,154,0,203" value="19" />
+			<entry class="" argb="255,121,0,163" value="20" />
+			<entry class="" argb="255,119,0,164" value="21" />
+			<entry class="" argb="255,147,0,205" value="22" />
+			<entry class="" argb="255,145,0,206" value="23" />
+			<entry class="" argb="255,142,0,207" value="24" />
+			<entry class="" argb="255,140,0,208" value="25" />
+			<entry class="" argb="255,138,0,208" value="26" />
+			<entry class="" argb="255,135,0,209" value="27" />
+			<entry class="" argb="255,133,0,210" value="28" />
+			<entry class="" argb="255,131,0,211" value="29" />
+			<entry class="" argb="255,103,0,169" value="30" />
+			<entry class="" argb="255,101,0,170" value="31" />
+			<entry class="" argb="255,124,0,213" value="32" />
+			<entry class="" argb="255,122,0,214" value="33" />
+			<entry class="" argb="255,119,0,215" value="34" />
+			<entry class="" argb="255,117,0,215" value="35" />
+			<entry class="" argb="255,115,0,216" value="36" />
+			<entry class="" argb="255,112,0,217" value="37" />
+			<entry class="" argb="255,110,0,218" value="38" />
+			<entry class="" argb="255,108,0,218" value="39" />
+			<entry class="" argb="255,84,0,175" value="40" />
+			<entry class="" argb="255,82,0,176" value="41" />
+			<entry class="" argb="255,101,0,221" value="42" />
+			<entry class="" argb="255,99,0,221" value="43" />
+			<entry class="" argb="255,96,0,222" value="44" />
+			<entry class="" argb="255,94,0,223" value="45" />
+			<entry class="" argb="255,92,0,224" value="46" />
+			<entry class="" argb="255,89,0,225" value="47" />
+			<entry class="" argb="255,87,0,225" value="48" />
+			<entry class="" argb="255,85,0,226" value="49" />
+			<entry class="" argb="255,66,0,181" value="50" />
+			<entry class="" argb="255,64,0,182" value="51" />
+			<entry class="" argb="255,78,0,228" value="52" />
+			<entry class="" argb="255,76,0,229" value="53" />
+			<entry class="" argb="255,73,0,230" value="54" />
+			<entry class="" argb="255,71,0,231" value="55" />
+			<entry class="" argb="255,69,0,231" value="56" />
+			<entry class="" argb="255,66,0,232" value="57" />
+			<entry class="" argb="255,64,0,233" value="58" />
+			<entry class="" argb="255,62,0,234" value="59" />
+			<entry class="" argb="255,47,0,188" value="60" />
+			<entry class="" argb="255,46,0,188" value="61" />
+			<entry class="" argb="255,55,0,236" value="62" />
+			<entry class="" argb="255,52,0,237" value="63" />
+			<entry class="" argb="255,50,0,238" value="64" />
+			<entry class="" argb="255,48,0,238" value="65" />
+			<entry class="" argb="255,46,0,239" value="66" />
+			<entry class="" argb="255,43,0,240" value="67" />
+			<entry class="" argb="255,41,0,241" value="68" />
+			<entry class="" argb="255,39,0,241" value="69" />
+			<entry class="" argb="255,29,0,194" value="70" />
+			<entry class="" argb="255,27,0,194" value="71" />
+			<entry class="" argb="255,32,0,244" value="72" />
+			<entry class="" argb="255,29,0,245" value="73" />
+			<entry class="" argb="255,27,0,245" value="74" />
+			<entry class="" argb="255,25,0,246" value="75" />
+			<entry class="" argb="255,23,0,247" value="76" />
+			<entry class="" argb="255,20,0,248" value="77" />
+			<entry class="" argb="255,18,0,248" value="78" />
+			<entry class="" argb="255,16,0,249" value="79" />
+			<entry class="" argb="255,11,0,200" value="80" />
+			<entry class="" argb="255,9,0,200" value="81" />
+			<entry class="" argb="255,9,0,251" value="82" />
+			<entry class="" argb="255,6,0,252" value="83" />
+			<entry class="" argb="255,4,0,253" value="84" />
+			<entry class="" argb="255,2,0,254" value="85" />
+			<entry class="" argb="255,0,0,255" value="86" />
+			<entry class="" argb="255,0,6,255" value="87" />
+			<entry class="" argb="255,0,12,255" value="88" />
+			<entry class="" argb="255,0,18,255" value="89" />
+			<entry class="" argb="255,0,19,204" value="90" />
+			<entry class="" argb="255,0,24,204" value="91" />
+			<entry class="" argb="255,0,36,255" value="92" />
+			<entry class="" argb="255,0,42,255" value="93" />
+			<entry class="" argb="255,0,48,255" value="94" />
+			<entry class="" argb="255,0,54,255" value="95" />
+			<entry class="" argb="255,0,60,255" value="96" />
+			<entry class="" argb="255,0,66,255" value="97" />
+			<entry class="" argb="255,0,72,255" value="98" />
+			<entry class="" argb="255,0,78,255" value="99" />
+			<entry class="" argb="255,0,68,204" value="100" />
+			<entry class="" argb="255,0,72,204" value="101" />
+			<entry class="" argb="255,0,97,255" value="102" />
+			<entry class="" argb="255,0,103,255" value="103" />
+			<entry class="" argb="255,0,109,255" value="104" />
+			<entry class="" argb="255,0,115,255" value="105" />
+			<entry class="" argb="255,0,121,255" value="106" />
+			<entry class="" argb="255,0,127,255" value="107" />
+			<entry class="" argb="255,0,133,255" value="108" />
+			<entry class="" argb="255,0,139,255" value="109" />
+			<entry class="" argb="255,0,116,204" value="110" />
+			<entry class="" argb="255,0,121,204" value="111" />
+			<entry class="" argb="255,0,157,255" value="112" />
+			<entry class="" argb="255,0,163,255" value="113" />
+			<entry class="" argb="255,0,170,255" value="114" />
+			<entry class="" argb="255,0,176,255" value="115" />
+			<entry class="" argb="255,0,182,255" value="116" />
+			<entry class="" argb="255,0,188,255" value="117" />
+			<entry class="" argb="255,0,194,255" value="118" />
+			<entry class="" argb="255,0,200,255" value="119" />
+			<entry class="" argb="255,0,165,204" value="120" />
+			<entry class="" argb="255,0,170,204" value="121" />
+			<entry class="" argb="255,0,218,255" value="122" />
+			<entry class="" argb="255,0,224,255" value="123" />
+			<entry class="" argb="255,0,230,255" value="124" />
+			<entry class="" argb="255,0,236,255" value="125" />
+			<entry class="" argb="255,0,242,255" value="126" />
+			<entry class="" argb="255,0,248,255" value="127" />
+			<entry class="" argb="255,0,255,255" value="128" />
+			<entry class="" argb="255,0,255,248" value="129" />
+			<entry class="" argb="255,0,204,194" value="130" />
+			<entry class="" argb="255,0,204,189" value="131" />
+			<entry class="" argb="255,0,255,230" value="132" />
+			<entry class="" argb="255,0,255,224" value="133" />
+			<entry class="" argb="255,0,255,218" value="134" />
+			<entry class="" argb="255,0,255,212" value="135" />
+			<entry class="" argb="255,0,255,206" value="136" />
+			<entry class="" argb="255,0,255,200" value="137" />
+			<entry class="" argb="255,0,255,194" value="138" />
+			<entry class="" argb="255,0,255,188" value="139" />
+			<entry class="" argb="255,0,204,145" value="140" />
+			<entry class="" argb="255,0,204,140" value="141" />
+			<entry class="" argb="255,0,255,169" value="142" />
+			<entry class="" argb="255,0,255,163" value="143" />
+			<entry class="" argb="255,0,255,157" value="144" />
+			<entry class="" argb="255,0,255,151" value="145" />
+			<entry class="" argb="255,0,255,145" value="146" />
+			<entry class="" argb="255,0,255,139" value="147" />
+			<entry class="" argb="255,0,255,133" value="148" />
+			<entry class="" argb="255,0,255,127" value="149" />
+			<entry class="" argb="255,0,204,97" value="150" />
+			<entry class="" argb="255,0,204,92" value="151" />
+			<entry class="" argb="255,0,255,109" value="152" />
+			<entry class="" argb="255,0,255,103" value="153" />
+			<entry class="" argb="255,0,255,97" value="154" />
+			<entry class="" argb="255,0,255,91" value="155" />
+			<entry class="" argb="255,0,255,84" value="156" />
+			<entry class="" argb="255,0,255,78" value="157" />
+			<entry class="" argb="255,0,255,72" value="158" />
+			<entry class="" argb="255,0,255,66" value="159" />
+			<entry class="" argb="255,0,204,48" value="160" />
+			<entry class="" argb="255,0,204,43" value="161" />
+			<entry class="" argb="255,0,255,48" value="162" />
+			<entry class="" argb="255,0,255,42" value="163" />
+			<entry class="" argb="255,0,255,36" value="164" />
+			<entry class="" argb="255,0,255,30" value="165" />
+			<entry class="" argb="255,0,255,24" value="166" />
+			<entry class="" argb="255,0,255,18" value="167" />
+			<entry class="" argb="255,0,255,12" value="168" />
+			<entry class="" argb="255,0,255,6" value="169" />
+			<entry class="" argb="255,0,204,0" value="170" />
+			<entry class="" argb="255,4,204,0" value="171" />
+			<entry class="" argb="255,12,255,0" value="172" />
+			<entry class="" argb="255,18,255,0" value="173" />
+			<entry class="" argb="255,24,255,0" value="174" />
+			<entry class="" argb="255,30,255,0" value="175" />
+			<entry class="" argb="255,36,255,0" value="176" />
+			<entry class="" argb="255,42,255,0" value="177" />
+			<entry class="" argb="255,48,255,0" value="178" />
+			<entry class="" argb="255,54,255,0" value="179" />
+			<entry class="" argb="255,48,204,0" value="180" />
+			<entry class="" argb="255,53,204,0" value="181" />
+			<entry class="" argb="255,72,255,0" value="182" />
+			<entry class="" argb="255,78,255,0" value="183" />
+			<entry class="" argb="255,85,255,0" value="184" />
+			<entry class="" argb="255,91,255,0" value="185" />
+			<entry class="" argb="255,97,255,0" value="186" />
+			<entry class="" argb="255,103,255,0" value="187" />
+			<entry class="" argb="255,109,255,0" value="188" />
+			<entry class="" argb="255,115,255,0" value="189" />
+			<entry class="" argb="255,97,204,0" value="190" />
+			<entry class="" argb="255,102,204,0" value="191" />
+			<entry class="" argb="255,133,255,0" value="192" />
+			<entry class="" argb="255,139,255,0" value="193" />
+			<entry class="" argb="255,145,255,0" value="194" />
+			<entry class="" argb="255,151,255,0" value="195" />
+			<entry class="" argb="255,157,255,0" value="196" />
+			<entry class="" argb="255,163,255,0" value="197" />
+			<entry class="" argb="255,170,255,0" value="198" />
+			<entry class="" argb="255,176,255,0" value="199" />
+			<entry class="" argb="255,145,204,0" value="200" />
+			<entry class="" argb="255,150,204,0" value="201" />
+			<entry class="" argb="255,194,255,0" value="202" />
+			<entry class="" argb="255,200,255,0" value="203" />
+			<entry class="" argb="255,206,255,0" value="204" />
+			<entry class="" argb="255,212,255,0" value="205" />
+			<entry class="" argb="255,218,255,0" value="206" />
+			<entry class="" argb="255,224,255,0" value="207" />
+			<entry class="" argb="255,230,255,0" value="208" />
+			<entry class="" argb="255,236,255,0" value="209" />
+			<entry class="" argb="255,194,204,0" value="210" />
+			<entry class="" argb="255,199,204,0" value="211" />
+			<entry class="" argb="255,255,255,0" value="212" />
+			<entry class="" argb="255,255,248,2" value="213" />
+			<entry class="" argb="255,255,242,5" value="214" />
+			<entry class="" argb="255,255,235,7" value="215" />
+			<entry class="" argb="255,255,229,10" value="216" />
+			<entry class="" argb="255,255,223,12" value="217" />
+			<entry class="" argb="255,255,216,15" value="218" />
+			<entry class="" argb="255,255,210,17" value="219" />
+			<entry class="" argb="255,204,163,16" value="220" />
+			<entry class="" argb="255,204,158,18" value="221" />
+			<entry class="" argb="255,255,191,25" value="222" />
+			<entry class="" argb="255,255,184,28" value="223" />
+			<entry class="" argb="255,255,178,30" value="224" />
+			<entry class="" argb="255,255,172,33" value="225" />
+			<entry class="" argb="255,255,165,35" value="226" />
+			<entry class="" argb="255,255,159,38" value="227" />
+			<entry class="" argb="255,255,153,40" value="228" />
+			<entry class="" argb="255,255,146,43" value="229" />
+			<entry class="" argb="255,204,112,36" value="230" />
+			<entry class="" argb="255,204,107,38" value="231" />
+			<entry class="" argb="255,255,127,51" value="232" />
+			<entry class="" argb="255,255,121,48" value="233" />
+			<entry class="" argb="255,255,115,46" value="234" />
+			<entry class="" argb="255,255,110,44" value="235" />
+			<entry class="" argb="255,255,104,41" value="236" />
+			<entry class="" argb="255,255,98,39" value="237" />
+			<entry class="" argb="255,255,92,37" value="238" />
+			<entry class="" argb="255,255,86,34" value="239" />
+			<entry class="" argb="255,204,64,25" value="240" />
+			<entry class="" argb="255,204,60,24" value="241" />
+			<entry class="" argb="255,255,69,27" value="242" />
+			<entry class="" argb="255,255,63,25" value="243" />
+			<entry class="" argb="255,255,57,23" value="244" />
+			<entry class="" argb="255,255,52,20" value="245" />
+			<entry class="" argb="255,255,46,18" value="246" />
+			<entry class="" argb="255,255,40,16" value="247" />
+			<entry class="" argb="255,255,34,13" value="248" />
+			<entry class="" argb="255,255,28,11" value="249" />
+			<entry class="" argb="255,204,18,7" value="250" />
+			<entry class="" argb="255,204,13,5" value="251" />
+			<entry class="" argb="255,255,11,4" value="252" />
+			<entry class="" argb="255,255,5,2" value="253" />
+			<entry class="" argb="255,255,0,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-white" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,1" value="1" />
+			<entry class="" argb="255,0,0,2" value="2" />
+			<entry class="" argb="255,0,0,4" value="3" />
+			<entry class="" argb="255,0,0,5" value="4" />
+			<entry class="" argb="255,0,0,6" value="5" />
+			<entry class="" argb="255,0,0,8" value="6" />
+			<entry class="" argb="255,0,0,9" value="7" />
+			<entry class="" argb="255,0,0,10" value="8" />
+			<entry class="" argb="255,0,0,12" value="9" />
+			<entry class="" argb="255,0,0,13" value="10" />
+			<entry class="" argb="255,0,0,14" value="11" />
+			<entry class="" argb="255,0,0,16" value="12" />
+			<entry class="" argb="255,0,0,17" value="13" />
+			<entry class="" argb="255,0,0,18" value="14" />
+			<entry class="" argb="255,0,0,20" value="15" />
+			<entry class="" argb="255,0,0,21" value="16" />
+			<entry class="" argb="255,0,0,23" value="17" />
+			<entry class="" argb="255,0,0,24" value="18" />
+			<entry class="" argb="255,0,0,25" value="19" />
+			<entry class="" argb="255,0,0,27" value="20" />
+			<entry class="" argb="255,0,0,28" value="21" />
+			<entry class="" argb="255,0,0,29" value="22" />
+			<entry class="" argb="255,0,0,31" value="23" />
+			<entry class="" argb="255,0,0,32" value="24" />
+			<entry class="" argb="255,0,0,33" value="25" />
+			<entry class="" argb="255,0,0,35" value="26" />
+			<entry class="" argb="255,0,0,36" value="27" />
+			<entry class="" argb="255,0,0,37" value="28" />
+			<entry class="" argb="255,0,0,39" value="29" />
+			<entry class="" argb="255,0,0,40" value="30" />
+			<entry class="" argb="255,0,0,42" value="31" />
+			<entry class="" argb="255,0,0,43" value="32" />
+			<entry class="" argb="255,0,0,44" value="33" />
+			<entry class="" argb="255,0,0,46" value="34" />
+			<entry class="" argb="255,0,0,47" value="35" />
+			<entry class="" argb="255,0,0,48" value="36" />
+			<entry class="" argb="255,0,0,50" value="37" />
+			<entry class="" argb="255,0,0,51" value="38" />
+			<entry class="" argb="255,0,0,52" value="39" />
+			<entry class="" argb="255,0,0,54" value="40" />
+			<entry class="" argb="255,0,0,55" value="41" />
+			<entry class="" argb="255,0,0,56" value="42" />
+			<entry class="" argb="255,0,0,58" value="43" />
+			<entry class="" argb="255,0,0,59" value="44" />
+			<entry class="" argb="255,0,0,61" value="45" />
+			<entry class="" argb="255,0,0,62" value="46" />
+			<entry class="" argb="255,0,0,63" value="47" />
+			<entry class="" argb="255,0,0,65" value="48" />
+			<entry class="" argb="255,0,0,66" value="49" />
+			<entry class="" argb="255,0,0,67" value="50" />
+			<entry class="" argb="255,0,0,69" value="51" />
+			<entry class="" argb="255,0,0,70" value="52" />
+			<entry class="" argb="255,0,0,71" value="53" />
+			<entry class="" argb="255,0,0,73" value="54" />
+			<entry class="" argb="255,0,0,74" value="55" />
+			<entry class="" argb="255,0,0,75" value="56" />
+			<entry class="" argb="255,0,0,77" value="57" />
+			<entry class="" argb="255,0,0,78" value="58" />
+			<entry class="" argb="255,0,0,80" value="59" />
+			<entry class="" argb="255,0,0,81" value="60" />
+			<entry class="" argb="255,0,0,82" value="61" />
+			<entry class="" argb="255,0,0,84" value="62" />
+			<entry class="" argb="255,0,0,85" value="63" />
+			<entry class="" argb="255,0,0,86" value="64" />
+			<entry class="" argb="255,0,0,88" value="65" />
+			<entry class="" argb="255,0,0,89" value="66" />
+			<entry class="" argb="255,0,0,90" value="67" />
+			<entry class="" argb="255,0,0,92" value="68" />
+			<entry class="" argb="255,0,0,93" value="69" />
+			<entry class="" argb="255,0,0,94" value="70" />
+			<entry class="" argb="255,0,0,96" value="71" />
+			<entry class="" argb="255,0,0,97" value="72" />
+			<entry class="" argb="255,0,0,99" value="73" />
+			<entry class="" argb="255,0,0,100" value="74" />
+			<entry class="" argb="255,0,0,101" value="75" />
+			<entry class="" argb="255,0,0,103" value="76" />
+			<entry class="" argb="255,0,0,104" value="77" />
+			<entry class="" argb="255,0,0,105" value="78" />
+			<entry class="" argb="255,0,0,107" value="79" />
+			<entry class="" argb="255,0,0,108" value="80" />
+			<entry class="" argb="255,0,0,109" value="81" />
+			<entry class="" argb="255,0,0,111" value="82" />
+			<entry class="" argb="255,0,0,112" value="83" />
+			<entry class="" argb="255,0,0,113" value="84" />
+			<entry class="" argb="255,0,0,115" value="85" />
+			<entry class="" argb="255,0,0,116" value="86" />
+			<entry class="" argb="255,0,0,118" value="87" />
+			<entry class="" argb="255,0,0,119" value="88" />
+			<entry class="" argb="255,0,0,120" value="89" />
+			<entry class="" argb="255,0,0,122" value="90" />
+			<entry class="" argb="255,0,0,123" value="91" />
+			<entry class="" argb="255,0,0,124" value="92" />
+			<entry class="" argb="255,0,0,126" value="93" />
+			<entry class="" argb="255,0,0,127" value="94" />
+			<entry class="" argb="255,0,0,128" value="95" />
+			<entry class="" argb="255,0,0,130" value="96" />
+			<entry class="" argb="255,0,2,131" value="97" />
+			<entry class="" argb="255,0,4,132" value="98" />
+			<entry class="" argb="255,0,5,134" value="99" />
+			<entry class="" argb="255,0,7,135" value="100" />
+			<entry class="" argb="255,0,9,136" value="101" />
+			<entry class="" argb="255,0,10,138" value="102" />
+			<entry class="" argb="255,0,12,139" value="103" />
+			<entry class="" argb="255,0,13,141" value="104" />
+			<entry class="" argb="255,0,15,142" value="105" />
+			<entry class="" argb="255,0,17,143" value="106" />
+			<entry class="" argb="255,0,18,145" value="107" />
+			<entry class="" argb="255,0,20,146" value="108" />
+			<entry class="" argb="255,0,21,147" value="109" />
+			<entry class="" argb="255,0,23,149" value="110" />
+			<entry class="" argb="255,0,25,150" value="111" />
+			<entry class="" argb="255,0,26,151" value="112" />
+			<entry class="" argb="255,0,28,153" value="113" />
+			<entry class="" argb="255,0,29,154" value="114" />
+			<entry class="" argb="255,0,31,155" value="115" />
+			<entry class="" argb="255,0,33,157" value="116" />
+			<entry class="" argb="255,0,34,158" value="117" />
+			<entry class="" argb="255,0,36,160" value="118" />
+			<entry class="" argb="255,0,37,161" value="119" />
+			<entry class="" argb="255,0,39,162" value="120" />
+			<entry class="" argb="255,0,41,164" value="121" />
+			<entry class="" argb="255,0,42,165" value="122" />
+			<entry class="" argb="255,0,44,166" value="123" />
+			<entry class="" argb="255,0,45,168" value="124" />
+			<entry class="" argb="255,0,47,169" value="125" />
+			<entry class="" argb="255,0,49,170" value="126" />
+			<entry class="" argb="255,0,50,172" value="127" />
+			<entry class="" argb="255,0,52,173" value="128" />
+			<entry class="" argb="255,0,53,174" value="129" />
+			<entry class="" argb="255,0,55,176" value="130" />
+			<entry class="" argb="255,0,57,177" value="131" />
+			<entry class="" argb="255,0,58,179" value="132" />
+			<entry class="" argb="255,0,60,180" value="133" />
+			<entry class="" argb="255,0,61,181" value="134" />
+			<entry class="" argb="255,0,63,183" value="135" />
+			<entry class="" argb="255,0,65,184" value="136" />
+			<entry class="" argb="255,0,66,185" value="137" />
+			<entry class="" argb="255,0,68,187" value="138" />
+			<entry class="" argb="255,0,69,188" value="139" />
+			<entry class="" argb="255,0,71,189" value="140" />
+			<entry class="" argb="255,0,73,191" value="141" />
+			<entry class="" argb="255,0,74,192" value="142" />
+			<entry class="" argb="255,0,76,193" value="143" />
+			<entry class="" argb="255,0,77,195" value="144" />
+			<entry class="" argb="255,0,79,196" value="145" />
+			<entry class="" argb="255,0,81,198" value="146" />
+			<entry class="" argb="255,0,82,199" value="147" />
+			<entry class="" argb="255,0,84,200" value="148" />
+			<entry class="" argb="255,0,85,202" value="149" />
+			<entry class="" argb="255,0,87,203" value="150" />
+			<entry class="" argb="255,0,89,204" value="151" />
+			<entry class="" argb="255,0,90,206" value="152" />
+			<entry class="" argb="255,0,92,207" value="153" />
+			<entry class="" argb="255,0,94,208" value="154" />
+			<entry class="" argb="255,0,95,210" value="155" />
+			<entry class="" argb="255,0,97,211" value="156" />
+			<entry class="" argb="255,0,98,212" value="157" />
+			<entry class="" argb="255,0,100,214" value="158" />
+			<entry class="" argb="255,0,102,215" value="159" />
+			<entry class="" argb="255,0,103,217" value="160" />
+			<entry class="" argb="255,0,105,218" value="161" />
+			<entry class="" argb="255,0,106,219" value="162" />
+			<entry class="" argb="255,0,108,221" value="163" />
+			<entry class="" argb="255,0,110,222" value="164" />
+			<entry class="" argb="255,0,111,223" value="165" />
+			<entry class="" argb="255,0,113,225" value="166" />
+			<entry class="" argb="255,0,114,226" value="167" />
+			<entry class="" argb="255,0,116,227" value="168" />
+			<entry class="" argb="255,0,118,229" value="169" />
+			<entry class="" argb="255,0,119,230" value="170" />
+			<entry class="" argb="255,0,121,231" value="171" />
+			<entry class="" argb="255,0,122,233" value="172" />
+			<entry class="" argb="255,0,124,234" value="173" />
+			<entry class="" argb="255,0,126,236" value="174" />
+			<entry class="" argb="255,0,127,237" value="175" />
+			<entry class="" argb="255,0,129,238" value="176" />
+			<entry class="" argb="255,0,130,240" value="177" />
+			<entry class="" argb="255,0,132,241" value="178" />
+			<entry class="" argb="255,0,134,242" value="179" />
+			<entry class="" argb="255,0,135,244" value="180" />
+			<entry class="" argb="255,0,137,245" value="181" />
+			<entry class="" argb="255,0,138,246" value="182" />
+			<entry class="" argb="255,0,140,248" value="183" />
+			<entry class="" argb="255,0,142,249" value="184" />
+			<entry class="" argb="255,0,143,250" value="185" />
+			<entry class="" argb="255,0,145,252" value="186" />
+			<entry class="" argb="255,0,146,253" value="187" />
+			<entry class="" argb="255,0,148,255" value="188" />
+			<entry class="" argb="255,0,150,255" value="189" />
+			<entry class="" argb="255,0,151,255" value="190" />
+			<entry class="" argb="255,0,153,255" value="191" />
+			<entry class="" argb="255,0,154,255" value="192" />
+			<entry class="" argb="255,5,156,255" value="193" />
+			<entry class="" argb="255,9,158,255" value="194" />
+			<entry class="" argb="255,13,159,255" value="195" />
+			<entry class="" argb="255,17,161,255" value="196" />
+			<entry class="" argb="255,21,162,255" value="197" />
+			<entry class="" argb="255,25,164,255" value="198" />
+			<entry class="" argb="255,29,166,255" value="199" />
+			<entry class="" argb="255,33,167,255" value="200" />
+			<entry class="" argb="255,37,169,255" value="201" />
+			<entry class="" argb="255,41,170,255" value="202" />
+			<entry class="" argb="255,45,172,255" value="203" />
+			<entry class="" argb="255,49,174,255" value="204" />
+			<entry class="" argb="255,53,175,255" value="205" />
+			<entry class="" argb="255,57,177,255" value="206" />
+			<entry class="" argb="255,61,179,255" value="207" />
+			<entry class="" argb="255,65,180,255" value="208" />
+			<entry class="" argb="255,69,182,255" value="209" />
+			<entry class="" argb="255,73,183,255" value="210" />
+			<entry class="" argb="255,77,185,255" value="211" />
+			<entry class="" argb="255,81,187,255" value="212" />
+			<entry class="" argb="255,85,188,255" value="213" />
+			<entry class="" argb="255,90,190,255" value="214" />
+			<entry class="" argb="255,94,191,255" value="215" />
+			<entry class="" argb="255,98,193,255" value="216" />
+			<entry class="" argb="255,102,195,255" value="217" />
+			<entry class="" argb="255,106,196,255" value="218" />
+			<entry class="" argb="255,110,198,255" value="219" />
+			<entry class="" argb="255,114,199,255" value="220" />
+			<entry class="" argb="255,118,201,255" value="221" />
+			<entry class="" argb="255,122,203,255" value="222" />
+			<entry class="" argb="255,126,204,255" value="223" />
+			<entry class="" argb="255,130,206,255" value="224" />
+			<entry class="" argb="255,134,207,255" value="225" />
+			<entry class="" argb="255,138,209,255" value="226" />
+			<entry class="" argb="255,142,211,255" value="227" />
+			<entry class="" argb="255,146,212,255" value="228" />
+			<entry class="" argb="255,150,214,255" value="229" />
+			<entry class="" argb="255,154,215,255" value="230" />
+			<entry class="" argb="255,158,217,255" value="231" />
+			<entry class="" argb="255,162,219,255" value="232" />
+			<entry class="" argb="255,166,220,255" value="233" />
+			<entry class="" argb="255,170,222,255" value="234" />
+			<entry class="" argb="255,175,223,255" value="235" />
+			<entry class="" argb="255,179,225,255" value="236" />
+			<entry class="" argb="255,183,227,255" value="237" />
+			<entry class="" argb="255,187,228,255" value="238" />
+			<entry class="" argb="255,191,230,255" value="239" />
+			<entry class="" argb="255,195,231,255" value="240" />
+			<entry class="" argb="255,199,233,255" value="241" />
+			<entry class="" argb="255,203,235,255" value="242" />
+			<entry class="" argb="255,207,236,255" value="243" />
+			<entry class="" argb="255,211,238,255" value="244" />
+			<entry class="" argb="255,215,239,255" value="245" />
+			<entry class="" argb="255,219,241,255" value="246" />
+			<entry class="" argb="255,223,243,255" value="247" />
+			<entry class="" argb="255,227,244,255" value="248" />
+			<entry class="" argb="255,231,246,255" value="249" />
+			<entry class="" argb="255,235,247,255" value="250" />
+			<entry class="" argb="255,239,249,255" value="251" />
+			<entry class="" argb="255,243,251,255" value="252" />
+			<entry class="" argb="255,247,252,255" value="253" />
+			<entry class="" argb="255,251,254,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="ocean" interpolate="false">
+		<table>
+			<entry class="" argb="255,54,67,141" value="0" />
+			<entry class="" argb="255,54,67,141" value="1" />
+			<entry class="" argb="255,59,67,153" value="2" />
+			<entry class="" argb="255,63,67,165" value="3" />
+			<entry class="" argb="255,68,67,177" value="4" />
+			<entry class="" argb="255,73,67,189" value="5" />
+			<entry class="" argb="255,77,67,202" value="6" />
+			<entry class="" argb="255,82,66,214" value="7" />
+			<entry class="" argb="255,82,66,214" value="8" />
+			<entry class="" argb="255,87,66,227" value="9" />
+			<entry class="" argb="255,91,65,239" value="10" />
+			<entry class="" argb="255,96,64,251" value="11" />
+			<entry class="" argb="255,100,64,246" value="12" />
+			<entry class="" argb="255,105,63,234" value="13" />
+			<entry class="" argb="255,110,62,222" value="14" />
+			<entry class="" argb="255,114,61,210" value="15" />
+			<entry class="" argb="255,119,60,198" value="16" />
+			<entry class="" argb="255,123,59,186" value="17" />
+			<entry class="" argb="255,127,57,175" value="18" />
+			<entry class="" argb="255,131,56,164" value="19" />
+			<entry class="" argb="255,135,55,153" value="20" />
+			<entry class="" argb="255,139,54,142" value="21" />
+			<entry class="" argb="255,143,53,132" value="22" />
+			<entry class="" argb="255,143,53,132" value="23" />
+			<entry class="" argb="255,147,52,122" value="24" />
+			<entry class="" argb="255,150,51,113" value="25" />
+			<entry class="" argb="255,154,49,104" value="26" />
+			<entry class="" argb="255,157,48,95" value="27" />
+			<entry class="" argb="255,160,47,87" value="28" />
+			<entry class="" argb="255,163,47,79" value="29" />
+			<entry class="" argb="255,165,46,72" value="30" />
+			<entry class="" argb="255,168,45,66" value="31" />
+			<entry class="" argb="255,170,44,59" value="32" />
+			<entry class="" argb="255,172,44,54" value="33" />
+			<entry class="" argb="255,174,44,49" value="34" />
+			<entry class="" argb="255,176,43,44" value="35" />
+			<entry class="" argb="255,177,43,40" value="36" />
+			<entry class="" argb="255,177,43,40" value="37" />
+			<entry class="" argb="255,179,43,37" value="38" />
+			<entry class="" argb="255,180,43,34" value="39" />
+			<entry class="" argb="255,180,44,32" value="40" />
+			<entry class="" argb="255,181,44,31" value="41" />
+			<entry class="" argb="255,181,45,30" value="42" />
+			<entry class="" argb="255,182,46,29" value="43" />
+			<entry class="" argb="255,181,47,30" value="44" />
+			<entry class="" argb="255,181,48,31" value="45" />
+			<entry class="" argb="255,180,50,32" value="46" />
+			<entry class="" argb="255,180,51,34" value="47" />
+			<entry class="" argb="255,179,53,37" value="48" />
+			<entry class="" argb="255,177,55,40" value="49" />
+			<entry class="" argb="255,176,57,44" value="50" />
+			<entry class="" argb="255,174,60,49" value="51" />
+			<entry class="" argb="255,174,60,49" value="52" />
+			<entry class="" argb="255,172,62,54" value="53" />
+			<entry class="" argb="255,170,65,59" value="54" />
+			<entry class="" argb="255,168,68,66" value="55" />
+			<entry class="" argb="255,165,71,72" value="56" />
+			<entry class="" argb="255,163,74,79" value="57" />
+			<entry class="" argb="255,160,78,87" value="58" />
+			<entry class="" argb="255,157,81,95" value="59" />
+			<entry class="" argb="255,154,85,104" value="60" />
+			<entry class="" argb="255,150,88,113" value="61" />
+			<entry class="" argb="255,147,92,122" value="62" />
+			<entry class="" argb="255,143,96,132" value="63" />
+			<entry class="" argb="255,139,100,142" value="64" />
+			<entry class="" argb="255,135,104,153" value="65" />
+			<entry class="" argb="255,131,108,164" value="66" />
+			<entry class="" argb="255,131,108,164" value="67" />
+			<entry class="" argb="255,127,112,175" value="68" />
+			<entry class="" argb="255,123,116,186" value="69" />
+			<entry class="" argb="255,119,120,198" value="70" />
+			<entry class="" argb="255,114,124,210" value="71" />
+			<entry class="" argb="255,110,128,222" value="72" />
+			<entry class="" argb="255,105,132,234" value="73" />
+			<entry class="" argb="255,100,136,246" value="74" />
+			<entry class="" argb="255,96,140,251" value="75" />
+			<entry class="" argb="255,91,144,239" value="76" />
+			<entry class="" argb="255,86,148,226" value="77" />
+			<entry class="" argb="255,82,151,214" value="78" />
+			<entry class="" argb="255,77,154,202" value="79" />
+			<entry class="" argb="255,73,158,189" value="80" />
+			<entry class="" argb="255,68,161,177" value="81" />
+			<entry class="" argb="255,68,161,177" value="82" />
+			<entry class="" argb="255,63,164,165" value="83" />
+			<entry class="" argb="255,59,166,153" value="84" />
+			<entry class="" argb="255,54,169,141" value="85" />
+			<entry class="" argb="255,50,171,129" value="86" />
+			<entry class="" argb="255,46,173,118" value="87" />
+			<entry class="" argb="255,42,175,107" value="88" />
+			<entry class="" argb="255,38,176,96" value="89" />
+			<entry class="" argb="255,34,178,85" value="90" />
+			<entry class="" argb="255,30,179,75" value="91" />
+			<entry class="" argb="255,26,180,65" value="92" />
+			<entry class="" argb="255,23,180,56" value="93" />
+			<entry class="" argb="255,19,180,47" value="94" />
+			<entry class="" argb="255,16,180,38" value="95" />
+			<entry class="" argb="255,13,180,30" value="96" />
+			<entry class="" argb="255,13,180,30" value="97" />
+			<entry class="" argb="255,13,179,22" value="98" />
+			<entry class="" argb="255,8,179,15" value="99" />
+			<entry class="" argb="255,5,178,9" value="100" />
+			<entry class="" argb="255,3,176,2" value="101" />
+			<entry class="" argb="255,1,175,2" value="102" />
+			<entry class="" argb="255,0,173,7" value="103" />
+			<entry class="" argb="255,2,171,12" value="104" />
+			<entry class="" argb="255,3,169,16" value="105" />
+			<entry class="" argb="255,5,166,19" value="106" />
+			<entry class="" argb="255,6,164,22" value="107" />
+			<entry class="" argb="255,6,161,24" value="108" />
+			<entry class="" argb="255,7,158,25" value="109" />
+			<entry class="" argb="255,7,155,26" value="110" />
+			<entry class="" argb="255,8,152,27" value="111" />
+			<entry class="" argb="255,8,152,27" value="112" />
+			<entry class="" argb="255,7,148,26" value="113" />
+			<entry class="" argb="255,7,145,25" value="114" />
+			<entry class="" argb="255,6,141,24" value="115" />
+			<entry class="" argb="255,6,138,22" value="116" />
+			<entry class="" argb="255,5,134,19" value="117" />
+			<entry class="" argb="255,3,131,16" value="118" />
+			<entry class="" argb="255,2,127,12" value="119" />
+			<entry class="" argb="255,0,124,7" value="120" />
+			<entry class="" argb="255,1,120,2" value="121" />
+			<entry class="" argb="255,3,117,2" value="122" />
+			<entry class="" argb="255,5,113,9" value="123" />
+			<entry class="" argb="255,8,110,15" value="124" />
+			<entry class="" argb="255,13,107,22" value="125" />
+			<entry class="" argb="255,13,104,30" value="126" />
+			<entry class="" argb="255,13,104,30" value="127" />
+			<entry class="" argb="255,16,101,38" value="128" />
+			<entry class="" argb="255,19,99,47" value="129" />
+			<entry class="" argb="255,23,97,56" value="130" />
+			<entry class="" argb="255,26,95,65" value="131" />
+			<entry class="" argb="255,30,93,75" value="132" />
+			<entry class="" argb="255,34,91,85" value="133" />
+			<entry class="" argb="255,38,90,96" value="134" />
+			<entry class="" argb="255,42,89,107" value="135" />
+			<entry class="" argb="255,46,88,118" value="136" />
+			<entry class="" argb="255,50,88,129" value="137" />
+			<entry class="" argb="255,54,88,141" value="138" />
+			<entry class="" argb="255,59,88,153" value="139" />
+			<entry class="" argb="255,63,88,165" value="140" />
+			<entry class="" argb="255,68,89,177" value="141" />
+			<entry class="" argb="255,68,89,177" value="142" />
+			<entry class="" argb="255,73,91,189" value="143" />
+			<entry class="" argb="255,77,92,202" value="144" />
+			<entry class="" argb="255,82,94,214" value="145" />
+			<entry class="" argb="255,87,96,227" value="146" />
+			<entry class="" argb="255,91,99,239" value="147" />
+			<entry class="" argb="255,96,102,251" value="148" />
+			<entry class="" argb="255,100,105,246" value="149" />
+			<entry class="" argb="255,105,109,234" value="150" />
+			<entry class="" argb="255,110,113,222" value="151" />
+			<entry class="" argb="255,114,117,210" value="152" />
+			<entry class="" argb="255,119,122,198" value="153" />
+			<entry class="" argb="255,123,127,186" value="154" />
+			<entry class="" argb="255,127,132,175" value="155" />
+			<entry class="" argb="255,131,137,164" value="156" />
+			<entry class="" argb="255,131,137,164" value="157" />
+			<entry class="" argb="255,135,142,153" value="158" />
+			<entry class="" argb="255,139,148,142" value="159" />
+			<entry class="" argb="255,143,154,132" value="160" />
+			<entry class="" argb="255,147,160,122" value="161" />
+			<entry class="" argb="255,150,166,113" value="162" />
+			<entry class="" argb="255,154,173,104" value="163" />
+			<entry class="" argb="255,157,179,95" value="164" />
+			<entry class="" argb="255,160,186,87" value="165" />
+			<entry class="" argb="255,163,192,79" value="166" />
+			<entry class="" argb="255,165,199,72" value="167" />
+			<entry class="" argb="255,168,205,66" value="168" />
+			<entry class="" argb="255,170,212,59" value="169" />
+			<entry class="" argb="255,172,218,54" value="170" />
+			<entry class="" argb="255,172,218,54" value="171" />
+			<entry class="" argb="255,174,225,49" value="172" />
+			<entry class="" argb="255,176,231,44" value="173" />
+			<entry class="" argb="255,177,237,40" value="174" />
+			<entry class="" argb="255,179,243,37" value="175" />
+			<entry class="" argb="255,180,248,34" value="176" />
+			<entry class="" argb="255,180,254,32" value="177" />
+			<entry class="" argb="255,181,251,31" value="178" />
+			<entry class="" argb="255,181,246,30" value="179" />
+			<entry class="" argb="255,182,241,29" value="180" />
+			<entry class="" argb="255,181,237,30" value="181" />
+			<entry class="" argb="255,181,233,31" value="182" />
+			<entry class="" argb="255,180,229,32" value="183" />
+			<entry class="" argb="255,180,226,34" value="184" />
+			<entry class="" argb="255,179,223,37" value="185" />
+			<entry class="" argb="255,179,223,37" value="186" />
+			<entry class="" argb="255,177,220,40" value="187" />
+			<entry class="" argb="255,176,218,44" value="188" />
+			<entry class="" argb="255,174,216,49" value="189" />
+			<entry class="" argb="255,172,215,54" value="190" />
+			<entry class="" argb="255,170,214,59" value="191" />
+			<entry class="" argb="255,168,213,66" value="192" />
+			<entry class="" argb="255,165,213,72" value="193" />
+			<entry class="" argb="255,163,214,79" value="194" />
+			<entry class="" argb="255,160,214,87" value="195" />
+			<entry class="" argb="255,157,216,95" value="196" />
+			<entry class="" argb="255,154,217,104" value="197" />
+			<entry class="" argb="255,150,219,113" value="198" />
+			<entry class="" argb="255,147,222,122" value="199" />
+			<entry class="" argb="255,143,224,132" value="200" />
+			<entry class="" argb="255,143,224,132" value="201" />
+			<entry class="" argb="255,139,228,142" value="202" />
+			<entry class="" argb="255,135,231,153" value="203" />
+			<entry class="" argb="255,131,235,164" value="204" />
+			<entry class="" argb="255,127,239,175" value="205" />
+			<entry class="" argb="255,123,244,186" value="206" />
+			<entry class="" argb="255,119,248,198" value="207" />
+			<entry class="" argb="255,114,253,210" value="208" />
+			<entry class="" argb="255,110,251,222" value="209" />
+			<entry class="" argb="255,105,246,234" value="210" />
+			<entry class="" argb="255,105,246,234" value="211" />
+			<entry class="" argb="255,105,246,234" value="212" />
+			<entry class="" argb="255,105,246,234" value="213" />
+			<entry class="" argb="255,105,246,234" value="214" />
+			<entry class="" argb="255,105,246,234" value="215" />
+			<entry class="" argb="255,105,246,234" value="216" />
+			<entry class="" argb="255,105,246,234" value="217" />
+			<entry class="" argb="255,105,246,234" value="218" />
+			<entry class="" argb="255,105,246,234" value="219" />
+			<entry class="" argb="255,105,246,234" value="220" />
+			<entry class="" argb="255,105,246,234" value="221" />
+			<entry class="" argb="255,105,246,234" value="222" />
+			<entry class="" argb="255,105,246,234" value="223" />
+			<entry class="" argb="255,105,246,234" value="224" />
+			<entry class="" argb="255,105,246,234" value="225" />
+			<entry class="" argb="255,105,246,234" value="226" />
+			<entry class="" argb="255,105,246,234" value="227" />
+			<entry class="" argb="255,105,246,234" value="228" />
+			<entry class="" argb="255,105,246,234" value="229" />
+			<entry class="" argb="255,105,246,234" value="230" />
+			<entry class="" argb="255,105,246,234" value="231" />
+			<entry class="" argb="255,105,246,234" value="232" />
+			<entry class="" argb="255,105,246,234" value="233" />
+			<entry class="" argb="255,105,246,234" value="234" />
+			<entry class="" argb="255,105,246,234" value="235" />
+			<entry class="" argb="255,105,246,234" value="236" />
+			<entry class="" argb="255,105,246,234" value="237" />
+			<entry class="" argb="255,105,246,234" value="238" />
+			<entry class="" argb="255,105,246,234" value="239" />
+			<entry class="" argb="255,105,246,234" value="240" />
+			<entry class="" argb="255,105,246,234" value="241" />
+			<entry class="" argb="255,105,246,234" value="242" />
+			<entry class="" argb="255,105,246,234" value="243" />
+			<entry class="" argb="255,105,246,234" value="244" />
+			<entry class="" argb="255,105,246,234" value="245" />
+			<entry class="" argb="255,105,246,234" value="246" />
+			<entry class="" argb="255,105,246,234" value="247" />
+			<entry class="" argb="255,105,246,234" value="248" />
+			<entry class="" argb="255,105,246,234" value="249" />
+			<entry class="" argb="255,105,246,234" value="250" />
+			<entry class="" argb="255,105,246,234" value="251" />
+			<entry class="" argb="255,105,246,234" value="252" />
+			<entry class="" argb="255,0,0,0" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="red-temperature" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,1,0,0" value="1" />
+			<entry class="" argb="255,2,0,0" value="2" />
+			<entry class="" argb="255,4,0,0" value="3" />
+			<entry class="" argb="255,5,0,0" value="4" />
+			<entry class="" argb="255,7,0,0" value="5" />
+			<entry class="" argb="255,8,0,0" value="6" />
+			<entry class="" argb="255,10,0,0" value="7" />
+			<entry class="" argb="255,11,0,0" value="8" />
+			<entry class="" argb="255,13,0,0" value="9" />
+			<entry class="" argb="255,14,0,0" value="10" />
+			<entry class="" argb="255,15,0,0" value="11" />
+			<entry class="" argb="255,17,0,0" value="12" />
+			<entry class="" argb="255,18,0,0" value="13" />
+			<entry class="" argb="255,20,0,0" value="14" />
+			<entry class="" argb="255,21,0,0" value="15" />
+			<entry class="" argb="255,23,0,0" value="16" />
+			<entry class="" argb="255,24,0,0" value="17" />
+			<entry class="" argb="255,26,0,0" value="18" />
+			<entry class="" argb="255,27,0,0" value="19" />
+			<entry class="" argb="255,28,0,0" value="20" />
+			<entry class="" argb="255,30,0,0" value="21" />
+			<entry class="" argb="255,31,0,0" value="22" />
+			<entry class="" argb="255,33,0,0" value="23" />
+			<entry class="" argb="255,34,0,0" value="24" />
+			<entry class="" argb="255,36,0,0" value="25" />
+			<entry class="" argb="255,37,0,0" value="26" />
+			<entry class="" argb="255,39,0,0" value="27" />
+			<entry class="" argb="255,40,0,0" value="28" />
+			<entry class="" argb="255,42,0,0" value="29" />
+			<entry class="" argb="255,43,0,0" value="30" />
+			<entry class="" argb="255,44,0,0" value="31" />
+			<entry class="" argb="255,46,0,0" value="32" />
+			<entry class="" argb="255,47,0,0" value="33" />
+			<entry class="" argb="255,49,0,0" value="34" />
+			<entry class="" argb="255,50,0,0" value="35" />
+			<entry class="" argb="255,52,0,0" value="36" />
+			<entry class="" argb="255,53,0,0" value="37" />
+			<entry class="" argb="255,55,0,0" value="38" />
+			<entry class="" argb="255,56,0,0" value="39" />
+			<entry class="" argb="255,57,0,0" value="40" />
+			<entry class="" argb="255,59,0,0" value="41" />
+			<entry class="" argb="255,60,0,0" value="42" />
+			<entry class="" argb="255,62,0,0" value="43" />
+			<entry class="" argb="255,63,0,0" value="44" />
+			<entry class="" argb="255,65,0,0" value="45" />
+			<entry class="" argb="255,66,0,0" value="46" />
+			<entry class="" argb="255,68,0,0" value="47" />
+			<entry class="" argb="255,69,0,0" value="48" />
+			<entry class="" argb="255,70,0,0" value="49" />
+			<entry class="" argb="255,72,0,0" value="50" />
+			<entry class="" argb="255,73,0,0" value="51" />
+			<entry class="" argb="255,75,0,0" value="52" />
+			<entry class="" argb="255,76,0,0" value="53" />
+			<entry class="" argb="255,78,0,0" value="54" />
+			<entry class="" argb="255,79,0,0" value="55" />
+			<entry class="" argb="255,81,0,0" value="56" />
+			<entry class="" argb="255,82,0,0" value="57" />
+			<entry class="" argb="255,84,0,0" value="58" />
+			<entry class="" argb="255,85,0,0" value="59" />
+			<entry class="" argb="255,86,0,0" value="60" />
+			<entry class="" argb="255,88,0,0" value="61" />
+			<entry class="" argb="255,89,0,0" value="62" />
+			<entry class="" argb="255,91,0,0" value="63" />
+			<entry class="" argb="255,92,0,0" value="64" />
+			<entry class="" argb="255,94,0,0" value="65" />
+			<entry class="" argb="255,95,0,0" value="66" />
+			<entry class="" argb="255,97,0,0" value="67" />
+			<entry class="" argb="255,98,0,0" value="68" />
+			<entry class="" argb="255,99,0,0" value="69" />
+			<entry class="" argb="255,101,0,0" value="70" />
+			<entry class="" argb="255,102,0,0" value="71" />
+			<entry class="" argb="255,104,0,0" value="72" />
+			<entry class="" argb="255,105,0,0" value="73" />
+			<entry class="" argb="255,107,0,0" value="74" />
+			<entry class="" argb="255,108,0,0" value="75" />
+			<entry class="" argb="255,110,0,0" value="76" />
+			<entry class="" argb="255,111,0,0" value="77" />
+			<entry class="" argb="255,113,0,0" value="78" />
+			<entry class="" argb="255,114,0,0" value="79" />
+			<entry class="" argb="255,115,0,0" value="80" />
+			<entry class="" argb="255,117,0,0" value="81" />
+			<entry class="" argb="255,118,0,0" value="82" />
+			<entry class="" argb="255,120,0,0" value="83" />
+			<entry class="" argb="255,121,0,0" value="84" />
+			<entry class="" argb="255,123,0,0" value="85" />
+			<entry class="" argb="255,124,0,0" value="86" />
+			<entry class="" argb="255,126,0,0" value="87" />
+			<entry class="" argb="255,127,0,0" value="88" />
+			<entry class="" argb="255,128,0,0" value="89" />
+			<entry class="" argb="255,130,0,0" value="90" />
+			<entry class="" argb="255,131,0,0" value="91" />
+			<entry class="" argb="255,133,0,0" value="92" />
+			<entry class="" argb="255,134,0,0" value="93" />
+			<entry class="" argb="255,136,0,0" value="94" />
+			<entry class="" argb="255,137,0,0" value="95" />
+			<entry class="" argb="255,139,0,0" value="96" />
+			<entry class="" argb="255,140,0,0" value="97" />
+			<entry class="" argb="255,141,0,0" value="98" />
+			<entry class="" argb="255,143,0,0" value="99" />
+			<entry class="" argb="255,144,0,0" value="100" />
+			<entry class="" argb="255,146,0,0" value="101" />
+			<entry class="" argb="255,147,0,0" value="102" />
+			<entry class="" argb="255,149,0,0" value="103" />
+			<entry class="" argb="255,150,0,0" value="104" />
+			<entry class="" argb="255,152,0,0" value="105" />
+			<entry class="" argb="255,153,0,0" value="106" />
+			<entry class="" argb="255,155,0,0" value="107" />
+			<entry class="" argb="255,156,0,0" value="108" />
+			<entry class="" argb="255,157,0,0" value="109" />
+			<entry class="" argb="255,159,0,0" value="110" />
+			<entry class="" argb="255,160,0,0" value="111" />
+			<entry class="" argb="255,162,0,0" value="112" />
+			<entry class="" argb="255,163,0,0" value="113" />
+			<entry class="" argb="255,165,0,0" value="114" />
+			<entry class="" argb="255,166,0,0" value="115" />
+			<entry class="" argb="255,168,0,0" value="116" />
+			<entry class="" argb="255,169,0,0" value="117" />
+			<entry class="" argb="255,170,0,0" value="118" />
+			<entry class="" argb="255,172,0,0" value="119" />
+			<entry class="" argb="255,173,0,0" value="120" />
+			<entry class="" argb="255,175,1,0" value="121" />
+			<entry class="" argb="255,176,3,0" value="122" />
+			<entry class="" argb="255,178,5,0" value="123" />
+			<entry class="" argb="255,179,7,0" value="124" />
+			<entry class="" argb="255,181,9,0" value="125" />
+			<entry class="" argb="255,182,11,0" value="126" />
+			<entry class="" argb="255,184,13,0" value="127" />
+			<entry class="" argb="255,185,15,0" value="128" />
+			<entry class="" argb="255,186,17,0" value="129" />
+			<entry class="" argb="255,188,18,0" value="130" />
+			<entry class="" argb="255,189,20,0" value="131" />
+			<entry class="" argb="255,191,22,0" value="132" />
+			<entry class="" argb="255,192,24,0" value="133" />
+			<entry class="" argb="255,194,26,0" value="134" />
+			<entry class="" argb="255,195,28,0" value="135" />
+			<entry class="" argb="255,197,30,0" value="136" />
+			<entry class="" argb="255,198,32,0" value="137" />
+			<entry class="" argb="255,199,34,0" value="138" />
+			<entry class="" argb="255,201,35,0" value="139" />
+			<entry class="" argb="255,202,37,0" value="140" />
+			<entry class="" argb="255,204,39,0" value="141" />
+			<entry class="" argb="255,205,41,0" value="142" />
+			<entry class="" argb="255,207,43,0" value="143" />
+			<entry class="" argb="255,208,45,0" value="144" />
+			<entry class="" argb="255,210,47,0" value="145" />
+			<entry class="" argb="255,211,49,0" value="146" />
+			<entry class="" argb="255,212,51,0" value="147" />
+			<entry class="" argb="255,214,52,0" value="148" />
+			<entry class="" argb="255,215,54,0" value="149" />
+			<entry class="" argb="255,217,56,0" value="150" />
+			<entry class="" argb="255,218,58,0" value="151" />
+			<entry class="" argb="255,220,60,0" value="152" />
+			<entry class="" argb="255,221,62,0" value="153" />
+			<entry class="" argb="255,223,64,0" value="154" />
+			<entry class="" argb="255,224,66,0" value="155" />
+			<entry class="" argb="255,226,68,0" value="156" />
+			<entry class="" argb="255,227,69,0" value="157" />
+			<entry class="" argb="255,228,71,0" value="158" />
+			<entry class="" argb="255,230,73,0" value="159" />
+			<entry class="" argb="255,231,75,0" value="160" />
+			<entry class="" argb="255,233,77,0" value="161" />
+			<entry class="" argb="255,234,79,0" value="162" />
+			<entry class="" argb="255,236,81,0" value="163" />
+			<entry class="" argb="255,237,83,0" value="164" />
+			<entry class="" argb="255,239,85,0" value="165" />
+			<entry class="" argb="255,240,86,0" value="166" />
+			<entry class="" argb="255,241,88,0" value="167" />
+			<entry class="" argb="255,243,90,0" value="168" />
+			<entry class="" argb="255,244,92,0" value="169" />
+			<entry class="" argb="255,246,94,0" value="170" />
+			<entry class="" argb="255,247,96,0" value="171" />
+			<entry class="" argb="255,249,98,0" value="172" />
+			<entry class="" argb="255,250,100,0" value="173" />
+			<entry class="" argb="255,252,102,0" value="174" />
+			<entry class="" argb="255,253,103,0" value="175" />
+			<entry class="" argb="255,255,105,0" value="176" />
+			<entry class="" argb="255,255,107,0" value="177" />
+			<entry class="" argb="255,255,109,0" value="178" />
+			<entry class="" argb="255,255,111,0" value="179" />
+			<entry class="" argb="255,255,113,0" value="180" />
+			<entry class="" argb="255,255,115,0" value="181" />
+			<entry class="" argb="255,255,117,0" value="182" />
+			<entry class="" argb="255,255,119,0" value="183" />
+			<entry class="" argb="255,255,120,0" value="184" />
+			<entry class="" argb="255,255,122,0" value="185" />
+			<entry class="" argb="255,255,124,0" value="186" />
+			<entry class="" argb="255,255,126,0" value="187" />
+			<entry class="" argb="255,255,128,0" value="188" />
+			<entry class="" argb="255,255,130,0" value="189" />
+			<entry class="" argb="255,255,132,0" value="190" />
+			<entry class="" argb="255,255,134,3" value="191" />
+			<entry class="" argb="255,255,136,7" value="192" />
+			<entry class="" argb="255,255,137,11" value="193" />
+			<entry class="" argb="255,255,139,15" value="194" />
+			<entry class="" argb="255,255,141,19" value="195" />
+			<entry class="" argb="255,255,143,23" value="196" />
+			<entry class="" argb="255,255,145,27" value="197" />
+			<entry class="" argb="255,255,147,31" value="198" />
+			<entry class="" argb="255,255,149,35" value="199" />
+			<entry class="" argb="255,255,151,39" value="200" />
+			<entry class="" argb="255,255,153,43" value="201" />
+			<entry class="" argb="255,255,154,47" value="202" />
+			<entry class="" argb="255,255,156,51" value="203" />
+			<entry class="" argb="255,255,158,54" value="204" />
+			<entry class="" argb="255,255,160,58" value="205" />
+			<entry class="" argb="255,255,162,62" value="206" />
+			<entry class="" argb="255,255,164,66" value="207" />
+			<entry class="" argb="255,255,166,70" value="208" />
+			<entry class="" argb="255,255,168,74" value="209" />
+			<entry class="" argb="255,255,170,78" value="210" />
+			<entry class="" argb="255,255,171,82" value="211" />
+			<entry class="" argb="255,255,173,86" value="212" />
+			<entry class="" argb="255,255,175,90" value="213" />
+			<entry class="" argb="255,255,177,94" value="214" />
+			<entry class="" argb="255,255,179,98" value="215" />
+			<entry class="" argb="255,255,181,102" value="216" />
+			<entry class="" argb="255,255,183,105" value="217" />
+			<entry class="" argb="255,255,185,109" value="218" />
+			<entry class="" argb="255,255,187,113" value="219" />
+			<entry class="" argb="255,255,188,117" value="220" />
+			<entry class="" argb="255,255,190,121" value="221" />
+			<entry class="" argb="255,255,192,125" value="222" />
+			<entry class="" argb="255,255,194,129" value="223" />
+			<entry class="" argb="255,255,196,133" value="224" />
+			<entry class="" argb="255,255,198,137" value="225" />
+			<entry class="" argb="255,255,200,141" value="226" />
+			<entry class="" argb="255,255,202,145" value="227" />
+			<entry class="" argb="255,255,204,149" value="228" />
+			<entry class="" argb="255,255,205,153" value="229" />
+			<entry class="" argb="255,255,207,156" value="230" />
+			<entry class="" argb="255,255,209,160" value="231" />
+			<entry class="" argb="255,255,211,164" value="232" />
+			<entry class="" argb="255,255,213,168" value="233" />
+			<entry class="" argb="255,255,215,172" value="234" />
+			<entry class="" argb="255,255,217,176" value="235" />
+			<entry class="" argb="255,255,219,180" value="236" />
+			<entry class="" argb="255,255,221,184" value="237" />
+			<entry class="" argb="255,255,222,188" value="238" />
+			<entry class="" argb="255,255,224,192" value="239" />
+			<entry class="" argb="255,255,226,196" value="240" />
+			<entry class="" argb="255,255,228,200" value="241" />
+			<entry class="" argb="255,255,230,204" value="242" />
+			<entry class="" argb="255,255,232,207" value="243" />
+			<entry class="" argb="255,255,234,211" value="244" />
+			<entry class="" argb="255,255,236,215" value="245" />
+			<entry class="" argb="255,255,238,219" value="246" />
+			<entry class="" argb="255,255,239,223" value="247" />
+			<entry class="" argb="255,255,241,227" value="248" />
+			<entry class="" argb="255,255,243,231" value="249" />
+			<entry class="" argb="255,255,245,235" value="250" />
+			<entry class="" argb="255,255,247,239" value="251" />
+			<entry class="" argb="255,255,249,243" value="252" />
+			<entry class="" argb="255,255,251,247" value="253" />
+			<entry class="" argb="255,255,253,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="16level" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,84,0" value="1" />
+			<entry class="" argb="255,0,84,0" value="2" />
+			<entry class="" argb="255,0,84,0" value="3" />
+			<entry class="" argb="255,0,84,0" value="4" />
+			<entry class="" argb="255,0,84,0" value="5" />
+			<entry class="" argb="255,0,84,0" value="6" />
+			<entry class="" argb="255,0,84,0" value="7" />
+			<entry class="" argb="255,0,84,0" value="8" />
+			<entry class="" argb="255,0,84,0" value="9" />
+			<entry class="" argb="255,0,84,0" value="10" />
+			<entry class="" argb="255,0,84,0" value="11" />
+			<entry class="" argb="255,0,84,0" value="12" />
+			<entry class="" argb="255,0,84,0" value="13" />
+			<entry class="" argb="255,0,84,0" value="14" />
+			<entry class="" argb="255,0,84,0" value="15" />
+			<entry class="" argb="255,0,168,0" value="16" />
+			<entry class="" argb="255,0,168,0" value="17" />
+			<entry class="" argb="255,0,168,0" value="18" />
+			<entry class="" argb="255,0,168,0" value="19" />
+			<entry class="" argb="255,0,168,0" value="20" />
+			<entry class="" argb="255,0,168,0" value="21" />
+			<entry class="" argb="255,0,168,0" value="22" />
+			<entry class="" argb="255,0,168,0" value="23" />
+			<entry class="" argb="255,0,168,0" value="24" />
+			<entry class="" argb="255,0,168,0" value="25" />
+			<entry class="" argb="255,0,168,0" value="26" />
+			<entry class="" argb="255,0,168,0" value="27" />
+			<entry class="" argb="255,0,168,0" value="28" />
+			<entry class="" argb="255,0,168,0" value="29" />
+			<entry class="" argb="255,0,168,0" value="30" />
+			<entry class="" argb="255,0,168,0" value="31" />
+			<entry class="" argb="255,0,255,0" value="32" />
+			<entry class="" argb="255,0,255,0" value="33" />
+			<entry class="" argb="255,0,255,0" value="34" />
+			<entry class="" argb="255,0,255,0" value="35" />
+			<entry class="" argb="255,0,255,0" value="36" />
+			<entry class="" argb="255,0,255,0" value="37" />
+			<entry class="" argb="255,0,255,0" value="38" />
+			<entry class="" argb="255,0,255,0" value="39" />
+			<entry class="" argb="255,0,255,0" value="40" />
+			<entry class="" argb="255,0,255,0" value="41" />
+			<entry class="" argb="255,0,255,0" value="42" />
+			<entry class="" argb="255,0,255,0" value="43" />
+			<entry class="" argb="255,0,255,0" value="44" />
+			<entry class="" argb="255,0,255,0" value="45" />
+			<entry class="" argb="255,0,255,0" value="46" />
+			<entry class="" argb="255,0,255,0" value="47" />
+			<entry class="" argb="255,0,255,84" value="48" />
+			<entry class="" argb="255,0,255,84" value="49" />
+			<entry class="" argb="255,0,255,84" value="50" />
+			<entry class="" argb="255,0,255,84" value="51" />
+			<entry class="" argb="255,0,255,84" value="52" />
+			<entry class="" argb="255,0,255,84" value="53" />
+			<entry class="" argb="255,0,255,84" value="54" />
+			<entry class="" argb="255,0,255,84" value="55" />
+			<entry class="" argb="255,0,255,84" value="56" />
+			<entry class="" argb="255,0,255,84" value="57" />
+			<entry class="" argb="255,0,255,84" value="58" />
+			<entry class="" argb="255,0,255,84" value="59" />
+			<entry class="" argb="255,0,255,84" value="60" />
+			<entry class="" argb="255,0,255,84" value="61" />
+			<entry class="" argb="255,0,255,84" value="62" />
+			<entry class="" argb="255,0,255,84" value="63" />
+			<entry class="" argb="255,0,255,168" value="64" />
+			<entry class="" argb="255,0,255,168" value="65" />
+			<entry class="" argb="255,0,255,168" value="66" />
+			<entry class="" argb="255,0,255,168" value="67" />
+			<entry class="" argb="255,0,255,168" value="68" />
+			<entry class="" argb="255,0,255,168" value="69" />
+			<entry class="" argb="255,0,255,168" value="70" />
+			<entry class="" argb="255,0,255,168" value="71" />
+			<entry class="" argb="255,0,255,168" value="72" />
+			<entry class="" argb="255,0,255,168" value="73" />
+			<entry class="" argb="255,0,255,168" value="74" />
+			<entry class="" argb="255,0,255,168" value="75" />
+			<entry class="" argb="255,0,255,168" value="76" />
+			<entry class="" argb="255,0,255,168" value="77" />
+			<entry class="" argb="255,0,255,168" value="78" />
+			<entry class="" argb="255,0,255,168" value="79" />
+			<entry class="" argb="255,0,255,255" value="80" />
+			<entry class="" argb="255,0,255,255" value="81" />
+			<entry class="" argb="255,0,255,255" value="82" />
+			<entry class="" argb="255,0,255,255" value="83" />
+			<entry class="" argb="255,0,255,255" value="84" />
+			<entry class="" argb="255,0,255,255" value="85" />
+			<entry class="" argb="255,0,255,255" value="86" />
+			<entry class="" argb="255,0,255,255" value="87" />
+			<entry class="" argb="255,0,255,255" value="88" />
+			<entry class="" argb="255,0,255,255" value="89" />
+			<entry class="" argb="255,0,255,255" value="90" />
+			<entry class="" argb="255,0,255,255" value="91" />
+			<entry class="" argb="255,0,255,255" value="92" />
+			<entry class="" argb="255,0,255,255" value="93" />
+			<entry class="" argb="255,0,255,255" value="94" />
+			<entry class="" argb="255,0,255,255" value="95" />
+			<entry class="" argb="255,0,0,255" value="96" />
+			<entry class="" argb="255,0,0,255" value="97" />
+			<entry class="" argb="255,0,0,255" value="98" />
+			<entry class="" argb="255,0,0,255" value="99" />
+			<entry class="" argb="255,0,0,255" value="100" />
+			<entry class="" argb="255,0,0,255" value="101" />
+			<entry class="" argb="255,0,0,255" value="102" />
+			<entry class="" argb="255,0,0,255" value="103" />
+			<entry class="" argb="255,0,0,255" value="104" />
+			<entry class="" argb="255,0,0,255" value="105" />
+			<entry class="" argb="255,0,0,255" value="106" />
+			<entry class="" argb="255,0,0,255" value="107" />
+			<entry class="" argb="255,0,0,255" value="108" />
+			<entry class="" argb="255,0,0,255" value="109" />
+			<entry class="" argb="255,0,0,255" value="110" />
+			<entry class="" argb="255,0,0,255" value="111" />
+			<entry class="" argb="255,128,0,255" value="112" />
+			<entry class="" argb="255,128,0,255" value="113" />
+			<entry class="" argb="255,128,0,255" value="114" />
+			<entry class="" argb="255,128,0,255" value="115" />
+			<entry class="" argb="255,128,0,255" value="116" />
+			<entry class="" argb="255,128,0,255" value="117" />
+			<entry class="" argb="255,128,0,255" value="118" />
+			<entry class="" argb="255,128,0,255" value="119" />
+			<entry class="" argb="255,128,0,255" value="120" />
+			<entry class="" argb="255,128,0,255" value="121" />
+			<entry class="" argb="255,128,0,255" value="122" />
+			<entry class="" argb="255,128,0,255" value="123" />
+			<entry class="" argb="255,128,0,255" value="124" />
+			<entry class="" argb="255,128,0,255" value="125" />
+			<entry class="" argb="255,128,0,255" value="126" />
+			<entry class="" argb="255,128,0,255" value="127" />
+			<entry class="" argb="255,255,0,220" value="128" />
+			<entry class="" argb="255,255,0,220" value="129" />
+			<entry class="" argb="255,255,0,220" value="130" />
+			<entry class="" argb="255,255,0,220" value="131" />
+			<entry class="" argb="255,255,0,220" value="132" />
+			<entry class="" argb="255,255,0,220" value="133" />
+			<entry class="" argb="255,255,0,220" value="134" />
+			<entry class="" argb="255,255,0,220" value="135" />
+			<entry class="" argb="255,255,0,220" value="136" />
+			<entry class="" argb="255,255,0,220" value="137" />
+			<entry class="" argb="255,255,0,220" value="138" />
+			<entry class="" argb="255,255,0,220" value="139" />
+			<entry class="" argb="255,255,0,220" value="140" />
+			<entry class="" argb="255,255,0,220" value="141" />
+			<entry class="" argb="255,255,0,220" value="142" />
+			<entry class="" argb="255,255,0,220" value="143" />
+			<entry class="" argb="255,255,0,180" value="144" />
+			<entry class="" argb="255,255,0,180" value="145" />
+			<entry class="" argb="255,255,0,180" value="146" />
+			<entry class="" argb="255,255,0,180" value="147" />
+			<entry class="" argb="255,255,0,180" value="148" />
+			<entry class="" argb="255,255,0,180" value="149" />
+			<entry class="" argb="255,255,0,180" value="150" />
+			<entry class="" argb="255,255,0,180" value="151" />
+			<entry class="" argb="255,255,0,180" value="152" />
+			<entry class="" argb="255,255,0,180" value="153" />
+			<entry class="" argb="255,255,0,180" value="154" />
+			<entry class="" argb="255,255,0,180" value="155" />
+			<entry class="" argb="255,255,0,180" value="156" />
+			<entry class="" argb="255,255,0,180" value="157" />
+			<entry class="" argb="255,255,0,180" value="158" />
+			<entry class="" argb="255,255,0,180" value="159" />
+			<entry class="" argb="255,255,0,128" value="160" />
+			<entry class="" argb="255,255,0,128" value="161" />
+			<entry class="" argb="255,255,0,128" value="162" />
+			<entry class="" argb="255,255,0,128" value="163" />
+			<entry class="" argb="255,255,0,128" value="164" />
+			<entry class="" argb="255,255,0,128" value="165" />
+			<entry class="" argb="255,255,0,128" value="166" />
+			<entry class="" argb="255,255,0,128" value="167" />
+			<entry class="" argb="255,255,0,128" value="168" />
+			<entry class="" argb="255,255,0,128" value="169" />
+			<entry class="" argb="255,255,0,128" value="170" />
+			<entry class="" argb="255,255,0,128" value="171" />
+			<entry class="" argb="255,255,0,128" value="172" />
+			<entry class="" argb="255,255,0,128" value="173" />
+			<entry class="" argb="255,255,0,128" value="174" />
+			<entry class="" argb="255,255,0,128" value="175" />
+			<entry class="" argb="255,255,0,64" value="176" />
+			<entry class="" argb="255,255,0,64" value="177" />
+			<entry class="" argb="255,255,0,64" value="178" />
+			<entry class="" argb="255,255,0,64" value="179" />
+			<entry class="" argb="255,255,0,64" value="180" />
+			<entry class="" argb="255,255,0,64" value="181" />
+			<entry class="" argb="255,255,0,64" value="182" />
+			<entry class="" argb="255,255,0,64" value="183" />
+			<entry class="" argb="255,255,0,64" value="184" />
+			<entry class="" argb="255,255,0,64" value="185" />
+			<entry class="" argb="255,255,0,64" value="186" />
+			<entry class="" argb="255,255,0,64" value="187" />
+			<entry class="" argb="255,255,0,64" value="188" />
+			<entry class="" argb="255,255,0,64" value="189" />
+			<entry class="" argb="255,255,0,64" value="190" />
+			<entry class="" argb="255,255,0,64" value="191" />
+			<entry class="" argb="255,255,0,0" value="192" />
+			<entry class="" argb="255,255,0,0" value="193" />
+			<entry class="" argb="255,255,0,0" value="194" />
+			<entry class="" argb="255,255,0,0" value="195" />
+			<entry class="" argb="255,255,0,0" value="196" />
+			<entry class="" argb="255,255,0,0" value="197" />
+			<entry class="" argb="255,255,0,0" value="198" />
+			<entry class="" argb="255,255,0,0" value="199" />
+			<entry class="" argb="255,255,0,0" value="200" />
+			<entry class="" argb="255,255,0,0" value="201" />
+			<entry class="" argb="255,255,0,0" value="202" />
+			<entry class="" argb="255,255,0,0" value="203" />
+			<entry class="" argb="255,255,0,0" value="204" />
+			<entry class="" argb="255,255,0,0" value="205" />
+			<entry class="" argb="255,255,0,0" value="206" />
+			<entry class="" argb="255,255,0,0" value="207" />
+			<entry class="" argb="255,220,190,190" value="208" />
+			<entry class="" argb="255,220,190,190" value="209" />
+			<entry class="" argb="255,220,190,190" value="210" />
+			<entry class="" argb="255,220,190,190" value="211" />
+			<entry class="" argb="255,220,190,190" value="212" />
+			<entry class="" argb="255,221,190,190" value="213" />
+			<entry class="" argb="255,221,190,190" value="214" />
+			<entry class="" argb="255,221,190,190" value="215" />
+			<entry class="" argb="255,221,190,190" value="216" />
+			<entry class="" argb="255,221,190,190" value="217" />
+			<entry class="" argb="255,222,190,190" value="218" />
+			<entry class="" argb="255,222,190,190" value="219" />
+			<entry class="" argb="255,222,190,190" value="220" />
+			<entry class="" argb="255,222,190,190" value="221" />
+			<entry class="" argb="255,222,190,190" value="222" />
+			<entry class="" argb="255,223,190,190" value="223" />
+			<entry class="" argb="255,220,220,220" value="224" />
+			<entry class="" argb="255,220,220,220" value="225" />
+			<entry class="" argb="255,220,220,220" value="226" />
+			<entry class="" argb="255,220,220,220" value="227" />
+			<entry class="" argb="255,220,220,220" value="228" />
+			<entry class="" argb="255,220,220,220" value="229" />
+			<entry class="" argb="255,220,220,220" value="230" />
+			<entry class="" argb="255,220,220,220" value="231" />
+			<entry class="" argb="255,220,220,220" value="232" />
+			<entry class="" argb="255,220,220,220" value="233" />
+			<entry class="" argb="255,220,220,220" value="234" />
+			<entry class="" argb="255,220,220,220" value="235" />
+			<entry class="" argb="255,220,220,220" value="236" />
+			<entry class="" argb="255,220,220,220" value="237" />
+			<entry class="" argb="255,220,220,220" value="238" />
+			<entry class="" argb="255,220,220,220" value="239" />
+			<entry class="" argb="255,255,255,255" value="240" />
+			<entry class="" argb="255,255,255,255" value="241" />
+			<entry class="" argb="255,255,255,255" value="242" />
+			<entry class="" argb="255,255,255,255" value="243" />
+			<entry class="" argb="255,255,255,255" value="244" />
+			<entry class="" argb="255,255,255,255" value="245" />
+			<entry class="" argb="255,255,255,255" value="246" />
+			<entry class="" argb="255,255,255,255" value="247" />
+			<entry class="" argb="255,255,255,255" value="248" />
+			<entry class="" argb="255,255,255,255" value="249" />
+			<entry class="" argb="255,255,255,255" value="250" />
+			<entry class="" argb="255,255,255,255" value="251" />
+			<entry class="" argb="255,255,255,255" value="252" />
+			<entry class="" argb="255,255,255,255" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-green-red-yellow" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,2" value="1" />
+			<entry class="" argb="255,0,0,4" value="2" />
+			<entry class="" argb="255,0,0,6" value="3" />
+			<entry class="" argb="255,0,0,8" value="4" />
+			<entry class="" argb="255,0,0,10" value="5" />
+			<entry class="" argb="255,0,0,12" value="6" />
+			<entry class="" argb="255,0,0,14" value="7" />
+			<entry class="" argb="255,0,0,16" value="8" />
+			<entry class="" argb="255,0,0,18" value="9" />
+			<entry class="" argb="255,0,0,20" value="10" />
+			<entry class="" argb="255,0,0,22" value="11" />
+			<entry class="" argb="255,0,0,25" value="12" />
+			<entry class="" argb="255,0,0,27" value="13" />
+			<entry class="" argb="255,0,0,29" value="14" />
+			<entry class="" argb="255,0,0,31" value="15" />
+			<entry class="" argb="255,0,0,33" value="16" />
+			<entry class="" argb="255,0,0,35" value="17" />
+			<entry class="" argb="255,0,0,37" value="18" />
+			<entry class="" argb="255,0,0,39" value="19" />
+			<entry class="" argb="255,0,0,41" value="20" />
+			<entry class="" argb="255,0,0,43" value="21" />
+			<entry class="" argb="255,0,0,45" value="22" />
+			<entry class="" argb="255,0,0,47" value="23" />
+			<entry class="" argb="255,0,0,50" value="24" />
+			<entry class="" argb="255,0,0,52" value="25" />
+			<entry class="" argb="255,0,0,54" value="26" />
+			<entry class="" argb="255,0,0,56" value="27" />
+			<entry class="" argb="255,0,0,58" value="28" />
+			<entry class="" argb="255,0,0,60" value="29" />
+			<entry class="" argb="255,0,0,62" value="30" />
+			<entry class="" argb="255,0,0,64" value="31" />
+			<entry class="" argb="255,0,0,66" value="32" />
+			<entry class="" argb="255,0,3,68" value="33" />
+			<entry class="" argb="255,0,6,70" value="34" />
+			<entry class="" argb="255,0,9,72" value="35" />
+			<entry class="" argb="255,0,12,75" value="36" />
+			<entry class="" argb="255,0,15,77" value="37" />
+			<entry class="" argb="255,0,18,79" value="38" />
+			<entry class="" argb="255,0,21,81" value="39" />
+			<entry class="" argb="255,0,25,83" value="40" />
+			<entry class="" argb="255,0,28,85" value="41" />
+			<entry class="" argb="255,0,31,87" value="42" />
+			<entry class="" argb="255,0,34,89" value="43" />
+			<entry class="" argb="255,0,37,91" value="44" />
+			<entry class="" argb="255,0,40,93" value="45" />
+			<entry class="" argb="255,0,43,95" value="46" />
+			<entry class="" argb="255,0,46,97" value="47" />
+			<entry class="" argb="255,0,50,100" value="48" />
+			<entry class="" argb="255,0,53,100" value="49" />
+			<entry class="" argb="255,0,56,100" value="50" />
+			<entry class="" argb="255,0,59,100" value="51" />
+			<entry class="" argb="255,0,62,100" value="52" />
+			<entry class="" argb="255,0,65,100" value="53" />
+			<entry class="" argb="255,0,68,100" value="54" />
+			<entry class="" argb="255,0,71,100" value="55" />
+			<entry class="" argb="255,0,75,100" value="56" />
+			<entry class="" argb="255,0,78,100" value="57" />
+			<entry class="" argb="255,0,81,100" value="58" />
+			<entry class="" argb="255,0,84,100" value="59" />
+			<entry class="" argb="255,0,87,100" value="60" />
+			<entry class="" argb="255,0,90,100" value="61" />
+			<entry class="" argb="255,0,93,100" value="62" />
+			<entry class="" argb="255,0,96,100" value="63" />
+			<entry class="" argb="255,0,100,100" value="64" />
+			<entry class="" argb="255,0,103,100" value="65" />
+			<entry class="" argb="255,0,106,100" value="66" />
+			<entry class="" argb="255,0,109,100" value="67" />
+			<entry class="" argb="255,0,112,100" value="68" />
+			<entry class="" argb="255,0,115,100" value="69" />
+			<entry class="" argb="255,0,118,100" value="70" />
+			<entry class="" argb="255,0,121,100" value="71" />
+			<entry class="" argb="255,0,125,100" value="72" />
+			<entry class="" argb="255,0,128,100" value="73" />
+			<entry class="" argb="255,0,131,100" value="74" />
+			<entry class="" argb="255,0,134,100" value="75" />
+			<entry class="" argb="255,0,137,100" value="76" />
+			<entry class="" argb="255,0,140,100" value="77" />
+			<entry class="" argb="255,0,143,100" value="78" />
+			<entry class="" argb="255,0,146,100" value="79" />
+			<entry class="" argb="255,0,150,100" value="80" />
+			<entry class="" argb="255,0,150,96" value="81" />
+			<entry class="" argb="255,0,150,93" value="82" />
+			<entry class="" argb="255,0,150,90" value="83" />
+			<entry class="" argb="255,0,150,87" value="84" />
+			<entry class="" argb="255,0,150,84" value="85" />
+			<entry class="" argb="255,0,150,81" value="86" />
+			<entry class="" argb="255,0,150,78" value="87" />
+			<entry class="" argb="255,0,150,75" value="88" />
+			<entry class="" argb="255,0,150,71" value="89" />
+			<entry class="" argb="255,0,150,68" value="90" />
+			<entry class="" argb="255,0,150,65" value="91" />
+			<entry class="" argb="255,0,150,62" value="92" />
+			<entry class="" argb="255,0,150,59" value="93" />
+			<entry class="" argb="255,0,150,56" value="94" />
+			<entry class="" argb="255,0,150,53" value="95" />
+			<entry class="" argb="255,0,150,50" value="96" />
+			<entry class="" argb="255,0,149,46" value="97" />
+			<entry class="" argb="255,0,148,43" value="98" />
+			<entry class="" argb="255,0,148,40" value="99" />
+			<entry class="" argb="255,0,147,37" value="100" />
+			<entry class="" argb="255,0,146,34" value="101" />
+			<entry class="" argb="255,0,146,31" value="102" />
+			<entry class="" argb="255,0,145,28" value="103" />
+			<entry class="" argb="255,0,145,25" value="104" />
+			<entry class="" argb="255,0,144,21" value="105" />
+			<entry class="" argb="255,0,143,18" value="106" />
+			<entry class="" argb="255,0,143,15" value="107" />
+			<entry class="" argb="255,0,142,12" value="108" />
+			<entry class="" argb="255,0,141,9" value="109" />
+			<entry class="" argb="255,0,141,6" value="110" />
+			<entry class="" argb="255,0,140,3" value="111" />
+			<entry class="" argb="255,0,140,0" value="112" />
+			<entry class="" argb="255,7,137,0" value="113" />
+			<entry class="" argb="255,15,135,0" value="114" />
+			<entry class="" argb="255,22,132,0" value="115" />
+			<entry class="" argb="255,30,130,0" value="116" />
+			<entry class="" argb="255,37,127,0" value="117" />
+			<entry class="" argb="255,45,125,0" value="118" />
+			<entry class="" argb="255,52,122,0" value="119" />
+			<entry class="" argb="255,60,120,0" value="120" />
+			<entry class="" argb="255,67,117,0" value="121" />
+			<entry class="" argb="255,75,115,0" value="122" />
+			<entry class="" argb="255,82,112,0" value="123" />
+			<entry class="" argb="255,90,110,0" value="124" />
+			<entry class="" argb="255,97,107,0" value="125" />
+			<entry class="" argb="255,105,105,0" value="126" />
+			<entry class="" argb="255,112,102,0" value="127" />
+			<entry class="" argb="255,120,100,0" value="128" />
+			<entry class="" argb="255,125,93,0" value="129" />
+			<entry class="" argb="255,130,87,0" value="130" />
+			<entry class="" argb="255,135,81,0" value="131" />
+			<entry class="" argb="255,140,75,0" value="132" />
+			<entry class="" argb="255,145,68,0" value="133" />
+			<entry class="" argb="255,150,62,0" value="134" />
+			<entry class="" argb="255,155,56,0" value="135" />
+			<entry class="" argb="255,160,50,0" value="136" />
+			<entry class="" argb="255,165,43,0" value="137" />
+			<entry class="" argb="255,170,37,0" value="138" />
+			<entry class="" argb="255,175,31,0" value="139" />
+			<entry class="" argb="255,180,25,0" value="140" />
+			<entry class="" argb="255,185,18,0" value="141" />
+			<entry class="" argb="255,190,12,0" value="142" />
+			<entry class="" argb="255,195,6,0" value="143" />
+			<entry class="" argb="255,200,0,0" value="144" />
+			<entry class="" argb="255,200,2,0" value="145" />
+			<entry class="" argb="255,201,4,0" value="146" />
+			<entry class="" argb="255,201,6,0" value="147" />
+			<entry class="" argb="255,202,9,0" value="148" />
+			<entry class="" argb="255,202,11,0" value="149" />
+			<entry class="" argb="255,203,13,0" value="150" />
+			<entry class="" argb="255,203,16,0" value="151" />
+			<entry class="" argb="255,204,18,0" value="152" />
+			<entry class="" argb="255,204,20,0" value="153" />
+			<entry class="" argb="255,205,23,0" value="154" />
+			<entry class="" argb="255,205,25,0" value="155" />
+			<entry class="" argb="255,206,27,0" value="156" />
+			<entry class="" argb="255,206,29,0" value="157" />
+			<entry class="" argb="255,207,32,0" value="158" />
+			<entry class="" argb="255,207,34,0" value="159" />
+			<entry class="" argb="255,208,36,0" value="160" />
+			<entry class="" argb="255,208,39,0" value="161" />
+			<entry class="" argb="255,209,41,0" value="162" />
+			<entry class="" argb="255,209,43,0" value="163" />
+			<entry class="" argb="255,210,46,0" value="164" />
+			<entry class="" argb="255,210,48,0" value="165" />
+			<entry class="" argb="255,211,50,0" value="166" />
+			<entry class="" argb="255,211,53,0" value="167" />
+			<entry class="" argb="255,212,55,0" value="168" />
+			<entry class="" argb="255,212,57,0" value="169" />
+			<entry class="" argb="255,213,59,0" value="170" />
+			<entry class="" argb="255,213,62,0" value="171" />
+			<entry class="" argb="255,214,64,0" value="172" />
+			<entry class="" argb="255,214,66,0" value="173" />
+			<entry class="" argb="255,215,69,0" value="174" />
+			<entry class="" argb="255,215,71,0" value="175" />
+			<entry class="" argb="255,216,73,0" value="176" />
+			<entry class="" argb="255,216,76,0" value="177" />
+			<entry class="" argb="255,217,78,0" value="178" />
+			<entry class="" argb="255,217,80,0" value="179" />
+			<entry class="" argb="255,218,83,0" value="180" />
+			<entry class="" argb="255,218,85,0" value="181" />
+			<entry class="" argb="255,219,87,0" value="182" />
+			<entry class="" argb="255,219,89,0" value="183" />
+			<entry class="" argb="255,220,92,0" value="184" />
+			<entry class="" argb="255,220,94,0" value="185" />
+			<entry class="" argb="255,221,96,0" value="186" />
+			<entry class="" argb="255,221,99,0" value="187" />
+			<entry class="" argb="255,222,101,0" value="188" />
+			<entry class="" argb="255,222,103,0" value="189" />
+			<entry class="" argb="255,223,106,0" value="190" />
+			<entry class="" argb="255,223,108,0" value="191" />
+			<entry class="" argb="255,224,110,0" value="192" />
+			<entry class="" argb="255,224,113,0" value="193" />
+			<entry class="" argb="255,225,115,0" value="194" />
+			<entry class="" argb="255,225,117,0" value="195" />
+			<entry class="" argb="255,226,119,0" value="196" />
+			<entry class="" argb="255,226,122,0" value="197" />
+			<entry class="" argb="255,227,124,0" value="198" />
+			<entry class="" argb="255,227,126,0" value="199" />
+			<entry class="" argb="255,228,129,0" value="200" />
+			<entry class="" argb="255,228,131,0" value="201" />
+			<entry class="" argb="255,229,133,0" value="202" />
+			<entry class="" argb="255,229,136,0" value="203" />
+			<entry class="" argb="255,230,138,0" value="204" />
+			<entry class="" argb="255,230,140,0" value="205" />
+			<entry class="" argb="255,231,142,0" value="206" />
+			<entry class="" argb="255,231,145,0" value="207" />
+			<entry class="" argb="255,232,147,0" value="208" />
+			<entry class="" argb="255,232,149,0" value="209" />
+			<entry class="" argb="255,233,152,0" value="210" />
+			<entry class="" argb="255,233,154,0" value="211" />
+			<entry class="" argb="255,234,156,0" value="212" />
+			<entry class="" argb="255,234,159,0" value="213" />
+			<entry class="" argb="255,235,161,0" value="214" />
+			<entry class="" argb="255,235,163,0" value="215" />
+			<entry class="" argb="255,236,166,0" value="216" />
+			<entry class="" argb="255,236,168,0" value="217" />
+			<entry class="" argb="255,237,170,0" value="218" />
+			<entry class="" argb="255,237,172,0" value="219" />
+			<entry class="" argb="255,238,175,0" value="220" />
+			<entry class="" argb="255,238,177,0" value="221" />
+			<entry class="" argb="255,239,179,0" value="222" />
+			<entry class="" argb="255,239,182,0" value="223" />
+			<entry class="" argb="255,240,184,0" value="224" />
+			<entry class="" argb="255,240,186,0" value="225" />
+			<entry class="" argb="255,241,189,0" value="226" />
+			<entry class="" argb="255,241,191,0" value="227" />
+			<entry class="" argb="255,242,193,0" value="228" />
+			<entry class="" argb="255,242,196,0" value="229" />
+			<entry class="" argb="255,243,198,0" value="230" />
+			<entry class="" argb="255,243,200,0" value="231" />
+			<entry class="" argb="255,244,202,0" value="232" />
+			<entry class="" argb="255,244,205,0" value="233" />
+			<entry class="" argb="255,245,207,0" value="234" />
+			<entry class="" argb="255,245,209,0" value="235" />
+			<entry class="" argb="255,246,212,0" value="236" />
+			<entry class="" argb="255,246,214,0" value="237" />
+			<entry class="" argb="255,247,216,0" value="238" />
+			<entry class="" argb="255,247,219,0" value="239" />
+			<entry class="" argb="255,248,221,0" value="240" />
+			<entry class="" argb="255,248,223,0" value="241" />
+			<entry class="" argb="255,249,226,0" value="242" />
+			<entry class="" argb="255,249,228,0" value="243" />
+			<entry class="" argb="255,250,230,0" value="244" />
+			<entry class="" argb="255,250,232,0" value="245" />
+			<entry class="" argb="255,251,235,0" value="246" />
+			<entry class="" argb="255,251,237,0" value="247" />
+			<entry class="" argb="255,252,239,0" value="248" />
+			<entry class="" argb="255,252,242,0" value="249" />
+			<entry class="" argb="255,253,244,0" value="250" />
+			<entry class="" argb="255,253,246,0" value="251" />
+			<entry class="" argb="255,254,249,0" value="252" />
+			<entry class="" argb="255,254,251,0" value="253" />
+			<entry class="" argb="255,255,253,0" value="254" />
+			<entry class="" argb="255,255,255,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-pastel-red" interpolate="false">
+		<table>
+			<entry class="" argb="255,33,0,96" value="0" />
+			<entry class="" argb="255,33,0,96" value="1" />
+			<entry class="" argb="255,32,0,97" value="2" />
+			<entry class="" argb="255,31,0,99" value="3" />
+			<entry class="" argb="255,31,0,100" value="4" />
+			<entry class="" argb="255,30,0,101" value="5" />
+			<entry class="" argb="255,29,0,102" value="6" />
+			<entry class="" argb="255,28,0,104" value="7" />
+			<entry class="" argb="255,27,0,105" value="8" />
+			<entry class="" argb="255,26,0,106" value="9" />
+			<entry class="" argb="255,25,0,107" value="10" />
+			<entry class="" argb="255,24,0,108" value="11" />
+			<entry class="" argb="255,23,0,110" value="12" />
+			<entry class="" argb="255,22,0,111" value="13" />
+			<entry class="" argb="255,21,0,112" value="14" />
+			<entry class="" argb="255,20,0,113" value="15" />
+			<entry class="" argb="255,19,0,115" value="16" />
+			<entry class="" argb="255,17,0,116" value="17" />
+			<entry class="" argb="255,16,0,117" value="18" />
+			<entry class="" argb="255,15,0,118" value="19" />
+			<entry class="" argb="255,14,0,119" value="20" />
+			<entry class="" argb="255,12,0,121" value="21" />
+			<entry class="" argb="255,11,0,122" value="22" />
+			<entry class="" argb="255,13,0,123" value="23" />
+			<entry class="" argb="255,8,0,124" value="24" />
+			<entry class="" argb="255,7,0,125" value="25" />
+			<entry class="" argb="255,5,0,127" value="26" />
+			<entry class="" argb="255,4,0,128" value="27" />
+			<entry class="" argb="255,2,0,129" value="28" />
+			<entry class="" argb="255,1,0,130" value="29" />
+			<entry class="" argb="255,0,0,132" value="30" />
+			<entry class="" argb="255,0,1,133" value="31" />
+			<entry class="" argb="255,0,3,134" value="32" />
+			<entry class="" argb="255,0,5,135" value="33" />
+			<entry class="" argb="255,0,6,136" value="34" />
+			<entry class="" argb="255,0,8,138" value="35" />
+			<entry class="" argb="255,0,13,139" value="36" />
+			<entry class="" argb="255,0,12,140" value="37" />
+			<entry class="" argb="255,0,13,141" value="38" />
+			<entry class="" argb="255,0,15,143" value="39" />
+			<entry class="" argb="255,0,17,144" value="40" />
+			<entry class="" argb="255,0,19,145" value="41" />
+			<entry class="" argb="255,0,21,146" value="42" />
+			<entry class="" argb="255,0,23,147" value="43" />
+			<entry class="" argb="255,0,25,149" value="44" />
+			<entry class="" argb="255,0,27,150" value="45" />
+			<entry class="" argb="255,0,29,151" value="46" />
+			<entry class="" argb="255,0,31,152" value="47" />
+			<entry class="" argb="255,0,33,154" value="48" />
+			<entry class="" argb="255,0,35,155" value="49" />
+			<entry class="" argb="255,0,37,156" value="50" />
+			<entry class="" argb="255,0,39,157" value="51" />
+			<entry class="" argb="255,0,42,158" value="52" />
+			<entry class="" argb="255,0,44,160" value="53" />
+			<entry class="" argb="255,0,46,161" value="54" />
+			<entry class="" argb="255,0,49,162" value="55" />
+			<entry class="" argb="255,0,51,163" value="56" />
+			<entry class="" argb="255,0,53,164" value="57" />
+			<entry class="" argb="255,0,56,166" value="58" />
+			<entry class="" argb="255,0,58,167" value="59" />
+			<entry class="" argb="255,0,60,168" value="60" />
+			<entry class="" argb="255,0,63,169" value="61" />
+			<entry class="" argb="255,0,65,171" value="62" />
+			<entry class="" argb="255,0,68,172" value="63" />
+			<entry class="" argb="255,0,71,173" value="64" />
+			<entry class="" argb="255,0,73,174" value="65" />
+			<entry class="" argb="255,0,76,175" value="66" />
+			<entry class="" argb="255,0,78,177" value="67" />
+			<entry class="" argb="255,0,81,178" value="68" />
+			<entry class="" argb="255,0,84,179" value="69" />
+			<entry class="" argb="255,0,87,180" value="70" />
+			<entry class="" argb="255,0,89,182" value="71" />
+			<entry class="" argb="255,0,92,183" value="72" />
+			<entry class="" argb="255,0,95,184" value="73" />
+			<entry class="" argb="255,0,98,185" value="74" />
+			<entry class="" argb="255,0,101,186" value="75" />
+			<entry class="" argb="255,0,104,188" value="76" />
+			<entry class="" argb="255,0,107,189" value="77" />
+			<entry class="" argb="255,0,110,190" value="78" />
+			<entry class="" argb="255,0,113,191" value="79" />
+			<entry class="" argb="255,0,116,193" value="80" />
+			<entry class="" argb="255,0,119,194" value="81" />
+			<entry class="" argb="255,0,122,195" value="82" />
+			<entry class="" argb="255,0,125,196" value="83" />
+			<entry class="" argb="255,0,128,197" value="84" />
+			<entry class="" argb="255,0,131,199" value="85" />
+			<entry class="" argb="255,0,134,200" value="86" />
+			<entry class="" argb="255,0,138,201" value="87" />
+			<entry class="" argb="255,0,141,202" value="88" />
+			<entry class="" argb="255,0,144,203" value="89" />
+			<entry class="" argb="255,0,148,205" value="90" />
+			<entry class="" argb="255,0,151,206" value="91" />
+			<entry class="" argb="255,0,154,207" value="92" />
+			<entry class="" argb="255,0,158,208" value="93" />
+			<entry class="" argb="255,0,161,210" value="94" />
+			<entry class="" argb="255,0,165,211" value="95" />
+			<entry class="" argb="255,0,168,212" value="96" />
+			<entry class="" argb="255,0,172,213" value="97" />
+			<entry class="" argb="255,0,175,214" value="98" />
+			<entry class="" argb="255,0,179,216" value="99" />
+			<entry class="" argb="255,0,182,217" value="100" />
+			<entry class="" argb="255,0,186,218" value="101" />
+			<entry class="" argb="255,0,190,219" value="102" />
+			<entry class="" argb="255,0,193,221" value="103" />
+			<entry class="" argb="255,0,197,222" value="104" />
+			<entry class="" argb="255,0,201,223" value="105" />
+			<entry class="" argb="255,0,205,224" value="106" />
+			<entry class="" argb="255,0,209,225" value="107" />
+			<entry class="" argb="255,0,212,227" value="108" />
+			<entry class="" argb="255,0,216,228" value="109" />
+			<entry class="" argb="255,0,220,229" value="110" />
+			<entry class="" argb="255,0,224,230" value="111" />
+			<entry class="" argb="255,0,228,232" value="112" />
+			<entry class="" argb="255,0,232,233" value="113" />
+			<entry class="" argb="255,0,234,232" value="114" />
+			<entry class="" argb="255,0,235,230" value="115" />
+			<entry class="" argb="255,0,236,229" value="116" />
+			<entry class="" argb="255,0,238,227" value="117" />
+			<entry class="" argb="255,0,239,225" value="118" />
+			<entry class="" argb="255,0,240,223" value="119" />
+			<entry class="" argb="255,0,241,222" value="120" />
+			<entry class="" argb="255,0,243,220" value="121" />
+			<entry class="" argb="255,0,244,218" value="122" />
+			<entry class="" argb="255,0,245,216" value="123" />
+			<entry class="" argb="255,0,246,214" value="124" />
+			<entry class="" argb="255,0,247,212" value="125" />
+			<entry class="" argb="255,0,249,210" value="126" />
+			<entry class="" argb="255,0,249,208" value="127" />
+			<entry class="" argb="255,0,246,149" value="128" />
+			<entry class="" argb="255,0,244,142" value="129" />
+			<entry class="" argb="255,0,241,135" value="130" />
+			<entry class="" argb="255,0,237,127" value="131" />
+			<entry class="" argb="255,2,232,118" value="132" />
+			<entry class="" argb="255,4,227,111" value="133" />
+			<entry class="" argb="255,5,223,103" value="134" />
+			<entry class="" argb="255,7,218,95" value="135" />
+			<entry class="" argb="255,8,214,88" value="136" />
+			<entry class="" argb="255,13,209,81" value="137" />
+			<entry class="" argb="255,11,205,74" value="138" />
+			<entry class="" argb="255,13,201,67" value="139" />
+			<entry class="" argb="255,14,196,60" value="140" />
+			<entry class="" argb="255,15,192,53" value="141" />
+			<entry class="" argb="255,17,188,47" value="142" />
+			<entry class="" argb="255,18,184,40" value="143" />
+			<entry class="" argb="255,19,180,34" value="144" />
+			<entry class="" argb="255,20,175,28" value="145" />
+			<entry class="" argb="255,21,171,22" value="146" />
+			<entry class="" argb="255,29,167,22" value="147" />
+			<entry class="" argb="255,36,163,23" value="148" />
+			<entry class="" argb="255,42,160,24" value="149" />
+			<entry class="" argb="255,48,156,25" value="150" />
+			<entry class="" argb="255,53,152,26" value="151" />
+			<entry class="" argb="255,58,148,27" value="152" />
+			<entry class="" argb="255,61,144,28" value="153" />
+			<entry class="" argb="255,65,141,28" value="154" />
+			<entry class="" argb="255,68,137,29" value="155" />
+			<entry class="" argb="255,70,133,30" value="156" />
+			<entry class="" argb="255,72,130,30" value="157" />
+			<entry class="" argb="255,73,126,31" value="158" />
+			<entry class="" argb="255,74,123,31" value="159" />
+			<entry class="" argb="255,74,119,32" value="160" />
+			<entry class="" argb="255,74,116,32" value="161" />
+			<entry class="" argb="255,75,116,29" value="162" />
+			<entry class="" argb="255,75,115,28" value="163" />
+			<entry class="" argb="255,76,113,26" value="164" />
+			<entry class="" argb="255,76,112,25" value="165" />
+			<entry class="" argb="255,76,110,23" value="166" />
+			<entry class="" argb="255,77,109,22" value="167" />
+			<entry class="" argb="255,76,104,20" value="168" />
+			<entry class="" argb="255,77,104,18" value="169" />
+			<entry class="" argb="255,78,103,17" value="170" />
+			<entry class="" argb="255,79,102,16" value="171" />
+			<entry class="" argb="255,80,101,15" value="172" />
+			<entry class="" argb="255,81,100,14" value="173" />
+			<entry class="" argb="255,83,99,13" value="174" />
+			<entry class="" argb="255,84,98,12" value="175" />
+			<entry class="" argb="255,85,97,11" value="176" />
+			<entry class="" argb="255,86,96,13" value="177" />
+			<entry class="" argb="255,88,95,9" value="178" />
+			<entry class="" argb="255,89,94,8" value="179" />
+			<entry class="" argb="255,91,93,7" value="180" />
+			<entry class="" argb="255,92,92,6" value="181" />
+			<entry class="" argb="255,91,88,5" value="182" />
+			<entry class="" argb="255,94,88,5" value="183" />
+			<entry class="" argb="255,96,88,4" value="184" />
+			<entry class="" argb="255,98,87,3" value="185" />
+			<entry class="" argb="255,100,86,3" value="186" />
+			<entry class="" argb="255,102,85,2" value="187" />
+			<entry class="" argb="255,104,85,1" value="188" />
+			<entry class="" argb="255,106,84,0" value="189" />
+			<entry class="" argb="255,108,83,0" value="190" />
+			<entry class="" argb="255,109,82,0" value="191" />
+			<entry class="" argb="255,111,80,0" value="192" />
+			<entry class="" argb="255,112,79,0" value="193" />
+			<entry class="" argb="255,113,78,0" value="194" />
+			<entry class="" argb="255,115,76,0" value="195" />
+			<entry class="" argb="255,116,75,0" value="196" />
+			<entry class="" argb="255,117,74,0" value="197" />
+			<entry class="" argb="255,119,73,0" value="198" />
+			<entry class="" argb="255,120,71,0" value="199" />
+			<entry class="" argb="255,121,70,0" value="200" />
+			<entry class="" argb="255,123,69,0" value="201" />
+			<entry class="" argb="255,124,68,0" value="202" />
+			<entry class="" argb="255,125,67,0" value="203" />
+			<entry class="" argb="255,127,66,0" value="204" />
+			<entry class="" argb="255,128,64,0" value="205" />
+			<entry class="" argb="255,129,63,0" value="206" />
+			<entry class="" argb="255,131,61,0" value="207" />
+			<entry class="" argb="255,132,58,0" value="208" />
+			<entry class="" argb="255,133,56,0" value="209" />
+			<entry class="" argb="255,135,54,0" value="210" />
+			<entry class="" argb="255,136,52,0" value="211" />
+			<entry class="" argb="255,137,49,0" value="212" />
+			<entry class="" argb="255,138,47,0" value="213" />
+			<entry class="" argb="255,140,45,0" value="214" />
+			<entry class="" argb="255,141,43,0" value="215" />
+			<entry class="" argb="255,142,41,0" value="216" />
+			<entry class="" argb="255,144,40,0" value="217" />
+			<entry class="" argb="255,145,38,0" value="218" />
+			<entry class="" argb="255,146,36,0" value="219" />
+			<entry class="" argb="255,148,34,0" value="220" />
+			<entry class="" argb="255,149,33,0" value="221" />
+			<entry class="" argb="255,150,31,0" value="222" />
+			<entry class="" argb="255,152,29,0" value="223" />
+			<entry class="" argb="255,153,28,0" value="224" />
+			<entry class="" argb="255,154,26,0" value="225" />
+			<entry class="" argb="255,156,25,0" value="226" />
+			<entry class="" argb="255,157,23,0" value="227" />
+			<entry class="" argb="255,158,22,0" value="228" />
+			<entry class="" argb="255,160,21,0" value="229" />
+			<entry class="" argb="255,161,19,0" value="230" />
+			<entry class="" argb="255,162,18,0" value="231" />
+			<entry class="" argb="255,164,17,0" value="232" />
+			<entry class="" argb="255,165,16,0" value="233" />
+			<entry class="" argb="255,166,14,0" value="234" />
+			<entry class="" argb="255,168,13,0" value="235" />
+			<entry class="" argb="255,169,12,0" value="236" />
+			<entry class="" argb="255,170,11,0" value="237" />
+			<entry class="" argb="255,172,13,0" value="238" />
+			<entry class="" argb="255,173,9,0" value="239" />
+			<entry class="" argb="255,174,8,0" value="240" />
+			<entry class="" argb="255,175,7,0" value="241" />
+			<entry class="" argb="255,177,7,0" value="242" />
+			<entry class="" argb="255,178,6,0" value="243" />
+			<entry class="" argb="255,179,5,0" value="244" />
+			<entry class="" argb="255,181,4,0" value="245" />
+			<entry class="" argb="255,182,4,0" value="246" />
+			<entry class="" argb="255,183,3,0" value="247" />
+			<entry class="" argb="255,185,2,0" value="248" />
+			<entry class="" argb="255,186,2,0" value="249" />
+			<entry class="" argb="255,187,1,0" value="250" />
+			<entry class="" argb="255,189,1,0" value="251" />
+			<entry class="" argb="255,190,0,0" value="252" />
+			<entry class="" argb="255,191,0,0" value="253" />
+			<entry class="" argb="255,193,0,0" value="254" />
+			<entry class="" argb="255,193,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-red" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,1,1" value="1" />
+			<entry class="" argb="255,0,2,2" value="2" />
+			<entry class="" argb="255,0,3,3" value="3" />
+			<entry class="" argb="255,0,4,4" value="4" />
+			<entry class="" argb="255,0,8,8" value="5" />
+			<entry class="" argb="255,0,12,12" value="6" />
+			<entry class="" argb="255,0,16,16" value="7" />
+			<entry class="" argb="255,0,21,21" value="8" />
+			<entry class="" argb="255,0,25,25" value="9" />
+			<entry class="" argb="255,0,29,29" value="10" />
+			<entry class="" argb="255,0,33,33" value="11" />
+			<entry class="" argb="255,0,38,38" value="12" />
+			<entry class="" argb="255,0,42,42" value="13" />
+			<entry class="" argb="255,0,46,46" value="14" />
+			<entry class="" argb="255,0,50,50" value="15" />
+			<entry class="" argb="255,0,55,55" value="16" />
+			<entry class="" argb="255,0,59,59" value="17" />
+			<entry class="" argb="255,0,63,63" value="18" />
+			<entry class="" argb="255,0,67,67" value="19" />
+			<entry class="" argb="255,0,72,72" value="20" />
+			<entry class="" argb="255,0,76,76" value="21" />
+			<entry class="" argb="255,0,80,80" value="22" />
+			<entry class="" argb="255,0,84,84" value="23" />
+			<entry class="" argb="255,0,89,89" value="24" />
+			<entry class="" argb="255,0,93,93" value="25" />
+			<entry class="" argb="255,0,97,97" value="26" />
+			<entry class="" argb="255,0,101,101" value="27" />
+			<entry class="" argb="255,0,106,106" value="28" />
+			<entry class="" argb="255,0,110,110" value="29" />
+			<entry class="" argb="255,0,114,114" value="30" />
+			<entry class="" argb="255,0,118,118" value="31" />
+			<entry class="" argb="255,0,123,123" value="32" />
+			<entry class="" argb="255,0,127,127" value="33" />
+			<entry class="" argb="255,0,131,131" value="34" />
+			<entry class="" argb="255,0,135,135" value="35" />
+			<entry class="" argb="255,0,140,140" value="36" />
+			<entry class="" argb="255,0,144,144" value="37" />
+			<entry class="" argb="255,0,148,148" value="38" />
+			<entry class="" argb="255,0,152,152" value="39" />
+			<entry class="" argb="255,0,157,157" value="40" />
+			<entry class="" argb="255,0,161,161" value="41" />
+			<entry class="" argb="255,0,165,165" value="42" />
+			<entry class="" argb="255,0,169,169" value="43" />
+			<entry class="" argb="255,0,174,174" value="44" />
+			<entry class="" argb="255,0,178,178" value="45" />
+			<entry class="" argb="255,0,182,182" value="46" />
+			<entry class="" argb="255,0,186,186" value="47" />
+			<entry class="" argb="255,0,191,191" value="48" />
+			<entry class="" argb="255,0,195,195" value="49" />
+			<entry class="" argb="255,0,199,199" value="50" />
+			<entry class="" argb="255,0,203,203" value="51" />
+			<entry class="" argb="255,0,208,208" value="52" />
+			<entry class="" argb="255,0,212,212" value="53" />
+			<entry class="" argb="255,0,216,216" value="54" />
+			<entry class="" argb="255,0,220,220" value="55" />
+			<entry class="" argb="255,0,225,225" value="56" />
+			<entry class="" argb="255,0,229,229" value="57" />
+			<entry class="" argb="255,0,233,233" value="58" />
+			<entry class="" argb="255,0,237,237" value="59" />
+			<entry class="" argb="255,0,242,242" value="60" />
+			<entry class="" argb="255,0,246,246" value="61" />
+			<entry class="" argb="255,0,250,250" value="62" />
+			<entry class="" argb="255,0,255,255" value="63" />
+			<entry class="" argb="255,0,255,255" value="64" />
+			<entry class="" argb="255,0,251,255" value="65" />
+			<entry class="" argb="255,0,247,255" value="66" />
+			<entry class="" argb="255,0,243,255" value="67" />
+			<entry class="" argb="255,0,239,255" value="68" />
+			<entry class="" argb="255,0,235,255" value="69" />
+			<entry class="" argb="255,0,231,255" value="70" />
+			<entry class="" argb="255,0,227,255" value="71" />
+			<entry class="" argb="255,0,223,255" value="72" />
+			<entry class="" argb="255,0,219,255" value="73" />
+			<entry class="" argb="255,0,215,255" value="74" />
+			<entry class="" argb="255,0,211,255" value="75" />
+			<entry class="" argb="255,0,207,255" value="76" />
+			<entry class="" argb="255,0,203,255" value="77" />
+			<entry class="" argb="255,0,199,255" value="78" />
+			<entry class="" argb="255,0,195,255" value="79" />
+			<entry class="" argb="255,0,191,255" value="80" />
+			<entry class="" argb="255,0,187,255" value="81" />
+			<entry class="" argb="255,0,183,255" value="82" />
+			<entry class="" argb="255,0,179,255" value="83" />
+			<entry class="" argb="255,0,175,255" value="84" />
+			<entry class="" argb="255,0,170,255" value="85" />
+			<entry class="" argb="255,0,166,255" value="86" />
+			<entry class="" argb="255,0,162,255" value="87" />
+			<entry class="" argb="255,0,158,255" value="88" />
+			<entry class="" argb="255,0,154,255" value="89" />
+			<entry class="" argb="255,0,150,255" value="90" />
+			<entry class="" argb="255,0,146,255" value="91" />
+			<entry class="" argb="255,0,142,255" value="92" />
+			<entry class="" argb="255,0,138,255" value="93" />
+			<entry class="" argb="255,0,134,255" value="94" />
+			<entry class="" argb="255,0,130,255" value="95" />
+			<entry class="" argb="255,0,126,255" value="96" />
+			<entry class="" argb="255,0,122,255" value="97" />
+			<entry class="" argb="255,0,118,255" value="98" />
+			<entry class="" argb="255,0,114,255" value="99" />
+			<entry class="" argb="255,0,110,255" value="100" />
+			<entry class="" argb="255,0,106,255" value="101" />
+			<entry class="" argb="255,0,102,255" value="102" />
+			<entry class="" argb="255,0,98,255" value="103" />
+			<entry class="" argb="255,0,94,255" value="104" />
+			<entry class="" argb="255,0,90,255" value="105" />
+			<entry class="" argb="255,0,85,255" value="106" />
+			<entry class="" argb="255,0,81,255" value="107" />
+			<entry class="" argb="255,0,77,255" value="108" />
+			<entry class="" argb="255,0,73,255" value="109" />
+			<entry class="" argb="255,0,69,255" value="110" />
+			<entry class="" argb="255,0,65,255" value="111" />
+			<entry class="" argb="255,0,61,255" value="112" />
+			<entry class="" argb="255,0,57,255" value="113" />
+			<entry class="" argb="255,0,53,255" value="114" />
+			<entry class="" argb="255,0,49,255" value="115" />
+			<entry class="" argb="255,0,45,255" value="116" />
+			<entry class="" argb="255,0,41,255" value="117" />
+			<entry class="" argb="255,0,37,255" value="118" />
+			<entry class="" argb="255,0,33,255" value="119" />
+			<entry class="" argb="255,0,29,255" value="120" />
+			<entry class="" argb="255,0,25,255" value="121" />
+			<entry class="" argb="255,0,21,255" value="122" />
+			<entry class="" argb="255,0,17,255" value="123" />
+			<entry class="" argb="255,0,13,255" value="124" />
+			<entry class="" argb="255,0,9,255" value="125" />
+			<entry class="" argb="255,0,5,255" value="126" />
+			<entry class="" argb="255,0,0,255" value="127" />
+			<entry class="" argb="255,0,0,255" value="128" />
+			<entry class="" argb="255,4,0,255" value="129" />
+			<entry class="" argb="255,8,0,255" value="130" />
+			<entry class="" argb="255,12,0,255" value="131" />
+			<entry class="" argb="255,16,0,255" value="132" />
+			<entry class="" argb="255,20,0,255" value="133" />
+			<entry class="" argb="255,24,0,255" value="134" />
+			<entry class="" argb="255,28,0,255" value="135" />
+			<entry class="" argb="255,32,0,255" value="136" />
+			<entry class="" argb="255,36,0,255" value="137" />
+			<entry class="" argb="255,40,0,255" value="138" />
+			<entry class="" argb="255,44,0,255" value="139" />
+			<entry class="" argb="255,48,0,255" value="140" />
+			<entry class="" argb="255,52,0,255" value="141" />
+			<entry class="" argb="255,56,0,255" value="142" />
+			<entry class="" argb="255,60,0,255" value="143" />
+			<entry class="" argb="255,64,0,255" value="144" />
+			<entry class="" argb="255,68,0,255" value="145" />
+			<entry class="" argb="255,72,0,255" value="146" />
+			<entry class="" argb="255,76,0,255" value="147" />
+			<entry class="" argb="255,80,0,255" value="148" />
+			<entry class="" argb="255,85,0,255" value="149" />
+			<entry class="" argb="255,89,0,255" value="150" />
+			<entry class="" argb="255,93,0,255" value="151" />
+			<entry class="" argb="255,97,0,255" value="152" />
+			<entry class="" argb="255,101,0,255" value="153" />
+			<entry class="" argb="255,105,0,255" value="154" />
+			<entry class="" argb="255,109,0,255" value="155" />
+			<entry class="" argb="255,113,0,255" value="156" />
+			<entry class="" argb="255,117,0,255" value="157" />
+			<entry class="" argb="255,121,0,255" value="158" />
+			<entry class="" argb="255,125,0,255" value="159" />
+			<entry class="" argb="255,129,0,255" value="160" />
+			<entry class="" argb="255,133,0,255" value="161" />
+			<entry class="" argb="255,137,0,255" value="162" />
+			<entry class="" argb="255,141,0,255" value="163" />
+			<entry class="" argb="255,145,0,255" value="164" />
+			<entry class="" argb="255,149,0,255" value="165" />
+			<entry class="" argb="255,153,0,255" value="166" />
+			<entry class="" argb="255,157,0,255" value="167" />
+			<entry class="" argb="255,161,0,255" value="168" />
+			<entry class="" argb="255,165,0,255" value="169" />
+			<entry class="" argb="255,170,0,255" value="170" />
+			<entry class="" argb="255,174,0,255" value="171" />
+			<entry class="" argb="255,178,0,255" value="172" />
+			<entry class="" argb="255,182,0,255" value="173" />
+			<entry class="" argb="255,186,0,255" value="174" />
+			<entry class="" argb="255,190,0,255" value="175" />
+			<entry class="" argb="255,194,0,255" value="176" />
+			<entry class="" argb="255,198,0,255" value="177" />
+			<entry class="" argb="255,202,0,255" value="178" />
+			<entry class="" argb="255,206,0,255" value="179" />
+			<entry class="" argb="255,210,0,255" value="180" />
+			<entry class="" argb="255,214,0,255" value="181" />
+			<entry class="" argb="255,218,0,255" value="182" />
+			<entry class="" argb="255,222,0,255" value="183" />
+			<entry class="" argb="255,226,0,255" value="184" />
+			<entry class="" argb="255,230,0,255" value="185" />
+			<entry class="" argb="255,234,0,255" value="186" />
+			<entry class="" argb="255,238,0,255" value="187" />
+			<entry class="" argb="255,242,0,255" value="188" />
+			<entry class="" argb="255,246,0,255" value="189" />
+			<entry class="" argb="255,250,0,255" value="190" />
+			<entry class="" argb="255,255,0,255" value="191" />
+			<entry class="" argb="255,255,0,255" value="192" />
+			<entry class="" argb="255,255,0,251" value="193" />
+			<entry class="" argb="255,255,0,247" value="194" />
+			<entry class="" argb="255,255,0,243" value="195" />
+			<entry class="" argb="255,255,0,239" value="196" />
+			<entry class="" argb="255,255,0,235" value="197" />
+			<entry class="" argb="255,255,0,231" value="198" />
+			<entry class="" argb="255,255,0,227" value="199" />
+			<entry class="" argb="255,255,0,223" value="200" />
+			<entry class="" argb="255,255,0,218" value="201" />
+			<entry class="" argb="255,255,0,214" value="202" />
+			<entry class="" argb="255,255,0,210" value="203" />
+			<entry class="" argb="255,255,0,206" value="204" />
+			<entry class="" argb="255,255,0,202" value="205" />
+			<entry class="" argb="255,255,0,198" value="206" />
+			<entry class="" argb="255,255,0,194" value="207" />
+			<entry class="" argb="255,255,0,190" value="208" />
+			<entry class="" argb="255,255,0,186" value="209" />
+			<entry class="" argb="255,255,0,181" value="210" />
+			<entry class="" argb="255,255,0,177" value="211" />
+			<entry class="" argb="255,255,0,173" value="212" />
+			<entry class="" argb="255,255,0,169" value="213" />
+			<entry class="" argb="255,255,0,165" value="214" />
+			<entry class="" argb="255,255,0,161" value="215" />
+			<entry class="" argb="255,255,0,157" value="216" />
+			<entry class="" argb="255,255,0,153" value="217" />
+			<entry class="" argb="255,255,0,149" value="218" />
+			<entry class="" argb="255,255,0,144" value="219" />
+			<entry class="" argb="255,255,0,140" value="220" />
+			<entry class="" argb="255,255,0,136" value="221" />
+			<entry class="" argb="255,255,0,132" value="222" />
+			<entry class="" argb="255,255,0,128" value="223" />
+			<entry class="" argb="255,255,0,124" value="224" />
+			<entry class="" argb="255,255,0,120" value="225" />
+			<entry class="" argb="255,255,0,116" value="226" />
+			<entry class="" argb="255,255,0,112" value="227" />
+			<entry class="" argb="255,255,0,107" value="228" />
+			<entry class="" argb="255,255,0,103" value="229" />
+			<entry class="" argb="255,255,0,99" value="230" />
+			<entry class="" argb="255,255,0,95" value="231" />
+			<entry class="" argb="255,255,0,91" value="232" />
+			<entry class="" argb="255,255,0,87" value="233" />
+			<entry class="" argb="255,255,0,83" value="234" />
+			<entry class="" argb="255,255,0,79" value="235" />
+			<entry class="" argb="255,255,0,75" value="236" />
+			<entry class="" argb="255,255,0,70" value="237" />
+			<entry class="" argb="255,255,0,66" value="238" />
+			<entry class="" argb="255,255,0,62" value="239" />
+			<entry class="" argb="255,255,0,58" value="240" />
+			<entry class="" argb="255,255,0,54" value="241" />
+			<entry class="" argb="255,255,0,50" value="242" />
+			<entry class="" argb="255,255,0,46" value="243" />
+			<entry class="" argb="255,255,0,42" value="244" />
+			<entry class="" argb="255,255,0,38" value="245" />
+			<entry class="" argb="255,255,0,33" value="246" />
+			<entry class="" argb="255,255,0,29" value="247" />
+			<entry class="" argb="255,255,0,25" value="248" />
+			<entry class="" argb="255,255,0,21" value="249" />
+			<entry class="" argb="255,255,0,17" value="250" />
+			<entry class="" argb="255,255,0,13" value="251" />
+			<entry class="" argb="255,255,0,9" value="252" />
+			<entry class="" argb="255,255,0,5" value="253" />
+			<entry class="" argb="255,255,0,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-waves" interpolate="false">
+		<table>
+			<entry class="" argb="255,82,0,214" value="0" />
+			<entry class="" argb="255,82,0,214" value="1" />
+			<entry class="" argb="255,77,1,202" value="2" />
+			<entry class="" argb="255,73,1,189" value="3" />
+			<entry class="" argb="255,68,2,177" value="4" />
+			<entry class="" argb="255,63,2,165" value="5" />
+			<entry class="" argb="255,59,3,153" value="6" />
+			<entry class="" argb="255,54,4,141" value="7" />
+			<entry class="" argb="255,50,4,129" value="8" />
+			<entry class="" argb="255,46,5,118" value="9" />
+			<entry class="" argb="255,42,6,107" value="10" />
+			<entry class="" argb="255,38,6,96" value="11" />
+			<entry class="" argb="255,34,7,85" value="12" />
+			<entry class="" argb="255,30,8,75" value="13" />
+			<entry class="" argb="255,26,9,65" value="14" />
+			<entry class="" argb="255,23,13,56" value="15" />
+			<entry class="" argb="255,19,11,47" value="16" />
+			<entry class="" argb="255,16,12,38" value="17" />
+			<entry class="" argb="255,13,13,30" value="18" />
+			<entry class="" argb="255,13,15,22" value="19" />
+			<entry class="" argb="255,8,16,15" value="20" />
+			<entry class="" argb="255,5,17,9" value="21" />
+			<entry class="" argb="255,3,19,2" value="22" />
+			<entry class="" argb="255,1,20,2" value="23" />
+			<entry class="" argb="255,0,22,7" value="24" />
+			<entry class="" argb="255,2,23,12" value="25" />
+			<entry class="" argb="255,3,25,16" value="26" />
+			<entry class="" argb="255,5,27,19" value="27" />
+			<entry class="" argb="255,6,28,22" value="28" />
+			<entry class="" argb="255,6,30,24" value="29" />
+			<entry class="" argb="255,7,32,25" value="30" />
+			<entry class="" argb="255,7,34,26" value="31" />
+			<entry class="" argb="255,8,35,27" value="32" />
+			<entry class="" argb="255,7,37,26" value="33" />
+			<entry class="" argb="255,7,39,25" value="34" />
+			<entry class="" argb="255,6,41,24" value="35" />
+			<entry class="" argb="255,6,43,22" value="36" />
+			<entry class="" argb="255,5,45,19" value="37" />
+			<entry class="" argb="255,3,46,16" value="38" />
+			<entry class="" argb="255,2,48,12" value="39" />
+			<entry class="" argb="255,0,50,7" value="40" />
+			<entry class="" argb="255,1,51,2" value="41" />
+			<entry class="" argb="255,3,53,2" value="42" />
+			<entry class="" argb="255,5,55,9" value="43" />
+			<entry class="" argb="255,8,56,15" value="44" />
+			<entry class="" argb="255,13,58,22" value="45" />
+			<entry class="" argb="255,13,59,30" value="46" />
+			<entry class="" argb="255,16,60,38" value="47" />
+			<entry class="" argb="255,19,61,47" value="48" />
+			<entry class="" argb="255,23,62,56" value="49" />
+			<entry class="" argb="255,26,63,65" value="50" />
+			<entry class="" argb="255,30,64,75" value="51" />
+			<entry class="" argb="255,34,65,85" value="52" />
+			<entry class="" argb="255,38,66,96" value="53" />
+			<entry class="" argb="255,42,66,107" value="54" />
+			<entry class="" argb="255,46,67,118" value="55" />
+			<entry class="" argb="255,50,67,129" value="56" />
+			<entry class="" argb="255,54,67,141" value="57" />
+			<entry class="" argb="255,59,67,153" value="58" />
+			<entry class="" argb="255,63,67,165" value="59" />
+			<entry class="" argb="255,68,67,177" value="60" />
+			<entry class="" argb="255,73,67,189" value="61" />
+			<entry class="" argb="255,77,67,202" value="62" />
+			<entry class="" argb="255,82,66,214" value="63" />
+			<entry class="" argb="255,87,66,227" value="64" />
+			<entry class="" argb="255,91,65,239" value="65" />
+			<entry class="" argb="255,96,64,251" value="66" />
+			<entry class="" argb="255,100,64,246" value="67" />
+			<entry class="" argb="255,105,63,234" value="68" />
+			<entry class="" argb="255,110,62,222" value="69" />
+			<entry class="" argb="255,114,61,210" value="70" />
+			<entry class="" argb="255,119,60,198" value="71" />
+			<entry class="" argb="255,123,59,186" value="72" />
+			<entry class="" argb="255,127,57,175" value="73" />
+			<entry class="" argb="255,131,56,164" value="74" />
+			<entry class="" argb="255,135,55,153" value="75" />
+			<entry class="" argb="255,139,54,142" value="76" />
+			<entry class="" argb="255,143,53,132" value="77" />
+			<entry class="" argb="255,147,52,122" value="78" />
+			<entry class="" argb="255,150,51,113" value="79" />
+			<entry class="" argb="255,154,49,104" value="80" />
+			<entry class="" argb="255,157,48,95" value="81" />
+			<entry class="" argb="255,160,47,87" value="82" />
+			<entry class="" argb="255,163,47,79" value="83" />
+			<entry class="" argb="255,165,46,72" value="84" />
+			<entry class="" argb="255,168,45,66" value="85" />
+			<entry class="" argb="255,170,44,59" value="86" />
+			<entry class="" argb="255,172,44,54" value="87" />
+			<entry class="" argb="255,174,44,49" value="88" />
+			<entry class="" argb="255,176,43,44" value="89" />
+			<entry class="" argb="255,177,43,40" value="90" />
+			<entry class="" argb="255,179,43,37" value="91" />
+			<entry class="" argb="255,180,43,34" value="92" />
+			<entry class="" argb="255,180,44,32" value="93" />
+			<entry class="" argb="255,181,44,31" value="94" />
+			<entry class="" argb="255,181,45,30" value="95" />
+			<entry class="" argb="255,182,46,29" value="96" />
+			<entry class="" argb="255,181,47,30" value="97" />
+			<entry class="" argb="255,181,48,31" value="98" />
+			<entry class="" argb="255,180,50,32" value="99" />
+			<entry class="" argb="255,180,51,34" value="100" />
+			<entry class="" argb="255,179,53,37" value="101" />
+			<entry class="" argb="255,177,55,40" value="102" />
+			<entry class="" argb="255,176,57,44" value="103" />
+			<entry class="" argb="255,174,60,49" value="104" />
+			<entry class="" argb="255,172,62,54" value="105" />
+			<entry class="" argb="255,170,65,59" value="106" />
+			<entry class="" argb="255,168,68,66" value="107" />
+			<entry class="" argb="255,165,71,72" value="108" />
+			<entry class="" argb="255,163,74,79" value="109" />
+			<entry class="" argb="255,160,78,87" value="110" />
+			<entry class="" argb="255,157,81,95" value="111" />
+			<entry class="" argb="255,154,85,104" value="112" />
+			<entry class="" argb="255,150,88,113" value="113" />
+			<entry class="" argb="255,147,92,122" value="114" />
+			<entry class="" argb="255,143,96,132" value="115" />
+			<entry class="" argb="255,139,100,142" value="116" />
+			<entry class="" argb="255,135,104,153" value="117" />
+			<entry class="" argb="255,131,108,164" value="118" />
+			<entry class="" argb="255,127,112,175" value="119" />
+			<entry class="" argb="255,123,116,186" value="120" />
+			<entry class="" argb="255,119,120,198" value="121" />
+			<entry class="" argb="255,114,124,210" value="122" />
+			<entry class="" argb="255,110,128,222" value="123" />
+			<entry class="" argb="255,105,132,234" value="124" />
+			<entry class="" argb="255,100,136,246" value="125" />
+			<entry class="" argb="255,96,140,251" value="126" />
+			<entry class="" argb="255,91,144,239" value="127" />
+			<entry class="" argb="255,86,148,226" value="128" />
+			<entry class="" argb="255,82,151,214" value="129" />
+			<entry class="" argb="255,77,154,202" value="130" />
+			<entry class="" argb="255,73,158,189" value="131" />
+			<entry class="" argb="255,68,161,177" value="132" />
+			<entry class="" argb="255,63,164,165" value="133" />
+			<entry class="" argb="255,59,166,153" value="134" />
+			<entry class="" argb="255,54,169,141" value="135" />
+			<entry class="" argb="255,50,171,129" value="136" />
+			<entry class="" argb="255,46,173,118" value="137" />
+			<entry class="" argb="255,42,175,107" value="138" />
+			<entry class="" argb="255,38,176,96" value="139" />
+			<entry class="" argb="255,34,178,85" value="140" />
+			<entry class="" argb="255,30,179,75" value="141" />
+			<entry class="" argb="255,26,180,65" value="142" />
+			<entry class="" argb="255,23,180,56" value="143" />
+			<entry class="" argb="255,19,180,47" value="144" />
+			<entry class="" argb="255,16,180,38" value="145" />
+			<entry class="" argb="255,13,180,30" value="146" />
+			<entry class="" argb="255,13,179,22" value="147" />
+			<entry class="" argb="255,8,179,15" value="148" />
+			<entry class="" argb="255,5,178,9" value="149" />
+			<entry class="" argb="255,3,176,2" value="150" />
+			<entry class="" argb="255,1,175,2" value="151" />
+			<entry class="" argb="255,0,173,7" value="152" />
+			<entry class="" argb="255,2,171,12" value="153" />
+			<entry class="" argb="255,3,169,16" value="154" />
+			<entry class="" argb="255,5,166,19" value="155" />
+			<entry class="" argb="255,6,164,22" value="156" />
+			<entry class="" argb="255,6,161,24" value="157" />
+			<entry class="" argb="255,7,158,25" value="158" />
+			<entry class="" argb="255,7,155,26" value="159" />
+			<entry class="" argb="255,8,152,27" value="160" />
+			<entry class="" argb="255,7,148,26" value="161" />
+			<entry class="" argb="255,7,145,25" value="162" />
+			<entry class="" argb="255,6,141,24" value="163" />
+			<entry class="" argb="255,6,138,22" value="164" />
+			<entry class="" argb="255,5,134,19" value="165" />
+			<entry class="" argb="255,3,131,16" value="166" />
+			<entry class="" argb="255,2,127,12" value="167" />
+			<entry class="" argb="255,0,124,7" value="168" />
+			<entry class="" argb="255,1,120,2" value="169" />
+			<entry class="" argb="255,3,117,2" value="170" />
+			<entry class="" argb="255,5,113,9" value="171" />
+			<entry class="" argb="255,8,110,15" value="172" />
+			<entry class="" argb="255,13,107,22" value="173" />
+			<entry class="" argb="255,13,104,30" value="174" />
+			<entry class="" argb="255,16,101,38" value="175" />
+			<entry class="" argb="255,19,99,47" value="176" />
+			<entry class="" argb="255,23,97,56" value="177" />
+			<entry class="" argb="255,26,95,65" value="178" />
+			<entry class="" argb="255,30,93,75" value="179" />
+			<entry class="" argb="255,34,91,85" value="180" />
+			<entry class="" argb="255,38,90,96" value="181" />
+			<entry class="" argb="255,42,89,107" value="182" />
+			<entry class="" argb="255,46,88,118" value="183" />
+			<entry class="" argb="255,50,88,129" value="184" />
+			<entry class="" argb="255,54,88,141" value="185" />
+			<entry class="" argb="255,59,88,153" value="186" />
+			<entry class="" argb="255,63,88,165" value="187" />
+			<entry class="" argb="255,68,89,177" value="188" />
+			<entry class="" argb="255,73,91,189" value="189" />
+			<entry class="" argb="255,77,92,202" value="190" />
+			<entry class="" argb="255,82,94,214" value="191" />
+			<entry class="" argb="255,87,96,227" value="192" />
+			<entry class="" argb="255,91,99,239" value="193" />
+			<entry class="" argb="255,96,102,251" value="194" />
+			<entry class="" argb="255,100,105,246" value="195" />
+			<entry class="" argb="255,105,109,234" value="196" />
+			<entry class="" argb="255,110,113,222" value="197" />
+			<entry class="" argb="255,114,117,210" value="198" />
+			<entry class="" argb="255,119,122,198" value="199" />
+			<entry class="" argb="255,123,127,186" value="200" />
+			<entry class="" argb="255,127,132,175" value="201" />
+			<entry class="" argb="255,131,137,164" value="202" />
+			<entry class="" argb="255,135,142,153" value="203" />
+			<entry class="" argb="255,139,148,142" value="204" />
+			<entry class="" argb="255,143,154,132" value="205" />
+			<entry class="" argb="255,147,160,122" value="206" />
+			<entry class="" argb="255,150,166,113" value="207" />
+			<entry class="" argb="255,154,173,104" value="208" />
+			<entry class="" argb="255,157,179,95" value="209" />
+			<entry class="" argb="255,160,186,87" value="210" />
+			<entry class="" argb="255,163,192,79" value="211" />
+			<entry class="" argb="255,165,199,72" value="212" />
+			<entry class="" argb="255,168,205,66" value="213" />
+			<entry class="" argb="255,170,212,59" value="214" />
+			<entry class="" argb="255,172,218,54" value="215" />
+			<entry class="" argb="255,174,225,49" value="216" />
+			<entry class="" argb="255,176,231,44" value="217" />
+			<entry class="" argb="255,177,237,40" value="218" />
+			<entry class="" argb="255,179,243,37" value="219" />
+			<entry class="" argb="255,180,248,34" value="220" />
+			<entry class="" argb="255,180,254,32" value="221" />
+			<entry class="" argb="255,181,251,31" value="222" />
+			<entry class="" argb="255,181,246,30" value="223" />
+			<entry class="" argb="255,182,241,29" value="224" />
+			<entry class="" argb="255,181,237,30" value="225" />
+			<entry class="" argb="255,181,233,31" value="226" />
+			<entry class="" argb="255,180,229,32" value="227" />
+			<entry class="" argb="255,180,226,34" value="228" />
+			<entry class="" argb="255,179,223,37" value="229" />
+			<entry class="" argb="255,177,220,40" value="230" />
+			<entry class="" argb="255,176,218,44" value="231" />
+			<entry class="" argb="255,174,216,49" value="232" />
+			<entry class="" argb="255,172,215,54" value="233" />
+			<entry class="" argb="255,170,214,59" value="234" />
+			<entry class="" argb="255,168,213,66" value="235" />
+			<entry class="" argb="255,165,213,72" value="236" />
+			<entry class="" argb="255,163,214,79" value="237" />
+			<entry class="" argb="255,160,214,87" value="238" />
+			<entry class="" argb="255,157,216,95" value="239" />
+			<entry class="" argb="255,154,217,104" value="240" />
+			<entry class="" argb="255,150,219,113" value="241" />
+			<entry class="" argb="255,147,222,122" value="242" />
+			<entry class="" argb="255,143,224,132" value="243" />
+			<entry class="" argb="255,139,228,142" value="244" />
+			<entry class="" argb="255,135,231,153" value="245" />
+			<entry class="" argb="255,131,235,164" value="246" />
+			<entry class="" argb="255,127,239,175" value="247" />
+			<entry class="" argb="255,123,244,186" value="248" />
+			<entry class="" argb="255,119,248,198" value="249" />
+			<entry class="" argb="255,114,253,210" value="250" />
+			<entry class="" argb="255,110,251,222" value="251" />
+			<entry class="" argb="255,105,246,234" value="252" />
+			<entry class="" argb="255,100,240,246" value="253" />
+			<entry class="" argb="255,96,234,251" value="254" />
+			<entry class="" argb="255,96,234,251" value="255" />
+		</table>
+	</palette>
+
+	<palette name="green-red-blue" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,36,0" value="1" />
+			<entry class="" argb="255,0,72,0" value="2" />
+			<entry class="" argb="255,0,75,0" value="3" />
+			<entry class="" argb="255,0,79,0" value="4" />
+			<entry class="" argb="255,0,82,0" value="5" />
+			<entry class="" argb="255,0,86,0" value="6" />
+			<entry class="" argb="255,0,90,0" value="7" />
+			<entry class="" argb="255,0,93,0" value="8" />
+			<entry class="" argb="255,0,97,0" value="9" />
+			<entry class="" argb="255,0,100,0" value="10" />
+			<entry class="" argb="255,0,104,0" value="11" />
+			<entry class="" argb="255,0,108,0" value="12" />
+			<entry class="" argb="255,0,117,0" value="13" />
+			<entry class="" argb="255,0,126,0" value="14" />
+			<entry class="" argb="255,0,135,0" value="15" />
+			<entry class="" argb="255,0,144,0" value="16" />
+			<entry class="" argb="255,0,153,0" value="17" />
+			<entry class="" argb="255,0,162,0" value="18" />
+			<entry class="" argb="255,0,171,0" value="19" />
+			<entry class="" argb="255,0,180,0" value="20" />
+			<entry class="" argb="255,0,189,0" value="21" />
+			<entry class="" argb="255,0,198,0" value="22" />
+			<entry class="" argb="255,0,207,0" value="23" />
+			<entry class="" argb="255,0,216,0" value="24" />
+			<entry class="" argb="255,0,225,0" value="25" />
+			<entry class="" argb="255,0,234,0" value="26" />
+			<entry class="" argb="255,0,243,0" value="27" />
+			<entry class="" argb="255,0,252,0" value="28" />
+			<entry class="" argb="255,6,249,0" value="29" />
+			<entry class="" argb="255,12,246,0" value="30" />
+			<entry class="" argb="255,18,243,0" value="31" />
+			<entry class="" argb="255,24,240,0" value="32" />
+			<entry class="" argb="255,30,234,0" value="33" />
+			<entry class="" argb="255,36,228,0" value="34" />
+			<entry class="" argb="255,42,222,0" value="35" />
+			<entry class="" argb="255,48,216,0" value="36" />
+			<entry class="" argb="255,54,210,0" value="37" />
+			<entry class="" argb="255,60,204,0" value="38" />
+			<entry class="" argb="255,66,198,0" value="39" />
+			<entry class="" argb="255,72,192,0" value="40" />
+			<entry class="" argb="255,78,186,0" value="41" />
+			<entry class="" argb="255,84,180,0" value="42" />
+			<entry class="" argb="255,90,174,0" value="43" />
+			<entry class="" argb="255,96,168,0" value="44" />
+			<entry class="" argb="255,102,162,0" value="45" />
+			<entry class="" argb="255,108,156,0" value="46" />
+			<entry class="" argb="255,114,150,0" value="47" />
+			<entry class="" argb="255,120,144,0" value="48" />
+			<entry class="" argb="255,126,138,0" value="49" />
+			<entry class="" argb="255,132,132,0" value="50" />
+			<entry class="" argb="255,138,126,0" value="51" />
+			<entry class="" argb="255,144,120,0" value="52" />
+			<entry class="" argb="255,150,114,0" value="53" />
+			<entry class="" argb="255,156,108,0" value="54" />
+			<entry class="" argb="255,162,102,0" value="55" />
+			<entry class="" argb="255,168,96,0" value="56" />
+			<entry class="" argb="255,174,90,0" value="57" />
+			<entry class="" argb="255,180,84,0" value="58" />
+			<entry class="" argb="255,186,78,0" value="59" />
+			<entry class="" argb="255,192,72,0" value="60" />
+			<entry class="" argb="255,198,66,0" value="61" />
+			<entry class="" argb="255,204,60,0" value="62" />
+			<entry class="" argb="255,210,54,0" value="63" />
+			<entry class="" argb="255,216,48,0" value="64" />
+			<entry class="" argb="255,222,42,0" value="65" />
+			<entry class="" argb="255,228,36,0" value="66" />
+			<entry class="" argb="255,234,30,0" value="67" />
+			<entry class="" argb="255,240,24,0" value="68" />
+			<entry class="" argb="255,243,18,0" value="69" />
+			<entry class="" argb="255,246,12,0" value="70" />
+			<entry class="" argb="255,249,6,0" value="71" />
+			<entry class="" argb="255,252,0,0" value="72" />
+			<entry class="" argb="255,252,0,0" value="73" />
+			<entry class="" argb="255,252,0,0" value="74" />
+			<entry class="" argb="255,252,0,0" value="75" />
+			<entry class="" argb="255,252,0,1" value="76" />
+			<entry class="" argb="255,251,0,3" value="77" />
+			<entry class="" argb="255,250,0,5" value="78" />
+			<entry class="" argb="255,249,0,7" value="79" />
+			<entry class="" argb="255,248,0,9" value="80" />
+			<entry class="" argb="255,248,0,10" value="81" />
+			<entry class="" argb="255,248,0,12" value="82" />
+			<entry class="" argb="255,248,0,14" value="83" />
+			<entry class="" argb="255,248,0,16" value="84" />
+			<entry class="" argb="255,247,0,18" value="85" />
+			<entry class="" argb="255,246,0,20" value="86" />
+			<entry class="" argb="255,245,0,22" value="87" />
+			<entry class="" argb="255,244,0,25" value="88" />
+			<entry class="" argb="255,243,0,27" value="89" />
+			<entry class="" argb="255,242,0,29" value="90" />
+			<entry class="" argb="255,241,0,31" value="91" />
+			<entry class="" argb="255,240,0,34" value="92" />
+			<entry class="" argb="255,240,0,35" value="93" />
+			<entry class="" argb="255,239,0,37" value="94" />
+			<entry class="" argb="255,238,0,39" value="95" />
+			<entry class="" argb="255,237,0,41" value="96" />
+			<entry class="" argb="255,236,0,43" value="97" />
+			<entry class="" argb="255,236,0,45" value="98" />
+			<entry class="" argb="255,236,0,47" value="99" />
+			<entry class="" argb="255,236,0,50" value="100" />
+			<entry class="" argb="255,235,0,52" value="101" />
+			<entry class="" argb="255,234,0,54" value="102" />
+			<entry class="" argb="255,233,0,56" value="103" />
+			<entry class="" argb="255,232,0,59" value="104" />
+			<entry class="" argb="255,231,0,61" value="105" />
+			<entry class="" argb="255,230,0,63" value="106" />
+			<entry class="" argb="255,229,0,65" value="107" />
+			<entry class="" argb="255,228,0,67" value="108" />
+			<entry class="" argb="255,228,0,68" value="109" />
+			<entry class="" argb="255,228,0,70" value="110" />
+			<entry class="" argb="255,228,0,72" value="111" />
+			<entry class="" argb="255,228,0,74" value="112" />
+			<entry class="" argb="255,227,0,76" value="113" />
+			<entry class="" argb="255,226,0,78" value="114" />
+			<entry class="" argb="255,225,0,80" value="115" />
+			<entry class="" argb="255,224,0,83" value="116" />
+			<entry class="" argb="255,223,0,85" value="117" />
+			<entry class="" argb="255,222,0,87" value="118" />
+			<entry class="" argb="255,221,0,89" value="119" />
+			<entry class="" argb="255,220,1,92" value="120" />
+			<entry class="" argb="255,219,1,94" value="121" />
+			<entry class="" argb="255,218,1,96" value="122" />
+			<entry class="" argb="255,217,1,98" value="123" />
+			<entry class="" argb="255,216,0,101" value="124" />
+			<entry class="" argb="255,216,0,102" value="125" />
+			<entry class="" argb="255,216,0,104" value="126" />
+			<entry class="" argb="255,216,0,106" value="127" />
+			<entry class="" argb="255,216,0,108" value="128" />
+			<entry class="" argb="255,215,0,110" value="129" />
+			<entry class="" argb="255,214,0,112" value="130" />
+			<entry class="" argb="255,213,0,114" value="131" />
+			<entry class="" argb="255,212,0,116" value="132" />
+			<entry class="" argb="255,211,0,118" value="133" />
+			<entry class="" argb="255,210,0,120" value="134" />
+			<entry class="" argb="255,209,0,122" value="135" />
+			<entry class="" argb="255,208,0,125" value="136" />
+			<entry class="" argb="255,207,0,127" value="137" />
+			<entry class="" argb="255,206,0,129" value="138" />
+			<entry class="" argb="255,205,0,131" value="139" />
+			<entry class="" argb="255,204,0,134" value="140" />
+			<entry class="" argb="255,204,0,135" value="141" />
+			<entry class="" argb="255,204,0,137" value="142" />
+			<entry class="" argb="255,204,0,139" value="143" />
+			<entry class="" argb="255,204,0,141" value="144" />
+			<entry class="" argb="255,203,0,143" value="145" />
+			<entry class="" argb="255,202,0,145" value="146" />
+			<entry class="" argb="255,201,0,147" value="147" />
+			<entry class="" argb="255,200,0,150" value="148" />
+			<entry class="" argb="255,199,0,152" value="149" />
+			<entry class="" argb="255,198,0,154" value="150" />
+			<entry class="" argb="255,197,0,156" value="151" />
+			<entry class="" argb="255,196,0,159" value="152" />
+			<entry class="" argb="255,196,0,160" value="153" />
+			<entry class="" argb="255,196,0,162" value="154" />
+			<entry class="" argb="255,196,0,163" value="155" />
+			<entry class="" argb="255,196,0,165" value="156" />
+			<entry class="" argb="255,195,0,167" value="157" />
+			<entry class="" argb="255,194,0,169" value="158" />
+			<entry class="" argb="255,193,0,171" value="159" />
+			<entry class="" argb="255,192,0,174" value="160" />
+			<entry class="" argb="255,191,0,176" value="161" />
+			<entry class="" argb="255,190,0,178" value="162" />
+			<entry class="" argb="255,189,0,180" value="163" />
+			<entry class="" argb="255,188,0,183" value="164" />
+			<entry class="" argb="255,187,0,185" value="165" />
+			<entry class="" argb="255,186,0,187" value="166" />
+			<entry class="" argb="255,185,0,189" value="167" />
+			<entry class="" argb="255,184,0,192" value="168" />
+			<entry class="" argb="255,184,0,193" value="169" />
+			<entry class="" argb="255,184,0,195" value="170" />
+			<entry class="" argb="255,184,0,197" value="171" />
+			<entry class="" argb="255,184,0,199" value="172" />
+			<entry class="" argb="255,183,0,201" value="173" />
+			<entry class="" argb="255,182,0,203" value="174" />
+			<entry class="" argb="255,181,0,205" value="175" />
+			<entry class="" argb="255,180,0,208" value="176" />
+			<entry class="" argb="255,179,0,210" value="177" />
+			<entry class="" argb="255,178,0,212" value="178" />
+			<entry class="" argb="255,177,0,214" value="179" />
+			<entry class="" argb="255,176,0,216" value="180" />
+			<entry class="" argb="255,176,0,217" value="181" />
+			<entry class="" argb="255,176,0,219" value="182" />
+			<entry class="" argb="255,176,0,221" value="183" />
+			<entry class="" argb="255,176,0,223" value="184" />
+			<entry class="" argb="255,175,0,225" value="185" />
+			<entry class="" argb="255,174,0,227" value="186" />
+			<entry class="" argb="255,173,0,229" value="187" />
+			<entry class="" argb="255,172,0,232" value="188" />
+			<entry class="" argb="255,171,0,234" value="189" />
+			<entry class="" argb="255,170,0,236" value="190" />
+			<entry class="" argb="255,169,0,238" value="191" />
+			<entry class="" argb="255,168,0,241" value="192" />
+			<entry class="" argb="255,167,0,243" value="193" />
+			<entry class="" argb="255,166,0,245" value="194" />
+			<entry class="" argb="255,165,0,247" value="195" />
+			<entry class="" argb="255,164,0,250" value="196" />
+			<entry class="" argb="255,164,0,251" value="197" />
+			<entry class="" argb="255,164,0,252" value="198" />
+			<entry class="" argb="255,164,0,253" value="199" />
+			<entry class="" argb="255,164,0,255" value="200" />
+			<entry class="" argb="255,163,0,255" value="201" />
+			<entry class="" argb="255,162,0,255" value="202" />
+			<entry class="" argb="255,161,0,255" value="203" />
+			<entry class="" argb="255,160,0,255" value="204" />
+			<entry class="" argb="255,159,0,255" value="205" />
+			<entry class="" argb="255,158,0,255" value="206" />
+			<entry class="" argb="255,157,0,255" value="207" />
+			<entry class="" argb="255,156,0,255" value="208" />
+			<entry class="" argb="255,155,0,255" value="209" />
+			<entry class="" argb="255,154,0,255" value="210" />
+			<entry class="" argb="255,153,0,255" value="211" />
+			<entry class="" argb="255,152,0,255" value="212" />
+			<entry class="" argb="255,152,0,255" value="213" />
+			<entry class="" argb="255,152,0,255" value="214" />
+			<entry class="" argb="255,152,0,255" value="215" />
+			<entry class="" argb="255,152,0,255" value="216" />
+			<entry class="" argb="255,151,0,255" value="217" />
+			<entry class="" argb="255,150,0,255" value="218" />
+			<entry class="" argb="255,149,0,255" value="219" />
+			<entry class="" argb="255,148,0,255" value="220" />
+			<entry class="" argb="255,151,8,255" value="221" />
+			<entry class="" argb="255,154,16,255" value="222" />
+			<entry class="" argb="255,157,24,255" value="223" />
+			<entry class="" argb="255,160,32,255" value="224" />
+			<entry class="" argb="255,163,40,255" value="225" />
+			<entry class="" argb="255,166,48,255" value="226" />
+			<entry class="" argb="255,169,56,255" value="227" />
+			<entry class="" argb="255,172,64,255" value="228" />
+			<entry class="" argb="255,176,72,255" value="229" />
+			<entry class="" argb="255,180,80,255" value="230" />
+			<entry class="" argb="255,184,88,255" value="231" />
+			<entry class="" argb="255,188,96,255" value="232" />
+			<entry class="" argb="255,191,104,255" value="233" />
+			<entry class="" argb="255,194,112,255" value="234" />
+			<entry class="" argb="255,197,120,255" value="235" />
+			<entry class="" argb="255,200,128,255" value="236" />
+			<entry class="" argb="255,203,135,255" value="237" />
+			<entry class="" argb="255,206,142,255" value="238" />
+			<entry class="" argb="255,209,149,255" value="239" />
+			<entry class="" argb="255,212,156,255" value="240" />
+			<entry class="" argb="255,215,164,255" value="241" />
+			<entry class="" argb="255,218,172,255" value="242" />
+			<entry class="" argb="255,221,180,255" value="243" />
+			<entry class="" argb="255,224,188,255" value="244" />
+			<entry class="" argb="255,228,196,255" value="245" />
+			<entry class="" argb="255,232,204,255" value="246" />
+			<entry class="" argb="255,236,212,255" value="247" />
+			<entry class="" argb="255,240,220,255" value="248" />
+			<entry class="" argb="255,243,228,255" value="249" />
+			<entry class="" argb="255,246,236,255" value="250" />
+			<entry class="" argb="255,249,244,255" value="251" />
+			<entry class="" argb="255,252,252,255" value="252" />
+			<entry class="" argb="255,253,253,255" value="253" />
+			<entry class="" argb="255,254,254,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="green-white-exponential" interpolate="false">
+		<table>
+			<entry class="" argb="255,1,0,0" value="0" />
+			<entry class="" argb="255,1,0,0" value="1" />
+			<entry class="" argb="255,1,1,0" value="2" />
+			<entry class="" argb="255,2,2,0" value="3" />
+			<entry class="" argb="255,2,2,1" value="4" />
+			<entry class="" argb="255,2,3,1" value="5" />
+			<entry class="" argb="255,3,4,1" value="6" />
+			<entry class="" argb="255,3,4,1" value="7" />
+			<entry class="" argb="255,4,5,2" value="8" />
+			<entry class="" argb="255,4,6,2" value="9" />
+			<entry class="" argb="255,4,6,2" value="10" />
+			<entry class="" argb="255,5,7,2" value="11" />
+			<entry class="" argb="255,5,8,3" value="12" />
+			<entry class="" argb="255,5,8,3" value="13" />
+			<entry class="" argb="255,6,9,3" value="14" />
+			<entry class="" argb="255,6,10,3" value="15" />
+			<entry class="" argb="255,7,10,4" value="16" />
+			<entry class="" argb="255,7,11,4" value="17" />
+			<entry class="" argb="255,7,12,4" value="18" />
+			<entry class="" argb="255,8,12,5" value="19" />
+			<entry class="" argb="255,8,13,5" value="20" />
+			<entry class="" argb="255,9,14,5" value="21" />
+			<entry class="" argb="255,9,14,5" value="22" />
+			<entry class="" argb="255,9,15,6" value="23" />
+			<entry class="" argb="255,10,16,6" value="24" />
+			<entry class="" argb="255,10,16,6" value="25" />
+			<entry class="" argb="255,10,17,6" value="26" />
+			<entry class="" argb="255,11,18,7" value="27" />
+			<entry class="" argb="255,11,18,7" value="28" />
+			<entry class="" argb="255,12,19,7" value="29" />
+			<entry class="" argb="255,12,20,7" value="30" />
+			<entry class="" argb="255,12,20,8" value="31" />
+			<entry class="" argb="255,13,21,8" value="32" />
+			<entry class="" argb="255,13,22,8" value="33" />
+			<entry class="" argb="255,13,22,8" value="34" />
+			<entry class="" argb="255,14,23,9" value="35" />
+			<entry class="" argb="255,14,24,9" value="36" />
+			<entry class="" argb="255,15,24,9" value="37" />
+			<entry class="" argb="255,15,25,10" value="38" />
+			<entry class="" argb="255,15,26,10" value="39" />
+			<entry class="" argb="255,16,26,10" value="40" />
+			<entry class="" argb="255,16,27,10" value="41" />
+			<entry class="" argb="255,17,28,11" value="42" />
+			<entry class="" argb="255,17,28,11" value="43" />
+			<entry class="" argb="255,17,29,11" value="44" />
+			<entry class="" argb="255,18,30,11" value="45" />
+			<entry class="" argb="255,18,30,12" value="46" />
+			<entry class="" argb="255,18,31,12" value="47" />
+			<entry class="" argb="255,19,32,12" value="48" />
+			<entry class="" argb="255,19,32,12" value="49" />
+			<entry class="" argb="255,20,33,13" value="50" />
+			<entry class="" argb="255,20,34,13" value="51" />
+			<entry class="" argb="255,20,34,13" value="52" />
+			<entry class="" argb="255,21,35,13" value="53" />
+			<entry class="" argb="255,21,36,14" value="54" />
+			<entry class="" argb="255,21,36,14" value="55" />
+			<entry class="" argb="255,22,37,14" value="56" />
+			<entry class="" argb="255,22,38,15" value="57" />
+			<entry class="" argb="255,23,38,15" value="58" />
+			<entry class="" argb="255,23,39,15" value="59" />
+			<entry class="" argb="255,23,40,15" value="60" />
+			<entry class="" argb="255,24,40,16" value="61" />
+			<entry class="" argb="255,24,41,16" value="62" />
+			<entry class="" argb="255,25,42,16" value="63" />
+			<entry class="" argb="255,25,42,16" value="64" />
+			<entry class="" argb="255,25,43,17" value="65" />
+			<entry class="" argb="255,26,44,17" value="66" />
+			<entry class="" argb="255,26,44,17" value="67" />
+			<entry class="" argb="255,26,45,17" value="68" />
+			<entry class="" argb="255,27,46,18" value="69" />
+			<entry class="" argb="255,27,46,18" value="70" />
+			<entry class="" argb="255,28,47,18" value="71" />
+			<entry class="" argb="255,28,48,18" value="72" />
+			<entry class="" argb="255,28,48,19" value="73" />
+			<entry class="" argb="255,29,49,19" value="74" />
+			<entry class="" argb="255,29,50,19" value="75" />
+			<entry class="" argb="255,29,50,20" value="76" />
+			<entry class="" argb="255,30,51,20" value="77" />
+			<entry class="" argb="255,30,52,20" value="78" />
+			<entry class="" argb="255,31,52,20" value="79" />
+			<entry class="" argb="255,31,53,21" value="80" />
+			<entry class="" argb="255,31,54,21" value="81" />
+			<entry class="" argb="255,32,54,21" value="82" />
+			<entry class="" argb="255,32,55,21" value="83" />
+			<entry class="" argb="255,33,56,22" value="84" />
+			<entry class="" argb="255,33,56,22" value="85" />
+			<entry class="" argb="255,33,57,22" value="86" />
+			<entry class="" argb="255,34,58,22" value="87" />
+			<entry class="" argb="255,34,58,23" value="88" />
+			<entry class="" argb="255,34,59,23" value="89" />
+			<entry class="" argb="255,35,60,23" value="90" />
+			<entry class="" argb="255,35,60,23" value="91" />
+			<entry class="" argb="255,36,61,24" value="92" />
+			<entry class="" argb="255,36,62,24" value="93" />
+			<entry class="" argb="255,36,62,24" value="94" />
+			<entry class="" argb="255,37,63,25" value="95" />
+			<entry class="" argb="255,37,64,25" value="96" />
+			<entry class="" argb="255,37,64,25" value="97" />
+			<entry class="" argb="255,38,65,25" value="98" />
+			<entry class="" argb="255,38,66,26" value="99" />
+			<entry class="" argb="255,39,66,26" value="100" />
+			<entry class="" argb="255,39,67,26" value="101" />
+			<entry class="" argb="255,39,68,26" value="102" />
+			<entry class="" argb="255,40,68,27" value="103" />
+			<entry class="" argb="255,40,69,27" value="104" />
+			<entry class="" argb="255,41,70,27" value="105" />
+			<entry class="" argb="255,41,70,27" value="106" />
+			<entry class="" argb="255,41,71,28" value="107" />
+			<entry class="" argb="255,42,72,28" value="108" />
+			<entry class="" argb="255,42,72,28" value="109" />
+			<entry class="" argb="255,42,73,28" value="110" />
+			<entry class="" argb="255,43,74,29" value="111" />
+			<entry class="" argb="255,43,74,29" value="112" />
+			<entry class="" argb="255,44,75,29" value="113" />
+			<entry class="" argb="255,44,76,30" value="114" />
+			<entry class="" argb="255,44,76,30" value="115" />
+			<entry class="" argb="255,45,77,30" value="116" />
+			<entry class="" argb="255,45,78,30" value="117" />
+			<entry class="" argb="255,45,78,31" value="118" />
+			<entry class="" argb="255,46,79,31" value="119" />
+			<entry class="" argb="255,46,80,31" value="120" />
+			<entry class="" argb="255,47,80,31" value="121" />
+			<entry class="" argb="255,47,81,32" value="122" />
+			<entry class="" argb="255,47,82,32" value="123" />
+			<entry class="" argb="255,48,82,32" value="124" />
+			<entry class="" argb="255,48,83,32" value="125" />
+			<entry class="" argb="255,49,84,33" value="126" />
+			<entry class="" argb="255,49,84,33" value="127" />
+			<entry class="" argb="255,49,85,33" value="128" />
+			<entry class="" argb="255,50,86,33" value="129" />
+			<entry class="" argb="255,50,87,34" value="130" />
+			<entry class="" argb="255,50,88,34" value="131" />
+			<entry class="" argb="255,51,90,34" value="132" />
+			<entry class="" argb="255,51,91,35" value="133" />
+			<entry class="" argb="255,52,92,35" value="134" />
+			<entry class="" argb="255,52,94,35" value="135" />
+			<entry class="" argb="255,52,95,35" value="136" />
+			<entry class="" argb="255,54,96,36" value="137" />
+			<entry class="" argb="255,54,98,36" value="138" />
+			<entry class="" argb="255,55,99,36" value="139" />
+			<entry class="" argb="255,56,100,36" value="140" />
+			<entry class="" argb="255,56,102,37" value="141" />
+			<entry class="" argb="255,57,103,37" value="142" />
+			<entry class="" argb="255,58,104,37" value="143" />
+			<entry class="" argb="255,58,106,37" value="144" />
+			<entry class="" argb="255,59,107,38" value="145" />
+			<entry class="" argb="255,60,108,38" value="146" />
+			<entry class="" argb="255,60,110,38" value="147" />
+			<entry class="" argb="255,61,111,38" value="148" />
+			<entry class="" argb="255,62,112,39" value="149" />
+			<entry class="" argb="255,62,114,39" value="150" />
+			<entry class="" argb="255,63,115,39" value="151" />
+			<entry class="" argb="255,64,116,40" value="152" />
+			<entry class="" argb="255,64,118,40" value="153" />
+			<entry class="" argb="255,66,119,40" value="154" />
+			<entry class="" argb="255,68,120,40" value="155" />
+			<entry class="" argb="255,70,122,41" value="156" />
+			<entry class="" argb="255,71,123,41" value="157" />
+			<entry class="" argb="255,73,124,41" value="158" />
+			<entry class="" argb="255,75,126,41" value="159" />
+			<entry class="" argb="255,77,127,42" value="160" />
+			<entry class="" argb="255,79,128,42" value="161" />
+			<entry class="" argb="255,81,130,42" value="162" />
+			<entry class="" argb="255,83,131,42" value="163" />
+			<entry class="" argb="255,85,132,43" value="164" />
+			<entry class="" argb="255,86,134,43" value="165" />
+			<entry class="" argb="255,88,135,43" value="166" />
+			<entry class="" argb="255,90,136,43" value="167" />
+			<entry class="" argb="255,92,138,44" value="168" />
+			<entry class="" argb="255,94,139,44" value="169" />
+			<entry class="" argb="255,96,140,44" value="170" />
+			<entry class="" argb="255,98,142,45" value="171" />
+			<entry class="" argb="255,99,143,45" value="172" />
+			<entry class="" argb="255,101,145,45" value="173" />
+			<entry class="" argb="255,103,146,45" value="174" />
+			<entry class="" argb="255,105,147,46" value="175" />
+			<entry class="" argb="255,107,149,46" value="176" />
+			<entry class="" argb="255,109,150,46" value="177" />
+			<entry class="" argb="255,111,151,46" value="178" />
+			<entry class="" argb="255,113,153,47" value="179" />
+			<entry class="" argb="255,114,154,47" value="180" />
+			<entry class="" argb="255,116,155,47" value="181" />
+			<entry class="" argb="255,118,157,47" value="182" />
+			<entry class="" argb="255,120,158,48" value="183" />
+			<entry class="" argb="255,122,159,47" value="184" />
+			<entry class="" argb="255,124,161,49" value="185" />
+			<entry class="" argb="255,126,162,52" value="186" />
+			<entry class="" argb="255,127,163,55" value="187" />
+			<entry class="" argb="255,129,165,58" value="188" />
+			<entry class="" argb="255,131,166,61" value="189" />
+			<entry class="" argb="255,133,167,64" value="190" />
+			<entry class="" argb="255,135,169,67" value="191" />
+			<entry class="" argb="255,137,170,70" value="192" />
+			<entry class="" argb="255,139,171,73" value="193" />
+			<entry class="" argb="255,141,173,76" value="194" />
+			<entry class="" argb="255,142,174,79" value="195" />
+			<entry class="" argb="255,144,175,82" value="196" />
+			<entry class="" argb="255,146,177,85" value="197" />
+			<entry class="" argb="255,148,178,88" value="198" />
+			<entry class="" argb="255,150,179,90" value="199" />
+			<entry class="" argb="255,152,181,93" value="200" />
+			<entry class="" argb="255,154,182,96" value="201" />
+			<entry class="" argb="255,156,183,99" value="202" />
+			<entry class="" argb="255,157,185,102" value="203" />
+			<entry class="" argb="255,159,186,105" value="204" />
+			<entry class="" argb="255,161,187,108" value="205" />
+			<entry class="" argb="255,163,189,111" value="206" />
+			<entry class="" argb="255,165,190,114" value="207" />
+			<entry class="" argb="255,167,191,117" value="208" />
+			<entry class="" argb="255,169,193,120" value="209" />
+			<entry class="" argb="255,170,194,123" value="210" />
+			<entry class="" argb="255,172,195,126" value="211" />
+			<entry class="" argb="255,174,197,129" value="212" />
+			<entry class="" argb="255,176,198,131" value="213" />
+			<entry class="" argb="255,178,200,134" value="214" />
+			<entry class="" argb="255,180,201,137" value="215" />
+			<entry class="" argb="255,182,202,140" value="216" />
+			<entry class="" argb="255,184,204,143" value="217" />
+			<entry class="" argb="255,185,205,146" value="218" />
+			<entry class="" argb="255,187,206,149" value="219" />
+			<entry class="" argb="255,189,208,152" value="220" />
+			<entry class="" argb="255,191,209,155" value="221" />
+			<entry class="" argb="255,193,210,158" value="222" />
+			<entry class="" argb="255,195,212,161" value="223" />
+			<entry class="" argb="255,197,213,164" value="224" />
+			<entry class="" argb="255,198,214,167" value="225" />
+			<entry class="" argb="255,200,216,170" value="226" />
+			<entry class="" argb="255,202,217,172" value="227" />
+			<entry class="" argb="255,204,218,175" value="228" />
+			<entry class="" argb="255,206,220,178" value="229" />
+			<entry class="" argb="255,208,221,181" value="230" />
+			<entry class="" argb="255,210,222,184" value="231" />
+			<entry class="" argb="255,212,224,187" value="232" />
+			<entry class="" argb="255,213,225,190" value="233" />
+			<entry class="" argb="255,215,226,193" value="234" />
+			<entry class="" argb="255,217,228,196" value="235" />
+			<entry class="" argb="255,219,229,199" value="236" />
+			<entry class="" argb="255,221,230,202" value="237" />
+			<entry class="" argb="255,223,232,205" value="238" />
+			<entry class="" argb="255,225,233,208" value="239" />
+			<entry class="" argb="255,226,234,211" value="240" />
+			<entry class="" argb="255,228,236,213" value="241" />
+			<entry class="" argb="255,230,237,216" value="242" />
+			<entry class="" argb="255,232,238,219" value="243" />
+			<entry class="" argb="255,234,240,222" value="244" />
+			<entry class="" argb="255,236,241,225" value="245" />
+			<entry class="" argb="255,238,242,228" value="246" />
+			<entry class="" argb="255,240,244,231" value="247" />
+			<entry class="" argb="255,241,245,234" value="248" />
+			<entry class="" argb="255,243,246,237" value="249" />
+			<entry class="" argb="255,245,248,240" value="250" />
+			<entry class="" argb="255,247,249,243" value="251" />
+			<entry class="" argb="255,249,250,246" value="252" />
+			<entry class="" argb="255,251,252,249" value="253" />
+			<entry class="" argb="255,253,253,252" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="hardcandy" interpolate="false">
+		<table>
+			<entry class="" argb="255,4,51,116" value="0" />
+			<entry class="" argb="255,4,51,116" value="1" />
+			<entry class="" argb="255,5,58,105" value="2" />
+			<entry class="" argb="255,7,65,94" value="3" />
+			<entry class="" argb="255,9,72,84" value="4" />
+			<entry class="" argb="255,11,79,74" value="5" />
+			<entry class="" argb="255,12,85,64" value="6" />
+			<entry class="" argb="255,14,92,55" value="7" />
+			<entry class="" argb="255,15,99,46" value="8" />
+			<entry class="" argb="255,16,105,38" value="9" />
+			<entry class="" argb="255,17,111,30" value="10" />
+			<entry class="" argb="255,17,117,24" value="11" />
+			<entry class="" argb="255,18,124,18" value="12" />
+			<entry class="" argb="255,18,129,12" value="13" />
+			<entry class="" argb="255,18,135,8" value="14" />
+			<entry class="" argb="255,17,141,5" value="15" />
+			<entry class="" argb="255,16,146,2" value="16" />
+			<entry class="" argb="255,15,152,0" value="17" />
+			<entry class="" argb="255,14,157,0" value="18" />
+			<entry class="" argb="255,13,162,0" value="19" />
+			<entry class="" argb="255,11,167,1" value="20" />
+			<entry class="" argb="255,13,171,3" value="21" />
+			<entry class="" argb="255,8,176,6" value="22" />
+			<entry class="" argb="255,5,180,13" value="23" />
+			<entry class="" argb="255,3,184,14" value="24" />
+			<entry class="" argb="255,1,188,20" value="25" />
+			<entry class="" argb="255,0,191,26" value="26" />
+			<entry class="" argb="255,3,195,33" value="27" />
+			<entry class="" argb="255,5,198,41" value="28" />
+			<entry class="" argb="255,7,201,50" value="29" />
+			<entry class="" argb="255,13,203,59" value="30" />
+			<entry class="" argb="255,12,206,68" value="31" />
+			<entry class="" argb="255,13,208,78" value="32" />
+			<entry class="" argb="255,15,210,88" value="33" />
+			<entry class="" argb="255,17,212,99" value="34" />
+			<entry class="" argb="255,18,213,109" value="35" />
+			<entry class="" argb="255,19,214,120" value="36" />
+			<entry class="" argb="255,19,215,131" value="37" />
+			<entry class="" argb="255,19,216,142" value="38" />
+			<entry class="" argb="255,19,216,153" value="39" />
+			<entry class="" argb="255,19,216,163" value="40" />
+			<entry class="" argb="255,18,216,174" value="41" />
+			<entry class="" argb="255,16,216,184" value="42" />
+			<entry class="" argb="255,14,215,193" value="43" />
+			<entry class="" argb="255,12,215,202" value="44" />
+			<entry class="" argb="255,9,213,211" value="45" />
+			<entry class="" argb="255,5,212,218" value="46" />
+			<entry class="" argb="255,2,210,226" value="47" />
+			<entry class="" argb="255,2,209,232" value="48" />
+			<entry class="" argb="255,6,206,238" value="49" />
+			<entry class="" argb="255,11,204,243" value="50" />
+			<entry class="" argb="255,17,201,247" value="51" />
+			<entry class="" argb="255,23,199,250" value="52" />
+			<entry class="" argb="255,29,195,252" value="53" />
+			<entry class="" argb="255,36,192,253" value="54" />
+			<entry class="" argb="255,42,189,253" value="55" />
+			<entry class="" argb="255,49,185,253" value="56" />
+			<entry class="" argb="255,56,181,251" value="57" />
+			<entry class="" argb="255,64,177,249" value="58" />
+			<entry class="" argb="255,71,172,246" value="59" />
+			<entry class="" argb="255,78,168,241" value="60" />
+			<entry class="" argb="255,85,163,236" value="61" />
+			<entry class="" argb="255,93,158,230" value="62" />
+			<entry class="" argb="255,100,153,224" value="63" />
+			<entry class="" argb="255,106,148,216" value="64" />
+			<entry class="" argb="255,113,142,208" value="65" />
+			<entry class="" argb="255,119,137,200" value="66" />
+			<entry class="" argb="255,125,131,190" value="67" />
+			<entry class="" argb="255,130,125,181" value="68" />
+			<entry class="" argb="255,135,119,171" value="69" />
+			<entry class="" argb="255,139,113,160" value="70" />
+			<entry class="" argb="255,143,106,150" value="71" />
+			<entry class="" argb="255,146,100,139" value="72" />
+			<entry class="" argb="255,149,93,128" value="73" />
+			<entry class="" argb="255,150,87,117" value="74" />
+			<entry class="" argb="255,151,80,106" value="75" />
+			<entry class="" argb="255,152,73,96" value="76" />
+			<entry class="" argb="255,151,67,85" value="77" />
+			<entry class="" argb="255,150,60,75" value="78" />
+			<entry class="" argb="255,148,53,65" value="79" />
+			<entry class="" argb="255,145,46,56" value="80" />
+			<entry class="" argb="255,142,39,47" value="81" />
+			<entry class="" argb="255,138,32,39" value="82" />
+			<entry class="" argb="255,133,25,31" value="83" />
+			<entry class="" argb="255,127,18,24" value="84" />
+			<entry class="" argb="255,121,11,18" value="85" />
+			<entry class="" argb="255,114,4,13" value="86" />
+			<entry class="" argb="255,107,2,9" value="87" />
+			<entry class="" argb="255,99,9,5" value="88" />
+			<entry class="" argb="255,90,16,2" value="89" />
+			<entry class="" argb="255,82,22,0" value="90" />
+			<entry class="" argb="255,73,29,0" value="91" />
+			<entry class="" argb="255,63,36,0" value="92" />
+			<entry class="" argb="255,54,42,1" value="93" />
+			<entry class="" argb="255,44,49,3" value="94" />
+			<entry class="" argb="255,35,55,5" value="95" />
+			<entry class="" argb="255,25,61,9" value="96" />
+			<entry class="" argb="255,16,68,14" value="97" />
+			<entry class="" argb="255,6,74,19" value="98" />
+			<entry class="" argb="255,1,79,25" value="99" />
+			<entry class="" argb="255,13,85,32" value="100" />
+			<entry class="" argb="255,18,91,40" value="101" />
+			<entry class="" argb="255,25,96,48" value="102" />
+			<entry class="" argb="255,32,101,57" value="103" />
+			<entry class="" argb="255,38,106,67" value="104" />
+			<entry class="" argb="255,44,111,76" value="105" />
+			<entry class="" argb="255,48,116,87" value="106" />
+			<entry class="" argb="255,52,120,97" value="107" />
+			<entry class="" argb="255,55,125,108" value="108" />
+			<entry class="" argb="255,56,129,119" value="109" />
+			<entry class="" argb="255,57,133,130" value="110" />
+			<entry class="" argb="255,57,136,140" value="111" />
+			<entry class="" argb="255,56,140,151" value="112" />
+			<entry class="" argb="255,53,143,162" value="113" />
+			<entry class="" argb="255,50,146,172" value="114" />
+			<entry class="" argb="255,45,149,182" value="115" />
+			<entry class="" argb="255,39,151,192" value="116" />
+			<entry class="" argb="255,33,153,201" value="117" />
+			<entry class="" argb="255,25,155,209" value="118" />
+			<entry class="" argb="255,16,157,217" value="119" />
+			<entry class="" argb="255,6,159,225" value="120" />
+			<entry class="" argb="255,3,160,231" value="121" />
+			<entry class="" argb="255,15,161,237" value="122" />
+			<entry class="" argb="255,27,162,242" value="123" />
+			<entry class="" argb="255,40,162,246" value="124" />
+			<entry class="" argb="255,53,162,249" value="125" />
+			<entry class="" argb="255,67,162,252" value="126" />
+			<entry class="" argb="255,81,162,253" value="127" />
+			<entry class="" argb="255,96,162,254" value="128" />
+			<entry class="" argb="255,111,161,253" value="129" />
+			<entry class="" argb="255,126,160,252" value="130" />
+			<entry class="" argb="255,141,159,249" value="131" />
+			<entry class="" argb="255,156,157,246" value="132" />
+			<entry class="" argb="255,170,155,242" value="133" />
+			<entry class="" argb="255,185,153,237" value="134" />
+			<entry class="" argb="255,199,151,231" value="135" />
+			<entry class="" argb="255,212,148,225" value="136" />
+			<entry class="" argb="255,225,146,217" value="137" />
+			<entry class="" argb="255,237,143,209" value="138" />
+			<entry class="" argb="255,248,139,201" value="139" />
+			<entry class="" argb="255,252,136,192" value="140" />
+			<entry class="" argb="255,242,132,182" value="141" />
+			<entry class="" argb="255,234,128,172" value="142" />
+			<entry class="" argb="255,227,124,162" value="143" />
+			<entry class="" argb="255,222,120,151" value="144" />
+			<entry class="" argb="255,217,115,140" value="145" />
+			<entry class="" argb="255,214,111,130" value="146" />
+			<entry class="" argb="255,212,106,119" value="147" />
+			<entry class="" argb="255,212,101,108" value="148" />
+			<entry class="" argb="255,213,95,97" value="149" />
+			<entry class="" argb="255,216,90,87" value="150" />
+			<entry class="" argb="255,220,84,76" value="151" />
+			<entry class="" argb="255,225,79,67" value="152" />
+			<entry class="" argb="255,232,73,57" value="153" />
+			<entry class="" argb="255,240,67,48" value="154" />
+			<entry class="" argb="255,249,61,40" value="155" />
+			<entry class="" argb="255,251,54,32" value="156" />
+			<entry class="" argb="255,239,48,25" value="157" />
+			<entry class="" argb="255,226,42,19" value="158" />
+			<entry class="" argb="255,213,35,14" value="159" />
+			<entry class="" argb="255,198,28,9" value="160" />
+			<entry class="" argb="255,183,22,5" value="161" />
+			<entry class="" argb="255,167,15,3" value="162" />
+			<entry class="" argb="255,150,8,1" value="163" />
+			<entry class="" argb="255,133,1,0" value="164" />
+			<entry class="" argb="255,116,5,0" value="165" />
+			<entry class="" argb="255,98,12,0" value="166" />
+			<entry class="" argb="255,81,19,2" value="167" />
+			<entry class="" argb="255,64,26,5" value="168" />
+			<entry class="" argb="255,47,33,9" value="169" />
+			<entry class="" argb="255,30,40,13" value="170" />
+			<entry class="" argb="255,14,47,18" value="171" />
+			<entry class="" argb="255,1,54,24" value="172" />
+			<entry class="" argb="255,15,61,31" value="173" />
+			<entry class="" argb="255,29,67,39" value="174" />
+			<entry class="" argb="255,42,74,47" value="175" />
+			<entry class="" argb="255,54,81,56" value="176" />
+			<entry class="" argb="255,64,88,65" value="177" />
+			<entry class="" argb="255,73,94,75" value="178" />
+			<entry class="" argb="255,81,101,85" value="179" />
+			<entry class="" argb="255,87,107,96" value="180" />
+			<entry class="" argb="255,91,113,106" value="181" />
+			<entry class="" argb="255,94,120,117" value="182" />
+			<entry class="" argb="255,95,126,128" value="183" />
+			<entry class="" argb="255,95,131,139" value="184" />
+			<entry class="" argb="255,92,137,150" value="185" />
+			<entry class="" argb="255,88,143,160" value="186" />
+			<entry class="" argb="255,82,148,171" value="187" />
+			<entry class="" argb="255,75,154,181" value="188" />
+			<entry class="" argb="255,66,159,190" value="189" />
+			<entry class="" argb="255,55,164,200" value="190" />
+			<entry class="" argb="255,42,168,208" value="191" />
+			<entry class="" argb="255,28,173,216" value="192" />
+			<entry class="" argb="255,13,177,224" value="193" />
+			<entry class="" argb="255,3,181,230" value="194" />
+			<entry class="" argb="255,21,185,236" value="195" />
+			<entry class="" argb="255,40,189,241" value="196" />
+			<entry class="" argb="255,60,193,246" value="197" />
+			<entry class="" argb="255,81,196,249" value="198" />
+			<entry class="" argb="255,103,199,251" value="199" />
+			<entry class="" argb="255,125,202,253" value="200" />
+			<entry class="" argb="255,147,204,253" value="201" />
+			<entry class="" argb="255,170,207,253" value="202" />
+			<entry class="" argb="255,193,209,252" value="203" />
+			<entry class="" argb="255,216,211,250" value="204" />
+			<entry class="" argb="255,239,212,247" value="205" />
+			<entry class="" argb="255,249,214,243" value="206" />
+			<entry class="" argb="255,228,215,238" value="207" />
+			<entry class="" argb="255,207,216,232" value="208" />
+			<entry class="" argb="255,187,216,226" value="209" />
+			<entry class="" argb="255,168,216,218" value="210" />
+			<entry class="" argb="255,151,216,211" value="211" />
+			<entry class="" argb="255,134,216,202" value="212" />
+			<entry class="" argb="255,119,216,193" value="213" />
+			<entry class="" argb="255,106,215,184" value="214" />
+			<entry class="" argb="255,95,214,174" value="215" />
+			<entry class="" argb="255,85,213,163" value="216" />
+			<entry class="" argb="255,77,212,153" value="217" />
+			<entry class="" argb="255,71,210,142" value="218" />
+			<entry class="" argb="255,67,208,131" value="219" />
+			<entry class="" argb="255,65,206,120" value="220" />
+			<entry class="" argb="255,66,203,109" value="221" />
+			<entry class="" argb="255,68,201,99" value="222" />
+			<entry class="" argb="255,72,198,88" value="223" />
+			<entry class="" argb="255,79,194,78" value="224" />
+			<entry class="" argb="255,87,191,68" value="225" />
+			<entry class="" argb="255,98,187,59" value="226" />
+			<entry class="" argb="255,110,184,50" value="227" />
+			<entry class="" argb="255,124,180,41" value="228" />
+			<entry class="" argb="255,140,175,33" value="229" />
+			<entry class="" argb="255,158,171,26" value="230" />
+			<entry class="" argb="255,177,166,20" value="231" />
+			<entry class="" argb="255,197,161,14" value="232" />
+			<entry class="" argb="255,219,156,13" value="233" />
+			<entry class="" argb="255,241,151,6" value="234" />
+			<entry class="" argb="255,245,146,3" value="235" />
+			<entry class="" argb="255,221,140,1" value="236" />
+			<entry class="" argb="255,196,135,0" value="237" />
+			<entry class="" argb="255,171,129,0" value="238" />
+			<entry class="" argb="255,145,123,0" value="239" />
+			<entry class="" argb="255,120,117,2" value="240" />
+			<entry class="" argb="255,95,111,5" value="241" />
+			<entry class="" argb="255,70,104,8" value="242" />
+			<entry class="" argb="255,46,98,12" value="243" />
+			<entry class="" argb="255,23,91,18" value="244" />
+			<entry class="" argb="255,1,85,24" value="245" />
+			<entry class="" argb="255,19,78,30" value="246" />
+			<entry class="" argb="255,39,71,38" value="247" />
+			<entry class="" argb="255,57,64,46" value="248" />
+			<entry class="" argb="255,74,57,55" value="249" />
+			<entry class="" argb="255,89,50,64" value="250" />
+			<entry class="" argb="255,102,44,74" value="251" />
+			<entry class="" argb="255,112,37,84" value="252" />
+			<entry class="" argb="255,121,30,94" value="253" />
+			<entry class="" argb="255,127,23,105" value="254" />
+			<entry class="" argb="255,127,23,105" value="255" />
+		</table>
+	</palette>
+
+	<palette name="haze" interpolate="false">
+		<table>
+			<entry class="" argb="255,167,112,255" value="0" />
+			<entry class="" argb="255,167,112,255" value="1" />
+			<entry class="" argb="255,255,213,254" value="2" />
+			<entry class="" argb="255,254,212,251" value="3" />
+			<entry class="" argb="255,249,210,250" value="4" />
+			<entry class="" argb="255,247,209,249" value="5" />
+			<entry class="" argb="255,245,208,248" value="6" />
+			<entry class="" argb="255,243,206,247" value="7" />
+			<entry class="" argb="255,242,205,246" value="8" />
+			<entry class="" argb="255,240,203,245" value="9" />
+			<entry class="" argb="255,238,202,244" value="10" />
+			<entry class="" argb="255,236,200,243" value="11" />
+			<entry class="" argb="255,234,199,242" value="12" />
+			<entry class="" argb="255,232,198,241" value="13" />
+			<entry class="" argb="255,230,196,240" value="14" />
+			<entry class="" argb="255,228,195,239" value="15" />
+			<entry class="" argb="255,226,193,238" value="16" />
+			<entry class="" argb="255,224,192,237" value="17" />
+			<entry class="" argb="255,222,191,236" value="18" />
+			<entry class="" argb="255,220,189,235" value="19" />
+			<entry class="" argb="255,218,188,234" value="20" />
+			<entry class="" argb="255,216,186,233" value="21" />
+			<entry class="" argb="255,214,185,232" value="22" />
+			<entry class="" argb="255,212,183,231" value="23" />
+			<entry class="" argb="255,210,182,230" value="24" />
+			<entry class="" argb="255,208,181,229" value="25" />
+			<entry class="" argb="255,206,179,228" value="26" />
+			<entry class="" argb="255,204,178,227" value="27" />
+			<entry class="" argb="255,202,176,226" value="28" />
+			<entry class="" argb="255,200,175,225" value="29" />
+			<entry class="" argb="255,198,174,224" value="30" />
+			<entry class="" argb="255,196,172,223" value="31" />
+			<entry class="" argb="255,194,171,222" value="32" />
+			<entry class="" argb="255,192,169,221" value="33" />
+			<entry class="" argb="255,190,168,220" value="34" />
+			<entry class="" argb="255,188,166,219" value="35" />
+			<entry class="" argb="255,186,165,218" value="36" />
+			<entry class="" argb="255,184,164,217" value="37" />
+			<entry class="" argb="255,182,162,216" value="38" />
+			<entry class="" argb="255,180,161,215" value="39" />
+			<entry class="" argb="255,178,159,214" value="40" />
+			<entry class="" argb="255,176,158,213" value="41" />
+			<entry class="" argb="255,174,157,212" value="42" />
+			<entry class="" argb="255,172,155,211" value="43" />
+			<entry class="" argb="255,170,154,210" value="44" />
+			<entry class="" argb="255,168,152,209" value="45" />
+			<entry class="" argb="255,166,151,208" value="46" />
+			<entry class="" argb="255,164,150,207" value="47" />
+			<entry class="" argb="255,162,148,206" value="48" />
+			<entry class="" argb="255,160,147,205" value="49" />
+			<entry class="" argb="255,158,145,204" value="50" />
+			<entry class="" argb="255,156,144,203" value="51" />
+			<entry class="" argb="255,154,142,202" value="52" />
+			<entry class="" argb="255,152,141,201" value="53" />
+			<entry class="" argb="255,150,140,200" value="54" />
+			<entry class="" argb="255,148,138,199" value="55" />
+			<entry class="" argb="255,146,137,198" value="56" />
+			<entry class="" argb="255,144,135,197" value="57" />
+			<entry class="" argb="255,142,134,196" value="58" />
+			<entry class="" argb="255,141,133,195" value="59" />
+			<entry class="" argb="255,139,131,194" value="60" />
+			<entry class="" argb="255,137,130,193" value="61" />
+			<entry class="" argb="255,135,128,192" value="62" />
+			<entry class="" argb="255,133,127,191" value="63" />
+			<entry class="" argb="255,131,125,190" value="64" />
+			<entry class="" argb="255,129,124,189" value="65" />
+			<entry class="" argb="255,127,123,188" value="66" />
+			<entry class="" argb="255,125,121,187" value="67" />
+			<entry class="" argb="255,123,120,186" value="68" />
+			<entry class="" argb="255,121,118,185" value="69" />
+			<entry class="" argb="255,119,117,184" value="70" />
+			<entry class="" argb="255,117,116,183" value="71" />
+			<entry class="" argb="255,115,114,182" value="72" />
+			<entry class="" argb="255,113,113,181" value="73" />
+			<entry class="" argb="255,111,111,180" value="74" />
+			<entry class="" argb="255,109,110,179" value="75" />
+			<entry class="" argb="255,107,109,178" value="76" />
+			<entry class="" argb="255,105,107,177" value="77" />
+			<entry class="" argb="255,103,106,176" value="78" />
+			<entry class="" argb="255,101,104,175" value="79" />
+			<entry class="" argb="255,99,103,174" value="80" />
+			<entry class="" argb="255,97,101,173" value="81" />
+			<entry class="" argb="255,95,100,172" value="82" />
+			<entry class="" argb="255,93,99,171" value="83" />
+			<entry class="" argb="255,91,97,170" value="84" />
+			<entry class="" argb="255,89,96,169" value="85" />
+			<entry class="" argb="255,87,94,168" value="86" />
+			<entry class="" argb="255,85,93,167" value="87" />
+			<entry class="" argb="255,83,92,166" value="88" />
+			<entry class="" argb="255,81,90,165" value="89" />
+			<entry class="" argb="255,79,89,164" value="90" />
+			<entry class="" argb="255,77,87,163" value="91" />
+			<entry class="" argb="255,75,86,162" value="92" />
+			<entry class="" argb="255,73,84,161" value="93" />
+			<entry class="" argb="255,71,83,160" value="94" />
+			<entry class="" argb="255,69,82,159" value="95" />
+			<entry class="" argb="255,67,80,158" value="96" />
+			<entry class="" argb="255,65,79,157" value="97" />
+			<entry class="" argb="255,63,77,156" value="98" />
+			<entry class="" argb="255,61,76,155" value="99" />
+			<entry class="" argb="255,59,75,154" value="100" />
+			<entry class="" argb="255,57,73,153" value="101" />
+			<entry class="" argb="255,55,72,152" value="102" />
+			<entry class="" argb="255,53,70,151" value="103" />
+			<entry class="" argb="255,51,69,150" value="104" />
+			<entry class="" argb="255,49,68,149" value="105" />
+			<entry class="" argb="255,47,66,148" value="106" />
+			<entry class="" argb="255,45,65,147" value="107" />
+			<entry class="" argb="255,43,63,146" value="108" />
+			<entry class="" argb="255,41,62,145" value="109" />
+			<entry class="" argb="255,40,60,144" value="110" />
+			<entry class="" argb="255,38,59,143" value="111" />
+			<entry class="" argb="255,36,58,142" value="112" />
+			<entry class="" argb="255,34,56,141" value="113" />
+			<entry class="" argb="255,32,55,140" value="114" />
+			<entry class="" argb="255,30,53,139" value="115" />
+			<entry class="" argb="255,28,52,138" value="116" />
+			<entry class="" argb="255,26,51,137" value="117" />
+			<entry class="" argb="255,24,49,136" value="118" />
+			<entry class="" argb="255,22,48,135" value="119" />
+			<entry class="" argb="255,20,46,134" value="120" />
+			<entry class="" argb="255,18,45,133" value="121" />
+			<entry class="" argb="255,16,43,132" value="122" />
+			<entry class="" argb="255,14,42,131" value="123" />
+			<entry class="" argb="255,12,41,130" value="124" />
+			<entry class="" argb="255,13,39,129" value="125" />
+			<entry class="" argb="255,8,38,128" value="126" />
+			<entry class="" argb="255,6,36,127" value="127" />
+			<entry class="" argb="255,4,35,126" value="128" />
+			<entry class="" argb="255,4,34,125" value="129" />
+			<entry class="" argb="255,6,32,124" value="130" />
+			<entry class="" argb="255,7,31,123" value="131" />
+			<entry class="" argb="255,9,32,122" value="132" />
+			<entry class="" argb="255,11,33,121" value="133" />
+			<entry class="" argb="255,13,34,120" value="134" />
+			<entry class="" argb="255,15,36,119" value="135" />
+			<entry class="" argb="255,17,37,118" value="136" />
+			<entry class="" argb="255,19,38,117" value="137" />
+			<entry class="" argb="255,21,40,116" value="138" />
+			<entry class="" argb="255,23,41,115" value="139" />
+			<entry class="" argb="255,25,42,114" value="140" />
+			<entry class="" argb="255,27,44,113" value="141" />
+			<entry class="" argb="255,29,45,112" value="142" />
+			<entry class="" argb="255,31,46,111" value="143" />
+			<entry class="" argb="255,33,48,110" value="144" />
+			<entry class="" argb="255,35,49,109" value="145" />
+			<entry class="" argb="255,37,50,108" value="146" />
+			<entry class="" argb="255,39,52,107" value="147" />
+			<entry class="" argb="255,41,53,106" value="148" />
+			<entry class="" argb="255,43,54,105" value="149" />
+			<entry class="" argb="255,45,56,104" value="150" />
+			<entry class="" argb="255,47,57,103" value="151" />
+			<entry class="" argb="255,49,58,102" value="152" />
+			<entry class="" argb="255,51,60,101" value="153" />
+			<entry class="" argb="255,53,61,100" value="154" />
+			<entry class="" argb="255,55,62,99" value="155" />
+			<entry class="" argb="255,57,64,98" value="156" />
+			<entry class="" argb="255,59,65,97" value="157" />
+			<entry class="" argb="255,61,66,96" value="158" />
+			<entry class="" argb="255,63,68,95" value="159" />
+			<entry class="" argb="255,65,69,94" value="160" />
+			<entry class="" argb="255,67,70,93" value="161" />
+			<entry class="" argb="255,69,72,92" value="162" />
+			<entry class="" argb="255,71,73,91" value="163" />
+			<entry class="" argb="255,73,75,90" value="164" />
+			<entry class="" argb="255,75,76,89" value="165" />
+			<entry class="" argb="255,77,77,88" value="166" />
+			<entry class="" argb="255,79,79,87" value="167" />
+			<entry class="" argb="255,81,80,86" value="168" />
+			<entry class="" argb="255,83,81,85" value="169" />
+			<entry class="" argb="255,85,83,84" value="170" />
+			<entry class="" argb="255,87,84,83" value="171" />
+			<entry class="" argb="255,89,85,82" value="172" />
+			<entry class="" argb="255,91,87,81" value="173" />
+			<entry class="" argb="255,93,88,80" value="174" />
+			<entry class="" argb="255,95,89,79" value="175" />
+			<entry class="" argb="255,97,91,78" value="176" />
+			<entry class="" argb="255,99,92,77" value="177" />
+			<entry class="" argb="255,101,93,76" value="178" />
+			<entry class="" argb="255,103,95,75" value="179" />
+			<entry class="" argb="255,105,96,74" value="180" />
+			<entry class="" argb="255,107,97,73" value="181" />
+			<entry class="" argb="255,108,99,72" value="182" />
+			<entry class="" argb="255,110,100,71" value="183" />
+			<entry class="" argb="255,112,101,70" value="184" />
+			<entry class="" argb="255,114,103,69" value="185" />
+			<entry class="" argb="255,116,104,68" value="186" />
+			<entry class="" argb="255,118,105,67" value="187" />
+			<entry class="" argb="255,120,107,66" value="188" />
+			<entry class="" argb="255,122,108,65" value="189" />
+			<entry class="" argb="255,124,109,64" value="190" />
+			<entry class="" argb="255,126,111,63" value="191" />
+			<entry class="" argb="255,128,112,62" value="192" />
+			<entry class="" argb="255,130,113,61" value="193" />
+			<entry class="" argb="255,132,115,60" value="194" />
+			<entry class="" argb="255,134,116,59" value="195" />
+			<entry class="" argb="255,136,117,58" value="196" />
+			<entry class="" argb="255,138,119,57" value="197" />
+			<entry class="" argb="255,140,120,56" value="198" />
+			<entry class="" argb="255,142,121,55" value="199" />
+			<entry class="" argb="255,144,123,54" value="200" />
+			<entry class="" argb="255,146,124,53" value="201" />
+			<entry class="" argb="255,148,125,52" value="202" />
+			<entry class="" argb="255,150,127,51" value="203" />
+			<entry class="" argb="255,152,128,50" value="204" />
+			<entry class="" argb="255,154,129,49" value="205" />
+			<entry class="" argb="255,156,131,48" value="206" />
+			<entry class="" argb="255,158,132,47" value="207" />
+			<entry class="" argb="255,160,133,46" value="208" />
+			<entry class="" argb="255,162,135,45" value="209" />
+			<entry class="" argb="255,164,136,44" value="210" />
+			<entry class="" argb="255,166,137,43" value="211" />
+			<entry class="" argb="255,168,139,42" value="212" />
+			<entry class="" argb="255,170,140,41" value="213" />
+			<entry class="" argb="255,172,141,40" value="214" />
+			<entry class="" argb="255,174,143,39" value="215" />
+			<entry class="" argb="255,176,144,38" value="216" />
+			<entry class="" argb="255,178,145,37" value="217" />
+			<entry class="" argb="255,180,147,36" value="218" />
+			<entry class="" argb="255,182,148,35" value="219" />
+			<entry class="" argb="255,184,149,34" value="220" />
+			<entry class="" argb="255,186,151,33" value="221" />
+			<entry class="" argb="255,188,152,32" value="222" />
+			<entry class="" argb="255,190,153,31" value="223" />
+			<entry class="" argb="255,192,155,30" value="224" />
+			<entry class="" argb="255,194,156,29" value="225" />
+			<entry class="" argb="255,196,157,28" value="226" />
+			<entry class="" argb="255,198,159,27" value="227" />
+			<entry class="" argb="255,200,160,26" value="228" />
+			<entry class="" argb="255,202,161,25" value="229" />
+			<entry class="" argb="255,204,163,24" value="230" />
+			<entry class="" argb="255,206,164,23" value="231" />
+			<entry class="" argb="255,208,165,22" value="232" />
+			<entry class="" argb="255,210,167,21" value="233" />
+			<entry class="" argb="255,211,168,20" value="234" />
+			<entry class="" argb="255,213,169,19" value="235" />
+			<entry class="" argb="255,215,171,18" value="236" />
+			<entry class="" argb="255,217,172,17" value="237" />
+			<entry class="" argb="255,219,173,16" value="238" />
+			<entry class="" argb="255,221,175,15" value="239" />
+			<entry class="" argb="255,223,176,14" value="240" />
+			<entry class="" argb="255,225,177,13" value="241" />
+			<entry class="" argb="255,227,179,12" value="242" />
+			<entry class="" argb="255,229,180,11" value="243" />
+			<entry class="" argb="255,231,181,13" value="244" />
+			<entry class="" argb="255,233,183,9" value="245" />
+			<entry class="" argb="255,235,184,8" value="246" />
+			<entry class="" argb="255,237,185,7" value="247" />
+			<entry class="" argb="255,239,187,6" value="248" />
+			<entry class="" argb="255,241,188,5" value="249" />
+			<entry class="" argb="255,243,189,4" value="250" />
+			<entry class="" argb="255,245,191,3" value="251" />
+			<entry class="" argb="255,247,192,2" value="252" />
+			<entry class="" argb="255,249,193,1" value="253" />
+			<entry class="" argb="255,251,195,0" value="254" />
+			<entry class="" argb="255,251,195,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="mac-style" interpolate="false">
+		<table>
+			<entry class="" argb="255,124,0,255" value="0" />
+			<entry class="" argb="255,124,0,255" value="1" />
+			<entry class="" argb="255,120,0,254" value="2" />
+			<entry class="" argb="255,115,0,255" value="3" />
+			<entry class="" argb="255,111,0,254" value="4" />
+			<entry class="" argb="255,106,0,255" value="5" />
+			<entry class="" argb="255,102,0,254" value="6" />
+			<entry class="" argb="255,97,0,255" value="7" />
+			<entry class="" argb="255,93,0,254" value="8" />
+			<entry class="" argb="255,88,0,255" value="9" />
+			<entry class="" argb="255,84,0,254" value="10" />
+			<entry class="" argb="255,79,0,255" value="11" />
+			<entry class="" argb="255,75,0,254" value="12" />
+			<entry class="" argb="255,70,0,255" value="13" />
+			<entry class="" argb="255,66,0,254" value="14" />
+			<entry class="" argb="255,61,0,255" value="15" />
+			<entry class="" argb="255,57,0,254" value="16" />
+			<entry class="" argb="255,52,0,255" value="17" />
+			<entry class="" argb="255,48,0,254" value="18" />
+			<entry class="" argb="255,43,0,255" value="19" />
+			<entry class="" argb="255,39,0,254" value="20" />
+			<entry class="" argb="255,34,0,255" value="21" />
+			<entry class="" argb="255,30,0,254" value="22" />
+			<entry class="" argb="255,25,0,255" value="23" />
+			<entry class="" argb="255,21,0,254" value="24" />
+			<entry class="" argb="255,16,0,255" value="25" />
+			<entry class="" argb="255,12,0,254" value="26" />
+			<entry class="" argb="255,7,0,255" value="27" />
+			<entry class="" argb="255,3,0,254" value="28" />
+			<entry class="" argb="255,0,2,255" value="29" />
+			<entry class="" argb="255,0,6,254" value="30" />
+			<entry class="" argb="255,0,11,255" value="31" />
+			<entry class="" argb="255,0,15,254" value="32" />
+			<entry class="" argb="255,0,20,255" value="33" />
+			<entry class="" argb="255,0,24,254" value="34" />
+			<entry class="" argb="255,0,29,255" value="35" />
+			<entry class="" argb="255,0,33,254" value="36" />
+			<entry class="" argb="255,0,38,255" value="37" />
+			<entry class="" argb="255,0,42,254" value="38" />
+			<entry class="" argb="255,0,47,255" value="39" />
+			<entry class="" argb="255,0,51,254" value="40" />
+			<entry class="" argb="255,0,56,255" value="41" />
+			<entry class="" argb="255,0,60,254" value="42" />
+			<entry class="" argb="255,0,65,255" value="43" />
+			<entry class="" argb="255,0,69,254" value="44" />
+			<entry class="" argb="255,0,74,255" value="45" />
+			<entry class="" argb="255,0,78,254" value="46" />
+			<entry class="" argb="255,0,83,255" value="47" />
+			<entry class="" argb="255,0,87,254" value="48" />
+			<entry class="" argb="255,0,92,255" value="49" />
+			<entry class="" argb="255,0,96,254" value="50" />
+			<entry class="" argb="255,0,101,255" value="51" />
+			<entry class="" argb="255,0,105,254" value="52" />
+			<entry class="" argb="255,0,110,255" value="53" />
+			<entry class="" argb="255,0,114,254" value="54" />
+			<entry class="" argb="255,0,119,255" value="55" />
+			<entry class="" argb="255,0,122,254" value="56" />
+			<entry class="" argb="255,0,128,255" value="57" />
+			<entry class="" argb="255,0,131,254" value="58" />
+			<entry class="" argb="255,0,137,255" value="59" />
+			<entry class="" argb="255,0,140,254" value="60" />
+			<entry class="" argb="255,0,146,255" value="61" />
+			<entry class="" argb="255,0,149,254" value="62" />
+			<entry class="" argb="255,0,155,255" value="63" />
+			<entry class="" argb="255,0,158,254" value="64" />
+			<entry class="" argb="255,0,164,255" value="65" />
+			<entry class="" argb="255,0,167,254" value="66" />
+			<entry class="" argb="255,0,173,255" value="67" />
+			<entry class="" argb="255,0,176,254" value="68" />
+			<entry class="" argb="255,0,182,255" value="69" />
+			<entry class="" argb="255,0,185,254" value="70" />
+			<entry class="" argb="255,0,191,255" value="71" />
+			<entry class="" argb="255,0,194,254" value="72" />
+			<entry class="" argb="255,0,200,255" value="73" />
+			<entry class="" argb="255,0,203,254" value="74" />
+			<entry class="" argb="255,0,209,255" value="75" />
+			<entry class="" argb="255,0,212,254" value="76" />
+			<entry class="" argb="255,0,218,255" value="77" />
+			<entry class="" argb="255,0,221,254" value="78" />
+			<entry class="" argb="255,0,227,255" value="79" />
+			<entry class="" argb="255,0,230,254" value="80" />
+			<entry class="" argb="255,0,236,255" value="81" />
+			<entry class="" argb="255,0,240,254" value="82" />
+			<entry class="" argb="255,0,245,255" value="83" />
+			<entry class="" argb="255,0,249,254" value="84" />
+			<entry class="" argb="255,0,254,255" value="85" />
+			<entry class="" argb="255,0,254,250" value="86" />
+			<entry class="" argb="255,0,255,247" value="87" />
+			<entry class="" argb="255,0,254,241" value="88" />
+			<entry class="" argb="255,0,255,238" value="89" />
+			<entry class="" argb="255,0,254,232" value="90" />
+			<entry class="" argb="255,0,255,229" value="91" />
+			<entry class="" argb="255,0,254,223" value="92" />
+			<entry class="" argb="255,0,255,220" value="93" />
+			<entry class="" argb="255,0,254,214" value="94" />
+			<entry class="" argb="255,0,255,211" value="95" />
+			<entry class="" argb="255,0,254,205" value="96" />
+			<entry class="" argb="255,0,255,202" value="97" />
+			<entry class="" argb="255,0,254,196" value="98" />
+			<entry class="" argb="255,0,255,193" value="99" />
+			<entry class="" argb="255,0,254,187" value="100" />
+			<entry class="" argb="255,0,255,184" value="101" />
+			<entry class="" argb="255,0,254,178" value="102" />
+			<entry class="" argb="255,0,255,175" value="103" />
+			<entry class="" argb="255,0,254,169" value="104" />
+			<entry class="" argb="255,0,255,166" value="105" />
+			<entry class="" argb="255,0,254,160" value="106" />
+			<entry class="" argb="255,0,255,157" value="107" />
+			<entry class="" argb="255,0,254,151" value="108" />
+			<entry class="" argb="255,0,255,148" value="109" />
+			<entry class="" argb="255,0,254,142" value="110" />
+			<entry class="" argb="255,0,255,139" value="111" />
+			<entry class="" argb="255,0,254,133" value="112" />
+			<entry class="" argb="255,0,255,130" value="113" />
+			<entry class="" argb="255,0,254,125" value="114" />
+			<entry class="" argb="255,0,255,121" value="115" />
+			<entry class="" argb="255,0,254,116" value="116" />
+			<entry class="" argb="255,0,255,112" value="117" />
+			<entry class="" argb="255,0,254,107" value="118" />
+			<entry class="" argb="255,0,255,103" value="119" />
+			<entry class="" argb="255,0,254,98" value="120" />
+			<entry class="" argb="255,0,255,94" value="121" />
+			<entry class="" argb="255,0,254,89" value="122" />
+			<entry class="" argb="255,0,255,85" value="123" />
+			<entry class="" argb="255,0,254,80" value="124" />
+			<entry class="" argb="255,0,255,76" value="125" />
+			<entry class="" argb="255,0,254,71" value="126" />
+			<entry class="" argb="255,0,255,67" value="127" />
+			<entry class="" argb="255,0,254,62" value="128" />
+			<entry class="" argb="255,0,255,58" value="129" />
+			<entry class="" argb="255,0,254,53" value="130" />
+			<entry class="" argb="255,0,255,49" value="131" />
+			<entry class="" argb="255,0,254,44" value="132" />
+			<entry class="" argb="255,0,255,40" value="133" />
+			<entry class="" argb="255,0,254,35" value="134" />
+			<entry class="" argb="255,0,255,31" value="135" />
+			<entry class="" argb="255,0,254,26" value="136" />
+			<entry class="" argb="255,0,255,22" value="137" />
+			<entry class="" argb="255,0,254,17" value="138" />
+			<entry class="" argb="255,0,255,13" value="139" />
+			<entry class="" argb="255,0,254,8" value="140" />
+			<entry class="" argb="255,0,255,4" value="141" />
+			<entry class="" argb="255,1,254,0" value="142" />
+			<entry class="" argb="255,5,255,0" value="143" />
+			<entry class="" argb="255,13,254,0" value="144" />
+			<entry class="" argb="255,14,255,0" value="145" />
+			<entry class="" argb="255,19,254,0" value="146" />
+			<entry class="" argb="255,23,255,0" value="147" />
+			<entry class="" argb="255,28,254,0" value="148" />
+			<entry class="" argb="255,32,255,0" value="149" />
+			<entry class="" argb="255,37,254,0" value="150" />
+			<entry class="" argb="255,41,255,0" value="151" />
+			<entry class="" argb="255,46,254,0" value="152" />
+			<entry class="" argb="255,50,255,0" value="153" />
+			<entry class="" argb="255,55,254,0" value="154" />
+			<entry class="" argb="255,59,255,0" value="155" />
+			<entry class="" argb="255,64,254,0" value="156" />
+			<entry class="" argb="255,68,255,0" value="157" />
+			<entry class="" argb="255,73,254,0" value="158" />
+			<entry class="" argb="255,77,255,0" value="159" />
+			<entry class="" argb="255,82,254,0" value="160" />
+			<entry class="" argb="255,86,255,0" value="161" />
+			<entry class="" argb="255,91,254,0" value="162" />
+			<entry class="" argb="255,95,255,0" value="163" />
+			<entry class="" argb="255,100,254,0" value="164" />
+			<entry class="" argb="255,104,255,0" value="165" />
+			<entry class="" argb="255,109,254,0" value="166" />
+			<entry class="" argb="255,113,255,0" value="167" />
+			<entry class="" argb="255,118,254,0" value="168" />
+			<entry class="" argb="255,123,255,0" value="169" />
+			<entry class="" argb="255,126,254,0" value="170" />
+			<entry class="" argb="255,132,255,0" value="171" />
+			<entry class="" argb="255,135,254,0" value="172" />
+			<entry class="" argb="255,141,255,0" value="173" />
+			<entry class="" argb="255,144,254,0" value="174" />
+			<entry class="" argb="255,150,255,0" value="175" />
+			<entry class="" argb="255,153,254,0" value="176" />
+			<entry class="" argb="255,159,255,0" value="177" />
+			<entry class="" argb="255,162,254,0" value="178" />
+			<entry class="" argb="255,168,255,0" value="179" />
+			<entry class="" argb="255,171,254,0" value="180" />
+			<entry class="" argb="255,177,255,0" value="181" />
+			<entry class="" argb="255,180,254,0" value="182" />
+			<entry class="" argb="255,186,255,0" value="183" />
+			<entry class="" argb="255,189,254,0" value="184" />
+			<entry class="" argb="255,195,255,0" value="185" />
+			<entry class="" argb="255,198,254,0" value="186" />
+			<entry class="" argb="255,204,255,0" value="187" />
+			<entry class="" argb="255,207,254,0" value="188" />
+			<entry class="" argb="255,213,255,0" value="189" />
+			<entry class="" argb="255,216,254,0" value="190" />
+			<entry class="" argb="255,222,255,0" value="191" />
+			<entry class="" argb="255,225,254,0" value="192" />
+			<entry class="" argb="255,231,255,0" value="193" />
+			<entry class="" argb="255,234,254,0" value="194" />
+			<entry class="" argb="255,240,255,0" value="195" />
+			<entry class="" argb="255,243,254,0" value="196" />
+			<entry class="" argb="255,249,255,0" value="197" />
+			<entry class="" argb="255,252,254,0" value="198" />
+			<entry class="" argb="255,255,252,0" value="199" />
+			<entry class="" argb="255,254,247,0" value="200" />
+			<entry class="" argb="255,255,243,0" value="201" />
+			<entry class="" argb="255,254,238,0" value="202" />
+			<entry class="" argb="255,255,234,0" value="203" />
+			<entry class="" argb="255,254,229,0" value="204" />
+			<entry class="" argb="255,255,225,0" value="205" />
+			<entry class="" argb="255,254,220,0" value="206" />
+			<entry class="" argb="255,255,216,0" value="207" />
+			<entry class="" argb="255,254,211,0" value="208" />
+			<entry class="" argb="255,255,207,0" value="209" />
+			<entry class="" argb="255,254,202,0" value="210" />
+			<entry class="" argb="255,255,198,0" value="211" />
+			<entry class="" argb="255,254,193,0" value="212" />
+			<entry class="" argb="255,255,189,0" value="213" />
+			<entry class="" argb="255,254,184,0" value="214" />
+			<entry class="" argb="255,255,180,0" value="215" />
+			<entry class="" argb="255,254,175,0" value="216" />
+			<entry class="" argb="255,255,171,0" value="217" />
+			<entry class="" argb="255,254,166,0" value="218" />
+			<entry class="" argb="255,255,162,0" value="219" />
+			<entry class="" argb="255,254,157,0" value="220" />
+			<entry class="" argb="255,255,153,0" value="221" />
+			<entry class="" argb="255,254,148,0" value="222" />
+			<entry class="" argb="255,255,144,0" value="223" />
+			<entry class="" argb="255,254,139,0" value="224" />
+			<entry class="" argb="255,255,135,0" value="225" />
+			<entry class="" argb="255,254,131,0" value="226" />
+			<entry class="" argb="255,255,126,0" value="227" />
+			<entry class="" argb="255,254,122,0" value="228" />
+			<entry class="" argb="255,255,117,0" value="229" />
+			<entry class="" argb="255,254,113,0" value="230" />
+			<entry class="" argb="255,255,108,0" value="231" />
+			<entry class="" argb="255,254,104,0" value="232" />
+			<entry class="" argb="255,255,99,0" value="233" />
+			<entry class="" argb="255,254,95,0" value="234" />
+			<entry class="" argb="255,255,90,0" value="235" />
+			<entry class="" argb="255,254,86,0" value="236" />
+			<entry class="" argb="255,255,81,0" value="237" />
+			<entry class="" argb="255,254,77,0" value="238" />
+			<entry class="" argb="255,255,72,0" value="239" />
+			<entry class="" argb="255,254,68,0" value="240" />
+			<entry class="" argb="255,255,63,0" value="241" />
+			<entry class="" argb="255,254,59,0" value="242" />
+			<entry class="" argb="255,255,54,0" value="243" />
+			<entry class="" argb="255,254,50,0" value="244" />
+			<entry class="" argb="255,255,45,0" value="245" />
+			<entry class="" argb="255,254,41,0" value="246" />
+			<entry class="" argb="255,255,36,0" value="247" />
+			<entry class="" argb="255,254,32,0" value="248" />
+			<entry class="" argb="255,255,27,0" value="249" />
+			<entry class="" argb="255,254,23,0" value="250" />
+			<entry class="" argb="255,255,18,0" value="251" />
+			<entry class="" argb="255,254,14,0" value="252" />
+			<entry class="" argb="255,255,9,0" value="253" />
+			<entry class="" argb="255,255,5,0" value="254" />
+			<entry class="" argb="255,255,5,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="nature" interpolate="false">
+		<table>
+			<entry class="" argb="255,105,246,234" value="0" />
+			<entry class="" argb="255,105,246,234" value="1" />
+			<entry class="" argb="255,105,246,234" value="2" />
+			<entry class="" argb="255,105,246,234" value="3" />
+			<entry class="" argb="255,105,246,234" value="4" />
+			<entry class="" argb="255,105,246,234" value="5" />
+			<entry class="" argb="255,105,246,234" value="6" />
+			<entry class="" argb="255,105,246,234" value="7" />
+			<entry class="" argb="255,105,246,234" value="8" />
+			<entry class="" argb="255,110,251,222" value="9" />
+			<entry class="" argb="255,114,253,210" value="10" />
+			<entry class="" argb="255,123,244,186" value="11" />
+			<entry class="" argb="255,127,239,175" value="12" />
+			<entry class="" argb="255,131,235,164" value="13" />
+			<entry class="" argb="255,135,231,153" value="14" />
+			<entry class="" argb="255,143,224,132" value="15" />
+			<entry class="" argb="255,147,222,122" value="16" />
+			<entry class="" argb="255,150,219,113" value="17" />
+			<entry class="" argb="255,157,216,95" value="18" />
+			<entry class="" argb="255,160,214,87" value="19" />
+			<entry class="" argb="255,163,214,79" value="20" />
+			<entry class="" argb="255,165,213,72" value="21" />
+			<entry class="" argb="255,170,214,59" value="22" />
+			<entry class="" argb="255,172,215,54" value="23" />
+			<entry class="" argb="255,174,216,49" value="24" />
+			<entry class="" argb="255,176,218,44" value="25" />
+			<entry class="" argb="255,179,223,37" value="26" />
+			<entry class="" argb="255,180,226,34" value="27" />
+			<entry class="" argb="255,180,229,32" value="28" />
+			<entry class="" argb="255,181,237,30" value="29" />
+			<entry class="" argb="255,182,241,29" value="30" />
+			<entry class="" argb="255,181,246,30" value="31" />
+			<entry class="" argb="255,181,251,31" value="32" />
+			<entry class="" argb="255,180,248,34" value="33" />
+			<entry class="" argb="255,179,243,37" value="34" />
+			<entry class="" argb="255,177,237,40" value="35" />
+			<entry class="" argb="255,174,225,49" value="36" />
+			<entry class="" argb="255,172,218,54" value="37" />
+			<entry class="" argb="255,170,212,59" value="38" />
+			<entry class="" argb="255,168,205,66" value="39" />
+			<entry class="" argb="255,163,192,79" value="40" />
+			<entry class="" argb="255,160,186,87" value="41" />
+			<entry class="" argb="255,157,179,95" value="42" />
+			<entry class="" argb="255,154,173,104" value="43" />
+			<entry class="" argb="255,147,160,122" value="44" />
+			<entry class="" argb="255,143,154,132" value="45" />
+			<entry class="" argb="255,139,148,142" value="46" />
+			<entry class="" argb="255,131,137,164" value="47" />
+			<entry class="" argb="255,127,132,175" value="48" />
+			<entry class="" argb="255,123,127,186" value="49" />
+			<entry class="" argb="255,119,122,198" value="50" />
+			<entry class="" argb="255,110,113,222" value="51" />
+			<entry class="" argb="255,105,109,234" value="52" />
+			<entry class="" argb="255,100,105,246" value="53" />
+			<entry class="" argb="255,96,102,251" value="54" />
+			<entry class="" argb="255,87,96,227" value="55" />
+			<entry class="" argb="255,82,94,214" value="56" />
+			<entry class="" argb="255,77,92,202" value="57" />
+			<entry class="" argb="255,68,89,177" value="58" />
+			<entry class="" argb="255,63,88,165" value="59" />
+			<entry class="" argb="255,59,88,153" value="60" />
+			<entry class="" argb="255,54,88,141" value="61" />
+			<entry class="" argb="255,46,88,118" value="62" />
+			<entry class="" argb="255,42,89,107" value="63" />
+			<entry class="" argb="255,38,90,96" value="64" />
+			<entry class="" argb="255,30,93,75" value="65" />
+			<entry class="" argb="255,26,95,65" value="66" />
+			<entry class="" argb="255,23,97,56" value="67" />
+			<entry class="" argb="255,19,99,47" value="68" />
+			<entry class="" argb="255,13,104,30" value="69" />
+			<entry class="" argb="255,13,107,22" value="70" />
+			<entry class="" argb="255,8,110,15" value="71" />
+			<entry class="" argb="255,5,113,9" value="72" />
+			<entry class="" argb="255,1,120,2" value="73" />
+			<entry class="" argb="255,0,124,7" value="74" />
+			<entry class="" argb="255,2,127,12" value="75" />
+			<entry class="" argb="255,5,134,19" value="76" />
+			<entry class="" argb="255,6,138,22" value="77" />
+			<entry class="" argb="255,6,141,24" value="78" />
+			<entry class="" argb="255,7,145,25" value="79" />
+			<entry class="" argb="255,8,152,27" value="80" />
+			<entry class="" argb="255,7,155,26" value="81" />
+			<entry class="" argb="255,7,158,25" value="82" />
+			<entry class="" argb="255,6,164,22" value="83" />
+			<entry class="" argb="255,5,166,19" value="84" />
+			<entry class="" argb="255,3,169,16" value="85" />
+			<entry class="" argb="255,2,171,12" value="86" />
+			<entry class="" argb="255,1,175,2" value="87" />
+			<entry class="" argb="255,3,176,2" value="88" />
+			<entry class="" argb="255,5,178,9" value="89" />
+			<entry class="" argb="255,8,179,15" value="90" />
+			<entry class="" argb="255,13,180,30" value="91" />
+			<entry class="" argb="255,16,180,38" value="92" />
+			<entry class="" argb="255,19,180,47" value="93" />
+			<entry class="" argb="255,26,180,65" value="94" />
+			<entry class="" argb="255,30,179,75" value="95" />
+			<entry class="" argb="255,34,178,85" value="96" />
+			<entry class="" argb="255,38,176,96" value="97" />
+			<entry class="" argb="255,46,173,118" value="98" />
+			<entry class="" argb="255,50,171,129" value="99" />
+			<entry class="" argb="255,54,169,141" value="100" />
+			<entry class="" argb="255,59,166,153" value="101" />
+			<entry class="" argb="255,68,161,177" value="102" />
+			<entry class="" argb="255,73,158,189" value="103" />
+			<entry class="" argb="255,77,154,202" value="104" />
+			<entry class="" argb="255,86,148,226" value="105" />
+			<entry class="" argb="255,91,144,239" value="106" />
+			<entry class="" argb="255,96,140,251" value="107" />
+			<entry class="" argb="255,100,136,246" value="108" />
+			<entry class="" argb="255,110,128,222" value="109" />
+			<entry class="" argb="255,114,124,210" value="110" />
+			<entry class="" argb="255,119,120,198" value="111" />
+			<entry class="" argb="255,127,112,175" value="112" />
+			<entry class="" argb="255,131,108,164" value="113" />
+			<entry class="" argb="255,135,104,153" value="114" />
+			<entry class="" argb="255,139,100,142" value="115" />
+			<entry class="" argb="255,147,92,122" value="116" />
+			<entry class="" argb="255,150,88,113" value="117" />
+			<entry class="" argb="255,154,85,104" value="118" />
+			<entry class="" argb="255,157,81,95" value="119" />
+			<entry class="" argb="255,163,74,79" value="120" />
+			<entry class="" argb="255,165,71,72" value="121" />
+			<entry class="" argb="255,168,68,66" value="122" />
+			<entry class="" argb="255,172,62,54" value="123" />
+			<entry class="" argb="255,174,60,49" value="124" />
+			<entry class="" argb="255,176,57,44" value="125" />
+			<entry class="" argb="255,177,55,40" value="126" />
+			<entry class="" argb="255,180,51,34" value="127" />
+			<entry class="" argb="255,180,50,32" value="128" />
+			<entry class="" argb="255,181,48,31" value="129" />
+			<entry class="" argb="255,182,46,29" value="130" />
+			<entry class="" argb="255,181,45,30" value="131" />
+			<entry class="" argb="255,181,44,31" value="132" />
+			<entry class="" argb="255,180,44,32" value="133" />
+			<entry class="" argb="255,179,43,37" value="134" />
+			<entry class="" argb="255,177,43,40" value="135" />
+			<entry class="" argb="255,176,43,44" value="136" />
+			<entry class="" argb="255,174,44,49" value="137" />
+			<entry class="" argb="255,170,44,59" value="138" />
+			<entry class="" argb="255,168,45,66" value="139" />
+			<entry class="" argb="255,165,46,72" value="140" />
+			<entry class="" argb="255,160,47,87" value="141" />
+			<entry class="" argb="255,157,48,95" value="142" />
+			<entry class="" argb="255,154,49,104" value="143" />
+			<entry class="" argb="255,150,51,113" value="144" />
+			<entry class="" argb="255,143,53,132" value="145" />
+			<entry class="" argb="255,139,54,142" value="146" />
+			<entry class="" argb="255,135,55,153" value="147" />
+			<entry class="" argb="255,127,57,175" value="148" />
+			<entry class="" argb="255,123,59,186" value="149" />
+			<entry class="" argb="255,119,60,198" value="150" />
+			<entry class="" argb="255,114,61,210" value="151" />
+			<entry class="" argb="255,105,63,234" value="152" />
+			<entry class="" argb="255,100,64,246" value="153" />
+			<entry class="" argb="255,96,64,251" value="154" />
+			<entry class="" argb="255,91,65,239" value="155" />
+			<entry class="" argb="255,82,66,214" value="156" />
+			<entry class="" argb="255,77,67,202" value="157" />
+			<entry class="" argb="255,73,67,189" value="158" />
+			<entry class="" argb="255,63,67,165" value="159" />
+			<entry class="" argb="255,59,67,153" value="160" />
+			<entry class="" argb="255,54,67,141" value="161" />
+			<entry class="" argb="255,50,67,129" value="162" />
+			<entry class="" argb="255,42,66,107" value="163" />
+			<entry class="" argb="255,38,66,96" value="164" />
+			<entry class="" argb="255,34,65,85" value="165" />
+			<entry class="" argb="255,30,64,75" value="166" />
+			<entry class="" argb="255,23,62,56" value="167" />
+			<entry class="" argb="255,19,61,47" value="168" />
+			<entry class="" argb="255,16,60,38" value="169" />
+			<entry class="" argb="255,13,58,22" value="170" />
+			<entry class="" argb="255,8,56,15" value="171" />
+			<entry class="" argb="255,5,55,9" value="172" />
+			<entry class="" argb="255,3,53,2" value="173" />
+			<entry class="" argb="255,0,50,7" value="174" />
+			<entry class="" argb="255,2,48,12" value="175" />
+			<entry class="" argb="255,3,46,16" value="176" />
+			<entry class="" argb="255,6,43,22" value="177" />
+			<entry class="" argb="255,6,41,24" value="178" />
+			<entry class="" argb="255,7,39,25" value="179" />
+			<entry class="" argb="255,7,37,26" value="180" />
+			<entry class="" argb="255,7,34,26" value="181" />
+			<entry class="" argb="255,7,32,25" value="182" />
+			<entry class="" argb="255,6,30,24" value="183" />
+			<entry class="" argb="255,6,28,22" value="184" />
+			<entry class="" argb="255,3,25,16" value="185" />
+			<entry class="" argb="255,2,23,12" value="186" />
+			<entry class="" argb="255,0,22,7" value="187" />
+			<entry class="" argb="255,3,19,2" value="188" />
+			<entry class="" argb="255,5,17,9" value="189" />
+			<entry class="" argb="255,8,16,15" value="190" />
+			<entry class="" argb="255,13,15,22" value="191" />
+			<entry class="" argb="255,16,12,38" value="192" />
+			<entry class="" argb="255,19,11,47" value="193" />
+			<entry class="" argb="255,23,13,56" value="194" />
+			<entry class="" argb="255,30,8,75" value="195" />
+			<entry class="" argb="255,34,7,85" value="196" />
+			<entry class="" argb="255,38,6,96" value="197" />
+			<entry class="" argb="255,42,6,107" value="198" />
+			<entry class="" argb="255,50,4,129" value="199" />
+			<entry class="" argb="255,54,4,141" value="200" />
+			<entry class="" argb="255,59,3,153" value="201" />
+			<entry class="" argb="255,63,2,165" value="202" />
+			<entry class="" argb="255,73,1,189" value="203" />
+			<entry class="" argb="255,77,1,202" value="204" />
+			<entry class="" argb="255,82,0,214" value="205" />
+			<entry class="" argb="255,82,0,214" value="206" />
+			<entry class="" argb="255,82,0,214" value="207" />
+			<entry class="" argb="255,82,0,214" value="208" />
+			<entry class="" argb="255,82,0,214" value="209" />
+			<entry class="" argb="255,82,0,214" value="210" />
+			<entry class="" argb="255,82,0,214" value="211" />
+			<entry class="" argb="255,82,0,214" value="212" />
+			<entry class="" argb="255,82,0,214" value="213" />
+			<entry class="" argb="255,82,0,214" value="214" />
+			<entry class="" argb="255,82,0,214" value="215" />
+			<entry class="" argb="255,82,0,214" value="216" />
+			<entry class="" argb="255,82,0,214" value="217" />
+			<entry class="" argb="255,82,0,214" value="218" />
+			<entry class="" argb="255,82,0,214" value="219" />
+			<entry class="" argb="255,82,0,214" value="220" />
+			<entry class="" argb="255,82,0,214" value="221" />
+			<entry class="" argb="255,82,0,214" value="222" />
+			<entry class="" argb="255,82,0,214" value="223" />
+			<entry class="" argb="255,82,0,214" value="224" />
+			<entry class="" argb="255,82,0,214" value="225" />
+			<entry class="" argb="255,82,0,214" value="226" />
+			<entry class="" argb="255,82,0,214" value="227" />
+			<entry class="" argb="255,82,0,214" value="228" />
+			<entry class="" argb="255,82,0,214" value="229" />
+			<entry class="" argb="255,82,0,214" value="230" />
+			<entry class="" argb="255,82,0,214" value="231" />
+			<entry class="" argb="255,82,0,214" value="232" />
+			<entry class="" argb="255,82,0,214" value="233" />
+			<entry class="" argb="255,82,0,214" value="234" />
+			<entry class="" argb="255,82,0,214" value="235" />
+			<entry class="" argb="255,82,0,214" value="236" />
+			<entry class="" argb="255,82,0,214" value="237" />
+			<entry class="" argb="255,82,0,214" value="238" />
+			<entry class="" argb="255,82,0,214" value="239" />
+			<entry class="" argb="255,82,0,214" value="240" />
+			<entry class="" argb="255,82,0,214" value="241" />
+			<entry class="" argb="255,82,0,214" value="242" />
+			<entry class="" argb="255,82,0,214" value="243" />
+			<entry class="" argb="255,82,0,214" value="244" />
+			<entry class="" argb="255,82,0,214" value="245" />
+			<entry class="" argb="255,82,0,214" value="246" />
+			<entry class="" argb="255,82,0,214" value="247" />
+			<entry class="" argb="255,82,0,214" value="248" />
+			<entry class="" argb="255,82,0,214" value="249" />
+			<entry class="" argb="255,82,0,214" value="250" />
+			<entry class="" argb="255,82,0,214" value="251" />
+			<entry class="" argb="255,82,0,214" value="252" />
+			<entry class="" argb="255,0,0,0" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="pastels" interpolate="false">
+		<table>
+			<entry class="" argb="255,255,0,72" value="0" />
+			<entry class="" argb="255,255,0,72" value="1" />
+			<entry class="" argb="255,255,0,74" value="2" />
+			<entry class="" argb="255,255,0,76" value="3" />
+			<entry class="" argb="255,255,0,78" value="4" />
+			<entry class="" argb="255,255,0,80" value="5" />
+			<entry class="" argb="255,255,0,82" value="6" />
+			<entry class="" argb="255,255,0,84" value="7" />
+			<entry class="" argb="255,255,0,86" value="8" />
+			<entry class="" argb="255,255,0,88" value="9" />
+			<entry class="" argb="255,255,0,90" value="10" />
+			<entry class="" argb="255,255,0,91" value="11" />
+			<entry class="" argb="255,255,0,93" value="12" />
+			<entry class="" argb="255,255,0,95" value="13" />
+			<entry class="" argb="255,255,0,97" value="14" />
+			<entry class="" argb="255,255,0,99" value="15" />
+			<entry class="" argb="255,255,0,101" value="16" />
+			<entry class="" argb="255,255,0,103" value="17" />
+			<entry class="" argb="255,255,0,105" value="18" />
+			<entry class="" argb="255,255,0,107" value="19" />
+			<entry class="" argb="255,255,0,109" value="20" />
+			<entry class="" argb="255,255,0,111" value="21" />
+			<entry class="" argb="255,255,0,113" value="22" />
+			<entry class="" argb="255,255,0,115" value="23" />
+			<entry class="" argb="255,255,0,117" value="24" />
+			<entry class="" argb="255,255,0,119" value="25" />
+			<entry class="" argb="255,255,0,121" value="26" />
+			<entry class="" argb="255,255,0,123" value="27" />
+			<entry class="" argb="255,255,0,125" value="28" />
+			<entry class="" argb="255,255,0,127" value="29" />
+			<entry class="" argb="255,255,0,129" value="30" />
+			<entry class="" argb="255,255,0,131" value="31" />
+			<entry class="" argb="255,255,0,133" value="32" />
+			<entry class="" argb="255,255,0,135" value="33" />
+			<entry class="" argb="255,255,0,137" value="34" />
+			<entry class="" argb="255,255,0,139" value="35" />
+			<entry class="" argb="255,255,0,141" value="36" />
+			<entry class="" argb="255,255,0,142" value="37" />
+			<entry class="" argb="255,255,0,144" value="38" />
+			<entry class="" argb="255,255,0,146" value="39" />
+			<entry class="" argb="255,255,0,148" value="40" />
+			<entry class="" argb="255,255,0,150" value="41" />
+			<entry class="" argb="255,255,0,152" value="42" />
+			<entry class="" argb="255,255,0,154" value="43" />
+			<entry class="" argb="255,255,0,156" value="44" />
+			<entry class="" argb="255,255,0,158" value="45" />
+			<entry class="" argb="255,255,0,160" value="46" />
+			<entry class="" argb="255,255,0,162" value="47" />
+			<entry class="" argb="255,255,0,164" value="48" />
+			<entry class="" argb="255,255,0,166" value="49" />
+			<entry class="" argb="255,255,0,168" value="50" />
+			<entry class="" argb="255,255,0,170" value="51" />
+			<entry class="" argb="255,255,0,172" value="52" />
+			<entry class="" argb="255,255,0,174" value="53" />
+			<entry class="" argb="255,255,0,176" value="54" />
+			<entry class="" argb="255,255,0,178" value="55" />
+			<entry class="" argb="255,255,0,180" value="56" />
+			<entry class="" argb="255,255,0,182" value="57" />
+			<entry class="" argb="255,255,0,184" value="58" />
+			<entry class="" argb="255,255,0,186" value="59" />
+			<entry class="" argb="255,255,0,188" value="60" />
+			<entry class="" argb="255,255,0,190" value="61" />
+			<entry class="" argb="255,255,0,191" value="62" />
+			<entry class="" argb="255,255,0,193" value="63" />
+			<entry class="" argb="255,255,0,195" value="64" />
+			<entry class="" argb="255,255,0,197" value="65" />
+			<entry class="" argb="255,255,0,199" value="66" />
+			<entry class="" argb="255,255,0,201" value="67" />
+			<entry class="" argb="255,255,0,203" value="68" />
+			<entry class="" argb="255,255,0,205" value="69" />
+			<entry class="" argb="255,255,0,207" value="70" />
+			<entry class="" argb="255,255,0,209" value="71" />
+			<entry class="" argb="255,255,0,211" value="72" />
+			<entry class="" argb="255,255,0,213" value="73" />
+			<entry class="" argb="255,255,0,215" value="74" />
+			<entry class="" argb="255,255,0,217" value="75" />
+			<entry class="" argb="255,255,0,219" value="76" />
+			<entry class="" argb="255,255,0,221" value="77" />
+			<entry class="" argb="255,255,0,223" value="78" />
+			<entry class="" argb="255,255,0,225" value="79" />
+			<entry class="" argb="255,255,0,227" value="80" />
+			<entry class="" argb="255,255,0,229" value="81" />
+			<entry class="" argb="255,255,0,231" value="82" />
+			<entry class="" argb="255,255,0,233" value="83" />
+			<entry class="" argb="255,255,0,235" value="84" />
+			<entry class="" argb="255,255,0,237" value="85" />
+			<entry class="" argb="255,255,0,239" value="86" />
+			<entry class="" argb="255,255,0,241" value="87" />
+			<entry class="" argb="255,255,0,242" value="88" />
+			<entry class="" argb="255,255,0,244" value="89" />
+			<entry class="" argb="255,255,0,246" value="90" />
+			<entry class="" argb="255,255,0,248" value="91" />
+			<entry class="" argb="255,255,0,250" value="92" />
+			<entry class="" argb="255,255,0,252" value="93" />
+			<entry class="" argb="255,255,0,254" value="94" />
+			<entry class="" argb="255,253,0,255" value="95" />
+			<entry class="" argb="255,251,0,255" value="96" />
+			<entry class="" argb="255,249,0,255" value="97" />
+			<entry class="" argb="255,247,0,255" value="98" />
+			<entry class="" argb="255,245,0,255" value="99" />
+			<entry class="" argb="255,243,0,255" value="100" />
+			<entry class="" argb="255,241,0,255" value="101" />
+			<entry class="" argb="255,239,0,255" value="102" />
+			<entry class="" argb="255,237,0,255" value="103" />
+			<entry class="" argb="255,235,0,255" value="104" />
+			<entry class="" argb="255,233,0,255" value="105" />
+			<entry class="" argb="255,231,0,255" value="106" />
+			<entry class="" argb="255,229,0,255" value="107" />
+			<entry class="" argb="255,227,0,255" value="108" />
+			<entry class="" argb="255,225,0,255" value="109" />
+			<entry class="" argb="255,223,0,255" value="110" />
+			<entry class="" argb="255,221,0,255" value="111" />
+			<entry class="" argb="255,219,0,255" value="112" />
+			<entry class="" argb="255,217,0,255" value="113" />
+			<entry class="" argb="255,216,0,255" value="114" />
+			<entry class="" argb="255,214,0,255" value="115" />
+			<entry class="" argb="255,212,0,255" value="116" />
+			<entry class="" argb="255,210,0,255" value="117" />
+			<entry class="" argb="255,208,0,255" value="118" />
+			<entry class="" argb="255,206,0,255" value="119" />
+			<entry class="" argb="255,204,0,255" value="120" />
+			<entry class="" argb="255,202,0,255" value="121" />
+			<entry class="" argb="255,200,0,255" value="122" />
+			<entry class="" argb="255,198,0,255" value="123" />
+			<entry class="" argb="255,196,0,255" value="124" />
+			<entry class="" argb="255,194,0,255" value="125" />
+			<entry class="" argb="255,192,0,255" value="126" />
+			<entry class="" argb="255,190,0,255" value="127" />
+			<entry class="" argb="255,188,0,255" value="128" />
+			<entry class="" argb="255,186,0,255" value="129" />
+			<entry class="" argb="255,0,140,255" value="130" />
+			<entry class="" argb="255,0,146,255" value="131" />
+			<entry class="" argb="255,0,152,255" value="132" />
+			<entry class="" argb="255,0,157,255" value="133" />
+			<entry class="" argb="255,0,163,255" value="134" />
+			<entry class="" argb="255,0,169,255" value="135" />
+			<entry class="" argb="255,0,174,255" value="136" />
+			<entry class="" argb="255,0,180,255" value="137" />
+			<entry class="" argb="255,0,186,255" value="138" />
+			<entry class="" argb="255,0,192,255" value="139" />
+			<entry class="" argb="255,0,197,255" value="140" />
+			<entry class="" argb="255,0,203,255" value="141" />
+			<entry class="" argb="255,0,209,255" value="142" />
+			<entry class="" argb="255,0,214,255" value="143" />
+			<entry class="" argb="255,0,220,255" value="144" />
+			<entry class="" argb="255,0,226,255" value="145" />
+			<entry class="" argb="255,0,232,255" value="146" />
+			<entry class="" argb="255,0,237,255" value="147" />
+			<entry class="" argb="255,0,243,255" value="148" />
+			<entry class="" argb="255,0,249,255" value="149" />
+			<entry class="" argb="255,0,255,255" value="150" />
+			<entry class="" argb="255,0,255,249" value="151" />
+			<entry class="" argb="255,0,255,243" value="152" />
+			<entry class="" argb="255,0,255,237" value="153" />
+			<entry class="" argb="255,0,255,232" value="154" />
+			<entry class="" argb="255,0,255,226" value="155" />
+			<entry class="" argb="255,0,255,220" value="156" />
+			<entry class="" argb="255,0,255,214" value="157" />
+			<entry class="" argb="255,0,255,209" value="158" />
+			<entry class="" argb="255,0,255,203" value="159" />
+			<entry class="" argb="255,0,255,197" value="160" />
+			<entry class="" argb="255,0,255,192" value="161" />
+			<entry class="" argb="255,0,255,186" value="162" />
+			<entry class="" argb="255,0,255,180" value="163" />
+			<entry class="" argb="255,0,255,174" value="164" />
+			<entry class="" argb="255,0,255,169" value="165" />
+			<entry class="" argb="255,0,255,163" value="166" />
+			<entry class="" argb="255,0,255,157" value="167" />
+			<entry class="" argb="255,0,255,152" value="168" />
+			<entry class="" argb="255,0,255,146" value="169" />
+			<entry class="" argb="255,0,255,140" value="170" />
+			<entry class="" argb="255,0,255,134" value="171" />
+			<entry class="" argb="255,0,255,129" value="172" />
+			<entry class="" argb="255,0,255,123" value="173" />
+			<entry class="" argb="255,0,255,117" value="174" />
+			<entry class="" argb="255,0,255,112" value="175" />
+			<entry class="" argb="255,0,255,106" value="176" />
+			<entry class="" argb="255,0,255,100" value="177" />
+			<entry class="" argb="255,0,255,94" value="178" />
+			<entry class="" argb="255,0,255,89" value="179" />
+			<entry class="" argb="255,0,255,83" value="180" />
+			<entry class="" argb="255,0,255,77" value="181" />
+			<entry class="" argb="255,0,255,71" value="182" />
+			<entry class="" argb="255,0,255,66" value="183" />
+			<entry class="" argb="255,0,255,60" value="184" />
+			<entry class="" argb="255,0,255,54" value="185" />
+			<entry class="" argb="255,0,255,49" value="186" />
+			<entry class="" argb="255,0,255,43" value="187" />
+			<entry class="" argb="255,0,255,37" value="188" />
+			<entry class="" argb="255,0,255,31" value="189" />
+			<entry class="" argb="255,0,255,26" value="190" />
+			<entry class="" argb="255,0,255,20" value="191" />
+			<entry class="" argb="255,0,255,14" value="192" />
+			<entry class="" argb="255,0,255,9" value="193" />
+			<entry class="" argb="255,0,255,3" value="194" />
+			<entry class="" argb="255,2,255,0" value="195" />
+			<entry class="" argb="255,8,255,0" value="196" />
+			<entry class="" argb="255,13,255,0" value="197" />
+			<entry class="" argb="255,19,255,0" value="198" />
+			<entry class="" argb="255,25,255,0" value="199" />
+			<entry class="" argb="255,30,255,0" value="200" />
+			<entry class="" argb="255,36,255,0" value="201" />
+			<entry class="" argb="255,42,255,0" value="202" />
+			<entry class="" argb="255,48,255,0" value="203" />
+			<entry class="" argb="255,53,255,0" value="204" />
+			<entry class="" argb="255,59,255,0" value="205" />
+			<entry class="" argb="255,65,255,0" value="206" />
+			<entry class="" argb="255,71,255,0" value="207" />
+			<entry class="" argb="255,76,255,0" value="208" />
+			<entry class="" argb="255,82,255,0" value="209" />
+			<entry class="" argb="255,88,255,0" value="210" />
+			<entry class="" argb="255,93,255,0" value="211" />
+			<entry class="" argb="255,99,255,0" value="212" />
+			<entry class="" argb="255,105,255,0" value="213" />
+			<entry class="" argb="255,111,255,0" value="214" />
+			<entry class="" argb="255,116,255,0" value="215" />
+			<entry class="" argb="255,122,255,0" value="216" />
+			<entry class="" argb="255,128,255,0" value="217" />
+			<entry class="" argb="255,133,255,0" value="218" />
+			<entry class="" argb="255,139,255,0" value="219" />
+			<entry class="" argb="255,145,255,0" value="220" />
+			<entry class="" argb="255,151,255,0" value="221" />
+			<entry class="" argb="255,156,255,0" value="222" />
+			<entry class="" argb="255,162,255,0" value="223" />
+			<entry class="" argb="255,168,255,0" value="224" />
+			<entry class="" argb="255,173,255,0" value="225" />
+			<entry class="" argb="255,179,255,0" value="226" />
+			<entry class="" argb="255,185,255,0" value="227" />
+			<entry class="" argb="255,191,255,0" value="228" />
+			<entry class="" argb="255,196,255,0" value="229" />
+			<entry class="" argb="255,202,255,0" value="230" />
+			<entry class="" argb="255,208,255,0" value="231" />
+			<entry class="" argb="255,214,255,0" value="232" />
+			<entry class="" argb="255,219,255,0" value="233" />
+			<entry class="" argb="255,225,255,0" value="234" />
+			<entry class="" argb="255,231,255,0" value="235" />
+			<entry class="" argb="255,236,255,0" value="236" />
+			<entry class="" argb="255,242,255,0" value="237" />
+			<entry class="" argb="255,248,255,0" value="238" />
+			<entry class="" argb="255,254,255,0" value="239" />
+			<entry class="" argb="255,255,250,0" value="240" />
+			<entry class="" argb="255,255,244,0" value="241" />
+			<entry class="" argb="255,255,238,0" value="242" />
+			<entry class="" argb="255,255,233,0" value="243" />
+			<entry class="" argb="255,255,227,0" value="244" />
+			<entry class="" argb="255,255,221,0" value="245" />
+			<entry class="" argb="255,255,215,0" value="246" />
+			<entry class="" argb="255,255,210,0" value="247" />
+			<entry class="" argb="255,255,204,0" value="248" />
+			<entry class="" argb="255,255,198,0" value="249" />
+			<entry class="" argb="255,255,193,0" value="250" />
+			<entry class="" argb="255,255,187,0" value="251" />
+			<entry class="" argb="255,255,181,0" value="252" />
+			<entry class="" argb="255,255,175,0" value="253" />
+			<entry class="" argb="255,255,170,0" value="254" />
+			<entry class="" argb="255,255,170,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="plasma" interpolate="false">
+		<table>
+			<entry class="" argb="255,2,19,7" value="0" />
+			<entry class="" argb="255,2,19,7" value="1" />
+			<entry class="" argb="255,3,20,11" value="2" />
+			<entry class="" argb="255,4,22,15" value="3" />
+			<entry class="" argb="255,5,25,19" value="4" />
+			<entry class="" argb="255,6,29,22" value="5" />
+			<entry class="" argb="255,7,33,26" value="6" />
+			<entry class="" argb="255,8,38,30" value="7" />
+			<entry class="" argb="255,9,44,34" value="8" />
+			<entry class="" argb="255,13,51,39" value="9" />
+			<entry class="" argb="255,11,58,43" value="10" />
+			<entry class="" argb="255,13,65,47" value="11" />
+			<entry class="" argb="255,14,73,51" value="12" />
+			<entry class="" argb="255,15,81,55" value="13" />
+			<entry class="" argb="255,16,89,59" value="14" />
+			<entry class="" argb="255,17,98,63" value="15" />
+			<entry class="" argb="255,18,106,67" value="16" />
+			<entry class="" argb="255,19,115,71" value="17" />
+			<entry class="" argb="255,21,124,75" value="18" />
+			<entry class="" argb="255,22,132,78" value="19" />
+			<entry class="" argb="255,23,140,82" value="20" />
+			<entry class="" argb="255,24,148,86" value="21" />
+			<entry class="" argb="255,25,155,90" value="22" />
+			<entry class="" argb="255,26,162,93" value="23" />
+			<entry class="" argb="255,27,169,97" value="24" />
+			<entry class="" argb="255,28,175,100" value="25" />
+			<entry class="" argb="255,30,180,103" value="26" />
+			<entry class="" argb="255,31,184,107" value="27" />
+			<entry class="" argb="255,32,188,110" value="28" />
+			<entry class="" argb="255,33,191,113" value="29" />
+			<entry class="" argb="255,34,193,116" value="30" />
+			<entry class="" argb="255,35,194,119" value="31" />
+			<entry class="" argb="255,36,195,122" value="32" />
+			<entry class="" argb="255,37,194,125" value="33" />
+			<entry class="" argb="255,38,193,128" value="34" />
+			<entry class="" argb="255,39,191,130" value="35" />
+			<entry class="" argb="255,39,188,133" value="36" />
+			<entry class="" argb="255,40,184,136" value="37" />
+			<entry class="" argb="255,41,180,139" value="38" />
+			<entry class="" argb="255,42,175,141" value="39" />
+			<entry class="" argb="255,43,169,144" value="40" />
+			<entry class="" argb="255,44,162,147" value="41" />
+			<entry class="" argb="255,45,155,150" value="42" />
+			<entry class="" argb="255,46,148,153" value="43" />
+			<entry class="" argb="255,46,140,156" value="44" />
+			<entry class="" argb="255,47,132,159" value="45" />
+			<entry class="" argb="255,48,124,162" value="46" />
+			<entry class="" argb="255,49,115,165" value="47" />
+			<entry class="" argb="255,50,107,169" value="48" />
+			<entry class="" argb="255,51,98,172" value="49" />
+			<entry class="" argb="255,52,89,176" value="50" />
+			<entry class="" argb="255,53,81,180" value="51" />
+			<entry class="" argb="255,54,73,184" value="52" />
+			<entry class="" argb="255,55,65,188" value="53" />
+			<entry class="" argb="255,56,58,192" value="54" />
+			<entry class="" argb="255,57,51,196" value="55" />
+			<entry class="" argb="255,58,44,201" value="56" />
+			<entry class="" argb="255,59,38,205" value="57" />
+			<entry class="" argb="255,60,33,210" value="58" />
+			<entry class="" argb="255,61,29,215" value="59" />
+			<entry class="" argb="255,62,25,220" value="60" />
+			<entry class="" argb="255,63,22,225" value="61" />
+			<entry class="" argb="255,65,20,230" value="62" />
+			<entry class="" argb="255,66,19,235" value="63" />
+			<entry class="" argb="255,67,19,241" value="64" />
+			<entry class="" argb="255,68,19,246" value="65" />
+			<entry class="" argb="255,70,20,251" value="66" />
+			<entry class="" argb="255,71,22,253" value="67" />
+			<entry class="" argb="255,72,25,248" value="68" />
+			<entry class="" argb="255,74,29,243" value="69" />
+			<entry class="" argb="255,75,33,237" value="70" />
+			<entry class="" argb="255,77,38,232" value="71" />
+			<entry class="" argb="255,78,44,227" value="72" />
+			<entry class="" argb="255,79,51,222" value="73" />
+			<entry class="" argb="255,81,58,217" value="74" />
+			<entry class="" argb="255,82,65,212" value="75" />
+			<entry class="" argb="255,84,73,207" value="76" />
+			<entry class="" argb="255,85,81,202" value="77" />
+			<entry class="" argb="255,86,89,198" value="78" />
+			<entry class="" argb="255,88,98,194" value="79" />
+			<entry class="" argb="255,89,107,190" value="80" />
+			<entry class="" argb="255,90,115,186" value="81" />
+			<entry class="" argb="255,92,124,182" value="82" />
+			<entry class="" argb="255,93,132,179" value="83" />
+			<entry class="" argb="255,94,140,176" value="84" />
+			<entry class="" argb="255,95,148,172" value="85" />
+			<entry class="" argb="255,97,155,170" value="86" />
+			<entry class="" argb="255,98,162,167" value="87" />
+			<entry class="" argb="255,99,169,165" value="88" />
+			<entry class="" argb="255,100,175,162" value="89" />
+			<entry class="" argb="255,101,180,160" value="90" />
+			<entry class="" argb="255,102,184,158" value="91" />
+			<entry class="" argb="255,103,188,157" value="92" />
+			<entry class="" argb="255,103,191,155" value="93" />
+			<entry class="" argb="255,104,193,154" value="94" />
+			<entry class="" argb="255,105,194,152" value="95" />
+			<entry class="" argb="255,106,195,151" value="96" />
+			<entry class="" argb="255,107,194,150" value="97" />
+			<entry class="" argb="255,107,193,148" value="98" />
+			<entry class="" argb="255,108,191,147" value="99" />
+			<entry class="" argb="255,108,188,146" value="100" />
+			<entry class="" argb="255,109,184,144" value="101" />
+			<entry class="" argb="255,110,180,143" value="102" />
+			<entry class="" argb="255,110,175,141" value="103" />
+			<entry class="" argb="255,111,169,140" value="104" />
+			<entry class="" argb="255,111,162,138" value="105" />
+			<entry class="" argb="255,112,155,136" value="106" />
+			<entry class="" argb="255,113,148,134" value="107" />
+			<entry class="" argb="255,113,140,132" value="108" />
+			<entry class="" argb="255,114,132,129" value="109" />
+			<entry class="" argb="255,114,124,126" value="110" />
+			<entry class="" argb="255,115,115,123" value="111" />
+			<entry class="" argb="255,116,106,120" value="112" />
+			<entry class="" argb="255,117,98,116" value="113" />
+			<entry class="" argb="255,117,89,113" value="114" />
+			<entry class="" argb="255,118,81,108" value="115" />
+			<entry class="" argb="255,119,73,104" value="116" />
+			<entry class="" argb="255,120,65,99" value="117" />
+			<entry class="" argb="255,121,58,94" value="118" />
+			<entry class="" argb="255,122,51,89" value="119" />
+			<entry class="" argb="255,123,44,83" value="120" />
+			<entry class="" argb="255,124,38,78" value="121" />
+			<entry class="" argb="255,125,33,72" value="122" />
+			<entry class="" argb="255,127,29,65" value="123" />
+			<entry class="" argb="255,128,25,59" value="124" />
+			<entry class="" argb="255,129,22,53" value="125" />
+			<entry class="" argb="255,131,20,46" value="126" />
+			<entry class="" argb="255,132,19,39" value="127" />
+			<entry class="" argb="255,134,19,32" value="128" />
+			<entry class="" argb="255,135,19,25" value="129" />
+			<entry class="" argb="255,137,20,18" value="130" />
+			<entry class="" argb="255,138,22,11" value="131" />
+			<entry class="" argb="255,140,25,5" value="132" />
+			<entry class="" argb="255,142,29,253" value="133" />
+			<entry class="" argb="255,143,33,246" value="134" />
+			<entry class="" argb="255,145,38,239" value="135" />
+			<entry class="" argb="255,147,44,233" value="136" />
+			<entry class="" argb="255,149,51,227" value="137" />
+			<entry class="" argb="255,150,58,221" value="138" />
+			<entry class="" argb="255,152,65,215" value="139" />
+			<entry class="" argb="255,154,73,210" value="140" />
+			<entry class="" argb="255,155,81,205" value="141" />
+			<entry class="" argb="255,157,89,200" value="142" />
+			<entry class="" argb="255,158,98,195" value="143" />
+			<entry class="" argb="255,160,107,191" value="144" />
+			<entry class="" argb="255,161,115,188" value="145" />
+			<entry class="" argb="255,163,124,184" value="146" />
+			<entry class="" argb="255,164,132,181" value="147" />
+			<entry class="" argb="255,166,140,178" value="148" />
+			<entry class="" argb="255,167,148,176" value="149" />
+			<entry class="" argb="255,168,155,174" value="150" />
+			<entry class="" argb="255,169,162,172" value="151" />
+			<entry class="" argb="255,170,169,171" value="152" />
+			<entry class="" argb="255,171,175,170" value="153" />
+			<entry class="" argb="255,172,180,169" value="154" />
+			<entry class="" argb="255,173,184,169" value="155" />
+			<entry class="" argb="255,174,188,168" value="156" />
+			<entry class="" argb="255,174,191,168" value="157" />
+			<entry class="" argb="255,175,193,168" value="158" />
+			<entry class="" argb="255,175,194,168" value="159" />
+			<entry class="" argb="255,176,195,169" value="160" />
+			<entry class="" argb="255,176,194,169" value="161" />
+			<entry class="" argb="255,177,193,169" value="162" />
+			<entry class="" argb="255,177,191,169" value="163" />
+			<entry class="" argb="255,178,188,170" value="164" />
+			<entry class="" argb="255,178,184,170" value="165" />
+			<entry class="" argb="255,178,180,170" value="166" />
+			<entry class="" argb="255,178,175,169" value="167" />
+			<entry class="" argb="255,179,169,169" value="168" />
+			<entry class="" argb="255,179,162,168" value="169" />
+			<entry class="" argb="255,179,155,167" value="170" />
+			<entry class="" argb="255,180,148,166" value="171" />
+			<entry class="" argb="255,180,140,164" value="172" />
+			<entry class="" argb="255,180,132,162" value="173" />
+			<entry class="" argb="255,181,124,160" value="174" />
+			<entry class="" argb="255,181,115,157" value="175" />
+			<entry class="" argb="255,182,106,154" value="176" />
+			<entry class="" argb="255,182,98,150" value="177" />
+			<entry class="" argb="255,183,89,146" value="178" />
+			<entry class="" argb="255,184,81,141" value="179" />
+			<entry class="" argb="255,184,73,136" value="180" />
+			<entry class="" argb="255,185,65,131" value="181" />
+			<entry class="" argb="255,186,58,125" value="182" />
+			<entry class="" argb="255,187,51,119" value="183" />
+			<entry class="" argb="255,188,44,112" value="184" />
+			<entry class="" argb="255,190,38,106" value="185" />
+			<entry class="" argb="255,191,33,98" value="186" />
+			<entry class="" argb="255,192,29,91" value="187" />
+			<entry class="" argb="255,194,25,83" value="188" />
+			<entry class="" argb="255,195,22,75" value="189" />
+			<entry class="" argb="255,197,20,67" value="190" />
+			<entry class="" argb="255,198,19,58" value="191" />
+			<entry class="" argb="255,200,19,50" value="192" />
+			<entry class="" argb="255,202,19,41" value="193" />
+			<entry class="" argb="255,204,20,33" value="194" />
+			<entry class="" argb="255,206,22,24" value="195" />
+			<entry class="" argb="255,208,25,16" value="196" />
+			<entry class="" argb="255,210,29,8" value="197" />
+			<entry class="" argb="255,212,33,255" value="198" />
+			<entry class="" argb="255,214,38,247" value="199" />
+			<entry class="" argb="255,216,44,239" value="200" />
+			<entry class="" argb="255,218,51,232" value="201" />
+			<entry class="" argb="255,220,58,225" value="202" />
+			<entry class="" argb="255,222,65,219" value="203" />
+			<entry class="" argb="255,224,73,213" value="204" />
+			<entry class="" argb="255,225,81,207" value="205" />
+			<entry class="" argb="255,227,89,202" value="206" />
+			<entry class="" argb="255,229,98,197" value="207" />
+			<entry class="" argb="255,231,107,193" value="208" />
+			<entry class="" argb="255,232,115,189" value="209" />
+			<entry class="" argb="255,234,124,186" value="210" />
+			<entry class="" argb="255,236,132,183" value="211" />
+			<entry class="" argb="255,237,140,181" value="212" />
+			<entry class="" argb="255,238,148,179" value="213" />
+			<entry class="" argb="255,239,155,178" value="214" />
+			<entry class="" argb="255,241,162,177" value="215" />
+			<entry class="" argb="255,242,169,177" value="216" />
+			<entry class="" argb="255,242,175,177" value="217" />
+			<entry class="" argb="255,243,180,178" value="218" />
+			<entry class="" argb="255,244,184,179" value="219" />
+			<entry class="" argb="255,245,188,180" value="220" />
+			<entry class="" argb="255,245,191,181" value="221" />
+			<entry class="" argb="255,246,193,183" value="222" />
+			<entry class="" argb="255,246,194,184" value="223" />
+			<entry class="" argb="255,246,195,186" value="224" />
+			<entry class="" argb="255,246,194,188" value="225" />
+			<entry class="" argb="255,246,193,190" value="226" />
+			<entry class="" argb="255,247,191,192" value="227" />
+			<entry class="" argb="255,247,188,193" value="228" />
+			<entry class="" argb="255,247,184,195" value="229" />
+			<entry class="" argb="255,247,180,196" value="230" />
+			<entry class="" argb="255,247,175,197" value="231" />
+			<entry class="" argb="255,247,169,198" value="232" />
+			<entry class="" argb="255,247,162,198" value="233" />
+			<entry class="" argb="255,247,155,198" value="234" />
+			<entry class="" argb="255,247,148,198" value="235" />
+			<entry class="" argb="255,247,140,197" value="236" />
+			<entry class="" argb="255,247,132,195" value="237" />
+			<entry class="" argb="255,247,124,193" value="238" />
+			<entry class="" argb="255,247,115,191" value="239" />
+			<entry class="" argb="255,248,106,188" value="240" />
+			<entry class="" argb="255,248,98,184" value="241" />
+			<entry class="" argb="255,248,89,180" value="242" />
+			<entry class="" argb="255,249,81,175" value="243" />
+			<entry class="" argb="255,250,73,169" value="244" />
+			<entry class="" argb="255,251,65,163" value="245" />
+			<entry class="" argb="255,251,58,156" value="246" />
+			<entry class="" argb="255,252,51,149" value="247" />
+			<entry class="" argb="255,254,44,142" value="248" />
+			<entry class="" argb="255,255,38,133" value="249" />
+			<entry class="" argb="255,254,33,125" value="250" />
+			<entry class="" argb="255,252,29,116" value="251" />
+			<entry class="" argb="255,251,25,107" value="252" />
+			<entry class="" argb="255,249,22,97" value="253" />
+			<entry class="" argb="255,247,20,87" value="254" />
+			<entry class="" argb="255,247,20,87" value="255" />
+		</table>
+	</palette>
+
+	<palette name="prism" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,3,0,0" value="1" />
+			<entry class="" argb="255,7,0,0" value="2" />
+			<entry class="" argb="255,11,0,0" value="3" />
+			<entry class="" argb="255,15,0,0" value="4" />
+			<entry class="" argb="255,19,0,0" value="5" />
+			<entry class="" argb="255,22,0,0" value="6" />
+			<entry class="" argb="255,26,0,0" value="7" />
+			<entry class="" argb="255,30,0,0" value="8" />
+			<entry class="" argb="255,34,0,0" value="9" />
+			<entry class="" argb="255,38,0,0" value="10" />
+			<entry class="" argb="255,41,0,0" value="11" />
+			<entry class="" argb="255,45,0,0" value="12" />
+			<entry class="" argb="255,49,0,0" value="13" />
+			<entry class="" argb="255,53,0,0" value="14" />
+			<entry class="" argb="255,57,0,0" value="15" />
+			<entry class="" argb="255,60,0,0" value="16" />
+			<entry class="" argb="255,64,0,0" value="17" />
+			<entry class="" argb="255,68,0,0" value="18" />
+			<entry class="" argb="255,72,0,0" value="19" />
+			<entry class="" argb="255,76,0,0" value="20" />
+			<entry class="" argb="255,79,0,0" value="21" />
+			<entry class="" argb="255,83,0,0" value="22" />
+			<entry class="" argb="255,87,0,0" value="23" />
+			<entry class="" argb="255,91,0,0" value="24" />
+			<entry class="" argb="255,95,0,0" value="25" />
+			<entry class="" argb="255,98,0,0" value="26" />
+			<entry class="" argb="255,102,0,0" value="27" />
+			<entry class="" argb="255,106,0,0" value="28" />
+			<entry class="" argb="255,110,0,0" value="29" />
+			<entry class="" argb="255,114,0,0" value="30" />
+			<entry class="" argb="255,117,0,0" value="31" />
+			<entry class="" argb="255,121,0,0" value="32" />
+			<entry class="" argb="255,125,0,0" value="33" />
+			<entry class="" argb="255,129,0,0" value="34" />
+			<entry class="" argb="255,133,0,0" value="35" />
+			<entry class="" argb="255,137,0,0" value="36" />
+			<entry class="" argb="255,140,0,0" value="37" />
+			<entry class="" argb="255,144,0,0" value="38" />
+			<entry class="" argb="255,148,0,0" value="39" />
+			<entry class="" argb="255,152,0,0" value="40" />
+			<entry class="" argb="255,156,0,0" value="41" />
+			<entry class="" argb="255,159,0,0" value="42" />
+			<entry class="" argb="255,163,0,0" value="43" />
+			<entry class="" argb="255,167,0,0" value="44" />
+			<entry class="" argb="255,171,0,0" value="45" />
+			<entry class="" argb="255,175,0,0" value="46" />
+			<entry class="" argb="255,178,0,0" value="47" />
+			<entry class="" argb="255,182,0,0" value="48" />
+			<entry class="" argb="255,186,0,0" value="49" />
+			<entry class="" argb="255,190,0,0" value="50" />
+			<entry class="" argb="255,194,0,0" value="51" />
+			<entry class="" argb="255,197,0,0" value="52" />
+			<entry class="" argb="255,201,0,0" value="53" />
+			<entry class="" argb="255,205,0,0" value="54" />
+			<entry class="" argb="255,209,0,0" value="55" />
+			<entry class="" argb="255,213,0,0" value="56" />
+			<entry class="" argb="255,216,0,0" value="57" />
+			<entry class="" argb="255,220,0,0" value="58" />
+			<entry class="" argb="255,224,0,0" value="59" />
+			<entry class="" argb="255,228,0,0" value="60" />
+			<entry class="" argb="255,232,0,0" value="61" />
+			<entry class="" argb="255,235,0,0" value="62" />
+			<entry class="" argb="255,239,0,0" value="63" />
+			<entry class="" argb="255,243,0,0" value="64" />
+			<entry class="" argb="255,247,3,0" value="65" />
+			<entry class="" argb="255,251,7,0" value="66" />
+			<entry class="" argb="255,255,11,0" value="67" />
+			<entry class="" argb="255,251,15,0" value="68" />
+			<entry class="" argb="255,247,19,0" value="69" />
+			<entry class="" argb="255,243,23,0" value="70" />
+			<entry class="" argb="255,239,27,0" value="71" />
+			<entry class="" argb="255,235,31,0" value="72" />
+			<entry class="" argb="255,230,35,0" value="73" />
+			<entry class="" argb="255,226,39,0" value="74" />
+			<entry class="" argb="255,222,43,0" value="75" />
+			<entry class="" argb="255,218,47,0" value="76" />
+			<entry class="" argb="255,214,51,0" value="77" />
+			<entry class="" argb="255,210,55,0" value="78" />
+			<entry class="" argb="255,205,59,0" value="79" />
+			<entry class="" argb="255,201,63,0" value="80" />
+			<entry class="" argb="255,197,67,0" value="81" />
+			<entry class="" argb="255,193,71,0" value="82" />
+			<entry class="" argb="255,189,75,0" value="83" />
+			<entry class="" argb="255,184,79,0" value="84" />
+			<entry class="" argb="255,180,83,0" value="85" />
+			<entry class="" argb="255,176,87,0" value="86" />
+			<entry class="" argb="255,172,91,0" value="87" />
+			<entry class="" argb="255,168,95,0" value="88" />
+			<entry class="" argb="255,164,99,0" value="89" />
+			<entry class="" argb="255,159,103,0" value="90" />
+			<entry class="" argb="255,155,107,0" value="91" />
+			<entry class="" argb="255,151,111,0" value="92" />
+			<entry class="" argb="255,147,115,0" value="93" />
+			<entry class="" argb="255,143,119,0" value="94" />
+			<entry class="" argb="255,138,123,0" value="95" />
+			<entry class="" argb="255,134,127,0" value="96" />
+			<entry class="" argb="255,130,131,0" value="97" />
+			<entry class="" argb="255,126,135,0" value="98" />
+			<entry class="" argb="255,122,139,0" value="99" />
+			<entry class="" argb="255,118,143,0" value="100" />
+			<entry class="" argb="255,113,147,0" value="101" />
+			<entry class="" argb="255,109,151,0" value="102" />
+			<entry class="" argb="255,105,155,0" value="103" />
+			<entry class="" argb="255,101,159,0" value="104" />
+			<entry class="" argb="255,97,163,0" value="105" />
+			<entry class="" argb="255,92,167,0" value="106" />
+			<entry class="" argb="255,88,171,0" value="107" />
+			<entry class="" argb="255,84,175,0" value="108" />
+			<entry class="" argb="255,80,179,0" value="109" />
+			<entry class="" argb="255,76,183,0" value="110" />
+			<entry class="" argb="255,72,187,0" value="111" />
+			<entry class="" argb="255,67,191,0" value="112" />
+			<entry class="" argb="255,63,195,0" value="113" />
+			<entry class="" argb="255,59,199,0" value="114" />
+			<entry class="" argb="255,55,203,0" value="115" />
+			<entry class="" argb="255,51,207,0" value="116" />
+			<entry class="" argb="255,46,211,0" value="117" />
+			<entry class="" argb="255,42,215,0" value="118" />
+			<entry class="" argb="255,38,219,0" value="119" />
+			<entry class="" argb="255,34,223,0" value="120" />
+			<entry class="" argb="255,30,227,0" value="121" />
+			<entry class="" argb="255,26,231,0" value="122" />
+			<entry class="" argb="255,21,235,0" value="123" />
+			<entry class="" argb="255,17,239,0" value="124" />
+			<entry class="" argb="255,13,243,0" value="125" />
+			<entry class="" argb="255,9,247,0" value="126" />
+			<entry class="" argb="255,5,251,3" value="127" />
+			<entry class="" argb="255,0,255,7" value="128" />
+			<entry class="" argb="255,0,251,11" value="129" />
+			<entry class="" argb="255,0,247,15" value="130" />
+			<entry class="" argb="255,0,243,19" value="131" />
+			<entry class="" argb="255,0,239,23" value="132" />
+			<entry class="" argb="255,0,235,27" value="133" />
+			<entry class="" argb="255,0,231,30" value="134" />
+			<entry class="" argb="255,0,227,34" value="135" />
+			<entry class="" argb="255,0,223,38" value="136" />
+			<entry class="" argb="255,0,219,42" value="137" />
+			<entry class="" argb="255,0,215,46" value="138" />
+			<entry class="" argb="255,0,211,50" value="139" />
+			<entry class="" argb="255,0,207,54" value="140" />
+			<entry class="" argb="255,0,203,57" value="141" />
+			<entry class="" argb="255,0,199,61" value="142" />
+			<entry class="" argb="255,0,195,65" value="143" />
+			<entry class="" argb="255,0,191,69" value="144" />
+			<entry class="" argb="255,0,187,73" value="145" />
+			<entry class="" argb="255,0,183,77" value="146" />
+			<entry class="" argb="255,0,179,81" value="147" />
+			<entry class="" argb="255,0,175,85" value="148" />
+			<entry class="" argb="255,0,170,88" value="149" />
+			<entry class="" argb="255,0,166,92" value="150" />
+			<entry class="" argb="255,0,162,96" value="151" />
+			<entry class="" argb="255,0,158,100" value="152" />
+			<entry class="" argb="255,0,154,104" value="153" />
+			<entry class="" argb="255,0,150,108" value="154" />
+			<entry class="" argb="255,0,146,112" value="155" />
+			<entry class="" argb="255,0,142,115" value="156" />
+			<entry class="" argb="255,0,138,119" value="157" />
+			<entry class="" argb="255,0,134,123" value="158" />
+			<entry class="" argb="255,0,130,127" value="159" />
+			<entry class="" argb="255,0,126,131" value="160" />
+			<entry class="" argb="255,0,122,135" value="161" />
+			<entry class="" argb="255,0,118,139" value="162" />
+			<entry class="" argb="255,0,114,142" value="163" />
+			<entry class="" argb="255,0,110,146" value="164" />
+			<entry class="" argb="255,0,106,150" value="165" />
+			<entry class="" argb="255,0,102,154" value="166" />
+			<entry class="" argb="255,0,98,158" value="167" />
+			<entry class="" argb="255,0,94,162" value="168" />
+			<entry class="" argb="255,0,90,166" value="169" />
+			<entry class="" argb="255,0,85,170" value="170" />
+			<entry class="" argb="255,0,81,173" value="171" />
+			<entry class="" argb="255,0,77,177" value="172" />
+			<entry class="" argb="255,0,73,181" value="173" />
+			<entry class="" argb="255,0,69,185" value="174" />
+			<entry class="" argb="255,0,65,189" value="175" />
+			<entry class="" argb="255,0,61,193" value="176" />
+			<entry class="" argb="255,0,57,197" value="177" />
+			<entry class="" argb="255,0,53,200" value="178" />
+			<entry class="" argb="255,0,49,204" value="179" />
+			<entry class="" argb="255,0,45,208" value="180" />
+			<entry class="" argb="255,0,41,212" value="181" />
+			<entry class="" argb="255,0,37,216" value="182" />
+			<entry class="" argb="255,0,33,220" value="183" />
+			<entry class="" argb="255,0,29,224" value="184" />
+			<entry class="" argb="255,0,25,227" value="185" />
+			<entry class="" argb="255,0,21,231" value="186" />
+			<entry class="" argb="255,0,17,235" value="187" />
+			<entry class="" argb="255,0,13,239" value="188" />
+			<entry class="" argb="255,0,9,243" value="189" />
+			<entry class="" argb="255,0,5,247" value="190" />
+			<entry class="" argb="255,0,0,251" value="191" />
+			<entry class="" argb="255,0,0,255" value="192" />
+			<entry class="" argb="255,0,0,251" value="193" />
+			<entry class="" argb="255,0,0,247" value="194" />
+			<entry class="" argb="255,0,0,243" value="195" />
+			<entry class="" argb="255,0,0,239" value="196" />
+			<entry class="" argb="255,0,0,235" value="197" />
+			<entry class="" argb="255,0,0,231" value="198" />
+			<entry class="" argb="255,0,0,227" value="199" />
+			<entry class="" argb="255,0,0,223" value="200" />
+			<entry class="" argb="255,0,0,219" value="201" />
+			<entry class="" argb="255,0,0,215" value="202" />
+			<entry class="" argb="255,0,0,211" value="203" />
+			<entry class="" argb="255,0,0,207" value="204" />
+			<entry class="" argb="255,0,0,203" value="205" />
+			<entry class="" argb="255,0,0,199" value="206" />
+			<entry class="" argb="255,0,0,195" value="207" />
+			<entry class="" argb="255,0,0,191" value="208" />
+			<entry class="" argb="255,0,0,187" value="209" />
+			<entry class="" argb="255,0,0,183" value="210" />
+			<entry class="" argb="255,0,0,179" value="211" />
+			<entry class="" argb="255,0,0,175" value="212" />
+			<entry class="" argb="255,0,0,170" value="213" />
+			<entry class="" argb="255,0,0,166" value="214" />
+			<entry class="" argb="255,0,0,162" value="215" />
+			<entry class="" argb="255,0,0,158" value="216" />
+			<entry class="" argb="255,0,0,154" value="217" />
+			<entry class="" argb="255,0,0,150" value="218" />
+			<entry class="" argb="255,0,0,146" value="219" />
+			<entry class="" argb="255,0,0,142" value="220" />
+			<entry class="" argb="255,0,0,138" value="221" />
+			<entry class="" argb="255,0,0,134" value="222" />
+			<entry class="" argb="255,0,0,130" value="223" />
+			<entry class="" argb="255,0,0,126" value="224" />
+			<entry class="" argb="255,0,0,122" value="225" />
+			<entry class="" argb="255,0,0,118" value="226" />
+			<entry class="" argb="255,0,0,114" value="227" />
+			<entry class="" argb="255,0,0,110" value="228" />
+			<entry class="" argb="255,0,0,106" value="229" />
+			<entry class="" argb="255,0,0,102" value="230" />
+			<entry class="" argb="255,0,0,98" value="231" />
+			<entry class="" argb="255,0,0,94" value="232" />
+			<entry class="" argb="255,0,0,90" value="233" />
+			<entry class="" argb="255,0,0,85" value="234" />
+			<entry class="" argb="255,0,0,81" value="235" />
+			<entry class="" argb="255,0,0,77" value="236" />
+			<entry class="" argb="255,0,0,73" value="237" />
+			<entry class="" argb="255,0,0,69" value="238" />
+			<entry class="" argb="255,0,0,65" value="239" />
+			<entry class="" argb="255,0,0,61" value="240" />
+			<entry class="" argb="255,0,0,57" value="241" />
+			<entry class="" argb="255,0,0,53" value="242" />
+			<entry class="" argb="255,0,0,49" value="243" />
+			<entry class="" argb="255,0,0,45" value="244" />
+			<entry class="" argb="255,0,0,41" value="245" />
+			<entry class="" argb="255,0,0,37" value="246" />
+			<entry class="" argb="255,0,0,33" value="247" />
+			<entry class="" argb="255,0,0,29" value="248" />
+			<entry class="" argb="255,0,0,25" value="249" />
+			<entry class="" argb="255,0,0,21" value="250" />
+			<entry class="" argb="255,0,0,17" value="251" />
+			<entry class="" argb="255,0,0,13" value="252" />
+			<entry class="" argb="255,0,0,9" value="253" />
+			<entry class="" argb="255,0,0,5" value="254" />
+			<entry class="" argb="255,0,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="rainbow" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,4,0,3" value="1" />
+			<entry class="" argb="255,9,0,7" value="2" />
+			<entry class="" argb="255,13,0,10" value="3" />
+			<entry class="" argb="255,18,0,14" value="4" />
+			<entry class="" argb="255,22,0,19" value="5" />
+			<entry class="" argb="255,27,0,23" value="6" />
+			<entry class="" argb="255,31,0,28" value="7" />
+			<entry class="" argb="255,36,0,32" value="8" />
+			<entry class="" argb="255,40,0,38" value="9" />
+			<entry class="" argb="255,45,0,43" value="10" />
+			<entry class="" argb="255,50,0,48" value="11" />
+			<entry class="" argb="255,54,0,53" value="12" />
+			<entry class="" argb="255,58,0,59" value="13" />
+			<entry class="" argb="255,61,0,63" value="14" />
+			<entry class="" argb="255,64,0,68" value="15" />
+			<entry class="" argb="255,68,0,72" value="16" />
+			<entry class="" argb="255,69,0,77" value="17" />
+			<entry class="" argb="255,72,0,81" value="18" />
+			<entry class="" argb="255,74,0,86" value="19" />
+			<entry class="" argb="255,77,0,91" value="20" />
+			<entry class="" argb="255,79,0,95" value="21" />
+			<entry class="" argb="255,80,0,100" value="22" />
+			<entry class="" argb="255,82,0,104" value="23" />
+			<entry class="" argb="255,83,0,109" value="24" />
+			<entry class="" argb="255,85,0,113" value="25" />
+			<entry class="" argb="255,84,0,118" value="26" />
+			<entry class="" argb="255,86,0,122" value="27" />
+			<entry class="" argb="255,87,0,127" value="28" />
+			<entry class="" argb="255,88,0,132" value="29" />
+			<entry class="" argb="255,86,0,136" value="30" />
+			<entry class="" argb="255,87,0,141" value="31" />
+			<entry class="" argb="255,87,0,145" value="32" />
+			<entry class="" argb="255,87,0,150" value="33" />
+			<entry class="" argb="255,85,0,154" value="34" />
+			<entry class="" argb="255,84,0,159" value="35" />
+			<entry class="" argb="255,84,0,163" value="36" />
+			<entry class="" argb="255,84,0,168" value="37" />
+			<entry class="" argb="255,83,0,173" value="38" />
+			<entry class="" argb="255,79,0,177" value="39" />
+			<entry class="" argb="255,78,0,182" value="40" />
+			<entry class="" argb="255,77,0,186" value="41" />
+			<entry class="" argb="255,76,0,191" value="42" />
+			<entry class="" argb="255,71,0,195" value="43" />
+			<entry class="" argb="255,70,0,200" value="44" />
+			<entry class="" argb="255,68,0,204" value="45" />
+			<entry class="" argb="255,66,0,209" value="46" />
+			<entry class="" argb="255,60,0,214" value="47" />
+			<entry class="" argb="255,58,0,218" value="48" />
+			<entry class="" argb="255,55,0,223" value="49" />
+			<entry class="" argb="255,53,0,227" value="50" />
+			<entry class="" argb="255,46,0,232" value="51" />
+			<entry class="" argb="255,43,0,236" value="52" />
+			<entry class="" argb="255,40,0,241" value="53" />
+			<entry class="" argb="255,36,0,245" value="54" />
+			<entry class="" argb="255,33,0,250" value="55" />
+			<entry class="" argb="255,25,0,255" value="56" />
+			<entry class="" argb="255,21,0,255" value="57" />
+			<entry class="" argb="255,16,0,255" value="58" />
+			<entry class="" argb="255,12,0,255" value="59" />
+			<entry class="" argb="255,4,0,255" value="60" />
+			<entry class="" argb="255,0,0,255" value="61" />
+			<entry class="" argb="255,0,4,255" value="62" />
+			<entry class="" argb="255,0,8,255" value="63" />
+			<entry class="" argb="255,0,16,255" value="64" />
+			<entry class="" argb="255,0,21,255" value="65" />
+			<entry class="" argb="255,0,25,255" value="66" />
+			<entry class="" argb="255,0,29,255" value="67" />
+			<entry class="" argb="255,0,38,255" value="68" />
+			<entry class="" argb="255,0,42,255" value="69" />
+			<entry class="" argb="255,0,46,255" value="70" />
+			<entry class="" argb="255,0,51,255" value="71" />
+			<entry class="" argb="255,0,55,255" value="72" />
+			<entry class="" argb="255,0,63,255" value="73" />
+			<entry class="" argb="255,0,67,255" value="74" />
+			<entry class="" argb="255,0,72,255" value="75" />
+			<entry class="" argb="255,0,76,255" value="76" />
+			<entry class="" argb="255,0,84,255" value="77" />
+			<entry class="" argb="255,0,89,255" value="78" />
+			<entry class="" argb="255,0,93,255" value="79" />
+			<entry class="" argb="255,0,97,255" value="80" />
+			<entry class="" argb="255,0,106,255" value="81" />
+			<entry class="" argb="255,0,110,255" value="82" />
+			<entry class="" argb="255,0,114,255" value="83" />
+			<entry class="" argb="255,0,119,255" value="84" />
+			<entry class="" argb="255,0,127,255" value="85" />
+			<entry class="" argb="255,0,131,255" value="86" />
+			<entry class="" argb="255,0,135,255" value="87" />
+			<entry class="" argb="255,0,140,255" value="88" />
+			<entry class="" argb="255,0,144,255" value="89" />
+			<entry class="" argb="255,0,152,255" value="90" />
+			<entry class="" argb="255,0,157,255" value="91" />
+			<entry class="" argb="255,0,161,255" value="92" />
+			<entry class="" argb="255,0,165,255" value="93" />
+			<entry class="" argb="255,0,174,255" value="94" />
+			<entry class="" argb="255,0,178,255" value="95" />
+			<entry class="" argb="255,0,182,255" value="96" />
+			<entry class="" argb="255,0,187,255" value="97" />
+			<entry class="" argb="255,0,195,255" value="98" />
+			<entry class="" argb="255,0,199,255" value="99" />
+			<entry class="" argb="255,0,203,255" value="100" />
+			<entry class="" argb="255,0,208,255" value="101" />
+			<entry class="" argb="255,0,216,255" value="102" />
+			<entry class="" argb="255,0,220,255" value="103" />
+			<entry class="" argb="255,0,225,255" value="104" />
+			<entry class="" argb="255,0,229,255" value="105" />
+			<entry class="" argb="255,0,233,255" value="106" />
+			<entry class="" argb="255,0,242,255" value="107" />
+			<entry class="" argb="255,0,246,255" value="108" />
+			<entry class="" argb="255,0,250,255" value="109" />
+			<entry class="" argb="255,0,255,255" value="110" />
+			<entry class="" argb="255,0,255,246" value="111" />
+			<entry class="" argb="255,0,255,242" value="112" />
+			<entry class="" argb="255,0,255,238" value="113" />
+			<entry class="" argb="255,0,255,233" value="114" />
+			<entry class="" argb="255,0,255,225" value="115" />
+			<entry class="" argb="255,0,255,220" value="116" />
+			<entry class="" argb="255,0,255,216" value="117" />
+			<entry class="" argb="255,0,255,212" value="118" />
+			<entry class="" argb="255,0,255,203" value="119" />
+			<entry class="" argb="255,0,255,199" value="120" />
+			<entry class="" argb="255,0,255,195" value="121" />
+			<entry class="" argb="255,0,255,191" value="122" />
+			<entry class="" argb="255,0,255,187" value="123" />
+			<entry class="" argb="255,0,255,178" value="124" />
+			<entry class="" argb="255,0,255,174" value="125" />
+			<entry class="" argb="255,0,255,170" value="126" />
+			<entry class="" argb="255,0,255,165" value="127" />
+			<entry class="" argb="255,0,255,157" value="128" />
+			<entry class="" argb="255,0,255,152" value="129" />
+			<entry class="" argb="255,0,255,148" value="130" />
+			<entry class="" argb="255,0,255,144" value="131" />
+			<entry class="" argb="255,0,255,135" value="132" />
+			<entry class="" argb="255,0,255,131" value="133" />
+			<entry class="" argb="255,0,255,127" value="134" />
+			<entry class="" argb="255,0,255,123" value="135" />
+			<entry class="" argb="255,0,255,114" value="136" />
+			<entry class="" argb="255,0,255,110" value="137" />
+			<entry class="" argb="255,0,255,106" value="138" />
+			<entry class="" argb="255,0,255,102" value="139" />
+			<entry class="" argb="255,0,255,97" value="140" />
+			<entry class="" argb="255,0,255,89" value="141" />
+			<entry class="" argb="255,0,255,84" value="142" />
+			<entry class="" argb="255,0,255,80" value="143" />
+			<entry class="" argb="255,0,255,76" value="144" />
+			<entry class="" argb="255,0,255,67" value="145" />
+			<entry class="" argb="255,0,255,63" value="146" />
+			<entry class="" argb="255,0,255,59" value="147" />
+			<entry class="" argb="255,0,255,55" value="148" />
+			<entry class="" argb="255,0,255,46" value="149" />
+			<entry class="" argb="255,0,255,42" value="150" />
+			<entry class="" argb="255,0,255,38" value="151" />
+			<entry class="" argb="255,0,255,34" value="152" />
+			<entry class="" argb="255,0,255,25" value="153" />
+			<entry class="" argb="255,0,255,21" value="154" />
+			<entry class="" argb="255,0,255,16" value="155" />
+			<entry class="" argb="255,0,255,12" value="156" />
+			<entry class="" argb="255,0,255,8" value="157" />
+			<entry class="" argb="255,0,255,0" value="158" />
+			<entry class="" argb="255,4,255,0" value="159" />
+			<entry class="" argb="255,8,255,0" value="160" />
+			<entry class="" argb="255,12,255,0" value="161" />
+			<entry class="" argb="255,21,255,0" value="162" />
+			<entry class="" argb="255,25,255,0" value="163" />
+			<entry class="" argb="255,29,255,0" value="164" />
+			<entry class="" argb="255,33,255,0" value="165" />
+			<entry class="" argb="255,42,255,0" value="166" />
+			<entry class="" argb="255,46,255,0" value="167" />
+			<entry class="" argb="255,51,255,0" value="168" />
+			<entry class="" argb="255,55,255,0" value="169" />
+			<entry class="" argb="255,63,255,0" value="170" />
+			<entry class="" argb="255,67,255,0" value="171" />
+			<entry class="" argb="255,72,255,0" value="172" />
+			<entry class="" argb="255,76,255,0" value="173" />
+			<entry class="" argb="255,80,255,0" value="174" />
+			<entry class="" argb="255,89,255,0" value="175" />
+			<entry class="" argb="255,93,255,0" value="176" />
+			<entry class="" argb="255,97,255,0" value="177" />
+			<entry class="" argb="255,101,255,0" value="178" />
+			<entry class="" argb="255,110,255,0" value="179" />
+			<entry class="" argb="255,114,255,0" value="180" />
+			<entry class="" argb="255,119,255,0" value="181" />
+			<entry class="" argb="255,123,255,0" value="182" />
+			<entry class="" argb="255,131,255,0" value="183" />
+			<entry class="" argb="255,135,255,0" value="184" />
+			<entry class="" argb="255,140,255,0" value="185" />
+			<entry class="" argb="255,144,255,0" value="186" />
+			<entry class="" argb="255,153,255,0" value="187" />
+			<entry class="" argb="255,157,255,0" value="188" />
+			<entry class="" argb="255,161,255,0" value="189" />
+			<entry class="" argb="255,165,255,0" value="190" />
+			<entry class="" argb="255,169,255,0" value="191" />
+			<entry class="" argb="255,178,255,0" value="192" />
+			<entry class="" argb="255,182,255,0" value="193" />
+			<entry class="" argb="255,187,255,0" value="194" />
+			<entry class="" argb="255,191,255,0" value="195" />
+			<entry class="" argb="255,199,255,0" value="196" />
+			<entry class="" argb="255,203,255,0" value="197" />
+			<entry class="" argb="255,208,255,0" value="198" />
+			<entry class="" argb="255,212,255,0" value="199" />
+			<entry class="" argb="255,221,255,0" value="200" />
+			<entry class="" argb="255,225,255,0" value="201" />
+			<entry class="" argb="255,229,255,0" value="202" />
+			<entry class="" argb="255,233,255,0" value="203" />
+			<entry class="" argb="255,242,255,0" value="204" />
+			<entry class="" argb="255,246,255,0" value="205" />
+			<entry class="" argb="255,250,255,0" value="206" />
+			<entry class="" argb="255,255,255,0" value="207" />
+			<entry class="" argb="255,255,250,0" value="208" />
+			<entry class="" argb="255,255,242,0" value="209" />
+			<entry class="" argb="255,255,238,0" value="210" />
+			<entry class="" argb="255,255,233,0" value="211" />
+			<entry class="" argb="255,255,229,0" value="212" />
+			<entry class="" argb="255,255,221,0" value="213" />
+			<entry class="" argb="255,255,216,0" value="214" />
+			<entry class="" argb="255,255,212,0" value="215" />
+			<entry class="" argb="255,255,208,0" value="216" />
+			<entry class="" argb="255,255,199,0" value="217" />
+			<entry class="" argb="255,255,195,0" value="218" />
+			<entry class="" argb="255,255,191,0" value="219" />
+			<entry class="" argb="255,255,187,0" value="220" />
+			<entry class="" argb="255,255,178,0" value="221" />
+			<entry class="" argb="255,255,174,0" value="222" />
+			<entry class="" argb="255,255,170,0" value="223" />
+			<entry class="" argb="255,255,165,0" value="224" />
+			<entry class="" argb="255,255,161,0" value="225" />
+			<entry class="" argb="255,255,153,0" value="226" />
+			<entry class="" argb="255,255,148,0" value="227" />
+			<entry class="" argb="255,255,144,0" value="228" />
+			<entry class="" argb="255,255,140,0" value="229" />
+			<entry class="" argb="255,255,131,0" value="230" />
+			<entry class="" argb="255,255,127,0" value="231" />
+			<entry class="" argb="255,255,123,0" value="232" />
+			<entry class="" argb="255,255,119,0" value="233" />
+			<entry class="" argb="255,255,110,0" value="234" />
+			<entry class="" argb="255,255,106,0" value="235" />
+			<entry class="" argb="255,255,102,0" value="236" />
+			<entry class="" argb="255,255,97,0" value="237" />
+			<entry class="" argb="255,255,89,0" value="238" />
+			<entry class="" argb="255,255,85,0" value="239" />
+			<entry class="" argb="255,255,80,0" value="240" />
+			<entry class="" argb="255,255,76,0" value="241" />
+			<entry class="" argb="255,255,72,0" value="242" />
+			<entry class="" argb="255,255,63,0" value="243" />
+			<entry class="" argb="255,255,59,0" value="244" />
+			<entry class="" argb="255,255,55,0" value="245" />
+			<entry class="" argb="255,255,51,0" value="246" />
+			<entry class="" argb="255,255,42,0" value="247" />
+			<entry class="" argb="255,255,38,0" value="248" />
+			<entry class="" argb="255,255,34,0" value="249" />
+			<entry class="" argb="255,255,29,0" value="250" />
+			<entry class="" argb="255,255,21,0" value="251" />
+			<entry class="" argb="255,255,17,0" value="252" />
+			<entry class="" argb="255,255,12,0" value="253" />
+			<entry class="" argb="255,255,8,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="red-purple" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,0" value="1" />
+			<entry class="" argb="255,3,0,0" value="2" />
+			<entry class="" argb="255,6,0,0" value="3" />
+			<entry class="" argb="255,10,0,0" value="4" />
+			<entry class="" argb="255,13,0,0" value="5" />
+			<entry class="" argb="255,17,0,0" value="6" />
+			<entry class="" argb="255,20,0,0" value="7" />
+			<entry class="" argb="255,24,0,1" value="8" />
+			<entry class="" argb="255,27,0,1" value="9" />
+			<entry class="" argb="255,30,0,1" value="10" />
+			<entry class="" argb="255,33,0,1" value="11" />
+			<entry class="" argb="255,36,0,2" value="12" />
+			<entry class="" argb="255,39,0,2" value="13" />
+			<entry class="" argb="255,42,0,2" value="14" />
+			<entry class="" argb="255,45,0,2" value="15" />
+			<entry class="" argb="255,48,0,2" value="16" />
+			<entry class="" argb="255,51,0,2" value="17" />
+			<entry class="" argb="255,54,0,2" value="18" />
+			<entry class="" argb="255,57,0,2" value="19" />
+			<entry class="" argb="255,60,0,3" value="20" />
+			<entry class="" argb="255,63,0,3" value="21" />
+			<entry class="" argb="255,66,0,3" value="22" />
+			<entry class="" argb="255,69,0,3" value="23" />
+			<entry class="" argb="255,72,0,4" value="24" />
+			<entry class="" argb="255,75,0,4" value="25" />
+			<entry class="" argb="255,78,0,4" value="26" />
+			<entry class="" argb="255,81,0,4" value="27" />
+			<entry class="" argb="255,84,0,4" value="28" />
+			<entry class="" argb="255,85,0,5" value="29" />
+			<entry class="" argb="255,86,0,6" value="30" />
+			<entry class="" argb="255,87,0,7" value="31" />
+			<entry class="" argb="255,88,0,9" value="32" />
+			<entry class="" argb="255,90,0,9" value="33" />
+			<entry class="" argb="255,92,0,10" value="34" />
+			<entry class="" argb="255,94,0,11" value="35" />
+			<entry class="" argb="255,96,0,12" value="36" />
+			<entry class="" argb="255,97,0,13" value="37" />
+			<entry class="" argb="255,98,0,14" value="38" />
+			<entry class="" argb="255,99,0,15" value="39" />
+			<entry class="" argb="255,100,0,17" value="40" />
+			<entry class="" argb="255,102,0,17" value="41" />
+			<entry class="" argb="255,104,0,18" value="42" />
+			<entry class="" argb="255,106,0,18" value="43" />
+			<entry class="" argb="255,108,0,19" value="44" />
+			<entry class="" argb="255,109,0,20" value="45" />
+			<entry class="" argb="255,110,0,22" value="46" />
+			<entry class="" argb="255,111,0,23" value="47" />
+			<entry class="" argb="255,112,0,25" value="48" />
+			<entry class="" argb="255,114,0,25" value="49" />
+			<entry class="" argb="255,116,0,26" value="50" />
+			<entry class="" argb="255,118,0,26" value="51" />
+			<entry class="" argb="255,120,0,27" value="52" />
+			<entry class="" argb="255,121,0,28" value="53" />
+			<entry class="" argb="255,122,0,29" value="54" />
+			<entry class="" argb="255,123,0,30" value="55" />
+			<entry class="" argb="255,124,0,32" value="56" />
+			<entry class="" argb="255,126,0,32" value="57" />
+			<entry class="" argb="255,128,0,33" value="58" />
+			<entry class="" argb="255,130,0,33" value="59" />
+			<entry class="" argb="255,132,0,34" value="60" />
+			<entry class="" argb="255,133,0,35" value="61" />
+			<entry class="" argb="255,134,0,36" value="62" />
+			<entry class="" argb="255,135,0,37" value="63" />
+			<entry class="" argb="255,136,0,39" value="64" />
+			<entry class="" argb="255,138,1,39" value="65" />
+			<entry class="" argb="255,140,2,40" value="66" />
+			<entry class="" argb="255,142,3,40" value="67" />
+			<entry class="" argb="255,144,4,41" value="68" />
+			<entry class="" argb="255,145,4,42" value="69" />
+			<entry class="" argb="255,146,4,43" value="70" />
+			<entry class="" argb="255,147,4,44" value="71" />
+			<entry class="" argb="255,148,4,46" value="72" />
+			<entry class="" argb="255,150,4,46" value="73" />
+			<entry class="" argb="255,152,4,47" value="74" />
+			<entry class="" argb="255,154,4,48" value="75" />
+			<entry class="" argb="255,156,4,49" value="76" />
+			<entry class="" argb="255,157,4,50" value="77" />
+			<entry class="" argb="255,158,4,51" value="78" />
+			<entry class="" argb="255,159,4,52" value="79" />
+			<entry class="" argb="255,160,4,54" value="80" />
+			<entry class="" argb="255,162,5,54" value="81" />
+			<entry class="" argb="255,164,6,53" value="82" />
+			<entry class="" argb="255,166,7,53" value="83" />
+			<entry class="" argb="255,168,8,52" value="84" />
+			<entry class="" argb="255,169,8,54" value="85" />
+			<entry class="" argb="255,170,8,56" value="86" />
+			<entry class="" argb="255,171,8,58" value="87" />
+			<entry class="" argb="255,172,8,60" value="88" />
+			<entry class="" argb="255,174,8,60" value="89" />
+			<entry class="" argb="255,176,8,61" value="90" />
+			<entry class="" argb="255,178,8,62" value="91" />
+			<entry class="" argb="255,180,8,63" value="92" />
+			<entry class="" argb="255,181,8,64" value="93" />
+			<entry class="" argb="255,182,8,65" value="94" />
+			<entry class="" argb="255,183,8,66" value="95" />
+			<entry class="" argb="255,184,8,68" value="96" />
+			<entry class="" argb="255,185,8,69" value="97" />
+			<entry class="" argb="255,186,8,70" value="98" />
+			<entry class="" argb="255,187,8,71" value="99" />
+			<entry class="" argb="255,188,8,73" value="100" />
+			<entry class="" argb="255,189,8,74" value="101" />
+			<entry class="" argb="255,190,8,75" value="102" />
+			<entry class="" argb="255,191,8,76" value="103" />
+			<entry class="" argb="255,192,8,77" value="104" />
+			<entry class="" argb="255,193,8,78" value="105" />
+			<entry class="" argb="255,194,8,79" value="106" />
+			<entry class="" argb="255,195,8,80" value="107" />
+			<entry class="" argb="255,196,8,82" value="108" />
+			<entry class="" argb="255,198,9,82" value="109" />
+			<entry class="" argb="255,200,10,83" value="110" />
+			<entry class="" argb="255,202,11,83" value="111" />
+			<entry class="" argb="255,204,12,84" value="112" />
+			<entry class="" argb="255,205,12,85" value="113" />
+			<entry class="" argb="255,206,12,86" value="114" />
+			<entry class="" argb="255,207,12,87" value="115" />
+			<entry class="" argb="255,208,12,89" value="116" />
+			<entry class="" argb="255,209,12,90" value="117" />
+			<entry class="" argb="255,210,12,91" value="118" />
+			<entry class="" argb="255,211,12,92" value="119" />
+			<entry class="" argb="255,212,12,94" value="120" />
+			<entry class="" argb="255,213,12,95" value="121" />
+			<entry class="" argb="255,214,12,96" value="122" />
+			<entry class="" argb="255,215,12,97" value="123" />
+			<entry class="" argb="255,216,12,98" value="124" />
+			<entry class="" argb="255,217,12,99" value="125" />
+			<entry class="" argb="255,218,12,100" value="126" />
+			<entry class="" argb="255,219,12,101" value="127" />
+			<entry class="" argb="255,220,12,103" value="128" />
+			<entry class="" argb="255,222,12,103" value="129" />
+			<entry class="" argb="255,224,12,104" value="130" />
+			<entry class="" argb="255,226,12,105" value="131" />
+			<entry class="" argb="255,228,12,106" value="132" />
+			<entry class="" argb="255,229,13,107" value="133" />
+			<entry class="" argb="255,230,14,108" value="134" />
+			<entry class="" argb="255,231,15,109" value="135" />
+			<entry class="" argb="255,232,16,110" value="136" />
+			<entry class="" argb="255,233,16,111" value="137" />
+			<entry class="" argb="255,234,16,112" value="138" />
+			<entry class="" argb="255,235,16,113" value="139" />
+			<entry class="" argb="255,236,16,115" value="140" />
+			<entry class="" argb="255,237,16,116" value="141" />
+			<entry class="" argb="255,238,16,117" value="142" />
+			<entry class="" argb="255,239,16,118" value="143" />
+			<entry class="" argb="255,240,16,119" value="144" />
+			<entry class="" argb="255,241,16,120" value="145" />
+			<entry class="" argb="255,242,16,121" value="146" />
+			<entry class="" argb="255,243,16,122" value="147" />
+			<entry class="" argb="255,244,16,124" value="148" />
+			<entry class="" argb="255,246,16,124" value="149" />
+			<entry class="" argb="255,248,16,125" value="150" />
+			<entry class="" argb="255,250,16,125" value="151" />
+			<entry class="" argb="255,252,16,126" value="152" />
+			<entry class="" argb="255,252,17,127" value="153" />
+			<entry class="" argb="255,252,18,129" value="154" />
+			<entry class="" argb="255,252,19,131" value="155" />
+			<entry class="" argb="255,252,20,133" value="156" />
+			<entry class="" argb="255,252,20,134" value="157" />
+			<entry class="" argb="255,252,20,136" value="158" />
+			<entry class="" argb="255,252,20,138" value="159" />
+			<entry class="" argb="255,252,20,140" value="160" />
+			<entry class="" argb="255,252,21,141" value="161" />
+			<entry class="" argb="255,252,22,143" value="162" />
+			<entry class="" argb="255,252,23,144" value="163" />
+			<entry class="" argb="255,252,24,146" value="164" />
+			<entry class="" argb="255,252,24,147" value="165" />
+			<entry class="" argb="255,252,24,149" value="166" />
+			<entry class="" argb="255,252,24,151" value="167" />
+			<entry class="" argb="255,252,24,153" value="168" />
+			<entry class="" argb="255,252,25,154" value="169" />
+			<entry class="" argb="255,252,26,156" value="170" />
+			<entry class="" argb="255,252,27,157" value="171" />
+			<entry class="" argb="255,252,28,159" value="172" />
+			<entry class="" argb="255,252,30,160" value="173" />
+			<entry class="" argb="255,252,32,161" value="174" />
+			<entry class="" argb="255,252,34,162" value="175" />
+			<entry class="" argb="255,252,36,164" value="176" />
+			<entry class="" argb="255,252,38,165" value="177" />
+			<entry class="" argb="255,252,40,166" value="178" />
+			<entry class="" argb="255,252,42,167" value="179" />
+			<entry class="" argb="255,252,44,169" value="180" />
+			<entry class="" argb="255,252,46,170" value="181" />
+			<entry class="" argb="255,252,48,172" value="182" />
+			<entry class="" argb="255,252,50,173" value="183" />
+			<entry class="" argb="255,252,52,175" value="184" />
+			<entry class="" argb="255,252,54,176" value="185" />
+			<entry class="" argb="255,252,56,177" value="186" />
+			<entry class="" argb="255,252,58,178" value="187" />
+			<entry class="" argb="255,252,60,180" value="188" />
+			<entry class="" argb="255,252,61,181" value="189" />
+			<entry class="" argb="255,252,62,183" value="190" />
+			<entry class="" argb="255,252,63,184" value="191" />
+			<entry class="" argb="255,252,64,186" value="192" />
+			<entry class="" argb="255,252,66,187" value="193" />
+			<entry class="" argb="255,252,68,188" value="194" />
+			<entry class="" argb="255,252,70,189" value="195" />
+			<entry class="" argb="255,252,72,191" value="196" />
+			<entry class="" argb="255,252,74,192" value="197" />
+			<entry class="" argb="255,252,76,193" value="198" />
+			<entry class="" argb="255,252,78,194" value="199" />
+			<entry class="" argb="255,252,80,196" value="200" />
+			<entry class="" argb="255,252,82,197" value="201" />
+			<entry class="" argb="255,252,84,199" value="202" />
+			<entry class="" argb="255,252,86,200" value="203" />
+			<entry class="" argb="255,252,88,202" value="204" />
+			<entry class="" argb="255,252,90,203" value="205" />
+			<entry class="" argb="255,252,92,204" value="206" />
+			<entry class="" argb="255,252,94,205" value="207" />
+			<entry class="" argb="255,252,96,207" value="208" />
+			<entry class="" argb="255,252,98,208" value="209" />
+			<entry class="" argb="255,252,100,209" value="210" />
+			<entry class="" argb="255,252,102,210" value="211" />
+			<entry class="" argb="255,252,104,212" value="212" />
+			<entry class="" argb="255,252,107,213" value="213" />
+			<entry class="" argb="255,252,110,214" value="214" />
+			<entry class="" argb="255,252,113,215" value="215" />
+			<entry class="" argb="255,252,116,217" value="216" />
+			<entry class="" argb="255,252,119,218" value="217" />
+			<entry class="" argb="255,252,122,219" value="218" />
+			<entry class="" argb="255,252,125,220" value="219" />
+			<entry class="" argb="255,252,128,221" value="220" />
+			<entry class="" argb="255,252,131,222" value="221" />
+			<entry class="" argb="255,252,134,223" value="222" />
+			<entry class="" argb="255,252,137,224" value="223" />
+			<entry class="" argb="255,252,140,226" value="224" />
+			<entry class="" argb="255,252,143,227" value="225" />
+			<entry class="" argb="255,252,146,228" value="226" />
+			<entry class="" argb="255,252,149,229" value="227" />
+			<entry class="" argb="255,252,152,230" value="228" />
+			<entry class="" argb="255,252,155,231" value="229" />
+			<entry class="" argb="255,252,158,232" value="230" />
+			<entry class="" argb="255,252,161,233" value="231" />
+			<entry class="" argb="255,252,164,235" value="232" />
+			<entry class="" argb="255,252,167,236" value="233" />
+			<entry class="" argb="255,252,170,237" value="234" />
+			<entry class="" argb="255,252,173,238" value="235" />
+			<entry class="" argb="255,252,176,239" value="236" />
+			<entry class="" argb="255,252,180,240" value="237" />
+			<entry class="" argb="255,252,184,241" value="238" />
+			<entry class="" argb="255,252,188,242" value="239" />
+			<entry class="" argb="255,252,192,243" value="240" />
+			<entry class="" argb="255,252,197,243" value="241" />
+			<entry class="" argb="255,252,202,244" value="242" />
+			<entry class="" argb="255,252,207,245" value="243" />
+			<entry class="" argb="255,252,212,246" value="244" />
+			<entry class="" argb="255,252,217,246" value="245" />
+			<entry class="" argb="255,252,222,247" value="246" />
+			<entry class="" argb="255,252,227,248" value="247" />
+			<entry class="" argb="255,252,232,249" value="248" />
+			<entry class="" argb="255,252,237,249" value="249" />
+			<entry class="" argb="255,252,242,250" value="250" />
+			<entry class="" argb="255,252,247,251" value="251" />
+			<entry class="" argb="255,252,252,252" value="252" />
+			<entry class="" argb="255,252,252,252" value="253" />
+			<entry class="" argb="255,253,253,253" value="254" />
+			<entry class="" argb="255,254,254,254" value="255" />
+		</table>
+	</palette>
+
+	<palette name="std-gamma-II" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,5" value="1" />
+			<entry class="" argb="255,0,0,10" value="2" />
+			<entry class="" argb="255,0,0,15" value="3" />
+			<entry class="" argb="255,0,0,20" value="4" />
+			<entry class="" argb="255,0,0,26" value="5" />
+			<entry class="" argb="255,0,0,31" value="6" />
+			<entry class="" argb="255,0,0,36" value="7" />
+			<entry class="" argb="255,0,0,41" value="8" />
+			<entry class="" argb="255,0,0,46" value="9" />
+			<entry class="" argb="255,0,0,52" value="10" />
+			<entry class="" argb="255,0,0,57" value="11" />
+			<entry class="" argb="255,0,0,62" value="12" />
+			<entry class="" argb="255,0,0,67" value="13" />
+			<entry class="" argb="255,0,0,72" value="14" />
+			<entry class="" argb="255,0,0,78" value="15" />
+			<entry class="" argb="255,0,0,83" value="16" />
+			<entry class="" argb="255,0,0,88" value="17" />
+			<entry class="" argb="255,0,0,93" value="18" />
+			<entry class="" argb="255,0,0,98" value="19" />
+			<entry class="" argb="255,0,0,104" value="20" />
+			<entry class="" argb="255,0,0,109" value="21" />
+			<entry class="" argb="255,0,0,114" value="22" />
+			<entry class="" argb="255,0,0,119" value="23" />
+			<entry class="" argb="255,0,0,124" value="24" />
+			<entry class="" argb="255,0,0,130" value="25" />
+			<entry class="" argb="255,0,0,135" value="26" />
+			<entry class="" argb="255,0,0,140" value="27" />
+			<entry class="" argb="255,0,0,145" value="28" />
+			<entry class="" argb="255,0,0,150" value="29" />
+			<entry class="" argb="255,0,0,156" value="30" />
+			<entry class="" argb="255,0,0,161" value="31" />
+			<entry class="" argb="255,0,0,166" value="32" />
+			<entry class="" argb="255,0,0,171" value="33" />
+			<entry class="" argb="255,0,0,176" value="34" />
+			<entry class="" argb="255,0,0,182" value="35" />
+			<entry class="" argb="255,0,0,187" value="36" />
+			<entry class="" argb="255,0,0,192" value="37" />
+			<entry class="" argb="255,0,0,197" value="38" />
+			<entry class="" argb="255,0,0,202" value="39" />
+			<entry class="" argb="255,0,0,208" value="40" />
+			<entry class="" argb="255,0,0,213" value="41" />
+			<entry class="" argb="255,0,0,218" value="42" />
+			<entry class="" argb="255,0,0,223" value="43" />
+			<entry class="" argb="255,0,0,228" value="44" />
+			<entry class="" argb="255,0,0,234" value="45" />
+			<entry class="" argb="255,0,0,239" value="46" />
+			<entry class="" argb="255,0,0,244" value="47" />
+			<entry class="" argb="255,4,0,249" value="48" />
+			<entry class="" argb="255,9,0,255" value="49" />
+			<entry class="" argb="255,14,0,250" value="50" />
+			<entry class="" argb="255,19,0,245" value="51" />
+			<entry class="" argb="255,23,0,239" value="52" />
+			<entry class="" argb="255,28,0,234" value="53" />
+			<entry class="" argb="255,33,0,228" value="54" />
+			<entry class="" argb="255,38,0,223" value="55" />
+			<entry class="" argb="255,42,0,218" value="56" />
+			<entry class="" argb="255,47,0,212" value="57" />
+			<entry class="" argb="255,52,0,207" value="58" />
+			<entry class="" argb="255,57,0,201" value="59" />
+			<entry class="" argb="255,61,0,196" value="60" />
+			<entry class="" argb="255,66,0,190" value="61" />
+			<entry class="" argb="255,71,0,185" value="62" />
+			<entry class="" argb="255,76,0,180" value="63" />
+			<entry class="" argb="255,81,0,174" value="64" />
+			<entry class="" argb="255,81,0,169" value="65" />
+			<entry class="" argb="255,81,0,163" value="66" />
+			<entry class="" argb="255,81,0,158" value="67" />
+			<entry class="" argb="255,81,0,152" value="68" />
+			<entry class="" argb="255,81,0,147" value="69" />
+			<entry class="" argb="255,81,0,142" value="70" />
+			<entry class="" argb="255,81,0,136" value="71" />
+			<entry class="" argb="255,80,0,131" value="72" />
+			<entry class="" argb="255,80,0,125" value="73" />
+			<entry class="" argb="255,80,0,120" value="74" />
+			<entry class="" argb="255,80,0,114" value="75" />
+			<entry class="" argb="255,80,0,109" value="76" />
+			<entry class="" argb="255,80,0,104" value="77" />
+			<entry class="" argb="255,80,0,98" value="78" />
+			<entry class="" argb="255,79,0,93" value="79" />
+			<entry class="" argb="255,84,0,87" value="80" />
+			<entry class="" argb="255,89,0,82" value="81" />
+			<entry class="" argb="255,94,0,76" value="82" />
+			<entry class="" argb="255,99,0,71" value="83" />
+			<entry class="" argb="255,104,0,66" value="84" />
+			<entry class="" argb="255,109,0,60" value="85" />
+			<entry class="" argb="255,114,0,55" value="86" />
+			<entry class="" argb="255,119,0,49" value="87" />
+			<entry class="" argb="255,124,0,44" value="88" />
+			<entry class="" argb="255,129,0,38" value="89" />
+			<entry class="" argb="255,134,0,33" value="90" />
+			<entry class="" argb="255,139,0,28" value="91" />
+			<entry class="" argb="255,144,0,22" value="92" />
+			<entry class="" argb="255,149,0,17" value="93" />
+			<entry class="" argb="255,154,0,11" value="94" />
+			<entry class="" argb="255,159,0,6" value="95" />
+			<entry class="" argb="255,164,0,0" value="96" />
+			<entry class="" argb="255,169,0,0" value="97" />
+			<entry class="" argb="255,174,0,0" value="98" />
+			<entry class="" argb="255,180,0,0" value="99" />
+			<entry class="" argb="255,185,0,0" value="100" />
+			<entry class="" argb="255,190,0,0" value="101" />
+			<entry class="" argb="255,196,0,0" value="102" />
+			<entry class="" argb="255,201,0,0" value="103" />
+			<entry class="" argb="255,206,0,0" value="104" />
+			<entry class="" argb="255,212,0,0" value="105" />
+			<entry class="" argb="255,217,0,0" value="106" />
+			<entry class="" argb="255,222,0,0" value="107" />
+			<entry class="" argb="255,228,0,0" value="108" />
+			<entry class="" argb="255,233,0,0" value="109" />
+			<entry class="" argb="255,255,0,0" value="110" />
+			<entry class="" argb="255,255,0,0" value="111" />
+			<entry class="" argb="255,255,0,0" value="112" />
+			<entry class="" argb="255,255,0,0" value="113" />
+			<entry class="" argb="255,255,5,0" value="114" />
+			<entry class="" argb="255,255,10,0" value="115" />
+			<entry class="" argb="255,255,16,0" value="116" />
+			<entry class="" argb="255,255,21,0" value="117" />
+			<entry class="" argb="255,255,27,0" value="118" />
+			<entry class="" argb="255,255,32,0" value="119" />
+			<entry class="" argb="255,255,37,0" value="120" />
+			<entry class="" argb="255,255,43,0" value="121" />
+			<entry class="" argb="255,255,48,0" value="122" />
+			<entry class="" argb="255,255,54,0" value="123" />
+			<entry class="" argb="255,255,59,0" value="124" />
+			<entry class="" argb="255,255,64,0" value="125" />
+			<entry class="" argb="255,255,70,0" value="126" />
+			<entry class="" argb="255,255,75,0" value="127" />
+			<entry class="" argb="255,255,81,0" value="128" />
+			<entry class="" argb="255,255,85,4" value="129" />
+			<entry class="" argb="255,255,90,9" value="130" />
+			<entry class="" argb="255,255,95,14" value="131" />
+			<entry class="" argb="255,255,100,19" value="132" />
+			<entry class="" argb="255,255,105,24" value="133" />
+			<entry class="" argb="255,255,109,28" value="134" />
+			<entry class="" argb="255,255,114,33" value="135" />
+			<entry class="" argb="255,255,119,38" value="136" />
+			<entry class="" argb="255,255,124,43" value="137" />
+			<entry class="" argb="255,255,129,48" value="138" />
+			<entry class="" argb="255,255,134,53" value="139" />
+			<entry class="" argb="255,255,138,57" value="140" />
+			<entry class="" argb="255,255,143,62" value="141" />
+			<entry class="" argb="255,255,148,67" value="142" />
+			<entry class="" argb="255,255,153,72" value="143" />
+			<entry class="" argb="255,255,158,77" value="144" />
+			<entry class="" argb="255,255,163,82" value="145" />
+			<entry class="" argb="255,255,163,77" value="146" />
+			<entry class="" argb="255,255,163,71" value="147" />
+			<entry class="" argb="255,255,163,65" value="148" />
+			<entry class="" argb="255,255,163,59" value="149" />
+			<entry class="" argb="255,255,163,53" value="150" />
+			<entry class="" argb="255,255,163,47" value="151" />
+			<entry class="" argb="255,255,163,41" value="152" />
+			<entry class="" argb="255,255,163,36" value="153" />
+			<entry class="" argb="255,255,163,30" value="154" />
+			<entry class="" argb="255,255,163,24" value="155" />
+			<entry class="" argb="255,255,163,18" value="156" />
+			<entry class="" argb="255,255,163,12" value="157" />
+			<entry class="" argb="255,255,163,6" value="158" />
+			<entry class="" argb="255,255,163,0" value="159" />
+			<entry class="" argb="255,255,163,0" value="160" />
+			<entry class="" argb="255,255,163,0" value="161" />
+			<entry class="" argb="255,255,163,0" value="162" />
+			<entry class="" argb="255,248,163,0" value="163" />
+			<entry class="" argb="255,240,163,0" value="164" />
+			<entry class="" argb="255,232,163,0" value="165" />
+			<entry class="" argb="255,225,163,0" value="166" />
+			<entry class="" argb="255,217,163,0" value="167" />
+			<entry class="" argb="255,209,163,0" value="168" />
+			<entry class="" argb="255,202,163,0" value="169" />
+			<entry class="" argb="255,194,163,0" value="170" />
+			<entry class="" argb="255,186,163,0" value="171" />
+			<entry class="" argb="255,179,163,0" value="172" />
+			<entry class="" argb="255,171,163,0" value="173" />
+			<entry class="" argb="255,163,163,0" value="174" />
+			<entry class="" argb="255,168,163,0" value="175" />
+			<entry class="" argb="255,173,163,0" value="176" />
+			<entry class="" argb="255,178,169,3" value="177" />
+			<entry class="" argb="255,183,175,6" value="178" />
+			<entry class="" argb="255,188,181,9" value="179" />
+			<entry class="" argb="255,193,187,12" value="180" />
+			<entry class="" argb="255,198,193,16" value="181" />
+			<entry class="" argb="255,203,199,19" value="182" />
+			<entry class="" argb="255,209,205,22" value="183" />
+			<entry class="" argb="255,214,212,25" value="184" />
+			<entry class="" argb="255,219,218,29" value="185" />
+			<entry class="" argb="255,224,224,32" value="186" />
+			<entry class="" argb="255,229,230,35" value="187" />
+			<entry class="" argb="255,234,236,38" value="188" />
+			<entry class="" argb="255,239,242,41" value="189" />
+			<entry class="" argb="255,244,248,45" value="190" />
+			<entry class="" argb="255,249,255,48" value="191" />
+			<entry class="" argb="255,255,255,51" value="192" />
+			<entry class="" argb="255,255,255,54" value="193" />
+			<entry class="" argb="255,255,255,58" value="194" />
+			<entry class="" argb="255,255,255,61" value="195" />
+			<entry class="" argb="255,255,255,64" value="196" />
+			<entry class="" argb="255,255,255,67" value="197" />
+			<entry class="" argb="255,255,255,71" value="198" />
+			<entry class="" argb="255,255,255,74" value="199" />
+			<entry class="" argb="255,255,255,77" value="200" />
+			<entry class="" argb="255,255,255,80" value="201" />
+			<entry class="" argb="255,255,255,83" value="202" />
+			<entry class="" argb="255,255,255,87" value="203" />
+			<entry class="" argb="255,255,255,90" value="204" />
+			<entry class="" argb="255,255,255,93" value="205" />
+			<entry class="" argb="255,255,255,96" value="206" />
+			<entry class="" argb="255,255,255,100" value="207" />
+			<entry class="" argb="255,255,255,103" value="208" />
+			<entry class="" argb="255,255,255,106" value="209" />
+			<entry class="" argb="255,255,255,109" value="210" />
+			<entry class="" argb="255,255,255,112" value="211" />
+			<entry class="" argb="255,255,255,116" value="212" />
+			<entry class="" argb="255,255,255,119" value="213" />
+			<entry class="" argb="255,255,255,122" value="214" />
+			<entry class="" argb="255,255,255,125" value="215" />
+			<entry class="" argb="255,255,255,129" value="216" />
+			<entry class="" argb="255,255,255,132" value="217" />
+			<entry class="" argb="255,255,255,135" value="218" />
+			<entry class="" argb="255,255,255,138" value="219" />
+			<entry class="" argb="255,255,255,142" value="220" />
+			<entry class="" argb="255,255,255,145" value="221" />
+			<entry class="" argb="255,255,255,148" value="222" />
+			<entry class="" argb="255,255,255,151" value="223" />
+			<entry class="" argb="255,255,255,154" value="224" />
+			<entry class="" argb="255,255,255,158" value="225" />
+			<entry class="" argb="255,255,255,161" value="226" />
+			<entry class="" argb="255,255,255,164" value="227" />
+			<entry class="" argb="255,255,255,167" value="228" />
+			<entry class="" argb="255,255,255,171" value="229" />
+			<entry class="" argb="255,255,255,174" value="230" />
+			<entry class="" argb="255,255,255,177" value="231" />
+			<entry class="" argb="255,255,255,180" value="232" />
+			<entry class="" argb="255,255,255,183" value="233" />
+			<entry class="" argb="255,255,255,187" value="234" />
+			<entry class="" argb="255,255,255,190" value="235" />
+			<entry class="" argb="255,255,255,193" value="236" />
+			<entry class="" argb="255,255,255,196" value="237" />
+			<entry class="" argb="255,255,255,200" value="238" />
+			<entry class="" argb="255,255,255,203" value="239" />
+			<entry class="" argb="255,255,255,206" value="240" />
+			<entry class="" argb="255,255,255,209" value="241" />
+			<entry class="" argb="255,255,255,213" value="242" />
+			<entry class="" argb="255,255,255,216" value="243" />
+			<entry class="" argb="255,255,255,219" value="244" />
+			<entry class="" argb="255,255,255,222" value="245" />
+			<entry class="" argb="255,255,255,225" value="246" />
+			<entry class="" argb="255,255,255,229" value="247" />
+			<entry class="" argb="255,255,255,232" value="248" />
+			<entry class="" argb="255,255,255,235" value="249" />
+			<entry class="" argb="255,255,255,238" value="250" />
+			<entry class="" argb="255,255,255,242" value="251" />
+			<entry class="" argb="255,255,255,245" value="252" />
+			<entry class="" argb="255,255,255,248" value="253" />
+			<entry class="" argb="255,255,255,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="steps" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,42,0" value="1" />
+			<entry class="" argb="255,0,85,0" value="2" />
+			<entry class="" argb="255,0,127,0" value="3" />
+			<entry class="" argb="255,0,170,0" value="4" />
+			<entry class="" argb="255,0,212,0" value="5" />
+			<entry class="" argb="255,0,255,0" value="6" />
+			<entry class="" argb="255,0,246,0" value="7" />
+			<entry class="" argb="255,0,236,0" value="8" />
+			<entry class="" argb="255,0,226,0" value="9" />
+			<entry class="" argb="255,0,216,0" value="10" />
+			<entry class="" argb="255,0,206,0" value="11" />
+			<entry class="" argb="255,0,197,0" value="12" />
+			<entry class="" argb="255,0,187,0" value="13" />
+			<entry class="" argb="255,0,177,0" value="14" />
+			<entry class="" argb="255,0,167,0" value="15" />
+			<entry class="" argb="255,0,157,0" value="16" />
+			<entry class="" argb="255,0,148,0" value="17" />
+			<entry class="" argb="255,0,138,0" value="18" />
+			<entry class="" argb="255,0,128,0" value="19" />
+			<entry class="" argb="255,0,118,0" value="20" />
+			<entry class="" argb="255,0,108,0" value="21" />
+			<entry class="" argb="255,0,99,0" value="22" />
+			<entry class="" argb="255,0,89,0" value="23" />
+			<entry class="" argb="255,0,79,0" value="24" />
+			<entry class="" argb="255,0,69,0" value="25" />
+			<entry class="" argb="255,0,59,0" value="26" />
+			<entry class="" argb="255,0,50,0" value="27" />
+			<entry class="" argb="255,0,40,0" value="28" />
+			<entry class="" argb="255,0,30,0" value="29" />
+			<entry class="" argb="255,0,20,0" value="30" />
+			<entry class="" argb="255,0,10,0" value="31" />
+			<entry class="" argb="255,0,0,0" value="32" />
+			<entry class="" argb="255,0,0,8" value="33" />
+			<entry class="" argb="255,0,0,16" value="34" />
+			<entry class="" argb="255,0,0,24" value="35" />
+			<entry class="" argb="255,0,0,32" value="36" />
+			<entry class="" argb="255,0,0,41" value="37" />
+			<entry class="" argb="255,0,0,49" value="38" />
+			<entry class="" argb="255,0,0,57" value="39" />
+			<entry class="" argb="255,0,0,65" value="40" />
+			<entry class="" argb="255,0,0,74" value="41" />
+			<entry class="" argb="255,0,0,82" value="42" />
+			<entry class="" argb="255,0,0,90" value="43" />
+			<entry class="" argb="255,0,0,98" value="44" />
+			<entry class="" argb="255,0,0,106" value="45" />
+			<entry class="" argb="255,0,0,115" value="46" />
+			<entry class="" argb="255,0,0,123" value="47" />
+			<entry class="" argb="255,0,0,131" value="48" />
+			<entry class="" argb="255,0,0,139" value="49" />
+			<entry class="" argb="255,0,0,148" value="50" />
+			<entry class="" argb="255,0,0,156" value="51" />
+			<entry class="" argb="255,0,0,164" value="52" />
+			<entry class="" argb="255,0,0,172" value="53" />
+			<entry class="" argb="255,0,0,180" value="54" />
+			<entry class="" argb="255,0,0,189" value="55" />
+			<entry class="" argb="255,0,0,197" value="56" />
+			<entry class="" argb="255,0,0,205" value="57" />
+			<entry class="" argb="255,0,0,213" value="58" />
+			<entry class="" argb="255,0,0,222" value="59" />
+			<entry class="" argb="255,0,0,230" value="60" />
+			<entry class="" argb="255,0,0,238" value="61" />
+			<entry class="" argb="255,0,0,246" value="62" />
+			<entry class="" argb="255,0,0,255" value="63" />
+			<entry class="" argb="255,0,0,0" value="64" />
+			<entry class="" argb="255,7,0,5" value="65" />
+			<entry class="" argb="255,15,0,10" value="66" />
+			<entry class="" argb="255,23,0,15" value="67" />
+			<entry class="" argb="255,31,0,21" value="68" />
+			<entry class="" argb="255,39,0,26" value="69" />
+			<entry class="" argb="255,47,0,31" value="70" />
+			<entry class="" argb="255,55,0,37" value="71" />
+			<entry class="" argb="255,63,0,42" value="72" />
+			<entry class="" argb="255,70,0,47" value="73" />
+			<entry class="" argb="255,78,0,53" value="74" />
+			<entry class="" argb="255,86,0,58" value="75" />
+			<entry class="" argb="255,94,0,63" value="76" />
+			<entry class="" argb="255,102,0,69" value="77" />
+			<entry class="" argb="255,110,0,74" value="78" />
+			<entry class="" argb="255,118,0,79" value="79" />
+			<entry class="" argb="255,126,0,85" value="80" />
+			<entry class="" argb="255,134,0,89" value="81" />
+			<entry class="" argb="255,142,0,94" value="82" />
+			<entry class="" argb="255,151,0,98" value="83" />
+			<entry class="" argb="255,159,0,103" value="84" />
+			<entry class="" argb="255,168,0,108" value="85" />
+			<entry class="" argb="255,176,0,112" value="86" />
+			<entry class="" argb="255,184,0,117" value="87" />
+			<entry class="" argb="255,193,0,121" value="88" />
+			<entry class="" argb="255,201,0,126" value="89" />
+			<entry class="" argb="255,210,0,131" value="90" />
+			<entry class="" argb="255,218,0,135" value="91" />
+			<entry class="" argb="255,226,0,140" value="92" />
+			<entry class="" argb="255,235,0,144" value="93" />
+			<entry class="" argb="255,243,0,149" value="94" />
+			<entry class="" argb="255,252,0,154" value="95" />
+			<entry class="" argb="255,0,0,0" value="96" />
+			<entry class="" argb="255,1,0,0" value="97" />
+			<entry class="" argb="255,2,0,0" value="98" />
+			<entry class="" argb="255,3,0,0" value="99" />
+			<entry class="" argb="255,4,0,0" value="100" />
+			<entry class="" argb="255,5,0,0" value="101" />
+			<entry class="" argb="255,6,0,0" value="102" />
+			<entry class="" argb="255,7,0,0" value="103" />
+			<entry class="" argb="255,8,0,0" value="104" />
+			<entry class="" argb="255,9,0,0" value="105" />
+			<entry class="" argb="255,10,0,0" value="106" />
+			<entry class="" argb="255,11,0,0" value="107" />
+			<entry class="" argb="255,12,0,0" value="108" />
+			<entry class="" argb="255,14,0,0" value="109" />
+			<entry class="" argb="255,16,0,0" value="110" />
+			<entry class="" argb="255,18,0,0" value="111" />
+			<entry class="" argb="255,20,0,0" value="112" />
+			<entry class="" argb="255,23,0,0" value="113" />
+			<entry class="" argb="255,25,0,0" value="114" />
+			<entry class="" argb="255,27,0,0" value="115" />
+			<entry class="" argb="255,29,0,0" value="116" />
+			<entry class="" argb="255,32,0,0" value="117" />
+			<entry class="" argb="255,34,0,0" value="118" />
+			<entry class="" argb="255,36,0,0" value="119" />
+			<entry class="" argb="255,38,0,0" value="120" />
+			<entry class="" argb="255,41,0,0" value="121" />
+			<entry class="" argb="255,44,0,0" value="122" />
+			<entry class="" argb="255,47,0,0" value="123" />
+			<entry class="" argb="255,50,0,0" value="124" />
+			<entry class="" argb="255,53,0,0" value="125" />
+			<entry class="" argb="255,56,0,0" value="126" />
+			<entry class="" argb="255,59,0,0" value="127" />
+			<entry class="" argb="255,63,0,0" value="128" />
+			<entry class="" argb="255,66,0,0" value="129" />
+			<entry class="" argb="255,69,0,0" value="130" />
+			<entry class="" argb="255,72,0,0" value="131" />
+			<entry class="" argb="255,75,0,0" value="132" />
+			<entry class="" argb="255,78,0,0" value="133" />
+			<entry class="" argb="255,82,0,1" value="134" />
+			<entry class="" argb="255,85,0,1" value="135" />
+			<entry class="" argb="255,89,0,1" value="136" />
+			<entry class="" argb="255,93,0,1" value="137" />
+			<entry class="" argb="255,97,0,1" value="138" />
+			<entry class="" argb="255,101,0,1" value="139" />
+			<entry class="" argb="255,105,0,1" value="140" />
+			<entry class="" argb="255,108,0,1" value="141" />
+			<entry class="" argb="255,112,0,1" value="142" />
+			<entry class="" argb="255,116,0,1" value="143" />
+			<entry class="" argb="255,120,0,1" value="144" />
+			<entry class="" argb="255,124,0,1" value="145" />
+			<entry class="" argb="255,128,1,1" value="146" />
+			<entry class="" argb="255,131,1,1" value="147" />
+			<entry class="" argb="255,135,1,1" value="148" />
+			<entry class="" argb="255,139,1,1" value="149" />
+			<entry class="" argb="255,143,1,1" value="150" />
+			<entry class="" argb="255,147,1,1" value="151" />
+			<entry class="" argb="255,151,1,1" value="152" />
+			<entry class="" argb="255,155,1,1" value="153" />
+			<entry class="" argb="255,159,1,1" value="154" />
+			<entry class="" argb="255,163,1,1" value="155" />
+			<entry class="" argb="255,167,1,1" value="156" />
+			<entry class="" argb="255,171,1,1" value="157" />
+			<entry class="" argb="255,175,1,1" value="158" />
+			<entry class="" argb="255,178,1,1" value="159" />
+			<entry class="" argb="255,181,1,1" value="160" />
+			<entry class="" argb="255,185,1,1" value="161" />
+			<entry class="" argb="255,188,1,1" value="162" />
+			<entry class="" argb="255,192,1,1" value="163" />
+			<entry class="" argb="255,195,1,1" value="164" />
+			<entry class="" argb="255,198,1,1" value="165" />
+			<entry class="" argb="255,202,1,1" value="166" />
+			<entry class="" argb="255,205,1,1" value="167" />
+			<entry class="" argb="255,209,1,1" value="168" />
+			<entry class="" argb="255,212,1,1" value="169" />
+			<entry class="" argb="255,216,1,2" value="170" />
+			<entry class="" argb="255,218,1,2" value="171" />
+			<entry class="" argb="255,220,1,2" value="172" />
+			<entry class="" argb="255,223,1,2" value="173" />
+			<entry class="" argb="255,225,1,2" value="174" />
+			<entry class="" argb="255,227,1,2" value="175" />
+			<entry class="" argb="255,230,1,2" value="176" />
+			<entry class="" argb="255,232,1,2" value="177" />
+			<entry class="" argb="255,234,1,2" value="178" />
+			<entry class="" argb="255,237,1,2" value="179" />
+			<entry class="" argb="255,239,1,2" value="180" />
+			<entry class="" argb="255,241,1,2" value="181" />
+			<entry class="" argb="255,244,2,2" value="182" />
+			<entry class="" argb="255,244,2,2" value="183" />
+			<entry class="" argb="255,245,2,2" value="184" />
+			<entry class="" argb="255,246,2,2" value="185" />
+			<entry class="" argb="255,247,2,2" value="186" />
+			<entry class="" argb="255,247,2,2" value="187" />
+			<entry class="" argb="255,248,2,2" value="188" />
+			<entry class="" argb="255,249,2,2" value="189" />
+			<entry class="" argb="255,250,2,2" value="190" />
+			<entry class="" argb="255,250,2,2" value="191" />
+			<entry class="" argb="255,251,2,2" value="192" />
+			<entry class="" argb="255,252,2,2" value="193" />
+			<entry class="" argb="255,253,2,2" value="194" />
+			<entry class="" argb="255,254,1,2" value="195" />
+			<entry class="" argb="255,254,1,2" value="196" />
+			<entry class="" argb="255,254,3,2" value="197" />
+			<entry class="" argb="255,254,5,2" value="198" />
+			<entry class="" argb="255,254,8,2" value="199" />
+			<entry class="" argb="255,254,10,2" value="200" />
+			<entry class="" argb="255,254,12,2" value="201" />
+			<entry class="" argb="255,254,15,2" value="202" />
+			<entry class="" argb="255,254,17,2" value="203" />
+			<entry class="" argb="255,254,19,2" value="204" />
+			<entry class="" argb="255,254,22,2" value="205" />
+			<entry class="" argb="255,254,24,2" value="206" />
+			<entry class="" argb="255,254,26,2" value="207" />
+			<entry class="" argb="255,254,29,2" value="208" />
+			<entry class="" argb="255,254,31,2" value="209" />
+			<entry class="" argb="255,254,33,2" value="210" />
+			<entry class="" argb="255,254,36,2" value="211" />
+			<entry class="" argb="255,254,36,2" value="212" />
+			<entry class="" argb="255,254,38,3" value="213" />
+			<entry class="" argb="255,254,40,4" value="214" />
+			<entry class="" argb="255,254,42,5" value="215" />
+			<entry class="" argb="255,255,45,7" value="216" />
+			<entry class="" argb="255,255,48,9" value="217" />
+			<entry class="" argb="255,255,51,12" value="218" />
+			<entry class="" argb="255,255,54,14" value="219" />
+			<entry class="" argb="255,255,58,17" value="220" />
+			<entry class="" argb="255,255,61,20" value="221" />
+			<entry class="" argb="255,255,64,23" value="222" />
+			<entry class="" argb="255,255,67,27" value="223" />
+			<entry class="" argb="255,255,70,30" value="224" />
+			<entry class="" argb="255,255,73,34" value="225" />
+			<entry class="" argb="255,255,77,39" value="226" />
+			<entry class="" argb="255,255,82,44" value="227" />
+			<entry class="" argb="255,255,87,49" value="228" />
+			<entry class="" argb="255,255,92,55" value="229" />
+			<entry class="" argb="255,255,96,60" value="230" />
+			<entry class="" argb="255,255,100,65" value="231" />
+			<entry class="" argb="255,255,104,71" value="232" />
+			<entry class="" argb="255,255,108,76" value="233" />
+			<entry class="" argb="255,255,113,82" value="234" />
+			<entry class="" argb="255,255,119,89" value="235" />
+			<entry class="" argb="255,255,125,97" value="236" />
+			<entry class="" argb="255,255,131,104" value="237" />
+			<entry class="" argb="255,255,138,112" value="238" />
+			<entry class="" argb="255,255,144,120" value="239" />
+			<entry class="" argb="255,255,151,128" value="240" />
+			<entry class="" argb="255,255,157,136" value="241" />
+			<entry class="" argb="255,255,164,145" value="242" />
+			<entry class="" argb="255,255,171,153" value="243" />
+			<entry class="" argb="255,255,178,162" value="244" />
+			<entry class="" argb="255,255,185,171" value="245" />
+			<entry class="" argb="255,255,193,180" value="246" />
+			<entry class="" argb="255,255,200,189" value="247" />
+			<entry class="" argb="255,255,208,198" value="248" />
+			<entry class="" argb="255,255,215,207" value="249" />
+			<entry class="" argb="255,255,223,217" value="250" />
+			<entry class="" argb="255,255,229,224" value="251" />
+			<entry class="" argb="255,255,235,232" value="252" />
+			<entry class="" argb="255,255,242,239" value="253" />
+			<entry class="" argb="255,255,248,247" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="stern-special" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,18,1,1" value="1" />
+			<entry class="" argb="255,36,2,3" value="2" />
+			<entry class="" argb="255,54,3,5" value="3" />
+			<entry class="" argb="255,72,4,7" value="4" />
+			<entry class="" argb="255,90,5,9" value="5" />
+			<entry class="" argb="255,108,6,11" value="6" />
+			<entry class="" argb="255,127,7,13" value="7" />
+			<entry class="" argb="255,145,8,15" value="8" />
+			<entry class="" argb="255,163,9,17" value="9" />
+			<entry class="" argb="255,181,10,19" value="10" />
+			<entry class="" argb="255,199,11,21" value="11" />
+			<entry class="" argb="255,217,12,23" value="12" />
+			<entry class="" argb="255,235,13,25" value="13" />
+			<entry class="" argb="255,254,14,27" value="14" />
+			<entry class="" argb="255,249,15,29" value="15" />
+			<entry class="" argb="255,244,16,31" value="16" />
+			<entry class="" argb="255,239,17,33" value="17" />
+			<entry class="" argb="255,234,18,35" value="18" />
+			<entry class="" argb="255,229,19,37" value="19" />
+			<entry class="" argb="255,223,20,39" value="20" />
+			<entry class="" argb="255,218,21,41" value="21" />
+			<entry class="" argb="255,213,22,43" value="22" />
+			<entry class="" argb="255,208,23,45" value="23" />
+			<entry class="" argb="255,203,24,47" value="24" />
+			<entry class="" argb="255,197,25,49" value="25" />
+			<entry class="" argb="255,192,26,51" value="26" />
+			<entry class="" argb="255,187,27,53" value="27" />
+			<entry class="" argb="255,182,28,55" value="28" />
+			<entry class="" argb="255,177,29,57" value="29" />
+			<entry class="" argb="255,172,30,59" value="30" />
+			<entry class="" argb="255,166,31,61" value="31" />
+			<entry class="" argb="255,161,32,63" value="32" />
+			<entry class="" argb="255,156,33,65" value="33" />
+			<entry class="" argb="255,151,34,67" value="34" />
+			<entry class="" argb="255,146,35,69" value="35" />
+			<entry class="" argb="255,140,36,71" value="36" />
+			<entry class="" argb="255,135,37,73" value="37" />
+			<entry class="" argb="255,130,38,75" value="38" />
+			<entry class="" argb="255,125,39,77" value="39" />
+			<entry class="" argb="255,120,40,79" value="40" />
+			<entry class="" argb="255,115,41,81" value="41" />
+			<entry class="" argb="255,109,42,83" value="42" />
+			<entry class="" argb="255,104,43,85" value="43" />
+			<entry class="" argb="255,99,44,87" value="44" />
+			<entry class="" argb="255,94,45,89" value="45" />
+			<entry class="" argb="255,89,46,91" value="46" />
+			<entry class="" argb="255,83,47,93" value="47" />
+			<entry class="" argb="255,78,48,95" value="48" />
+			<entry class="" argb="255,73,49,97" value="49" />
+			<entry class="" argb="255,68,50,99" value="50" />
+			<entry class="" argb="255,63,51,101" value="51" />
+			<entry class="" argb="255,58,52,103" value="52" />
+			<entry class="" argb="255,52,53,105" value="53" />
+			<entry class="" argb="255,47,54,107" value="54" />
+			<entry class="" argb="255,42,55,109" value="55" />
+			<entry class="" argb="255,37,56,111" value="56" />
+			<entry class="" argb="255,32,57,113" value="57" />
+			<entry class="" argb="255,26,58,115" value="58" />
+			<entry class="" argb="255,21,59,117" value="59" />
+			<entry class="" argb="255,16,60,119" value="60" />
+			<entry class="" argb="255,11,61,121" value="61" />
+			<entry class="" argb="255,6,62,123" value="62" />
+			<entry class="" argb="255,0,63,125" value="63" />
+			<entry class="" argb="255,64,64,127" value="64" />
+			<entry class="" argb="255,65,65,129" value="65" />
+			<entry class="" argb="255,66,66,131" value="66" />
+			<entry class="" argb="255,67,67,133" value="67" />
+			<entry class="" argb="255,68,68,135" value="68" />
+			<entry class="" argb="255,69,69,137" value="69" />
+			<entry class="" argb="255,70,70,139" value="70" />
+			<entry class="" argb="255,71,71,141" value="71" />
+			<entry class="" argb="255,72,72,143" value="72" />
+			<entry class="" argb="255,73,73,145" value="73" />
+			<entry class="" argb="255,74,74,147" value="74" />
+			<entry class="" argb="255,75,75,149" value="75" />
+			<entry class="" argb="255,76,76,151" value="76" />
+			<entry class="" argb="255,77,77,153" value="77" />
+			<entry class="" argb="255,78,78,155" value="78" />
+			<entry class="" argb="255,79,79,157" value="79" />
+			<entry class="" argb="255,80,80,159" value="80" />
+			<entry class="" argb="255,81,81,161" value="81" />
+			<entry class="" argb="255,82,82,163" value="82" />
+			<entry class="" argb="255,83,83,165" value="83" />
+			<entry class="" argb="255,84,84,167" value="84" />
+			<entry class="" argb="255,85,85,169" value="85" />
+			<entry class="" argb="255,86,86,171" value="86" />
+			<entry class="" argb="255,87,87,173" value="87" />
+			<entry class="" argb="255,88,88,175" value="88" />
+			<entry class="" argb="255,89,89,177" value="89" />
+			<entry class="" argb="255,90,90,179" value="90" />
+			<entry class="" argb="255,91,91,181" value="91" />
+			<entry class="" argb="255,92,92,183" value="92" />
+			<entry class="" argb="255,93,93,185" value="93" />
+			<entry class="" argb="255,94,94,187" value="94" />
+			<entry class="" argb="255,95,95,189" value="95" />
+			<entry class="" argb="255,96,96,191" value="96" />
+			<entry class="" argb="255,97,97,193" value="97" />
+			<entry class="" argb="255,98,98,195" value="98" />
+			<entry class="" argb="255,99,99,197" value="99" />
+			<entry class="" argb="255,100,100,199" value="100" />
+			<entry class="" argb="255,101,101,201" value="101" />
+			<entry class="" argb="255,102,102,203" value="102" />
+			<entry class="" argb="255,103,103,205" value="103" />
+			<entry class="" argb="255,104,104,207" value="104" />
+			<entry class="" argb="255,105,105,209" value="105" />
+			<entry class="" argb="255,106,106,211" value="106" />
+			<entry class="" argb="255,107,107,213" value="107" />
+			<entry class="" argb="255,108,108,215" value="108" />
+			<entry class="" argb="255,109,109,217" value="109" />
+			<entry class="" argb="255,110,110,219" value="110" />
+			<entry class="" argb="255,111,111,221" value="111" />
+			<entry class="" argb="255,112,112,223" value="112" />
+			<entry class="" argb="255,113,113,225" value="113" />
+			<entry class="" argb="255,114,114,227" value="114" />
+			<entry class="" argb="255,115,115,229" value="115" />
+			<entry class="" argb="255,116,116,231" value="116" />
+			<entry class="" argb="255,117,117,233" value="117" />
+			<entry class="" argb="255,118,118,235" value="118" />
+			<entry class="" argb="255,119,119,237" value="119" />
+			<entry class="" argb="255,120,120,239" value="120" />
+			<entry class="" argb="255,121,121,241" value="121" />
+			<entry class="" argb="255,122,122,243" value="122" />
+			<entry class="" argb="255,123,123,245" value="123" />
+			<entry class="" argb="255,124,124,247" value="124" />
+			<entry class="" argb="255,125,125,249" value="125" />
+			<entry class="" argb="255,126,126,251" value="126" />
+			<entry class="" argb="255,127,127,253" value="127" />
+			<entry class="" argb="255,128,128,255" value="128" />
+			<entry class="" argb="255,129,129,251" value="129" />
+			<entry class="" argb="255,130,130,247" value="130" />
+			<entry class="" argb="255,131,131,243" value="131" />
+			<entry class="" argb="255,132,132,238" value="132" />
+			<entry class="" argb="255,133,133,234" value="133" />
+			<entry class="" argb="255,134,134,230" value="134" />
+			<entry class="" argb="255,135,135,226" value="135" />
+			<entry class="" argb="255,136,136,221" value="136" />
+			<entry class="" argb="255,137,137,217" value="137" />
+			<entry class="" argb="255,138,138,213" value="138" />
+			<entry class="" argb="255,139,139,209" value="139" />
+			<entry class="" argb="255,140,140,204" value="140" />
+			<entry class="" argb="255,141,141,200" value="141" />
+			<entry class="" argb="255,142,142,196" value="142" />
+			<entry class="" argb="255,143,143,192" value="143" />
+			<entry class="" argb="255,144,144,187" value="144" />
+			<entry class="" argb="255,145,145,183" value="145" />
+			<entry class="" argb="255,146,146,179" value="146" />
+			<entry class="" argb="255,147,147,175" value="147" />
+			<entry class="" argb="255,148,148,170" value="148" />
+			<entry class="" argb="255,149,149,166" value="149" />
+			<entry class="" argb="255,150,150,162" value="150" />
+			<entry class="" argb="255,151,151,158" value="151" />
+			<entry class="" argb="255,152,152,153" value="152" />
+			<entry class="" argb="255,153,153,149" value="153" />
+			<entry class="" argb="255,154,154,145" value="154" />
+			<entry class="" argb="255,155,155,141" value="155" />
+			<entry class="" argb="255,156,156,136" value="156" />
+			<entry class="" argb="255,157,157,132" value="157" />
+			<entry class="" argb="255,158,158,128" value="158" />
+			<entry class="" argb="255,159,159,124" value="159" />
+			<entry class="" argb="255,160,160,119" value="160" />
+			<entry class="" argb="255,161,161,115" value="161" />
+			<entry class="" argb="255,162,162,111" value="162" />
+			<entry class="" argb="255,163,163,107" value="163" />
+			<entry class="" argb="255,164,164,102" value="164" />
+			<entry class="" argb="255,165,165,98" value="165" />
+			<entry class="" argb="255,166,166,94" value="166" />
+			<entry class="" argb="255,167,167,90" value="167" />
+			<entry class="" argb="255,168,168,85" value="168" />
+			<entry class="" argb="255,169,169,81" value="169" />
+			<entry class="" argb="255,170,170,77" value="170" />
+			<entry class="" argb="255,171,171,73" value="171" />
+			<entry class="" argb="255,172,172,68" value="172" />
+			<entry class="" argb="255,173,173,64" value="173" />
+			<entry class="" argb="255,174,174,60" value="174" />
+			<entry class="" argb="255,175,175,56" value="175" />
+			<entry class="" argb="255,176,176,51" value="176" />
+			<entry class="" argb="255,177,177,47" value="177" />
+			<entry class="" argb="255,178,178,43" value="178" />
+			<entry class="" argb="255,179,179,39" value="179" />
+			<entry class="" argb="255,180,180,34" value="180" />
+			<entry class="" argb="255,181,181,30" value="181" />
+			<entry class="" argb="255,182,182,26" value="182" />
+			<entry class="" argb="255,183,183,22" value="183" />
+			<entry class="" argb="255,184,184,17" value="184" />
+			<entry class="" argb="255,185,185,13" value="185" />
+			<entry class="" argb="255,186,186,9" value="186" />
+			<entry class="" argb="255,187,187,5" value="187" />
+			<entry class="" argb="255,188,188,0" value="188" />
+			<entry class="" argb="255,189,189,3" value="189" />
+			<entry class="" argb="255,190,190,7" value="190" />
+			<entry class="" argb="255,191,191,11" value="191" />
+			<entry class="" argb="255,192,192,15" value="192" />
+			<entry class="" argb="255,193,193,19" value="193" />
+			<entry class="" argb="255,194,194,22" value="194" />
+			<entry class="" argb="255,195,195,26" value="195" />
+			<entry class="" argb="255,196,196,30" value="196" />
+			<entry class="" argb="255,197,197,34" value="197" />
+			<entry class="" argb="255,198,198,38" value="198" />
+			<entry class="" argb="255,199,199,41" value="199" />
+			<entry class="" argb="255,200,200,45" value="200" />
+			<entry class="" argb="255,201,201,49" value="201" />
+			<entry class="" argb="255,202,202,53" value="202" />
+			<entry class="" argb="255,203,203,57" value="203" />
+			<entry class="" argb="255,204,204,60" value="204" />
+			<entry class="" argb="255,205,205,64" value="205" />
+			<entry class="" argb="255,206,206,68" value="206" />
+			<entry class="" argb="255,207,207,72" value="207" />
+			<entry class="" argb="255,208,208,76" value="208" />
+			<entry class="" argb="255,209,209,79" value="209" />
+			<entry class="" argb="255,210,210,83" value="210" />
+			<entry class="" argb="255,211,211,87" value="211" />
+			<entry class="" argb="255,212,212,91" value="212" />
+			<entry class="" argb="255,213,213,95" value="213" />
+			<entry class="" argb="255,214,214,98" value="214" />
+			<entry class="" argb="255,215,215,102" value="215" />
+			<entry class="" argb="255,216,216,106" value="216" />
+			<entry class="" argb="255,217,217,110" value="217" />
+			<entry class="" argb="255,218,218,114" value="218" />
+			<entry class="" argb="255,219,219,117" value="219" />
+			<entry class="" argb="255,220,220,121" value="220" />
+			<entry class="" argb="255,221,221,125" value="221" />
+			<entry class="" argb="255,222,222,129" value="222" />
+			<entry class="" argb="255,223,223,133" value="223" />
+			<entry class="" argb="255,224,224,137" value="224" />
+			<entry class="" argb="255,225,225,140" value="225" />
+			<entry class="" argb="255,226,226,144" value="226" />
+			<entry class="" argb="255,227,227,148" value="227" />
+			<entry class="" argb="255,228,228,152" value="228" />
+			<entry class="" argb="255,229,229,156" value="229" />
+			<entry class="" argb="255,230,230,159" value="230" />
+			<entry class="" argb="255,231,231,163" value="231" />
+			<entry class="" argb="255,232,232,167" value="232" />
+			<entry class="" argb="255,233,233,171" value="233" />
+			<entry class="" argb="255,234,234,175" value="234" />
+			<entry class="" argb="255,235,235,178" value="235" />
+			<entry class="" argb="255,236,236,182" value="236" />
+			<entry class="" argb="255,237,237,186" value="237" />
+			<entry class="" argb="255,238,238,190" value="238" />
+			<entry class="" argb="255,239,239,194" value="239" />
+			<entry class="" argb="255,240,240,197" value="240" />
+			<entry class="" argb="255,241,241,201" value="241" />
+			<entry class="" argb="255,242,242,205" value="242" />
+			<entry class="" argb="255,243,243,209" value="243" />
+			<entry class="" argb="255,244,244,213" value="244" />
+			<entry class="" argb="255,245,245,216" value="245" />
+			<entry class="" argb="255,246,246,220" value="246" />
+			<entry class="" argb="255,247,247,224" value="247" />
+			<entry class="" argb="255,248,248,228" value="248" />
+			<entry class="" argb="255,249,249,232" value="249" />
+			<entry class="" argb="255,250,250,235" value="250" />
+			<entry class="" argb="255,251,251,239" value="251" />
+			<entry class="" argb="255,252,252,243" value="252" />
+			<entry class="" argb="255,253,253,247" value="253" />
+			<entry class="" argb="255,254,254,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+</palettes>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/rsc/palettes.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/javadoc.sh
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/javadoc.sh	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/javadoc.sh	(revision 10281)
@@ -0,0 +1,3 @@
+#!/bin/bash
+javadoc -d ../doc-files/javadocs/ -version -author org/cresques/cts/*.java org/cresques/cts/gt2/*.java org/cresques/geo/*.java org/cresques/geo/cover/*.java org/cresques/io/*.java org/cresques/io/raster/*.java org/cresques/px/*.java org/cresques/px/dxf/*.java org/cresques/px/gml/*.java org/cresques/ui/*.java org/cresques/ui/cmd/*.java org/cresques/ui/cts/*.java org/cresques/ui/raster/*.java
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/javadoc.sh
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQMapCanvas.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQMapCanvas.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQMapCanvas.java	(revision 10281)
@@ -0,0 +1,44 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Drawable;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public interface CQMapCanvas {
+    public CQApp getApp();
+
+    public ViewPortData getVPData();
+
+    public void viewPortChanged();
+
+    public void repaint();
+
+    public void paint(Drawable obj);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQMapCanvas.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>User Interface: Clases para interface de usuario.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RGBInputPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RGBInputPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RGBInputPanel.java	(revision 10281)
@@ -0,0 +1,365 @@
+package org.cresques.ui.raster;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.io.IOException;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+/**
+ * Panel con los 3 campos para introducir listas de valores RGB. Este
+ * gestiona los eventos de FocusListener para validar que los valores 
+ * que se introducen son correctos. Si el TextField pierde el foco y
+ * tiene un valor incorrecto resetea el contenido.
+ * 
+ * Los métodos publicos getRangeXXX devuelven el intervalo de valores
+ * en forma de array multidimensional de 2xN elementos. Cada pareja de 
+ * valores es un rango de color en ese valor de pixel. Un rango de valores
+ * podria ser por ejemplo {{1,3},{15,30},{200, 255}}
+ *  
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class RGBInputPanel extends JPanel implements FocusListener{
+
+	private JPanel 			pRed = null;
+	private JPanel			pGreen = null;
+	private JPanel 			pBlue = null;
+	private JLabel			lRed = null;
+	private JLabel 			lGreen = null;
+	private JLabel 			lBlue = null;
+	private JTextFieldExt	tRed = null;
+	private JTextFieldExt	tGreen = null;
+	private JTextFieldExt	tBlue = null;
+	private int[] 			rangeRed = null;
+    private int[] 			rangeGreen = null;
+    private int[] 			rangeBlue = null;
+    private boolean			validValue = false;
+
+    /**
+     * Componente JTextField que se pone con el color de fondo cuando
+     * está desactivado y blanco cuando está activo.
+     * @author Nacho Brodin (brodin_ign@gva.es)
+     */
+    public class JTextFieldExt extends JTextField {
+        final private static long serialVersionUID = -3370601314380922368L;
+        private Color color = null;
+
+        public JTextFieldExt(Color color) {
+            this.color = color;
+        }
+
+        public JTextFieldExt() {
+            super();
+        }
+
+        public void setEnabled(boolean enabled) {
+            super.setEnabled(enabled);
+
+            if (!enabled) {
+                if (color == null) {
+                    this.setBackground(new Color(210, 210, 210));
+                } else {
+                    this.setBackground(color);
+                }
+            } else {
+                this.setBackground(new Color(255, 255, 255));
+            }
+        }
+    }
+    
+	/**
+	 * This is the default constructor
+	 */
+	public RGBInputPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+		gridBagConstraints2.gridx = 0;
+		gridBagConstraints2.gridy = 2;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 0;
+		gridBagConstraints1.gridy = 1;
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setLayout(new GridBagLayout());
+		this.setSize(100, 75);
+		this.setPreferredSize(new java.awt.Dimension(77,60));
+		this.add(getPRed(), gridBagConstraints);
+		this.add(getPGreen(), gridBagConstraints1);
+		this.add(getPBlue(), gridBagConstraints2);
+		this.getTBlue().addFocusListener(this);
+		this.getTGreen().addFocusListener(this);
+		this.getTRed().addFocusListener(this);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPRed() {
+		if (pRed == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setVgap(0);
+			lRed = new JLabel();
+			lRed.setText("R :");
+			pRed = new JPanel();
+			pRed.setLayout(flowLayout);
+			pRed.setPreferredSize(new java.awt.Dimension(100,25));
+			pRed.add(lRed, null);
+			pRed.add(getTRed(), null);
+		}
+		return pRed;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPGreen() {
+		if (pGreen == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setHgap(0);
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setVgap(0);
+			lGreen = new JLabel();
+			lGreen.setText("G :");
+			pGreen = new JPanel();
+			pGreen.setLayout(flowLayout1);
+			pGreen.setPreferredSize(new java.awt.Dimension(100,25));
+			pGreen.add(lGreen, null);
+			pGreen.add(getTGreen(), null);
+		}
+		return pGreen;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPBlue() {
+		if (pBlue == null) {
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setHgap(0);
+			flowLayout2.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout2.setVgap(0);
+			lBlue = new JLabel();
+			lBlue.setText("B :");
+			pBlue = new JPanel();
+			pBlue.setLayout(flowLayout2);
+			pBlue.setPreferredSize(new java.awt.Dimension(100,25));
+			pBlue.add(lBlue, null);
+			pBlue.add(getTBlue(), null);
+		}
+		return pBlue;
+	}
+
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getTRed() {
+		if (tRed == null) {
+			tRed = new JTextFieldExt();
+			tRed.setPreferredSize(new java.awt.Dimension(60,20));
+		}
+		return tRed;
+	}
+
+	/**
+	 * This method initializes jTextField1	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getTGreen() {
+		if (tGreen == null) {
+			tGreen = new JTextFieldExt();
+			tGreen.setPreferredSize(new java.awt.Dimension(60,20));
+		}
+		return tGreen;
+	}
+
+	/**
+	 * This method initializes jTextField2	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getTBlue() {
+		if (tBlue == null) {
+			tBlue = new JTextFieldExt();
+			tBlue.setPreferredSize(new java.awt.Dimension(60,20));
+		}
+		return tBlue;
+	}
+
+	public void focusGained(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+     * Obtiene el rango de valores a partir de la cadena de texto introducida por el usuario. 
+     * Sirve para parsear el contenido de los campos de texto que contienen listas
+     * de valores para RGB.
+     * @param values
+     */
+    public static int[] stringToInterval(String values) throws IOException {
+        int[] rangeTransparency = new int[2];
+
+        boolean dots = false;
+        for (int i = 0; i < values.length(); i++){
+        	char c = values.charAt(i);
+        	if(c != ':' && (c < 48 || c > 57))
+        		throw new IOException("Caracteres incorrectos en la cadena.");
+        	if(c == ':' && dots)
+        		throw new IOException("Se repite el caracter :.");
+        	if(c == ':' && !dots)
+        		dots = true;
+        	if(c == ':' && (i == 0 || i == (values.length() - 1)))
+        		throw new IOException("No puede comenzar ni acabar por :.");        	
+        }
+        
+        if(dots){
+	        String[] interv = values.split(":");
+	        int val1 = Integer.parseInt(interv[0]);
+	        int val2 = Integer.parseInt(interv[1]);
+	        if(val1 > 255 || val2 > 255)
+	        	throw new IOException("Valor de pixel erroneo.");
+	        else{
+	        	if(val1 < val2){
+	        		rangeTransparency[0] = val1;
+	        		rangeTransparency[1] = val2;
+	        	}else{
+	        		rangeTransparency[0] = val2;
+	        		rangeTransparency[1] = val1;
+	        	}
+	        	return rangeTransparency;
+	        }
+        }else{
+        	rangeTransparency[0] = rangeTransparency[1] = Integer.parseInt(values);
+        	if(rangeTransparency[0] > 255)
+        		throw new IOException("Valor de pixel erroneo.");
+        	return rangeTransparency;
+        }
+
+    }
+    
+	public void focusLost(FocusEvent e) {
+		validValue = true;
+		rangeRed = null;
+		rangeGreen = null;
+		rangeBlue = null;
+		if (!getTRed().getText().equals("")) {
+            try {
+                rangeRed = RGBInputPanel.stringToInterval(getTRed().getText());
+            } catch (IOException exc) {
+            	exc.printStackTrace();
+                getTRed().setText("");
+                validValue = false;
+            }
+        }
+
+        if (!getTGreen().getText().equals("")) {
+            try {
+                rangeGreen = RGBInputPanel.stringToInterval(getTGreen().getText());
+            } catch (IOException exc) {
+            	exc.printStackTrace();
+                getTGreen().setText("");
+                validValue = false;
+            }
+        }
+
+        if (!getTBlue().getText().equals("")) {
+            try {
+                rangeBlue = RGBInputPanel.stringToInterval(getTBlue().getText());
+            } catch (IOException exc) {
+            	exc.printStackTrace();
+                getTBlue().setText("");
+                validValue = false;
+            }
+        }
+	}
+
+	/**
+	 * Obtiene la lista de valores del campo Blue.
+	 * @return array multidimensional con los intervalos
+	 */
+	public int[] getRangeBlue() {
+		return rangeBlue;
+	}
+
+	/**
+	 * Obtiene la lista de valores del campo Green.
+	 * @return array multidimensional con los intervalos
+	 */
+	public int[] getRangeGreen() {
+		return rangeGreen;
+	}
+
+	/**
+	 * Obtiene la lista de valores del campo Red.
+	 * @return array multidimensional con los intervalos
+	 */
+	public int[] getRangeRed() {
+		return rangeRed;
+	}
+
+	/**
+	 * Obtiene true si los valores de RGB que han introducido son 
+	 * validos y false si no lo son.
+	 * @return
+	 */
+	public boolean isValidValue() {
+		return validValue;
+	}
+
+	/**
+	 * Activa o desactiva el control
+	 * @param enable True activa el control y false lo desactiva
+	 */
+	public void setControlEnabled(boolean enabled){
+		getTRed().setEnabled(enabled);
+		getTGreen().setEnabled(enabled);
+		getTBlue().setEnabled(enabled);
+	}
+
+	/**
+	 * Asigna el número de bandas activas 
+	 * @param n Número de bandas
+	 */
+	public void setActiveBands(int n){
+		this.getTRed().setEnabled(true);
+		switch(n){
+		case 1:	this.getTGreen().setEnabled(false);
+				this.getTBlue().setEnabled(false);
+				break;
+		case 2:	this.getTGreen().setEnabled(true);
+				this.getTBlue().setEnabled(false);
+				break;
+		case 3:	this.getTGreen().setEnabled(true);
+				this.getTBlue().setEnabled(true);
+				break;
+		}
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RGBInputPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/InfoPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/InfoPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/InfoPanel.java	(revision 10281)
@@ -0,0 +1,468 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.raster;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.image.DataBuffer;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.datastruct.Metadata;
+import org.cresques.ui.filter.FilterRasterDialogPanel;
+
+/**
+ * 
+ * @author Miguel Angel Querol Carratalá <querol_mig@gva.es>
+ * Panel de informacion de la imagen ráster de la que se muestran las propiedades
+ *
+ */
+public class InfoPanel extends JPanel implements ComponentListener{
+
+	private final String bgColor0 = "\"#FEEDD6\""; // light salmon
+    private final String bgColor1 = "\"#EAEAEA\""; // light grey
+    private final String bgColor2 = "\"#F2FEFF\""; // light blue
+    private final String bgColor3 = "\"#FBFFE1\""; // light yellow
+	private JScrollPane jScrollPane = null;
+	public JEditorPane jEditorPane = null;
+    
+	/**
+	 * Nombre del Panel
+	 */
+	public String nom = "Info";
+	
+	/**
+	 * Dialogo padre que contiene a este
+	 */
+	public FilterRasterDialogPanel parent = null;
+	
+	/**
+	 * Matriz de tamaño Nx2 que contiene a las propiedades en forma propiedad/valor
+	 */
+	public Object[][] 					props = null;
+	
+	/**
+	 * Cabecera de las columnas del dialogo
+	 */
+	public Object[] columnNames = { "Propiedad", "Valor" };
+	
+	/**
+	 * Cadenas de caracterres que corresponden con las cabeceras de las tablas
+	 * de información
+	 */
+	public String 						cabInfo = null;
+	public String 						cabCoord = null;
+	public String 						cabProy = null;
+	public String 						cabOrig = null;
+	public String						cabMeta = null;
+	/**
+	 * Vector de GeoRasterFiles para almacenar los archivos que forman
+	 * parte de la capa.
+	 */
+	private GeoRasterFile[]				files = null;
+	
+	/**
+	 * Flags que indican que archivo corresponde a cada banda de color
+	 */
+	private int							redBand = -1;
+	private int							greenBand = -1;
+	private int							blueBand = -1;
+	
+	
+	
+	/**
+	 * This is the default constructor
+	 */
+	public InfoPanel(FilterRasterDialogPanel parent) {
+		super();
+		this.files = parent.grf;
+		this.parent = parent;
+		this.props = parent.props;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	public void initialize() {
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.weightx = 1.0;
+		gridBagConstraints.weighty = 1.0;
+		gridBagConstraints.insets = new java.awt.Insets(5,8,5,8);
+		this.setLayout(new GridBagLayout());
+		this.setSize(445, 239);
+		this.setPreferredSize(new java.awt.Dimension(445,239));
+		this.add(getJScrollPane(), gridBagConstraints);
+		this.addComponentListener(this);
+		//refresh();
+		this.getJEditorPane().repaint();
+		
+	}
+
+	/**
+	 * This method initializes jScrollPane	
+	 * 	
+	 * @return javax.swing.JScrollPane	
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setPreferredSize(new java.awt.Dimension(440,260));
+			jScrollPane.setViewportView(getJEditorPane());
+			
+
+		}
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes jEditorPane	
+	 * 	
+	 * @return javax.swing.JEditorPane	
+	 */
+	private JEditorPane getJEditorPane() {
+		if (jEditorPane == null) {
+			jEditorPane = new JEditorPane();
+			jEditorPane.setEditable(false);
+			jEditorPane.setSize(new java.awt.Dimension(425,220));
+			
+		}
+		return jEditorPane;
+	}
+	
+	public void resetTable(){
+		this.jEditorPane = null;
+	}
+	
+	/**
+	 * Obtiene el nombre del panel.
+	 */
+	public String getName(){
+    	return this.nom;
+    }
+		
+	/**
+	 * Añade los GeoRasterFiles que forman parte de la capa
+	 * @param Vector de GeoRasterFiles que corresponde con los
+	 * archivos cargados.
+	 */
+	public void addFiles(GeoRasterFile[] files){
+		this.files = files;
+		refresh();
+	}
+	
+	/**
+	 * Asigna el número de línea del archivo que corresponde a cada bada de color
+	 * @param bandR Número de linea del archivo que corresponde a la banda roja
+	 * @param bandG Número de linea del archivo que corresponde a la banda verde
+	 * @param bandB Número de linea del archivo que corresponde a la banda azul
+	 */
+	public void setBands(int bandR, int bandG, int bandB){
+		this.redBand = bandR;
+		this.greenBand = bandG;
+		this.blueBand = bandB;
+		refresh();
+	}
+	
+	
+	/**
+	 * Método que crea el código HTML para la tabla de información general
+	 * dentro del panel de información de raster
+	 * @return String con el cófigo HTML que corresponde con la tabla de información
+	 * general
+	 */
+	public String tablaInfo(){
+		String tablaInfo = null;
+		String propiedades="";
+		String color = "\"#FEEDD6\"";
+		
+		String cabecera = 
+			"  <tr valign=\"top\">" +
+            "     <td width=\"417\" height=\"18\" bgcolor="+bgColor3+"align=\"center\" colspan=\"2\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+cabInfo+"</b></font></td>" +
+            "  </tr>";
+		
+		for(int i = 0; i <= 5; i++){
+			
+			if ((i%2 == 0) || i == 0) color = bgColor0;
+			else color = bgColor1;
+			
+			//if(props[i][1] == null) props[i][1] = "";
+			
+			if(props.length > 1){
+				String propiedad = 
+					"  <tr valign=\"top\">" +
+					"     <td width=\"140\" height=\"18\" bgcolor=\"#D6D6D6\"align=\"right\"><font face=\"Arial\" size=\"3\" align=\"right\">"+props[i][0]+"</font></td>" +
+					"     <td width=\"270\" height=\"18\" bgcolor="+color+"align=\"left\"><font face=\"Arial\" size=\"3\">"+props[i][1]+"</font></td>" +
+					"  </tr>";
+				propiedades = propiedades + propiedad; 
+			}
+		}
+		
+		tablaInfo = "<table>" + cabecera + propiedades + "<tr></tr>" + "</table>";
+		
+		return tablaInfo;
+	}
+	
+	
+	
+	
+	/**
+	 * Método que crea el código HTML para la tabla de coordenadas geográficas
+	 * dentro del panel de información de raster
+	 * @return String con el cófigo HTML que corresponde con la tabla de coordenadas
+	 * geográficas.
+	 */
+	public String tablaCoord(){
+		String tablaCoord = null;
+		String propiedades = "";
+		String color = "\"#FEEDD6\"";
+		
+		if(props.length > 1){
+			String cabecera = 
+				"  <tr valign=\"top\">" +
+	            "     <td width=\"417\" height=\"18\" bgcolor="+bgColor3+"align=\"center\" colspan=\"2\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+cabCoord+"</b></font></td>" +
+	            "  </tr>";
+			
+			for(int i = 7; i <= 12; i++){
+				
+				if ((i%2 == 1) || i == 7) color = bgColor0;
+				else color = bgColor1;
+				
+				if(props[i][1] == null) props[i][1] = "";
+				
+				if(props[i][0] != null){
+					String propiedad = 
+						"  <tr valign=\"top\">" +
+						"     <td width=\"140\" height=\"18\" bgcolor=\"#D6D6D6\"align=\"right\"><font face=\"Arial\" size=\"3\" align=\"right\">"+props[i][0]+"</font></td>" +
+						"     <td width=\"270\" height=\"18\" bgcolor="+color+"align=\"left\"><font face=\"Arial\" size=\"3\">"+props[i][1]+"</font></td>" +
+						"  </tr>";
+					propiedades = propiedades + propiedad; 
+				}
+			}
+			tablaCoord = "<table>" + cabecera + propiedades + "<tr></tr>" + "</table>";
+			
+			return tablaCoord;
+			}
+		return "";
+	}
+
+	
+	
+	/**
+	 * Método que crea la tabla de origen de datos dentro del panel
+	 * de Información.
+	 * @param vector con todos los GeoRasterFiles que están dentro de la capa
+	 * @return String con el código HTML de la tabla.
+	 */
+	public String tablaOrigen(GeoRasterFile[] files){
+		String tablaOrigen = null;
+		String propiedades = "";
+		String color = "\"#FEEDD6\"";
+		String rBand = "";
+		String gBand = "";
+		String bBand = "";
+		String bandType = "";
+		int k = 0;
+		
+		
+		String cabecera = 
+			"  <tr valign=\"top\">" +
+			"     <td width=\"417\" height=\"18\" bgcolor="+bgColor3+"align=\"center\" colspan=\"4\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+cabOrig+"</b></font></td>" +
+			"  </tr>";
+		
+		for(int i = 0; i<files.length ; i++){
+			String fName = files[i].getName();
+			String propiedad = 
+				"  <tr valign=\"top\">" +
+				"     <td width=\"417\" height=\"18\" bgcolor="+bgColor1+"align=\"left\" colspan=\"4\"><font face=\"Arial\" size=\"3\" align=\"right\">"+fName+"</font></td>" +
+				"  </tr>";
+			
+			switch (files[i].getDataType()) {
+            case DataBuffer.TYPE_BYTE:
+                bandType = "8U";
+                break;
+            case DataBuffer.TYPE_INT:
+                bandType = "32";
+                break;
+            case DataBuffer.TYPE_DOUBLE:
+                bandType = "64";
+                break;
+            case DataBuffer.TYPE_FLOAT:
+                bandType = "32";
+                break;
+            case DataBuffer.TYPE_SHORT:
+                bandType = "16";
+                break;
+            case DataBuffer.TYPE_USHORT:
+                bandType = "16U";
+                break;
+            case DataBuffer.TYPE_UNDEFINED:
+                bandType = "??";
+                break;
+            }
+			
+			for(int j = 0; j < files[i].getBandCount() ; j++){
+				if ((j%2 == 0) || j == 0) color = bgColor0;
+				else color = bgColor1;
+				
+				if(k == redBand) rBand = "R"; 		else rBand = "";
+				if(k == greenBand) gBand = "G";		else gBand = "";
+				if(k == blueBand) bBand = "B";		else bBand = "";
+				
+				String banda = 
+					"  <tr valign=\"top\">" +
+					"     <td width=\"20\" height=\"18\" bgcolor=\"#D6D6D6\"align=\"center\" colspan=\"1/2\"><font face=\"Arial\" size=\"3\" align=\"right\">"+rBand+"</font></td>" +
+					"     <td width=\"20\" height=\"18\" bgcolor=\"#D6D6D6\"align=\"center\" colspan=\"1/2\"><font face=\"Arial\" size=\"3\" align=\"right\">"+gBand+"</font></td>" +
+					"     <td width=\"20\" height=\"18\" bgcolor=\"#D6D6D6\"align=\"center\" colspan=\"1/2\"><font face=\"Arial\" size=\"3\" align=\"right\">"+bBand+"</font></td>" +
+					"     <td width=\"357\" height=\"18\" bgcolor="+color+"align=\"left\"><font face=\"Arial\" size=\"3\">"+"band "+(j+1)+"["+bandType+"]"+"</font></td>" +
+					"  </tr>";
+				propiedad = propiedad + banda;
+				k++;
+			}
+			propiedades = propiedades + propiedad;
+		}
+		
+		tablaOrigen = "<table>" + cabecera + propiedades + "<tr></tr>" + "</table>";
+		
+		return tablaOrigen;
+	}
+	
+	
+	/**
+	 * Método para crear la tabla de información de metadatos del raster en el
+	 * panel de información de propiedades de raster.
+	 * @param Vector con los georasterfiles cargados en la capa.
+	 * @return String con el código HTML que genera la tabla.
+	 */
+	public String tablaMetadatos(GeoRasterFile[] files){
+		String tablaMetadatos = "";
+		String propiedades = "";
+		String[] metadatos = null;
+		String color = "\"#FEEDD6\"";
+		
+		Metadata meta = null;
+		boolean datos = false;
+		
+		String cabecera = 
+			"  <tr valign=\"top\">" +
+			"     <td width=\"417\" height=\"18\" bgcolor="+bgColor3+"align=\"center\" colspan=\"4\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+cabMeta+"</b></font></td>" +
+			"  </tr>";
+		
+		for (int i = 0 ; i < files.length ; i++){
+			meta = files[i].getMetadata();
+			if (meta != null){
+				datos = true;
+				metadatos = meta.getMetadataString();
+				String fichero = 
+					"  <tr valign=\"top\">" +
+					"     <td width=\"417\" height=\"18\" bgcolor="+bgColor1+"align=\"left\" colspan=\"4\"><font face=\"Arial\" size=\"3\" align=\"right\">"+files[i].getName()+"</font></td>" +
+					"  </tr>";
+				propiedades = propiedades + fichero;
+				for(int j = 0 ; j<metadatos.length ; j++){
+					if ((j%2 == 0) || j == 0) color = bgColor0;
+					else color = bgColor1;
+					int index = metadatos[j].indexOf("=");
+					
+					String propiedad = 
+						"  <tr valign=\"top\">" +
+						"     <td width=\"140\" height=\"18\" bgcolor=\"#D6D6D6\"align=\"right\"><font face=\"Arial\" size=\"3\" align=\"right\">"+metadatos[j].substring(0,index)+"</font></td>" +
+						"     <td width=\"270\" height=\"18\" bgcolor="+color+"align=\"left\"><font face=\"Arial\" size=\"3\">"+metadatos[j].substring(index+1)+"</font></td>" +
+						"  </tr>";
+					propiedades = propiedades + propiedad; 
+				}
+			}
+		}
+		
+		tablaMetadatos = cabecera + propiedades;
+		if(datos == false)
+			return "";
+		
+		return tablaMetadatos;
+	}
+	
+	/**
+	 * Método que dibuja las tablas HTML del panel de información dentro de las
+	 * propiedades de ráster. Se llama cada vez que se actualiza algún dato de las 
+	 * tablas.
+	 *
+	 */
+	public void refresh(){
+		String html = null;
+		
+		html = 
+			"<html>"+
+			this.tablaInfo()+
+			this.tablaCoord();
+		
+		if(this.files != null){
+			html = html + this.tablaOrigen(files) + this.tablaMetadatos(files) +"</html>";
+		}
+		
+		else
+			html = html + "</html>";
+			
+		this.getJEditorPane().setContentType("text/html");
+		this.getJEditorPane().setText(html);
+		this.getJScrollPane().setAlignmentY(0);
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	/**
+	 * Cambia el tamaño del panel cuando se redimensiona su contenedor
+	 */
+	public void componentResized(ComponentEvent e) {
+		if(e.getSource() == this){
+			this.getJScrollPane().setSize(this.getJScrollPane().getWidth() + 1, this.getJScrollPane().getHeight() + 1);
+			this.getJEditorPane().setSize(this.getJEditorPane().getWidth() + 1, this.getJEditorPane().getHeight() + 1);
+			jScrollPane.getVerticalScrollBar().setValue(0);
+		}
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+}
+
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/InfoPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/FileList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/FileList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/FileList.java	(revision 10281)
@@ -0,0 +1,259 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.raster;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+/**
+ * Panel que contiene la lista de ficheros cargados desde donde se leen las bandas visualizadas.
+ * Contiene controles para añadir y eliminar los ficheros, así como un control para seleccionar
+ * el número de bandas a visualizar.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class FileList extends JPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    private JScrollPane jScrollPane = null;
+    private JPanel jPanel = null;
+    private JButton jButton2 = null;
+    private JButton jButton3 = null;
+    private Vector fileNames = null;
+    private JList jList = null;
+    private JPanel jPanel1 = null;
+    private JComboBox jComboBox = null;
+    private JPanel jPanel2 = null;
+    
+    /**
+     * Variable accesible para la traducción.
+     */
+    public JLabel lbandasVisibles = null;
+
+    /**
+    * This is the default constructor
+    */
+    public FileList() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes jScrollPane
+     *
+     * @return javax.swing.JScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            jScrollPane.setViewportView(getJList());
+        }
+
+        return jScrollPane;
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+        if (jPanel == null) {
+            FlowLayout flowLayout2 = new FlowLayout();
+            jPanel = new JPanel();
+            jPanel.setLayout(flowLayout2);
+            flowLayout2.setAlignment(java.awt.FlowLayout.RIGHT);
+            jPanel.add(getJPanel1(), null);
+        }
+
+        return jPanel;
+    }
+
+    /**
+     * This method initializes jButton2
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getJButtonAdd() {
+        if (jButton2 == null) {
+            jButton2 = new JButton("Añadir");
+            jButton2.setPreferredSize(new java.awt.Dimension(80, 25));
+        }
+
+        return jButton2;
+    }
+
+    /**
+     * This method initializes jButton3
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getJButtonRemove() {
+        if (jButton3 == null) {
+            jButton3 = new JButton("Eliminar");
+            jButton3.setPreferredSize(new java.awt.Dimension(80, 25));
+        }
+
+        return jButton3;
+    }
+
+    /**
+     * This method initializes jList
+     *
+     * @return javax.swing.JList
+     */
+    public JList getJList() {
+        if (jList == null) {
+            fileNames = new Vector();
+            jList = new JList(fileNames);
+        }
+
+        return jList;
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(300, 248);
+        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        this.add(getJPanel(), java.awt.BorderLayout.EAST);
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel1() {
+        if (jPanel1 == null) {
+            jPanel1 = new JPanel();
+            jPanel1.setPreferredSize(new java.awt.Dimension(86, 180));
+            jPanel1.add(getJButtonAdd(), null);
+            jPanel1.add(getJButtonRemove(), null);
+            jPanel1.add(getJPanel2(), null);
+        }
+
+        return jPanel1;
+    }
+
+    /**
+     * Añade el nombre de un fichero a la lista
+     * @param fName
+     */
+    public void addFName(String fName) {
+        fileNames.add(fName);
+        jList = new JList(fileNames);
+        jScrollPane.setViewportView(jList);
+        jList.show();
+    }
+
+    /**
+     * Elimina un fichero de la lista
+     * @param fName
+     */
+    public void removeFName(String fName) {
+        for (int i = 0; i < fileNames.size(); i++) {
+            if (((String) fileNames.get(i)).endsWith(fName)) {
+                fileNames.remove(i);
+            }
+        }
+
+        jList = new JList(fileNames);
+        jScrollPane.setViewportView(jList);
+        jList.show();
+    }
+
+    /**
+     * Obtiene el número de ficheros en la lista
+     * @return
+     */
+    public int getNFiles() {
+        return fileNames.size();
+    }
+
+    /**
+     * Asigna al combo del número de bandas la lista de ellas
+     */
+    public void setList(String[] list) {
+        if (jComboBox != null) {
+            jComboBox.removeAllItems();
+
+            for (int i = 0; i < list.length; i++)
+                jComboBox.addItem(list[i]);
+
+            jComboBox.setSelectedIndex(list.length - 1);
+        }
+    }
+
+    /**
+     * This method initializes jComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    public JComboBox getJComboBox() {
+        if (jComboBox == null) {
+            String[] list = { "1", "2", "3" };
+            jComboBox = new JComboBox(list);
+            jComboBox.setSelectedIndex(2);
+            jComboBox.setPreferredSize(new java.awt.Dimension(36, 25));
+        }
+
+        return jComboBox;
+    }
+
+    /**
+     * This method initializes jPanel2
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel2() {
+        if (jPanel2 == null) {
+            lbandasVisibles = new JLabel();
+            jPanel2 = new JPanel();
+            lbandasVisibles.setText("Bandas");
+            jPanel2.add(lbandasVisibles, null);
+            jPanel2.add(getJComboBox(), null);
+        }
+
+        return jPanel2;
+    }
+    
+    public void setResize (int nWidth, int nHeight){
+    	this.jScrollPane.setSize(this.jScrollPane.getSize().width + 1, this.jScrollPane.getSize().height + 1);
+    	this.jList.setSize(this.jList.getSize().width + 1, this.jList.getSize().height + 1);
+    	this.setSize(428 + nWidth, 110 + nHeight/2);
+    }
+} //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/FileList.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/DataInputProps.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/DataInputProps.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/DataInputProps.java	(revision 10281)
@@ -0,0 +1,694 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.raster;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+
+import javax.swing.JComboBox;
+import javax.swing.JPanel;
+
+import org.cresques.io.CXMLParser;
+import org.cresques.io.GeoRasterWriter;
+
+
+/*
+ * Created on 04-mar-2005
+ *
+ */
+
+/**
+ * Panel que contiene las propiedades de un driver de escritura.
+ * Este panel se monta a partir de un XML que es solicitado al driver
+ * porque dependiendo del driver tendrá unas propiedades u otras.
+ * Los elementos del panel son XMLObjects que se almacenan en
+ * vectores. El XML se procesa con la clase ProcessXML que será la
+ * encargada a partir del texto en XML de crear los XMLObjects que
+ * compondran el panel.
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class DataInputProps extends JPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    private GeoRasterWriter writer = null;
+    private String formato = null;
+    private JPanel jPanel = null;
+    private JPanel panelSup = null;
+    private JComboBox jComboBox = null;
+    private XMLPanel[] panels = null;
+    private XMLCombo[] combos = null;
+    private XMLLabel[] labels = null;
+    private XMLSlider[] sliders = null;
+    private XMLCheck[] checks = null;
+    private XMLText[] texts = null;
+
+    public DataInputProps(){};
+    
+    public DataInputProps(GeoRasterWriter writer) {
+        super();
+        this.writer = writer;
+        this.formato = writer.getIdent();
+
+        ProcessXML pXML = new ProcessXML(writer.getXMLPropertiesDialog());
+        panels = pXML.getPanels();
+        labels = pXML.getLabels();
+        combos = pXML.getCombos();
+        sliders = pXML.getSliders();
+        checks = pXML.getChecks();
+        texts = pXML.getTexts();
+        initialize();
+        addComponents();
+
+        //showElements();
+    }
+
+    /**
+     * Inicializa el panel central con los datos del primer panel de la lista
+     */
+    private void initialize() {
+        for (int i = 0; i < this.panels.length; i++) {
+            if (i == 0) {
+                if (panels[i].layout.equals("FlowLayout")) {
+                    this.setLayout(new FlowLayout());
+                }
+
+                if (panels[i].layout.equals("BorderLayout")) {
+                    this.setLayout(new BorderLayout());
+                }
+                this.setPreferredSize(new Dimension(panels[i].sizex, panels[i].sizey));
+                this.setSize(panels[i].sizex, panels[i].sizey);
+            } else {
+                if ((panels[i].position != null) &&
+                        !panels[i].position.equals("")) {
+                    this.add(panels[i], panels[i].position);
+                } else {
+                    this.add(panels[i]);
+                }
+            }
+        }
+    }
+
+    /**
+     * Añade los componentes de los vectores al panel
+     *
+     */
+    public void addComponents() {
+        for (int iPanel = 1; iPanel < panels.length; iPanel++) {
+            int nElemInsert = 0;
+
+            while (nElemInsert < panels[iPanel].nElements) {
+                for (int i = 0; i < labels.length; i++) {
+                    if ((labels[i].numPanel == iPanel) &&
+                            (labels[i].posIntoPanel == nElemInsert)) {
+                        if ((labels[i].position != null) &&
+                                !labels[i].position.equals("")) {
+                            panels[iPanel].add(labels[i], labels[i].position);
+                        } else {
+                            panels[iPanel].add(labels[i]);
+                        }
+
+                        nElemInsert++;
+                    }
+                } //for(int i=0;i<labels.length;i++)
+
+                for (int i = 0; i < combos.length; i++) {
+                    if ((combos[i].numPanel == iPanel) &&
+                            (combos[i].posIntoPanel == nElemInsert)) {
+                        if ((combos[i].position != null) &&
+                                !combos[i].position.equals("")) {
+                            panels[iPanel].add(combos[i], combos[i].position);
+                        } else {
+                            panels[iPanel].add(combos[i]);
+                        }
+
+                        nElemInsert++;
+                    }
+                } //for(int i=0;i<combos.length;i++)
+
+                for (int i = 0; i < sliders.length; i++) {
+                    if ((sliders[i].numPanel == iPanel) &&
+                            (sliders[i].posIntoPanel == nElemInsert)) {
+                        if ((sliders[i].position != null) &&
+                                !sliders[i].position.equals("")) {
+                            panels[iPanel].add(sliders[i], sliders[i].position);
+                        } else {
+                            panels[iPanel].add(sliders[i]);
+                        }
+
+                        nElemInsert++;
+                    }
+                } //for(int i=0;i<sliders.length;i++)
+
+                for (int i = 0; i < checks.length; i++) {
+                    if ((checks[i].numPanel == iPanel) &&
+                            (checks[i].posIntoPanel == nElemInsert)) {
+                        if ((checks[i].position != null) &&
+                                !checks[i].position.equals("")) {
+                            panels[iPanel].add(checks[i], checks[i].position);
+                        } else {
+                            panels[iPanel].add(checks[i]);
+                        }
+
+                        nElemInsert++;
+                    }
+                } //for(int i=0;i<checks.length;i++)
+
+                for (int i = 0; i < texts.length; i++) {
+                    if ((texts[i].numPanel == iPanel) &&
+                            (texts[i].posIntoPanel == nElemInsert)) {
+                        if ((texts[i].position != null) &&
+                                !texts[i].position.equals("")) {
+                            panels[iPanel].add(texts[i], texts[i].position);
+                        } else {
+                            panels[iPanel].add(texts[i]);
+                        }
+
+                        nElemInsert++;
+                    }
+                } //for(int i=0;i<checks.length;i++)
+            } //while(nElemInsert<panels[iPanel].nElements)
+        } //for(int iPanel=1;iPanel<panels.length;iPanel++)
+    }
+
+    /**
+     * Obtiene el número de componentes que recogen propiedades
+     * para el driver cargado
+     * @return        Número de componentes
+     */
+    public int getNElements() {
+        return (combos.length + sliders.length + checks.length + texts.length);
+    }
+
+    /**
+     * Obtiene los identificadores de las propiedades del cuadro de dialogo
+     * @return        Lista con los identificadores de propiedades
+     */
+    public String[] getElements() {
+        String[] lista = new String[this.getNElements()];
+
+        for (int i = 0; i < combos.length; i++)
+            lista[i] = combos[i].id + "=" +
+                       combos[i].getSelectedItem().toString();
+
+        for (int i = 0; i < sliders.length; i++)
+            lista[combos.length + i] = sliders[i].id + "=" +
+                                       sliders[i].getSlider().getValue();
+
+        for (int i = 0; i < checks.length; i++) {
+            String sel = null;
+
+            if (checks[i].isSelected()) {
+                sel = new String("yes");
+            } else {
+                sel = new String("no");
+            }
+
+            lista[combos.length + sliders.length + i] = checks[i].id + "=" +
+                                                        sel;
+        }
+
+        for (int i = 0; i < texts.length; i++)
+            lista[i] = texts[i].id + "=" + texts[i].getText();
+
+        return lista;
+    }
+
+    /**
+     * Obtiene la lista de Combos
+     * @return XMLCombo[]
+     */
+    public XMLCombo[] getCombos() {
+        return combos;
+    }
+
+    /**
+     * Obtiene la lista de Sliders
+     * @return XMLSlider[]
+     */
+    public XMLSlider[] getSliders() {
+        return sliders;
+    }
+
+    /**
+     * Obtiene la lista de CheckBoxs
+     * @return XMLCheck[]
+     */
+    public XMLCheck[] getChecks() {
+        return checks;
+    }
+
+    /**
+     * Muestra información sobre los elementos añadidos al panel
+     *
+     */
+    public void showElements() {
+        for (int i = 0; i < panels.length; i++)
+            System.out.println("PANEL " + i + " NElem=" + panels[i].nElements);
+
+        for (int i = 0; i < labels.length; i++)
+            System.out.println("LABEL " + i + " Panel=" + labels[i].numPanel +
+                               " PosIntoPanel=" + labels[i].posIntoPanel);
+
+        for (int i = 0; i < combos.length; i++)
+            System.out.println("COMBO " + i + " Panel=" + combos[i].numPanel +
+                               " PosIntoPanel=" + combos[i].posIntoPanel);
+
+        for (int i = 0; i < checks.length; i++)
+            System.out.println("CHECK " + i + " Panel=" + checks[i].numPanel +
+                               " PosIntoPanel=" + checks[i].posIntoPanel);
+
+        for (int i = 0; i < sliders.length; i++)
+            System.out.println("SLIDER " + i + " Panel=" + sliders[i].numPanel +
+                               " PosIntoPanel=" + sliders[i].posIntoPanel);
+    }
+}
+
+
+/**
+ * Clase para procesar el XML que manda un driver de escritura y
+ * que corresponde a la ventana de dialogo para las propiedades del mismo.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+class ProcessXML {
+    private XMLPanel[] panels = null;
+    private XMLCombo[] combos = null;
+    private XMLLabel[] labels = null;
+    private XMLSlider[] sliders = null;
+    private XMLCheck[] checks = null;
+    private XMLText[] texts = null;
+    private int contPanels = 0;
+    private int contCombos = 0;
+    private int contLabels = 0;
+    private int contSliders = 0;
+    private int contChecks = 0;
+    private int contTexts = 0;
+
+    /**
+     * Constructor
+     * @param XML        XML correspondiente a la ventana de dialogo
+     */
+    public ProcessXML(String XML) {
+        CXMLParser parser = new CXMLParser(XML);
+
+        //Reservamos memoria para el número de paneles
+        panels = new XMLPanel[parser.getNumTags("panel")];
+        combos = new XMLCombo[parser.getNumTags("combo")];
+        labels = new XMLLabel[parser.getNumTags("label")];
+        sliders = new XMLSlider[parser.getNumTags("slider")];
+        checks = new XMLCheck[parser.getNumTags("check")];
+        texts = new XMLText[parser.getNumTags("text")];
+
+        String valor = parser.getValue("window", true);
+
+        while (!valor.equals("")) {
+            String tag = parser.getTag();
+
+            if (tag.equals("panel")) {
+                processPanel(parser);
+            } else if (tag.equals("label")) {
+                processLabel(parser);
+            } else if (tag.equals("combo")) {
+                processCombo(parser);
+            } else if (tag.equals("check")) {
+                processCheck(parser);
+            } else if (tag.equals("slider")) {
+                processSlider(parser);
+            } else if (tag.equals("text")) {
+                processText(parser);
+            } else if (tag.equals("")) {
+                valor = new String("");
+            } else {
+                valor = parser.getXML();
+            }
+        }
+
+        if (!valor.equals("")) {
+            System.err.println("Se ha interrumpido el proceso!!!");
+        }
+    }
+
+    /**
+     * Obtiene los paneles leidos del XML como objetos XMLPanel
+     * @return        Listado de XMLPanel
+     */
+    public XMLPanel[] getPanels() {
+        return panels;
+    }
+
+    /**
+     * Obtiene los combos leidos del XML como objetos XMLCombo
+     * @return        Listado de XMLCombo
+     */
+    public XMLCombo[] getCombos() {
+        return combos;
+    }
+
+    /**
+     * Obtiene los label leidos del XML como objetos XMLLabel
+     * @return        Listado de XMLLabel
+     */
+    public XMLLabel[] getLabels() {
+        return labels;
+    }
+
+    /**
+     * Obtiene los slider leidos del XML como objetos XMLSlider
+     * @return        Listado de XMLSlider
+     */
+    public XMLSlider[] getSliders() {
+        return sliders;
+    }
+
+    /**
+     * Obtiene los checks leidos del XML como objetos XMLCheks
+     * @return        Listado de XMLCheck
+     */
+    public XMLCheck[] getChecks() {
+        return checks;
+    }
+
+    /**
+     * Obtiene los texts leidos del XML como objetos XMLText
+     * @return        Listado de XMLText
+     */
+    public XMLText[] getTexts() {
+        return texts;
+    }
+
+    /**
+     * Procesa un tag panel
+     * @param parser        Objeto parser con el XML
+     */
+    public void processPanel(CXMLParser parser) {
+        panels[contPanels] = new XMLPanel();
+
+        String sizex = parser.getAttr("panel", "sizex");
+        String sizey = parser.getAttr("panel", "sizey");
+
+        if ((sizex != null) && !sizex.equals("")) {
+            panels[contPanels].sizex = Integer.parseInt(sizex);
+        }
+
+        if ((sizey != null) && !sizey.equals("")) {
+            panels[contPanels].sizey = Integer.parseInt(sizey);
+        }
+
+        panels[contPanels].layout = parser.getAttr("panel", "layout");
+        panels[contPanels].border = parser.getAttr("panel", "border");
+        panels[contPanels].position = parser.getAttr("panel", "position");
+        panels[contPanels].align = parser.getAttr("panel", "align");
+        panels[contPanels].init();
+        contPanels++;
+
+        //System.out.println("PANEL="+sizex+"X"+sizey+" Layout="+layout+" Border="+border+" Pos="+position+" Align="+align);
+        parser.getValue("panel", true);
+    }
+
+    /**
+         * Procesa un tag label
+         * @param parser        Objeto parser con el XML
+         */
+    public void processLabel(CXMLParser parser) {
+        labels[contLabels] = new XMLLabel();
+
+        //Posicionamiento. En q panel y su posición dentro de este
+        labels[contLabels].numPanel = contPanels - 1;
+        panels[contPanels - 1].nElements++;
+        labels[contLabels].posIntoPanel = panels[contPanels - 1].nElements - 1;
+
+        labels[contLabels].position = parser.getAttr("label", "position");
+        labels[contLabels].text = parser.getValue("label", true);
+        labels[contLabels].init();
+        contLabels++;
+    }
+
+    /**
+     * Procesa un tag combo
+     * @param parser        Objeto parser con el XML
+     */
+    public void processCombo(CXMLParser parser) {
+        combos[contCombos] = new XMLCombo();
+
+        //Posicionamiento. En q panel y su posición dentro de este
+        combos[contCombos].numPanel = contPanels - 1;
+        panels[contPanels - 1].nElements++;
+        combos[contCombos].posIntoPanel = panels[contPanels - 1].nElements - 1;
+
+        combos[contCombos].selected = parser.getAttr("combo", "selected");
+        combos[contCombos].position = parser.getAttr("combo", "position");
+        combos[contCombos].id = parser.getAttr("combo", "ident");
+
+        String sizex = parser.getAttr("combo", "sizex");
+        String sizey = parser.getAttr("combo", "sizey");
+
+        if ((sizex != null) && !sizex.equals("")) {
+            combos[contCombos].sizex = Integer.parseInt(sizex);
+        }
+
+        if ((sizey != null) && !sizey.equals("")) {
+            combos[contCombos].sizey = Integer.parseInt(sizey);
+        }
+
+        String valoresCombo = parser.getValue("combo", true);
+
+        processComboValues(parser, combos[contCombos]);
+        combos[contCombos].init();
+        contCombos++;
+    }
+
+    /**
+     * Procesa los elementos de un combo
+     * @param parser        Objeto parser con el XML
+     * @param combo        Objeto XMLCombo del cual se procesan los elementos
+     */
+    public void processComboValues(CXMLParser parser, XMLCombo combo) {
+        String elem = parser.getValue("elem", true);
+
+        if (elem != null) {
+            combo.addItem(elem);
+        }
+
+        if (parser.getTag().equals("elem")) {
+            processComboValues(parser, combo);
+        }
+    }
+
+    /**
+     * Procesa un tag check
+     * @param parser        Objeto parser con el XML
+     */
+    public void processCheck(CXMLParser parser) {
+        String select = parser.getAttr("check", "selected");
+
+        if (select.equals("yes")) {
+            checks[contChecks] = new XMLCheck(parser.getAttr("check", "text"),
+                                              true);
+        } else {
+            checks[contChecks] = new XMLCheck(parser.getAttr("check", "text"),
+                                              false);
+        }
+
+        checks[contChecks].position = parser.getAttr("check", "position");
+        checks[contChecks].id = parser.getAttr("check", "ident");
+
+        String sizex = parser.getAttr("check", "sizex");
+        String sizey = parser.getAttr("check", "sizey");
+
+        if ((sizex != null) && !sizex.equals("")) {
+            checks[contChecks].sizex = Integer.parseInt(sizex);
+        }
+
+        if ((sizey != null) && !sizey.equals("")) {
+            checks[contChecks].sizey = Integer.parseInt(sizey);
+        }
+
+        parser.getValue("check", true);
+
+        //Posicionamiento. En q panel y su posición dentro de este
+        checks[contChecks].numPanel = contPanels - 1;
+        panels[contPanels - 1].nElements++;
+        checks[contChecks].posIntoPanel = panels[contPanels - 1].nElements - 1;
+
+        checks[contChecks].init();
+        contChecks++;
+    }
+
+    /**
+     * Procesa un tag slider
+     * @param parser        Objeto parser con el XML
+     */
+    public void processSlider(CXMLParser parser) {
+        String min = null;
+        String max = null;
+        String value = null;
+        String minorspacing = null;
+        String majorspacing = null;
+        String name = parser.getAttr("slider", "name");
+        String id = parser.getAttr("slider", "ident");
+        String position = parser.getAttr("slider", "position");
+        String sizex = parser.getAttr("slider", "sizex");
+        String sizey = parser.getAttr("slider", "sizey");
+        String elem = parser.getValue("slider", true);
+
+        String tag = parser.getTag();
+
+        while (tag.equals("min") || tag.equals("max") || tag.equals("value") ||
+                   tag.equals("minorspacing") || tag.equals("majorspacing")) {
+            if (tag.equals("min")) {
+                min = parser.getValue("min", true);
+            }
+
+            if (tag.equals("max")) {
+                max = parser.getValue("max", true);
+            }
+
+            if (tag.equals("value")) {
+                value = parser.getValue("value", true);
+            }
+
+            if (tag.equals("minorspacing")) {
+                minorspacing = parser.getValue("minorspacing", true);
+            }
+
+            if (tag.equals("majorspacing")) {
+                majorspacing = parser.getValue("majorspacing", true);
+            }
+
+            tag = parser.getTag();
+        }
+
+        sliders[contSliders] = new XMLSlider(name, min, max, value,
+                                             minorspacing, majorspacing);
+        sliders[contSliders].position = position;
+        sliders[contSliders].id = id;
+
+        if ((sizex != null) && !sizex.equals("")) {
+            sliders[contSliders].sizex = Integer.parseInt(sizex);
+        }
+
+        if ((sizey != null) && !sizey.equals("")) {
+            sliders[contSliders].sizey = Integer.parseInt(sizey);
+        }
+
+        //Posicionamiento. En q panel y su posición dentro de este
+        sliders[contSliders].numPanel = contPanels - 1;
+        panels[contPanels - 1].nElements++;
+        sliders[contSliders].posIntoPanel = panels[contPanels - 1].nElements -
+                                            1;
+
+        contSliders++;
+    }
+
+    /**
+    * Procesa un tag text
+    * @param parser        Objeto parser con el XML
+    */
+    public void processText(CXMLParser parser) {
+        texts[contTexts] = new XMLText(parser.getAttr("text", "text"));
+
+        String sizex = parser.getAttr("text", "sizex");
+        String sizey = parser.getAttr("text", "sizey");
+
+        if ((sizex != null) && !sizex.equals("")) {
+            texts[contTexts].sizex = Integer.parseInt(sizex);
+        }
+
+        if ((sizey != null) && !sizey.equals("")) {
+            texts[contTexts].sizey = Integer.parseInt(sizey);
+        }
+
+        //Posicionamiento. En q panel y su posición dentro de este
+        texts[contTexts].numPanel = contPanels - 1;
+        panels[contPanels - 1].nElements++;
+        texts[contTexts].posIntoPanel = panels[contPanels - 1].nElements - 1;
+
+        texts[contTexts].position = parser.getAttr("text", "position");
+        texts[contTexts].text = parser.getValue("text", true);
+        texts[contTexts].init();
+        contTexts++;
+    }
+}
+
+
+/**
+ * Clase que representa a un panel obtenido a partir del XML
+ * que manda un driver de escritura.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+class XMLPanel extends JPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public int sizex = 0;
+    public int sizey = 0;
+    public String layout = null;
+    public String border = null;
+    public String position = null;
+    public String align = null;
+    public int nElements = 0;
+
+    /**
+     * Inicialización del XMLPanel
+     *
+     */
+    public void init() {
+        if (layout.equals("FlowLayout")) {
+            FlowLayout fl = new FlowLayout();
+            this.setLayout(fl);
+
+            if (align.equals("left")) {
+                fl.setAlignment(java.awt.FlowLayout.LEFT);
+            } else if (align.equals("center")) {
+                fl.setAlignment(java.awt.FlowLayout.CENTER);
+            } else if (align.equals("right")) {
+                fl.setAlignment(java.awt.FlowLayout.RIGHT);
+            } else if (align.equals("leading")) {
+                fl.setAlignment(java.awt.FlowLayout.LEADING);
+            } else if (align.equals("trailing")) {
+                fl.setAlignment(java.awt.FlowLayout.TRAILING);
+            }
+        } else if (layout.equals("BorderLayout")) {
+            this.setLayout(new BorderLayout());
+        }
+
+        if ((sizex != 0) && (sizey != 0)) {
+            this.setPreferredSize(new java.awt.Dimension(sizex, sizey));
+        }
+
+        if (border.equals("yes")) {
+            this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,
+                                                                      1));
+        }
+    }
+}
+
+
+
+
+
+
+
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/DataInputProps.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramPanel.java	(revision 10281)
@@ -0,0 +1,760 @@
+/*
+ * Created on 19-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.raster;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Histogram;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.ui.raster.listener.HistogramPanelListener;
+import org.cresques.util.Utilities;
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.graphic.GraphicChartPanel;
+import org.gvsig.gui.beans.graphic.GraphicContainer;
+import org.gvsig.gui.beans.table.TableContainer;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Interfaz de usuario para la representación de histogramas.
+ * 
+ * @author Diego Guerrero (diego.guerrero@uclm.es)
+ *
+ */
+
+public class HistogramPanel extends BaseComponent {
+	
+	public static int					MAXBANDS = 10;  
+	private int 						HSUP = 60;
+	private int 						HTABLE = 105;
+	private int 						MARGIN = 12;
+	
+	private JPanel 						pGeneral = null;
+	private JPanel 						pSupControl = null;
+	private GraphicContainer 			pHistogram = null;
+	private JPanel 						pTable = null;
+	private JComboBox 					jComboBoxOrigen = null;
+	private JComboBox 					jComboBoxTipo = null;
+	private JComboBox 					jComboBands = null;
+	private JButton 					jButtonClear = null;
+	private JButton 					jButtonBands = null;
+	private JButton 					bTable = null;
+	private TableContainer 				tableContainer = null;
+	private HistogramPanelListener  	listener = null;
+		
+	private JPanel 						pButtons = null;
+	private int 						width, height;
+	private JPanel 						cbSup = null;
+	private JLabel 						lOrigin = null;
+	private JLabel 						lBands = null;
+	private JLabel 						lType = null;
+	/**
+	 * Objeto histograma para la gestión de procesos de histograma
+	 */
+	private	Histogram					histogramObj = null;
+	/**
+	 * Bandas que se están mostrando en el gráfico. Se inicializa con las 3 bandas
+	 * RGB de la visualización. Este array puede tener más elementos ya que si las 
+	 * bandas no son de visualización (bandas de la imagen en disco) tendrá un elemento
+	 * por cada una. 
+	 */
+	public boolean[]					showBands = {true, true, true};
+	/**
+	 * Tipo de histograma 
+	 * 0 = acumulado 
+	 * 1 = No acumulado
+	 */
+	private int							type = 0;
+	/**
+	 * Tipo de fuente de datos para el histograma
+	 * 0 = Datos de la vista
+	 * 1 = extent de la vista y datos leidos desde la imagen
+	 * 2 = histograma de la imagen completa
+	 */
+	private int 						histogramDataSource = 0;
+	
+	private HistogramIncrement 			incrementPanel = null;
+	
+	/**
+	 * último histograma visualizado en el gráfico
+	 */
+	private int[][]						lastHistogram = null;
+	/**
+	 * Tipo de dato de la petición. Si la petición del histograma es de la vista el tipo
+	 * de dato será byte aunque la imagen sea de 16 bits. Si la petición es de los datos 
+	 * reales de la imagen entonces el tipo de dato de la petición coincide con el tipo
+	 * de datos de la imagen.
+	 */
+	private int							requestDataType = RasterBuf.TYPE_BYTE;
+	
+	/**
+	 * This method initializes 
+	 * @param histograms
+	 */
+	public HistogramPanel(int w, int h){
+		super();
+		this.width = w;
+		this.height = h;
+		initialize();
+		this.setComponentSize(width, height);
+	}
+
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public HistogramPanel() {
+		super();
+		initialize();
+		this.setComponentSize(width, height);
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		listener = new HistogramPanelListener(this);
+		BorderLayout l = new BorderLayout();
+		setLayout(l);
+        add(getCbSup(), l.NORTH);
+        add(getPHistogram(), l.CENTER);
+        add(getPTable(), l.SOUTH);
+        setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+        listener.setControlListeners();
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 2;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.gridy = 1;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+			pGeneral = new JPanel();
+			pGeneral.setLayout(new GridBagLayout());
+			//pGeneral.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pGeneral.add(getCbSup(), gridBagConstraints);
+			pGeneral.add(getPHistogram(), gridBagConstraints1);
+			pGeneral.add(getPTable(), gridBagConstraints2);
+		}
+		return pGeneral;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public GraphicContainer getPHistogram() {
+		if (pHistogram == null) {
+			pHistogram = new GraphicContainer(width - MARGIN, height - HSUP - HTABLE, false);
+			//pHistogram.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+		}
+		return pHistogram;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPTable() {
+		if (pTable == null) {
+			pTable = new JPanel();
+			//pTable.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+						
+			FlowLayout flowlayout = new FlowLayout();
+			flowlayout.setVgap(0);
+			flowlayout.setHgap(0);
+			flowlayout.setAlignment(java.awt.FlowLayout.LEFT);
+			
+			pTable.setLayout(flowlayout);
+			pTable.add(getTable(), null);
+			pTable.add(getBCreateTable(), null);
+		}
+		return pTable;
+	}
+
+	/**
+	 * Obtiene la tabla de estadisticas
+	 * @return
+	 */
+	public TableContainer getTable(){
+		if(tableContainer == null){
+			String[] columnNames = {Messages.getText("banda"), Messages.getText("minimo"), Messages.getText("maximo"), Messages.getText("media"), Messages.getText("mediana"), Messages.getText("npixeles")};
+			int[] columnWidths = {50, 65, 65, 65, 65, 115};
+			tableContainer = new TableContainer(width - 200, HTABLE - 12, columnNames, columnWidths);
+			tableContainer.setControlVisible(false);
+			tableContainer.setModel("ListModel");
+			tableContainer.initialize();
+			try{
+				tableContainer.setEditable(false);
+			}catch(NotInitializeException ex){
+				System.out.println("Tabla no inicializada");
+			}	
+		}
+		return tableContainer;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getCbSup() {
+		if (cbSup == null) {
+			lOrigin = new JLabel();
+			lOrigin.setText(Messages.getText("origen")+":");
+			lBands = new JLabel();
+			lBands.setText(Messages.getText("bandas")+":");
+			lType = new JLabel();
+			lType.setText(Messages.getText("tipo")+":");
+			
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.gridx = 0;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(0,0,0,80);
+			gridBagConstraints1.gridy = 0;
+			gridBagConstraints1.gridx = 1;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridy = 0;
+			gridBagConstraints2.gridx = 3;
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.insets = new java.awt.Insets(2,0,0,0);
+			gridBagConstraints3.gridy = 1;
+			gridBagConstraints3.gridx = 0;
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.insets = new java.awt.Insets(2,0,0,80);
+			gridBagConstraints4.gridy = 1;
+			gridBagConstraints4.gridx = 1;
+			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			gridBagConstraints5.insets = new java.awt.Insets(2,0,0,0);
+			gridBagConstraints5.gridy = 1;
+			gridBagConstraints5.gridx = 3;
+			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+			gridBagConstraints6.gridy = 0;
+			gridBagConstraints6.gridx = 2;
+			
+			cbSup = new JPanel();
+			//cbSup.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			
+			cbSup.setSize(new java.awt.Dimension(width - MARGIN, HSUP));
+			cbSup.setPreferredSize(new java.awt.Dimension(height - MARGIN, HSUP));
+			
+			cbSup.setLayout(new GridBagLayout());
+			cbSup.add(lOrigin, gridBagConstraints);
+			cbSup.add(getJComboBoxOrigen(), gridBagConstraints1);
+			
+			cbSup.add(lBands, gridBagConstraints6);
+			
+			cbSup.add(getJComboBands(), gridBagConstraints2);
+			cbSup.add(lType, gridBagConstraints3);
+			cbSup.add(getJComboBoxTipo(), gridBagConstraints4);
+			cbSup.add(getJButtonClear(), gridBagConstraints5);
+		}
+		return cbSup;
+	}
+	
+	/**
+	 * Obtiene el combo con la selección de tipo de histograma, acumulado/no acumulado
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getJComboBoxTipo() {
+		if (jComboBoxTipo == null) {
+			String lista [] = {Messages.getText("no_acumulado"),Messages.getText("acumulado")};
+			jComboBoxTipo = new JComboBox(lista);
+			jComboBoxTipo.addActionListener(listener);
+			jComboBoxTipo.setPreferredSize(new java.awt.Dimension(150,25));
+		}
+		return jComboBoxTipo;
+	}
+	
+	/**
+	 * Obtiene el combo con la selección de la fuente de datos en el calculo del histograma,
+	 * datos de la vista, datos reales con el extent de la vista e imagen completa.
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getJComboBoxOrigen() {
+		if (jComboBoxOrigen == null) {
+			String lista [] = {Messages.getText("datos_visualizados"),Messages.getText("vista_datasource"),Messages.getText("imagen_completa")};
+			jComboBoxOrigen = new JComboBox(lista);
+			jComboBoxOrigen.addActionListener(listener);
+			jComboBoxOrigen.setPreferredSize(new java.awt.Dimension(150,25));
+		}
+		return jComboBoxOrigen;
+	}
+	
+	/**
+	 *Asigna el combo "Origen" el valor de solo vista para el calculo del histograma. Esa opción es 
+	 *utilizada para extensiones que necesitan histograma pero no pueden acceder a la fuente de datos.
+	 */
+	public void setOnlyViewValue(){
+		HistogramPanelListener.comboEventEnable = false;
+		getJComboBoxOrigen().removeAllItems();
+		getJComboBoxOrigen().addItem(Messages.getText("vista"));
+		HistogramPanelListener.comboEventEnable = true;
+	}
+	
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getJButtonClear() {
+		if (jButtonClear == null) {
+			jButtonClear = new JButton();
+			jButtonClear.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+			jButtonClear.setText(Messages.getText("limpiar"));
+			jButtonClear.addActionListener(listener);
+			jButtonClear.setPreferredSize(new java.awt.Dimension(100,25));
+		}
+		return jButtonClear;
+	}
+	
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBCreateTable() {
+		if (bTable == null) {
+			bTable = new JButton();
+			bTable.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+			bTable.setText(Messages.getText("crear_tabla"));
+			bTable.addActionListener(listener);
+			bTable.setPreferredSize(new java.awt.Dimension(150,25));
+		}
+		return bTable;
+	}
+	
+	/**
+	 * This method initializes jComboBox	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getJComboBands() {
+		if (jComboBands == null) {
+			String lista [] = {Messages.getText("todas")};
+			jComboBands = new JComboBox(lista);
+			jComboBands.addActionListener(listener);
+			jComboBands.setPreferredSize(new java.awt.Dimension(100,25));
+		}
+		return jComboBands;
+	}
+		
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		this.width = w;
+		this.height = h;
+		int margin_table = 200;
+				
+		this.setPreferredSize(new java.awt.Dimension(width, height));
+		getPHistogram().setComponentSize(width - MARGIN, height - HSUP - HTABLE);
+		getTable().setComponentSize(width - margin_table, HTABLE - MARGIN);		
+	}
+	
+	//*************************************************************
+	//MÉTODOS DEL CONTROL
+	
+	public void showHistogram(){
+		switch(type){//Tipo noacumulado = 0, acumulado = 1
+		case 0: switch(histogramDataSource){//Fte de datos vista = 0, extent = 1, completo =2
+				case 0:	requestDataType = RasterBuf.TYPE_BYTE;
+						calcHistogramFromView(showBands); 
+						break;
+				case 1:	if(this.getHistogram().getGrid().getDataType() == RasterBuf.TYPE_SHORT)
+							requestDataType = RasterBuf.TYPE_SHORT;
+						else
+							requestDataType = RasterBuf.TYPE_BYTE;	
+						calcHistogramFromDataSourceAndExtentView(showBands);
+						break;
+				case 2:	if(this.getHistogram().getGrid().getDataType() == RasterBuf.TYPE_SHORT)
+							requestDataType = RasterBuf.TYPE_SHORT;
+						else
+							requestDataType = RasterBuf.TYPE_BYTE;
+						calcFullHistogramFromDataSource(showBands);	
+						break;
+					}
+				break;
+		case 1:	switch(histogramDataSource){//Fte de datos vista = 0, extent = 1, completo =2
+				case 0:	requestDataType = RasterBuf.TYPE_BYTE;
+						calcAccumulatedHistogramFromView(showBands); 
+						break;
+				case 1:	if(this.getHistogram().getGrid().getDataType() == RasterBuf.TYPE_SHORT)
+							requestDataType = RasterBuf.TYPE_SHORT;
+						else
+							requestDataType = RasterBuf.TYPE_BYTE;
+						calcHistogramFromDataSourceAndExtentView(showBands);
+						break;
+				case 2:	if(this.getHistogram().getGrid().getDataType() == RasterBuf.TYPE_SHORT)
+							requestDataType = RasterBuf.TYPE_SHORT;
+						else
+							requestDataType = RasterBuf.TYPE_BYTE;
+						calcFullAccumulatedHistogramFromDataSource(showBands);
+						break;
+				}
+				break;
+		}
+	}
+	
+	
+	/**
+	 * Calcula el histograma de la vista y solo con los datos de visualización
+	 * de las bandas R, G o B solicitadas
+	 * @param bandas que se desean visualizar. Cada elemento del vector es una banda y el boolean, si
+	 * está a true se visualizará esa banda y si está a false no se visualizará
+	 */
+	private void calcHistogramFromView(boolean[] bands){
+		if(histogramObj != null){
+			lastHistogram = histogramObj.calcHistogramFromView(bands);
+			showBands = bands;
+			setStatistic(Statistic.getBasicStatsFromHistogram(	lastHistogram, 
+																(int)getBoxesValues()[1], 
+																(int)getBoxesValues()[0], 
+																bands));
+			GraphicChartPanel gcp = pHistogram.getPGraphic();
+			
+			String bandNames[] = new String[bands.length];
+			for (int iBand = 0; iBand<bands.length; iBand++)
+				bandNames[iBand]=this.getJComboBands().getItemAt(iBand+1).toString();
+			
+			gcp.setNewChart(lastHistogram, bandNames);
+		}
+	}
+		
+	/**
+	 * Calcula el histograma accumulado de la vista y solo con los datos de visualización
+	 * @param bandas que se desean visualizar. Cada elemento del vector es una banda y el boolean, si
+	 * está a true se visualizará esa banda y si está a false no se visualizará
+	 */
+	private void calcAccumulatedHistogramFromView(boolean[] bands){
+		if(histogramObj != null){
+			lastHistogram = histogramObj.calcAccumulatedHistogramFromView(bands);
+			showBands = bands;
+			setStatistic(Statistic.getBasicStatsFromHistogram(	lastHistogram, 
+																(int)getBoxesValues()[1], 
+																(int)getBoxesValues()[0], 
+																bands));
+			GraphicChartPanel gcp = pHistogram.getPGraphic();
+			
+			String bandNames[] = new String[bands.length];
+			for (int iBand = 0; iBand<bands.length; iBand++)
+				bandNames[iBand]=this.getJComboBands().getItemAt(iBand+1).toString();
+			
+			gcp.setNewChart(lastHistogram, bandNames);
+		}
+	}
+		
+	/**
+	 * Calcula el histograma completo
+	 * @param bandas que se desean visualizar. Cada elemento del vector es una banda y el boolean, si
+	 * está a true se visualizará esa banda y si está a false no se visualizará
+	 */
+	private void calcHistogramFromDataSourceAndExtentView(boolean[] bands){
+		if(histogramObj != null){			
+			incrementPanel = new HistogramIncrement(this);	
+			if(histogramObj.calcHistogramFromRenderizerLimetedArea(bands))
+				incrementPanel.showWindow();
+			else 
+				readFullHistogramFromThread();
+		}
+	}
+		
+	/**
+	 * Calcula el histograma completo
+	 * @param bandas que se desean visualizar. Cada elemento del vector es una banda y el boolean, si
+	 * está a true se visualizará esa banda y si está a false no se visualizará
+	 */
+	private void calcFullHistogramFromDataSource(boolean[] bands){
+		if(histogramObj != null){
+			histogramObj.calcFullHistogram(bands);
+			incrementPanel = new HistogramIncrement(this);	
+			incrementPanel.showWindow();
+		}
+	}
+	
+	/**
+	 * Calcula el histograma acumulado completo
+	 * @param bandas que se desean visualizar. Cada elemento del vector es una banda y el boolean, si
+	 * está a true se visualizará esa banda y si está a false no se visualizará
+	 */
+	private void calcFullAccumulatedHistogramFromDataSource(boolean[] bands){
+		if(histogramObj != null){			
+			incrementPanel = new HistogramIncrement(this);			
+			histogramObj.calcFullAccumulatedHistogram(bands);
+			incrementPanel.showWindow();
+		}
+	}
+
+	
+	/**
+	 * Método que ejecuta el thread que comprueba cuando se ha acabado de generar
+	 * el histograma. Al finalizar, se lee el histograma de la imagen completa 
+	 * calculado y se muestra.
+	 */
+	public void readFullHistogramFromThread(){
+		if(type == 0)
+			lastHistogram = histogramObj.getFullHistogram();
+		else if(type == 1)
+			lastHistogram = histogramObj.getFullAccumulatedHistogram();
+		
+		setStatistic(Statistic.getBasicStatsFromHistogram(	lastHistogram, 
+															(int)getBoxesValues()[1], 
+															(int)getBoxesValues()[0], 
+															showBands));
+		//Si el histograma es grande lo recortamos para mostrarlo porque jfreeChart se vuelve
+		//inestable al poner muchos elementos en las X
+		
+		int pos = lastHistogram[0].length;
+		int[][] newHistogram = lastHistogram;
+		boolean elem = true;
+		if(lastHistogram[0].length >= Utilities.MAX_SHORT_BIT_VALUE){
+			for(int i = (lastHistogram[0].length - 1); i >= 0; i--){
+				for(int iBand = 0; iBand < lastHistogram.length; iBand ++){
+					if(lastHistogram[iBand][i] != 0)
+						elem = false;
+				}
+				if(!elem){
+					pos = i;
+					break;
+				}
+			}
+			newHistogram = new int[lastHistogram.length][pos];
+			for(int iBand = 0; iBand < lastHistogram.length; iBand ++){
+				for(int i = 0; i < newHistogram[iBand].length; i ++){
+					newHistogram[iBand][i] = lastHistogram[iBand][i];
+				}
+			}
+		}
+		
+		GraphicChartPanel gcp = pHistogram.getPGraphic();
+		
+		String bandNames[] = new String[lastHistogram.length];
+		for (int iBand = 0; iBand<lastHistogram.length; iBand++)
+			bandNames[iBand]=this.getJComboBands().getItemAt(iBand+1).toString();
+		
+		gcp.setNewChart(newHistogram, bandNames);
+	}
+	
+	/**
+	 * Asigna el número de bandas al combobox
+	 * @param bands Número de bandas de la imagen
+	 */
+	public void setBands(int bands){
+		HistogramPanelListener.comboEventEnable = false;
+		getJComboBands().removeAllItems();
+		getJComboBands().addItem(Messages.getText("todas"));
+		showBands = new boolean[bands];
+		for(int i = 0; i < bands; i++){
+			getJComboBands().addItem("Band "+String.valueOf(i));
+			showBands[i] = true;
+		}
+		HistogramPanelListener.comboEventEnable = true;
+	}
+	
+	
+	/**
+	 * Asigna la estadistica a la tabla
+	 * @param stat
+	 */
+	public void setStatistic(long[][] stat){
+		if(stat == null)
+			return;
+		try {
+			getTable().removeAllRows();
+			for(int iBand = 0; iBand < stat[0].length; iBand++){
+				Object[] list = new Object[stat.length + 1];
+				list[0] = new Integer(iBand);
+				for(int iStat = 1; iStat <= stat.length; iStat++)
+					list[iStat] = new Long(stat[iStat - 1][iBand]);				
+					
+				getTable().addRow(list);
+				list = null;
+			}
+		} catch (NotInitializeException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Resetea el control de bandas del panel con los valores RGB para 
+	 * cuando se está haciendo el histograma de la visualización en
+	 * vez del histograma con los datos
+	 *
+	 */
+	public void setRGBInBandList(){
+		HistogramPanelListener.comboEventEnable = false;
+		boolean[] list = {true, true, true};
+		showBands = list;
+		getJComboBands().removeAllItems();
+		getJComboBands().addItem(Messages.getText("todas"));
+		getJComboBands().addItem("R");
+		getJComboBands().addItem("G");
+		getJComboBands().addItem("B");
+		HistogramPanelListener.comboEventEnable = true;
+	}
+	
+	/**
+	 * Añade o elimina una banda de la visualización. Si la banda se está visualizando
+	 * se elimina y si no entonces se muestra
+	 * @param band banda a visualizar o borrar del gráfico
+	 */
+	public void addOrRemoveGraphicBand(int band){
+		if(band > showBands.length)
+			return;
+		showBands[band] = !showBands[band];
+	}
+	
+	/**
+	 * Limpia la gráfica
+	 */
+	public void cleanChart(){
+		GraphicChartPanel gcp = pHistogram.getPGraphic();
+		gcp.cleanChart();
+		for(int i = 0; i < showBands.length; i++)
+			showBands[i] = false;
+	}
+	
+	/**
+	 * Asigna el objeto histograma para la gestión de procesos de histograma
+	 * @param histogramObj
+	 */
+	public void setHistogram(Histogram histogramObj) {
+		this.histogramObj = histogramObj;
+		listener.setHistogram(histogramObj);
+	}
+	
+	/**
+	 * Obtiene el objeto histograma para la gestión de procesos de histograma
+	 * @return
+	 */
+	public Histogram getHistogram() {
+		return histogramObj;
+	}
+	
+	/**
+	 * Obtiene el tipo de datos de la fuente de la imagen
+	 * @return tipo de datos de la fuente de la imagen
+	 */
+	public int getHistogramDataSource() {
+		return histogramDataSource;
+	}
+
+	/**
+	 * Asigna el tipo de datos de la fuente de la imagen
+	 * @param histogramDataSource tipo de datos de la fuente de la imagen
+	 */
+	public void setHistogramDataSource(int histogramDataSource) {
+		this.histogramDataSource = histogramDataSource;
+	}
+
+	/**
+	 * Obtiene la lista de bandas que se muestran en el histograma
+	 * @return Lista de bandas donde cada elemento es un booleano. True si la banda
+	 * se muestra y false si no se muestra.
+	 */
+	public boolean[] getBandListShowInChart(){
+		return showBands;
+	}
+
+	/**
+	 * Asigna la lista de bandas que se muestran en el histograma
+	 * @param Lista de bandas donde cada elemento es un booleano. True si la banda
+	 * se muestra y false si no se muestra.
+	 */
+	public void setBandListShowInChart(boolean[] showBands) {
+		this.showBands = showBands;
+	}
+
+	/**
+	 * Obtiene el tipo de histograma a mostrar
+	 * @return acumulado/no acumulado
+	 */
+	public int getType() {
+		return type;
+	}
+
+	/**
+	 * Asigna el tipo de histograma a mostrar
+	 * @param type acumulado/no acumulado 
+	 */
+	public void setType(int type) {
+		this.type = type;
+	}
+	
+	/**
+	 * Obtiene el valor de los controles en el rango 0-255. Los controles dan un rango en tanto por cien 0-100
+	 * pero para el calculo de estadisticas necesitamos un rango de valor de pixel. 
+	 * @return Array con los valores de ambos controles. El primer valor del array es el control de la derecha
+	 * y el segundo el de la izquierda.  
+	 */
+	public double[] getBoxesValues(){
+		double[] v = new double[2];
+		double[] currentValues = getPHistogram().getBoxesValues();
+		switch(requestDataType){
+		case RasterBuf.TYPE_BYTE: 	v[0] = (currentValues[0] * Utilities.MAX_BYTE_BIT_VALUE) / 100; 
+									v[1] = (currentValues[1] * Utilities.MAX_BYTE_BIT_VALUE) / 100;
+									break;
+		case RasterBuf.TYPE_SHORT: 	v[0] = (currentValues[0] * Utilities.MAX_SHORT_BIT_VALUE) / 100;
+									v[1] = (currentValues[1] * Utilities.MAX_SHORT_BIT_VALUE) / 100;
+									break;
+		}
+		return v;
+	}
+
+	/**
+	 * Obtiene el último histograma visualizado
+	 * @return
+	 */
+	public int[][] getLastHistogram() {
+		return lastHistogram;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Interfaces gráficos para raster.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/PalettePanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/PalettePanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/PalettePanel.java	(revision 10281)
@@ -0,0 +1,674 @@
+/*
+ * Created on 23-ago-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.raster;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Hashtable;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Palette;
+import org.cresques.ui.raster.listener.PalettePanelListener;
+import org.cresques.util.Utilities;
+import org.gvsig.gui.beans.table.TableContainer;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.models.TableButtonModel;
+import org.gvsig.i18n.Messages;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Interfaz de usuario para la selección de paletas de color
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+
+public class PalettePanel extends BaseComponent {
+
+	private int 					HSELECT = 52;
+	private int 					HOPTIONS = 25;
+	private int 					HBUTTONS = 30;
+	private int 					MARGIN = 12;
+	
+	private JPanel 					pMain = null;
+	private JPanel 					pNorth = null;
+	private JPanel 					pButtons = null;
+	private TableContainer 			pTable = null;
+	private JPanel 					pSelect = null;
+	private JPanel 					pOptions = null;
+	private JButton 				bAccept = null;
+	private JButton 				bApply = null;
+	private JButton 				bCancel = null;
+	private JButton 				bSave = null;
+	
+	private int 					width = 500;
+	private int 					height = 600;
+	private String[] 				columnNames = {Messages.getText("selec"), Messages.getText("clase"), "RGB", Messages.getText("valor"), Messages.getText("alpha")};
+	private int[] 					columnWidths = {50, 90, 94, 95, 65};
+	private JCheckBox 				cActive = null;
+	private JComboBox 				cbList = null;
+	private JCheckBox 				cbInterpolar = null;
+	private PalettePanelListener	listener  = null;
+	private String 					palettesPath = "";
+	private JLabel 					lPredefinidas = null;
+
+	
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public PalettePanel(int w, int h, JFrame mainFrame) {
+		super();
+		this.width = w;
+		this.height = h;
+		listener = new PalettePanelListener(this);
+		initialize();
+	}
+	
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public PalettePanel(int w, int h, String palettesPath) {
+		//super();
+		this.width = w;
+		this.height = h;
+		this.palettesPath = palettesPath;
+		listener = new PalettePanelListener(this);
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        this.add(getPMain(), null);
+		listener.setControlListeners();
+		loadPaletteList(palettesPath);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPMain() {
+		if (pMain == null) {
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints4.gridy = 1;
+			gridBagConstraints4.gridx = 0;
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints3.gridy = 0;
+			gridBagConstraints3.gridx = 0;
+			pMain = new JPanel();
+			pMain.setLayout(new GridBagLayout());
+			pMain.setPreferredSize(new java.awt.Dimension(width, height));
+			pMain.add(getPNorth(), gridBagConstraints3);
+			pMain.add(getPButtons(), gridBagConstraints4);
+		}
+		return pMain;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPNorth() {
+		if (pNorth == null) {
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints2.gridy = 2;
+			gridBagConstraints2.gridx = 0;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.gridx = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.gridx = 0;
+			pNorth = new JPanel();
+			pNorth.setLayout(new GridBagLayout());
+			pNorth.setPreferredSize(new java.awt.Dimension(width, height - HBUTTONS));
+			pNorth.add(getPSelect(), gridBagConstraints);
+			pNorth.add(getPTable(), gridBagConstraints1);
+			pNorth.add(getPOptions(), gridBagConstraints2);
+		}
+		return pNorth;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setVgap(0);
+			flowLayout.setHgap(3);
+			pButtons = new JPanel();
+			pButtons.setPreferredSize(new java.awt.Dimension(width, HBUTTONS));
+			pButtons.setLayout(flowLayout);
+			pButtons.add(getBSave(), null);
+			pButtons.add(getBAccept(), null);
+			pButtons.add(getBApply(), null);
+			pButtons.add(getBCancel(), null);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TableContainer getPTable() {
+		if (pTable == null) {
+			pTable = new TableContainer(width -MARGIN, height - HSELECT - HOPTIONS - HBUTTONS - MARGIN, columnNames, columnWidths);
+			pTable.setModel("TableButtonModel");
+			pTable.initialize();
+		}
+		return pTable;
+	}
+
+	/**
+	 * This method initializes jPanel4	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPSelect() {
+		if (pSelect == null) {
+			lPredefinidas = new JLabel();
+			lPredefinidas.setText(Messages.getText("predefinidas")+":");
+			
+			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+			gridBagConstraints6.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints6.gridx = 1;
+			gridBagConstraints6.gridy = 1;
+			gridBagConstraints6.weightx = 1.0;
+			gridBagConstraints6.insets = new java.awt.Insets(0,0,0,8);
+			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			gridBagConstraints5.insets = new java.awt.Insets(0,5,0,0);
+			gridBagConstraints5.gridy = 0;
+			gridBagConstraints5.gridx = 0;
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints4.gridx = 1;
+			gridBagConstraints4.gridy = 0;
+			gridBagConstraints4.insets = new java.awt.Insets(0,0,0,0);
+			pSelect = new JPanel();
+			pSelect.setLayout(new GridBagLayout());
+			pSelect.setPreferredSize(new java.awt.Dimension(width, HSELECT));
+			pSelect.add(getCActive(), gridBagConstraints5);
+			pSelect.add(getCbList(), gridBagConstraints6);
+			pSelect.add(lPredefinidas, gridBagConstraints4);
+		}
+		return pSelect;
+	}
+
+	/**
+	 * This method initializes jPanel5	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPOptions() {
+		if (pOptions == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout1.setVgap(0);
+			flowLayout1.setHgap(3);
+			pOptions = new JPanel();
+			pOptions.setLayout(flowLayout1);
+			pOptions.setPreferredSize(new java.awt.Dimension(width, HOPTIONS));
+			pOptions.add(getCbInterpolar(), null);
+		}
+		return pOptions;
+	}
+
+	/**
+	 * This method initializes bApply	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBAccept() {
+		if (bAccept == null) {
+			bAccept = new JButton(Messages.getText("aceptar"));
+		}
+		return bAccept;
+	}
+
+	/**
+	 * This method initializes bApply	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBApply() {
+		if (bApply == null) {
+			bApply = new JButton(Messages.getText("aplicar"));
+		}
+		return bApply;
+	}
+
+	/**
+	 * This method initializes bCancel	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBCancel() {
+		if (bCancel == null) {
+			bCancel = new JButton(Messages.getText("cancelar"));
+		}
+		return bCancel;
+	}
+	
+	/**
+	 * This method initializes bSave	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBSave() {
+		if (bSave == null) {
+			bSave = new JButton(Messages.getText("salvar"));
+		}
+		return bSave;
+	}
+
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		this.width = w;
+		this.height = h;
+		this.setSize(w, h);
+		this.setPreferredSize(new java.awt.Dimension(w, h));
+		this.getPMain().setPreferredSize(new java.awt.Dimension(w, h));
+		this.getPNorth().setPreferredSize(new java.awt.Dimension(w, h - HBUTTONS));
+		this.getPSelect().setPreferredSize(new java.awt.Dimension(width, HSELECT));
+		this.getPTable().setComponentSize(width -MARGIN, height - HSELECT - HOPTIONS - HBUTTONS - MARGIN);
+		this.getPOptions().setPreferredSize(new java.awt.Dimension(width, HOPTIONS));
+		this.getPButtons().setPreferredSize(new java.awt.Dimension(width, HBUTTONS));
+	}
+
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getCActive() {
+		if (cActive == null) {
+			cActive = new JCheckBox();
+			cActive.setText(Messages.getText("activar"));
+			cActive.setPreferredSize(new java.awt.Dimension(180,23));
+			cActive.addActionListener(listener);
+			cActive.setSelected(true);
+		}
+		return cActive;
+	}
+
+	/**
+	 * This method initializes jComboBox	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getCbList() {
+		if (cbList == null) {
+			cbList = new JComboBox();
+		}
+		return cbList;
+	}
+
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getCbInterpolar() {
+		if (cbInterpolar == null) {
+			cbInterpolar = new JCheckBox();
+			cbInterpolar.setText(Messages.getText("interpolar"));
+		}
+		return cbInterpolar;
+	}
+	
+	//----------------------------------------------------------------
+	//MÉTODOS DEL CONTROL
+	
+	/**
+	 * Convierte la tabla en un array de objetos para poder crear con el el objeto Palette
+	 * @return 
+	 * @throws NotInitializeException
+	 */
+	public Object[][] getTablePalette() throws NotInitializeException{
+		int cols = 6;
+		if(getPTable().getRowCount() <= 0)
+			return null;
+		Object[][] pal = new Object[getPTable().getRowCount()][cols];
+		TableButtonModel model = (TableButtonModel)getPTable().getModel();
+		for(int iRow = 0; iRow < getPTable().getRowCount(); iRow ++){
+			pal[iRow][0] = model.getValueAt(iRow, 1);
+			String[] rgb = ((String)model.getValueAt(iRow, 2)).split(",");
+			pal[iRow][1] = Integer.valueOf(rgb[0]);
+			pal[iRow][2] = Integer.valueOf(rgb[1]);
+			pal[iRow][3] = Integer.valueOf(rgb[2]);
+			pal[iRow][4] = Double.valueOf((String)model.getValueAt(iRow, 3));
+			pal[iRow][5] = Integer.valueOf((String)model.getValueAt(iRow, 4));
+		}
+		return pal;
+	}
+	
+	/**
+	 * Carga la tabla de datos desde un objeto Palette. 
+	 * @param pal
+	 */
+	public void loadPanelFromPalette(Palette pal){
+		deleteAllRows();
+		int[] paleta = pal.getPalette();
+		String[] names = pal.getNameClass();
+		
+		//Obtenemos los datos de la clase paleta para construir cada fila de la tabla	
+		for(int iEntry = 0; iEntry < paleta.length; iEntry ++){
+			int[] argb = Utilities.getARGBFromIntToIntArray(paleta[iEntry]);
+			Color color = new Color(argb[0], argb[1], argb[2]);
+						
+			if(	pal.getType() == RasterBuf.TYPE_BYTE | 
+				pal.getType() == RasterBuf.TYPE_SHORT | 
+				pal.getType() == RasterBuf.TYPE_INT){
+				int[] range = pal.getIntRange();
+				addRowToTable(color, names[iEntry], range[iEntry]+"", String.valueOf(argb[3]));
+			}else if(	pal.getType() == RasterBuf.TYPE_FLOAT | 
+						pal.getType() == RasterBuf.TYPE_DOUBLE ){
+				double[] range = pal.getDoubleRange();
+				addRowToTable(color, names[iEntry], range[iEntry]+"", String.valueOf(argb[3]));
+			}	
+		}
+	}
+	
+	/**
+	 * Añade una fila a la tabla asignando el color por parámetro. Este
+	 * color asignado será el que aparezca en el botón y en el texto RGB
+	 * @param color 
+	 */
+	public void addRowToTable(Color color, String name, String range, String alpha){
+		getBSave().setEnabled(true);
+	
+		try {
+			getPTable().addRow(new Object[]{color, name, color.getRed()+","+color.getGreen()+","+color.getBlue(), range, alpha});
+		} catch (NotInitializeException e1) {
+			return;
+		}
+	
+	}
+	
+	/**
+	 * Asigna valores a una fila de la tabla
+	 * @param row fila de la tabla a asignar valores
+	 * @param color Color del botón y RGB
+	 * @param name Nombre de la clase
+	 * @param range Valor de la entrada
+	 * @param alpha Valor de la transparencia
+	 */
+	public void setValues(int row, Color color, String name, String range, String alpha){
+		TableButtonModel model = (TableButtonModel)getPTable().getModel();
+
+		model.setValueAt(color, row, 0);
+		model.setValueAt(name, row, 1);
+		model.setValueAt(color.getRed()+","+color.getGreen()+","+color.getBlue(), row, 2);
+		model.setValueAt(range, row, 3);
+		model.setValueAt(alpha, row, 4);
+	}
+	
+	/**
+	 * Elimina la fila seleccionada de la tabla
+	 */
+	public void deleteSelectedRow(){
+		int index = 0;
+		try {
+			index = getPTable().getSelectedIndex();
+			getPTable().delRow(index);
+			if(getPTable().getRowCount() == 0)
+				getBSave().setEnabled(false);
+		} catch (NotInitializeException e1) {
+			return;
+		}
+	}
+	
+	/**
+	 * Elimina todas las filas de la tabla
+	 */
+	public void deleteAllRows(){
+		try {
+			getPTable().removeAllRows();
+		} catch (NotInitializeException e1) {
+			return;
+		}
+		getBSave().setEnabled(false);
+	}
+	
+	/**
+	 * Obtiene el indice de la fila seleccionada
+	 * @return Indice de la fila
+	 */
+	public int getSelectedIndex(){
+		 try {
+			return getPTable().getSelectedIndex();
+		} catch (NotInitializeException e) {
+			return -1;
+		}
+	}
+	
+	/**
+	 * Obtiene el valor del alpha de la fila seleccionada en la tabla
+	 * @return Entero que representa el alpha 
+	 */
+	public int getAlpha(){
+		TableButtonModel model = (TableButtonModel)getPTable().getModel();
+		String value;
+		try {
+			value = ((JButton)model.getValueAt(getPTable().getSelectedIndex(), 4)).getText();
+			return Integer.valueOf(value).intValue();
+		} catch (NotInitializeException e) {
+			return -1;
+		} catch (NumberFormatException e) {
+			return -1;
+		}
+	}
+	
+	/**
+	 * Ordena las filas de la paleta de color con valores decrecientes de rango. En las primeras
+	 * filas coloca los valores mayores y en la última los menores. Esta función es utilizada
+	 * cada vez que se da aplicar o aceptar ya que es necesario cuando se pasa el filtro que los
+	 * valores esten ordenados.
+	 */
+	public void orderRows(){
+		class Row{
+			public String name = null;
+			public Color rgb = null;
+			public String value = null;
+			public String alpha = null;
+		}
+		
+		try {
+			Row row = null;
+			Hashtable map = new Hashtable(); 
+			TableButtonModel model = (TableButtonModel)getPTable().getModel();
+			
+			//Comprobamos que el tipo de datos sea igual para todas las filas.
+			boolean intType = true;
+			for(int iRow = 0; iRow < getPTable().getRowCount(); iRow ++){
+				try{
+					Integer.valueOf((String)model.getValueAt(iRow, 3));
+				}catch(NumberFormatException exc){
+					//Si alguno de los datos da un formatException es que no es entero por lo
+					//que suponemos que es decimal. Ojo!, ya se ha validado que sea numerico
+					intType = false;
+				}
+			}
+				
+			double[] doubleRange = null;
+			int[] intRange = null;
+			if(intType)
+				intRange = new int[getPTable().getRowCount()];
+			else
+				doubleRange = new double[getPTable().getRowCount()];
+			
+			int lenght = getPTable().getRowCount();
+			
+			//Cargamos las filas en un treemap cuya clave es el rango
+			for(int iRow = 0; iRow < lenght; iRow ++){
+				row = new Row();
+				row.name = (String)model.getValueAt(iRow, 1);
+				row.rgb = (Color)model.getValueAt(iRow, 0);
+				row.value = (String)model.getValueAt(iRow, 3);
+				row.alpha = (String)model.getValueAt(iRow, 4);
+				if(intType){		
+					intRange[iRow] = Integer.valueOf(row.value).intValue();
+					map.put(intRange[iRow]+" ", row);
+				}else{
+					doubleRange[iRow] = Double.valueOf(row.value).intValue();
+					map.put(doubleRange[iRow]+" ", row);
+				}
+			}
+						
+			//Ordenamos la lista por el valor del rango
+			if(intType)
+				Arrays.sort(intRange);
+			else
+				Arrays.sort(doubleRange);
+						
+			int rowAssigned = lenght - 1;
+			for(int iRow = 0; iRow < lenght; iRow ++){
+				if(intType)
+					row = (Row)map.get(intRange[iRow]+" ");
+				else
+					row = (Row)map.get(doubleRange[iRow]+" ");
+				setValues(rowAssigned, row.rgb, row.name, row.value, row.alpha);
+				rowAssigned --;
+			}
+		} catch (NotInitializeException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Carga en el listBox de paletas predefinidas los nombres que hay en la cabecera del fichero 
+	 * de paletas predefinidas.
+	 * 
+	 * @param palettesPath Camino al ficher de paletas predefinidas.
+	 * 
+	 */
+	public void loadPaletteList(String palettesPath){
+		
+		File palettesFile = new File(palettesPath);
+		if(!palettesFile.exists())
+			return;
+		
+		ArrayList nameList = new ArrayList();
+		
+		try {
+			KXmlParser parser = new KXmlParser();
+			FileInputStream fileInputStream = new FileInputStream(palettesPath);
+			parser.setInput(fileInputStream, null);
+			int tag = parser.nextTag();
+			parser.require(KXmlParser.START_TAG, null, "palettes");
+			tag = parser.nextTag();
+			parser.require(KXmlParser.START_TAG, null, "palette_list");
+					
+			tag = parser.nextTag();
+			while (tag == KXmlParser.START_TAG){
+				parser.require(KXmlParser.START_TAG, null, "name");
+				nameList.add(parser.nextText());
+				parser.require(KXmlParser.END_TAG, null, "name");
+				tag = parser.nextTag();
+			}
+			parser.require(KXmlParser.END_TAG, null, "palette_list");
+			
+			getCbList().removeAllItems();			   //
+			for (int i = 0; i<nameList.size(); i++)    // Solo se añaden elementos al combo si se ha leido la lista 
+				getCbList().addItem(nameList.get(i));  // completa de nombres de paleta sin errores.
+			fileInputStream.close();
+			return;
+			
+			
+		}catch (FileNotFoundException fnfEx) {
+			fnfEx.printStackTrace();
+		}catch (XmlPullParserException xmlEx) {
+			System.out.println("El fichero de paletas predeterminadas no tiene la estructura correcta:\n	" + xmlEx.getMessage());
+		}catch (IOException e) {
+		}
+	}
+
+	public String getPalettesPath() {
+		return palettesPath;
+	}
+
+	/**
+	 * Obtiene el listener
+	 * @return PalettePanelListener
+	 */
+	public PalettePanelListener getListener() {
+		return listener;
+	}
+	
+	/**
+	 * Activar o desactivar los componentes del panel
+	 */
+	public void setEnabled(boolean enabled){
+		getCbList().setEnabled(enabled);
+		getCbInterpolar().setEnabled(enabled);
+		getPTable().setEnabled(enabled);
+	}
+	
+	/**
+	 * Función que informa de si está acivo o no la selección de paleta en el panel
+	 * @return true si está activo y false si no lo está.
+	 */
+	public boolean isActivePanel(){
+		return this.getCActive().isSelected();
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/PalettePanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCombo.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCombo.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCombo.java	(revision 10281)
@@ -0,0 +1,35 @@
+package org.cresques.ui.raster;
+
+import javax.swing.JComboBox;
+import javax.swing.JTextField;
+
+/**
+ * Clase que representa a un combo obtenido a partir del XML
+ * que manda un driver de escritura.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class XMLCombo extends JComboBox {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public int numPanel = -1;
+    public int posIntoPanel = -1;
+    public String position = null;
+    public String selected = null;
+    public int sizex = 0;
+    public int sizey = 0;
+    public String id = null;
+
+    /**
+     * Inicialización del XMLCombo
+     */
+    public void init() {
+        if ((sizex != 0) && (sizey != 0)) {
+            this.setPreferredSize(new java.awt.Dimension(sizex, sizey));
+        }
+
+        if (selected != null) {
+            this.setSelectedItem(selected);
+        }
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCombo.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/NameChooserDialog.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/NameChooserDialog.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/NameChooserDialog.java	(revision 10281)
@@ -0,0 +1,183 @@
+/*
+ * Created on 11-ago-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.raster;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.ui.raster.listener.PalettePanelListener;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Ventana para la selección del nombre al salvar una paleta de color.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+
+public class NameChooserDialog extends BaseComponent implements ActionListener{
+
+	private int 					HBUTTONS = 30;
+	private JPanel					buttons = null;
+	private JPanel					pMain = null;
+	private int 					width = 315, height = 115;
+	private int 					widthMargin = 300;
+	private JButton					bAccept = null;
+	private JButton					bCancel = null;
+	private JFrame 					window = new JFrame();
+	private JTextField				tName = null;
+	private PalettePanelListener	listener = null;
+	private PalettePanel			panel = null;
+	
+	
+	/**
+	 * Constructor
+	 * @param pp PalettePanel
+	 */
+	public NameChooserDialog(PalettePanel pp, PalettePanelListener listener){
+		this.panel = pp;
+		this.listener = listener;
+		
+		window.getContentPane().add(getPMain());
+		init();
+	}
+	
+	public void init(){
+		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+		window.setLocation( (((int)d.getWidth()) >> 1) - (width >> 1), 
+	    					(((int)d.getHeight()) >> 1) - height);
+		window.setSize(width, height);
+		window.setFocusable(true);
+		window.setResizable(false);
+		window.setTitle(Messages.getText("nombre_paleta"));
+		window.show();
+	}
+	
+	/**
+	 * Obtiene el panel principal que contiene el panel de botones y cuadro
+	 * de texto
+	 * @return JPanel
+	 */
+	private JPanel getPMain(){
+		if(pMain == null){
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.insets = new Insets (0,15,10,0);
+			gridBagConstraints.anchor = GridBagConstraints.WEST;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.gridx = 0;
+			pMain = new JPanel();
+			pMain.setLayout(new GridBagLayout());
+			pMain.setPreferredSize(new java.awt.Dimension(widthMargin, height));
+			pMain.add(getTName(), gridBagConstraints);
+			pMain.add(getPButtons(), gridBagConstraints1);
+		}
+		return pMain;
+	}
+	
+	/**
+	 * Obtiene el panel de botones
+	 * @return JPanel
+	 */
+	private JPanel getPButtons(){
+		if(buttons == null){
+			buttons = new JPanel();
+			buttons.setPreferredSize(new java.awt.Dimension(widthMargin, HBUTTONS));
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setVgap(0);
+			flowLayout.setHgap(2);
+			buttons.setLayout(flowLayout);
+			buttons.add(getBAccept(), null);
+			buttons.add(getBCancel(), null);
+		}
+		return buttons;
+	}
+	
+	/**
+	 * Obtiene el botón de aceptar
+	 * @return JButton
+	 */
+	public JButton getBAccept(){
+		if(bAccept == null){
+			bAccept = new JButton("aceptar");
+			bAccept.addActionListener(this);
+		}
+		return bAccept;
+	}
+	
+	/**
+	 * Obtiene el botón de cancelar
+	 * @return JButton
+	 */
+	public JButton getBCancel(){
+		if(bCancel == null){
+			bCancel = new JButton("cancelar");
+			bCancel.addActionListener(this);
+		}
+		return bCancel;
+	}
+
+	/**
+	 * Al aceptar asignamos el valor cuadro de texto a la propiedad name y al cancelar cerramos la ventana
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == bAccept){
+			if (!getTName().getText().equals("")){
+				listener.savePalette(panel.getPalettesPath(),getTName().getText());
+				panel.getCbList().addItem(getTName().getText());
+				panel.getCbList().setSelectedItem(getTName().getText());
+				
+			}
+			window.hide();
+		}
+		if(e.getSource() == bCancel){
+			window.hide();
+		}
+	}
+
+	public JFrame getWindow() {
+		return window;
+	}
+
+	public JTextField getTName() {
+		if (tName == null){
+			tName = new JTextField();
+			tName.setPreferredSize(new Dimension(230,20));
+		}
+		return tName;
+	}
+} 

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/NameChooserDialog.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/ResolutionPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/ResolutionPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/ResolutionPanel.java	(revision 10281)
@@ -0,0 +1,486 @@
+package org.cresques.ui.raster;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+import org.gvsig.gui.beans.dataInput.DataInputContainer;
+import org.gvsig.i18n.Messages;
+
+public class ResolutionPanel extends BaseComponent implements ActionListener{
+
+	private int					MARGIN = 10;
+	private int					wComp = 404, hComp = 120;
+	private int					wHalf = (int)Math.floor((wComp - MARGIN) >> 1) - 4, hHalf = 92;
+	private int					wData = wHalf - MARGIN, hData = (int)Math.floor(hHalf/3);
+	
+	private JPanel 				pResolution = null;
+	private JPanel 				pOption = null;
+	private JPanel 				pDataInput = null;
+	private JPanel 				pRatio = null;
+	private JPanel 				pInterpolation = null;
+	private JPanel 				pCellSize = null;
+	private JPanel 				pWidth = null;
+	private JPanel 				pHeight = null;
+	private DataInputContainer 	cCellSize = null;
+	private DataInputContainer 	cHeight = null;
+	private DataInputContainer 	cWidth = null;
+	private JPanel 				pButtons = null;
+	private JRadioButton 		rSize = null;
+	private JRadioButton 		rWidthH = null;
+	private JLabel 				lSize = null;
+	private JLabel 				lWidthH = null;
+	private JLabel 				lInterpolation = null;
+	private JComboBox 			cInterpolation = null;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public ResolutionPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.setSize(wComp, hComp);
+		this.add(getPResolution(), null);
+		this.getRSize().addActionListener(this);
+		this.getRWidthH().addActionListener(this);
+		this.getRSize().setSelected(true);
+		this.getCWidth().setControlEnabled(false);
+		this.getCHeight().setControlEnabled(false);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPResolution() {
+		if (pResolution == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 1;
+			gridBagConstraints1.gridy = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+			pResolution = new JPanel();
+			pResolution.setLayout(new GridBagLayout());
+			pResolution.setPreferredSize(new java.awt.Dimension(wComp,hComp));
+			pResolution.setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("resolucion_espacial"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10), null));
+			pResolution.add(getPOption(), gridBagConstraints);
+			pResolution.add(getPDataInput(), gridBagConstraints1);
+		}
+		return pResolution;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPOption() {
+		if (pOption == null) {
+			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+			gridBagConstraints6.gridx = 0;
+			gridBagConstraints6.gridy = 1;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 0;
+			pOption = new JPanel();
+			pOption.setLayout(new GridBagLayout());
+			pOption.setPreferredSize(new java.awt.Dimension(wHalf,hHalf));
+			pOption.add(getPRatio(), gridBagConstraints2);
+			pOption.add(getPWidth(), gridBagConstraints6);
+		}
+		return pOption;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPDataInput() {
+		if (pDataInput == null) {
+			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			gridBagConstraints5.gridx = 0;
+			gridBagConstraints5.gridy = 2;
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.gridx = 0;
+			gridBagConstraints4.gridy = 1;
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.gridx = 0;
+			gridBagConstraints3.gridy = 0;
+			pDataInput = new JPanel();
+			pDataInput.setLayout(new GridBagLayout());
+			pDataInput.setPreferredSize(new java.awt.Dimension(wHalf,hHalf));
+			pDataInput.add(getPInterpolation(), gridBagConstraints3);
+			pDataInput.add(getPCellSize(), gridBagConstraints4);
+			pDataInput.add(getPHeight(), gridBagConstraints5);
+		}
+		return pDataInput;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPRatio() {
+		if (pRatio == null) {
+			pRatio = new JPanel();
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout3.setVgap(0);
+			flowLayout3.setHgap(0);
+			//pRatio.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pRatio.setLayout(flowLayout3);
+			pRatio.setPreferredSize(new java.awt.Dimension(wHalf - MARGIN, (2 * hData)));
+			pRatio.add(getPButtons(), null);
+		}
+		return pRatio;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPInterpolation() {
+		if (pInterpolation == null) {
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout3.setVgap(0);
+			flowLayout3.setHgap(0);
+			pInterpolation = new JPanel();
+			pInterpolation.setLayout(flowLayout3);
+			pInterpolation.setPreferredSize(new java.awt.Dimension(wHalf - MARGIN, hData));
+			//pInterpolation.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pInterpolation.add(getJComboBox(), null);
+		}
+		return pInterpolation;
+	}
+
+	/**
+	 * This method initializes getPCellSize	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPCellSize() {
+		if (pCellSize == null) {
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout3.setVgap(0);
+			flowLayout3.setHgap(0);
+			pCellSize = new JPanel();
+			//pCellSize.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pCellSize.setLayout(flowLayout3);
+			pCellSize.setPreferredSize(new java.awt.Dimension(wHalf - MARGIN, hData));
+			pCellSize.add(getCCellSize(), null);
+		}
+		return pCellSize;
+	}
+	
+	/**
+	 * This method initializes getPHeight	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPHeight() {
+		if (pHeight == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setHgap(0);
+			flowLayout1.setVgap(0);
+			pHeight = new JPanel();
+			//pHeight.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pHeight.setLayout(flowLayout1);
+			pHeight.setPreferredSize(new java.awt.Dimension(wHalf - MARGIN, hData));
+			pHeight.add(getCHeight(), null);
+		}
+		return pHeight;
+	}
+	
+	/**
+	 * This method initializes getPWidth	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPWidth() {
+		if (pWidth == null) {
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout2.setVgap(0);
+			flowLayout2.setHgap(0);
+			pWidth = new JPanel();
+			//pWidth.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pWidth.setLayout(flowLayout2);
+			pWidth.setPreferredSize(new java.awt.Dimension(wHalf - MARGIN, hData));
+			pWidth.add(getCWidth(), null);
+		}
+		return pWidth;
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getCCellSize() {
+		if (cCellSize == null) {
+			cCellSize = new DataInputContainer(50);
+			cCellSize.setComponentSize(180, 0);
+			cCellSize.setLabelText(Messages.getText("celda"));
+			cCellSize.setDecimal(true);
+		}
+		return cCellSize;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getCHeight() {
+		if (cHeight == null) {
+			cHeight = new DataInputContainer(50);
+			cHeight.setComponentSize(180, 0);
+			cHeight.setLabelText(Messages.getText("alto"));
+			cHeight.setDecimal(true);
+		}
+		return cHeight;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getCWidth() {
+		if (cWidth == null) {
+			cWidth = new DataInputContainer(50);
+			cWidth.setComponentSize(180, 0);
+			cWidth.setLabelText(Messages.getText("ancho"));
+			cWidth.setDecimal(true);
+		}
+		return cWidth;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			pButtons = new JPanel();
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout2.setVgap(2);
+			flowLayout2.setHgap(5);
+			pButtons.setLayout(flowLayout2);
+			pButtons.setPreferredSize(new java.awt.Dimension(wHalf - 10, (2 * hData) - 6));
+			pButtons.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pButtons.add(getRSize(), null);
+			pButtons.add(getRWidthH(), null);;
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jRadioButton	
+	 * 	
+	 * @return javax.swing.JRadioButton	
+	 */
+	private JRadioButton getRSize() {
+		if (rSize == null) {
+			rSize = new JRadioButton(Messages.getText("tamanyo_celda"));
+		}
+		return rSize;
+	}
+
+	/**
+	 * This method initializes jRadioButton1	
+	 * 	
+	 * @return javax.swing.JRadioButton	
+	 */
+	private JRadioButton getRWidthH() {
+		if (rWidthH == null) {
+			rWidthH = new JRadioButton(Messages.getText("ancho_x_alto"));
+		}
+		return rWidthH;
+	}
+
+	/**
+	 * This method initializes jComboBox	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	private JComboBox getJComboBox() {
+		if (cInterpolation == null) {
+			cInterpolation = new JComboBox();
+			cInterpolation.setPreferredSize(new java.awt.Dimension(wHalf - MARGIN - 2, 22));
+			cInterpolation.addItem(Messages.getText("vecino_+_proximo"));
+			cInterpolation.addItem(Messages.getText("bilinear"));
+			cInterpolation.addItem(Messages.getText("distancia_inversa"));
+			cInterpolation.addItem(Messages.getText("bicubico"));
+			cInterpolation.addItem(Messages.getText("b_splines"));
+			
+		}
+		return cInterpolation;
+	}
+
+	
+	public void setComponentSize(int w, int h){
+		/*wComp = w; hComp = 120;
+		wHalf = (int)Math.floor((wComp-10)/2); hHalf = 95;
+		wData = wHalf - 10; hData = (int)Math.floor(hHalf/3);
+		
+		this.setPreferredSize(new Dimension(wComp, hComp));
+		getPResolution().setPreferredSize(new java.awt.Dimension(wComp,hComp));
+		getPOption().setPreferredSize(new java.awt.Dimension(wHalf,hHalf));
+		getPWidth().setPreferredSize(new java.awt.Dimension(wHalf,hData));
+		getPDataInput().setPreferredSize(new java.awt.Dimension(wHalf,hHalf));
+		getPInterpolation().setPreferredSize(new java.awt.Dimension(wHalf,hData));
+		getPCellSize().setPreferredSize(new java.awt.Dimension(wHalf,hData));
+		getCCellSize().setComponentSize(wData,hData);
+		getCCellSize().setComponentHeight(hData);
+		getPHeight().setPreferredSize(new java.awt.Dimension(wHalf,hData));
+		getCHeight().setComponentSize(wData,hData);
+		getCHeight().setComponentHeight(hData);
+		getPWidth().setPreferredSize(new java.awt.Dimension(wHalf,hData));
+		getCWidth().setComponentSize(wData,hData);
+		getCWidth().setComponentHeight(hData);*/
+		
+	}
+	
+	/**
+	 * Asigna el valor del campo "tamaño de celda" a partir del double que lo representa
+	 * y con el número de decimales que se especifica en el parámetro dec
+	 * @param cellSize Tamaño de celda en double
+	 * @param dec Número de decimales
+	 */
+	public void setCellSizeText(double cellSize, int dec){
+		int indexPoint = String.valueOf(cellSize).indexOf('.');
+		try{
+			cCellSize.setValue(String.valueOf(cellSize).substring(0, indexPoint + dec));
+   		}catch(StringIndexOutOfBoundsException ex){
+   			cCellSize.setValue(String.valueOf(cellSize));
+   		}
+	}
+	
+	/**
+	 * Asigna el valor del campo "Ancho" a partir del double que lo representa
+	 * y con el número de decimales que se especifica en el parámetro dec
+	 * @param width Ancho
+	 * @param dec Número de decimales
+	 */
+	public void setWidthText(double width, int dec){
+		int indexPoint = String.valueOf(width).indexOf('.');
+		try{
+			cWidth.setValue(String.valueOf(width).substring(0, indexPoint + dec));
+   		}catch(StringIndexOutOfBoundsException ex){
+   			cWidth.setValue(String.valueOf(width));
+   		}
+	}
+	
+	/**
+	 * Asigna el valor del campo "Alto" a partir del double que lo representa
+	 * y con el número de decimales que se especifica en el parámetro dec
+	 * @param height Alto
+	 * @param dec Número de decimales
+	 */
+	public void setHeightText(double height, int dec){
+		int indexPoint = String.valueOf(height).indexOf('.');
+		try{
+			cHeight.setValue(String.valueOf(height).substring(0, indexPoint + dec));
+   		}catch(StringIndexOutOfBoundsException ex){
+   			cHeight.setValue(String.valueOf(height));
+   		}
+	}
+	
+	/**
+	 * Devuelve el valor del campo "tamaño de celda"
+	 * @return
+	 */
+	public double getCellSizeText(){
+		return Double.parseDouble(cCellSize.getValue());
+	}
+	
+	/**
+	 * Devuelve el valor del campo "tamaño de celda"
+	 * @return
+	 */
+	public double getWidthText(){
+		return Double.parseDouble(cWidth.getValue());
+	}
+	
+	/**
+	 * Devuelve el valor del campo "tamaño de celda"
+	 * @return
+	 */
+	public double getHeightText(){
+		return Double.parseDouble(cHeight.getValue());
+	}
+	
+	/**
+	 * Devuelve los valores de Alto x Acho de la resolución espacial
+	 * @return
+	 */
+	public String[] getWidthHeight(){
+		String[] text= { this.cWidth.getValue(),
+						this.cHeight.getValue()
+						};
+		return text;
+	}
+	
+	/**
+	 * Devuelve el metodo de interpolacion.
+	 * @return
+	 */
+	public String getInterpolation(){
+		return (String)this.getJComboBox().getSelectedItem();
+	}
+	
+	
+	/**************************************************************/
+	/********************Listeners*********************************/
+	/**************************************************************/
+	
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == this.getRSize()){
+			this.getRSize().setSelected(true);
+			this.getRWidthH().setSelected(false);
+			cCellSize.setControlEnabled(true);
+			cHeight.setControlEnabled(false);
+			cWidth.setControlEnabled(false);
+		}
+		if(e.getSource() == this.getRWidthH()){
+			this.getRWidthH().setSelected(true);
+			this.getRSize().setSelected(false);
+			cCellSize.setControlEnabled(false);
+			cHeight.setControlEnabled(true);
+			cWidth.setControlEnabled(true);
+		}
+	}
+	
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/ResolutionPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AndOrSelectorPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AndOrSelectorPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AndOrSelectorPanel.java	(revision 10281)
@@ -0,0 +1,106 @@
+package org.cresques.ui.raster;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+
+public class AndOrSelectorPanel extends JPanel {
+
+	private JPanel pBorder = null;
+	private JRadioButton rbAnd = null;
+	private JRadioButton rbOr = null;
+	private ButtonGroup 	group = null;
+	/**
+	 * This is the default constructor
+	 */
+	public AndOrSelectorPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.setSize(60, 60);
+		this.setPreferredSize(new java.awt.Dimension(52,50));
+		this.add(getJPanel(), null);
+		this.getRbAnd().setSelected(true);
+		group = new ButtonGroup();
+		group.add(this.getRbAnd());
+		group.add(this.getRbOr());
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel() {
+		if (pBorder == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.anchor = java.awt.GridBagConstraints.WEST;
+			gridBagConstraints1.gridy = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+			gridBagConstraints.gridy = 1;
+			pBorder = new JPanel();
+			pBorder.setLayout(new GridBagLayout());
+			pBorder.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pBorder.setPreferredSize(new java.awt.Dimension(60,60));
+			pBorder.add(getRbAnd(), gridBagConstraints1);
+			pBorder.add(getRbOr(), gridBagConstraints);
+		}
+		return pBorder;
+	}
+
+	/**
+	 * This method initializes jRadioButton	
+	 * 	
+	 * @return javax.swing.JRadioButton	
+	 */
+	public JRadioButton getRbAnd() {
+		if (rbAnd == null) {
+			rbAnd = new JRadioButton();
+			rbAnd.setText("And");
+			rbAnd.setPreferredSize(new java.awt.Dimension(60,25));
+		}
+		return rbAnd;
+	}
+
+	/**
+	 * This method initializes jRadioButton1	
+	 * 	
+	 * @return javax.swing.JRadioButton	
+	 */
+	public JRadioButton getRbOr() {
+		if (rbOr == null) {
+			rbOr = new JRadioButton();
+			rbOr.setText("Or");
+			rbOr.setPreferredSize(new java.awt.Dimension(60,25));
+		}
+		return rbOr;
+	}
+	
+	/**
+	 * Activa o desactiva el control
+	 * @param enable True activa el control y false lo desactiva
+	 */
+	public void setControlEnabled(boolean enabled){
+		this.getRbAnd().setEnabled(enabled);
+		this.getRbOr().setEnabled(enabled);
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AndOrSelectorPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RasterPropsDialogPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RasterPropsDialogPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RasterPropsDialogPanel.java	(revision 10281)
@@ -0,0 +1,105 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.raster;
+
+import org.cresques.io.GeoRasterFile;
+
+import org.cresques.ui.DefaultDialogPanel;
+
+import javax.swing.JPanel;
+
+
+/**
+ * Dialogo para configurar las propiedades del raster.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterPropsDialogPanel extends DefaultDialogPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    /**
+     * Constructor
+     */
+    public RasterPropsDialogPanel() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    public void initialize() {
+        this.setBounds(0, 0, 355, 230);
+    }
+
+    /**
+     * Obtiene el panel BandSetupPanel con los controles
+     * @return BandSetupPanel
+     */
+    protected BandSetupPanel getBandSetupPanel() {
+        return (BandSetupPanel) getContentPanel();
+    }
+
+    /**
+     * Obtiene el contentPane
+     */
+    protected JPanel getContentPanel() {
+        if (contentPane == null) {
+            contentPane = new BandSetupPanel();
+            contentPane.setBounds(14, 12, 345, 174);
+        }
+
+        return contentPane;
+    }
+
+    /**
+     * Añade una lista de GeoRasterFile al panel de bandas
+     * @param files Array de GeoRasterFile
+     */
+    public void addFiles(GeoRasterFile[] files) {
+        getBandSetupPanel().addFiles(files);
+        getBandSetupPanel().repaint();
+        this.repaint();
+    }
+
+    /**
+     * Mantiene la asignación entre R, G o B y la banda de la imagen que le corresponde 
+     * @param nBand	Banda de la imagen que corresponde
+     * @param flag	R, G o B se selecciona por medio de un flag que los identifica
+     */
+    public void assignBand(int nBand, int flag) {
+        getBandSetupPanel().assignBand(nBand, flag);
+    }
+
+    /**
+     * Obtiene la correspondencia entre el R, G o B y la banda asignada
+     * @param flag	R, G o B se selecciona por medio de un flag que los identifica
+     * @return	Banda de la imagen asignada al flag pasado por parámetro
+     */
+    public int getAssignedBand(int flag) {
+        return getBandSetupPanel().getAssignedBand(flag);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/RasterPropsDialogPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/up.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/up.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/up.png	(revision 10281)
@@ -0,0 +1,5 @@
+‰PNG
+
+
+IHDR(-SúPLTE€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ›‘.tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	(þ@ù&IDATÓµÈ±
+Ã0Fÿ1s;"‘-ž9§ŸþRH!…ZZÖ"=IEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/up.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/down.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/down.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/down.png	(revision 10281)
@@ -0,0 +1,4 @@
+‰PNG
+
+
+IHDR(-SúPLTE€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ›‘.tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	(í,—¯ IDATÓc` 	à@è"èjÐu¡›ƒn2º]è¶“ïp¿®ÁˆŽIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/images/down.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/lineal.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/lineal.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/lineal.gif	(revision 10281)
@@ -0,0 +1,2 @@
+GIF89a  ãÄÄÄƒƒƒXXXAAA™™™¼¼¼,,,ÑÑÑÙÙÙÐÐÐÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿ,  rÈI«¥!ëp»›ö�SFž˜‰žâÊr.©Æ_K{ó}åze÷>08´üŠ !2¹,ñŠÏax„*‘Ó^•šÕuo[nG0 Ê¡P¸¦<NÀ8H²a@„PßÝ€{	
+~{I!‚{†Ž�H;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/lineal.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/CutRasterPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/CutRasterPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/CutRasterPanel.java	(revision 10281)
@@ -0,0 +1,728 @@
+/*
+ * Created on 22-ago-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.raster;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.geom.Rectangle2D;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.io.data.ICutRaster;
+import org.cresques.ui.raster.listener.CutRasterListener;
+import org.gvsig.gui.beans.buttonBar.ButtonBarContainer;
+import org.gvsig.gui.beans.coordDataInput.CoordDataInputContainer;
+import org.gvsig.gui.beans.table.TableContainer;
+import org.gvsig.i18n.Messages;
+import java.awt.Dimension;
+
+public class CutRasterPanel extends BaseComponent{
+
+	private int						wPanel = 420, hPanel = 534;
+	private int						wComp = wPanel - 6, hComp = hPanel - 40;
+	private int						wTable = wComp - 10;
+	private int						hTable = hComp - 370 ;
+
+	private JPanel 					pTailImage = null;
+	private CoordDataInputContainer pCoordPixel = null;
+	private CoordDataInputContainer pCoordReal = null;
+	private ButtonBarContainer 		pResize = null;
+	private JButton 				jButton = null;
+
+	private ResolutionPanel 		pResolution = null;
+
+	private JPanel 					pSelection = null;
+	private TableContainer 			tSelection = null;
+	private String[] 				columnNames = {Messages.getText("bandas"), Messages.getText("nombre")};
+	private int[] 					columnWidths = {75, 305};
+	private boolean 				contract = true;
+
+	private JPanel 					pCheck = null;
+	private JCheckBox 				jCheckBox = null;
+	private JLabel 					jLabel = null;
+	private JPanel 					pButtons = null;
+	private JPanel 					pAccept = null;
+	private JButton 				bSave = null;
+	private JButton 				bAccept = null;
+	private JButton 				bCancel = null;
+	private JPanel 					pBorder = null;
+	private CutRasterListener 		tailImageListener = null;
+	/**
+	 * Valores reales para el ancho, alto y tamaño de celda. Esto es necesario porque
+	 * en la caja de texto se guardan con decimales recortados y cuando se pide el valor
+	 * se devuelven completos. 
+	 */
+	private double 					realWidth, realHeight, realCellSize;
+	/**
+	 * Relación entre el ancho y alto en pixeles de la imagen
+	 */
+	private double					relWidthHeight = 0;
+	/**
+	 * Clase que instancia a esta y que implemente ITailRaster.
+	 */
+	private ICutRaster				parent = null;
+	
+	/**
+	 * Valores reales para el tamaño de la ventana. Esto es necesario porque
+	 * en la caja de texto se guardan con decimales recortados y cuando se pide el valor
+	 * se devuelven completos. 
+	 */
+	private double					wcMinX, wcMinY, wcMaxX, wcMaxY;
+	private double					pxMinX, pxMinY, pxMaxX, pxMaxY;
+	
+
+
+	/**
+	 * This is the default constructor
+	 */
+	public CutRasterPanel(Rectangle2D extent, int widthPx, int heightPx, ICutRaster parent) {
+		super();
+		this.parent = parent;
+		initialize();
+		tailImageListener = new CutRasterListener(this, extent, widthPx, heightPx, parent);
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.add(getPTailImage(), null);
+		this.setSize(wPanel, hPanel);
+		if(contract){
+			this.getPResolution().setVisible(false);
+			this.getPSelection().setVisible(false);
+			this.getPCheck().setVisible(false);
+			this.setSize(wPanel, hPanel - hTable - 120 - 30);
+			this.getPTailImage().setPreferredSize(new java.awt.Dimension(wPanel, hPanel - hTable - 120 - 30));
+			this.getPBorder().setSize(wComp, hComp - hTable - 120 - 30);
+			this.getPBorder().setPreferredSize(new java.awt.Dimension(wComp, hComp - hTable - 120 - 30));
+		}
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPTailImage() {
+		if (pTailImage == null) {
+			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			gridBagConstraints5.gridx = 0;
+			gridBagConstraints5.gridy = 0;
+			GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
+			gridBagConstraints8.gridx = 0;
+			gridBagConstraints8.gridy = 6;
+			GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
+			gridBagConstraints7.gridx = 0;
+			gridBagConstraints7.gridy = 6;
+			pTailImage = new JPanel();
+			pTailImage.setLayout(new GridBagLayout());
+			pTailImage.setPreferredSize(new java.awt.Dimension(wPanel,hPanel));
+			pTailImage.add(getPButtons(), gridBagConstraints8);
+			pTailImage.add(getPBorder(), gridBagConstraints5);
+		}
+		return pTailImage;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public CoordDataInputContainer getPCoordPixel() {
+		if (pCoordPixel == null) {
+			pCoordPixel = new CoordDataInputContainer(wTable, 90);
+			pCoordPixel.setParameters(Messages.getText("coordenadas_pixel"),
+										Messages.getText("sup_izq"),
+										"X" ,"Y", 
+										Messages.getText("inf_der"),
+										"X", "Y");
+			pCoordPixel.setDecimalValues(true);
+		}
+		return pCoordPixel;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public CoordDataInputContainer getPCoordReal() {
+		if (pCoordReal == null) {
+			pCoordReal = new CoordDataInputContainer(wTable, 90);
+			pCoordReal.setParameters(Messages.getText("coordenadas_reales"),
+										Messages.getText("sup_izq"),
+										"X" ,"Y", 
+										Messages.getText("inf_der"),
+										"X", "Y");
+			pCoordReal.setDecimalValues(true);
+		}
+		return pCoordReal;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public ButtonBarContainer getPResize() {
+		if (pResize == null) {
+			pResize = new ButtonBarContainer();
+			pResize.setPreferredSize(new java.awt.Dimension(wTable - 4, 32));
+			pResize.addButton("fullExtent.png", Messages.getText("fullExtent"), 0);
+			pResize.addButton("selectTool.png", Messages.getText("select_tool"), 1);
+			pResize.addButton("down.png", Messages.getText("expandir"), 2);
+			pResize.setButtonAlignment("right");
+			pResize.setComponentBorder(true);
+			
+		}
+		return pResize;
+	}
+
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public ResolutionPanel getPResolution() {
+		if (pResolution == null) {
+			pResolution = new ResolutionPanel();
+			pResolution.setPreferredSize(new java.awt.Dimension(wTable,120));
+			pResolution.setComponentSize(wTable,120);
+		}
+		return pResolution;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPSelection() {
+		if (pSelection == null) {
+			pSelection = new JPanel();
+			pSelection.setLayout(new FlowLayout());
+			pSelection.setPreferredSize(new java.awt.Dimension(wTable,hTable));
+			pSelection.setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("seleccion_bandas"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10), null));
+			pSelection.add(getTSelection(), null);
+			
+		}
+		return pSelection;
+	}
+
+	/**
+	 * Obtiene la tabla de selección de bandas
+	 * @return Tabla de selección de bandas
+	 */
+	public TableContainer getTSelection(){
+		if (tSelection == null) {
+			tSelection = new TableContainer(wTable - 20, hTable - 40, columnNames, columnWidths);
+			tSelection.setModel("CheckBoxModel");
+			tSelection.setControlVisible(false);
+			tSelection.initialize();
+		}
+		
+		return tSelection;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			pButtons = new JPanel();
+			pButtons.setLayout(new BorderLayout());
+			pButtons.setPreferredSize(new java.awt.Dimension(wTable,30));
+			pButtons.add(getPAccept(), java.awt.BorderLayout.EAST);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPAccept() {
+		if (pAccept == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setVgap(5);
+			flowLayout1.setHgap(2);
+			pAccept = new JPanel();
+			pAccept.setLayout(flowLayout1);
+			pAccept.setPreferredSize(new java.awt.Dimension(350,30));
+			pAccept.add(getBSave(), null);
+			pAccept.add(getBAccept(), null);
+			pAccept.add(getBCancel(), null);
+		}
+		return pAccept;
+	}
+
+	/**
+	 * This method initializes getBAccept	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBSave() {
+		if (bSave == null) {
+			bSave = new JButton();
+			bSave.setPreferredSize(new java.awt.Dimension(85,25));
+			bSave.setText(Messages.getText("salvar"));
+			bSave.setEnabled(false);
+		}
+		return bSave;
+	}
+	
+	/**
+	 * This method initializes getBAccept	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBAccept() {
+		if (bAccept == null) {
+			bAccept = new JButton();
+			bAccept.setPreferredSize(new java.awt.Dimension(85,25));
+			bAccept.setText(Messages.getText("aplicar"));
+		}
+		return bAccept;
+	}
+
+	/**
+	 * This method initializes getBCancel	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBCancel() {
+		if (bCancel == null) {
+			bCancel = new JButton();
+			bCancel.setPreferredSize(new java.awt.Dimension(85,25));
+			bCancel.setText(Messages.getText("cerrar"));
+		}
+		return bCancel;
+	}
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPBorder() {
+		if (pBorder == null) {
+			GridBagConstraints gridBagConstraints31 = new GridBagConstraints();
+			gridBagConstraints31.gridx = 0;
+			gridBagConstraints31.gridy = 5;
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.gridx = 0;
+			gridBagConstraints3.gridy = 4;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 3;
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.gridx = 0;
+			gridBagConstraints4.gridy = 2;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.gridy = 1;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+			pBorder = new JPanel();
+			pBorder.setLayout(new GridBagLayout());
+			pBorder.setPreferredSize(new java.awt.Dimension(wComp,hComp));
+			pBorder.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
+			pBorder.add(getPCoordPixel(), gridBagConstraints);
+			pBorder.add(getPCoordReal(), gridBagConstraints1);
+			pBorder.add(getPResize(), gridBagConstraints4);
+			pBorder.add(getPResolution(), gridBagConstraints2);
+			pBorder.add(getPSelection(), gridBagConstraints3);
+			pBorder.add(getPCheck(), gridBagConstraints31);
+		}
+		return pBorder;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPCheck() {
+		if (pCheck == null) {
+			jLabel = new JLabel();
+			jLabel.setText(Messages.getText("crear_1_capa_por_banda"));
+			pCheck = new JPanel();
+			pCheck.setLayout(new BorderLayout());
+			pCheck.setPreferredSize(new Dimension(410 - 10, 30));
+			pCheck.add(getCbOneLyrPerBand(), java.awt.BorderLayout.WEST);
+			pCheck.add(jLabel, java.awt.BorderLayout.CENTER);
+		}
+		return pCheck;
+	}
+
+	/**
+	 * This method initializes jCheckBox1	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getCbOneLyrPerBand() {
+		if (jCheckBox == null) {
+			jCheckBox = new JCheckBox();
+		}
+		return jCheckBox;
+	}	
+	
+	/***************************Metodos***************************/
+	
+	
+	public void setComponentSize(int w, int h){
+		/*wPanel = w; hPanel = h;
+		wComp = wPanel - 6; hComp = hPanel - 40;
+		hTable = hComp - 412;
+		wTable = wComp - 10;
+		
+		if (contract){
+			this.setSize(wPanel, hPanel - hTable - 120 - 30);
+			pTailImage.setPreferredSize(new java.awt.Dimension(wPanel, hPanel - hTable - 120 - 30));
+			this.getPBorder().setSize(wComp, hComp - hTable - 120 - 30);
+			this.getPBorder().setPreferredSize(new java.awt.Dimension(wComp, hComp - hTable - 120 - 30));
+		}
+		if (!contract){
+			this.setSize(wPanel, hPanel);
+			pTailImage.setPreferredSize(new java.awt.Dimension(wPanel, hPanel));
+			this.getPBorder().setSize(wComp, hComp);
+			this.getPBorder().setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		
+		}
+		
+		pCoordPixel.setComponentSize(wTable, 90);
+		pCoordReal.setComponentSize(wTable, 90);
+		pResize.setPreferredSize(new java.awt.Dimension(wTable - 4,32));
+		pResolution.setPreferredSize(new java.awt.Dimension(wTable,120));
+		pResolution.setComponentSize(wTable,120);
+		pSelection.setPreferredSize(new java.awt.Dimension(wTable,hTable));
+		pSelection.setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("seleccion_bandas"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10), null));
+		tSelection.setComponentSize(wTable - 20, hTable - 40);
+		pCheck.setPreferredSize(new java.awt.Dimension(wTable,30));
+		pButtons.setPreferredSize(new java.awt.Dimension(wTable,30));*/
+		
+		
+	}
+	
+	/**
+	 * Devuelve los valores de las coordenadas píxel 
+	 * introducidas por el usuario.
+	 * @return
+	 */
+	public String[] getCoordPixel(){
+		String[] s = {String.valueOf(pxMinX), String.valueOf(pxMinY), String.valueOf(pxMaxX), String.valueOf(pxMaxY)};
+		return s; 
+	}
+	
+	/**
+	 * Asigna los valores de las coordenadas píxel.
+	 * @return
+	 */
+	private void setCoordPixel(String[] values){
+		this.pCoordPixel.setValues(values);
+	}
+	
+	/**
+	 * Devuelve los valores de las coordenadas reales 
+	 * introducidas por el usuario.
+	 * @return
+	 */
+	public String[] getCoordReal(){
+		String[] s = {String.valueOf(wcMinX), String.valueOf(wcMaxY), String.valueOf(wcMaxX), String.valueOf(wcMinY)};
+		return s;
+	}
+	
+	/**
+	 * Asigna los valores de las coordenadas reales.
+	 * @return
+	 */
+	private void setCoordReal(String[] values){
+		this.pCoordReal.setValues(values);
+	}
+	
+	/**
+	 * Asigna las coordenadas del mundo real a partir de números en coma flotante.
+	 * @param minx coordenada mínima de X 
+	 * @param miny coordenada mínima de Y
+	 * @param maxx coordenada máxima de X
+	 * @param maxy coordenada máxima de Y
+	 * @param dec Número de decimales a mostrar en la caja de texto
+	 */
+	public void setCoorRealFromDouble(double minx, double miny, double maxx, double maxy, int dec){
+		wcMinX = minx;
+		wcMinY = miny;
+		wcMaxX = maxx;
+		wcMaxY = maxy;
+   		setCoordReal(getCoord(minx, miny, maxx, maxy, dec));
+	}
+	
+	/**
+	 * Asigna las coordenadas pixel a partir de números en coma flotante.
+	 * @param minx coordenada mínima de X 
+	 * @param miny coordenada mínima de Y
+	 * @param maxx coordenada máxima de X
+	 * @param maxy coordenada máxima de Y
+	 * @param dec Número de decimales a mostrar en la caja de texto
+	 */
+	public void setCoorPixelFromDouble(double minx, double miny, double maxx, double maxy, int dec){
+		pxMinX = minx;
+		pxMinY = miny;
+		pxMaxX = maxx;
+		pxMaxY = maxy;
+   		setCoordPixel(getCoord(minx, miny, maxx, maxy, dec));
+	}
+	
+	/**
+	 * Obtiene un texto con las coordenadas a partir de números en coma flotante.
+	 * @param minx coordenada mínima de X 
+	 * @param miny coordenada mínima de Y
+	 * @param maxx coordenada máxima de X
+	 * @param maxy coordenada máxima de Y
+	 * @param dec Número de decimales a mostrar en la caja de texto
+	 */
+	private String[] getCoord(double minx, double miny, double maxx, double maxy, int dec){
+		String[] coordPx = new String[4];
+		int indexPoint = String.valueOf(minx).indexOf('.');
+   		try{
+   			coordPx[0] = String.valueOf(minx).substring(0, indexPoint + dec);
+   		}catch(StringIndexOutOfBoundsException ex){
+   			coordPx[0] = String.valueOf(minx);
+   		}
+   		indexPoint = String.valueOf(miny).indexOf('.');
+   		try{
+   			coordPx[1] = String.valueOf(miny).substring(0, indexPoint + dec);
+   		}catch(StringIndexOutOfBoundsException ex){
+   			coordPx[1] = String.valueOf(miny);
+   		}
+   		indexPoint = String.valueOf(maxx).indexOf('.');
+   		try{
+   			coordPx[2] = String.valueOf(maxx).substring(0, indexPoint + dec);
+   		}catch(StringIndexOutOfBoundsException ex){
+   			coordPx[2] = String.valueOf(maxx);
+   		}
+   		indexPoint = String.valueOf(maxy).indexOf('.');
+   		try{
+   			coordPx[3] = String.valueOf(maxy).substring(0, indexPoint + dec);
+   		}catch(StringIndexOutOfBoundsException ex){
+   			coordPx[3] = String.valueOf(maxy);
+   		}
+   		return coordPx;
+	}
+	
+	/**
+	 * Asigna el valor del campo "tamaño de celda" a partir del double que lo representa
+	 * y con el número de decimales que se especifica en el parámetro dec
+	 * @param cellSize Tamaño de celda en double
+	 * @param dec Número de decimales
+	 */
+	public void setCellSizeText(double cellSize, int dec){
+		realCellSize = cellSize;
+		pResolution.setCellSizeText(cellSize, dec);
+	}
+	
+	/**
+	 * Asigna el valor del campo "Ancho" a partir del double que lo representa
+	 * y con el número de decimales que se especifica en el parámetro dec
+	 * @param width Ancho
+	 * @param dec Número de decimales
+	 */
+	public void setWidthText(double width, int dec){
+		realWidth = width;
+		pResolution.setWidthText(width, dec);
+	}
+	
+	/**
+	 * Asigna el valor del campo "Alto" a partir del double que lo representa
+	 * y con el número de decimales que se especifica en el parámetro dec
+	 * @param height Alto
+	 * @param dec Número de decimales
+	 */
+	public void setHeightText(double height, int dec){
+		realHeight = height;
+		pResolution.setHeightText(height, dec);
+	}
+	
+	/**
+	 * Asigna la relación entre el ancho y alto de la imagen
+	 * @param rel 
+	 */
+	public void setRelWidthHeight(double rel){
+		relWidthHeight = rel;
+	}
+	
+	/**
+	 * Obtiene la relación entre el ancho y alto de la imagen
+	 * @return
+	 */
+	public double getRelWidthHeight(){
+		return relWidthHeight;
+	}
+	
+	/**
+	 * Devuelve el valor del campo "tamaño de celda"
+	 * @return
+	 */
+	public double getCellSizeText(){
+		return realCellSize;
+	}
+	
+	/**
+	 * Devuelve el valor del campo "tamaño de celda"
+	 * @return
+	 */
+	public double getWidthText(){
+		return realWidth;
+	}
+	
+	/**
+	 * Devuelve el valor del campo "tamaño de celda"
+	 * @return
+	 */
+	public double getHeightText(){
+		return realHeight;
+	}
+	
+	/**
+	 * Expande o contrae el panel inferior según el estado en el que se encuentre.
+	 *
+	 */
+	public void contractExpandPanel(){
+		boolean aux = contract;
+		if (aux){
+			this.setSize(wPanel, hPanel);
+			pTailImage.setPreferredSize(new java.awt.Dimension(wPanel, hPanel));
+			this.getPBorder().setSize(wComp, hComp);
+			this.getPBorder().setPreferredSize(new java.awt.Dimension(wComp, hComp));
+			this.getPResolution().setVisible(true);
+			this.getPSelection().setVisible(true);
+			this.getPCheck().setVisible(true);
+		}
+		if (!aux){
+			this.setSize(wPanel, hPanel - hTable - 120 - 30);
+			pTailImage.setPreferredSize(new java.awt.Dimension(wPanel, hPanel - hTable - 120 - 30));
+			this.getPBorder().setSize(wComp, hComp - hTable - 120 - 30);
+			this.getPBorder().setPreferredSize(new java.awt.Dimension(wComp, hComp - hTable - 120 - 30));
+			this.getPResolution().setVisible(false);
+			this.getPSelection().setVisible(false);
+			this.getPCheck().setVisible(false);
+		}
+		this.validate();
+		if (aux)	contract = false;
+		else		contract = true;
+		
+		if (contract == true){
+			pResize.getButton(2).setToolTipText("expandir");
+			pResize.getButton(2).setIcon(new ImageIcon(getClass().getResource("images/down.png")));
+		}
+		if (contract == false){
+			pResize.getButton(2).setToolTipText("contraer");
+			pResize.getButton(2).setIcon(new ImageIcon(getClass().getResource("images/up.png")));
+		}
+		
+	}
+
+	/**
+	 * Obtiene la coordenada de máxima X en pixel. 
+	 * @return Coordenada de máxima X en pixel
+	 */
+	public double getPxMaxX() {
+		return pxMaxX;
+	}
+
+	/**
+	 * Obtiene la coordenada de máxima Y en pixel. 
+	 * @return Coordenada de máxima Y en pixel
+	 */
+	public double getPxMaxY() {
+		return pxMaxY;
+	}
+
+	/**
+	 * Obtiene la coordenada de mínima X en pixel. 
+	 * @return Coordenada de mínima X en pixel
+	 */
+	public double getPxMinX() {
+		return pxMinX;
+	}
+
+	/**
+	 * Obtiene la coordenada de mínima Y en pixel. 
+	 * @return Coordenada de mínima Y en pixel
+	 */
+	public double getPxMinY() {
+		return pxMinY;
+	}
+
+	/**
+	 * Obtiene la coordenada de máxima X real. 
+	 * @return Coordenada de máxima X real.
+	 */
+	public double getWcMaxX() {
+		return wcMaxX;
+	}
+
+	/**
+	 * Obtiene la coordenada de máxima Y real. 
+	 * @return Coordenada de máxima Y real
+	 */
+	public double getWcMaxY() {
+		return wcMaxY;
+	}
+
+	/**
+	 * Obtiene la coordenada de mínima X real. 
+	 * @return Coordenada de mínima X real
+	 */
+	public double getWcMinX() {
+		return wcMinX;
+	}
+
+	/**
+	 * Obtiene la coordenada de mínima Y real. 
+	 * @return Coordenada de mínima Y real
+	 */
+	public double getWcMinY() {
+		return wcMinY;
+	}
+
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/CutRasterPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BaseComponent.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BaseComponent.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BaseComponent.java	(revision 10281)
@@ -0,0 +1,44 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+/**
+ * 
+ */
+package org.cresques.ui.raster;
+
+import javax.swing.JPanel;
+
+import org.gvsig.i18n.Messages;
+
+/**
+ * Clase base para los componentes. 
+ * Registramos en ella de forma estática el directorio de los ficheros de traducción para la 
+ * libreria gvsig-i18n.jar. Todos los JPanel que necesiten traducción tendrán que
+ * heredar de esta clase.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public abstract class BaseComponent extends JPanel{
+    
+    static {
+        Messages.addResourceFamily("org.cresques.translations.text", BaseComponent.class.getClassLoader(), "org.cresques.ui");
+    }
+    
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BaseComponent.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCheck.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCheck.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCheck.java	(revision 10281)
@@ -0,0 +1,49 @@
+package org.cresques.ui.raster;
+
+import javax.swing.JCheckBox;
+
+/**
+ * Clase que representa a un checkbox obtenido a partir del XML
+ * que manda un driver de escritura.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class XMLCheck extends JCheckBox {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public int numPanel = -1;
+    public int posIntoPanel = -1;
+    public String position = null;
+    public String selected = null;
+    public int sizex = 0;
+    public int sizey = 0;
+    public String text = null;
+    public String id = null;
+
+    /**
+     * Contructor
+     * @param text        texto del checkbox
+     * @param select        true si esta seleccionado y false si no lo está.
+     */
+    public XMLCheck(String text, boolean select) {
+        super(text, select);
+        this.text = text;
+
+        if (select) {
+            selected = new String("yes");
+        } else {
+            selected = new String("no");
+        }
+    }
+
+    /**
+     * Inicialización del XMLCheck
+     */
+    public void init() {
+        if ((sizex != 0) && (sizey != 0)) {
+            this.setPreferredSize(new java.awt.Dimension(sizex, sizey));
+        }
+    }
+}
+
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLCheck.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLLabel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLLabel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLLabel.java	(revision 10281)
@@ -0,0 +1,26 @@
+package org.cresques.ui.raster;
+
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+/**
+ * Clase que representa a un label obtenido a partir del XML
+ * que manda un driver de escritura.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class XMLLabel extends JLabel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public int numPanel = -1;
+    public int posIntoPanel = -1;
+    public String position = null;
+    public String text = null;
+
+    /**
+     * Inicialización del XMLLabel
+     */
+    public void init() {
+        this.setText(text);
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLLabel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramIncrement.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramIncrement.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramIncrement.java	(revision 10281)
@@ -0,0 +1,114 @@
+/*
+ * Created on 22-jul-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.raster;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.io.datastruct.Histogram;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Ventana de incremento para la construcción del histograma
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+
+public class HistogramIncrement extends Thread {
+
+	private JPanel panel = null;
+	private JLabel label = null;
+	private HistogramPanel hp = null;
+	private JFrame window = new JFrame();
+	
+	public HistogramIncrement(HistogramPanel hp){
+		this.hp = hp;
+	}
+	
+	/**
+	 * Muestra la ventana de incremento con el porcentaje de la construcción del
+	 * histograma.
+	 */
+	public void showWindow(){
+		if(label != null)
+			label.setText(Messages.getText("calculando... ") + 0  + "%");
+		window.getContentPane().add(getJPanel());
+		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+		window.setLocation(	((int)d.getWidth()) >> 1, 
+	    					((int)d.getHeight()) >> 1);
+		window.setSize(200, 60);
+		window.show();
+		if(this.isAlive())
+			this.resume();
+		else
+			this.start();
+	}
+	
+	/**
+	 * Obtiene el panel del interior de la ventana de incremento
+	 * @return JPanel
+	 */
+	private JPanel getJPanel(){
+		if(panel == null){
+			FlowLayout f = new FlowLayout();
+			panel = new JPanel();
+			panel.setLayout(f);
+			label = new JLabel();
+			label.setText(Messages.getText("calculando... ") + 0  + "%");
+			panel.add(label, null);
+		}
+		return panel;
+	}
+	
+	/**
+	 * Este thread va leyendo el porcentaje hasta que se completa el histograma.
+	 */
+	public synchronized void run(){
+		while(true){
+			Histogram hist = hp.getHistogram();
+			while(hist.getPercent() < 100){
+				label.setText(Messages.getText("calculando ...") +  hist.getPercent() +"%");
+				try {
+					sleep(100);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+			//Cerramos la ventana
+			window.hide();
+			window = null;
+			
+			//Mostramos el resultado
+			hp.readFullHistogramFromThread();
+			
+			this.suspend();
+
+		}
+	}
+} 

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/HistogramIncrement.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLSlider.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLSlider.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLSlider.java	(revision 10281)
@@ -0,0 +1,90 @@
+package org.cresques.ui.raster;
+
+import javax.swing.BoxLayout;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+
+/**
+ * Clase que representa a un slider obtenido a partir del XML
+ * que manda un driver de escritura.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class XMLSlider extends JPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public int numPanel = -1;
+    public int posIntoPanel = -1;
+    public int sizex = 0;
+    public int sizey = 0;
+    public String position = null;
+    private JSlider slider = null;
+    private JLabel label = null;
+    public String id = null;
+
+    /**
+     * Constructor
+     * @param text        Texto de la barra
+     * @param smin        Valor mínimo de la barra
+     * @param smax        Valor máximo de la barra
+     * @param sdefaultValue        Valor por defecto de la barra.
+     * @param sminor        Separación menor de las secciones de la barra
+     * @param smajor        Separación mayor de las secciones de la barra
+     */
+    public XMLSlider(String text, String smin, String smax,
+                     String sdefaultValue, String sminor, String smajor) {
+        int min = 0;
+        int max = 100;
+        int defaultValue = 0;
+        int minor = 5;
+        int major = 10;
+
+        //Obtenemos los valores de los parámetros
+        if (smin != null) {
+            min = Integer.parseInt(smin);
+        }
+
+        if (smax != null) {
+            max = Integer.parseInt(smax);
+        }
+
+        if (sdefaultValue != null) {
+            defaultValue = Integer.parseInt(sdefaultValue);
+        }
+
+        if (sminor != null) {
+            minor = Integer.parseInt(sminor);
+        }
+
+        if (smajor != null) {
+            major = Integer.parseInt(smajor);
+        }
+
+        //Colocación de elementos en el panel
+        label = new JLabel(text, JLabel.CENTER);
+        slider = new JSlider(JSlider.HORIZONTAL, min, max, defaultValue);
+        slider.setMajorTickSpacing(major);
+        slider.setMinorTickSpacing(minor);
+        slider.setPaintTicks(true);
+        slider.setPaintLabels(true);
+        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+        this.add(label);
+        this.add(slider);
+
+        if ((sizex != 0) && (sizey != 0)) {
+            this.setPreferredSize(new java.awt.Dimension(sizex, sizey));
+        }
+    }
+
+    /**
+     * Obtiene la barra
+     * @return        Objeto JSlider
+     */
+    public JSlider getSlider() {
+        return slider;
+    }
+}
+
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLSlider.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BandSetupPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BandSetupPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BandSetupPanel.java	(revision 10281)
@@ -0,0 +1,654 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.raster;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.image.DataBuffer;
+import java.io.File;
+import java.util.Vector;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+
+import org.cresques.io.GeoRasterFile;
+
+
+/**
+ * Selecciona las bandas visibles en un raster. Contiene una tabla con una fila por cada
+ * banda de la imagen. Por medio de checkbox se selecciona para cada RGB que banda de la 
+ * imagen será visualizada. 
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class BandSetupPanel extends JPanel implements TableModelListener,
+                                                      KeyListener,
+                                                      ActionListener,
+                                                      ComponentListener {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    /**
+     * Asigna la banda del rojo
+     */
+    public static final int RED_BAND = GeoRasterFile.RED_BAND;
+
+    /**
+     * Asigna la banda del verde
+     */
+    public static final int GREEN_BAND = GeoRasterFile.GREEN_BAND;
+
+    /**
+     * Asigna banda del azul
+     */
+    public static final int BLUE_BAND = GeoRasterFile.BLUE_BAND;
+    private final static String[] columnNames = { "R", "G", "B", "Band" };
+
+    /**
+     * Nombre del panel
+     */
+    private String nom = "Bandas";
+    private FileList fileList = null;
+    private JTable rgbTable = null;
+    private JScrollPane rgbBandAssignPane = null;
+    RGBBandAsignTableModel tableModel = null;
+    private int sizeX = 445;
+    private int sizeY = 174;
+    private byte mode = 3;
+    private int[] col = { 0, 1 }; //Ultima y penultima columnas activadas del jtable para cuando hay 2 bandas seleccionadas en el combo
+
+    /**
+     * This method initializes
+     *
+     */
+    public BandSetupPanel() {
+        super();
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    void initialize() {
+        this.setPreferredSize(new Dimension(sizeX, sizeY));
+        this.setLayout(null);
+        this.setLocation(0, 0);
+        this.setSize(445, 239);
+        this.add(getFileList(), null);
+        this.add(getRGBBandAssignPane(), null);
+        getFileList().getJComboBox().addKeyListener(this);
+        getFileList().getJComboBox().addActionListener(this);
+        this.addComponentListener(this);
+    }
+
+    /**
+     * Obtiene el nombre del panel
+     * @return Cadena con el nombre del panel
+     */
+    public String getName(){
+    	return this.nom;
+    }
+    
+    /**
+     * Añade la lista de georasterfiles a la tabla
+     * @param files
+     */
+    public void addFiles(GeoRasterFile[] files) {
+        for (int i = 0; i < files.length; i++) {
+            String fName = files[i].getName();
+            getFileList().addFName(fName);
+
+            //((DefaultListModel)fileList.getJList().getModel()).addElement(fName);
+            String bandName = new File(fName).getName();
+            String bandType = "";
+
+            switch (files[i].getDataType()) {
+            case DataBuffer.TYPE_BYTE:
+                bandType = "8U";
+                break;
+            case DataBuffer.TYPE_INT:
+                bandType = "32";
+                break;
+            case DataBuffer.TYPE_DOUBLE:
+                bandType = "64";
+                break;
+            case DataBuffer.TYPE_FLOAT:
+                bandType = "32";
+                break;
+            case DataBuffer.TYPE_SHORT:
+                bandType = "16";
+                break;
+            case DataBuffer.TYPE_USHORT:
+                bandType = "16U";
+                break;
+            case DataBuffer.TYPE_UNDEFINED:
+                bandType = "??";
+                break;
+            }
+
+            if (files[i].getBandCount() > 1) {
+                for (int b = 0; b < files[i].getBandCount(); b++)
+                    addBand((b + 1) + " [" + bandType + "] " + bandName);
+            } else {
+                addBand("1 [" + bandType + "] " + bandName);
+            }
+        }
+    }
+
+    /**
+     * Elimina un fichero de la lista
+     * @param file Nombre del fichero a eliminar
+     */
+    public void removeFile(String file) {
+        getFileList().removeFName(file);
+
+        for (int i = 0;
+                 i < ((DefaultTableModel) rgbTable.getModel()).getRowCount();
+                 i++) {
+            //Si el fichero borrado estaba seleccionado como banda visible. Pasaremos
+            //esta visibilidad a la banda inmediata superior y si esta acción produce 
+            //una excepción (porque no hay) se pasa al inmediato inferior.
+            if (((String) ((DefaultTableModel) rgbTable.getModel()).getValueAt(i, 3)).endsWith(file)) {
+                try {
+                    if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(i, 0)).booleanValue()) {
+                        ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), i - 1, 0);
+                    }
+                } catch (ArrayIndexOutOfBoundsException exc) {
+                    ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), i + 1, 0);
+                }
+
+                try {
+                    if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(i, 1)).booleanValue()) {
+                        ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), i - 1, 1);
+                    }
+                } catch (ArrayIndexOutOfBoundsException exc) {
+                    ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), i + 1, 1);
+                }
+
+                try {
+                    if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(i, 2)).booleanValue()) {
+                        ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), i - 1, 2);
+                    }
+                } catch (ArrayIndexOutOfBoundsException exc) {
+                    ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), i + 1, 2);
+                }
+
+                ((DefaultTableModel) rgbTable.getModel()).removeRow(i);
+                i--; //Ojo! que hemos eliminado una fila
+            }
+        }
+    }
+
+    /**
+    * Cuando cambiamos el combo de seleccion de numero de bandas a visualizar
+    * debemos resetear la tabla de checkbox para que no haya activados más de
+    * los permitidos
+    * @param mode
+    */
+    private void resetMode(int mode) {
+        //Reseteamos los checkbox
+        for (int i = 0; i < (rgbTable.getColumnCount() - 1); i++)
+            for (int j = 0; j < rgbTable.getRowCount(); j++)
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(false), j, i);
+
+        //Asignamos los valores
+        if (this.getNBands() >= 3) {
+            switch (mode) {
+            case 3:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 2, 2);
+            case 2:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 1, 1);
+            case 1:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 0, 0);
+            }
+        } else if (this.getNBands() == 2) {
+            switch (mode) {
+            case 3:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 1, 2);
+            case 2:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 1, 1);
+            case 1:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 0, 0);
+            }
+        } else if (this.getNBands() == 1) {
+            switch (mode) {
+            case 3:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 0, 2);
+            case 2:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 0, 1);
+            case 1:
+                ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true), 0, 0);
+            }
+        }
+
+        col[0] = 0;
+        col[1] = 1;
+    }
+
+    /**
+     * Asigna modo 1, 2, o 3 bandas. El modo 1 solo permite seleccionar en la
+     * tabla un checkbox, el 2 dos checkbox en distintar bandas y el 3 tres checkbox
+     * también en distintas bandas.
+     * @param mode
+     */
+    private void setMode(int mode) {
+        //Solo hay un checkbox activado
+        if (mode == 1) {
+            for (int i = 0; i < rgbTable.getRowCount(); i++)
+                for (int j = 0; j < (rgbTable.getColumnCount() - 1); j++) {
+                    if ((i != rgbTable.getSelectedRow()) ||
+                            (j != rgbTable.getSelectedColumn())) {
+                        ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(false), i, j);
+                    }
+                }
+
+            //Hay dos checkbox activados
+        } else if (mode == 2) {
+            int n = 0;
+
+            for (int i = 0; i < (rgbTable.getColumnCount() - 1); i++)
+                for (int j = 0; j < rgbTable.getRowCount(); j++)
+                    if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(j, i)).booleanValue()) {
+                        n++;
+                    }
+
+            //Si se ha seleccionado 3 bandas hay eliminar una de ellas. Siempre será la más antigua que se clickeo
+            if (n > 2) {
+                for (int i = 0; i < rgbTable.getRowCount(); i++)
+                    ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(false), i, col[0]);
+            }
+
+            //Rotamos el punto pinchado más antiguo para que se eliminen alternativamente
+            if ((col[0] == rgbTable.getSelectedColumn()) ||
+                    ((col[0] != rgbTable.getSelectedColumn()) &&
+                    (col[1] != rgbTable.getSelectedColumn()))) {
+                col[0] = col[1];
+                col[1] = rgbTable.getSelectedColumn();
+            }
+
+            //El modo 3 es el comportamiento original
+        } else if (mode == 3) {
+            return;
+        }
+    }
+
+    /**
+     * Obtiene el panel que contiene la lista de ficheros por banda.
+     * @return Panel FileList
+     */
+    public FileList getFileList() {
+        if (fileList == null) {
+            fileList = new FileList();
+            fileList.setBounds(9, 9, 428, 110);
+        }
+
+        return fileList;
+    }
+
+    /**
+     * This method initializes jTable
+     *
+     * @return javax.swing.JTable
+     */
+    private JScrollPane getRGBBandAssignPane() {
+        if (rgbBandAssignPane == null) {
+            rgbBandAssignPane = new JScrollPane(getRGBTable());
+            rgbBandAssignPane.setBounds(10, 123, 427, 104);
+
+            TableColumn column = null;
+
+            for (int i = 0; i < 3; i++) {
+                column = rgbTable.getColumnModel().getColumn(i);
+                column.setCellRenderer(new RadioColumnRenderer());
+                column.setCellEditor(new RadioColumnEditor());
+                column.setMaxWidth(22);
+                column.setMinWidth(22);
+            }
+
+            //			frame.setContentPane(scrollPane);
+        }
+
+        return rgbBandAssignPane;
+    }
+
+    /**
+     * Obtiene la Tabla
+     * @return Tabla de bandas de la imagen
+     */
+    public JTable getRGBTable() {
+        if (rgbTable == null) {
+            tableModel = new RGBBandAsignTableModel();
+            tableModel.addTableModelListener(this);
+            rgbTable = new JTable(tableModel);
+            rgbTable.setPreferredScrollableViewportSize(new Dimension(328, 72));
+        }
+
+        return rgbTable;
+    }
+
+    /**
+     * Asigna al combo de número de bandas a mostrar el valor correspondiente
+     * dependiendo del número de bandas de la imagen.
+     */
+    public void setList() {
+        String[] l = null;
+
+        if (this.getNBands() == 1) {
+            l = new String[1];
+            l[0] = "1";
+        }
+
+        if (this.getNBands() == 2) {
+            l = new String[2];
+            l[0] = "1";
+            l[1] = "2";
+        }
+
+        if (this.getNBands() == 3) {
+            l = new String[3];
+            l[0] = "1";
+            l[1] = "2";
+            l[2] = "3";
+        }
+
+        if (this.getNBands() > 0) {
+            getFileList().setList(l);
+        }
+    }
+
+    /**
+     * Añade una banda a la tabla  bandas de la imagen asignandole un
+     * nombre y valor a los checkbox
+     * @param bandName        Nombre de la banda
+     */
+    private void addBand(String bandName) {
+        Vector v = new Vector();
+        v.add(new Boolean(false));
+        v.add(new Boolean(false));
+        v.add(new Boolean(false));
+        v.add(bandName);
+        ((DefaultTableModel) rgbTable.getModel()).addRow(v);
+    }
+
+    /**
+     * Obtiene el número de bandas de la lista
+     * @return
+     */
+    public int getNBands() {
+        return ((DefaultTableModel) rgbTable.getModel()).getRowCount();
+    }
+
+    /**
+     * Obtiene el nombre de la banda de la posición i de la tabla
+     * @param i
+     * @return
+     */
+    public String getBandName(int i) {
+        String s = (String) ((DefaultTableModel) rgbTable.getModel()).getValueAt(i, 3);
+        return s.substring(s.lastIndexOf("[8U]") + 5, s.length());
+    }
+
+    /**
+     * Mantiene la asignación entre R, G o B y la banda de la imagen que le corresponde 
+     * @param nBand	Banda de la imagen que corresponde
+     * @param flag	R, G o B se selecciona por medio de un flag que los identifica
+     */
+    public void assignBand(int nBand, int flag) {
+        Boolean t = new Boolean(true);
+
+        if ((flag & RED_BAND) == RED_BAND)
+            ((DefaultTableModel) rgbTable.getModel()).setValueAt(t, nBand, 0);
+        
+        if ((flag & GREEN_BAND) == GREEN_BAND) 
+            ((DefaultTableModel) rgbTable.getModel()).setValueAt(t, nBand, 1);
+        
+        if ((flag & BLUE_BAND) == BLUE_BAND)
+            ((DefaultTableModel) rgbTable.getModel()).setValueAt(t, nBand, 2);
+    }
+
+    /**
+     * Obtiene la correspondencia entre el R, G o B y la banda asignada
+     * @param flag	R, G o B se selecciona por medio de un flag que los identifica
+     * @return	Banda de la imagen asignada al flag pasado por parámetro
+     */
+    public int getAssignedBand(int flag) {
+        if ((flag & RED_BAND) == RED_BAND) {
+            for (int nBand = 0; nBand < rgbTable.getRowCount(); nBand++)
+                if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(nBand,
+                                                                                        0)).booleanValue()) {
+                    return nBand;
+                }
+        }
+
+        if ((flag & GREEN_BAND) == GREEN_BAND) {
+            for (int nBand = 0; nBand < rgbTable.getRowCount(); nBand++)
+                if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(nBand,
+                                                                                        1)).booleanValue()) {
+                    return nBand;
+                }
+        }
+
+        if ((flag & BLUE_BAND) == BLUE_BAND) {
+            for (int nBand = 0; nBand < rgbTable.getRowCount(); nBand++)
+                if (((Boolean) ((DefaultTableModel) rgbTable.getModel()).getValueAt(nBand,
+                                                                                        2)).booleanValue()) {
+                    return nBand;
+                }
+        }
+
+        return -1;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
+     */
+    public void tableChanged(TableModelEvent e) {
+        rgbTable.revalidate();
+        rgbBandAssignPane.revalidate();
+        revalidate();
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
+     */
+    public void keyPressed(KeyEvent arg0) {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
+     */
+    public void keyReleased(KeyEvent arg0) {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
+     */
+    public void keyTyped(KeyEvent arg0) {
+        // TODO Auto-generated method stub
+    }
+
+    /**
+     *Evento que activado cuando se modifica el número de bandas que se desean visualizar.
+     *Se obtiene este número y se llama a la función que controla el cambio de número
+     *de bandas visualizadas. 
+     */
+    public void actionPerformed(ActionEvent arg0) {
+        String vBands = (String) getFileList().getJComboBox().getSelectedItem();
+
+        if (vBands != null) {
+            if (vBands.compareTo("3") == 0) {
+                mode = 3;
+            }
+
+            if (vBands.compareTo("2") == 0) {
+                mode = 2;
+            }
+
+            if (vBands.compareTo("1") == 0) {
+                mode = 1;
+            }
+
+            resetMode(mode);
+        }
+    }
+
+    class RadioColumnEditor extends AbstractCellEditor
+        implements TableCellEditor {
+        final private static long serialVersionUID = -3370601314380922368L;
+        public JRadioButton theRadioButton;
+
+        public RadioColumnEditor() {
+            super();
+            theRadioButton = new JRadioButton();
+            theRadioButton.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent event) {
+                        fireEditingStopped() ;
+                        setMode(mode);
+                    }
+                });
+        }
+
+        public Component getTableCellEditorComponent(JTable table, Object obj,
+                                                     boolean isSelected,
+                                                     int row, int col) {
+            theRadioButton.setHorizontalAlignment(SwingUtilities.CENTER);
+
+            Boolean lValueAsBoolean = (Boolean) obj;
+            theRadioButton.setSelected(lValueAsBoolean.booleanValue());
+
+            return theRadioButton;
+        }
+
+        public Object getCellEditorValue() {
+            return new Boolean(theRadioButton.isSelected());
+        }
+    }
+
+    class RadioColumnRenderer extends JRadioButton implements TableCellRenderer {
+        final private static long serialVersionUID = -3370601314380922368L;
+
+        public Component getTableCellRendererComponent(JTable table,
+                                                       Object value,
+                                                       boolean isSelected,
+                                                       boolean hasFocus,
+                                                       int row, int column) {
+            if (value == null) {
+                this.setSelected(false);
+            }
+
+            Boolean ValueAsBoolean = (Boolean) value;
+            this.setSelected(ValueAsBoolean.booleanValue());
+            this.setHorizontalAlignment(SwingConstants.CENTER);
+
+            return this;
+        }
+    }
+
+    class RGBBandAsignTableModel extends DefaultTableModel {
+        final private static long serialVersionUID = -3370601314380922368L;
+
+        public RGBBandAsignTableModel() {
+            super(new Object[0][4], columnNames);
+        }
+
+        public Class getColumnClass(int c) {
+            if (c < 3) {
+                return Boolean.class;
+            }
+
+            return String.class;
+        }
+
+        public void setValueAt(Object value, int row, int col) {
+            if ((col < 3) && ((Boolean) value).booleanValue()) {
+                for (int i = 0; i < getRowCount(); i++) {
+                    if (i != row) {
+                        setValueAt(new Boolean(false), i, col);
+                    }
+                }
+            }
+
+            super.setValueAt(value, row, col);
+        }
+
+        public void addNew() {
+            super.addRow(new Object[] {
+                             new Boolean(false), new Boolean(false),
+                             new Boolean(false), ""
+                         });
+        }
+        
+              
+    }
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	/**
+	 * Redimensiona el panel cuando se redimensiona el contenedor de éste
+	 */
+	public void componentResized(ComponentEvent e) {
+		if(e.getSource() == this){
+			int nWidth = this.getSize().width;
+			int nHeight = this.getSize().height;
+			int difWidth = nWidth - 445;
+			int difHeight = nHeight - 239;
+			this.fileList.setResize(difWidth, difHeight);
+			this.rgbBandAssignPane.setBounds(10, 123 + difHeight/2, 427 + difWidth, 104 + difHeight/2);
+			
+		}
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+} //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/BandSetupPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AddRemoveButtonsPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AddRemoveButtonsPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AddRemoveButtonsPanel.java	(revision 10281)
@@ -0,0 +1,103 @@
+package org.cresques.ui.raster;
+
+import javax.swing.JPanel;
+import javax.swing.JButton;
+
+import java.awt.Color;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.awt.FlowLayout;
+import javax.swing.ImageIcon;
+
+public class AddRemoveButtonsPanel extends JPanel {
+
+	private JPanel pBorder = null;
+	private JButton bAdd = null;
+	private JButton bRemove = null;
+
+	/**
+	 * This is the default constructor
+	 */
+	public AddRemoveButtonsPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.setSize(26, 52);
+		this.add(getJPanel(), null);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel() {
+		if (pBorder == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(3,3,3,3);
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.anchor = java.awt.GridBagConstraints.WEST;
+			gridBagConstraints1.gridx = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.insets = new java.awt.Insets(3,3,3,3);
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
+			gridBagConstraints.gridx = 0;
+			pBorder = new JPanel();
+			pBorder.setLayout(new GridBagLayout());
+			pBorder.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
+			pBorder.add(getBAdd(), gridBagConstraints);
+			pBorder.add(getBRemove(), gridBagConstraints1);
+		}
+		return pBorder;
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBAdd() {
+		if (bAdd == null) {
+			bAdd = new JButton();
+			bAdd.setPreferredSize(new java.awt.Dimension(20,20));
+			bAdd.setIcon(new ImageIcon("./gvSIG/extensiones/com.iver.cit.gvsig/images/forward.png"));
+		}
+		return bAdd;
+	}
+
+	/**
+	 * This method initializes jButton1	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBRemove() {
+		if (bRemove == null) {
+			bRemove = new JButton();
+			bRemove.setPreferredSize(new java.awt.Dimension(20,20));
+			bRemove.setIcon(new ImageIcon("./gvSIG/extensiones/com.iver.cit.gvsig/images/backward.png"));
+		}
+		return bRemove;
+	}
+	
+	/**
+	 * Activa o desactiva el control
+	 * @param enable True activa el control y false lo desactiva
+	 */
+	public void setControlEnabled(boolean enabled){
+		this.getBAdd().setEnabled(enabled);
+		this.getBRemove().setEnabled(enabled);
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/AddRemoveButtonsPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLText.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLText.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLText.java	(revision 10281)
@@ -0,0 +1,40 @@
+package org.cresques.ui.raster;
+
+import javax.swing.JTextField;
+
+/**
+ * Clase que representa a un textfield obtenido a partir del XML
+ * que manda un driver de escritura.
+ *
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class XMLText extends JTextField {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public int numPanel = -1;
+    public int posIntoPanel = -1;
+    public String position = null;
+    public String selected = null;
+    public int sizex = 0;
+    public int sizey = 0;
+    public String text = null;
+    public String id = null;
+
+    /**
+     * Contructor
+     * @param text        texto del textfield
+     */
+    public XMLText(String text) {
+        super(text);
+        this.text = text;
+    }
+
+    /**
+     * Inicialización del XMLCheck
+     */
+    public void init() {
+        if ((sizex != 0) && (sizey != 0)) {
+            this.setPreferredSize(new java.awt.Dimension(sizex, sizey));
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/XMLText.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/CutRasterListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/CutRasterListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/CutRasterListener.java	(revision 10281)
@@ -0,0 +1,323 @@
+package org.cresques.ui.raster.listener;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.geom.Rectangle2D;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+import org.cresques.io.data.ICutRaster;
+import org.cresques.ui.raster.CutRasterPanel;
+import org.cresques.util.Utilities;
+
+/**
+ * Listener para el panel de recorte de imagen.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class CutRasterListener extends JPanel implements ActionListener, KeyListener, FocusListener{
+
+	private CutRasterPanel	panel = null;
+	private Rectangle2D 	extent = null;
+	private int 			widthPx = 0;
+	private int 			heightPx = 0;
+	/**
+	 * Clase que instancia a esta y que implemente ITailRaster.
+	 */
+	private ICutRaster					parent = null;
+	
+	
+	/**
+	 * Contructor
+	 * @param panel
+	 */
+	public CutRasterListener(CutRasterPanel panel, Rectangle2D extent, int widthPx, int heightPx, ICutRaster parent){
+		this.panel = panel;
+		this.extent = extent;
+		this.widthPx = widthPx;
+		this.heightPx = heightPx;
+		this.parent = parent;
+		
+		panel.getPCoordPixel().getPDataInput11().getJTextField().addKeyListener(this);
+		panel.getPCoordPixel().getPDataInput11().getJTextField().addFocusListener(this);
+		panel.getPCoordPixel().getPDataInput12().getJTextField().addKeyListener(this);
+		panel.getPCoordPixel().getPDataInput12().getJTextField().addFocusListener(this);
+		panel.getPCoordPixel().getPDataInput21().getJTextField().addKeyListener(this);
+		panel.getPCoordPixel().getPDataInput21().getJTextField().addFocusListener(this);
+		panel.getPCoordPixel().getPDataInput22().getJTextField().addKeyListener(this);
+		panel.getPCoordPixel().getPDataInput22().getJTextField().addFocusListener(this);
+		
+		panel.getPCoordReal().getPDataInput11().getJTextField().addKeyListener(this);
+		panel.getPCoordReal().getPDataInput11().getJTextField().addFocusListener(this);
+		panel.getPCoordReal().getPDataInput12().getJTextField().addKeyListener(this);
+		panel.getPCoordReal().getPDataInput12().getJTextField().addFocusListener(this);
+		panel.getPCoordReal().getPDataInput21().getJTextField().addKeyListener(this);
+		panel.getPCoordReal().getPDataInput21().getJTextField().addFocusListener(this);
+		panel.getPCoordReal().getPDataInput22().getJTextField().addKeyListener(this);
+		panel.getPCoordReal().getPDataInput22().getJTextField().addFocusListener(this);
+		
+		panel.getPResolution().getCCellSize().getJTextField().addKeyListener(this);
+		panel.getPResolution().getCCellSize().getJTextField().addFocusListener(this);
+		panel.getPResolution().getCWidth().getJTextField().addKeyListener(this);
+		panel.getPResolution().getCWidth().getJTextField().addFocusListener(this);
+		panel.getPResolution().getCHeight().getJTextField().addKeyListener(this);
+		panel.getPResolution().getCHeight().getJTextField().addFocusListener(this);
+	
+		panel.getPResize().getButton(0).addActionListener(this);
+		panel.getPResize().getButton(1).addActionListener(this);
+		panel.getPResize().getButton(2).addActionListener(this);
+	}
+	
+	/**
+	 * Comprueba si todos los campos de coordenadas están llenos
+	 * @return true si todos los campos de coordenadas están llenos y false si hay alguno vacio.
+	 */
+	private boolean isFieldsFill(){
+		if(	panel.getPCoordPixel().getPDataInput11().getJTextField().equals("") ||
+			panel.getPCoordPixel().getPDataInput12().getJTextField().equals("") ||
+			panel.getPCoordPixel().getPDataInput21().getJTextField().equals("") ||
+			panel.getPCoordPixel().getPDataInput22().getJTextField().equals("") ||
+			panel.getPCoordReal().getPDataInput11().getJTextField().equals("") ||
+			panel.getPCoordReal().getPDataInput12().getJTextField().equals("") ||
+			panel.getPCoordReal().getPDataInput21().getJTextField().equals("") ||
+			panel.getPCoordReal().getPDataInput22().getJTextField().equals(""))
+			return false;
+		return true;
+	}
+	
+	/**
+	 * Obtiene un rectangulo con la ventana en pixeles. Estos datos son leidos desde el interfaz.
+	 * @return Rectangle2D
+	 */
+	private Rectangle2D getPxWindow(){	
+		if(panel.getPxMinX() == 0 && panel.getPxMinY() == 0 && panel.getPxMaxX() == 0 && panel.getPxMaxY() == 0)
+			return null;
+		return new Rectangle2D.Double(panel.getPxMinX(), panel.getPxMinY(), Math.abs(panel.getPxMaxX() - panel.getPxMinX()), Math.abs(panel.getPxMaxY() - panel.getPxMinY()));
+	}
+	
+	/**
+	 * Obtiene un rectangulo con la ventana en coordenadas reales. Estos datos son leidos desde el interfaz.
+	 * @return Rectangle2D
+	 */
+	private Rectangle2D getMapWindow(){
+		if(panel.getWcMinX() == 0 && panel.getWcMinY() == 0 && panel.getWcMaxX() == 0 && panel.getWcMaxY() == 0)
+			return null;
+		return new Rectangle2D.Double(panel.getWcMinX(), panel.getWcMaxY(), Math.abs(panel.getWcMaxX() - panel.getWcMinX()), Math.abs(panel.getWcMaxY() - panel.getWcMinY()));
+	}
+	
+	/**
+	 * Recalcula el valor de los campos de coordenadas reales y pixel. Cuando modificamos algún campo
+	 * de las coordenadas reales se modifican los pixeles y viceversa.
+	 * @param modifyPx true si se ha modificado algún campo de coordenadas pixel y false si se ha modificado
+	 * algún campo de las coordenadas reales.
+	 */
+	private void recalcCoordFields(boolean modifyPx){
+		if(isFieldsFill()){
+			try{
+				if(modifyPx){
+					Rectangle2D pxWindow = getPxWindow();	
+					if(pxWindow == null)
+						return;
+					Rectangle2D newWC = Utilities.getMapRectFromPxRect(extent, widthPx, heightPx, pxWindow);
+					panel.setCoorRealFromDouble(newWC.getMinX(), newWC.getMaxY(), newWC.getMaxX(), newWC.getMinY(), 6);
+					panel.setWidthText(pxWindow.getWidth(), 0);
+					panel.setHeightText(pxWindow.getHeight(), 0);
+					panel.setCellSizeText((newWC.getWidth() / pxWindow.getWidth()), 4);
+					panel.setRelWidthHeight((double)(pxWindow.getWidth() / pxWindow.getHeight()));
+					parent.setInitValuesToSize(pxWindow.getWidth(), pxWindow.getHeight());
+				}else{
+					Rectangle2D mapWindow = getMapWindow();
+					if(mapWindow == null)
+						return;
+					Rectangle2D newPx = Utilities.getPxRectFromMapRect(extent, widthPx, heightPx, mapWindow);
+					panel.setCoorPixelFromDouble(newPx.getMinX(), newPx.getMinY(), newPx.getMaxX(), newPx.getMaxY(), 3);
+					panel.setWidthText(newPx.getWidth(), 0);
+					panel.setHeightText(newPx.getHeight(), 0);
+					panel.setCellSizeText((mapWindow.getWidth() / newPx.getWidth()), 4);
+					panel.setRelWidthHeight((double)(newPx.getWidth() / newPx.getHeight()));
+					parent.setInitValuesToSize(newPx.getWidth(), newPx.getHeight());
+				}
+								
+			}catch(NumberFormatException ex){
+				return;
+			}
+		}
+	}
+
+	
+	public void actionPerformed(ActionEvent e) {
+		//Botón de selección del extent completo
+		//Modificamos las coordenadas reales y recalculamos las coordenadas pixel
+		if (e.getSource() == panel.getPResize().getButton(0)){
+			panel.setCoorRealFromDouble(extent.getMinX(), extent.getMaxY(), extent.getMaxX(), extent.getMinY(), 6);
+	   		Rectangle2D r = org.cresques.util.Utilities.getPxRectFromMapRect(extent, widthPx, heightPx, extent);
+	   		panel.setCoorPixelFromDouble(r.getMinX(), r.getMinY(), r.getMaxX(), r.getMaxY(), 3);
+	   		panel.setWidthText(r.getWidth(), 0);
+	   		panel.setHeightText(r.getHeight(), 0);
+	   		panel.setCellSizeText((extent.getWidth() / r.getWidth()), 4);
+	   		panel.setRelWidthHeight((double)(r.getWidth() / r.getHeight()));
+	   		parent.setInitValuesToSize(r.getWidth(), r.getHeight());
+		}
+		
+		//Botón de selección de la herramienta de seleccionar desde la vista
+		if (e.getSource() == panel.getPResize().getButton(1)){
+			parent.selectToolButton();
+		}
+			
+		//Botón de contraer y expandir el panel
+		if (e.getSource() == panel.getPResize().getButton(2))
+			panel.contractExpandPanel();
+	}
+
+	public void keyPressed(KeyEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+	 * Al producirse un evento de perdida de foco o pulsación de "enter" en un campo de texto de coordenadas
+	 * hay que asignar el nuevo valor introducido. 
+	 * @param obj
+	 */
+	private void eventJTextField(Object obj){
+		try{
+			if(	obj == panel.getPCoordPixel().getPDataInput11().getJTextField())
+				panel.setCoorPixelFromDouble(Double.valueOf(panel.getPCoordPixel().getPDataInput11().getJTextField().getText()).doubleValue(), 
+						panel.getPxMinY(), panel.getPxMaxX(), panel.getPxMaxY(), 3);
+			if(	obj == panel.getPCoordPixel().getPDataInput12().getJTextField())
+				panel.setCoorPixelFromDouble(panel.getPxMinX(), Double.valueOf(panel.getPCoordPixel().getPDataInput12().getJTextField().getText()).doubleValue(), 
+						panel.getPxMaxX(), panel.getPxMaxY(), 3);
+			if(	obj == panel.getPCoordPixel().getPDataInput21().getJTextField())
+				panel.setCoorPixelFromDouble(panel.getPxMinX(), panel.getPxMinY(),
+						Double.valueOf(panel.getPCoordPixel().getPDataInput21().getJTextField().getText()).doubleValue(), panel.getPxMaxY(), 3);
+			if(	obj == panel.getPCoordPixel().getPDataInput22().getJTextField())
+				panel.setCoorPixelFromDouble(panel.getPxMinX(), panel.getPxMinY(),
+						panel.getPxMaxX(), Double.valueOf(panel.getPCoordPixel().getPDataInput22().getJTextField().getText()).doubleValue(), 3);
+			
+			if(	obj == panel.getPCoordReal().getPDataInput11().getJTextField())
+				panel.setCoorRealFromDouble(Double.valueOf(panel.getPCoordReal().getPDataInput11().getJTextField().getText()).doubleValue(), 
+						panel.getWcMinY(), panel.getWcMaxX(), panel.getWcMaxY(), 6);
+			if(	obj == panel.getPCoordReal().getPDataInput12().getJTextField())
+				panel.setCoorRealFromDouble(panel.getWcMinX(), Double.valueOf(panel.getPCoordReal().getPDataInput12().getJTextField().getText()).doubleValue(), 
+						panel.getWcMaxX(), panel.getWcMaxY(), 6);
+			if(	obj == panel.getPCoordReal().getPDataInput21().getJTextField())
+				panel.setCoorRealFromDouble(panel.getWcMinX(), panel.getWcMinY(),
+						Double.valueOf(panel.getPCoordReal().getPDataInput21().getJTextField().getText()).doubleValue(), panel.getWcMaxY(), 6);
+			if(	obj == panel.getPCoordReal().getPDataInput22().getJTextField())
+				panel.setCoorRealFromDouble(panel.getWcMinX(), panel.getWcMinY(),
+						panel.getWcMaxX(), Double.valueOf(panel.getPCoordReal().getPDataInput22().getJTextField().getText()).doubleValue(), 6);
+		}catch(NumberFormatException ex1){
+			//No hay valores parseables a decimal en las cajas de texto. No hacemos nada
+		}
+	}
+	
+	/**
+	 * Cuando se presiona la tecla enter sobre los campos de texto se recalculan las
+	 * coordenadas. Si se ha presionado sobre los cuadro correspondientes a las coordenadas
+	 * pixel se recalculan las coordenadas del mundo real y viceversa.
+	 */
+	public void keyReleased(KeyEvent e) {
+		if(e.getKeyCode() == 10){
+			if(	e.getSource() == panel.getPCoordPixel().getPDataInput11().getJTextField() ||
+				e.getSource() == panel.getPCoordPixel().getPDataInput12().getJTextField() ||
+				e.getSource() == panel.getPCoordPixel().getPDataInput21().getJTextField() ||
+				e.getSource() == panel.getPCoordPixel().getPDataInput22().getJTextField()){
+				eventJTextField(e.getSource());
+				recalcCoordFields(true);
+			}
+			if(	e.getSource() == panel.getPCoordReal().getPDataInput11().getJTextField() ||
+				e.getSource() == panel.getPCoordReal().getPDataInput12().getJTextField() ||
+				e.getSource() == panel.getPCoordReal().getPDataInput21().getJTextField() ||
+				e.getSource() == panel.getPCoordReal().getPDataInput22().getJTextField()){
+				eventJTextField(e.getSource());
+				recalcCoordFields(false);
+			}
+			if(e.getSource() == panel.getPResolution().getCCellSize().getJTextField()){
+				//Cambiamos PS ==> wPx=wWC/PS  &   hPx=wPx/rel
+				double ps = 0;
+				try{
+					ps = Double.parseDouble(panel.getPResolution().getCCellSize().getJTextField().getText());
+				}catch(NumberFormatException ex){
+					return;
+				}
+				Rectangle2D mapWindow = getMapWindow();
+				Rectangle2D pxWindow = getPxWindow();
+				if(mapWindow == null || pxWindow ==  null)
+					return;
+				panel.setWidthText(mapWindow.getWidth() / ps, 0);
+				panel.setHeightText((mapWindow.getWidth() / ps) / panel.getRelWidthHeight(), 0);
+			}
+			
+			if(e.getSource() == panel.getPResolution().getCWidth().getJTextField()){
+				//Cambiamos wPx ==> hPx=wPx/rel  &   PS=wWC/wPx
+				double wPx = 0;
+				try{
+					wPx = Double.parseDouble(panel.getPResolution().getCWidth().getJTextField().getText());
+				}catch(NumberFormatException ex){
+					return;
+				}
+				Rectangle2D mapWindow = getMapWindow();
+				Rectangle2D pxWindow = getPxWindow();
+				if(mapWindow == null || pxWindow ==  null)
+					return;
+				panel.setWidthText(wPx, 0);
+				panel.setHeightText(wPx / panel.getRelWidthHeight(), 0);
+				panel.setCellSizeText((mapWindow.getWidth() / wPx), 4);
+			}
+			
+			if(e.getSource() == panel.getPResolution().getCHeight().getJTextField()){
+				//Cambiamos hPx ==> wPx=rel*wPx  &   PS=hWC/hPx			
+				double hPx = 0;
+				try{
+					hPx = Double.parseDouble(panel.getPResolution().getCHeight().getJTextField().getText());
+				}catch(NumberFormatException ex){
+					return;
+				}
+				Rectangle2D mapWindow = getMapWindow();
+				Rectangle2D pxWindow = getPxWindow();
+				if(mapWindow == null || pxWindow ==  null)
+					return;
+				panel.setWidthText(hPx * panel.getRelWidthHeight(), 0);
+				panel.setHeightText(hPx, 0);
+				panel.setCellSizeText((mapWindow.getHeight() / hPx), 4);
+			}
+		}
+	}
+
+	public void keyTyped(KeyEvent e) {
+
+	}
+
+	public void focusGained(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+	 * Cuando se pierde el foco alguno de los campos de texto se recalculan las
+	 * coordenadas. Si lo han perdido los cuadros correspondientes a las coordenadas
+	 * pixel se recalculan las coordenadas del mundo real y viceversa.
+	 */
+	public void focusLost(FocusEvent e) {
+		if(	e.getSource() == panel.getPCoordPixel().getPDataInput11().getJTextField() ||
+				e.getSource() == panel.getPCoordPixel().getPDataInput12().getJTextField() ||
+				e.getSource() == panel.getPCoordPixel().getPDataInput21().getJTextField() ||
+				e.getSource() == panel.getPCoordPixel().getPDataInput22().getJTextField()){
+				eventJTextField(e.getSource());
+				recalcCoordFields(true);
+		}
+		if(	e.getSource() == panel.getPCoordReal().getPDataInput11().getJTextField() ||
+			e.getSource() == panel.getPCoordReal().getPDataInput12().getJTextField() ||
+			e.getSource() == panel.getPCoordReal().getPDataInput21().getJTextField() ||
+			e.getSource() == panel.getPCoordReal().getPDataInput22().getJTextField()){
+			eventJTextField(e.getSource());
+			recalcCoordFields(false);
+		}
+	}
+	
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/CutRasterListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/HistogramPanelListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/HistogramPanelListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/HistogramPanelListener.java	(revision 10281)
@@ -0,0 +1,219 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.cresques.ui.raster.listener;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.event.TableModelEvent;
+
+import org.cresques.io.datastruct.Histogram;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.ui.raster.HistogramPanel;
+
+/**
+ * Listener para eventos del panel de histograma
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class HistogramPanelListener implements FocusListener, KeyListener, MouseListener, ActionListener, MouseMotionListener{
+
+	private HistogramPanel			panel = null;
+	/**
+	 * Objeto histograma para la gestión de procesos de histograma
+	 */
+	private	Histogram				histogramObj = null;
+	
+	public static boolean 			comboEventEnable = true;
+		
+	public HistogramPanelListener(HistogramPanel p){
+		panel = p;
+	}
+	
+	public void setControlListeners(){
+		panel.getPHistogram().getPlusButtonControlLeft().addActionListener(this);
+		panel.getPHistogram().getPlusButtonControlRight().addActionListener(this);
+		panel.getPHistogram().getLessButtonControlLeft().addActionListener(this);
+		panel.getPHistogram().getLessButtonControlRight().addActionListener(this);
+		panel.getPHistogram().getTextControlRight().addKeyListener(this);
+		panel.getPHistogram().getTextControlLeft().addKeyListener(this);
+		panel.getPHistogram().getTextControlRight().addFocusListener(this);
+		panel.getPHistogram().getTextControlLeft().addFocusListener(this);
+	}
+	
+	public void mouseDragged(MouseEvent e) {
+				
+	}
+
+	public void mousePressed(MouseEvent e) {
+		
+	}
+
+	public void mouseReleased(MouseEvent e) {
+			
+	}
+	
+	public void setLabels(JLabel left, JLabel right){
+		  
+	}
+	
+	public void mouseMoved(MouseEvent e) {
+			
+	}
+
+	private void initialize(){
+
+	}
+	
+	public void actionPerformed(ActionEvent e) {
+		
+		//--------------------------------------
+		//Botones de más y menos
+		if(	e.getSource() == panel.getPHistogram().getPlusButtonControlLeft() ||
+			e.getSource() == panel.getPHistogram().getLessButtonControlLeft() ||
+			e.getSource() == panel.getPHistogram().getPlusButtonControlRight() ||
+			e.getSource() == panel.getPHistogram().getLessButtonControlRight()){
+			panel.setStatistic(Statistic.getBasicStatsFromHistogram(panel.getLastHistogram(),
+																	(int)panel.getBoxesValues()[1], 
+																	(int)panel.getBoxesValues()[0],
+																	panel.showBands));
+			return;
+		}
+			
+		
+		//--------------------------------------
+		//Cambiar las bandas en el combo
+		JComboBox cbb = panel.getJComboBands();
+		if(comboEventEnable && e.getSource() == cbb){
+			if(cbb.getSelectedIndex() == 0){
+				boolean[] list = panel.getBandListShowInChart();
+				for(int i = 0; i < list.length; i++)
+					list[i] = true;
+				panel.setBandListShowInChart(list);
+			}else if(cbb.getSelectedItem().equals("R") || cbb.getSelectedItem().equals("Band 0"))
+				panel.addOrRemoveGraphicBand(0);
+			else if(cbb.getSelectedItem().equals("G") || cbb.getSelectedItem().equals("Band 1"))
+				panel.addOrRemoveGraphicBand(1);
+			else if(cbb.getSelectedItem().equals("B") || cbb.getSelectedItem().equals("Band 2"))
+				panel.addOrRemoveGraphicBand(2);
+			else{
+				for(int i = 3; i < HistogramPanel.MAXBANDS; i++){
+					if(cbb.getSelectedItem().equals("Band "+i))
+						panel.addOrRemoveGraphicBand(i);
+				}
+			}
+		}
+		
+		//--------------------------------------		
+		//Limpiar
+		JButton clean = panel.getJButtonClear();
+		if(e.getSource() == clean){
+			panel.cleanChart();
+		}
+		
+		//--------------------------------------
+		//Selección de fuente de datos del histograma
+		JComboBox cbo = panel.getJComboBoxOrigen();
+		if(comboEventEnable && e.getSource() == cbo){
+			panel.setHistogramDataSource(cbo.getSelectedIndex());
+			
+			//En caso de que el histograma se monte a partir de los datos de la vista ponemos RGB en el combo
+			if(cbo.getSelectedIndex() == 0)
+				panel.setRGBInBandList();
+			
+			//En caso de que el histograma se monte a partir de los datos reales ponemos el número de bandas en el combo
+			if(cbo.getSelectedIndex() == 1 || cbo.getSelectedIndex() == 2)
+				panel.setBands(panel.getHistogram().getGrid().getBandCount());			
+		}
+				
+		//--------------------------------------
+		//Selección de histograma acumulado y no acumulado
+		JComboBox cbt = panel.getJComboBoxTipo();
+		if(comboEventEnable && e.getSource() == cbt)
+			panel.setType(cbt.getSelectedIndex());
+	
+		if(comboEventEnable)
+			panel.showHistogram();
+	}
+
+	public void tableChanged(TableModelEvent e) {
+				
+	}
+
+	public void mouseClicked(MouseEvent e) {
+		
+	}
+
+	public void mouseEntered(MouseEvent e) {
+				
+	}
+
+	public void mouseExited(MouseEvent e) {
+				
+	}
+
+	/**
+	 * Asigna el objeto histograma para la gestión de procesos de histograma
+	 * @param histogramObj
+	 */
+	public void setHistogram(Histogram histogramObj) {
+		this.histogramObj = histogramObj;
+	}
+
+	public void keyPressed(KeyEvent e) {
+		if(e.getKeyCode() == 10){
+			panel.setStatistic(Statistic.getBasicStatsFromHistogram(panel.getLastHistogram(),
+																	(int)panel.getBoxesValues()[1], 
+																	(int)panel.getBoxesValues()[0],
+																	panel.showBands));
+			
+		}
+	}
+
+	public void keyReleased(KeyEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void keyTyped(KeyEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void focusGained(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void focusLost(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/HistogramPanelListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/PalettePanelListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/PalettePanelListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/PalettePanelListener.java	(revision 10281)
@@ -0,0 +1,384 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.cresques.ui.raster.listener;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+
+import org.cresques.ui.raster.NameChooserDialog;
+import org.cresques.ui.raster.PalettePanel;
+import org.gvsig.gui.beans.table.TableControlerPanel;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.kxml2.io.KXmlParser;
+import org.kxml2.io.KXmlSerializer;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Listener para eventos del panel de paleta
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class PalettePanelListener implements KeyListener, ActionListener{
+
+	private PalettePanel			panel = null;	
+	public static boolean 			comboEventEnable = true;
+	private TableControlerPanel		control = null;
+	private JColorChooser			colorSelector = null;;
+	private NameChooserDialog 		nameChooser;
+	private String					savePaletteName;
+		
+	/**
+	 * Constructor 
+	 * @param p Panel 
+	 */
+	public PalettePanelListener(PalettePanel p){
+		panel = p;
+	}
+	
+	/**
+	 * Asigna a los controles que el listener por defecto sea esta clase.
+	 * El panel tendrá que llamar a este método explicitamente si quiere que  
+	 * los listener sean asignados.
+	 */
+	public void setControlListeners(){
+		control = panel.getPTable().getControl();
+		
+		panel.getBSave().addActionListener(this);
+		panel.getBAccept().addActionListener(this);
+		panel.getBApply().addActionListener(this);
+		panel.getBCancel().addActionListener(this);
+		panel.getCActive().addActionListener(this);
+		panel.getCbInterpolar().addActionListener(this);
+		panel.getCbList().addActionListener(this);
+
+		control.getBNew().addActionListener(this);
+		control.getBDelPoint().addActionListener(this);
+		control.getBClear().addActionListener(this);
+		panel.getPTable().setEnableControlsListener(false);
+		
+		/*panel.getPTable().addKeyListener(this);
+		panel.getBAccept().addKeyListener(this);
+		panel.getBApply().addKeyListener(this);
+		panel.getBCancel().addKeyListener(this);
+		panel.getCActive().addKeyListener(this);
+		panel.getCbInterpolar().addKeyListener(this);
+		panel.getCbList().addKeyListener(this);*/
+	}
+	
+	/**
+	 * Controlamos las acciones de:
+	 * <UL>
+	 * <LI>Nueva fila: Asigna un nuevo botón con su listener para que pueda se controlado desde esta misma clase</LI>
+	 * <LI>Lista de botones: Para cada botón de la tabla asignamos el listener que hace que se muestre el 
+	 * dialogo de color. El valor retornado por este se pondra en la columna RGB y el botón se coloreará</LI>
+	 * </UL>
+	 * @throws NotInitializeException 
+	 */
+	public void actionPerformed(ActionEvent e) {
+		
+		//Botón de salvar tabla
+		if(e.getSource() == panel.getBSave()){
+			if (nameChooser == null)
+				nameChooser = new NameChooserDialog(panel, this);
+			else
+				nameChooser.init();
+		}
+		
+		//Botón de nueva fila
+		if(e.getSource() == control.getBNew())
+			try {
+				panel.addRowToTable(Color.WHITE, "C" + panel.getPTable().getRowCount(), "0", "255");
+			} catch (NotInitializeException e1) {
+				panel.addRowToTable(Color.WHITE, "C0" , "0", "255");
+			}
+		
+		
+		//Botón eliminar fila
+		if(e.getSource() == control.getBDelPoint())
+			panel.deleteSelectedRow();
+				
+		//Botón eliminar todas las filas
+		if(e.getSource() == control.getBClear())
+			panel.deleteAllRows();
+		
+		
+		//Comobo elegir paleta predeterminada.
+		if(e.getSource() == panel.getCbList()){
+			if (panel.getCbList().getSelectedItem()!=null){
+				loadPalette(panel.getPalettesPath(), panel.getCbList().getSelectedItem().toString());
+				panel.orderRows();
+			}
+		}
+				
+		//Check de activo
+		if(e.getSource() == panel.getCActive()){
+			if(panel.getCActive().isSelected())
+				panel.setEnabled(true);
+			else
+				panel.setEnabled(false);
+		}
+		
+	}
+
+	
+	
+	public void keyPressed(KeyEvent e) {
+		/*if(e.getKeyCode() == 10){//Enter=Aceptar
+						
+		}
+		
+		if(e.getKeyCode() == 27){ //Escape=Cancelar
+			
+		}*/
+	}
+
+	public void keyReleased(KeyEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void keyTyped(KeyEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	
+	/**
+	 * Lee una paleta del fichero xml de paletas y la carga en la tabla del panel.
+	 * 
+	 *  @param palettesPath Camino al fichero de paletas predefinidas.
+	 *  @param paletteName Nombre de paleta a cargar desde el fichero xml.
+	 * 
+	 */
+	public void loadPalette(String palettesPath, String paletteName){
+		
+		File palettesFile = new File(palettesPath);
+		if(!palettesFile.exists())
+			return;
+		
+		try {
+			KXmlParser parser = new KXmlParser();
+			FileInputStream fileInputStream = new FileInputStream(palettesPath);
+			parser.setInput(fileInputStream, null);
+			int tag = parser.nextTag();
+			
+			parser.require(KXmlParser.START_TAG, null, "palettes");
+			tag = parser.nextTag();
+			parser.require(KXmlParser.START_TAG, null, "palette_list");
+			parser.skipSubTree();
+			parser.require(KXmlParser.END_TAG, null, "palette_list");
+			tag = parser.nextTag();
+			
+			while (tag == KXmlParser.START_TAG){
+				parser.require(KXmlParser.START_TAG, null, "palette");
+				if(parser.getAttributeCount()==2) 
+					if (parser.getAttributeValue(0).equals(paletteName)){	
+						boolean interpolate = Boolean.valueOf(parser.getAttributeValue(1)).booleanValue();
+						tag = parser.nextTag();
+						parser.require(KXmlParser.START_TAG, null, "table");
+						tag = parser.nextTag();
+						try {
+							panel.getPTable().removeAllRows();
+						} catch (NotInitializeException e1) {
+							e1.printStackTrace();
+						}
+						
+						ArrayList rows = new ArrayList();
+						
+						while(tag == KXmlParser.START_TAG){
+							parser.require(KXmlParser.START_TAG, null, "entry");
+							if (parser.getAttributeCount()==3){
+								
+								String rgb = parser.getAttributeValue(1).substring(parser.getAttributeValue(1).indexOf(",")+1,
+										parser.getAttributeValue(1).length());
+								
+								int a = Integer.valueOf(parser.getAttributeValue(1).substring(0,parser.getAttributeValue(1).indexOf(","))).intValue();
+								int r= Integer.valueOf(rgb.substring(0,rgb.indexOf(","))).intValue();
+								int g=Integer.valueOf(rgb.substring(rgb.indexOf(",")+1,rgb.lastIndexOf(","))).intValue();
+								int b=Integer.valueOf(rgb.substring(rgb.lastIndexOf(",")+1,rgb.length())).intValue();
+						
+								//No añado filas a la tabla hasta que no se ha leido correctamente la paleta completa:
+								Object row[] = {new Color(r,g,b), parser.getAttributeValue(0), parser.getAttributeValue(2), String.valueOf(a)};
+								rows.add(row);
+							}
+							tag = parser.nextTag();
+							parser.require(KXmlParser.END_TAG, null, "entry");
+							tag = parser.nextTag();
+						}
+						parser.require(KXmlParser.END_TAG, null, "table");
+						
+						// Rellenar la tabla con las entradas leidas:
+						for (int i=0;i<rows.size();i++)
+							panel.addRowToTable((Color)((Object[])rows.get(i))[0], (String)((Object[])rows.get(i))[1], 
+									(String)((Object[])rows.get(i))[2], (String)((Object[])rows.get(i))[3]);
+						panel.getCbInterpolar().setSelected(interpolate);
+						fileInputStream.close();
+						return;
+				}
+				parser.skipSubTree();
+				parser.require(KXmlParser.END_TAG, null, "palette");
+				tag = parser.nextTag();
+			}
+					
+			parser.require(KXmlParser.END_TAG, null, "palettes");
+			panel.deleteAllRows();
+			fileInputStream.close();
+			return;
+			
+		}catch (FileNotFoundException fnfEx) {
+			fnfEx.printStackTrace();
+		}catch (XmlPullParserException xmlEx) {
+			System.out.println("El fichero de paletas predeterminadas no tiene la estructura correcta:\n	" + xmlEx.getMessage());
+		}catch (IOException e) {
+		}
+	}
+
+	/**
+	 * Salva la paleta que hay en la tabla al fichero xml de paletas conel nombre especificado.
+	 * 
+	 *  @param palettesPath Camino al fichero de paletas predefinidas.
+	 *  @param paletteName Nombre de paleta a cargar desde el fichero xml.
+	 * 
+	 */
+	public void savePalette(String palettesPath, String paletteName){
+		
+		File tmp = new File(palettesPath.substring(0,palettesPath.lastIndexOf(File.separator)+1)+"palettes.tmp");
+		File palettes = new File(palettesPath);
+		
+		try {
+			if (!tmp.exists())
+				tmp.createNewFile();
+			
+			Reader reader = new FileReader(palettesPath);
+			BufferedReader bReader = new BufferedReader(reader);
+			
+			Writer writer = new FileWriter(palettesPath.substring(0,palettesPath.lastIndexOf(File.separator)+1)+"palettes.tmp");
+			BufferedWriter bWriter = new BufferedWriter(writer);
+			
+			String line = bReader.readLine();
+			while (line != null){
+				
+				if (line.indexOf("</palette_list>")>=0){
+					bWriter.write("\t\t<name>"+paletteName+"</name>");
+					bWriter.newLine();
+				}else if (line.indexOf("</palettes>")>=0){
+					bWriter.newLine();
+					bWriter.write(createXmlStringFromTable(paletteName));
+					bWriter.newLine();
+				}
+					
+				bWriter.write(line);
+				bWriter.newLine();
+				
+				line = bReader.readLine();
+			}
+			
+			bReader.close();
+			bWriter.close();
+		
+			palettes.delete();
+			tmp.renameTo(palettes);
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Crea un String con el bloque XML correspondiente a la paleta que hay en la tabla.
+	 * 
+	 *  @param palettesPath Camino al fichero de paletas predefinidas.
+	 *  @param paletteName Nombre de paleta a cargar desde el fichero xml.
+	 * 
+	 */
+	private String createXmlStringFromTable(String paletteName){
+		Writer writer = new  StringWriter();
+		try {
+			KXmlSerializer serializer = new KXmlSerializer();
+			serializer.setOutput(writer);
+			
+			serializer.text("\t");
+			serializer.startTag(null,"palette").attribute(null,"name",paletteName).attribute(null,"interpolate",
+					Boolean.toString(panel.getCbInterpolar().isSelected()));
+			serializer.text("\n");
+			serializer.text("\t\t");
+			serializer.startTag(null,"table");
+			serializer.text("\n");
+			
+			
+			for (int row = 0; row<panel.getPTable().getRowCount();row++){
+				
+				String name = (String)panel.getPTable().getModel().getValueAt(row,1);
+				String value = (String)panel.getPTable().getModel().getValueAt(row,3);
+				String rgb = (String)panel.getPTable().getModel().getValueAt(row,2);
+				String argb = (String)panel.getPTable().getModel().getValueAt(row,4) + "," + rgb;
+				
+				serializer.text("\t\t\t");
+				serializer.startTag(null,"entry").attribute(null,"class",name);
+				serializer.attribute(null,"argb",argb);
+				serializer.attribute(null,"value",value).endTag(null,"entry");
+				serializer.text("\n");
+			}
+				
+			serializer.text("\t\t");
+			serializer.endTag(null,"table");
+			serializer.text("\n");
+			serializer.text("\t");
+			serializer.endTag(null,"palette");
+			
+		}catch (FileNotFoundException fnfEx) {
+			fnfEx.printStackTrace();
+		}catch (IOException e) {
+		}catch (NotInitializeException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} 
+		
+		return writer.toString();
+	}
+
+	public String getSavePaletteName() {
+		return savePaletteName;
+	}
+
+	public void setSavePaletteName(String savePaletteName) {
+		this.savePaletteName = savePaletteName;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/raster/listener/PalettePanelListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQCursor.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQCursor.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQCursor.java	(revision 10281)
@@ -0,0 +1,90 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import java.awt.Cursor;
+import java.awt.Point;
+import java.awt.Toolkit;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CQCursor {
+    public static int ZOOMIN_CURSOR = 0x100;
+    public static int ZOOMOUT_CURSOR = 0x101;
+    public static int PAN_CURSOR = 0x102;
+    public static int SELECT_CURSOR = 0x103;
+    public static int INFO_CURSOR = 0x104;
+    private static int MAXCURSORNR = 15;
+    private static Cursor[] cursores = null;
+
+    static {
+        ClassLoader loader = CQCursor.class.getClassLoader();
+
+        //ImageIcon folderIcon = new ImageIcon(loader.getResource("images/"+"folderXP.gif"));
+        cursores = new Cursor[MAXCURSORNR];
+        cursores[ZOOMIN_CURSOR - 0x100] = Toolkit.getDefaultToolkit()
+                                                 .createCustomCursor(Toolkit.getDefaultToolkit()
+                                                                            .getImage(loader.getResource("images/zi_cur.gif")),
+                                                                     new Point(6,
+                                                                               5),
+                                                                     "ZoomMas");
+        cursores[ZOOMOUT_CURSOR - 0x100] = Toolkit.getDefaultToolkit()
+                                                  .createCustomCursor(Toolkit.getDefaultToolkit()
+                                                                             .getImage(loader.getResource("images/zo_cur.gif")),
+                                                                      new Point(6,
+                                                                                5),
+                                                                      "ZoomMenos");
+        cursores[PAN_CURSOR - 0x100] = Toolkit.getDefaultToolkit()
+                                              .createCustomCursor(Toolkit.getDefaultToolkit()
+                                                                         .getImage(loader.getResource("images/pan_cur.gif")),
+                                                                  new Point(3, 3),
+                                                                  "Pan");
+        cursores[SELECT_CURSOR - 0x100] = Toolkit.getDefaultToolkit()
+                                                 .createCustomCursor(Toolkit.getDefaultToolkit()
+                                                                            .getImage(loader.getResource("images/select_cur.gif")),
+                                                                     new Point(6,
+                                                                               1),
+                                                                     "Select");
+        cursores[INFO_CURSOR - 0x100] = Toolkit.getDefaultToolkit()
+                                               .createCustomCursor(Toolkit.getDefaultToolkit()
+                                                                          .getImage(loader.getResource("images/info_cur.gif")),
+                                                                   new Point(5,
+                                                                             26),
+                                                                   "Info");
+    }
+
+    public static Cursor getCursor(int type) {
+        Cursor cursor = null;
+
+        if (type < 0x100) {
+            cursor = new Cursor(type);
+        } else if (type >= 0x100) {
+            cursor = cursores[type - 0x100];
+        }
+
+        return cursor;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQCursor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQSaveRaster.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQSaveRaster.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQSaveRaster.java	(revision 10281)
@@ -0,0 +1,47 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.PxLayerList;
+
+import java.awt.Container;
+
+
+/**
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public interface CQSaveRaster {
+    public void setLayerList(PxLayerList layerList);
+
+    public void setProjection(IProjection prj);
+
+    public void closeJDialog();
+
+    public Container getContentPane();
+
+    public void show();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQSaveRaster.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPLine.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPLine.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPLine.java	(revision 10281)
@@ -0,0 +1,90 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.px.gml.Feature;
+import org.cresques.px.gml.LineString;
+
+import org.cresques.ui.CQCursor;
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+/**
+ * Comando pline.
+ * Añade al canvas la capacidad de crear polilineas.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CmdPLine extends Cmd {
+    private Point2D ptIni = null;
+    private Vector pts = new Vector();
+    private Feature pLine = null;
+
+    /**
+     * Construye un nuevo CmdPLine para el Canvas.
+     * @param canvas
+     */
+    public CmdPLine(CQMapCanvas canvas) {
+        super(canvas);
+        eventsWanted = LEFT | RIGHT | PRESS | RELEASE;
+        cursor = CQCursor.getCursor(CQCursor.SELECT_CURSOR);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    public void cmd(Point2D pt, int bt, int mouseEvent) {
+        if (mouseEvent == Cmd.RELEASE) {
+            if (bt == MouseEvent.BUTTON1) {
+                pts.add(pt);
+                pline();
+            } else {
+                pts = new Vector();
+            }
+        }
+    }
+
+    /**
+     * Añade el punto actual a la PLine. La crea si no existe.
+     * @param ptIni Punto inicial.
+     * @param ptFin Punto final.
+     */
+    private void pline() {
+        if (pts.size() > 2) {
+            pLine.getGeometry().add((Point2D) pts.lastElement());
+        } else if (pts.size() == 2) {
+            pLine = new Feature();
+            pLine.setGeometry(new LineString());
+            pLine.getGeometry().add((Point2D) pts.get(0));
+            pLine.getGeometry().add((Point2D) pts.get(1));
+            canvas.getApp().getCurrentLayer().add(pLine);
+        }
+
+        canvas.repaint();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPLine.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>cmd: Comandos que actuan sobre el canvas.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdInfo.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdInfo.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdInfo.java	(revision 10281)
@@ -0,0 +1,57 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.ui.CQCursor;
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * Comando info.
+ * Añade al canvas la capacidad de obtener información de un elemento
+ * debajo del cursor.
+ * @see org.cresques.geo.cover.Coverage
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CmdInfo extends Cmd {
+    /**
+     * Construye un nuevo CmdInfo para el Canvas
+     * @param canvas
+     */
+    public CmdInfo(CQMapCanvas canvas) {
+        super(canvas);
+        eventsWanted = LEFT | RIGHT | PRESS;
+        cursor = CQCursor.getCursor(CQCursor.INFO_CURSOR);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    public void cmd(Point2D pt, int btn, int mouseEvent) {
+        canvas.getApp().selectHoja(pt);
+        canvas.repaint();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdInfo.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPan.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPan.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPan.java	(revision 10281)
@@ -0,0 +1,71 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.ui.CQCursor;
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * Comando pan.
+ * Añade al canvas la capacidad de desplazar la vista.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CmdPan extends Cmd {
+    private Point2D ptIni = null;
+
+    /**
+     * Construye un nuevo CmdPan para el Canvas.
+     * @param canvas
+     */
+    public CmdPan(CQMapCanvas canvas) {
+        super(canvas);
+        eventsWanted = LEFT | PRESS | RELEASE;
+        cursor = CQCursor.getCursor(CQCursor.PAN_CURSOR);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    public void cmd(Point2D pt, int btn, int mouseEvent) {
+        if (mouseEvent == Cmd.RELEASE) {
+            pan(ptIni, pt);
+        } else if (mouseEvent == Cmd.PRESS) {
+            ptIni = pt;
+        }
+    }
+
+    /**
+     * Realiza un desplazamiento de la vista.
+     * @param ptIni Punto inicial.
+     * @param ptFin Punto final.
+     */
+    void pan(Point2D ptIni, Point2D ptFin) {
+        canvas.getVPData().pan(ptIni, ptFin);
+        canvas.viewPortChanged();
+        canvas.repaint();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdPan.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/Cmd.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/Cmd.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/Cmd.java	(revision 10281)
@@ -0,0 +1,93 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.Cursor;
+import java.awt.geom.Point2D;
+
+import java.util.TreeMap;
+
+
+/**
+ * Clase Cmd, ancestro de todos los comandos del canvas.
+ * Permite añadir al canvas funcionalidades que responden a eventos de
+ * ratón y producen canvios en el estado del canvas.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public abstract class Cmd {
+    public static final int LEFT = 0x0001;
+    public static final int RIGHT = 0x0002;
+    public static final int MIDDLE = 0x0004;
+    public static final int PRESS = 0x0008;
+    public static final int RELEASE = 0x0010;
+    public static final int DRAG = 0x0020;
+    public static final int type = 0;
+    private static TreeMap cmdPool = null;
+
+    /**
+     * Inicialización de la pool de comandos.
+     */
+    static {
+        cmdPool = new TreeMap();
+    }
+
+    CQMapCanvas canvas = null;
+    int eventsWanted = 0;
+    protected Cursor cursor = null;
+
+    /**
+     * Construye un nuevo Cmd para el Canvas
+     * @param canvas
+     */
+    public Cmd(CQMapCanvas canvas) {
+        this.canvas = canvas;
+    }
+
+    public static void register(String cmdStr, Cmd command) {
+        Cmd.cmdPool.put(cmdStr, command);
+    }
+
+    public static Cmd get(String cmdStr) {
+        return (Cmd) Cmd.cmdPool.get(cmdStr);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    abstract public void cmd(Point2D pt, int bt, int mouseEvent);
+
+    /**
+     * Devuelve un Bitset con los eventos de raton que requiere.
+     * @return eventsWanted (BitSet)
+     */
+    public int getEventsWanted() {
+        return eventsWanted;
+    }
+
+    public Cursor getCursor() {
+        return cursor;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/Cmd.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdSelect.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdSelect.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdSelect.java	(revision 10281)
@@ -0,0 +1,57 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.ui.CQCursor;
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * Comando select.
+ * Añade al canvas la capacidad de seleccionar datos de una cobertura
+ *         usando una malla poligonal.
+ * @see org.cresques.geo.cover.Coverage
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CmdSelect extends Cmd {
+    /**
+     * Construye un nuevo CmdSelect para el Canvas
+     * @param canvas
+     */
+    public CmdSelect(CQMapCanvas canvas) {
+        super(canvas);
+        eventsWanted = LEFT | RIGHT | PRESS;
+        cursor = CQCursor.getCursor(CQCursor.SELECT_CURSOR);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    public void cmd(Point2D pt, int btn, int mouseEvent) {
+        canvas.getApp().selectHoja(pt);
+        canvas.repaint();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdSelect.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdMeasure.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdMeasure.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdMeasure.java	(revision 10281)
@@ -0,0 +1,72 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.ui.CQCursor;
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.Cursor;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Comando measure.
+ * Añade al canvas la capacidad de medir distancias.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CmdMeasure extends Cmd {
+    private Point2D ptIni = null;
+
+    /**
+     * Construye un nuevo CmdMeasure para el Canvas.
+     * @param canvas
+     */
+    public CmdMeasure(CQMapCanvas canvas) {
+        super(canvas);
+        eventsWanted = LEFT | PRESS | RELEASE;
+        cursor = CQCursor.getCursor(Cursor.CROSSHAIR_CURSOR);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    public void cmd(Point2D pt, int btn, int mouseEvent) {
+        if (mouseEvent == Cmd.RELEASE) {
+            measure(ptIni, pt);
+        } else if (mouseEvent == Cmd.PRESS) {
+            ptIni = pt;
+        }
+    }
+
+    /**
+     * Mide la distancia entre dos puntos.
+     * @param ptIni Punto inicial.
+     * @param ptFin Punto final.
+     */
+    void measure(Point2D ptIni, Point2D ptFin) {
+        //canvas.getVPData().pan(ptIni, ptFin);
+        //canvas.viewPortChanged();
+        //canvas.repaint();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdMeasure.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdZoom.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdZoom.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdZoom.java	(revision 10281)
@@ -0,0 +1,102 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cmd;
+
+import org.cresques.px.Extent;
+
+import org.cresques.ui.CQCursor;
+import org.cresques.ui.CQMapCanvas;
+
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Comando zoom.
+ * Añade al canvas la capacidad de aumentar y disminuir la vista.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CmdZoom extends Cmd {
+    public double aumenta = 2.0;
+    public double reduce = .5;
+    private Point2D ptIni = null;
+
+    /**
+     * Construye un nuevo CmdZoom para el Canvas
+     * @param canvas
+     */
+    public CmdZoom(CQMapCanvas canvas) {
+        super(canvas);
+        eventsWanted = (LEFT | RIGHT | PRESS | RELEASE | DRAG);
+        cursor = CQCursor.getCursor(CQCursor.ZOOMIN_CURSOR);
+    }
+
+    /**
+     * Recibe los eventos del ratón.
+     */
+    public void cmd(Point2D pt, int bt, int mouseEvent) {
+        //System.out.println("Zoom: Evento = "+ mouseEvent);
+        if (mouseEvent == PRESS) {
+            ptIni = pt;
+        } else if (mouseEvent == RELEASE) {
+            if (pt.getX() != ptIni.getX()) {
+                zoomBox(new Extent(ptIni, pt));
+            } else if (bt == MouseEvent.BUTTON1) {
+                zoomMas(pt);
+            } else if (bt == MouseEvent.BUTTON3) {
+                zoomMenos(pt);
+            }
+        }
+    }
+
+    /**
+     * Realiza un zoom de aumento, centrado en el Point2D;
+     * @param pt
+     */
+    public void zoomMas(Point2D pt) {
+        canvas.getVPData().zoom(aumenta, pt);
+        canvas.viewPortChanged();
+        canvas.repaint();
+    }
+
+    /**
+     * Realiza un zoom de disminución, centrado en el Point2D;
+     * @param pt
+     */
+    public void zoomMenos(Point2D pt) {
+        canvas.getVPData().zoom(reduce, pt);
+        canvas.viewPortChanged();
+        canvas.repaint();
+    }
+
+    /**
+     * Realiza un zoom que abarque el Extent;
+     * @param box
+     */
+    public void zoomBox(Extent box) {
+        canvas.getVPData().zoom(box);
+        canvas.viewPortChanged();
+        canvas.repaint();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd/CmdZoom.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cmd
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQApp.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQApp.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQApp.java	(revision 10281)
@@ -0,0 +1,61 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.PxLayer;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * Define los métodos de comunicación entre la librería y la aplicación
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public interface CQApp {
+    public CQMapCanvas getCanvas();
+
+    public IProjection getCurrentProjection();
+
+    public void setCurrentProjection(IProjection proj);
+
+    public CQLayerManager getLayerManager();
+
+    public PxLayer getLayerByName(String lName);
+
+    public void setCurrentLayer(PxLayer layer);
+
+    public PxLayer getCurrentLayer();
+
+    public PxLayer createLayer(String name, IProjection proj);
+
+    public void loadFile(String fName, IProjection proj);
+
+    public void loadFile(String[] fNames, IProjection proj);
+
+    public void setCurrentMinuteo(PxLayer layerMin);
+
+    public void selectHoja(Point2D pt);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQApp.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultDialogPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultDialogPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultDialogPanel.java	(revision 10281)
@@ -0,0 +1,238 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import java.awt.FlowLayout;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class DefaultDialogPanel extends JPanel implements ComponentListener{
+    final private static long serialVersionUID = -3370601314380922368L;
+    protected JPanel contentPane = null;
+    private JPanel tabPane = null;
+    private JPanel buttonPane = null;
+    private JButton acceptButton = null;
+    private JButton cancelButton = null;
+    private JButton applyButton = null;
+    private int flag = 0;
+    protected int cWidth = 0, difWidth = 0;
+    protected int cHeight = 0, difHeight = 0;
+
+    /**
+     * Constructor
+     * @param init
+     */
+    public DefaultDialogPanel(boolean init){
+    	if(init)
+    		initialize();
+    }
+    
+    /**
+     * Constructor
+     */
+    public DefaultDialogPanel() {
+        super();
+        this.initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    public void initialize() {
+        //setBounds(0,0,321,230);
+        //javax.swing.BoxLayout(jContentPane, javax.swing.BoxLayout.Y_AXIS);
+        //jContentPane.setLayout(new java.awt.GridLayout(2,1));
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(3,22,2,23);
+        gridBagConstraints1.gridy = 1;
+        gridBagConstraints1.gridx = 0;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(5,0,2,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        setLayout(new GridBagLayout());
+        setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+        //jContentPane.setSize(30, 24);
+        this.setPreferredSize(new java.awt.Dimension(320, 165));
+        this.add(getTabPanel(), gridBagConstraints);
+        this.add(getButtonPanel(), gridBagConstraints1);
+        this.addComponentListener(this);
+        
+    }
+
+    /**
+     * Obtiene el panel general
+     * @return
+     */
+    protected JPanel getContentPanel() {
+        if (contentPane == null) {
+            contentPane = new JPanel();
+            contentPane.setLayout(new GridBagLayout());
+            contentPane.setBounds(6, 200, 310, 125);
+            contentPane.setPreferredSize(new java.awt.Dimension(310, 100));
+        }
+
+        return contentPane;
+    }
+
+    public JPanel getTabPanel() {
+        if (tabPane == null) {
+            GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+            gridBagConstraints2.insets = new java.awt.Insets(5,0,0,0);
+            gridBagConstraints2.gridy = 0;
+            gridBagConstraints2.gridx = 0;
+            tabPane = new JPanel();
+            tabPane.setLayout(new GridBagLayout());
+            
+            
+            //tabPane.setBounds(6, 7, 309, 189);
+            tabPane.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.SoftBevelBorder.RAISED));
+            tabPane.add(getContentPanel(), gridBagConstraints2);
+        }
+
+        return tabPane;
+    }
+
+    /**
+     * Obtiene el panel que contiene los botones de Aceptar, Cancelar y Aplicar 
+     * @return
+     */
+    protected JPanel getButtonPanel() {
+        if (buttonPane == null) {
+            GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+            gridBagConstraints5.insets = new java.awt.Insets(1,0,1,0);
+            gridBagConstraints5.gridy = 0;
+            gridBagConstraints5.gridx = 2;
+            GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+            gridBagConstraints4.insets = new java.awt.Insets(1,0,1,8);
+            gridBagConstraints4.gridy = 0;
+            gridBagConstraints4.gridx = 1;
+            GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+            gridBagConstraints3.insets = new java.awt.Insets(1,0,1,8);
+            gridBagConstraints3.gridy = 0;
+            gridBagConstraints3.gridx = 0;
+            buttonPane = new JPanel();
+            buttonPane.setLayout(new GridBagLayout());
+            buttonPane.setSize(309, 25);
+            buttonPane.setBounds(6, 200, 309, 25);
+            buttonPane.add(getAcceptButton(), gridBagConstraints3);
+            buttonPane.add(getCancelButton(), gridBagConstraints4);
+            buttonPane.add(getApplyButton(), gridBagConstraints5);
+        }
+
+        return buttonPane;
+    }
+
+    /**
+     * This method initializes Accept button
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getAcceptButton() {
+        if (acceptButton == null) {
+            acceptButton = new JButton("Aceptar");
+            acceptButton.setText("Aceptar");
+        }
+
+        return acceptButton;
+    }
+
+    /**
+     * This method initializes Cancel Button
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getCancelButton() {
+        if (cancelButton == null) {
+            cancelButton = new JButton("Cancelar");
+            cancelButton.setText("Cancelar");
+        }
+
+        return cancelButton;
+    }
+
+    /**
+     * This method initializes Apply Button
+     *
+     * @return javax.swing.JButton
+     */
+    public JButton getApplyButton() {
+        if (applyButton == null) {
+            applyButton = new JButton("Aplicar");
+        }
+
+        return applyButton;
+    }
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		if(e.getSource() == this)
+			this.resizeWindow();
+	}
+
+	public void resizeWindow(){
+		if (flag == 0){
+			cWidth = this.getSize().width;
+			cHeight = this.getSize().height;
+			flag++;
+		}
+		
+		int nWidth = getWidth();
+		int nHeight = getHeight();
+		difWidth = nWidth - cWidth;
+		difHeight = nHeight - cHeight;
+		this.tabPane.setSize(this.tabPane.getSize().width + difWidth, this.tabPane.getSize().height + difHeight);
+		this.tabPane.setLocation(this.tabPane.getLocation().x - difWidth/2, this.tabPane.getLocation().y - difHeight/2);
+		this.contentPane.setSize(this.contentPane.getSize().width + difWidth, this.contentPane.getSize().height + difHeight);
+		this.buttonPane.setLocation(this.buttonPane.getLocation().x + difWidth/2, this.buttonPane.getLocation().y + difHeight/2);
+		
+	}
+		
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}  //  @jve:decl-index=0:visual-constraint="12,13"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultDialogPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/KernelFiltersPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/KernelFiltersPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/KernelFiltersPanel.java	(revision 10281)
@@ -0,0 +1,157 @@
+/*
+ * Created on 23-ago-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.filter;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.ui.raster.BaseComponent;
+import org.gvsig.i18n.Messages;
+
+public class KernelFiltersPanel extends BaseComponent implements ActionListener {
+
+	private JPanel jPanel = null;
+	private JPanel jPanel1 = null;
+	private JComboBox jComboBox = null;
+	private JLabel jLabel = null;
+	private JPanel jPanel2 = null;
+	private JPanel jPanel3 = null;
+	
+	private int listCount = 0;
+
+	/**
+	 * This method initializes 
+	 * @param listCount Numero de elementos que tendrá el comboBox.
+	 */
+	public KernelFiltersPanel(int lCount) {
+		super();
+		this.listCount = lCount;
+		initialize();
+	}
+
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public KernelFiltersPanel() {
+		super();
+		initialize();
+	}
+	
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        this.setPreferredSize(new java.awt.Dimension(445,239));
+        this.add(getJPanel1(), null);
+        this.add(getJPanel(), null);
+			
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jLabel = new JLabel();
+			jLabel.setText(Messages.getText("kernel_size")+":");
+			jLabel.setPreferredSize(new java.awt.Dimension(120,16));
+			jPanel = new JPanel();
+			jPanel.setPreferredSize(new java.awt.Dimension(400,150));
+			jPanel.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.lightGray,1));
+			jPanel.add(getJPanel2(), null);
+			jPanel.add(jLabel, null);
+			jPanel.add(getCbKernel(), null);
+			jPanel.add(getJPanel3(), null);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jPanel1 = new JPanel();
+			jPanel1.setPreferredSize(new java.awt.Dimension(400,40));
+		}
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jComboBox	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getCbKernel() {
+		if (jComboBox == null) {
+			String [] lista = new String[listCount];
+			for (int i=0; i<listCount; i++)
+				lista[i] = String.valueOf((i+1)*2+1);
+			jComboBox = new JComboBox(lista);
+			jComboBox.setPreferredSize(new java.awt.Dimension(50,25));
+		}
+		return jComboBox;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jPanel2 = new JPanel();
+			jPanel2.setPreferredSize(new java.awt.Dimension(390,30));
+		}
+		return jPanel2;
+	}
+
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel3() {
+		if (jPanel3 == null) {
+			jPanel3 = new JPanel();
+			jPanel3.setPreferredSize(new java.awt.Dimension(150,10));
+		}
+		return jPanel3;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/KernelFiltersPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FirstDerivativePanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FirstDerivativePanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FirstDerivativePanel.java	(revision 10281)
@@ -0,0 +1,206 @@
+/*
+ * Created on 22-ago-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.filter;
+
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.cresques.ui.raster.BaseComponent;
+import org.gvsig.i18n.Messages;
+
+public class FirstDerivativePanel extends BaseComponent implements ActionListener {
+
+	private JPanel jPanel = null;
+	private JPanel jPanel1 = null;
+	private JLabel jLabel = null;
+	private JComboBox jComboBox = null;
+	private JLabel jLabel1 = null;
+	private JCheckBox jCheckBox = null;
+	private JLabel jLabel2 = null;
+	private JPanel jPanel2 = null;
+	private JLabel jLabel3 = null;
+	private JTextField jTextField = null;
+	private JPanel jPanel3 = null;
+
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public FirstDerivativePanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		this.setLayout(new FlowLayout());
+		this.setSize(new java.awt.Dimension(445,239));
+        this.setPreferredSize(new java.awt.Dimension(445,239));
+        this.add(getJPanel(), null);
+        this.add(getJPanel3(), null);
+        this.add(getJPanel1(), null);
+        if(!this.getCbUmbralizar().isSelected()){
+        	getTUmbral().setEnabled(false);
+			jLabel3.setEnabled(false);
+        }
+			
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == getCbUmbralizar()){
+			if (getCbUmbralizar().isSelected()){
+				this.getTUmbral().setEnabled(true);
+				this.jLabel3.setEnabled(true);
+			}
+			else{
+				this.getTUmbral().setEnabled(false);
+				this.jLabel3.setEnabled(false);
+			}		
+		}
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jLabel1 = new JLabel();
+			jLabel1.setText(Messages.getText("tipo_calculo")+":");
+			jLabel1.setPreferredSize(new java.awt.Dimension(390,30));
+			jLabel = new JLabel();
+			jLabel.setText("");
+			jLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEADING);
+			jPanel = new JPanel();
+			jPanel.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.lightGray,1));
+			jPanel.setLayout(new FlowLayout());
+			jPanel.setPreferredSize(new java.awt.Dimension(400,100));
+			jPanel.add(jLabel, null);
+			jPanel.add(jLabel1, null);
+			jPanel.add(getJComboBox(), null);
+		}
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jLabel2 = new JLabel();
+			jLabel2.setText(Messages.getText("umbralizar")+":");
+			jLabel2.setPreferredSize(new java.awt.Dimension(350,16));
+			jPanel1 = new JPanel();
+			jPanel1.setPreferredSize(new java.awt.Dimension(400,100));
+			jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.lightGray,1));
+			jPanel1.add(getCbUmbralizar(), null);
+			jPanel1.add(jLabel2, null);
+			jPanel1.add(getJPanel2(), null);
+		}
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jComboBox	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	private JComboBox getJComboBox() {
+		if (jComboBox == null) {
+			String [] lista = {Messages.getText("cuadratico"),Messages.getText("comparativo")};
+			jComboBox = new JComboBox(lista);
+			jComboBox.setPreferredSize(new java.awt.Dimension(200,25));
+		}
+		return jComboBox;
+	}
+
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getCbUmbralizar() {
+		if (jCheckBox == null) {
+			jCheckBox = new JCheckBox();
+			jCheckBox.addActionListener(this);
+		}
+		return jCheckBox;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jLabel3 = new JLabel();
+			jLabel3.setText(Messages.getText("umbral")+":");
+			jPanel2 = new JPanel();
+			jPanel2.setPreferredSize(new java.awt.Dimension(280,40));
+			jPanel2.add(jLabel3, null);
+			jPanel2.add(getTUmbral(), null);
+		}
+		return jPanel2;
+	}
+
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getTUmbral() {
+		if (jTextField == null) {
+			jTextField = new JTextField();
+			jTextField.setPreferredSize(new java.awt.Dimension(40,20));
+		}
+		return jTextField;
+	}
+
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel3() {
+		if (jPanel3 == null) {
+			jPanel3 = new JPanel();
+			jPanel3.setPreferredSize(new java.awt.Dimension(400,15));
+		}
+		return jPanel3;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FirstDerivativePanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/RasterTransparencyPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/RasterTransparencyPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/RasterTransparencyPanel.java	(revision 10281)
@@ -0,0 +1,431 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.filter;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.cresques.ui.raster.RGBInputPanel;
+
+import java.awt.FlowLayout;
+import java.awt.Insets;
+
+
+/**
+ * Dialogo para asignar la transparencia por pixel y global al raster.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterTransparencyPanel extends JPanel implements ComponentListener, ActionListener, FocusListener, ChangeListener{
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    /**
+     * Nombre del panel
+     */
+    private String 						nom = "Transparencia";
+    FilterRasterDialogPanel 			parent = null;
+
+    /**
+     * Número de bandas del raster
+     */
+    public int 							nBands = 3;
+    private JPanel 						jPanel1 = null;
+    private JCheckBox 					cbTransparencia = null;
+
+    /**
+     * Variable pública para la traducción
+     */
+    public JPanel 						pGeneralTrans = null;
+    private JCheckBox 					cbOpacidad = null;
+    private JSlider 					slOpacidad = null;
+    private JTextField 					tOpacidad = null;
+	private TransparencyByPixelPanel 	pTranspByPixel = null;
+	private JPanel 						pTransparencyByPixel = null;
+		
+    /**
+     * Constructor. Asigna la variable panel que contiene este
+     * @param parent FilterRasterDialogPanel
+     */
+    public RasterTransparencyPanel(FilterRasterDialogPanel parent) {
+        this.parent = parent;
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void initialize() {
+        GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+        gridBagConstraints4.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints4.gridx = 0;
+        gridBagConstraints4.gridy = 1;
+        gridBagConstraints4.gridwidth = 1;
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.gridx = 0;
+        gridBagConstraints1.gridy = 0;
+        this.setLayout(new GridBagLayout());
+        this.setBounds(0, 0, 445, 239);
+        this.setPreferredSize(new java.awt.Dimension(445, 239));
+        this.add(getPTransparencyByPixel(), gridBagConstraints1);
+        this.add(getOpacityPanel(), gridBagConstraints4);
+        initControls();
+        this.addComponentListener(this);
+    }
+
+    /**
+     * Obtiene el nombre del panel
+     * @return Cadena con el nombre del panel
+     */
+    public String getName(){
+    	return this.nom;
+    }
+    
+    /**
+     * Asigna el número de bandas de la imagen
+     * @param nBands
+     */
+    public void setBands(int nBands) {
+        this.nBands = nBands;
+    }
+
+    /**
+     * Inicializa controles a sus valores por defecto
+     */
+    public void initControls() {
+        this.getOpacityText().setText("100");
+        this.setActiveOpacityControl(false);
+        this.setActiveTransparencyControl(false);
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel1() {
+        if (jPanel1 == null) {
+            jPanel1 = new JPanel();
+            jPanel1.setLayout(new BorderLayout());
+            jPanel1.setPreferredSize(new java.awt.Dimension(415,25));
+            jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
+            jPanel1.add(getTransparencyCheck(), java.awt.BorderLayout.NORTH);
+        }
+
+        return jPanel1;
+    }
+
+    /**
+     * This method initializes jCheckBox
+     *
+     * @return javax.swing.JCheckBox
+     */
+    public JCheckBox getTransparencyCheck() {
+        if (cbTransparencia == null) {
+            cbTransparencia = new JCheckBox();
+            cbTransparencia.setText("Activar");
+            cbTransparencia.addActionListener(this);
+        }
+
+        return cbTransparencia;
+    }
+
+    /**
+     * This method initializes jPanel4
+     *
+     * @return javax.swing.JPanel
+     */
+    public JPanel getOpacityPanel() {
+        if (pGeneralTrans == null) {
+        	pGeneralTrans = new JPanel();
+        	pGeneralTrans.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Opacidad", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        	pGeneralTrans.setPreferredSize(new java.awt.Dimension(430,55));
+        	pGeneralTrans.add(getOpacityCheck(), null);
+        	pGeneralTrans.add(getOpacitySlider(), null);
+        	pGeneralTrans.add(getOpacityText(), null);
+        }
+
+        return pGeneralTrans;
+    }
+
+    /**
+     * This method initializes jCheckBox1
+     *
+     * @return javax.swing.JCheckBox
+     */
+    public JCheckBox getOpacityCheck() {
+        if (cbOpacidad == null) {
+            cbOpacidad = new JCheckBox();
+            cbOpacidad.setText("Activar");
+            cbOpacidad.addActionListener(this);
+            cbOpacidad.addFocusListener(this);
+        }
+
+        return cbOpacidad;
+    }
+
+    /**
+     * This method initializes jSlider
+     *
+     * @return javax.swing.JSlider
+     */
+    public JSlider getOpacitySlider() {
+        if (slOpacidad == null) {
+            slOpacidad = new JSlider();
+            slOpacidad.setPreferredSize(new java.awt.Dimension(270, 16));
+            slOpacidad.addChangeListener(this);
+        }
+
+        return slOpacidad;
+    }
+
+    /**
+     * This method initializes jTextField3
+     *
+     * @return javax.swing.JTextField
+     */
+    public JTextField getOpacityText() {
+        if (tOpacidad == null) {
+            tOpacidad = new JTextField();
+            tOpacidad.setPreferredSize(new java.awt.Dimension(30, 19));
+            tOpacidad.addActionListener(this);
+        }
+
+        return tOpacidad;
+    }
+
+    /**
+     * Activa/Desactiva los controles de opacidad
+     * @param active
+     */
+    public void setActiveOpacityControl(boolean active) {
+        this.getOpacityCheck().setSelected(active);
+        this.getOpacitySlider().setEnabled(active);
+        this.getOpacityText().setEnabled(active);
+    }
+
+    /**
+     * Activa/Desactiva los controles de transparencia
+     * @param active
+     */
+    public void setActiveTransparencyControl(boolean active) {
+        this.getTransparencyCheck().setSelected(active);
+        RGBInputPanel rgbPanel = this.getPTranspByPixel().getPRGBInput();
+        rgbPanel.getTRed().setEnabled(active);
+        
+        if (parent.nbands == 2) {
+        	rgbPanel.getTGreen().setEnabled(active);
+        	rgbPanel.getTBlue().setEnabled(false);
+        }
+
+        if (parent.nbands == 3) {
+        	rgbPanel.getTGreen().setEnabled(active);
+        	rgbPanel.getTBlue().setEnabled(active);
+        }
+    }
+
+    /**
+     * Asigna el valor de opacidad a los controles de la ventana
+     * para que cuando esta se abra tenga los valores seleccionados en la
+     * imagen.
+     * @param alpha
+     */
+    public void setOpacity(int alpha) {
+        int opacityPercent = (int) ((alpha * 100) / 255);
+        this.getOpacityText().setText(String.valueOf(opacityPercent));
+        this.getOpacitySlider().setValue(opacityPercent);
+        this.setActiveOpacityControl(true);
+
+        if (opacityPercent == 100) {
+            this.setActiveOpacityControl(false);
+        }
+    }
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TransparencyByPixelPanel getPTranspByPixel() {
+		if (pTranspByPixel == null) {
+			pTranspByPixel = new TransparencyByPixelPanel();
+			pTranspByPixel.setPreferredSize(new java.awt.Dimension(410,120));
+			pTranspByPixel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
+			pTranspByPixel.setControlEnabled(false);
+		}
+		return pTranspByPixel;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPTransparencyByPixel() {
+		if (pTransparencyByPixel == null) {
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 1;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.anchor = GridBagConstraints.WEST;
+			gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints2.gridheight = 1;
+			gridBagConstraints2.gridwidth = 1;
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 0;
+			gridBagConstraints2.ipady = 0;
+			gridBagConstraints2.fill = GridBagConstraints.NONE;
+			pTransparencyByPixel = new JPanel();
+			pTransparencyByPixel.setLayout(new GridBagLayout());
+			pTransparencyByPixel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Transparencia por pixel", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pTransparencyByPixel.setPreferredSize(new java.awt.Dimension(430,180));
+			pTransparencyByPixel.add(getJPanel1(), gridBagConstraints2);
+			pTransparencyByPixel.add(getPTranspByPixel(), gridBagConstraints);
+		}
+		return pTransparencyByPixel;
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	/**
+	 * Redimensiona el panel cuando se redimensiona el contenedor de éste
+	 */
+	public void componentResized(ComponentEvent e) {
+		/*if (e.getSource() == this){
+			int nWidth = this.getSize().width;
+			int nHeight = this.getSize().height;
+			int difWidth = nWidth - 445;
+			int difHeight = nHeight - 239;
+			this.pTransparencyByPixel.setSize(this.pTransparencyByPixel.getSize().width + difWidth, this.pTransparencyByPixel.getSize().height + difHeight);
+			this.pTransparencyByPixel.setLocation(14, 19);
+			this.pGeneralTrans.setSize(this.pGeneralTrans.getSize().width + difWidth, this.pGeneralTrans.getSize().height);
+			this.pGeneralTrans.setLocation(14, this.pGeneralTrans.getLocation().y + difHeight/2);
+			this.slOpacidad.setSize(this.slOpacidad.getSize().width + difWidth, this.slOpacidad.getSize().height);
+			this.tOpacidad.setLocation(this.tOpacidad.getLocation().x + difWidth, this.tOpacidad.getLocation().y);
+			this.pTranspByPixel.setLocation(this.pTranspByPixel.getLocation().x + difWidth/2, this.pTranspByPixel.getLocation().y + difHeight/2);
+		}*/
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+     * Eventos sobre TextField y CheckBox. Controla eventos de checkbox de opacidad, transparencia,
+     * recorte de colas y los textfield de opacidad, valores de transparencia por banda y
+     * porcentaje de recorte.
+     */
+	public void actionPerformed(ActionEvent e) {
+		//Evento sobre el checkbox de opacidad
+		if (e.getSource().equals(getOpacityCheck())) {
+	           //Check de opacidad activado -> Activar controles de opacidad
+	           if (getOpacityCheck().isSelected()) {
+	               getOpacitySlider().setEnabled(true);
+	               getOpacityText().setEnabled(true);
+	           } else {
+	               getOpacitySlider().setEnabled(false);
+	               getOpacityText().setEnabled(false);
+	           }
+		}
+		 
+		//Evento sobre el checkbox de transparencia
+	    if (e.getSource().equals(getTransparencyCheck())) {
+	           //Check de opacidad activado -> Activar controles de opacidad
+	           if (getTransparencyCheck().isSelected()) {
+	        	   getPTranspByPixel().setControlEnabled(true);
+	        	   getPTranspByPixel().getPRGBInput().setActiveBands(nBands);
+	           }else
+	        	   getPTranspByPixel().setControlEnabled(false);
+	    }
+	    
+	    //Evento sobre el textfield de opacidad
+        if (e.getSource().equals(getOpacityText()))
+            checkOpacityText();
+	}
+	
+    public void focusGained(FocusEvent e) {
+        //pTrans.updateTextBox();
+    }
+
+    public void focusLost(FocusEvent e) {
+        checkOpacityText();
+    }
+    
+    /*
+    *
+    */
+   public void stateChanged(ChangeEvent e) {
+       //Ponemos el valor del texto de la opacidad de pendiendo de la posición del Slider
+       if (e.getSource().equals(getOpacitySlider())) {
+           getOpacityText().setText(
+           		String.valueOf(getOpacitySlider().getValue()));
+       }        
+   }
+   
+	/**
+     * Controla que si el formato introducido en el textfield
+     * de opacidad es numerico se actualiza la posición del
+     * slider.
+     */
+    private void checkOpacityText() {
+        String op = getOpacityText().getText();
+        int value = 0;
+
+        try {
+            if (!op.equals("")) {
+                value = Integer.parseInt(op);
+            }
+
+            getOpacitySlider().setValue(value);
+        } catch (NumberFormatException exc) {
+            System.err.println("Formato no numerico");
+            getOpacityText().setText("100");
+            getOpacitySlider().setValue(100);
+        }
+    }
+    
+} //  @jve:decl-index=0:visual-constraint="36,15"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/RasterTransparencyPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelListener.java	(revision 10281)
@@ -0,0 +1,137 @@
+package org.cresques.ui.filter;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JRadioButton;
+
+import org.cresques.filter.enhancement.TransparencyRange;
+import org.cresques.ui.raster.AddRemoveButtonsPanel;
+import org.cresques.ui.raster.AndOrSelectorPanel;
+import org.cresques.ui.raster.RGBInputPanel;
+
+
+public class TransparencyByPixelListener implements ActionListener {
+
+	private TransparencyByPixelPanel 	panel = null;
+	private RGBInputPanel				rgbInputPanel = null;
+	private	JList						list = null;
+	private JButton						addButton = null;
+	private JButton						removeButton = null;
+	private JRadioButton				andRb = null;
+	private JRadioButton				orRb = null;
+	private ArrayList					entries = new ArrayList();
+	
+	/**
+	 * This is the default constructor
+	 */
+	public TransparencyByPixelListener(TransparencyByPixelPanel panel) {
+		this.panel = panel;
+		rgbInputPanel = ((RGBInputPanel)panel.getPRGBInput());
+		list = panel.getJList();
+		
+		addButton = ((AddRemoveButtonsPanel)panel.getPButtons()).getBAdd();
+		removeButton = ((AddRemoveButtonsPanel)panel.getPButtons()).getBRemove();
+		andRb = ((AndOrSelectorPanel)panel.getPOperation()).getRbAnd();
+		orRb = ((AndOrSelectorPanel)panel.getPOperation()).getRbOr();
+		
+		addButton.addActionListener(this);
+		removeButton.addActionListener(this);
+		andRb.addActionListener(this);
+		orRb.addActionListener(this);
+	}
+
+	//*******************************
+	//ActionListener
+	
+	public void actionPerformed(ActionEvent e) {
+		
+		//Añade elementos a la lista
+		if(e.getSource() == addButton){
+			if(rgbInputPanel.isValidValue()){
+				TransparencyRange entry = new TransparencyRange();
+				entry.setRed(rgbInputPanel.getRangeRed());
+				entry.setGreen(rgbInputPanel.getRangeGreen());
+				entry.setBlue(rgbInputPanel.getRangeBlue());
+								
+				String textR = rgbInputPanel.getTRed().getText();
+				if(textR.equals(""))
+					textR = "*";
+				String textG = rgbInputPanel.getTGreen().getText();
+				if(textG.equals(""))
+					textG = "*";
+				String textB = rgbInputPanel.getTBlue().getText();
+				if(textB.equals(""))
+					textB = "*";
+				if(andRb.isSelected()){	
+					entry.setStrEntry(textR+" & "+textG+" & "+textB);
+					entry.setAnd(true);
+				}
+				
+				if(orRb.isSelected()){
+					entry.setStrEntry(textR+" | "+textG+" | "+textB);
+					entry.setAnd(false);
+				}
+				panel.getListModel().addElement(entry.getStrEntry());
+				entries.add(entry);
+				
+				//Limpiamos los textField
+				rgbInputPanel.getTRed().setText("");
+				rgbInputPanel.getTGreen().setText("");
+				rgbInputPanel.getTBlue().setText("");
+			}
+		}
+		
+		//Elimina elementos de la lista
+		if(e.getSource() == removeButton){
+			if(list.getSelectedIndex() != -1){
+				String rule = (String)panel.getListModel().get(list.getSelectedIndex());
+				String[] s = rule.split(" & ");
+				if(s.length < 3){
+					s = rule.split(" \\| ");
+					andRb.setSelected(false);
+					orRb.setSelected(true);
+				}else{
+					andRb.setSelected(true);
+					orRb.setSelected(false);
+				}
+				
+				for(int i=0;i<s.length;i++){
+					if(s[i].equals("*"))
+						s[i] = "";
+				}
+				
+				if(s.length == 3){
+					rgbInputPanel.getTRed().setText(s[0].trim());	
+					rgbInputPanel.getTGreen().setText(s[1].trim());
+					rgbInputPanel.getTBlue().setText(s[2].trim());
+					
+					for(int i=0;i<entries.size();i++){
+						if( ((TransparencyRange)entries.get(i)).getStrEntry().equals(rule) )
+							entries.remove(i);
+					}
+					panel.getListModel().remove(list.getSelectedIndex());
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Obtiene el array de entradas de valores añadidos a la lista
+	 * @return ArrayList
+	 */
+	public ArrayList getEntries(){
+		return entries;
+	}
+	
+	/**
+	 * Asigna el array de entradas de valores añadidos a la lista
+	 * @param list ArrayList
+	 */
+	public void setEntries(ArrayList list){
+		entries = list;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/ConvolutionPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/ConvolutionPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/ConvolutionPanel.java	(revision 10281)
@@ -0,0 +1,313 @@
+/*
+ * Created on 31-jul-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.filter;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import javax.swing.JTextField;
+import javax.swing.JComboBox;
+
+public class ConvolutionPanel extends JPanel implements ActionListener {
+
+	private FilterRasterDialogPanel parent = null;
+	private JCheckBox jCheckBox = null;
+	private JPanel jPanel = null;
+	private JTextField jTextField = null;
+	private JTextField jTextField1 = null;
+	private JTextField jTextField2 = null;
+	private JTextField jTextField3 = null;
+	private JTextField jTextField4 = null;
+	private JTextField jTextField5 = null;
+	private JTextField jTextField6 = null;
+	private JTextField jTextField7 = null;
+	private JTextField jTextField8 = null;
+	private JPanel jPanel1 = null;
+	private JTextField jTextField9 = null;
+	private JLabel jLabel = null;
+	private JLabel jLabel1 = null;
+	private JComboBox jComboBox = null;
+	private JPanel jPanel2 = null;
+	private JLabel jLabel2 = null;
+	private JLabel jLabel3 = null;
+	private JCheckBox jCheckBox1 = null;
+	private JLabel jLabel4 = null;
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public ConvolutionPanel() {
+		super();
+		initialize();
+	}
+	public ConvolutionPanel(FilterRasterDialogPanel parent) {
+		super();
+		this.parent = parent;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        jLabel = new JLabel();
+        jLabel.setText("");
+        this.setSize(new java.awt.Dimension(445,239));
+        this.setPreferredSize(new java.awt.Dimension(445,239));
+        this.add(jLabel, null);
+        this.add(getJPanel2(), null);
+        this.add(getJPanel(), null);
+        this.add(getJPanel1(), null);
+			
+	}
+
+	public void actionPerformed(ActionEvent e) {
+	}
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getJCheckBox() {
+		if (jCheckBox == null) {
+			jCheckBox = new JCheckBox();
+			jCheckBox.addActionListener(this);
+		}
+		jCheckBox.addActionListener(this);
+		return jCheckBox;
+	}
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel() {
+		if (jPanel == null) {
+			jLabel3 = new JLabel();
+			jLabel3.setText("Definir coeficientes:");
+			jLabel3.setPreferredSize(new java.awt.Dimension(160,16));
+			jPanel = new JPanel();
+			jPanel.setPreferredSize(new java.awt.Dimension(200,150));
+			jPanel.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.black,1));
+			jPanel.add(jLabel3, null);
+			jPanel.add(getJTextField(), null);
+			jPanel.add(getJTextField1(), null);
+			jPanel.add(getJTextField2(), null);
+			jPanel.add(getJTextField3(), null);
+			jPanel.add(getJTextField4(), null);
+			jPanel.add(getJTextField5(), null);
+			jPanel.add(getJTextField6(), null);
+			jPanel.add(getJTextField7(), null);
+			jPanel.add(getJTextField8(), null);
+		}
+		return jPanel;
+	}
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField() {
+		if (jTextField == null) {
+			jTextField = new JTextField();
+			jTextField.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField;
+	}
+	/**
+	 * This method initializes jTextField1	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField1() {
+		if (jTextField1 == null) {
+			jTextField1 = new JTextField();
+			jTextField1.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField1;
+	}
+	/**
+	 * This method initializes jTextField2	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField2() {
+		if (jTextField2 == null) {
+			jTextField2 = new JTextField();
+			jTextField2.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField2;
+	}
+	/**
+	 * This method initializes jTextField3	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField3() {
+		if (jTextField3 == null) {
+			jTextField3 = new JTextField();
+			jTextField3.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField3;
+	}
+	/**
+	 * This method initializes jTextField4	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField4() {
+		if (jTextField4 == null) {
+			jTextField4 = new JTextField();
+			jTextField4.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField4;
+	}
+	/**
+	 * This method initializes jTextField5	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField5() {
+		if (jTextField5 == null) {
+			jTextField5 = new JTextField();
+			jTextField5.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField5;
+	}
+	/**
+	 * This method initializes jTextField6	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField6() {
+		if (jTextField6 == null) {
+			jTextField6 = new JTextField();
+			jTextField6.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField6;
+	}
+	/**
+	 * This method initializes jTextField7	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField7() {
+		if (jTextField7 == null) {
+			jTextField7 = new JTextField();
+			jTextField7.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField7;
+	}
+	/**
+	 * This method initializes jTextField8	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField8() {
+		if (jTextField8 == null) {
+			jTextField8 = new JTextField();
+			jTextField8.setPreferredSize(new java.awt.Dimension(50,20));
+		}
+		return jTextField8;
+	}
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jLabel4 = new JLabel();
+			jLabel4.setText("Comparativo:");
+			jLabel1 = new JLabel();
+			jLabel1.setText("Umbral:");
+			jPanel1 = new JPanel();
+			jPanel1.setPreferredSize(new java.awt.Dimension(130,60));
+			jPanel1.add(jLabel1, null);
+			jPanel1.add(getJTextField9(), null);
+			jPanel1.add(jLabel4, null);
+			jPanel1.add(getJCheckBox1(), null);
+		}
+		return jPanel1;
+	}
+	/**
+	 * This method initializes jTextField9	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField9() {
+		if (jTextField9 == null) {
+			jTextField9 = new JTextField();
+			jTextField9.setPreferredSize(new java.awt.Dimension(40,20));
+			jTextField9.setText("0");
+		}
+		return jTextField9;
+	}
+	/**
+	 * This method initializes jComboBox	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getJComboBox() {
+		if (jComboBox == null) {
+			String [] lista = {"Personalizado","Sobel","Roberts","Prewitt","Frei-Chen","Median 3x3"};
+			jComboBox = new JComboBox(lista);
+			jComboBox.setPreferredSize(new java.awt.Dimension(150,25));
+			jComboBox.addActionListener(this);
+		}
+		return jComboBox;
+	}
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jLabel2 = new JLabel();
+			jLabel2.setText("Convolución:");
+			jPanel2 = new JPanel();
+			jPanel2.setPreferredSize(new java.awt.Dimension(200,150));
+			jPanel2.add(getJCheckBox(), null);
+			jPanel2.add(jLabel2, null);
+			jPanel2.add(getJComboBox(), null);
+		}
+		return jPanel2;
+	}
+	/**
+	 * This method initializes jCheckBox1	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getJCheckBox1() {
+		if (jCheckBox1 == null) {
+			jCheckBox1 = new JCheckBox();
+		}
+		return jCheckBox1;
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/ConvolutionPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/EnhancedPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/EnhancedPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/EnhancedPanel.java	(revision 10281)
@@ -0,0 +1,560 @@
+/*
+ * Created on 31-ago-2006
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.filter;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Image;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+
+
+
+/**
+ * Panel que contiene los elementos para el dialogo del filtro de realce
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class EnhancedPanel extends JPanel implements ComponentListener{
+    final private static long serialVersionUID = -3370601314380922368L;
+    /**
+     * Nombre del panel
+     */
+    private String nom = "Realce";
+    FilterRasterDialogPanel parent = null;
+    private JPanel jPanel = null;
+    private JPanel jPanel1 = null;
+    private JPanel jPanel2 = null;
+    private JPanel jPanel3 = null;
+    private JRadioButton jRadioButton = null;
+    private JRadioButton jRadioButton1 = null;
+    private JCheckBox jCheckBox = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JLabel lLineal = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JLabel lWithoutEnhanced = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JPanel pGeneralEnhanced = null;
+    private ButtonGroup grupo = new ButtonGroup();
+    private Image iconoLineal = null;
+    private Image iconoSinRealce = null;
+    private JPanel jPanel5 = null;
+    private JSlider jSlider = null;
+    private JTextField jTextField = null;
+    private JPanel jPanel6 = null;
+    private JCheckBox jCheckBox1 = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JLabel lCut = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JPanel pTail = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JLabel lQueue = null;
+    
+    /**
+     * Variable accesible para su traducción
+     */
+    public JPanel pSlider = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JPanel pRemove = null;
+    
+    /**
+     * Variable accesible para la traducción
+     */
+    public JLabel lRemove = null;
+
+    /**
+     * Constructor.
+     * @param parent
+     */
+    public EnhancedPanel(FilterRasterDialogPanel parent) {
+        this.parent = parent;
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.setSize(445, 239);
+        this.setPreferredSize(new java.awt.Dimension(445, 239));
+        this.add(getJPanel(), java.awt.BorderLayout.CENTER);
+
+        initControls();
+        this.addComponentListener(this);
+    }
+
+    /**
+     * Obtiene el nombre del panel
+     * @return Cadena con el nombre del panel
+     */
+    public String getName(){
+    	return this.nom;
+    }
+    
+    /**
+     * Inicializa controles a sus valores por defecto
+     */
+    public void initControls() {
+        jRadioButton1.setSelected(true);
+        this.getTailText().setText("0.0");
+        this.getTailSlider().setValue(0);
+        this.setActiveTailControl(false);
+        this.getTailCheck().setEnabled(false);
+        this.getRemoveCheck().setEnabled(false);
+    }
+
+    /**
+     * This method initializes jPanel
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel() {
+        if (jPanel == null) {
+            GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+            gridBagConstraints1.insets = new java.awt.Insets(40,3,69,8);
+            gridBagConstraints1.gridy = 0;
+            gridBagConstraints1.gridx = 1;
+            GridBagConstraints gridBagConstraints = new GridBagConstraints();
+            gridBagConstraints.insets = new java.awt.Insets(5,7,34,2);
+            gridBagConstraints.gridy = 0;
+            gridBagConstraints.gridx = 0;
+            GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+            jPanel = new JPanel();
+            jPanel.setLayout(new GridBagLayout());
+            gridBagConstraints4.gridx = 0;
+            gridBagConstraints4.gridy = 0;
+            jPanel.setPreferredSize(new java.awt.Dimension(445, 239));
+            jPanel.add(getJPanel4(), gridBagConstraints);
+            jPanel.add(getJPanel8(), gridBagConstraints1);
+        }
+
+        return jPanel;
+    }
+
+    /**
+     * This method initializes jPanel1
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel1() {
+        if (jPanel1 == null) {
+            lLineal = new JLabel("Lineal directo",
+                                new ImageIcon("images/lineal.gif"),
+                                JLabel.CENTER);
+            jPanel1 = new JPanel();
+            jPanel1.setLayout(new BorderLayout());
+            jPanel1.add(getLinealDirectoRadioButton(),
+                        java.awt.BorderLayout.WEST);
+            jPanel1.add(lLineal, java.awt.BorderLayout.EAST);
+        }
+
+        return jPanel1;
+    }
+
+    /**
+     * This method initializes jPanel2
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel2() {
+        if (jPanel2 == null) {
+            jPanel2 = new JPanel();
+            jPanel2.setLayout(new BorderLayout());
+            jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,
+                                                                         1));
+            jPanel2.setPreferredSize(new java.awt.Dimension(220, 95));
+            jPanel2.add(getJPanel5(), java.awt.BorderLayout.CENTER);
+            jPanel2.add(getJPanel6(), java.awt.BorderLayout.SOUTH);
+            jPanel2.add(getJPanel7(), java.awt.BorderLayout.NORTH);
+        }
+
+        return jPanel2;
+    }
+
+    /**
+     * This method initializes jPanel3
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel3() {
+        if (jPanel3 == null) {
+            lWithoutEnhanced = new JLabel("Sin Realce",
+                                 new ImageIcon("images/sinrealce.gif"),
+                                 JLabel.CENTER);
+            jPanel3 = new JPanel();
+            jPanel3.setLayout(new BorderLayout());
+            jPanel3.add(getSinRealceRadioButton(), java.awt.BorderLayout.WEST);
+            jPanel3.add(lWithoutEnhanced, java.awt.BorderLayout.EAST);
+        }
+
+        return jPanel3;
+    }
+
+    /**
+     * This method initializes jRadioButton
+     *
+     * @return javax.swing.JRadioButton
+     */
+    public JRadioButton getLinealDirectoRadioButton() {
+        if (jRadioButton == null) {
+            jRadioButton = new JRadioButton();
+            grupo.add(jRadioButton);
+        }
+
+        return jRadioButton;
+    }
+
+    /**
+     * This method initializes jRadioButton1
+     *
+     * @return javax.swing.JRadioButton
+     */
+    public JRadioButton getSinRealceRadioButton() {
+        if (jRadioButton1 == null) {
+            jRadioButton1 = new JRadioButton();
+            jRadioButton1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
+            grupo.add(jRadioButton1);
+        }
+
+        return jRadioButton1;
+    }
+
+    /**
+     * This method initializes jCheckBox
+     *
+     * @return javax.swing.JCheckBox
+     */
+    public JCheckBox getTailCheck() {
+        if (jCheckBox == null) {
+            jCheckBox = new JCheckBox();
+        }
+
+        return jCheckBox;
+    }
+
+    /**
+     * This method initializes jPanel4
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel4() {
+        if (pGeneralEnhanced == null) {
+            GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
+            GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
+            pGeneralEnhanced = new JPanel();
+            pGeneralEnhanced.setLayout(new GridBagLayout());
+            gridBagConstraints9.gridx = 0;
+            gridBagConstraints9.gridy = 0;
+            gridBagConstraints9.insets = new java.awt.Insets(5, 0, 5, 2);
+            gridBagConstraints9.anchor = java.awt.GridBagConstraints.WEST;
+            gridBagConstraints10.gridx = 0;
+            gridBagConstraints10.gridy = 1;
+            gridBagConstraints10.insets = new java.awt.Insets(5, 0, 5, 5);
+            pGeneralEnhanced.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0,
+                                                                          0, 0));
+            pGeneralEnhanced.setPreferredSize(new java.awt.Dimension(175, 200));
+            pGeneralEnhanced.add(getJPanel3(), gridBagConstraints9);
+            pGeneralEnhanced.add(getJPanel1(), gridBagConstraints10);
+        }
+
+        return pGeneralEnhanced;
+    }
+
+    /**
+     * This method initializes jPanel5
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel5() {
+        if (jPanel5 == null) {
+            jPanel5 = new JPanel();
+            jPanel5.add(getTailSlider(), null);
+        }
+
+        return jPanel5;
+    }
+
+    /**
+     * This method initializes jSlider
+     *
+     * @return javax.swing.JSlider
+     */
+    public JSlider getTailSlider() {
+        if (jSlider == null) {
+            jSlider = new JSlider();
+            jSlider.setPreferredSize(new java.awt.Dimension(240, 16));
+        }
+
+        return jSlider;
+    }
+
+    /**
+     * This method initializes jTextField
+     *
+     * @return javax.swing.JTextField
+     */
+    public JTextField getTailText() {
+        if (jTextField == null) {
+            jTextField = new JTextField();
+            jTextField.setPreferredSize(new java.awt.Dimension(40, 19));
+            jTextField.setText("0.0");
+        }
+
+        return jTextField;
+    }
+
+    /**
+     * Activa/Desactiva los controles de Recorte de colas
+     * @param active
+     */
+    public void setActiveTailControl(boolean active) {
+        this.getTailSlider().setEnabled(active);
+        this.getTailText().setEnabled(active);
+        this.lQueue.setEnabled(active);
+        this.lCut.setEnabled(active);
+    }
+
+    /**
+     *
+     * @param active
+     */
+    public void setActiveRemoveCheck(boolean active) {
+        this.getRemoveCheck().setEnabled(active);
+        this.lRemove.setEnabled(active);
+    }
+
+    /**
+     * Asigna el procentaje de recorte de colas aplicado
+     * @param tail
+     */
+    public void setPercentTail(int tail) {
+        jTextField.setText(String.valueOf(tail));
+        jSlider.setValue(tail);
+    }
+
+    /**
+     * Asigna el filtro seleccionado cuando se abre el dialogo
+     * @param filter
+     */
+    public void setSelectedFilter(int filter) {
+        switch (filter) {
+        case 0:
+            jRadioButton1.setSelected(true); //Sin realce
+            jCheckBox.setEnabled(false);
+            setActiveTailControl(false);
+            this.setActiveRemoveCheck(false);
+
+            break;
+
+        case 1:
+            this.getRemoveCheck().setSelected(true);
+
+        case 2:
+            jRadioButton.setSelected(true); //Realce lineal
+            this.getTailCheck().setEnabled(true);
+            this.setActiveRemoveCheck(true);
+
+            if (!this.getTailText().getText().equals("") &&
+                    !this.getTailText().getText().equals("0.0")) {
+                this.getTailCheck().setSelected(true);
+                this.setActiveTailControl(true);
+            }
+
+            break;
+        }
+    }
+
+    /**
+     * This method initializes jPanel6
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel6() {
+        if (jPanel6 == null) {
+            FlowLayout flowLayout3 = new FlowLayout();
+            lCut = new JLabel();
+            jPanel6 = new JPanel();
+            jPanel6.setLayout(flowLayout3);
+            lCut.setText("% recorte");
+            flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
+            jPanel6.add(getTailText(), null);
+            jPanel6.add(lCut, null);
+        }
+
+        return jPanel6;
+    }
+
+    /**
+     * This method initializes jCheckBox1
+     *
+     * @return javax.swing.JCheckBox
+     */
+    public JCheckBox getRemoveCheck() {
+        if (jCheckBox1 == null) {
+            jCheckBox1 = new JCheckBox();
+        }
+
+        return jCheckBox1;
+    }
+
+    /**
+     * This method initializes jPanel7
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel7() {
+        if (pTail == null) {
+        	lQueue = new JLabel();
+
+            FlowLayout flowLayout1 = new FlowLayout();
+            pTail = new JPanel();
+            pTail.setLayout(flowLayout1);
+            lQueue.setText("Recorte de colas");
+            flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+            pTail.add(getTailCheck(), null);
+            pTail.add(lQueue, null);
+        }
+
+        return pTail;
+    }
+
+    /**
+     * This method initializes jPanel8
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel8() {
+        if (pSlider == null) {
+        	GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+        	gridBagConstraints3.insets = new java.awt.Insets(0,0,2,0);
+        	gridBagConstraints3.gridy = 0;
+        	gridBagConstraints3.ipadx = 101;
+        	gridBagConstraints3.gridx = 0;
+        	GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+        	gridBagConstraints2.insets = new java.awt.Insets(2,0,0,0);
+        	gridBagConstraints2.gridy = 1;
+        	gridBagConstraints2.ipadx = 30;
+        	gridBagConstraints2.gridx = 0;
+        	pSlider = new JPanel();
+        	pSlider.setLayout(new GridBagLayout());
+        	pSlider.setPreferredSize(new java.awt.Dimension(250, 130));
+        	pSlider.add(getJPanel2(), gridBagConstraints2);
+        	pSlider.add(getJPanel9(), gridBagConstraints3);
+        }
+
+        return pSlider;
+    }
+
+    /**
+     * This method initializes jPanel9
+     *
+     * @return javax.swing.JPanel
+     */
+    private JPanel getJPanel9() {
+        if (pRemove == null) {
+            lRemove = new JLabel();
+
+            FlowLayout flowLayout11 = new FlowLayout();
+            pRemove = new JPanel();
+            pRemove.setLayout(flowLayout11);
+            lRemove.setText("Eliminar Extremos");
+            flowLayout11.setAlignment(java.awt.FlowLayout.LEFT);
+            pRemove.add(getRemoveCheck(), null);
+            pRemove.add(lRemove, null);
+        }
+
+        return pRemove;
+    }
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	/**
+	 * Redimesiona el panel cuando hay un cambio en el tamaño de su
+	 * contenedor.
+	 */
+	public void componentResized(ComponentEvent e) {
+		if(e.getSource() == this){
+			int difWidth = this.getWidth() - 445;
+			int difHeight = this.getHeight() - 239;
+			this.pGeneralEnhanced.setLocation(this.pGeneralEnhanced.getX() - difWidth/2, this.pGeneralEnhanced.getY() - difHeight/2);
+			this.pGeneralEnhanced.setSize(this.pGeneralEnhanced.getWidth() + difWidth/2, this.pGeneralEnhanced.getHeight() + difHeight/2);
+			this.jPanel3.setLocation(this.jPanel3.getX() + difWidth/4, this.jPanel3.getY() + difHeight/2);
+			this.jPanel1.setLocation(this.jPanel1.getX() + difWidth/4, this.jPanel1.getY() + difHeight/2);
+			this.pSlider.setLocation(this.pSlider.getX(), this.pSlider.getY()-difHeight/2);
+			this.pSlider.setSize(this.pSlider.getWidth() + difWidth/2, this.pSlider.getHeight() + difHeight );
+			this.jPanel2.setSize(this.jPanel2.getWidth() + difWidth/2, this.jPanel2.getHeight() + difHeight );
+			this.pTail.setLocation(this.pTail.getX(), this.pTail.getY() + difHeight/2);
+			this.jPanel5.setLocation(this.jPanel5.getX(), this.jPanel5.getY() + difHeight/2);
+			this.jPanel6.setLocation(this.jPanel6.getX(), this.jPanel6.getY() + difHeight/2);
+			this.jPanel5.setSize(this.jPanel5.getWidth() + difWidth/2, this.jPanel5.getHeight());
+			this.jSlider.setSize(this.jSlider.getWidth() + difWidth/2, this.jSlider.getHeight());
+			//System.out.println("--->"+this.pSlider.getX()+"---"+pSlider.getY());
+		}
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+} //  @jve:decl-index=0:visual-constraint="36,15"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/EnhancedPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FilterRasterDialogPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FilterRasterDialogPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FilterRasterDialogPanel.java	(revision 10281)
@@ -0,0 +1,273 @@
+/*
+ * Created on 09-ago-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui.filter;
+
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.ArrayList;
+import java.util.TreeMap;
+
+import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.cresques.filter.IRasterOperationsRegistrablePanels;
+import org.cresques.filter.enhancement.TransparencyRange;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.ui.DefaultTabPanel;
+import org.cresques.ui.BrightnessContrast.EnhancedBrightnessContrastPanel;
+import org.cresques.ui.raster.BandSetupPanel;
+import org.cresques.ui.raster.InfoPanel;
+
+
+/**
+ * Panel que contiene todos los paneles de los tabs del cuadro de dialogo
+ * de bandas y transparencias
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class FilterRasterDialogPanel extends DefaultTabPanel
+    implements MouseListener, FocusListener, KeyListener, ChangeListener {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    /**
+     * Tamaño en X del panel interior.El tab de dentro es proporcional
+     */
+    protected int sizePanelX = 460;
+    
+    /**
+     * Tamaño en Y del panel interior. El tab de dentro es proporcional
+     */
+    protected int sizePanelY = 275;
+    
+    /**
+     * Propiedades guardadas en una matriz Nx2 con la forma propiedad/valor.
+     */
+    public Object[][] props = null;
+    
+    /**
+     * Número de bandas.
+     */
+    public int nbands = 0;
+    
+    /**
+     * Lista de georrasterfiles correspondiente a los ficheros de bandas
+     */
+    public GeoRasterFile[] grf = null;
+    private TreeMap shadePanel = new TreeMap();
+    
+    //Paneles que se registran dentro de esta misma clase
+    private RasterTransparencyPanel 			pTrans = null;
+    private BandSetupPanel						pSetup = null;
+    private InfoPanel 							pInfo = null;
+    private EnhancedBrightnessContrastPanel 	pEnhancedBrightnessContrast = null;
+    
+	    
+    /**
+     * Constructor. Inicializa los paneles y propiedades
+     * @param props        Propiedades
+     */
+    public FilterRasterDialogPanel(Object[][] props) {
+        super();
+        init(props);
+    }
+
+    /**
+     * Constructor
+     */
+    public FilterRasterDialogPanel() {
+        super();
+    }
+
+    /**
+     * Inicializa las propiedades
+     * @param props        Propiedades. Guardadas en una matriz Nx2 con la forma proiedad/valor
+     */
+    public void init(Object[][] props) {
+        contentPane.setPreferredSize(new java.awt.Dimension(sizePanelX + this.difWidth,
+                                                            sizePanelY + this.difHeight));
+        this.tabbedPane.setPreferredSize(new java.awt.Dimension(sizePanelX + this.difWidth,
+                                                                sizePanelY + difHeight - 5));
+        this.props = props;
+        initPanels();
+        
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    protected void initPanels() {
+        this.setBounds(0, 0, 355, 230);
+        pTrans = new RasterTransparencyPanel(this);
+        pSetup = new BandSetupPanel();
+        pInfo = new InfoPanel(this);
+        pEnhancedBrightnessContrast = new EnhancedBrightnessContrastPanel(this);
+        
+        this.addTab(pInfo.getName(), pInfo);
+        this.addTab(pSetup.getName(), pSetup);
+        this.addTab(pTrans.getName(), pTrans);
+        this.addTab(pEnhancedBrightnessContrast.getName(), pEnhancedBrightnessContrast);
+   
+        //pTrans.getOpacitySlider().addChangeListener(this);
+        //pTrans.addFocusListener(this);
+        this.getTab().addFocusListener(this);
+    }
+
+    /**
+     * Asigna la visibilidad de un tab a verdadero o falso. La
+     * selección del tab se hace por el identificador.
+     * @param tab	Identificador del tab. Variable nom del mismo
+     * @param active	True o false para visible o invisible.
+     */
+    public void setTabVisible(String tab, boolean active){
+    	if(active == false){
+	    	for(int i=0; i<this.getTab().getTabCount(); i++){
+	    		if(tab.equals( ((JPanel)this.getTab().getComponentAt(i)).getName() )){
+	    			shadePanel.put(tab, this.getTab().getComponentAt(i));
+	    			this.getTab().removeTabAt(i);
+	    		}
+	    	}
+    	}else
+    		this.addTab(tab, ((JPanel)shadePanel.get(tab)) );
+    }
+    
+    /**
+     * Selecciona el panel indicado por index
+     * @param index        panel seleccionado
+     */
+    public void setSelectedIndex(int index) {
+        tabbedPane.setSelectedIndex(index);
+    }
+
+    /**
+     * Obtiene un panel a través del nombre de su clase
+     * @param name Nombre de la clase del panel
+     */
+    public JPanel getPanelByClassName(String name){
+    	for(int i=0;i<super.getTab().getTabCount() ;i++){
+    		JPanel p = (JPanel)super.getTab().getComponentAt(i);
+    		if(p.getClass().getName().endsWith(name))
+    			return p;
+    	}
+    	return null;
+    }
+
+    /**
+     * Asigna valores para los rangos.
+     * @param ranges
+     */
+    public void setRanges(ArrayList ranges) {      
+      if(ranges != null){    	  
+    	  TransparencyByPixelPanel panel = (TransparencyByPixelPanel)pTrans.getPTranspByPixel();
+    	  pTrans.getTransparencyCheck().setSelected(true);
+    	  panel.setControlEnabled(true);
+    	  panel.setEntries(ranges);
+	      for(int i=0;i<ranges.size();i++)
+	    	  panel.getListModel().addElement( ((TransparencyRange)ranges.get(i)).getStrEntry() );
+      }
+    }
+
+    /**
+     * Añade las bandas de los georrasterfile a los paneles 
+     * que lo necesitan
+     * @param files
+     */
+    public void addFiles(GeoRasterFile[] files){
+    	for(int i=0;i<this.getTab().getTabCount();i++){
+    		if(this.getTab().getComponentAt(i) instanceof IRasterOperationsRegistrablePanels)
+    		 	((IRasterOperationsRegistrablePanels)getTab().getComponentAt(i)).addFiles(files);
+    	}
+    		
+        if(pSetup != null)
+        	pSetup.addFiles(files);
+        if(pInfo != null)
+            pInfo.addFiles(files);
+        
+        	
+ 
+    }
+    
+    public void addInfoFiles(GeoRasterFile[] files){
+    	if(pInfo != null){
+    		pInfo.setBands(pSetup.getAssignedBand(GeoRasterFile.RED_BAND), pSetup.getAssignedBand(GeoRasterFile.GREEN_BAND), pSetup.getAssignedBand(GeoRasterFile.BLUE_BAND));
+    		pInfo.addFiles(files);
+    	}
+    		
+    	 
+    }
+    
+    /**
+     * Elimina las bandas de los georrasterfile a los paneles
+     * @param file Banda a eliminar
+     */
+    public void removeFile(String file) {
+    	for(int i=0;i<this.getTab().getTabCount();i++){
+    		if(this.getTab().getComponentAt(i) instanceof IRasterOperationsRegistrablePanels)
+    		 	((IRasterOperationsRegistrablePanels)(getTab().getComponentAt(i))).removeFile(file);
+    	}
+        if(pSetup != null)
+        	pSetup.removeFile(file);
+    }
+    
+    public void focusGained(FocusEvent e) {
+        //pTrans.updateTextBox();
+    }
+
+    public void focusLost(FocusEvent e) {
+        //checkOpacityText();
+    }
+
+    public void mouseExited(MouseEvent e) {
+    }
+
+    public void mouseReleased(MouseEvent e) {
+    }
+
+    public void mouseEntered(MouseEvent e) {
+    }
+
+    public void mouseClicked(MouseEvent e) {
+    }
+
+    public void mousePressed(MouseEvent e) {
+    }
+
+    public void keyTyped(KeyEvent e) {
+    }
+
+    public void keyPressed(KeyEvent e) {
+    }
+
+    public void keyReleased(KeyEvent e) {
+    }
+
+    public void stateChanged(ChangeEvent e) {
+    	super.stateChanged(e);        
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/FilterRasterDialogPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelPanel.java	(revision 10281)
@@ -0,0 +1,253 @@
+package org.cresques.ui.filter;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.ArrayList;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+
+import org.cresques.ui.raster.AddRemoveButtonsPanel;
+import org.cresques.ui.raster.AndOrSelectorPanel;
+import org.cresques.ui.raster.RGBInputPanel;
+
+public class TransparencyByPixelPanel extends JPanel {
+
+	private JPanel 							pBorder = null;
+	private RGBInputPanel 					pWest = null;
+	private JPanel 							pEast = null;
+	private JPanel 							pCenter = null;
+	private AddRemoveButtonsPanel 			pButtons = null;
+	private AndOrSelectorPanel 				pOperation = null;
+	private JList 							jList = null;
+	private TransparencyByPixelListener 	listener = null;	
+	private DefaultListModel				listModel = null;
+	private boolean							controlEnabled = false;					
+		
+	/**
+	 * This is the default constructor
+	 */
+	public TransparencyByPixelPanel() {
+		super();
+		initialize();
+		listener = new TransparencyByPixelListener(this);
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout1 = new FlowLayout();
+		flowLayout1.setHgap(0);
+		flowLayout1.setVgap(5);
+		this.setLayout(flowLayout1);
+		this.setSize(410, 120);
+		this.setPreferredSize(new java.awt.Dimension(410,120));
+		this.add(getPBorder(), null);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPBorder() {
+		if (pBorder == null) {
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.insets = new java.awt.Insets(0,15,0,0);
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridheight = 1;
+			gridBagConstraints2.insets = new java.awt.Insets(0,0,0,15);
+			gridBagConstraints2.gridy = 0;
+			pBorder = new JPanel();
+			pBorder.setLayout(new GridBagLayout());
+			pBorder.setPreferredSize(new java.awt.Dimension(410,120));
+			pBorder.add(getPRGBInput(), gridBagConstraints2);
+			pBorder.add(getPCenter(), new GridBagConstraints());
+			pBorder.add(getPList(), gridBagConstraints4);
+		}
+		return pBorder;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public RGBInputPanel getPRGBInput() {
+		if (pWest == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(1);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			pWest = new RGBInputPanel();
+			pWest.setLayout(flowLayout);
+			pWest.setPreferredSize(new java.awt.Dimension(120,90));
+		}
+		return pWest;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPList() {
+		if (pEast == null) {
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
+			gridBagConstraints3.gridx = 0;
+			gridBagConstraints3.gridy = 0;
+			gridBagConstraints3.weightx = 1.0;
+			gridBagConstraints3.weighty = 1.0;
+			gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
+			pEast = new JPanel();
+			pEast.setLayout(new GridBagLayout());
+			pEast.setPreferredSize(new java.awt.Dimension(170,110));
+			pEast.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
+			pEast.add(getJList(), gridBagConstraints3);
+		}
+		return pEast;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPCenter() {
+		if (pCenter == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.gridx = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.gridx = 0;
+			pCenter = new JPanel();
+			pCenter.setLayout(new GridBagLayout());
+			pCenter.setPreferredSize(new java.awt.Dimension(65,118));
+			pCenter.add(getPButtons(), gridBagConstraints);
+			pCenter.add(getPOperation(), gridBagConstraints1);
+		}
+		return pCenter;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPButtons() {
+		if (pButtons == null) {
+			pButtons = new AddRemoveButtonsPanel();
+			pButtons.setPreferredSize(new java.awt.Dimension(60,50));
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPOperation() {
+		if (pOperation == null) {
+			pOperation = new AndOrSelectorPanel();
+			pOperation.setPreferredSize(new java.awt.Dimension(60,60));
+		}
+		return pOperation;
+	}
+
+	/**
+	 * This method initializes jList	
+	 * 	
+	 * @return javax.swing.JList	
+	 */
+	public JList getJList() {
+		if (jList == null) {
+			listModel = new DefaultListModel();
+			jList = new JList(listModel);
+			//jList.setPreferredSize(new java.awt.Dimension(120,110));
+			jList.setSize(new java.awt.Dimension(135,125));
+			jList.setFont(new java.awt.Font("Monospaced", java.awt.Font.PLAIN, 10));
+		}
+		return jList;
+	}
+	
+	/**
+	 * Obtiene el ListModel de la lista
+	 * @return DefaultListModel
+	 */
+	public DefaultListModel getListModel(){
+		return listModel;
+	}
+	
+	/**
+	 * Activa o desactiva el control
+	 * @param enable True activa el control y false lo desactiva
+	 */
+	public void setControlEnabled(boolean enabled){
+		jList.setEnabled(enabled);
+		if(enabled)
+			jList.setBackground(Color.WHITE);
+		else
+			jList.setBackground(this.getBackground());
+		pWest.setControlEnabled(enabled);
+		pButtons.setControlEnabled(enabled);
+		pOperation.setControlEnabled(enabled);
+		controlEnabled = enabled;
+	}
+	
+	/**
+	 * Obtiene true si el control está activo y false si no lo está
+	 * @return
+	 */
+	public boolean isControlEnabled(){
+		return controlEnabled;
+	}
+	
+	/**
+	 * Asigna el número de bandas activas 
+	 * @param n Número de bandas
+	 */
+	public void setActiveBands(int n){
+		((RGBInputPanel)getPRGBInput()).setActiveBands(n);
+	}
+	
+	/**
+	 * Obtiene el array de entradas de valores añadidos a la lista
+	 * @return ArrayList
+	 */
+	public ArrayList getEntries(){
+		return listener.getEntries();
+	}
+	
+	/**
+	 * Asigna el array de entradas de valores añadidos a la lista
+	 * @return ArrayList
+	 */
+	public void setEntries(ArrayList list){
+		this.listener.setEntries(list);
+	}
+
+	/**
+	 * Obtiene la clase manejadora de eventos asociada a esta
+	 * @return TransparencyByPixelListener
+	 */
+	public TransparencyByPixelListener getListener() {
+		return listener;
+	}
+
+	public void setEnabled(boolean enabled){
+		super.setEnabled(enabled);
+		setControlEnabled(enabled);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/filter/TransparencyByPixelPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/CheckSliderText.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/CheckSliderText.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/CheckSliderText.java	(revision 10281)
@@ -0,0 +1,110 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.ui.BrightnessContrast;
+
+import java.awt.GridBagConstraints;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+
+/**
+ * Clase que contiene slider, campo de texto, etiqueta para el nombre y un 
+ * checkBox para habilitar o deshabilitar el slider y el campo de texto.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+public class CheckSliderText extends SliderTextPanel implements ActionListener{
+	
+	public JLabel lName = null;
+	public JCheckBox cSliderText = null;
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	
+	public CheckSliderText(){
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.insets = new Insets(0,0,0,0);
+		super.getJPanel().add(getJCheckBox());
+		super.getJPanel().add(getLName(), gridBagConstraints1);
+		this.getJCheckBox().addActionListener(this);
+		if(cSliderText.isSelected() == false){
+			super.setControlEnabled(false);
+		}
+	}
+	/**
+	 * Inicializa cSliderText
+	 * @return
+	 */
+	public JCheckBox getJCheckBox(){
+		if(cSliderText == null){
+			cSliderText = new JCheckBox();
+		}
+		return cSliderText;
+	}
+	
+	public JLabel getLName(){
+		if(lName == null){
+			lName = new JLabel();
+			lName.setText("Nombre");
+			lName.setPreferredSize(new java.awt.Dimension(150,15));
+			lName.setSize(150, 15);
+		}
+		return lName;
+	}
+	
+	/**
+	 * Pone nombre al panel en la etiqueta que está encima del slider
+	 */
+	public void setName(String name){
+		lName.setText(name);
+	}
+	
+	/**
+	 * Activa o desactiva el slider y el campo de texto 
+	 */
+	public void setControlEnabled(boolean active){
+		this.cSliderText.setEnabled(active);
+		this.lName.setEnabled(active);
+		this.getJTextField().setEnabled(active);
+		super.setControlEnabled(active);
+		if(cSliderText.isSelected() == false){
+			super.setControlEnabled(false);
+		}
+		
+	}
+	
+	
+	public void actionPerformed(ActionEvent e) {
+		super.actionPerformed(e);
+		if (e.getSource() == getJCheckBox()){
+			super.setControlEnabled(getJCheckBox().isSelected());
+		}
+	}
+
+	public void setSelected(boolean value){
+		this.getJCheckBox().setSelected(value);
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/CheckSliderText.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/LabelSliderText.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/LabelSliderText.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/LabelSliderText.java	(revision 10281)
@@ -0,0 +1,71 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.ui.BrightnessContrast;
+
+import java.awt.GridBagConstraints;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JLabel;
+
+/**
+ * Clase que contiene un slider, un campo de texto y una etiqueta para el nombre.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+public class LabelSliderText extends SliderTextPanel implements ActionListener {
+	
+	public JLabel lName = null;
+	/**
+	 * Constructor
+	 *
+	 */
+	
+	public LabelSliderText(){
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.insets = new Insets(0,0,0,0);
+		super.getJPanel().add(getLName(), gridBagConstraints1);
+	}
+	
+
+	public JLabel getLName(){
+		if(lName == null){
+			lName = new JLabel();
+			lName.setText("Nombre");
+			lName.setPreferredSize(new java.awt.Dimension(163,15));
+			lName.setSize(163, 15);
+		}
+		return lName;
+	}
+	
+	public void setName(String name){
+		lName.setText(name);
+	}
+	
+	public void setControlEnabled(boolean active){
+		this.lName.setEnabled(active);
+		super.setControlEnabled(active);
+	}
+	
+	public void actionPerformed(ActionEvent e) {
+		super.actionPerformed(e);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/LabelSliderText.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/SliderTextPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/SliderTextPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/SliderTextPanel.java	(revision 10281)
@@ -0,0 +1,304 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.ui.BrightnessContrast;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+
+/**
+ * Clase base para un componente con un slider y un campo de texto.
+ * Contiene una etiqueta entre el slider y el campo de texto en la que se
+ * pueden poner las unidades en las que se cuantifica el valor.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+public class SliderTextPanel extends JPanel implements ChangeListener, FocusListener, ActionListener{
+
+	private JPanel pName = null;
+	private JPanel pSliderText = null;
+	private JSlider jSlider = null;
+	private JTextField jTextField = null;
+	private JLabel lPercent = null;
+	private boolean decimal = false;
+	/**
+	 * This is the default constructor
+	 */
+	public SliderTextPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 0;
+		gridBagConstraints1.gridy = 1;
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setLayout(new GridBagLayout());
+		this.setSize(180, 45);
+		this.setPreferredSize(new java.awt.Dimension(180,45));
+		this.add(getJPanel(), gridBagConstraints);
+		this.add(getJPanel1(), gridBagConstraints1);
+		this.getJSlider().addChangeListener(this);
+		this.getJTextField().addFocusListener(this);
+		this.getJTextField().addActionListener(this);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	protected JPanel getJPanel() {
+		if (pName == null) {
+			pName = new JPanel();
+			pName.setLayout(new GridBagLayout());
+			pName.setPreferredSize(new java.awt.Dimension(180,25));
+		}
+		return pName;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel1() {
+		if (pSliderText == null) {
+			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+			gridBagConstraints6.gridx = 1;
+			gridBagConstraints6.gridy = 0;
+			lPercent = new JLabel();
+			lPercent.setText("");
+			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			gridBagConstraints5.gridx = 1;
+			gridBagConstraints5.gridy = 0;
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints4.gridy = 0;
+			gridBagConstraints4.weightx = 1.0;
+			gridBagConstraints4.insets = new java.awt.Insets(0,6,0,6);
+			gridBagConstraints4.gridx = 2;
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.gridx = 1;
+			gridBagConstraints3.gridy = 0;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			gridBagConstraints2.gridy = 0;
+			gridBagConstraints2.weightx = 1.0;
+			gridBagConstraints2.gridx = 0;
+			pSliderText = new JPanel();
+			pSliderText.setLayout(new GridBagLayout());
+			pSliderText.setPreferredSize(new java.awt.Dimension(180,20));
+			pSliderText.add(getJSlider(), gridBagConstraints2);
+			pSliderText.add(getJTextField(), gridBagConstraints4);
+			pSliderText.add(lPercent, gridBagConstraints6);
+		}
+		return pSliderText;
+	}
+
+	/**
+	 * This method initializes jSlider	
+	 * 	
+	 * @return javax.swing.JSlider	
+	 */
+	public JSlider getJSlider() {
+		if (jSlider == null) {
+			jSlider = new JSlider();
+			jSlider.setPreferredSize(new java.awt.Dimension(100,16));
+		}
+		return jSlider;
+	}
+
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField() {
+		if (jTextField == null) {
+			jTextField = new JTextField();
+			jTextField.setPreferredSize(new java.awt.Dimension(20,19));
+			jTextField.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
+			jTextField.setText(String.valueOf(this.getJSlider().getValue()));
+		}
+		return jTextField;
+	}
+
+	/**
+	 * Pone una cadena con el tipo de unidad del cuadro de texto entre el slider
+	 * y el TextField.
+	 * @param cadena a poner entre el slider y el cudro de texto.
+	 */
+	
+	protected void setUnitText(String unit){
+		lPercent.setText(unit);
+	}
+	
+	/**
+	 * Activa o desactiva el control del panel
+	 * @param active
+	 */
+	
+	public void setControlEnabled(boolean active){
+		this.jSlider.setEnabled(active);
+		this.jTextField.setEnabled(active);
+		this.lPercent.setEnabled(active);
+		if(active == false){
+			this.jTextField.setForeground(this.getBackground());
+		}else{
+			this.jTextField.setForeground(java.awt.Color.black);
+		}
+		
+	}
+	
+	/**
+	 * Ponel el slider al valor que le pasamos
+	 * @param value
+	 */
+	
+	public void setSliderValue(int value){
+		jSlider.setValue(value);
+	}
+	
+	
+	/**
+	 * Pone en el campo de texto a la derecha del slider el valor que le pasamos
+	 * como parametro
+	 * @param value: valor que aparecera en el campo de texto.
+	 */
+	public void setTextValue(String value){
+		this.getJTextField().setText(value);
+	}
+
+	/**
+	 * Devuelve el valor actual del campo de texto
+	 * @return: valor del campo de texto.
+	 */
+	public String getTextValue(){
+		return this.jTextField.getText();
+	}
+	
+	public void stateChanged(ChangeEvent e) {
+		if(e.getSource() == this.jSlider){
+			if(decimal == true)
+				this.jTextField.setText(String.valueOf(this.jSlider.getValue()) + ".0");
+			if(decimal == false)
+				this.jTextField.setText(String.valueOf(this.jSlider.getValue()));
+		}
+	}
+	
+	/**
+	 * Da el rango de valores en el que se moverá el slider
+	 * @param min
+	 * @param max
+	 */
+	public void setSliderRange(int min, int max){
+		this.jSlider.setMaximum(max);
+		this.jSlider.setMinimum(min);
+	}
+
+	public void checkRangeText(){
+		int valor = Math.round(Float.parseFloat(this.getJTextField().getText()));
+		if((valor > this.getJSlider().getMaximum())){
+			if(decimal == true)
+				this.setTextValue(String.valueOf(this.getJSlider().getMaximum()) + ".0");
+			if(decimal == false)
+				this.setTextValue(String.valueOf(this.getJSlider().getMaximum()));
+			this.setSliderValue(this.getJSlider().getMaximum());
+		}
+		
+		if((valor < this.getJSlider().getMinimum())){
+			if(decimal == true)
+				this.setTextValue(String.valueOf(this.getJSlider().getMinimum()) + ".0");
+			if(decimal == false)
+				this.setTextValue(String.valueOf(this.getJSlider().getMinimum()));
+			this.setSliderValue(this.getJSlider().getMinimum());
+		}
+		
+	}
+	
+	public void focusGained(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void focusLost(FocusEvent e) {
+		if(e.getSource() == this.jTextField){
+			checkTailText();
+			checkRangeText();
+		}
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == this.jTextField){
+			checkTailText();
+			checkRangeText();
+		}
+	}
+
+	 /**
+     * Controla que si el formato introducido en el textfield
+     * de Recorte de colas es numerico se actualiza la posición del
+     * slider
+     */
+    private void checkTailText() {
+        String text = getJTextField().getText();
+        double value = 0;
+
+        try {
+        	if (!text.equals(""))
+                value = (Double.parseDouble(text) * 100) / 50;
+        	value = Double.valueOf(text).doubleValue();          
+            getJSlider().setValue((int) Math.round(value));
+            getJTextField().setText(text);
+        } catch (NumberFormatException exc) {
+            System.err.println("Formato no numerico");
+            if(decimal == true)
+            	getJTextField().setText("0.0");
+            else
+            	getJTextField().setText("0");
+            getJSlider().setValue(0);
+        }
+    }
+    
+	public void setDecimal (boolean dec){
+		decimal = dec;
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/SliderTextPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/EnhancedBrightnessContrastPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/EnhancedBrightnessContrastPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/EnhancedBrightnessContrastPanel.java	(revision 10281)
@@ -0,0 +1,500 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.ui.BrightnessContrast;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.cresques.filter.IStackManager;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.enhancement.BrightnessContrastStackManager;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.ui.filter.FilterRasterDialogPanel;
+
+
+/**
+ * Panel para los controles de brillo, contrase y realce.
+ * @author Miguel Angel Querol Carratalá <querol_mig@gva.es>
+ *
+ */
+public class EnhancedBrightnessContrastPanel extends JPanel implements ActionListener{
+
+	private String nom = "Realce";
+	private JPanel pBrightCont = null;
+	private JPanel pEnhanced = null;
+	public LabelSliderText lstBrightness = null;
+	public LabelSliderText lstContrast = null;
+	private JPanel pBCCheck = null;
+	private JPanel pBCSlider = null;
+	private JPanel jPanel1 = null;
+	private JCheckBox cBrightC = null;
+	public JLabel lBrightC = null;
+	private JPanel pEnCheck = null;
+	private JPanel pEnSlider = null;
+	private JCheckBox cEnhanced = null;
+	private JPanel pDelInt = null;
+	private JCheckBox jCheckBox = null;
+	
+	private BrightnessContrastStackManager bcManager = null;
+	private JCheckBox jCheckBox1 = null;
+	public JLabel lpreview = null;
+	public RasterFilterStackManager rasterStackManager = null;
+	public JLabel lLineal = null;
+	public JLabel lRemove = null;
+	public CheckSliderText cstEnhanced = null;
+	private FilterRasterDialogPanel parent = null;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public EnhancedBrightnessContrastPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This is the default constructor
+	 */
+	public EnhancedBrightnessContrastPanel(FilterRasterDialogPanel parent) {
+		super();
+		this.parent = parent;
+		initialize();
+	}
+	
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+		gridBagConstraints3.insets = new java.awt.Insets(0,4,0,4);
+		gridBagConstraints3.gridy = 0;
+		gridBagConstraints3.gridx = 1;
+		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+		gridBagConstraints2.insets = new java.awt.Insets(0,4,0,4);
+		gridBagConstraints2.gridy = 0;
+		gridBagConstraints2.gridx = 0;
+		this.setLayout(new GridBagLayout());
+		this.setSize(445, 239);
+		this.setPreferredSize(new java.awt.Dimension(445,239));
+		this.add(getPBrightCont(), gridBagConstraints2);
+		this.add(getPEnhanced(), gridBagConstraints3);
+		
+		this.getCBrightC().addActionListener(this);
+		this.getCEnhanced().addActionListener(this);
+		//this.getLabelSliderText().getJTextField().addActionListener(this);
+		//this.getLabelSliderText1().getJTextField().addActionListener(this);
+	}
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPBrightCont() {
+		if (pBrightCont == null) {
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.gridx = 0;
+			gridBagConstraints4.insets = new java.awt.Insets(4,0,8,0);
+			gridBagConstraints4.gridy = 1;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.insets = new java.awt.Insets(0,8,4,8);
+			gridBagConstraints.gridy = 0;
+			pBrightCont = new JPanel();
+			pBrightCont.setLayout(new GridBagLayout());
+			pBrightCont.setPreferredSize(new java.awt.Dimension(210,223));
+			pBrightCont.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Brillo y contraste", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pBrightCont.add(getPBCCheck(), gridBagConstraints);
+			pBrightCont.add(getPBCSlider(), gridBagConstraints4);
+		}
+		return pBrightCont;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public JPanel getPEnhanced() {
+		if (pEnhanced == null) {
+			GridBagConstraints gridBagConstraints12 = new GridBagConstraints();
+			gridBagConstraints12.gridx = 0;
+			gridBagConstraints12.insets = new java.awt.Insets(4,4,59,4);
+			gridBagConstraints12.gridy = 1;
+			GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
+			gridBagConstraints11.gridx = 0;
+			gridBagConstraints11.insets = new java.awt.Insets(0,8,4,8);
+			gridBagConstraints11.gridy = 0;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.gridy = 0;
+			pEnhanced = new JPanel();
+			pEnhanced.setLayout(new GridBagLayout());
+			pEnhanced.setPreferredSize(new java.awt.Dimension(210,223));
+			pEnhanced.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Realce", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pEnhanced.add(getPEnCheck(), gridBagConstraints11);
+			pEnhanced.add(getPEnSlider(), gridBagConstraints12);
+		}
+		return pEnhanced;
+	}
+
+	/**
+	 * inicializa el conponente LabelSliderText
+	 */
+	public LabelSliderText getLabelSliderText(){
+		if(lstBrightness == null){
+			lstBrightness = new LabelSliderText();
+			lstBrightness.setName("Brillo");
+			lstBrightness.setSliderRange(-255,255);
+			lstBrightness.setSliderValue(0);
+		}
+		return lstBrightness;
+	}
+
+	/**
+	 * inicializa el conponente LabelSliderText
+	 */
+	public LabelSliderText getLabelSliderText1(){
+		if (lstContrast == null){
+			lstContrast = new LabelSliderText();
+			lstContrast.setName("Contraste");
+			lstContrast.setPreferredSize(new java.awt.Dimension(180,45));
+			lstContrast.setSliderRange(-255,255);
+			lstContrast.setSliderValue(0);
+		}
+		return lstContrast;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPBCCheck() {
+		if (pBCCheck == null) {
+			GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
+			gridBagConstraints9.gridx = 1;
+			gridBagConstraints9.gridy = 0;
+			lBrightC = new JLabel();
+			lBrightC.setText("Activar");
+			lBrightC.setPreferredSize(new java.awt.Dimension(160,15));
+			GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
+			gridBagConstraints8.gridx = 0;
+			gridBagConstraints8.gridy = 0;
+			pBCCheck = new JPanel();
+			pBCCheck.setLayout(new GridBagLayout());
+			pBCCheck.setPreferredSize(new java.awt.Dimension(182,25));
+			pBCCheck.add(getCBrightC(), gridBagConstraints8);
+			pBCCheck.add(lBrightC, gridBagConstraints9);
+		}
+		return pBCCheck;
+	}
+
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPBCSlider() {
+		if (pBCSlider == null) {
+			GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
+			gridBagConstraints7.gridx = 0;
+			gridBagConstraints7.insets = new java.awt.Insets(0,0,2,0);
+			gridBagConstraints7.gridy = 0;
+			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+			gridBagConstraints6.gridx = 0;
+			gridBagConstraints6.insets = new java.awt.Insets(10,0,8,0);
+			gridBagConstraints6.gridy = 2;
+			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
+			gridBagConstraints5.gridx = 0;
+			gridBagConstraints5.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints5.gridy = 1;
+			pBCSlider = new JPanel();
+			pBCSlider.setLayout(new GridBagLayout());
+			pBCSlider.setPreferredSize(new java.awt.Dimension(188,150));
+			pBCSlider.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pBCSlider.add(getLabelSliderText(), gridBagConstraints7);
+			pBCSlider.add(getLabelSliderText1(), gridBagConstraints5);
+			pBCSlider.add(getJPanel1(), gridBagConstraints6);
+			this.setBCControlEnabled(false);
+		}
+		return pBCSlider;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			GridBagConstraints gridBagConstraints19 = new GridBagConstraints();
+			gridBagConstraints19.gridx = 1;
+			gridBagConstraints19.gridy = 0;
+			lpreview = new JLabel();
+			lpreview.setText("Previsualizacion");
+			lpreview.setPreferredSize(new java.awt.Dimension(150,15));
+			lpreview.setSize(new java.awt.Dimension(160,15));
+			GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
+			gridBagConstraints10.gridx = 0;
+			gridBagConstraints10.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints10.gridy = 0;
+			jPanel1 = new JPanel();
+			jPanel1.setLayout(new GridBagLayout());
+			jPanel1.setPreferredSize(new java.awt.Dimension(180,25));
+			jPanel1.add(getJCheckBox1(), gridBagConstraints10);
+			jPanel1.add(lpreview, gridBagConstraints19);
+		}
+		return jPanel1;
+	}
+
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getCBrightC() {
+		if (cBrightC == null) {
+			cBrightC = new JCheckBox();
+		}
+		return cBrightC;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPEnCheck() {
+		if (pEnCheck == null) {
+			GridBagConstraints gridBagConstraints14 = new GridBagConstraints();
+			gridBagConstraints14.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints14.gridy = 0;
+			gridBagConstraints14.gridx = 1;
+			GridBagConstraints gridBagConstraints13 = new GridBagConstraints();
+			gridBagConstraints13.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints13.gridy = 0;
+			gridBagConstraints13.gridx = 0;
+			lLineal = new JLabel();
+			lLineal.setText("Lineal Directo");
+			lLineal.setPreferredSize(new java.awt.Dimension(160,15));
+			pEnCheck = new JPanel();
+			pEnCheck.setLayout(new GridBagLayout());
+			pEnCheck.setPreferredSize(new java.awt.Dimension(182,25));
+			pEnCheck.add(getCEnhanced(), gridBagConstraints13);
+			pEnCheck.add(lLineal, gridBagConstraints14);
+		}
+		return pEnCheck;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPEnSlider() {
+		if (pEnSlider == null) {
+			GridBagConstraints gridBagConstraints18 = new GridBagConstraints();
+			gridBagConstraints18.insets = new java.awt.Insets(2,0,0,0);
+			gridBagConstraints18.gridy = 1;
+			gridBagConstraints18.gridx = 0;
+			GridBagConstraints gridBagConstraints15 = new GridBagConstraints();
+			gridBagConstraints15.insets = new java.awt.Insets(0,0,2,0);
+			gridBagConstraints15.gridy = 0;
+			gridBagConstraints15.gridx = 0;
+			pEnSlider = new JPanel();
+			pEnSlider.setLayout(new GridBagLayout());
+			pEnSlider.setPreferredSize(new java.awt.Dimension(188,100));
+			pEnSlider.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pEnSlider.add(getPDelInt(), gridBagConstraints15);
+			pEnSlider.add(getCheckSliderText(), gridBagConstraints18);
+			this.setEControlEnabled(false);
+		}
+		return pEnSlider;
+	}
+
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getCEnhanced() {
+		if (cEnhanced == null) {
+			cEnhanced = new JCheckBox();
+		}
+		return cEnhanced;
+	}
+
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPDelInt() {
+		if (pDelInt == null) {
+			GridBagConstraints gridBagConstraints17 = new GridBagConstraints();
+			gridBagConstraints17.gridx = 1;
+			gridBagConstraints17.gridy = 0;
+			lRemove = new JLabel();
+			lRemove.setText("Eliminar Extremos");
+			lRemove.setPreferredSize(new java.awt.Dimension(150,15));
+			GridBagConstraints gridBagConstraints16 = new GridBagConstraints();
+			gridBagConstraints16.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints16.gridy = 0;
+			gridBagConstraints16.gridx = 0;
+			pDelInt = new JPanel();
+			pDelInt.setLayout(new GridBagLayout());
+			pDelInt.setPreferredSize(new java.awt.Dimension(180,25));
+			pDelInt.add(getJCheckBox(), gridBagConstraints16);
+			pDelInt.add(lRemove, gridBagConstraints17);
+		}
+		return pDelInt;
+	}
+
+	/**
+	 * This method initializes jCheckBox	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getJCheckBox() {
+		if (jCheckBox == null) {
+			jCheckBox = new JCheckBox();
+		}
+		return jCheckBox;
+	}
+	
+	/**
+	 * inicializa el conponente CheckSliderText
+	 */
+	public CheckSliderText getCheckSliderText(){
+		String rcName = "Recorte de colas"; 
+		if (cstEnhanced == null){
+			cstEnhanced = new CheckSliderText();
+			cstEnhanced.setName(rcName);
+			cstEnhanced.setSliderValue(0);
+			cstEnhanced.setSliderRange(0,50);
+			cstEnhanced.setDecimal(true);
+			cstEnhanced.setTextValue("0.0");
+			
+		}
+		return cstEnhanced;
+	}
+
+	/**
+	 * Habilita o dehabilita el panel de brillo y contraste
+	 * @param active
+	 */
+	public void setBCControlEnabled(boolean active){
+		this.lstBrightness.setControlEnabled(active);
+		this.lstContrast.setControlEnabled(active);
+		this.getJCheckBox1().setEnabled(active);
+		this.lpreview.setEnabled(active);
+	}
+	
+	/**
+	 * Habilita o dehabilita el panel de realce
+	 * @param active
+	 */
+	public void setEControlEnabled(boolean active){
+		this.jCheckBox.setEnabled(active);
+		this.lRemove.setEnabled(active);
+		this.cstEnhanced.setControlEnabled(active);		
+	}
+	
+	
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == this.getCBrightC()){
+			this.setBCControlEnabled(this.getCBrightC().isSelected());
+		}
+		if(e.getSource() == cEnhanced){
+			this.setEControlEnabled(this.getCEnhanced().isSelected());
+		}
+	} 
+	
+	/**
+	 * Asigna a este panel un stack manager
+	 * @param p
+	 */
+	public void setBrightnessContrastStackManager (BrightnessContrastStackManager p){
+		this.bcManager = p;
+	}
+	
+	
+	//-------------------------------------------------------------------------------
+
+	public void setStackManager(RasterFilterStackManager stackManager) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public IStackManager getStackManager() {
+		// TODO Auto-generated method stub
+		return bcManager;
+	}
+
+	
+	//----------------------------------------------------------------------------------
+	
+	
+	public void removeFile(String file) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public void addFiles(GeoRasterFile[] files) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+	 * This method initializes jCheckBox1	
+	 * 	
+	 * @return javax.swing.JCheckBox	
+	 */
+	public JCheckBox getJCheckBox1() {
+		if (jCheckBox1 == null) {
+			jCheckBox1 = new JCheckBox();
+			jCheckBox1.setSelected(true);
+		}
+		return jCheckBox1;
+	}
+	
+	 /**
+     * Obtiene el nombre del panel
+     * @return Cadena con el nombre del panel
+     */
+    public String getName(){
+    	return this.nom;
+    }
+	
+}
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/BrightnessContrast/EnhancedBrightnessContrastPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionModel.java	(revision 10281)
@@ -0,0 +1,255 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cts;
+
+import org.cresques.cts.IProjection;
+import org.cresques.cts.ProjectionPool;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class CSSelectionModel {
+    public static int NONE = 0x01;
+    public static int GEODETIC = 0x02;
+    public static int TRANSVERSAL = 0x03;
+    public String[] datumList = {
+                                    "WGS 84", "European 1950", "Datum 73",
+                                    "North American Datum 1927",
+                                    "North American Datum 1983",
+                                    "La Canoa" /*,
+    "Nouvelle Triangulation Francaise",
+    */
+                                };
+    private String[] projList = {
+                                    "Geodesica",
+                                    "(UTM) Universal Transversal Mercator",
+                                    "Datum 73 / Modified Portuguese Grid",
+                                    "WGS 84 / LCC Canada",
+                                    "NAD83 / NRCan LCC Canada"
+                                };
+    private int[] projType = { GEODETIC, TRANSVERSAL, NONE, NONE, NONE };
+    private String[] huseList = {  };
+    private int selectedDatum = 0;
+    private int selectedProj = 0;
+    private int selectedHuse = 0;
+
+    /**
+     *
+     */
+    public CSSelectionModel() {
+        super();
+        huseList = new String[60];
+
+        for (int i = 1; i <= 60; i++)
+            huseList[i - 1] = "Huso " + Integer.toString(i);
+    }
+
+    public String[] getDatumList() {
+        return datumList;
+    }
+
+    public String[] getProjectionList() {
+        return projList;
+    }
+
+    public String[] getHuseList() {
+        return huseList;
+    }
+
+    public void setSelectedDatum(int opNr) {
+        selectedDatum = opNr;
+    }
+
+    public void setSelectedDatum(Object item) {
+        String[] list = datumList;
+
+        for (int i = 0; i < list.length; i++)
+            if (list[i].compareTo((String) item) == 0) {
+                selectedDatum = i;
+            }
+    }
+
+    public int getSelectedDatum() {
+        return selectedDatum;
+    }
+
+    public void setSelectedProj(int opNr) {
+        selectedProj = opNr;
+    }
+
+    public void setSelectedProj(Object item) {
+        String[] list = projList;
+
+        for (int i = 0; i < list.length; i++)
+            if (list[i].compareTo((String) item) == 0) {
+                selectedProj = i;
+            }
+    }
+
+    public int getSelectedProj() {
+        return selectedProj;
+    }
+
+    public int getSelectedProjType() {
+        return projType[selectedProj];
+    }
+
+    public void setSelectedHuse(int opNr) {
+        selectedHuse = opNr;
+    }
+
+    public void setSelectedHuse(Object item) {
+        String[] list = huseList;
+
+        for (int i = 0; i < list.length; i++)
+            if (list[i].compareTo((String) item) == 0) {
+                selectedHuse = i;
+            }
+    }
+
+    public int getSelectedHuse() {
+        return selectedHuse;
+    }
+
+    public void setProjection(IProjection proj) {
+        String key = proj.getAbrev();
+        key = key.substring(key.length() - 5);
+
+        if (key.endsWith(":4326")) {
+            setSelectedDatum(0);
+            setSelectedProj(0);
+            setSelectedHuse(-1);
+        } else if (key.endsWith(":4230")) {
+            setSelectedDatum(1);
+            setSelectedProj(0);
+            setSelectedHuse(-1);
+        } else if (key.endsWith(":4267")) {
+            setSelectedDatum(2);
+            setSelectedProj(0);
+            setSelectedHuse(-1);
+        } else if (key.endsWith(":4269")) {
+            setSelectedDatum(3);
+            setSelectedProj(0);
+            setSelectedHuse(-1);
+        } else if (key.endsWith(":4247")) {
+            setSelectedDatum(5);
+            setSelectedProj(0);
+            setSelectedHuse(-1);
+        } else if (key.startsWith("326")) {
+            setSelectedDatum(0);
+            setSelectedProj(1);
+            setSelectedHuse(Integer.parseInt(key.substring(3)) - 1);
+        } else if (key.startsWith("230")) {
+            setSelectedDatum(1);
+            setSelectedProj(1);
+            setSelectedHuse(Integer.parseInt(key.substring(3)) - 1);
+        } else if (key.startsWith("267")) {
+            setSelectedDatum(2);
+            setSelectedProj(1);
+            setSelectedHuse(Integer.parseInt(key.substring(3)) - 1);
+        } else if (key.startsWith("269")) {
+            setSelectedDatum(3);
+            setSelectedProj(1);
+            setSelectedHuse(Integer.parseInt(key.substring(3)) - 1);
+        } else if (key.startsWith("247")) {
+            setSelectedDatum(3);
+            setSelectedProj(1);
+            setSelectedHuse(Integer.parseInt(key.substring(3)) - 1);
+        } else if (key.startsWith("27492")) { // Datum 73 / Modified Portuguese Grid
+            setSelectedDatum(-1);
+            setSelectedProj(2);
+            setSelectedHuse(-1);
+        } else if (key.startsWith("42101")) { // WGS 84 / LCC Canada
+            setSelectedDatum(-1);
+            setSelectedProj(3);
+            setSelectedHuse(-1);
+        } else if (key.startsWith("42304")) { // NAD83 /  / LCC Canada
+            setSelectedDatum(-1);
+            setSelectedProj(4);
+            setSelectedHuse(-1);
+        } else {
+            System.err.println("CAGADA EN EL PARSING DE LA PROYECCION: " + key);
+        }
+    }
+
+    public IProjection getProjection() {
+        if (selectedProj == 2) {
+            return ProjectionPool.get("EPSG:27492");
+        } else if (selectedProj == 3) {
+            return ProjectionPool.get("EPSG:42101");
+        } else if (selectedProj == 4) {
+            return ProjectionPool.get("EPSG:42304");
+        }
+
+        IProjection proj = null;
+        String datum = "326";
+
+        if (selectedDatum == 0) {
+            datum = "326";
+        } else if (selectedDatum == 1) {
+            datum = "230";
+        } else if (selectedDatum == 2) {
+            datum = "267";
+        } else if (selectedDatum == 3) {
+            datum = "269";
+        } else if (selectedDatum == 5) {
+            datum = "247";
+        }
+
+        if (selectedProj == 0) {
+            return ProjectionPool.get("EPSG:4" + datum);
+        } else if (selectedProj == 1) {
+            String huse = Integer.toString(selectedHuse + 1);
+
+            if (selectedHuse < 9) {
+                huse = "0" + huse;
+            }
+
+            if ((selectedDatum == 2) || (selectedDatum == 3)) {
+                if (selectedHuse < 3) {
+                    huse = "03";
+                }
+
+                if (selectedHuse > 23) {
+                    huse = "23";
+                }
+            }
+
+            if (selectedDatum == 53) {
+                if (selectedHuse < 18) {
+                    huse = "18";
+                }
+
+                if (selectedHuse > 22) {
+                    huse = "22";
+                }
+            }
+
+            return ProjectionPool.get("EPSG:" + datum + huse);
+        }
+
+        return proj;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionModel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Interfaces gráficas relacionadas con el manejo de proyecciones.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/package.html
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionDialogPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionDialogPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionDialogPanel.java	(revision 10281)
@@ -0,0 +1,69 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cts;
+
+import org.cresques.cts.ProjectionPool;
+
+import org.cresques.ui.DefaultDialogPanel;
+import org.cresques.ui.cts.CSSelectionPanel;
+
+import javax.swing.JPanel;
+
+
+/**
+ * Dialogo para abrir fichero.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSSelectionDialogPanel extends DefaultDialogPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    public CSSelectionDialogPanel() {
+        super();
+        init();
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void init() {
+        this.setBounds(0, 0, 321, 230);
+    }
+
+    public CSSelectionPanel getProjPanel() {
+        return (CSSelectionPanel) getContentPanel();
+    }
+
+    protected JPanel getContentPanel() {
+        if (contentPane == null) {
+        	contentPane = new CSSelectionPanel("Sistema de referencia");
+        	contentPane.setBounds(14, 12, 280, 163);
+
+            ((CSSelectionPanel) contentPane).setProjection(ProjectionPool.get("EPSG:32619"));
+        }
+
+        return contentPane;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionDialogPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionPanel.java	(revision 10281)
@@ -0,0 +1,233 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui.cts;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.ui.LoadableComboBox;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+
+//import es.gva.cit.geoexplorer.ui.LoadableComboBox;
+
+/**
+ * Panel de edición de Sistemas de referencia
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSSelectionPanel extends JPanel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    private LoadableComboBox datumComboBox = null;
+    private LoadableComboBox projComboBox = null;
+    private LoadableComboBox huseComboBox = null;
+    private JLabel jLabel = null;
+    private JLabel jLabel1 = null;
+    private JLabel jLabel2 = null;
+    private int wDisplay = 335;
+    private int wCombo = 250;
+    private int h = 23;
+    private int x = 14;
+    private String tit;
+    private CSSelectionModel model;
+
+    /**
+     * Constructor de la clase.
+     */
+    public CSSelectionPanel(String tit) {
+        super();
+
+        if (tit == null) {
+            tit = "Sistema de referencia";
+        }
+
+        this.tit = tit;
+        setModel(new CSSelectionModel());
+        initialize();
+    }
+
+    /**
+     * Inicializa el panel.
+     * @return javax.swing.JPanel
+     */
+    private void initialize() {
+        setPreferredSize(new java.awt.Dimension(295, 170));
+        setLayout(null);
+
+        /*javax.swing.border.Border border = javax.swing.BorderFactory.createCompoundBorder(
+        javax.swing. BorderFactory.createTitledBorder("Sistema de coordenadas"),
+        javax.swing.BorderFactory.createEmptyBorder(5,5,5,5)); */
+        setBorder(javax.swing.BorderFactory.createCompoundBorder(null,
+                                                                 javax.swing.BorderFactory.createTitledBorder(null,
+                                                                                                              "Sistema de Referencia",
+                                                                                                              javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+                                                                                                              javax.swing.border.TitledBorder.DEFAULT_POSITION,
+                                                                                                              null,
+                                                                                                              null)));
+
+        jLabel = new JLabel();
+        jLabel.setBounds(15, 15, 77, 23);
+        jLabel.setText("Datum :");
+        add(jLabel, null);
+        add(getDatumComboBox(), null);
+
+        jLabel1 = new JLabel();
+        jLabel1.setBounds(15, 60, 77, 23);
+        jLabel1.setText("Proyección :");
+        add(jLabel1, null);
+        add(getProjComboBox(), null);
+
+        jLabel2 = new JLabel();
+        jLabel2.setBounds(15, 105, 77, 23);
+        jLabel2.setText("Huso :");
+        add(jLabel2, null);
+        add(getHuseComboBox(), null);
+
+        setHuseComboBoxEnabled(false);
+    }
+
+    public void setModel(CSSelectionModel model) {
+        this.model = model;
+
+        getHuseComboBox().loadData(model.getHuseList());
+        getDatumComboBox().loadData(model.getDatumList());
+        getProjComboBox().loadData(model.getProjectionList());
+    }
+
+    private void setHuseComboBoxEnabled(boolean enabled) {
+        if (jLabel2 != null) {
+            jLabel2.setEnabled(enabled);
+        }
+
+        getHuseComboBox().setEnabled(enabled);
+    }
+
+    private void setDatumComboBoxEnabled(boolean enabled) {
+        if (jLabel != null) {
+            jLabel.setEnabled(enabled);
+        }
+
+        getDatumComboBox().setEnabled(enabled);
+    }
+
+    public void setProjection(IProjection proj) {
+        model.setProjection(proj);
+
+        if (model.getSelectedDatum() >= 0) {
+            setDatumComboBoxEnabled(true);
+            getDatumComboBox().setSelectedIndex(model.getSelectedDatum());
+        } else {
+            setDatumComboBoxEnabled(false);
+            getDatumComboBox().setSelectedIndex(0);
+        }
+
+        getProjComboBox().setSelectedIndex(model.getSelectedProj());
+
+        if (model.getSelectedHuse() >= 0) {
+            setHuseComboBoxEnabled(true);
+            getHuseComboBox().setSelectedIndex(model.getSelectedHuse());
+        } else {
+            setHuseComboBoxEnabled(false);
+            getHuseComboBox().setSelectedIndex(0);
+        }
+    }
+
+    /**
+     * Inicializa datumComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    private LoadableComboBox getDatumComboBox() {
+        if (datumComboBox == null) {
+            datumComboBox = new LoadableComboBox();
+            datumComboBox.setBounds(14, 35, 250, 23);
+
+            //			((LoadableComboBox) datumComboBox).loadData(model.getDatumList());
+            datumComboBox.addItemListener(new java.awt.event.ItemListener() {
+                    public void itemStateChanged(java.awt.event.ItemEvent e) {
+                        model.setSelectedDatum(e.getItem());
+                    }
+                });
+        }
+
+        return datumComboBox;
+    }
+
+    /**
+     * Inicializa projComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    private LoadableComboBox getProjComboBox() {
+        if (projComboBox == null) {
+            projComboBox = new LoadableComboBox();
+            projComboBox.setBounds(14, 80, 250, 23);
+            projComboBox.addItemListener(new java.awt.event.ItemListener() {
+                    public void itemStateChanged(java.awt.event.ItemEvent e) {
+                        model.setSelectedProj(e.getItem());
+
+                        if (model.getSelectedProjType() == CSSelectionModel.TRANSVERSAL) {
+                            setHuseComboBoxEnabled(true);
+                        } else {
+                            setHuseComboBoxEnabled(false);
+                        }
+
+                        if (model.getSelectedProjType() == CSSelectionModel.NONE) {
+                            setDatumComboBoxEnabled(false);
+                        } else {
+                            setDatumComboBoxEnabled(true);
+                        }
+                    }
+                });
+        }
+
+        return projComboBox;
+    }
+
+    /**
+     * Inicializa usoComboBox
+     *
+     * @return javax.swing.JComboBox
+     */
+    private LoadableComboBox getHuseComboBox() {
+        if (huseComboBox == null) {
+            huseComboBox = new LoadableComboBox();
+            huseComboBox.setBounds(14, 125, 250, 23);
+            huseComboBox.addItemListener(new java.awt.event.ItemListener() {
+                    public void itemStateChanged(java.awt.event.ItemEvent e) {
+                        model.setSelectedHuse(e.getItem());
+                    }
+                });
+        }
+
+        return huseComboBox;
+    }
+
+    /**
+     * @return
+     */
+    public IProjection getProjection() {
+        return model.getProjection();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/cts/CSSelectionPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQLayerManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQLayerManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQLayerManager.java	(revision 10281)
@@ -0,0 +1,42 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.PxLayer;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public interface CQLayerManager {
+    public PxLayer createLayer(IProjection proj);
+
+    public PxLayer createLayer(String name, IProjection proj);
+
+    public PxLayer createLayer(PxLayer layer);
+
+    public PxLayer getCurrentLayer();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/CQLayerManager.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultTabPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultTabPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultTabPanel.java	(revision 10281)
@@ -0,0 +1,116 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import java.awt.GridBagConstraints;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+
+/**
+ * Panel del que heredaran los paneles que contengan tabs
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class DefaultTabPanel extends DefaultDialogPanel implements ComponentListener, ChangeListener{
+    final private static long serialVersionUID = -3370601314380922368L;
+    protected JTabbedPane tabbedPane = null;
+
+    /**
+     * Contructor
+     */
+    public DefaultTabPanel() {
+        super();
+        this.setBounds(0, 0, 355, 230);
+        this.getContentPanel();
+        this.getTabPane();
+        GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
+        gridBagConstraints6.gridy = 0;
+        gridBagConstraints6.gridx = 0;
+        contentPane.add(tabbedPane, gridBagConstraints6);
+        tabbedPane.addChangeListener(this);
+    }
+
+
+	/**
+     * Obtiene el Componente JTabbedPane
+     * @return Componente JTabbedPane
+     */
+    private JTabbedPane getTabPane() {
+        if (tabbedPane == null) {
+            tabbedPane = new JTabbedPane();
+            tabbedPane.setLocation(0,0);
+        }
+
+        return tabbedPane;
+    }
+
+    /**
+     * Añade un tab al JTabbedPane
+     * @param title        Título del tab
+     * @param panel        Panel del nuevo tab
+     */
+    public void addTab(String title, JPanel panel) {
+        tabbedPane.add(title, panel);
+    }
+
+    /**
+     * Obtiene el JTabbedPane
+     * @return JTabbedPane
+     */
+    public JTabbedPane getTab() {
+        return tabbedPane;
+    }
+
+	public void componentResized(ComponentEvent e) {
+		if(e.getSource() ==  this){
+			super.componentResized(e);
+			//int difWidth = this.getSize().width - cWidth;
+			//int difHeight = this.getSize().height - cHeight;
+			this.tabbedPane.setSize(this.tabbedPane.getSize().width + difWidth, this.tabbedPane.getSize().height + difHeight);
+			this.setLocation(0,0);
+			
+		}
+		
+	}
+
+	public void stateChanged(ChangeEvent ev) {
+		//this.tabbedPane.setSize(this.tabbedPane.getSize().width + difWidth, this.tabbedPane.getSize().height + difHeight);
+		//System.out.println("X: " + this.tabbedPane.getSize().width + " Y: " + this.tabbedPane.getSize().height);
+		
+		if (ev.getSource().getClass().toString().endsWith("JTabbedPane")) {
+			if (((JTabbedPane)ev.getSource()).getSelectedIndex() == 1){
+				super.resizeWindow();
+				this.tabbedPane.setSize(this.tabbedPane.getSize().width + difWidth, this.tabbedPane.getSize().height + difHeight);
+				this.setLocation(0,0);
+			}
+		}
+	}
+}  //  @jve:decl-index=0:visual-constraint="13,18"

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/DefaultTabPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/LoadableComboBox.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/LoadableComboBox.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/LoadableComboBox.java	(revision 10281)
@@ -0,0 +1,72 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.ui;
+
+import javax.swing.JComboBox;
+
+
+/**
+ * @author "Luis W. Sevilla" (sevilla_lui@gva.es)
+ */
+public class LoadableComboBox extends JComboBox {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    public LoadableComboBox() {
+        super();
+        initialize();
+
+        //		addItemListener(this);
+        //		setSize(new java.awt.Dimension(185, 23));
+    }
+
+    /**
+     * This method initializes this
+     *
+     * @return void
+     */
+    private void initialize() {
+        this.setPreferredSize(new java.awt.Dimension(185, 23));
+    }
+
+    /**
+     * Carga el vector de strings data con los valores pasados por parámetro
+     * @param data	vector de strings con los valores
+     */
+    public void loadData(String[] data) {
+        if (data == null) {
+            return;
+        }
+
+        for (int i = 0; i < data.length; i++)
+            addItem(data[i]);
+    }
+
+    /*        public void itemStateChanged(ItemEvent e) {
+                if (e.getStateChange() == ItemEvent.SELECTED) {
+                    //label.setVisible(true);
+                } else {
+                    //label.setVisible(false);
+                }
+            }*/
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui/LoadableComboBox.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/ui
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/Utilities.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/Utilities.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/Utilities.java	(revision 10281)
@@ -0,0 +1,285 @@
+package org.cresques.util;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.px.Extent;
+
+import es.gva.cit.jgdal.Gdal;
+
+/**
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class Utilities {
+	
+	public static final	int MAX_BYTE_BIT_VALUE	= 255;
+	public static final	int MAX_SHORT_BIT_VALUE	= 65535;
+	    
+    //---------------------------------------------------------------
+    //TIPOS DE DATOS
+    
+    /**
+     * Conversión de los tipos de datos de gdal a los tipos de datos de 
+     * RasterBuf
+     * @param gdalType Tipo de dato de gdal
+     * @return Tipo de dato de RasterBuf
+     */
+    public static int getRasterBufTypeFromGdalType(int gdalType){
+    	switch(gdalType){
+		case 1:return  RasterBuf.TYPE_BYTE;//GDT_BYTE 
+		case 2://GDT_UInt16
+		case 8://GDT_CInt16
+		case 3:return RasterBuf.TYPE_SHORT;//GDT_Int16	
+		case 4://GDT_UInt32
+		case 9://GDT_CInt32
+		case 5:return RasterBuf.TYPE_INT;//GDT_Int32
+		case 10://GDT_CFloat32
+		case 6:return RasterBuf.TYPE_FLOAT;//GDT_Float32
+		case 11://GDT_CFloat64
+		case 7:return RasterBuf.TYPE_DOUBLE;//GDT_Float64
+		}
+    	return RasterBuf.TYPE_UNDEFINED;
+    }
+    
+    /**
+     * Conversión de los tipos de datos de RasterBuf en los de gdal.
+     * @param rasterBufType Tipo de dato de RasterBuf
+     * @return Tipo de dato de Gdal
+     */
+    public static int getGdalTypeFromRasterBufType(int rasterBufType){
+    	switch(rasterBufType){
+		case RasterBuf.TYPE_BYTE:return Gdal.GDT_Byte;
+		case RasterBuf.TYPE_USHORT: return Gdal.GDT_UInt16;
+		case RasterBuf.TYPE_SHORT: return Gdal.GDT_Int16;
+		case RasterBuf.TYPE_INT: return Gdal.GDT_Int32;
+		case RasterBuf.TYPE_FLOAT: return Gdal.GDT_Float32;
+		case RasterBuf.TYPE_DOUBLE: return Gdal.GDT_Float64;
+		case RasterBuf.TYPE_UNDEFINED: return Gdal.GDT_Unknown;
+		case RasterBuf.TYPE_IMAGE: return Gdal.GDT_Byte;
+		}
+    	return Gdal.GDT_Unknown;
+    }
+    
+    /**
+     * Conversión de los tipos de datos de MrSID a los tipos de datos de 
+     * RasterBuf
+     * @param mrsidType Tipo de dato de MrSID
+     * @return Tipo de dato de RasterBuf
+     */
+    public static int getRasterBufTypeFromMrSIDType(int mrsidType){
+    	switch(mrsidType){
+    	case 0:return RasterBuf.TYPE_UNDEFINED;//INVALID
+		case 1://UINT8 
+		case 2:return  RasterBuf.TYPE_BYTE;//SINT8
+		case 3://UINT16
+		case 4:return RasterBuf.TYPE_SHORT;//SINT16	
+		case 5://UINT32
+		case 6:return RasterBuf.TYPE_INT;//SINT32	
+		case 7:return RasterBuf.TYPE_FLOAT;//FLOAT32
+		case 8:return RasterBuf.TYPE_DOUBLE;//FLOAT64
+		}
+    	return RasterBuf.TYPE_UNDEFINED;
+    }
+    
+    //---------------------------------------------------------------
+    //ESPACIO DE COLOR
+    
+    /**
+     * Descompone un entero que representa un ARGB en sus 4 valores byte
+     * Obtiene un array de 4 elementos donde el elemento 0 es el Rojo, el 1 es el
+     * verde, el 2 el azul y el 3 el alpha.
+     * @param rgb Entero con el valor ARGB a descomponer;
+     * @return Array de cuatro elementos
+     */
+    public static byte[] getARGBFromIntToByteArray(int rgb){
+    	byte[] b = new byte[4];
+    	b[0] = (byte)((rgb & 0x00ff0000) >> 16);
+    	b[1] = (byte)((rgb & 0x0000ff00) >> 8);
+    	b[2] = (byte)(rgb & 0x000000ff);
+    	b[3] = (byte)((rgb & 0xff000000) >> 24);
+    	return b;
+    }
+    
+    /**
+     * Descompone un entero que representa un ARGB en sus 4 valores byte
+     * Obtiene un array de 4 elementos donde el elemento 0 es el Rojo, el 1 es el
+     * verde, el 2 el azul y el 3 el alpha.
+     * @param rgb Entero con el valor ARGB a descomponer;
+     * @return
+     */
+    public static int[] getARGBFromIntToIntArray(int rgb){
+    	int[] i = new int[4];
+    	i[0] = (((rgb & 0x00ff0000) >> 16) & 0xff);
+    	i[1] = (((rgb & 0x0000ff00) >> 8) & 0xff);
+    	i[2] = ((rgb & 0x000000ff) & 0xff);
+    	i[3] = (((rgb & 0xff000000) >> 24) & 0xff);
+    	return i;
+    }
+    
+    /**
+     * Obtiene un entero con los valores ARGB pasados por parámetro
+     * @param a Valor de alpha
+     * @param r Valor del rojo
+     * @param g Valor del verde
+     * @param b Valor del azul
+     * @return entero con la mezcla de valores
+     */
+    public static int getIntFromARGB(int a, int r, int g, int b){
+    	  return (((a & 0xff) << 24) + ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff));
+    }
+    
+    //---------------------------------------------------------------
+    //CONVERSIÓN DE COORDENADAS
+    
+    /**
+     * Convierte una ventana en coordenadas del mundo real a sus coordenadas relativas en pixels teniendo
+     * en cuenta que la coordenada superior izquierda es 0,0 y la inferior derecha es maxX y maY
+     * @param extent Extent de la imagen original
+     * @param widthPx Ancho en pixeles de la imagen original
+     * @param heightPx Alto en pixeles de la imagen original
+     * @param window Ventana en coordenadas reales a transportar a coordenadas pixel
+     * @return Ventana en coordenadas pixel
+     */
+    public static Rectangle2D getPxRectFromMapRect(Rectangle2D extent, double widthPx, double heightPx, Rectangle2D window){
+    	double widthWC = extent.getWidth();
+		double heightWC = extent.getHeight();
+		
+		double wWindowWC = Math.abs(window.getMaxX() - window.getMinX());
+   		double hWindowWC = Math.abs(window.getMaxY() - window.getMinY());
+   		
+   		double wWindowPx = ((wWindowWC * widthPx) /  widthWC);
+   		double hWindowPx = ((hWindowWC * heightPx) /  heightWC);
+   		
+   		double initDistanceX = Math.abs(window.getMinX() - extent.getMinX());
+   		double initDistanceY = Math.abs(window.getMaxY() - extent.getMaxY());
+   		
+   		double initPxX = ((initDistanceX * widthPx) /  widthWC);
+   		double initPxY = ((initDistanceY * heightPx) /  heightWC);
+   		
+   		Rectangle2D pxRec = new Rectangle2D.Double(	initPxX, 
+   													initPxY,
+   													wWindowPx,
+   													hWindowPx); 
+   		return pxRec;
+    }
+    
+    /**
+     * Convierte una ventana en coordenadas del mundo real a sus coordenadas relativas en pixels teniendo
+     * en cuenta que la coordenada superior izquierda es 0,0 y la inferior derecha es maxX y maY
+     * @param extent Extent de la imagen original
+     * @param widthPx Ancho en pixeles de la imagen original
+     * @param heightPx Alto en pixeles de la imagen original
+     * @param window Ventana en coordenadas reales a transportar a coordenadas pixel
+     * @return Ventana en coordenadas pixel
+     */
+    public static Rectangle2D getMapRectFromPxRect(Rectangle2D extent, double widthPx, double heightPx, Rectangle2D pxWindow){
+   		double wWindowWC = ((pxWindow.getWidth() * extent.getWidth()) /  widthPx);
+   		double hWindowWC = ((pxWindow.getHeight() * extent.getHeight()) /  heightPx);
+   		
+   		double initWCX = extent.getMinX() + ((pxWindow.getMinX() * extent.getWidth()) /  widthPx);
+   		double initWCY = extent.getMaxY() - ((pxWindow.getMinY() * extent.getHeight()) /  heightPx);
+   		
+   		Rectangle2D mapRec = new Rectangle2D.Double(initWCX, 
+   													initWCY - hWindowWC,
+   													wWindowWC,
+   													hWindowWC); 
+   		return mapRec;
+    }
+    
+    /**
+     * Convierte un punto en coordenadas del mundo a coordenadas pixel
+     * @param p Punto a convertir
+     * @param ext Extent completo de la imagen
+     * @return Punto en coordenadas pixel
+     */
+    public static Point2D worldPointToRaster(Point2D p, Extent ext, int pxWidth, int pxHeight) { 
+    	double x = p.getX() - ext.getMin().getX();
+    	double y = p.getY() - ext.getMin().getY();
+    	int pxX = (int)((x * pxWidth) / ext.width());
+    	int pxY = (int)((y * pxHeight) / ext.height());
+    	return new Point2D.Double(pxX, pxY);
+    }
+    
+    /**
+     * Ajusta la extensión pasada por parámetro a los valores máximos y mínimos de la 
+     * imagen. Esto sirve para que la petición al driver nunca sobrepase los límites 
+     * de la imagen tratada aunque la vista donde se dibuje sea de mayor tamaño.
+     * 
+     * @param imgExt Extent completo de la vista donde se va a dibujar.
+     * @param extToAdj Extent a ajustar.
+     * @return adjustedExtent Extent ajustado a máximos y mínimos
+     */
+    public static Extent calculateAdjustedView(Extent extToAdj, Extent imgExt) { 
+        double vx = extToAdj.minX();
+        double vy = extToAdj.minY();
+        double vx2 = extToAdj.maxX();
+        double vy2 = extToAdj.maxY();
+
+        if (extToAdj.minX() < imgExt.minX())
+            vx = imgExt.minX();
+        
+        if (extToAdj.minY() < imgExt.minY()) 
+            vy = imgExt.minY();
+        
+        if (extToAdj.maxX() > imgExt.maxX()) 
+            vx2 = imgExt.maxX();
+        
+        if (extToAdj.maxY() > imgExt.maxY())
+            vy2 = imgExt.maxY();
+        
+        Extent adjustedExtent = new Extent(vx, vy, vx2, vy2);
+        return adjustedExtent;
+    }
+    
+    //---------------------------------------------------------------
+    //TRATAMIENTO DE FICHEROS
+    
+    /**
+     * Copia de ficheros
+     * @param pathOrig Ruta de origen
+     * @param pathDst Ruta de destino.
+     */
+    public static void copyFile(String pathOrig, String pathDst) 
+    	throws FileNotFoundException, IOException{
+    	 InputStream in;
+    	 OutputStream out;
+    	 
+    	 if(pathOrig == null || pathDst == null){
+    		 System.err.println("Error en path");
+    		 return;
+    	 }
+    	 
+    	 File orig = new File(pathOrig);
+    	 if(!orig.exists() || !orig.isFile() || !orig.canRead()){
+    		 System.err.println("Error en fichero de origen");
+    		 return;
+    	 }
+    	 
+    	 File dest = new File(pathDst);
+    	 String file = pathOrig.substring(pathOrig.lastIndexOf(File.separator), pathOrig.length());
+    	 if(dest.isDirectory())
+    		 pathDst += file;
+    	
+    	 in = new FileInputStream(pathOrig);
+    	 out = new FileOutputStream(pathDst);
+    	
+    	 byte[] buf = new byte[1024];
+    	 int len;
+    	 
+    	 while ((len = in.read(buf)) > 0)
+			out.write(buf, 0, len);
+		
+    	 in.close();
+    	 out.close();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/Utilities.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/ColorSpaceConversion.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/ColorSpaceConversion.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/ColorSpaceConversion.java	(revision 10281)
@@ -0,0 +1,230 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ * 
+ * Copyright (C) 2004-5. 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ * 
+ * cresques@gmail.com
+ */
+package org.cresques.util;
+
+
+
+/**
+ *  
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class ColorSpaceConversion {
+	public static int H = 0, R = 0;
+	public static int S = 1, G = 1;
+	public static int L = 2, B = 2;
+
+	
+	/**
+	 * Convierte HSL a RGB
+	 * @param h hue
+	 * @param s saturation
+	 * @param l ligthness
+	 * @return
+	 */
+	public static int[] HSLtoRGB(int h, int s, int i){
+		double   red;                   /* the red band output                       */
+		double   red255;                /* the red band output                       */
+		double   green;                 /* the green band output                     */
+		double   green255;              /* the green band output                     */
+		double   blue;                  /* the blue band output                      */
+		double   blue255;               /* the blue band output                      */
+		double   m1;                    /* value used for determining RGB            */
+		double   m2;                    /* value used for determining RGB            */
+		double   scalei;                /* intensity value                           */
+		double   scales;                /* saturation value                          */
+		double   hue;                   /* hue                                       */
+		double   savehue;               /* save the hue for future processing        */
+		int[]   res = new int[3];
+		 
+		if(h == s && h == 0){
+			res[0] = res[1] = res[2] = i;
+			return res;
+		}
+				
+		red = green = blue = 0.0;
+		scalei = (double) (i / 255.0);
+		scales = (double) (s / 255.0);
+		m2 = 0.0;
+		
+		if (scalei <= 0.50)
+			m2 = scalei*(1.0 + scales);
+		else if (scalei > 0.50)
+		    m2 = scalei+scales-(scalei*scales);
+		m1 = 2.0 * scalei - m2;
+		 
+		hue = (double) 360.0 * h / 255.0;
+		 
+		if (scales == 0.0){
+		  if (hue == -1.0){
+		    red = scalei;
+		    green = scalei;
+		    blue = scalei;
+		  }
+		}else{
+		   savehue = hue + 120.0;
+		   if (savehue > 360.0)
+		      savehue -= 360.0;
+		   if (savehue < 0.0)
+		      savehue += 360.0;
+		   if (savehue < 60.0)
+		      red = m1 + (m2-m1) * savehue/60.0;
+		   else if (savehue < 180.0)
+		          red = m2;
+		        else if (savehue < 240.0)
+		          red = m1 + (m2-m1) * (240.0-savehue)/60.0;
+		        else
+		          red = m1;
+		 
+		   savehue = hue;
+		   if (savehue > 360.0)
+		     savehue -= 360.0;
+		   if (savehue < 0.0)
+		      savehue += 360.0;
+		   if (savehue < 60.0)
+		      green = m1 + (m2-m1) * savehue/60.0;
+		   else if (savehue < 180.0)
+		      green = m2;
+		   else if (savehue < 240.0)
+		      green = m1 + (m2-m1) * (240.0-savehue)/60.0;
+		   else
+		      green = m1;
+		 
+		   
+		   savehue = hue - 120.0;
+		   if (savehue > 360.0)
+		      savehue -= 360.0;
+		   if (savehue < 0.0)
+		      savehue += 360.0;
+		   if (savehue < 60.0)
+		      blue = m1 + (m2-m1) * savehue/60.0;
+		   else if (savehue < 180.0)
+		      blue = m2;
+		   else if (savehue < 240.0)
+		      blue = m1 + (m2-m1) * (240.0-savehue)/60.0;
+		   else
+		      blue = m1;
+		}
+		 
+		red255 = red*255.0;
+		green255 = green*255.0;
+		blue255 = blue*255.0;
+		if (red255 > 255.0)
+		   red = 255.0;
+		else
+		   red = red255;
+		if (green255 > 255.0)
+		   green = 255.0;
+		else
+		   green = green255;
+		if (blue255 > 255.0)
+		   blue = 255.0;
+		else
+		   blue = blue255;
+		 
+		if (red   > 254.5) red   = 254.5;
+		if (red   <   0.0) red   =   0.0;
+		if (green > 254.5) green = 254.5;
+		if (green <   0.0) green =   0.0;
+		if (blue  > 254.5) blue  = 254.5;
+		if (blue  <   0.0) blue  =   0.0;
+		 
+		res[0] = (int) (red + 0.5);
+		res[1] = (int) (green +0.5);
+		res[2] = (int) (blue + 0.5);
+		return res;
+	}
+	
+	/**
+	 * Convierte RGB a HSL
+	 * @param r red
+	 * @param g green
+	 * @param b blue
+	 * @return
+	 */
+	public static double[] RGBtoHSL(int rojo, int verde, int azul){
+		double scaler, scaleg, scaleb;
+		double sat;
+		double red, green, blue;
+		double low, high, intens;
+		double   hue=0.0;
+		double[] res1 = new double[3];
+		
+		scaler = (double) (rojo / 255.0);
+	    scaleg = (double) (verde / 255.0);
+	    scaleb = (double) (azul / 255.0);
+	  	 
+	    high = scaler;
+	    
+	    if (scaleg > high)
+	    	high = scaleg;
+	    if (scaleb > high)
+	    	high = scaleb;
+	    low = scaler;
+	    if (scaleg < low)
+	    	low = scaleg;
+	    if (scaleb < low)
+	    	low = scaleb;
+	    
+	    intens = ((high + low) / 2.0);
+	    if (high == low){
+		  sat = 0.0;
+		  hue = 0.0;
+		  res1[0] = (double) hue;
+		  res1[2] = (double) intens;
+		  res1[1] = (double) sat;
+	    }else if (high != low){
+		  if (intens <= 0.5)
+		    sat = (high-low)/(high+low);
+		  else
+		    sat = (high-low)/(2 - high - low);
+		   
+			red = (high-scaler)/(high-low);
+			green = (high-scaleg)/(high-low);
+			blue =(high-scaleb)/(high-low);
+						
+			if (scaler == high)
+			    hue = blue - green;
+			else
+			  if (scaleg == high)
+			   hue = 2 + red - blue;
+			  else
+			    if (scaleb == high)
+			    	hue = 4 + green - red;
+			  
+			hue *= 60.0;
+			
+			if (hue < 0.0)
+			 hue += 360.0;
+			 
+			//res[0] = (byte)(255.0 * hue / 360.0 + 0.5);
+			//res[1] = (byte) (intens*255. + 0.5);
+			//res[2] = (byte) (sat*255. + 0.5);
+			res1[0] = (double)(hue);
+			res1[2] = (double) (intens);
+			res1[1] = (double) (sat);
+	    }
+		return res1;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/ColorSpaceConversion.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/QuickSort.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/QuickSort.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/QuickSort.java	(revision 10281)
@@ -0,0 +1,97 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.util;
+
+
+/**
+ * Ordenación de los elementos de un vector
+ * @author Robert Sedgewick and Kevin Wayne
+ */
+public class QuickSort {
+    private long comparisons = 0;
+    private long exchanges = 0;
+
+    /***********************************************************************
+     *  Quicksort code from Sedgewick 7.1, 7.2.
+     ***********************************************************************/
+    public void quicksort(int[] a) {
+        quicksort(a, 0, a.length - 1);
+    }
+
+    public void quicksort(int[] a, int left, int right) {
+        if (right <= left) {
+            return;
+        }
+
+        int i = partition(a, left, right);
+        quicksort(a, left, i - 1);
+        quicksort(a, i + 1, right);
+    }
+
+    private int partition(int[] a, int left, int right) {
+        int i = left - 1;
+        int j = right;
+
+        while (true) {
+            // find item on left to swap
+            while (less(a[++i], a[right]))
+                ;
+
+            // find item on right to swap
+            while (less(a[right], a[--j]))
+
+                if (j == left) {
+                    break;
+                }
+
+            // check if pointers cross
+            if (i >= j) {
+                break;
+            }
+
+            exch(a, i, j);
+        }
+
+        // swap with partition element
+        exch(a, i, right);
+
+        return i;
+    }
+
+    // is x < y ?
+    private boolean less(int x, int y) {
+        comparisons++;
+
+        return (x < y);
+    }
+
+    // exchange a[i] and a[j]
+    private void exch(int[] a, int i, int j) {
+        exchanges++;
+
+        int swap = a[i];
+        a[i] = a[j];
+        a[j] = swap;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/util/QuickSort.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_fr.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_fr.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_fr.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_fr.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_fr.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_de.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_de.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_de.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_de.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_de.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_eu.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_eu.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_eu.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_eu.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_eu.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_it.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_it.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_it.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_it.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_it.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text.properties	(revision 10281)
@@ -0,0 +1,64 @@
+#text.properties
+aceptar=Aceptar
+activar=Activar
+acumulado=Acumulado
+alto=Alto
+ancho=Ancho
+ancho_x_alto=Ancho x Alto
+añadir_banda=Añadir banda
+aplicar=Aplicar
+banda=Banda
+bandas=Bandas
+bicubico=Bicúbico
+bilinear=Bilinear
+brightness=Brillo
+b_splines=B-Spline
+calculando=Calculando
+cancelar=Cancelar
+celda=Celda
+contrast=Contraste
+contraer=Contraer
+comparativo=Comparativo
+compute_minmax=Calcular Mínimo-Máximo
+coordenadas_pixel=Coordenadas Pixel
+coordenadas_reales=Coordenadas Reales
+crear_tabla=Crear Tabla
+crear_1_capa_por_banda=Crear una capa por banda
+cuadratico=Cuadrático
+datos_visualizados=Datos visualizados
+distancia_inversa=Distancia Inversa
+emhancement=Realce
+expandir=Expandir
+extraer=Extraer
+first_derivative=Primera Derivada
+frei_chen=Frei-Chen
+fullExtent=Extent completo de la capa raster
+imagen_completa=Completo
+inf_der=Inf. Der.
+interpolar=Interpolar valores
+kernel_size=Tamaño de ventana
+limpiar=Limpiar
+maximo=Máximo
+media=Media
+minimo=Mínimo
+nombre=Nombre
+nombre_paleta=Nombre de la Tabla
+no_acumulado=No acumulado
+origen=Origen
+predefinidas=Tablas predefinidas
+resolucion_espacial=Resolución espacial
+seleccion_bandas=Selección de Bandas
+select_color=Selección de color
+select_tool=Seleccionar desde la vista
+sup_izq=Sup. Izq.
+tamanyo_celda=Tamaño de celda
+tail_trim=Recorte de Colas
+tipo=Tipo
+tipo_calculo=Tipo de Cálculo
+transparency=Transparencia
+todas=Todas
+umbral=Umbral
+umbralizar=Umbralizar
+vecino_+_proximo=Vecino más próximo
+vista=Vista
+vista_datasource=Extensión de la vista

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_en.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_en.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_en.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_en.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_en.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_ca.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_ca.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_ca.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_ca.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_ca.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_cs.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_cs.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_cs.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_cs.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_cs.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_pt_br.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_pt_br.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_pt_br.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_pt_br.properties

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/translations/text_pt_br.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStack.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStack.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStack.java	(revision 10281)
@@ -0,0 +1,468 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+import java.awt.Image;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.px.Extent;
+
+
+/**
+ * Esta clase representa la pila de filtros que debe ser manejada desde el
+ * RasterFilterStackManager.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class RasterFilterStack {
+    private Image 			image = null;
+    private RasterBuf 		rasterBuf = null;
+    private RasterFilter 	rasterFilter = null;
+    private int[] 			order = null;
+    private Statistic 	stats = null;
+    private Vector			stack = new Vector();
+    private int 			typeFilter = -1;
+    private ViewPortData	viewPortData = null;
+    private Extent			extent = null;
+    private int[]			stepX = null;
+    private int[]			stepY = null;
+    
+    /**
+     * Constructor
+     * @param stats
+     */
+    public RasterFilterStack(Statistic stats) {
+        this.stats = stats;
+    }
+
+    /**
+     * Resetea el flag de temporalidad de los filtros de la pila.
+     * Esto equivale a fijar los filtros que ya existen en la pila. A partir de
+     * ese momento los filtros que se introduzcan podrán ser eliminados de golpe
+     * llamando a la función deleteTempFilters
+     */
+    public void resetTempFilters() {
+        for (int i = stack.size() - 1; i >= 0; i--)
+            ((Filter) stack.get(i)).tmp = false;
+    }
+
+    /**
+     * Elimina los filtros temporales, es decir, todos los filtros introducidos desde
+     * el último resetTempFilters que se ha realizado.
+     */
+    public void deleteTempFilters() {
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            if (((Filter) stack.get(i)).tmp) {
+                stack.remove(i);
+            }
+        }
+
+        sort();
+    }
+
+    /**
+     * Añade un filtro a la pila
+     * @param type        Tipo de filtro
+     * @param filter        filtro añadido
+     */
+    public void addFilter(int type, RasterFilter filter) {
+        stack.add(new Filter(type, filter));
+        this.sort();
+    }
+
+    /**
+     * Elimina el último filtro de la pila
+     */
+    public void removeFilter() {
+        stack.remove(stack.size() - 1);
+    }
+
+    /**
+     * Asigna el tipo filtro
+     * @param type
+     */
+    public void setDataTypeInFilter(int type) {
+        this.typeFilter = type;
+    }
+
+    /**
+     * Devuelve el tipo de dato de retorno al aplicar la pila de filtros
+     * @return
+     */
+    public int getOutDataType() {
+        if ((image != null) && (rasterBuf == null)) {
+            return RasterBuf.TYPE_IMAGE;
+        } else {
+            return rasterBuf.getDataType();
+        }
+    }
+
+    /**
+     * Devuelve el raster o image resultado de la aplicacion de la pila de filtros
+     * @return
+     */
+    public Object getResult() {
+        if ((image != null) && (rasterBuf == null)) {
+            return image;
+        } else {
+            return rasterBuf;
+        }
+    }
+
+    /**
+     * Devuelve true si typeA está por encima de typeB en la pila y false si no lo está
+     * @param typeA        Tipo de filtro
+     * @param typeB Tipo de filtro
+     * @return
+     */
+    private boolean isOnTop(int typeA, int typeB) {
+        int posA = -1;
+        int posB = -1;
+
+        for (int i = 0; i < order.length; i++) {
+            if (order[i] == typeA) {
+                posA = i;
+            }
+
+            if (order[i] == typeB) {
+                posB = i;
+            }
+
+            if ((posA != -1) && (posB != -1)) {
+                break;
+            }
+        }
+
+        if (posA < posB) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Dado un tipo de filtro calcula a partir de la pila en que posición está situado y
+     * obtiene el tipo de dato de la salida anterior. Esto le dirá al cliente de que tipo
+     * es el filtro que tiene que introducir.
+     * @param type
+     */
+    public int getDataTypeInFilter(int type) {
+        for (int i = 0; i < stack.size(); i++) {
+            if (isOnTop(((Filter) stack.get(i)).type, type)) {
+                return ((Filter) stack.get(i)).filter.getOutRasterDataType();
+            }
+        }
+                
+        return this.typeFilter;
+    }
+
+    /**
+     * Asigna el vector para la ordenación por tipos
+     * @param order
+     */
+    public void setOrder(int[] order) {
+        this.order = order;
+    }
+
+    /**
+     * Ordena los filtros en el orden establecido por el Manager
+     */
+    public void sort() {
+        Vector aux = new Vector();
+
+        for (int norden = order.length - 1; norden >= 0; norden--) {
+            for (int i = stack.size() - 1; i >= 0; i--) {
+                if (((Filter) stack.get(i)).type == order[norden]) {
+                    aux.add(stack.get(i));
+                }
+            }
+        }
+
+        stack = aux;
+        aux = null;
+    }
+
+    /**
+     * Elimina los filtros de la pila de un determinado tipo
+     * @param type        Tipo de filtro a eliminar
+     */
+    public void removeFilter(int type) {
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            if (((Filter) stack.get(i)).type == type) {
+                stack.remove(i);
+            }
+        }
+    }
+
+    /**
+     * Elimina un filtro concreto de la pila
+     * @param type
+     */
+    public void removeFilter(RasterFilter filter) {
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            if (((Filter) stack.get(i)).filter.equals(filter)) {
+                stack.remove(i);
+            }
+        }
+    }
+
+    /**
+     * Obtiene la cantidad de filtros en la pila
+     * @return Número de filtros apilados
+     */
+    public int lenght() {
+        return stack.size();
+    }
+
+    /**
+     * Obtiene el filtro apilado de la posición i
+     * @param i        Posición a acceder en la pila
+     * @return        Filtro
+     */
+    public RasterFilter get(int i) {
+        return ((Filter) stack.get(i)).filter;
+    }
+    
+    /**
+     * Obtiene el filtro apilado que corresponde con el tipo
+     * @param type	Tipo de filtro
+     * @return      Filtro en caso de que exista un filtro apilado de ese tipo
+     * o null si no hay ninguno.
+     */
+    public RasterFilter getByType(int type) {
+    	for(int i=0;i<lenght();i++){
+    		if(((Filter) stack.get(i)).type == type)
+    			return ((Filter) stack.get(i)).filter;
+    	}
+        return null;
+    }
+
+    /**
+     * Obtiene el tipo del filtro de la pila de la posición i
+     * @param i Posición a acceder en la pila
+     * @return tipo de filtro
+     */
+    public int getType(int i) {
+        return ((Filter) stack.get(i)).type;
+    }
+
+    /**
+     * Elimina todos los filtros de la pila
+     */
+    public void clear() {
+        stack.removeAllElements();
+    }
+
+    /**
+     * Sustituye un filtro de una posición de la pila por otro
+     * @param filter
+     * @param i
+     */
+    public void replace(RasterFilter filter, int i, int type) {
+        ((Filter) stack.get(i)).filter = filter;
+        ((Filter) stack.get(i)).type = type;
+    }
+
+    /**
+     * Asigna el raster de entrada inicial
+     * @param raster
+     */
+    public void setInitRasterBuf(Object raster) {
+        if (raster instanceof RasterBuf) {
+            rasterBuf = (RasterBuf) raster;
+            this.typeFilter = rasterBuf.getDataType();
+        }
+
+        if (raster instanceof Image) {
+            image = (Image) raster;
+            this.typeFilter = RasterBuf.TYPE_IMAGE;
+        }
+    }
+
+    /**
+     * Devuelve el tipo de datos inicial de la pila
+     * @return Tipo de dato del raster inicial
+     */
+    public int getInitDataType() {
+        return typeFilter;
+    }
+
+    /**
+     * Método que devuelve true si el tipo de filtro pasado por parámetro está en la
+     * pila y false si no lo está.
+     * @param type        Tipo de parámetro a comprobar
+     * @return true si está en la pila y false si no lo está
+     */
+    public boolean isActive(int type) {
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            if (((Filter) stack.get(i)).type == type) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Método que devuelve true si el tipo de filtro pasado por parámetro está en la
+     * pila y false si no lo está.
+     * @param filter        Tipo de filtro a comprobar
+     * @return true si está en la pila y false si no lo está
+     */
+    public boolean isActive(RasterFilter filter) {
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            if (((Filter) stack.get(i)).filter.equals(filter)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Obtiene el objeto Statistic
+     * @return
+     */
+    public Statistic getStats() {
+        return this.stats;
+    }
+
+    /**
+     * Aplica los filtros de la pila sobre el buffer correspondiente
+     * @param dataType
+     */
+    private void executeFilterByDataType(int dataType) {
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            RasterFilter filter = ((Filter) stack.get(i)).filter;
+
+            //System.err.println("SACANDO FILTRO "+i+"  "+filter.toString());
+            if (filter.getInRasterDataType() == RasterBuf.TYPE_IMAGE) {
+                filter.addParam("raster", image);
+            } else {
+                filter.addParam("raster", rasterBuf);
+            }
+            
+            filter.setExtent(extent);
+            filter.setViewPortData(viewPortData);
+            filter.setStep(stepX, stepY);
+            filter.execute();
+
+            if (filter.getResult("stats") != null) {
+                this.stats = (Statistic) filter.getResult("stats");
+            }
+
+            if (filter.getOutRasterDataType() == RasterBuf.TYPE_IMAGE) {
+                if (filter.getResult("raster") != null) {
+                    this.image = (Image) filter.getResult("raster");
+                    this.rasterBuf = null;
+                }
+            } else {
+                if (filter.getResult("raster") != null) {
+                    this.rasterBuf = (RasterBuf) filter.getResult("raster");
+                    this.image = null;
+                }
+            }
+        }
+    }
+
+    /**
+     * Aplica los filtros sobre un Image
+     * @param image        Buffer inicial sobre el que se aplican los filtros
+     */
+    public void execute(Image image) {
+        this.image = image;
+        executeFilterByDataType(RasterBuf.TYPE_IMAGE);
+    }
+
+    /**
+     * Aplica los filtros sobre un RasterBuf
+     * @param rasterBuf        Buffer inicial sobre el que se aplican los filtros
+     */
+    public RasterBuf execute(RasterBuf rasterBuf) {
+        this.rasterBuf = rasterBuf;
+        //executeFilterByDataType(RasterBuf.TYPE_SHORT);
+        executeFilterByDataType(rasterBuf.getDataType());
+        return this.rasterBuf;
+    }
+	
+    /**
+     *Muestra el contenido de la pila de filtros para depuración
+     */
+    public void show() {
+        System.out.println("--------------------------------------------");
+
+        for (int i = stack.size() - 1; i >= 0; i--) {
+            System.out.println("FILTRO:" + i + " TIPO:" +
+                               ((Filter) stack.get(i)).type + " TEMP:" +
+                               ((Filter) stack.get(i)).tmp + " FIL:" +
+                               ((Filter) stack.get(i)).filter.toString());
+        }
+    }
+
+    /**
+     * Un RasterFilterStack almacena objetos Filter que representan a un filtro. Esta
+     * clase contiene la información necesaria para el mantenimiento de de la pila y el
+     * RasterFilter para cuando se aplica la pila sobre el raster de entrada.
+     * @author Nacho Brodin <brodin_ign@gva.es>
+     */
+    class Filter {
+        public int type = 0; //Tipo de filtro. Ctes en RasterFilterStackManager
+        public boolean tmp = true; //Flag de temporalidad
+        public RasterFilter filter = null; //Filtro
+
+        public Filter(int type, RasterFilter filter) {
+            this.filter = filter;
+            this.type = type;
+        }
+    }
+	
+	/**
+	 * @param viewPortData The viewPortData to set.
+	 */
+	public void setViewPortData(ViewPortData viewPortData) {
+		this.viewPortData = viewPortData;
+	}
+	
+	/**
+	 * @param extent The extent to set.
+	 */
+	public void setExtent(Extent extent) {
+		this.extent = extent;
+	}
+	
+	/**
+	 * Asigna el valor del paso 
+	 * @param stepx paso en X
+	 * @param stepy paso en Y
+	 */
+	public void setStep(int[] stepX, int[] stepY){
+		this.stepX = stepX;
+		this.stepY = stepY;
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStack.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFilter.java	(revision 10281)
@@ -0,0 +1,73 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.convolution;
+
+import java.awt.Image;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Clase base para los filtros de convolución.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public abstract class ConvolutionFilter extends RasterFilter {
+	protected Kernel kernel = null;
+	protected int umbral = 0;
+	protected Image  imageResult = null;
+	protected RasterBuf rasterResult = null;
+	
+	public ConvolutionFilter() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public ConvolutionFilter(String fName) {
+		super();
+		super.filterName = fName;
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub	
+	}
+
+	public void pre() {
+		kernel = (Kernel) params.get("kernel");
+		if (params.get("umbral")!=null)
+			umbral = ((Integer)params.get("umbral")).intValue();
+		else this.umbral = 0;
+	}
+
+	/**
+	 * Obtiene el kernel
+	 * @return kernel asociado al filtro
+	 */
+	public Kernel getKernel() {
+		return kernel;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionShortFilter.java	(revision 10281)
@@ -0,0 +1,242 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.convolution;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de Convolución que se aplica a un RasterBuf de tipo Short. 
+ * Toma como entrada la imagen, el kernel en que se base la convolución 
+ * y el umbral (cero para no umbralizar).
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+public class ConvolutionShortFilter extends ConvolutionFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public ConvolutionShortFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public ConvolutionShortFilter(String fName) {
+		super(fName);
+	}
+	
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+
+	public void process(int col, int line) {
+		short[] pxOut = new short[4];
+		short[] px = new short[4];
+		int ladoVentana = kernel.getLado();
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemShort(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemShort(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				pxOut[0]= (short)kernel.convolution(kernelRGB[0]);
+				pxOut[1]= (short)kernel.convolution(kernelRGB[1]);
+				pxOut[2]= (short)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemShort(line, col,pxOut);
+		}
+		else rasterResult.setElemShort(line, col,pxOut);
+		
+	}
+
+	
+	public void processSuperSampling(int col, int line) {
+		short[] px = new short[4];
+		short[] pxOut = new short[4];
+		int ladoVentana = kernel.getLado();
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemShort(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+				pxOut[0]= (short)kernel.convolution(kernelRGB[0]);
+				pxOut[1]= (short)kernel.convolution(kernelRGB[1]);
+				pxOut[2]= (short)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemShort(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemShort(j, i,px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+			
+			int k,indiceX,indiceY,origenX,origenY;
+			short[] 		px = new short[4];
+			int semiLado = (ladoVentana-1)>>1;
+			int offsetX=0;
+			int offsetY=0;
+			
+			Kernel kernelRGB[] = null;
+			
+			// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+			// Me situo en la esquina superior izquierda del "kernel"
+			if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+				
+				// Calcular el alcance del kernel cuyo centro es (x,y)
+				for (int i=0;i<semiLado;i++){
+					offsetX=offsetX+stepX[contX+i+1];
+					offsetY=offsetY+stepY[contY+i+1];
+				}
+				if((x+offsetX<width)&&(y+offsetY<height)){
+					
+					double ventanaR[][] = new double[ladoVentana][ladoVentana];
+					double ventanaG[][] = new double[ladoVentana][ladoVentana];
+					double ventanaB[][] = new double[ladoVentana][ladoVentana];
+					kernelRGB = new Kernel[3];
+					
+					origenX=x;
+					origenY=y;
+					for (int i=0;i<semiLado;i++){
+						origenX=origenX-stepX[contX-i];
+						origenY=origenY-stepY[contY-i];	
+					}
+					//Recorro el kernel según los step
+					k=0;
+					indiceX=origenX;
+					for (int i=-semiLado;i<=semiLado;i++){
+						indiceY=origenY;
+						for(int j=-semiLado;j<=semiLado;j++){	
+							raster.getElemShort(indiceY,indiceX,px);	
+							ventanaR[i+semiLado][j+semiLado] =px[0];
+							ventanaG[i+semiLado][j+semiLado] =px[1];
+							ventanaB[i+semiLado][j+semiLado] =px[2];
+							indiceY=indiceY+stepY[contY+j+1];
+							k++;
+						}
+						indiceX=indiceX+stepX[contX+i+1];
+					}
+					//**************************************************************************************************
+					kernelRGB[0]= new Kernel(ventanaR);
+					kernelRGB[1]= new Kernel(ventanaG);
+					kernelRGB[2]= new Kernel(ventanaB);
+				}
+			}
+			return kernelRGB;
+		}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionShortFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionImageFilter.java	(revision 10281)
@@ -0,0 +1,259 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+
+package org.cresques.filter.convolution;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Filtro de Convolución que se aplica en la imagen. Toma como entrada la imagen,
+ * el kernel en que se base la convolución y el umbral (cero para no umbralizar).
+ *
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class ConvolutionImageFilter extends ConvolutionFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public ConvolutionImageFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public ConvolutionImageFilter(String fName) {
+		super(fName);
+	}
+	
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.imageResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.image = (Image) params.get("raster");
+		height = image.getHeight(null);
+        width = image.getWidth(null);
+		imageResult = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+		
+		super.pre();
+	}
+
+	public void process(int col, int line) {
+		int px;
+		int outR,outG,outB;
+		int ladoVentana = kernel.getLado();
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		px = ((BufferedImage) image).getRGB(col, line); 
+		int alpha = (px & 0xff000000);       //Extraigo el alpha para mantenerlo.
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					px = ((BufferedImage) image).getRGB(col + i, line + j);
+					ventanaR[i+semiLado][j+semiLado] =(px & 0x00ff0000) >> 16;
+					ventanaG[i+semiLado][j+semiLado] =(px & 0x0000ff00) >> 8;
+					ventanaB[i+semiLado][j+semiLado] =(px & 0x000000ff);
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				outR= (int)kernel.convolution(kernelRGB[0]);
+				outG= (int)kernel.convolution(kernelRGB[1]);
+				outB= (int)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(outR>=umbral)outR=255;
+					else outR=0;
+					if(outG>=umbral)outG=255;
+					else outG=0;
+					if(outB>=umbral)outB=255;
+					else outB=0;
+				}
+				
+				else{
+					if (outR<0) outR=0;
+					else if (outR>255) outR=255;
+					if (outG<0) outG=0;
+					else if (outG>255) outG=255;
+					if (outB<0) outB=0;
+					else if (outB>255) outB=255;
+				}
+				
+			((BufferedImage) imageResult).setRGB(col, line, 	alpha | 
+													((outR << 16) & 0x00ff0000) |
+													((outG << 8) & 0x0000ff00) |
+													(outB & 0x000000ff));
+		}
+		else ((BufferedImage) imageResult).setRGB(col, line, px);
+		
+		
+	}
+
+	public void processSuperSampling(int col, int line) {
+		int px;
+		int outR,outG,outB;
+		int ladoVentana = kernel.getLado();
+
+		Kernel kernelRGB[] = null;
+
+		px = ((BufferedImage) image).getRGB(col, line); 
+		int alpha = (px & 0xff000000);       //Extraigo el alpha para mantenerlo.
+		
+		//		 Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubImage(ladoVentana, col, line);
+		if(kernelRGB!=null)
+		{
+				outR= (int)kernel.convolution(kernelRGB[0]);
+				outG= (int)kernel.convolution(kernelRGB[1]);
+				outB= (int)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(outR>=umbral)outR=255;
+					else outR=0;
+					if(outG>=umbral)outG=255;
+					else outG=0;
+					if(outB>=umbral)outB=255;
+					else outB=0;
+				}
+				
+				else{
+				if (outR<0) outR=0;
+				else if (outR>255) outR=255;
+				if (outG<0) outG=0;
+				else if (outG>255) outG=255;
+				if (outB<0) outB=0;
+				else if (outB>255) outB=255;
+				}
+				
+				 for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+						for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)	
+					((BufferedImage) imageResult).setRGB(j, i, 	alpha | 
+													((outR << 16) & 0x00ff0000) |
+													((outG << 8) & 0x0000ff00) |
+													(outB & 0x000000ff));
+			
+	
+		}
+		else
+			 for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+					for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)	
+				((BufferedImage) imageResult).setRGB(j, i,px);
+		
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	/**
+	 * Obtiene tres ventanas centradas en la coordena (x,y) de tamaño ladoVentana * ladoVentana.
+	 * 
+	 * @return null si la ventana se sale de la imagen.
+	 */
+	public Kernel[] extractSubImage(int ladoVentana,int x,int y){
+		
+		int indiceX,indiceY,origenX,origenY;
+		int px;
+		int semiLado = (ladoVentana-1)>>1;
+		int offsetX=0;
+		int offsetY=0;
+		
+		Kernel kernelRGB[] = null;
+
+		if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			for (int i=0;i<semiLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((contY+1-semiLado>=0) && (x+offsetX<width)&&(y+offsetY<height)){
+				
+				double ventanaR[][] = new double[ladoVentana][ladoVentana];
+				double ventanaG[][] = new double[ladoVentana][ladoVentana];
+				double ventanaB[][] = new double[ladoVentana][ladoVentana];
+				kernelRGB = new Kernel[3];
+				
+				origenX=x;
+				origenY=y;
+				
+				kernelRGB = new Kernel[3];
+				for (int i=0;i<semiLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];
+				}
+				//Recorro el kernel según los step
+				indiceX=origenX;
+				for (int i=-semiLado;i<=semiLado;i++){
+					indiceY=origenY;
+					for(int j=-semiLado;j<=semiLado;j++){
+						px = ((BufferedImage) image).getRGB(indiceX, indiceY);
+						ventanaR[i+semiLado][j+semiLado] =(px & 0x00ff0000) >> 16;
+						ventanaG[i+semiLado][j+semiLado] =(px & 0x0000ff00) >> 8;
+						ventanaB[i+semiLado][j+semiLado] =(px & 0x000000ff);
+						indiceY=indiceY+stepY[contY+j+1];
+									
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				kernelRGB[0]= new Kernel(ventanaR);
+				kernelRGB[1]= new Kernel(ventanaG);
+				kernelRGB[2]= new Kernel(ventanaB);
+			}
+		}
+		return kernelRGB;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFloatFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFloatFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFloatFilter.java	(revision 10281)
@@ -0,0 +1,216 @@
+package org.cresques.filter.convolution;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+public class ConvolutionFloatFilter extends ConvolutionFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public ConvolutionFloatFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public ConvolutionFloatFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		float[] pxOut = new float[4];
+		float[] px = new float[4];
+		int ladoVentana = kernel.getLado();
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemFloat(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemFloat(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				pxOut[0]= (float)kernel.convolution(kernelRGB[0]);
+				pxOut[1]= (float)kernel.convolution(kernelRGB[1]);
+				pxOut[2]= (float)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemFloat(line, col,pxOut);
+		}
+		else rasterResult.setElemFloat(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		float[] px = new float[4];
+		float[] pxOut = new float[4];
+		int ladoVentana = kernel.getLado();
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemFloat(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+				pxOut[0]= (float)kernel.convolution(kernelRGB[0]);
+				pxOut[1]= (float)kernel.convolution(kernelRGB[1]);
+				pxOut[2]= (float)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemFloat(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemFloat(j, i,px);
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+		
+		int k,indiceX,indiceY,origenX,origenY;
+		float[] 		px = new float[4];
+		int semiLado = (ladoVentana-1)>>1;
+		int offsetX=0;
+		int offsetY=0;
+		
+		Kernel kernelRGB[] = null;
+		
+		// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+		// Me situo en la esquina superior izquierda del "kernel"
+		if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			for (int i=0;i<semiLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((x+offsetX<width)&&(y+offsetY<height)){
+				
+				double ventanaR[][] = new double[ladoVentana][ladoVentana];
+				double ventanaG[][] = new double[ladoVentana][ladoVentana];
+				double ventanaB[][] = new double[ladoVentana][ladoVentana];
+				kernelRGB = new Kernel[3];
+				
+				origenX=x;
+				origenY=y;
+				for (int i=0;i<semiLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel según los step
+				k=0;
+				indiceX=origenX;
+				for (int i=-semiLado;i<=semiLado;i++){
+					indiceY=origenY;
+					for(int j=-semiLado;j<=semiLado;j++){	
+						raster.getElemFloat(indiceY,indiceX,px);	
+						ventanaR[i+semiLado][j+semiLado] =px[0];
+						ventanaG[i+semiLado][j+semiLado] =px[1];
+						ventanaB[i+semiLado][j+semiLado] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				kernelRGB[0]= new Kernel(ventanaR);
+				kernelRGB[1]= new Kernel(ventanaG);
+				kernelRGB[2]= new Kernel(ventanaB);
+			}
+		}
+		return kernelRGB;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionFloatFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionDoubleFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionDoubleFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionDoubleFilter.java	(revision 10281)
@@ -0,0 +1,216 @@
+package org.cresques.filter.convolution;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+public class ConvolutionDoubleFilter extends ConvolutionFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public ConvolutionDoubleFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public ConvolutionDoubleFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		double[] pxOut = new double[4];
+		double[] px = new double[4];
+		int ladoVentana = kernel.getLado();
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemDouble(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemDouble(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				pxOut[0]= kernel.convolution(kernelRGB[0]);
+				pxOut[1]= kernel.convolution(kernelRGB[1]);
+				pxOut[2]= kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemDouble(line, col,pxOut);
+		}
+		else rasterResult.setElemDouble(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		double[] px = new double[4];
+		double[] pxOut = new double[4];
+		int ladoVentana = kernel.getLado();
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemDouble(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+				pxOut[0]= kernel.convolution(kernelRGB[0]);
+				pxOut[1]= kernel.convolution(kernelRGB[1]);
+				pxOut[2]= kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemDouble(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemDouble(j, i,px);
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+		
+		int k,indiceX,indiceY,origenX,origenY;
+		double[] 		px = new double[4];
+		int semiLado = (ladoVentana-1)>>1;
+		int offsetX=0;
+		int offsetY=0;
+		
+		Kernel kernelRGB[] = null;
+		
+		// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+		// Me situo en la esquina superior izquierda del "kernel"
+		if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			for (int i=0;i<semiLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((x+offsetX<width)&&(y+offsetY<height)){
+				
+				double ventanaR[][] = new double[ladoVentana][ladoVentana];
+				double ventanaG[][] = new double[ladoVentana][ladoVentana];
+				double ventanaB[][] = new double[ladoVentana][ladoVentana];
+				kernelRGB = new Kernel[3];
+				
+				origenX=x;
+				origenY=y;
+				for (int i=0;i<semiLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel según los step
+				k=0;
+				indiceX=origenX;
+				for (int i=-semiLado;i<=semiLado;i++){
+					indiceY=origenY;
+					for(int j=-semiLado;j<=semiLado;j++){	
+						raster.getElemDouble(indiceY,indiceX,px);	
+						ventanaR[i+semiLado][j+semiLado] =px[0];
+						ventanaG[i+semiLado][j+semiLado] =px[1];
+						ventanaB[i+semiLado][j+semiLado] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				kernelRGB[0]= new Kernel(ventanaR);
+				kernelRGB[1]= new Kernel(ventanaG);
+				kernelRGB[2]= new Kernel(ventanaB);
+			}
+		}
+		return kernelRGB;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionDoubleFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionStackManager.java	(revision 10281)
@@ -0,0 +1,188 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.convolution;
+
+import java.util.ArrayList;
+
+import org.cresques.filter.IStackManager;
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.RasterFilter.Kernel;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Gestor de la pila de filtros para el filtro de convolución.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class ConvolutionStackManager implements IStackManager {
+	public final static int				convolution = 11;
+	protected RasterFilterStack 		filterStack = null;
+	private RasterFilterStackManager	filterStackManager = null;
+	private GeoRasterFile[] 			grfList = null;
+
+	public ConvolutionStackManager(RasterFilterStackManager filterStackManager){
+		this.filterStackManager = filterStackManager;
+		this.filterStack = filterStackManager.getFilterStack();
+		filterStackManager.addTypeFilter("convolution", ConvolutionStackManager.convolution, 8);
+	}
+	
+	/**
+	 * Obtiene el valor entero que corresponde al tipo de filtro.
+	 * @param rasterFilter
+	 * @return
+	 */
+	public int getType(RasterFilter rasterFilter){
+		if(rasterFilter instanceof ConvolutionFilter)
+			return ConvolutionStackManager.convolution;
+					
+		return -1;
+	}
+	
+	/**
+	 * Añade un filtro de convolución a la pila de filtros.
+	 * @param kernel Kernel usado en la convolución
+	 * @param umbral Umbral aplicado al resultado de la convolución. Si 0, no umbraliza.
+	 * @param filterName Nombre del filtro.
+	 */
+	public void addConvolutionFilter(RasterFilter.Kernel kernel, int umbral, String filterName){
+	
+		RasterFilter filtro = null;
+		
+		switch(filterStack.getDataTypeInFilter(((Integer)this.filterStackManager.getTypeFilters().get("convolution")).intValue())){
+		case RasterBuf.TYPE_IMAGE:
+			filtro = new ConvolutionImageFilter(filterName);
+			break;
+		case RasterBuf.TYPE_SHORT:
+			filtro = new ConvolutionShortFilter(filterName);
+			break;
+		case RasterBuf.TYPE_USHORT:
+			filtro = new ConvolutionShortFilter(filterName);
+			break;
+		case RasterBuf.TYPE_INT:
+			filtro = new ConvolutionIntegerFilter(filterName);
+			break;
+		case RasterBuf.TYPE_FLOAT:
+			filtro = new ConvolutionFloatFilter(filterName);
+			break;
+		case RasterBuf.TYPE_DOUBLE:
+			filtro = new ConvolutionDoubleFilter(filterName);
+			break;
+		}
+		
+		//Cuando el filtro esta creado, tomamos los valores y lo añadimos a la pila
+		
+		if(filtro != null){
+			filtro.addParam("kernel", kernel);
+			filtro.addParam("umbral",new Integer(umbral));
+			filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("convolution")).intValue(), filtro);
+			filterStackManager.controlTypes();
+		}
+	}
+	
+	public ArrayList getStringsFromStack() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter cf) {
+			
+			if(cf instanceof ConvolutionFilter){
+				filterList.add("filter.convolution.active=true");
+				Kernel ker =((ConvolutionFilter)cf).kernel;
+				ConvolutionFilter convolution = (ConvolutionFilter)cf;
+				String listValues = "";
+				for(int col = 0; col < ker.kernel.length; col ++)
+					for(int fila = 0; fila < ker.kernel[col].length; fila++)
+						listValues += ker.kernel[col][fila]+ " ";
+				filterList.add("filter.convolution.divisor="+ker.getDivisor());
+				filterList.add("filter.convolution.filterName="+convolution.getFilterName());
+				filterList.add("filter.convolution.umbral="+convolution.umbral);
+				filterList.add("filter.convolution.kernel="+listValues);
+			}
+			return filterList;
+	}
+
+	public void createStackFromStrings(ArrayList f, Integer pos) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+	public int createStackFromStrings(ArrayList filters, String fil,
+			GeoRasterFile[] grfList, int filteri) {
+		this.grfList = grfList;
+
+		if((fil.startsWith("filter.convolution.active"))&&
+				(RasterFilterStackManager.getValue(fil).equals("true"))){
+			
+			RasterFilter.Kernel kernel = null;
+			String filterName = null;
+			int umbral = 0;
+			double divisor = 0;
+			double k[][] = null;
+			
+			filters.remove(0);
+		
+			for(int prop = 0; prop < filters.size() ; prop++){	
+				String elem = (String) filters.get(prop);
+				if(elem.startsWith("filter.convolution.filterName")){
+					filterName = RasterFilterStackManager.getValue(elem);
+					filters.remove(prop);
+					prop--;
+				}
+				if(elem.startsWith("filter.convolution.divisor")){
+					divisor = Double.parseDouble(RasterFilterStackManager.getValue(elem));
+					filters.remove(prop);
+					prop--;
+				}
+				if(elem.startsWith("filter.convolution.umbral")){
+					umbral = Integer.parseInt(RasterFilterStackManager.getValue(elem));
+					filters.remove(prop);
+					prop--;
+				}
+				if(elem.startsWith("filter.convolution.kernel")){
+					String listValues = RasterFilterStackManager.getValue(elem);
+					String stringArray[] = listValues.split(" ");
+					int ladoVentana =  (int)Math.sqrt(stringArray.length);
+					k = new double[ladoVentana][ladoVentana];
+					for(int col = 0; col < ladoVentana; col ++)
+						for(int fila = 0; fila < ladoVentana; fila++)
+							k[col][fila]=Double.parseDouble(stringArray[col*fila]);
+					kernel = new Kernel(k,divisor);
+					filters.remove(prop);
+					prop--;
+				}
+			}
+			addConvolutionFilter(kernel,umbral,filterName);
+		}
+	//return filteri;
+		return -1;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionStackManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionIntegerFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionIntegerFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionIntegerFilter.java	(revision 10281)
@@ -0,0 +1,216 @@
+package org.cresques.filter.convolution;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+public class ConvolutionIntegerFilter extends ConvolutionFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public ConvolutionIntegerFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public ConvolutionIntegerFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		int[] pxOut = new int[4];
+		int[] px = new int[4];
+		int ladoVentana = kernel.getLado();
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemInt(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemInt(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				pxOut[0]= (int)kernel.convolution(kernelRGB[0]);
+				pxOut[1]= (int)kernel.convolution(kernelRGB[1]);
+				pxOut[2]= (int)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemInt(line, col,pxOut);
+		}
+		else rasterResult.setElemInt(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		int[] px = new int[4];
+		int[] pxOut = new int[4];
+		int ladoVentana = kernel.getLado();
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemInt(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+				pxOut[0]= (int)kernel.convolution(kernelRGB[0]);
+				pxOut[1]= (int)kernel.convolution(kernelRGB[1]);
+				pxOut[2]= (int)kernel.convolution(kernelRGB[2]);
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemInt(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemInt(j, i,px);
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+		
+		int k,indiceX,indiceY,origenX,origenY;
+		int[] 		px = new int[4];
+		int semiLado = (ladoVentana-1)>>1;
+		int offsetX=0;
+		int offsetY=0;
+		
+		Kernel kernelRGB[] = null;
+		
+		// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+		// Me situo en la esquina superior izquierda del "kernel"
+		if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			for (int i=0;i<semiLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((x+offsetX<width)&&(y+offsetY<height)){
+				
+				double ventanaR[][] = new double[ladoVentana][ladoVentana];
+				double ventanaG[][] = new double[ladoVentana][ladoVentana];
+				double ventanaB[][] = new double[ladoVentana][ladoVentana];
+				kernelRGB = new Kernel[3];
+				
+				origenX=x;
+				origenY=y;
+				for (int i=0;i<semiLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel según los step
+				k=0;
+				indiceX=origenX;
+				for (int i=-semiLado;i<=semiLado;i++){
+					indiceY=origenY;
+					for(int j=-semiLado;j<=semiLado;j++){	
+						raster.getElemInt(indiceY,indiceX,px);	
+						ventanaR[i+semiLado][j+semiLado] =px[0];
+						ventanaG[i+semiLado][j+semiLado] =px[1];
+						ventanaB[i+semiLado][j+semiLado] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				kernelRGB[0]= new Kernel(ventanaR);
+				kernelRGB[1]= new Kernel(ventanaG);
+				kernelRGB[2]= new Kernel(ventanaB);
+			}
+		}
+		return kernelRGB;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/convolution/ConvolutionIntegerFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/SimplePixelFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/SimplePixelFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/SimplePixelFilter.java	(revision 10281)
@@ -0,0 +1,49 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class SimplePixelFilter extends PixelFilter {
+    public SimplePixelFilter(int alpha) {
+        super(alpha);
+    }
+
+    public void filterLine(int[] pRGBArray) {
+        for (int i = 0; i < pRGBArray.length; i++) {
+            if (debug) {
+                System.out.print("" + i + ":" +
+                                 Integer.toHexString(pRGBArray[i]) + ",");
+            }
+
+            pRGBArray[i] |= orColor;
+        }
+
+        if (debug) {
+            System.out.println("");
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/SimplePixelFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterOperationsRegistrablePanels.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterOperationsRegistrablePanels.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterOperationsRegistrablePanels.java	(revision 10281)
@@ -0,0 +1,56 @@
+/*
+ * Created on 23-mar-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package org.cresques.filter;
+
+import org.cresques.io.GeoRasterFile;
+
+
+/**
+ * Este interface lo implementaran las clases que se registran en propiedades
+ * de raster. Representa a las operaciones que pueden realizar y que deben ser
+ * invocadas desde la libreria de cresques. Cuando las propiedades del raster
+ * ejecutan alguna de estas operaciones recorreran todas las clases que han sido
+ * registradas y ejecutaran para cada una la operación. Si la clase registrada no
+ * necesita hacer nada con esa operación simplemente no la implementará.
+ *  
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public interface IRasterOperationsRegistrablePanels{
+	
+	/**
+	 * Operación de añadir ficheros. El dialogo para añadir bandas se encuentra
+	 * en cresques. Es corriente que haya paneles que necesiten ser informados
+	 * cuando se añaden nuevas bandas. Si es así addFiles debería ser implementado.
+	 * @param files
+	 */
+	public void addFiles(GeoRasterFile[] files);
+	
+	/**
+	 * Operación de eliminar ficheros. El dialogo para eliminar bandas se encuentra
+	 * en cresques. Es corriente que haya paneles que necesiten ser informados
+	 * cuando se eliminan bandas. Si es así removeFile debería ser implementado.
+	 * @param files
+	 */
+	public void removeFile(String file);
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterOperationsRegistrablePanels.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFloatFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFloatFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFloatFilter.java	(revision 10281)
@@ -0,0 +1,80 @@
+package org.cresques.filter.enhancement;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+
+public class LinearEnhancementFloatFilter extends LinearEnhancementFilter {
+
+	private float[] 		px = new float[4];
+	private int 			bandsCnt = 3;
+	
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void process(int col, int line) {
+		 raster.getElemFloat(line, col, px);
+	        px = calcLinearEnhancement(px);
+	        raster.setElemFloat(line, col, px);
+	}
+
+	public void processSuperSampling(int col, int line) {
+		raster.getElemFloat(line, col, px);
+        px = calcLinearEnhancement(px);
+		for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemFloat(i, j, px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+//		ObtenciÃ³n de parÃ¡metros
+        this.raster = (RasterBuf) params.get("raster");
+        this.stats = (Statistic) params.get("stats");
+        this.removeExtrema = ((Boolean) params.get("remove")).booleanValue();
+        this.filename = (String) params.get("filename");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+	}
+	
+	/**
+     * Calculo del realce
+     * @param pt pixel
+     * @return pixel con el calculo de realce aplicado
+     */
+    private float[] calcLinearEnhancement(float[] px){
+    	for (int i = 0; i < bandsCnt; i++) {
+            if (px[i] > (float)maxBandValue[i]) {
+                px[i] = (float)maxBandValue[i];
+            } else if (px[i] < minBandValue[i]) {
+                px[i] = (float)minBandValue[i];
+            }
+
+            px[i] = (int)(((int) ((((double) px[i]) * scale[i]) + offset[i])) & 0xff);
+        }
+    	return px;
+    }
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFloatFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessFilter.java	(revision 10281)
@@ -0,0 +1,53 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.enhancement;
+
+import org.cresques.filter.RasterFilter;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Clase basa para los filtros de brillo.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+
+public abstract class BrightnessFilter extends RasterFilter {
+
+	/**
+	 * Variable para guardar el incremento de brillo que se va a aplicar
+	 */
+	int incrBrillo = 0;
+	
+	
+	public BrightnessFilter(){
+		super();
+		super.filterName = Messages.getText("brightness");
+	}
+	
+	public void pre() {
+		
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyFilter.java	(revision 10281)
@@ -0,0 +1,88 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.cresques.filter.RasterFilter;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Clase base para los filtros de transparencia en sus diferentes tipos
+ * de datos.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public abstract class TransparencyFilter extends RasterFilter {
+    //Parámetros del filtro
+	/**
+	 * Lista de TransparencyRange
+	 */
+	public ArrayList	rangesList = null;
+	
+    /**
+     * Valor de transparencia
+     */
+    public int alpha = 0x10;
+
+    /**
+     * Color en la banda del rojo para la transparencia
+     */
+    public int transparencyColorRed = 0xff;
+
+    /**
+     * Color en la banda del verde para la transparencia
+     */
+    public int transparencyColorGreen = 0xff;
+
+    /**
+     * Color en la banda del azul para la transparencia
+     */
+    public int transparencyColorBlue = 0xff;
+
+    /**
+     * Constructor
+     *
+     */
+    public TransparencyFilter() {
+        super();
+        super.filterName = Messages.getText("transparency");
+    }
+    
+    /**
+     * Obtiene parámetros del filtro desde la tabla Hash
+     */
+    public void pre() {
+        //Obtención de parámetros comunes a todos
+    	rangesList = (ArrayList)params.get("rangesList");
+    	/*for(int i=0;i<rangesList.size();i++)
+    		((TransparencyRange)rangesList.get(i)).show();*/
+        alpha = ((Integer) params.get("alpha")).intValue();
+        transparencyColorRed = ((Integer) params.get("transparencyRed")).intValue();
+        transparencyColorGreen = ((Integer) params.get("transparencyGreen")).intValue();
+        transparencyColorBlue = ((Integer) params.get("transparencyBlue")).intValue();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessImageFilter.java	(revision 10281)
@@ -0,0 +1,134 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.enhancement;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de brillo que se aplica en la imagen. Toma como entrada la imagen
+ * y el incremento de brillo y devuelve la imagen con lo nuevos valores de brillo.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+
+public class BrightnessImageFilter extends BrightnessFilter {
+
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	
+	
+	public BrightnessImageFilter(){
+		super();
+	}
+	
+	
+	public void pre(){
+		exec = true;
+		this.image = (Image) params.get("raster");
+		height = image.getHeight(null);
+        width = image.getWidth(null);
+		this.incrBrillo = ((Integer) params.get("incrBrillo")).intValue();
+		
+		super.pre();
+	}
+	
+	public void process(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int px3[] = {(px & 0xff000000) >> 24, 
+					(px & 0x00ff0000) >> 16, 
+					(px & 0x0000ff00) >> 8, 
+					(px & 0x000000ff)};
+		
+		for (int i = 1 ; i < 4 ; i++){
+			if((px3[i] + incrBrillo) > 255)
+				px3[i] = 255;
+			else if((px3[i] + incrBrillo) < 0)
+				px3[i] = 0;
+			else
+				px3[i] += incrBrillo;
+		}
+		
+		((BufferedImage) image).setRGB(col, line, 	((px3[0] << 24) & 0xff000000) | 
+												((px3[1] << 16) & 0x00ff0000) |
+												((px3[2] << 8) & 0x0000ff00) |
+												(px3[3] & 0x000000ff));
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int px3[] = {(px & 0xff000000) >> 24, 
+					(px & 0x00ff0000) >> 16, 
+					(px & 0x0000ff00) >> 8, 
+					(px & 0x000000ff)};
+		
+		for (int i = 1 ; i < 4 ; i++){
+			if((px3[i] + incrBrillo) > 255)
+				px3[i] = 255;
+			else if((px3[i] + incrBrillo) < 0)
+				px3[i] = 0;
+			else
+				px3[i] += incrBrillo;
+		}
+				
+		/*((BufferedImage) image).setRGB(col, line, 	((px3[0] << 24) & 0xff000000) | 
+												((px3[1] << 16) & 0x00ff0000) |
+												((px3[2] << 8) & 0x0000ff00) |
+												(px3[3] & 0x000000ff));*/	
+        for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++)
+				((BufferedImage) image).setRGB(j, i, 	((px3[0] << 24) & 0xff000000) | 
+														((px3[1] << 16) & 0x00ff0000) |
+														((px3[2] << 8) & 0x0000ff00) |
+														(px3[3] & 0x000000ff));
+			
+		
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementDoubleFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementDoubleFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementDoubleFilter.java	(revision 10281)
@@ -0,0 +1,79 @@
+package org.cresques.filter.enhancement;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+
+public class LinearEnhancementDoubleFilter extends LinearEnhancementFilter {
+	private double[] 		px = new double[4];
+	private int 			bandsCnt = 3;
+	
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void process(int col, int line) {
+		raster.getElemDouble(line, col, px);
+        px = calcLinearEnhancement(px);
+        raster.setElemDouble(line, col, px);
+	}
+
+	public void processSuperSampling(int col, int line) {
+		raster.getElemDouble(line, col, px);
+        px = calcLinearEnhancement(px);
+		for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemDouble(i, j, px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+//		ObtenciÃ³n de parÃ¡metros
+        this.raster = (RasterBuf) params.get("raster");
+        this.stats = (Statistic) params.get("stats");
+        this.removeExtrema = ((Boolean) params.get("remove")).booleanValue();
+        this.filename = (String) params.get("filename");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+	}
+	
+	/**
+     * Calculo del realce
+     * @param pt pixel
+     * @return pixel con el calculo de realce aplicado
+     */
+    private double[] calcLinearEnhancement(double[] px){
+    	for (int i = 0; i < bandsCnt; i++) {
+            if (px[i] > (float)maxBandValue[i]) {
+                px[i] = (float)maxBandValue[i];
+            } else if (px[i] < minBandValue[i]) {
+                px[i] = (float)minBandValue[i];
+            }
+
+            px[i] = (int)(((int) ((((double) px[i]) * scale[i]) + offset[i])) & 0xff);
+        }
+    	return px;
+    }
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementDoubleFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyImageFilter.java	(revision 10281)
@@ -0,0 +1,190 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Filtro de transparencia aplicada a un rango de valores de un pixel sobre un objeto image
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TransparencyImageFilter extends TransparencyFilter {
+    /**
+     * Constructor
+     *
+     */
+    public TransparencyImageFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.image = (Image) params.get("raster");
+        height = image.getHeight(null);
+        width = image.getWidth(null);
+        super.pre();
+    }
+
+    /**
+     * Asigna al pixel pasado como parámetro como transparente con 
+     * el color de transparencia que esté seleccionado
+     * @param px Pixel a asignarle transparencia
+     */
+    private void setPixelTransparent(int[] px){
+		px[0] = this.alpha;
+        px[1] = this.transparencyColorRed;
+        px[2] = this.transparencyColorGreen;
+        px[3] = this.transparencyColorBlue;	
+    }
+    
+    /**     
+     * @param range rango
+     * @param banda banda
+     * @param px    pixel
+     */
+    private void processRange(int[] px) {
+    	for (int i = 0; i < rangesList.size(); i++) {
+    		TransparencyRange tr = ((TransparencyRange)rangesList.get(i));
+
+    		if(tr.isAnd()){
+    			if(tr.getRed() != null)
+    				if (px[1] < tr.getRed()[0] || px[1] > tr.getRed()[1])
+    					continue;
+    			if(tr.getGreen() != null)
+    				if (px[2] < tr.getGreen()[0] || px[2] > tr.getGreen()[1])
+    					continue;
+    			if(tr.getBlue() != null)
+    				if (px[3] < tr.getBlue()[0] || px[3] > tr.getBlue()[1])
+    					continue;
+    			if(tr.getRed() != null || tr.getGreen() != null || tr.getBlue() != null)
+    				setPixelTransparent(px);
+    			
+    		}else{
+    			if(tr.getRed() != null){
+    				if (px[1] >= tr.getRed()[0] && px[1] <= tr.getRed()[1]){
+    					setPixelTransparent(px);
+    					continue;
+    				}
+    			}
+    			if(tr.getGreen() != null){
+    				if (px[2] >= tr.getGreen()[0] && px[2] <= tr.getGreen()[1]){
+    					setPixelTransparent(px);
+    					continue;
+    				}
+    			}
+    			if(tr.getBlue() != null){
+    				if (px[3] >= tr.getBlue()[0] && px[3] <= tr.getBlue()[1]){
+    					setPixelTransparent(px);
+    					continue;
+    				}
+    			}
+    		}
+    	}
+    	
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        int pt = ((BufferedImage) image).getRGB(col, line);
+        int[] px4 = {
+                        (pt & 0xff000000) >> 24, (pt & 0xff0000) >> 16,
+                        (pt & 0x00ff00) >> 8, (pt & 0x0000ff)
+                    };
+
+        processRange(px4);
+       
+        ((BufferedImage) image).setRGB(col, line,
+                                       (((px4[0] << 24) & 0xff000000) |
+                                       ((px4[1] << 16) & 0x00ff0000) |
+                                       ((px4[2] << 8) & 0x0000ff00) |
+                                       (px4[3] & 0x0000ff)));
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	int pt = ((BufferedImage) image).getRGB(col, line);
+        int[] px4 = {
+                        (pt & 0xff000000) >> 24, (pt & 0xff0000) >> 16,
+                        (pt & 0x00ff00) >> 8, (pt & 0x0000ff)
+                    };
+
+        processRange(px4);
+    
+        for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++)
+ 			    ((BufferedImage) image).setRGB(j, i, 	(((px4[0] << 24) & 0xff000000) |
+ 			    										((px4[1] << 16) & 0x00ff0000) |
+ 			    										((px4[2] << 8) & 0x0000ff00) |
+ 			    										(px4[3] & 0x0000ff)));
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastShortFilter.java	(revision 10281)
@@ -0,0 +1,114 @@
+package org.cresques.filter.enhancement;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de contraste para imÃ¡genes de 16 bits.
+ * @author Miguel Ã�ngel Querol CarratalÃ¡ <querol_mig@gva.es>
+ *
+ */
+public class ContrastShortFilter extends ContrastFilter {
+	private short[] 		px = new short[4];
+	/**
+	 * Variable que contendra el incremento del contraste.
+	 */
+	private short incrContraste = 0;
+	
+	private short diferencia = 0;
+	
+	public ContrastShortFilter(){
+		super();
+	}
+		
+	public void pre(){
+		exec = true;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+        this.incrContraste = ((Integer)this.params.get("incrContraste")).shortValue();
+
+		super.pre();
+	}
+
+	/**
+	 * Algoritmo de contraste
+	 * @param px3 valores ARGB
+	 * @return valores ARGB con el algoritmo aplicado
+	 */
+	private short[] calcContrast(short[] px){
+		short result = 0;
+		for (int i = 0 ; i < 3 ; i++){			
+			if(incrContraste >= 0){
+				if (px[i] < 127){
+					diferencia = (short)(127 - px[i]);
+					result = (short)(px[i] - (short)((diferencia * 5) * (incrContraste * 0.1) / 25));
+					if(result < 0)	result = 0;
+					
+				}
+				if (px[i] > 127){
+					diferencia = (short)(px[i] - 127);
+					result = (short)(px[i] + (short)((diferencia * 5) * (incrContraste * 0.1) / 25));
+					if(result > 255)	result = 255;
+				}
+			}else{ //incrContraste < 0	
+				if(px[i] < 127){
+					diferencia = (short)(127 - px[i]);
+					result = (short)(px[i] + (diferencia * (short)(-incrContraste * 0.1) / 25));
+					if(result > 127)	result = 127;
+					if(px[i] == 0 || px[i] == 0)
+						if(incrContraste > -255)
+							result = 0;
+				}
+				if(px[i] > 127){
+					diferencia = (short)(px[i] - 127);
+					result = (short)(px[i] - (diferencia * (short)(-incrContraste * 0.1) / 25));
+					if (result < 127)	result = 127;
+					if(px[i] == 255 || px[i] == 254)	
+						if(incrContraste > -255)
+							result = 255;
+				}
+			}
+			px[i] = result;
+		}
+		return px;
+	}
+	
+	public void process(int col, int line) {
+		raster.getElemShort(line, col, px);
+		px = calcContrast(px);
+		raster.setElemShort(line, col, px);
+	}
+	
+	public void processSuperSampling(int col, int line)  {
+		raster.getElemShort(line, col, px);
+		px = calcContrast(px);
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemShort(i, j, px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastShortFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFilter.java	(revision 10281)
@@ -0,0 +1,116 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.io.File;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.io.datastruct.Statistic.History;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Clase base para los filtros de realzado lineal. Lee el mínimo y máxmo de la clase
+ * Statistic que serán calculados por PercentTailTrimFilter o ComputeMinMaxFilter dependiendo
+ * de si está activado el recorte de colas o no. En Statistic también están los segundos
+ * valores después del mínimo y máximo que son los que se utilizan con la opción eliminar
+ * extremos activada. Estos se usaran en vez del mínimo y máximo cuando la variable
+ * removeExtrema esté a true.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public abstract class LinearEnhancementFilter extends RasterFilter {
+    protected double[] scale = new double[3];
+    protected double[] offset = new double[3];
+    protected double[] minBandValue = null;
+    protected double[] maxBandValue = null;
+    protected boolean removeExtrema = false;
+    protected String filename = null;
+
+    /**
+     * Constructor
+     *
+     */
+    public LinearEnhancementFilter() {
+        super();
+        super.filterName = Messages.getText("enhancement");
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+    	 if (removeExtrema) { //Si está activado eliminar extremos gastamos el 2º máximo/mínimo
+
+            if ((filename != null) && !filename.equals("")) {
+                for (int i = 0; i < stats.history.size(); i++) {
+                    Statistic.History history = (Statistic.History) stats.history.get(i);
+                    if (history.file.equals(filename.substring((filename.lastIndexOf(File.separator) +
+                                                                   1),
+                                                                   filename.length()))) {
+                        this.minBandValue = history.secMin;
+                        this.maxBandValue = history.secMax;
+                    }
+                }
+            }
+
+            if ((this.minBandValue == null) || (this.maxBandValue == null)) {
+                this.minBandValue = stats.secondMinBandValue;
+                this.maxBandValue = stats.secondMaxBandValue;
+            }
+        } else { //Si no está activado eliminar extremos
+
+            if ((filename != null) && !filename.equals("")) {
+                for (int i = 0; i < stats.history.size(); i++) {
+                    Statistic.History history = (Statistic.History) stats.history.get(i);
+
+                    if (history.file.equals(filename.substring((filename.lastIndexOf(File.separator) +
+                                                                   1),
+                                                                   filename.length()))) {
+                        this.minBandValue = history.min;
+                        this.maxBandValue = history.max;
+                    }
+                }
+            }
+
+            if ((this.minBandValue == null) || (this.maxBandValue == null)) {
+                this.minBandValue = stats.minBandValue;
+                this.maxBandValue = stats.maxBandValue;
+            }
+        }
+
+        for (int i = 0; i < 3; i++) {
+            scale[i] = 255D / (maxBandValue[i] - minBandValue[i]);
+            offset[i] = (255D * minBandValue[i]) / (minBandValue[i] -
+                        maxBandValue[i]);
+        }
+    }
+
+    /**
+     * Obtiene true si está activado el flag de eliminar extremos y false si no lo está
+     */
+    public Boolean getRemoveExtrema() {
+        return new Boolean(removeExtrema);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyRange.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyRange.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyRange.java	(revision 10281)
@@ -0,0 +1,252 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.io.IOException;
+
+	/**
+	 * Clase que representa a un conjunto de pixeles con
+	 * transparencia. Incluye los rangos de transparencia para cada banda, 
+	 * la cadena que va en la lista y la operación que se realiza entre 
+	 * ellos. Un And significa que serán transparentes todos los pixeles
+	 * que cumplan con R con G y con B. Un Or significará que tendrán transparencia
+	 * todos los pixeles que cumplan con R con G o con B.  
+	 * @author Nacho Brodin (brodin_ign@gva.es)
+	 *
+	 */
+	public class TransparencyRange{
+		private String 	strEntry = null;
+		private int[]	red = null;
+		private int[]	green = null;
+		private int[]	blue = null;
+		private boolean	and = true;
+		
+		/**
+		 * Obtiene la operación  utilizada
+		 * @param and Si es true significa que se usa un AND y false implica
+		 * que se usa un OR
+		 */
+		public boolean isAnd() {
+			return and;
+		}
+		
+		/**
+		 * Asigna la operación AND como la utilizada
+		 * @param and booleano que si está a true significa que el la operación
+		 * AND es la utilizada como operación.
+		 */
+		public void setAnd(boolean and) {
+			this.and = and;
+		}
+		
+		/**
+		 * Obtiene el intervalo de valores correspondiente a la banda del azul
+		 * @return Array bidimensional de enteros correspondiente a la banda del azul
+		 */
+		public int[] getBlue() {
+			return blue;
+		}
+		
+		/**
+		 * Asigna el intervalo de valores correspondiente a la banda del azul
+		 * @param blue Array bidimensional de enteros correspondiente a la banda del azul
+		 */
+		public void setBlue(int[] blue) {
+			this.blue = blue;
+		}
+		
+		/**
+		 * Obtiene el intervalo de valores correspondiente a la banda del verde
+		 * @return Array bidimensional de enteros correspondiente a la banda del verde
+		 */
+		public int[] getGreen() {
+			return green;
+		}
+		
+		/**
+		 * Asigna el intervalo de valores correspondiente a la banda del verde
+		 * @param green Array bidimensional de enteros correspondiente a la banda del verde
+		 */
+		public void setGreen(int[] green) {
+			this.green = green;
+		}
+		
+		/**
+		 * Obtiene el intervalo de valores correspondiente a la banda del rojo
+		 * @return Array bidimensional de enteros correspondiente a la banda del rojo
+		 */
+		public int[] getRed() {
+			return red;
+		}
+		
+		/**
+		 * Asigna el intervalo de valores correspondiente a la banda del rojo
+		 * @param red Array bidimensional de enteros correspondiente a la banda del rojo
+		 */
+		public void setRed(int[] red) {
+			this.red = red;
+		}
+		
+		/**
+		 * Obtiene la cadena que representa una entrada en la tabla.
+		 * @return Cadena que representa una entrada en la tabla
+		 */
+		public String getStrEntry() {
+			return strEntry;
+		}
+		
+		/**
+		 * Asigna la cadena que representa una entrada en la tabla.
+		 * @param strEntry Cadena que representa una entrada en la tabla.
+		 */
+		public void setStrEntry(String strEntry) {
+			this.strEntry = strEntry;
+		}
+		
+		
+		/**
+		 * Esta función valida la cadena de entrada por medio de una máquina de estados. Valida las
+		 * siguientes posibilidades en la cadena de entrada:
+		 * <LI>
+		 * <UL>(valor_rojo) & (Valor_verde) & (Valor_azul)</UL>
+		 * <UL>(valor_rojo) | (Valor_verde) | (Valor_azul)</UL>
+		 * </LI>
+		 * Despues de la validación parsea el contenido y carga los parámetros r,g,b con los
+		 * intervalos de valores. Estos parámetros deben ser pasados como arrays de enteros de 
+		 * dos elementos.  
+	     * @param values
+	     * @param r	Intervalo de rojo
+	     * @param g Intervalo de verde
+	     * @param b Intervalo de azul
+	     * @return Devuelve true si la operación usada en los intervalos es un AND y false si es un OR
+	     */
+		public static boolean stringToInterval(String values, int[] r, int[] g, int[] b) throws IOException {
+			int status = 0;
+		    int countAnd = 0, countOr = 0;
+		    boolean and = true;
+		    for(int i=0;i<values.length();i++){
+		      char c = values.charAt(i);
+		      switch(status){
+		      case 0: 	if(c == ' ')status = 0;
+		      			else if ((c >= 48 && c <= 57) || c == '*')status = 1;
+     					else status = 4;
+     					break;
+		      case 1: 	if ((c >= 48 && c <= 57) || (c == ' '))status = 1;
+     					else if(c == ':') status = 2;
+     					else if(c == '&'){
+							status = 0;
+							countAnd++;
+		    	   		}else if(c == '|'){
+							status = 0;
+							countOr++;
+		    	   		}else status = 4;
+     					break;
+		      case 2:	if (c >= 48 && c <= 57) status = 3;
+		      			else status = 4;
+		      			break;
+		      case 3: 	if ((c >= 48 && c <= 57) || (c == ' '))status = 3;
+		      			else if(c == '&'){
+		      				status = 0;
+		      				countAnd++;
+		      			}else if(c == '|'){
+		      				status = 0;
+		      				countOr++;
+		      			}else status = 4;
+						break;
+		      case 4:	throw new IOException("Error en la cadena de entrada "+status);
+		      }
+		    }
+		    	
+		    //Si el analisis es correcto parseamos
+		    if((status == 1 || status ==3) && ((countAnd == 2 && countOr == 0)  || 
+		    					(countAnd == 0 && countOr == 2)) ){
+		    	  String[] s = values.split(" & ");
+				  if(s.length < 3){
+					  s = values.split(" \\| ");
+					  and = false;
+				  }
+				  ;
+				String[] val = s[0].split(":");
+				try{
+					r[0] = Integer.parseInt(val[0]);
+				 	if(val.length == 2)
+				 		r[1] = Integer.parseInt(val[1]);
+				 	else
+						r[1] = Integer.parseInt(val[0]);
+				}catch(NumberFormatException e){
+					r [0] = -1;r [1] = -1;
+				}
+				 
+				val = s[1].split(":");
+				try{
+				  	g[0] = Integer.parseInt(val[0]);
+					if(val.length == 2)
+						g[1] = Integer.parseInt(val[1]);
+					else
+						g[1] = Integer.parseInt(val[0]);
+				}catch(NumberFormatException e){
+					g[0] = -1;g[1] = -1;
+				}
+				  
+				val = s[2].split(":");
+				try{
+					b[0] = Integer.parseInt(val[0]);
+					if(val.length == 2)
+						b[1] = Integer.parseInt(val[1]);
+					else
+						b[1] = Integer.parseInt(val[0]);  
+				}catch(NumberFormatException e){
+					b [0] = -1;b [1] = -1;
+				}
+		  }else
+			 throw new IOException("Error en la cadena de entrada ");
+		      
+		  return and;
+		}
+	    
+		/**
+		 * Carga la cadena StrEntry leyendo los valores en los vectores que representa los intervalos.
+		 */
+		public void loadStrEntryFromValues(){
+			String separator = " | ";
+			if(and)
+				separator = " & ";
+			strEntry = String.valueOf(red[0] + separator+ green[0] + separator + blue[0]);
+		}
+		
+		/**
+		 * Muestra los datos del objeto para depuración.
+		 */
+		public void show(){
+			if(getRed() != null)
+				System.out.println(getRed()[0]+" "+getRed()[1]);
+			if(getGreen() != null)
+				System.out.println(getGreen()[0]+" "+getGreen()[1]);
+			if(getBlue() != null)
+				System.out.println(getBlue()[0]+" "+getBlue()[1]);
+			System.out.println(isAnd());
+			System.out.println(getStrEntry());
+			System.out.println("--------------------");
+		}
+	}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyRange.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementImageFilter.java	(revision 10281)
@@ -0,0 +1,147 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+
+
+/**
+ * Realzado Lineal (Amplitude Rescaling) para objetos Image.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class LinearEnhancementImageFilter extends LinearEnhancementFilter {
+    /**
+     * Constructor
+     */
+    public LinearEnhancementImageFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.image = (Image) params.get("raster");
+        this.stats = (Statistic) params.get("stats");
+        this.removeExtrema = ((Boolean) params.get("remove")).booleanValue();
+        this.filename = (String) params.get("filename");
+        height = image.getHeight(null);
+        width = image.getWidth(null);
+        super.pre();
+    }
+
+    /**
+     * Calculo del realce
+     * @param pt pixel
+     * @return pixel con el calculo de realce aplicado
+     */
+    private int[] calcLinearEnhancement(int pt){
+        int[] px4 = {
+                ((pt & 0xff000000) >> 24) & 0xff,
+                ((pt & 0xff0000) >> 16) & 0xff,
+                ((pt & 0xff00) >> 8) & 0xff, pt & 0xff
+            };
+
+		for (int i = 0; i < 3; i++) {
+		    if (px4[i + 1] > maxBandValue[i]) {
+		        px4[i + 1] = (int)maxBandValue[i];
+		    } else if (px4[i + 1] < minBandValue[i]) {
+		        px4[i + 1] = (int)minBandValue[i];
+		    }
+		
+		    px4[i + 1] = (((int) ((((double) px4[i + 1]) * scale[i]) +
+		                 offset[i])) & 0xff);
+		}
+		return px4;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        int pt = ((BufferedImage) image).getRGB(col, line);
+        int[] px4 = calcLinearEnhancement(pt);
+        ((BufferedImage) image).setRGB(col, line,	(((px4[0] << 24) & 0xff000000) |
+                                       			((px4[1] << 16) & 0xff0000) |
+                                       			((px4[2] << 8) & 0xff00) |
+                                       			(px4[3] & 0xff)));
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	int pt = ((BufferedImage) image).getRGB(col, line);
+        int[] px4 = calcLinearEnhancement(pt);
+        for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++)
+				 ((BufferedImage) image).setRGB(j, i, 	(((px4[0] << 24) & 0xff000000) |
+                         								((px4[1] << 16) & 0xff0000) |
+                         								((px4[2] << 8) & 0xff00) |
+                         								(px4[3] & 0xff)));
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessShortFilter.java	(revision 10281)
@@ -0,0 +1,90 @@
+package org.cresques.filter.enhancement;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * 
+ * @author Miguel Ã�ngel Querol CarratalÃ¡ <querol_mig@gva.es>
+ *
+ */
+public class BrightnessShortFilter extends BrightnessFilter{
+	private short[] 		px = new short[4];
+	
+	public BrightnessShortFilter(){
+		super();
+	}
+	
+	public void pre(){
+		exec = true;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		this.incrBrillo = ((Integer) params.get("incrBrillo")).intValue();
+		
+		super.pre();
+	}
+	
+	
+
+	public void process(int col, int line) {
+		raster.getElemShort(line, col, px);
+		
+		for(int i = 0 ; i < 3 ; i++){
+			if((px[i] + incrBrillo) > 255)
+				px[i] = 255;
+			else if((px[i] + incrBrillo) < 0)
+				px[i] = 0;
+			else
+				px[i] += incrBrillo;
+		}
+		
+		raster.setElemShort(line, col, px);
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		raster.getElemShort(line, col, px);
+		
+		for(int i = 0 ; i < 3 ; i++){
+			if((px[i] + incrBrillo) > 255)
+				px[i] = 255;
+			else if((px[i] + incrBrillo) < 0)
+				px[i] = 0;
+			else
+				px[i] += incrBrillo;
+		}
+		
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemShort(i, j, px);
+			
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessShortFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyShortFilter.java	(revision 10281)
@@ -0,0 +1,173 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Filtro de transparencia aplicada a un rango de valores de un pixel sobre un objeto image
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TransparencyShortFilter extends TransparencyFilter {
+	private short[] 		px = new short[4];
+    /**
+     * Constructor
+     *
+     */
+    public TransparencyShortFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        if(raster.getBandCount() <= 3)
+        	raster.addBandShort(3, RasterBuf.createShortBand(width, height, (short)255));
+        super.pre();
+    }
+
+    /**
+     * Asigna al pixel pasado como parámetro como transparente con 
+     * el color de transparencia que esté seleccionado
+     * @param px Pixel a asignarle transparencia
+     */
+    private void setPixelTransparent(short[] px){
+		px[3] = (short)alpha;
+        px[0] = (short)transparencyColorRed;
+        px[1] = (short)transparencyColorGreen;
+        px[2] = (short)transparencyColorBlue;	
+    }
+    
+    /**     
+     * @param range rango
+     * @param banda banda
+     * @param px    pixel
+     */
+    private void processRange(short[] px) {
+    	for (int i = 0; i < rangesList.size(); i++) {
+    		TransparencyRange tr = ((TransparencyRange)rangesList.get(i));
+
+    		if(tr.isAnd()){
+    			if(tr.getRed() != null)
+    				if (px[0] < tr.getRed()[0] || px[0] > tr.getRed()[1])
+    					continue;
+    			if(tr.getGreen() != null)
+    				if (px[1] < tr.getGreen()[0] || px[1] > tr.getGreen()[1])
+    					continue;
+    			if(tr.getBlue() != null)
+    				if (px[2] < tr.getBlue()[0] || px[2] > tr.getBlue()[1])
+    					continue;
+    			if(tr.getRed() != null || tr.getGreen() != null || tr.getBlue() != null)
+    				setPixelTransparent(px);
+    			
+    		}else{
+    			if(tr.getRed() != null){
+    				if (px[0] >= tr.getRed()[0] && px[0] <= tr.getRed()[1]){
+    					setPixelTransparent(px);
+    					continue;
+    				}
+    			}
+    			if(tr.getGreen() != null){
+    				if (px[1] >= tr.getGreen()[0] && px[1] <= tr.getGreen()[1]){
+    					setPixelTransparent(px);
+    					continue;
+    				}
+    			}
+    			if(tr.getBlue() != null){
+    				if (px[2] >= tr.getBlue()[0] && px[2] <= tr.getBlue()[1]){
+    					setPixelTransparent(px);
+    					continue;
+    				}
+    			}
+    		}
+    	}
+    	
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        raster.getElemShort(line, col, px);
+        processRange(px);
+        raster.setElemShort(line, col, px);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	raster.getElemShort(line, col, px);
+        processRange(px);
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemShort(i, j, px);
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) this.raster;
+        } else {
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/TransparencyShortFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastFilter.java	(revision 10281)
@@ -0,0 +1,63 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.enhancement;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Clase base para todos los filtros de contraste
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+public abstract class ContrastFilter extends RasterFilter{
+	
+	/**
+	 * Variable que contendra el incremento del contraste.
+	 */
+	int incrContraste = 0;
+	
+	/**
+	 * Valor que toma el pixel despues de aplicarle el algoritmo de 
+	 * mejora del contraste.
+	 */
+	int result = 0;
+	
+	
+	/**
+	 * Constructor
+	 */
+	public ContrastFilter(){
+		super();
+		super.filterName = Messages.getText("contrast");
+	}
+	
+	public void pre() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementIntegerFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementIntegerFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementIntegerFilter.java	(revision 10281)
@@ -0,0 +1,109 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+
+/**
+ * Realzado Lineal (Amplitude Rescaling) para imagenes de 32 bits.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class LinearEnhancementIntegerFilter extends LinearEnhancementFilter {
+	private int[] 		px = new int[4];
+	private int 			bandsCnt = 3;
+	
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void process(int col, int line) {
+        raster.getElemInt(line, col, px);
+        px = calcLinearEnhancement(px);
+        raster.setElemInt(line, col, px);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		raster.getElemInt(line, col, px);
+        px = calcLinearEnhancement(px);
+		for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemInt(i, j, px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public Object getResult(String name) {
+		 if (name.equals("raster")) {
+	            return (Object) this.raster;
+	        } else {
+	            return null;
+	        }
+	}
+
+	public void pre() {
+//		Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        this.stats = (Statistic) params.get("stats");
+        this.removeExtrema = ((Boolean) params.get("remove")).booleanValue();
+        this.filename = (String) params.get("filename");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+	}
+	
+	/**
+     * Calculo del realce
+     * @param pt pixel
+     * @return pixel con el calculo de realce aplicado
+     */
+    private int[] calcLinearEnhancement(int[] px){
+    	for (int i = 0; i < bandsCnt; i++) {
+            if (px[i] > maxBandValue[i]) {
+                px[i] = (int)maxBandValue[i];
+            } else if (px[i] < minBandValue[i]) {
+                px[i] = (int)minBandValue[i];
+            }
+
+            px[i] = (int)(((int) ((((double) px[i]) * scale[i]) + offset[i])) & 0xff);
+        }
+    	return px;
+    }
+
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementIntegerFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastImageFilter.java	(revision 10281)
@@ -0,0 +1,149 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.enhancement;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de contraste para imágenes raster. Toma como entrada la imagen
+ * raster y el incremento de contraste introducido por el usuario y devuelve
+ * la imagen con el filtro aplicado.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+public class ContrastImageFilter extends ContrastFilter {
+
+	public ContrastImageFilter(){
+		super();
+	}
+
+	int diferencia = 0;
+	
+	public void pre(){
+		exec = true;
+		this.image = (Image) params.get("raster");
+		height = image.getHeight(null);
+        width = image.getWidth(null);
+        this.incrContraste = ((Integer)this.params.get("incrContraste")).intValue();
+
+		
+		super.pre();
+	}
+	
+	/**
+	 * Algoritmo de contraste
+	 * @param px3 valores ARGB
+	 * @return valores ARGB con el algoritmo aplicado
+	 */
+	private int[] calcContrast(int[] px3){
+		for (int i = 1 ; i < 4 ; i++){			
+			if(incrContraste >= 0){
+				if (px3[i] < 127){
+					diferencia = 127 - px3[i];
+					result = px3[i] - (int)((diferencia * 5) * (incrContraste*0.1) / 25);
+					if(result < 0)	result = 0;
+				}
+				if (px3[i] > 127){
+					diferencia = px3[i] - 127;
+					result = px3[i] + (int)((diferencia * 5) * (incrContraste * 0.1) / 25);
+					if(result > 255)	result = 255;
+				}
+			}else{ //incrContraste < 0			
+				if(px3[i] < 127){
+					diferencia = 127 - px3[i];
+					result = px3[i] + ((int)diferencia * (int)(-incrContraste * 0.1) / 25);
+					if(result > 127)	result = 127;
+					if(px3[i] == 0 || px3[i] == 1)
+						if(incrContraste > -255)
+							result = 0;
+				}
+				if(px3[i] > 127){
+					diferencia = px3[i] - 127;
+					result = px3[i] - ((int)diferencia * (int)(-incrContraste * 0.1) / 25);
+					if (result < 127)	result = 127;
+					if(px3[i] == 255 || px3[i] == 254)	
+						if(incrContraste > -255)
+							result = 255;
+				}
+			}
+			px3[i] = result;
+		}
+		return px3;
+	}
+	
+	public void process(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int px3[] = {(px & 0xff000000) >> 24, 
+					(px & 0x00ff0000) >> 16, 
+					(px & 0x0000ff00) >> 8, 
+					(px & 0x000000ff)};
+		
+		px3 = calcContrast(px3);
+		
+		((BufferedImage) this.image).setRGB(col, line, 	((px3[0] << 24) & 0xff000000) | 
+												((px3[1] << 16) & 0x00ff0000) |
+												((px3[2] << 8) & 0x0000ff00) |
+												(px3[3] & 0x000000ff));
+	}
+	
+	public void processSuperSampling(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int px3[] = {(px & 0xff000000) >> 24, 
+					(px & 0x00ff0000) >> 16, 
+					(px & 0x0000ff00) >> 8, 
+					(px & 0x000000ff)};
+		
+		px3 = calcContrast(px3);
+		
+        for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++)
+				((BufferedImage) image).setRGB(j, i, 	((px3[0] << 24) & 0xff000000) | 
+														((px3[1] << 16) & 0x00ff0000) |
+														((px3[2] << 8) & 0x0000ff00) |
+														(px3[3] & 0x000000ff));		
+	}
+	
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/ContrastImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementShortFilter.java	(revision 10281)
@@ -0,0 +1,136 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.enhancement;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+
+
+/**
+ * Realzado Lineal (Amplitude Rescaling) para imagenes de 16 bits.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class LinearEnhancementShortFilter extends LinearEnhancementFilter {
+	private short[] 		px = new short[4];
+	private int 			bandsCnt = 3;
+	
+    /**
+     * Constructor
+     */
+    public LinearEnhancementShortFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        this.stats = (Statistic) params.get("stats");
+        this.removeExtrema = ((Boolean) params.get("remove")).booleanValue();
+        this.filename = (String) params.get("filename");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+    }
+
+    /**
+     * Calculo del realce
+     * @param pt pixel
+     * @return pixel con el calculo de realce aplicado
+     */
+    private short[] calcLinearEnhancement(short[] px){
+    	for (int i = 0; i < bandsCnt; i++) {
+            if (px[i] > maxBandValue[i]) {
+                px[i] = (short)maxBandValue[i];
+            } else if (px[i] < minBandValue[i]) {
+                px[i] = (short)minBandValue[i];
+            }
+
+            px[i] = (short)(((short) ((((double) px[i]) * scale[i]) + offset[i])) & 0xff);
+        }
+    	return px;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        raster.getElemShort(line, col, px);
+        px = calcLinearEnhancement(px);
+        raster.setElemShort(line, col, px);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	raster.getElemShort(line, col, px);
+        px = calcLinearEnhancement(px);
+		for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemShort(i, j, px);
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) this.raster;
+        } else {
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/LinearEnhancementShortFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessContrastStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessContrastStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessContrastStackManager.java	(revision 10281)
@@ -0,0 +1,212 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.enhancement;
+
+import java.util.ArrayList;
+
+import org.cresques.filter.IStackManager;
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Gestor de la pila de filtros para el filtro de brillo.
+ * @author Miguel ï¿½ngel Querol Carratalï¿½  <querol_mig@gva.es>
+ *
+ */
+
+public class BrightnessContrastStackManager implements IStackManager{
+	
+	public final static int				brightness = 7;
+	public final static int				histogram = 6;
+	public final static int				contrast = 8;
+	protected RasterFilterStack 		filterStack = null;
+	private RasterFilterStackManager	filterStackManager = null;
+	private GeoRasterFile[] 			grfList = null;
+	
+	public BrightnessContrastStackManager(RasterFilterStackManager filterStackManager){
+		this.filterStackManager = filterStackManager;
+		this.filterStack = filterStackManager.getFilterStack();
+		filterStackManager.addTypeFilter("histogram", BrightnessContrastStackManager.histogram, 5);
+		filterStackManager.addTypeFilter("brightness", BrightnessContrastStackManager.brightness, 6);
+		filterStackManager.addTypeFilter("contrast", BrightnessContrastStackManager.contrast, 7);
+		
+	}
+	
+	
+	/**
+	 * Obtiene el valor entero que corresponde al tipo de filtro.
+	 * @param rasterFilter
+	 * @return
+	 */
+	public int getType(RasterFilter rasterFilter){
+		if(rasterFilter instanceof BrightnessFilter)
+			return BrightnessContrastStackManager.brightness;
+		/*if(rasterFilter instanceof HistogramFilter)
+			return BrightnessContrastStackManager.histogram;*/
+		if(rasterFilter instanceof ContrastFilter)
+			return BrightnessContrastStackManager.contrast;
+					
+		return -1;
+	}
+	
+	/**
+	 * Aï¿½ade un filtro de brillo a la pila de filtros.
+	 * @param incrBrillo
+	 */
+	public void addBrightnessFilter(int incrBrillo){
+		//Si ya hay un filtro de brillo en la pila lo sobreescribimos
+		
+		if(filterStack.isActive(((Integer) filterStackManager.getTypeFilters().get("brightness")).intValue()))
+			filterStack.removeFilter(((Integer) filterStackManager.getTypeFilters().get("brightness")).intValue());
+	
+		RasterFilter filtro = null;
+		
+		switch(filterStack.getDataTypeInFilter(((Integer)this.filterStackManager.getTypeFilters().get("brightness")).intValue())){
+		case RasterBuf.TYPE_IMAGE:
+			filtro = new BrightnessImageFilter();
+			break;
+		case RasterBuf.TYPE_SHORT:
+			filtro = new BrightnessShortFilter();
+			break;
+		case RasterBuf.TYPE_USHORT:
+		case RasterBuf.TYPE_INT:
+			break;
+		}
+		
+		//Cuando el filtro esta creado, tomamos los valores y lo aï¿½adimos a la pila
+		
+		if(filtro != null){
+			filtro.addParam("incrBrillo", new Integer(incrBrillo));
+			filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("brightness")).intValue(), filtro);
+			filterStackManager.controlTypes();
+		}
+	}
+		
+	/**
+	 * Aï¿½ade un filtro de contraste a la pila de filtros.
+	 * @param incrBrillo
+	 */
+	public void addContrastFilter(int incrContraste){
+		//Si ya hay un filtro de contraste en la pila lo sobreescribimos
+		
+		if(filterStack.isActive(((Integer) filterStackManager.getTypeFilters().get("contrast")).intValue()))
+			filterStack.removeFilter(((Integer) filterStackManager.getTypeFilters().get("contrast")).intValue());
+	
+		RasterFilter filtro = null;
+		
+		switch(filterStack.getDataTypeInFilter(((Integer)this.filterStackManager.getTypeFilters().get("contrast")).intValue())){
+		case RasterBuf.TYPE_IMAGE:
+			filtro = new ContrastImageFilter();
+			break;
+		case RasterBuf.TYPE_SHORT:
+			filtro = new ContrastShortFilter();
+			break;
+		case RasterBuf.TYPE_USHORT:
+		case RasterBuf.TYPE_INT:
+			
+			break;
+		}
+		
+		//Cuando el filtro esta creado, tomamos los valores y lo aï¿½adimos a la pila
+		
+		if(filtro != null){
+			filtro.addParam("incrContraste", new Integer(incrContraste));
+			filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("contrast")).intValue(), filtro);
+			filterStackManager.controlTypes();
+		}
+	}
+	
+	
+	public void createStackFromStrings(ArrayList f, Integer pos) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	
+	
+	/**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+	public int createStackFromStrings(ArrayList filters, String fil, GeoRasterFile[] grfList, int filteri) {
+		this.grfList = grfList;
+
+			if((fil.startsWith("filter.brightCont.active"))&&
+					(RasterFilterStackManager.getValue(fil).equals("true"))){
+				
+				int incrBrillo = 0;
+				int incrContraste = 0;
+				filters.remove(0);
+				
+				for(int prop = 0; prop < filters.size() ; prop++){	
+					String elem = (String) filters.get(prop);
+					if(elem.startsWith("filter.brightness.incrBrillo")){
+						incrBrillo = Integer.parseInt(RasterFilterStackManager.getValue(elem));
+						filters.remove(prop);
+						prop--;
+					}
+				
+					if(elem.startsWith("filter.contrast.incrContraste")){
+						incrContraste = Integer.parseInt(RasterFilterStackManager.getValue(elem));
+						filters.remove(prop);
+						prop--;
+					}
+				}
+					addBrightnessFilter(incrBrillo);
+					addContrastFilter(incrContraste);	
+			}
+		return filteri;
+	}
+
+	public ArrayList getStringsFromStack() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	/**
+	 * Obtiene un Array de Strings a partir de una pila de filtros. Cada elemento del array
+	 * tendrï¿½ la forma de elemento=valor.
+	 */
+	
+	public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf) {
+		
+		
+		if((rf instanceof BrightnessFilter) || 
+			(rf instanceof ContrastFilter)){
+			filterList.add("filter.brightCont.active=true");
+			
+		}
+		
+		if(rf instanceof BrightnessFilter){
+			BrightnessFilter bright = (BrightnessFilter) rf;
+			filterList.add("filter.brightness.incrBrillo="+bright.incrBrillo);
+        }else if(rf instanceof ContrastFilter){
+        	ContrastFilter contrast = (ContrastFilter) rf;
+        	filterList.add("filter.contrast.incrContraste="+contrast.incrContraste);
+        }
+			
+		return filterList;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/enhancement/BrightnessContrastStackManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilter.java	(revision 10281)
@@ -0,0 +1,298 @@
+/* Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.util.Hashtable;
+
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.px.Extent;
+
+
+/**
+ * Filtro para raster. Ancestro de todos los filtros.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public abstract class RasterFilter implements IRasterFilter {
+	/**
+	 * Nombre del filtro. Este nombre debe asignarlo cada clase de filtro especifico y es necesario
+	 * para leer el nombre en el listado de fitros de la pila.
+	 */
+	protected String		filterName = "";
+    protected RasterBuf 	raster = null;
+    protected Statistic 	stats = null;
+    protected Image 		image = null;
+    protected int 			height = 0;
+    protected int 			width = 0;
+    protected Hashtable 	params = new Hashtable();
+    protected boolean 		isSupersampling = false;
+    protected ViewPortData	viewPortData = null;
+    protected Extent		extent = null;
+    /**
+     * Variable que control la aplicación o no del filtro. Si está a false aunque esté en 
+     * la pila el filtro no se ejecutará.
+     */
+    protected boolean 		exec = true; 
+    
+    /**
+     * Vectores con los pasos usados para el supersampling
+     */
+    protected int[]			stepX = null;
+    protected int[]			stepY = null;
+    /**
+     * Posición de los vectores de pasos que se está analizando en un instante dado
+     */
+    protected int			contX = -1, contY = -1;
+
+    /**
+     * @author Nacho Brodin (brodin_ign@gva.es)
+     */
+    public static class Kernel{
+    	public double[][] kernel = null;
+    	protected double divisor = 0;
+    	
+    	public Kernel(double[][] k){
+    		this.kernel = k;
+    		
+    		for (int i=0;i< kernel.length;i++)
+    			for (int j=0;j<kernel[0].length;j++)
+    				divisor = divisor + kernel[i][j];
+    	}
+    	
+    	public Kernel(double[][] k,double divisor){
+    		this.kernel = k;
+    		this.divisor = divisor;
+    	}
+    	
+    	public double kernelOperation(Kernel k){
+    		double res = 0;
+    		for (int i=0;i< kernel.length;i++)
+    			for (int j=0;j<kernel[0].length;j++)
+    				res += kernel[i][j] *  k.kernel[i][j];
+    		return res;
+    	}
+    	
+    	public double convolution (Kernel k){
+    		double res =0;
+    		res = this.kernelOperation(k);
+    		if (this.divisor !=0)
+    			res = res/divisor;
+    		return Math.abs(res);
+    	}
+
+		public double getDivisor() {
+			return divisor;
+		}
+
+		public void setDivisor(double divisor) {
+			this.divisor = divisor;
+		}
+		
+		public int getLado(){
+			return kernel.length;
+		}
+    }
+
+
+    /**
+     * Constructor
+     */
+    public RasterFilter() {
+    }
+
+    /**
+     * Aplica el filtro sobre el raster pasado pixel a pixel
+     */
+    public void execute() {
+        pre();
+        if (exec) {
+        	if(isSupersampling()){
+        		contX = -1;
+        		for (int col = 0; col < width; col += stepX[contX]){
+        			contY = -1;
+        			for (int line = 0; line < height; line += stepY[contY]){ 
+        				processSuperSampling(col, line);	
+        				contY ++;
+        			}
+        			contX ++;
+        		}
+        	}else{
+        		for (int col = 0; col < width; col += 1)
+        			for (int line = 0; line < height; line += 1) 
+        				process(col, line);
+        	}
+        }
+        post();
+    }
+
+    /**
+     * Aplica el filtro sobre el raster pasado por lineas
+     */
+    public void executeLines() {
+        if (exec) {
+            for (int y = 0; y < height; y++)
+                processLine(y);
+        }
+    }
+
+    /**
+     * Añade un parámetro al filtro
+     * @param name	Clave del parámetro
+     * @param param Objeto pasado como parámetro
+     */
+    public void addParam(String name, Object param) {
+        params.put(name, param);
+    }
+
+    /**
+     * Elimina un parámetro del filtro
+     * @param name Clave del parámetro a eliminar
+     */
+    public void removeParam(String name){
+    	params.remove(name);
+    }
+    
+    /**
+     * Obtiene un parámetro a partir de la clave
+     * @param name Parámetro
+     * @return Parámetro
+     */
+    public Object getParam(String name){
+    	return params.get(name);
+    }
+    
+    /**
+     * Función que contiene el código a ejecutar antes de aplicar el filtro
+     */
+    abstract public void pre();
+
+    /**
+     * Función que contiene el código a ejecutar despues de aplicar el filtro
+     */
+    abstract public void post();
+
+    /**
+     * Ejecución del filtro para un pixel de la imagen
+     */
+    abstract public void process(int x, int y);
+    
+    /**
+     * Ejecución del filtro para un pixel de la imagen
+     */
+    abstract public void processSuperSampling(int x, int y);
+
+    /**
+     * Ejecución del filtro para una línea de la imagen
+     */
+    abstract public void processLine(int y);
+
+    /**
+     * Obtiene el tipo de datos del raster de entrada
+     */
+    abstract public int getInRasterDataType();
+
+    /**
+     * Obtiene el tipo de datos del raster de salida
+     */
+    abstract public int getOutRasterDataType();
+
+    /**
+     * Obtiene el resultado del filtro despues de su ejecución a través de una clave
+     * @param name        clave para obtener un objeto resultado del filtro.
+     */
+    abstract public Object getResult(String name);
+
+	/**
+	 * @param viewPortData The viewPortData to set.
+	 */
+	public void setViewPortData(ViewPortData viewPortData) {
+		this.viewPortData = viewPortData;
+	}
+	/**
+	 * @param extent The extent to set.
+	 */
+	public void setExtent(Extent extent) {
+		this.extent = extent;
+	}
+
+	/**
+	 * Obtiene true si el filtro va a ser ejecutado o false si no va a serlo
+	 * @return
+	 */
+	public boolean isExec() {
+		return exec;
+	}
+
+	/**
+	 * Asigna el valor a la variable exec. Esta estará a true si el filtro se ejecutará la próxima
+	 * vez que se repinte o false si no se ejecuta.
+	 * @param exec
+	 */
+	public void setExec(boolean exec) {
+		this.exec = exec;
+	}
+	
+	/**
+	 * Asigna el valor del paso (Solo cuando se hace supersampling).
+	 * @param stepx paso en X
+	 * @param stepy paso en Y
+	 */
+	public void setStep(int[] stepX, int[] stepY){
+		if(stepX != null && stepY != null){
+			isSupersampling = true;
+			this.stepX = stepX;
+			this.stepY = stepY;
+		}else{
+			isSupersampling = false;
+			stepX = stepY = null;
+		}
+	}
+	
+	/**
+	 * Obtiene si la imagen pasada tiene supersampling o no
+	 * @return true si en el dibujado se ha aplicado supersampling y false si no se ha aplicado.
+	 */
+	protected boolean isSupersampling(){
+		return isSupersampling;
+	}
+
+	/**
+	 * Obtiene el nombre del filtro. Este nombre debe asignarlo cada clase 
+	 * de filtro especifico y es necesario para leer el nombre en el listado de fitros de la pila.
+	 * @return Cadena que representa el nombre del filtro. 
+	 */
+	public String getFilterName() {
+		return filterName;
+	}
+	
+	/**
+	 * ASigna el nombre del filtro. 
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public void setFilterName(String fName) {
+		filterName = fName;
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterIntToImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterIntToImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterIntToImageFilter.java	(revision 10281)
@@ -0,0 +1,119 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Renderiza el raster.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class RasterIntToImageFilter extends RasterToImageFilter {
+	private int[] 		px = {0, 0, 0, 255};
+	 
+    /**
+     * Constructor
+     *
+     */
+    public RasterIntToImageFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+       super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        raster.getElemInt(line, col, px);
+        rgb = (alpha & ((((int)255) & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+              ((px[1] & 0xff) << 8) | (px[2] & 0xff);
+        /*rgb = (alpha & ((px[3] & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+        ((px[1] & 0xff) << 8) | (px[2] & 0xff);*/
+
+        image.setRGB(col, line, rgb);
+    }
+    
+	public void processSuperSampling(int col, int line){
+		raster.getElemInt(line, col, px);
+        rgb = (alpha & ((((int)255) & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+              ((px[1] & 0xff) << 8) | (px[2] & 0xff);
+        /*rgb = (alpha & ((px[3] & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+        ((px[1] & 0xff) << 8) | (px[2] & 0xff);*/
+        
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				image.setRGB(j, i, rgb);
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        return super.getResult(name);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#processLines(int)
+     */
+    public void processLine(int y) {
+        for (int x = 0; x < width; x++) {
+            int[][] line = raster.getLineInt(y);
+            rgb = (alpha & ((px[3] & 0xff) << 24)) |
+                  ((line[x][0] & 0xff) << 16) | ((line[x][1] & 0xff) << 8) |
+                  (line[x][2] & 0xff);
+
+            image.setRGB(x, y, rgb);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return super.getInRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return super.getOutRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    	super.post();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterIntToImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFloatFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFloatFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFloatFilter.java	(revision 10281)
@@ -0,0 +1,111 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de paleta a aplicar sobre una imagen con tipo de dato float. Para cada elemento
+ * del RasterBuf se realiza la conversión de dato a través de la clase palette que se pasa
+ * como parámetro al filtro en la inicialización.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteFloatFilter extends PaletteFilter {
+	private float[] 		px = new float[4];
+	
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	public PaletteFloatFilter(){
+		super();
+	}
+	
+	
+	public void pre(){;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+        rasterResult = new RasterBuf(raster.getDataType(),width,height,3,true);        
+		super.pre();
+	}
+	
+	public void process(int col, int line) {
+        raster.getElemFloat(line, col, px);
+        int rgb;
+        if(interpolate)
+			rgb = palette.getInterpolateRGB2(px[0]);
+		else
+			rgb = palette.getRGB(px[0]);
+        
+        float pxOut[] = {(rgb & 0x00ff0000) >> 16,
+        				(rgb & 0x0000ff00) >> 8, 
+        				(rgb & 0x000000ff)};
+        rasterResult.setElemFloat(line, col,pxOut);
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		raster.getElemFloat(line, col, px);
+		int rgb;
+		if(interpolate)
+			rgb = palette.getInterpolateRGB2(px[0]);
+		else
+			rgb = palette.getRGB(px[0]);
+		
+		float pxOut[] = {(rgb & 0x00ff0000) >> 16,
+				(rgb & 0x0000ff00) >> 8, 
+				(rgb & 0x000000ff)};
+        for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)
+				rasterResult.setElemFloat(i, j,pxOut);		
+	}
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public int getOutRasterDataType() {
+			return RasterBuf.TYPE_FLOAT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+			if(isExec())
+				return (Object) this.rasterResult;
+			else
+				return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFloatFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsShortFilter.java	(revision 10281)
@@ -0,0 +1,111 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Proceso del filtro de recorte de colas aplicado a imágenes 16 bits
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class RemoveBandsShortFilter extends RemoveBandsFilter {
+	private short[] 		px = new short[4];
+	
+    public RemoveBandsShortFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+    	 raster.getElemShort(line, col, px);
+        px[0] = (short)(px[0] & m1);
+        px[1] = (short)(px[1] & m2);
+        px[2] = (short)(px[2] & m3);
+        raster.setElemShort(line, col, px);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	 raster.getElemShort(line, col, px);
+    	 px[0] = (short)(px[0] & m1);
+         px[1] = (short)(px[1] & m2);
+         px[2] = (short)(px[2] & m3);
+ 		 for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				 raster.setElemShort(i, j, px);
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+    }
+
+    public void post() {
+        super.post();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsShortFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterShortToImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterShortToImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterShortToImageFilter.java	(revision 10281)
@@ -0,0 +1,119 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Convierte los elementos short de un RasterBuf a un pixel de un image.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterShortToImageFilter extends RasterToImageFilter {
+	private short[] 		px = {0, 0, 0, 255};
+
+    /**
+     * Constructor
+     *
+     */
+    public RasterShortToImageFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+       super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#process(int, int)
+     */
+    public void process(int col, int line)  {
+        raster.getElemShort(line, col, px);
+        rgb = (alpha & ((((short)255) & 0xff) << 24)) | ((px[0] & 0xff) << 16) | 
+        	((px[1] & 0xff) << 8) | (px[2] & 0xff);
+        /*rgb = (alpha & ((px[3] & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+              ((px[1] & 0xff) << 8) | (px[2] & 0xff);*/
+
+        image.setRGB(col, line, rgb);
+    }
+    
+	public void processSuperSampling(int col, int line)  {
+        raster.getElemShort(line, col, px);
+        rgb = (alpha & ((((short)255) & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+        ((px[1] & 0xff) << 8) | (px[2] & 0xff);
+        /*rgb = (alpha & ((px[3] & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+              ((px[1] & 0xff) << 8) | (px[2] & 0xff);*/
+        
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				image.setRGB(j, i, rgb);
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        return super.getResult(name);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#processLines(int)
+     */
+    public void processLine(int y) {
+        for (int x = 0; x < width; x++) {
+            int[][] line = raster.getLineInt(y);
+            rgb = (alpha & ((px[3] & 0xff) << 24)) |
+                  ((line[x][0] & 0xff) << 16) | ((line[x][1] & 0xff) << 8) |
+                  (line[x][2] & 0xff);
+
+            image.setRGB(x, y, rgb);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return super.getInRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return super.getOutRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    	super.post();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterShortToImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteDoubleFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteDoubleFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteDoubleFilter.java	(revision 10281)
@@ -0,0 +1,114 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de paleta a aplicar sobre una imagen con tipo de dato double. Para cada elemento
+ * del RasterBuf se realiza la conversión de dato a través de la clase palette que se pasa
+ * como parámetro al filtro en la inicialización.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteDoubleFilter extends PaletteFilter {
+	private double[] 		px = new double[4];
+	
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	public PaletteDoubleFilter(){
+		super();
+	}
+	
+	
+	public void pre(){
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+        width = raster.getWidth();
+        rasterResult = new RasterBuf(raster.getDataType(),width,height,3,true);
+		super.pre();
+	}
+	
+	public void process(int col, int line) {
+        raster.getElemDouble(line, col, px);
+        int rgb;
+        if(interpolate)
+			rgb = palette.getInterpolateRGB2(px[0]);
+		else
+			rgb = palette.getRGB(px[0]);
+        
+        double pxOut[] = {(rgb & 0x00ff0000) >> 16,
+				(rgb & 0x0000ff00) >> 8, 
+				(rgb & 0x000000ff)};
+        rasterResult.setElemDouble(line, col,pxOut);
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		raster.getElemDouble(line, col, px);
+		int rgb;
+		
+		if(interpolate)
+			rgb = palette.getInterpolateRGB2(px[0]);
+		else
+			rgb = palette.getRGB(px[0]);
+		
+		double pxOut[] = {(rgb & 0x00ff0000) >> 16,
+				(rgb & 0x0000ff00) >> 8, 
+				(rgb & 0x000000ff)};
+        for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)
+				rasterResult.setElemDouble(i,j,pxOut);
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+			if(isExec())
+				return (Object) this.rasterResult;
+			else
+				return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteDoubleFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterByteToImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterByteToImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterByteToImageFilter.java	(revision 10281)
@@ -0,0 +1,115 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Convierte los elementos short de un RasterBuf a un pixel de un image.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterByteToImageFilter extends RasterToImageFilter {
+	private byte[] 		px = new byte[4];
+
+    /**
+     * Constructor
+     *
+     */
+    public RasterByteToImageFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+       super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        raster.getElemByte(line, col, px);
+        rgb = (alpha & ((px[3] & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+              ((px[1] & 0xff) << 8) | (px[2] & 0xff);
+
+        image.setRGB(col, line, rgb);
+    }
+    
+	public void processSuperSampling(int col, int line) {
+		raster.getElemByte(line, col, px);
+        rgb = (alpha & ((px[3] & 0xff) << 24)) | ((px[0] & 0xff) << 16) |
+              ((px[1] & 0xff) << 8) | (px[2] & 0xff);
+        
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				image.setRGB(j, i, rgb);
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        return super.getResult(name);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#processLines(int)
+     */
+    public void processLine(int y) {
+        for (int x = 0; x < width; x++) {
+            int[][] line = raster.getLineInt(y);
+            rgb = (alpha & ((px[3] & 0xff) << 24)) |
+                  ((line[x][0] & 0xff) << 16) | ((line[x][1] & 0xff) << 8) |
+                  (line[x][2] & 0xff);
+
+            image.setRGB(x, y, rgb);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return super.getInRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return super.getOutRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    	super.post();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterByteToImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterFloatToImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterFloatToImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterFloatToImageFilter.java	(revision 10281)
@@ -0,0 +1,88 @@
+package org.cresques.filter.bands;
+
+public class RasterFloatToImageFilter extends RasterToImageFilter {
+
+	private float[] 		px = {0, 0, 0, 255};
+	 
+    /**
+     * Constructor
+     *
+     */
+    public RasterFloatToImageFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+       super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        raster.getElemFloat(line, col, px);
+        rgb = (alpha & ((((int)255) & 0xff) << 24)) | ((Math.round(px[0]) & 0xff) << 16) |
+              ((Math.round(px[1]) & 0xff) << 8) | (Math.round(px[2]) & 0xff);
+        /*rgb = (alpha & ((Math.round(px[3]) & 0xff) << 24)) | ((Math.round(px[0]) & 0xff) << 16) |
+        ((Math.round(px[1]) & 0xff) << 8) | (Math.round(px[2]) & 0xff);*/
+
+        image.setRGB(col, line, rgb);
+    }
+    
+	public void processSuperSampling(int col, int line){
+		raster.getElemFloat(line, col, px);
+        rgb = (alpha & ((((int)255) & 0xff) << 24)) | ((Math.round(px[0]) & 0xff) << 16) |
+              ((Math.round(px[1]) & 0xff) << 8) | (Math.round(px[2]) & 0xff);
+        /*rgb = (alpha & ((Math.round(px[3]) & 0xff) << 24)) | ((Math.round(px[0]) & 0xff) << 16) |
+        ((Math.round(px[1]) & 0xff) << 8) | (Math.round(px[2]) & 0xff);*/
+        
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				image.setRGB(j, i, rgb);
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        return super.getResult(name);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#processLines(int)
+     */
+    public void processLine(int y) {
+        for (int x = 0; x < width; x++) {
+            float[][] line = raster.getLineFloat(y);
+            rgb = (alpha & ((Math.round(px[3]) & 0xff) << 24)) |
+                  ((Math.round(line[x][0]) & 0xff) << 16) | ((Math.round(line[x][1]) & 0xff) << 8) |
+                  (Math.round(line[x][2]) & 0xff);
+
+            image.setRGB(x, y, rgb);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return super.getInRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return super.getOutRasterDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    	super.post();
+    }
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterFloatToImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFilter.java	(revision 10281)
@@ -0,0 +1,84 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Palette;
+
+/**
+ * Clase basa para los filtros de paleta.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+
+public abstract class PaletteFilter extends RasterFilter {
+
+	protected Palette palette = null;	
+	protected boolean interpolate = false;
+	protected RasterBuf rasterResult = null;
+	
+	/**
+	 * Obtiene si la paleta será aplicada con interpolación de colores o no.
+	 * @return true si es aplicada con interpolación de colores y false si no lo es
+	 */
+	public boolean isInterpolate() {
+		return interpolate;
+	}
+
+	/**
+	 * Asigna si la paleta será aplicada con interpolación de colores o no.
+	 * @param interpolate true si queremos que se aplique con interpolación y false si no queremos.
+	 */
+	public void setInterpolate(boolean interpolate) {
+		this.interpolate = interpolate;
+	}
+
+	public PaletteFilter(){
+		super();
+	}
+	
+	public void pre() {
+		this.palette = ((Palette) params.get("palette"));
+		this.interpolate = ((Boolean)params.get("interpolate")).booleanValue();
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Obtiene la paleta
+	 * @return Palette
+	 */
+	public Palette getPalette() {
+		return palette;
+	}
+
+	/**
+	 * Asigna una paleta
+	 * @param palette 
+	 */
+	public void setPalette(Palette palette) {
+		this.palette = palette;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteImageFilter.java	(revision 10281)
@@ -0,0 +1,107 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Palette;
+import org.cresques.util.Utilities;
+
+/**
+ * Filtro de paleta a aplicar sobre una imagen con tipo de dato image. Para cada elemento
+ * del RasterBuf se realiza la conversión de dato a través de la clase palette que se pasa
+ * como parámetro al filtro en la inicialización.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteImageFilter extends PaletteFilter {
+
+	/**
+	 * Constructor
+	 *
+	 */
+	public PaletteImageFilter(){
+		super();
+	}
+	
+	
+	public void pre(){
+		this.image = (Image) params.get("raster");
+		height = image.getHeight(null);
+        width = image.getWidth(null);
+		super.pre();
+	}
+	
+	public void process(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int alpha = px & 0xff000000;
+		px = (px & 0x00ff0000) >> 16;
+		if(interpolate)
+			px = palette.getInterpolateRGB2(px);
+		else
+			px = palette.getRGB(px);
+		px = (alpha & (px & 0xff000000)) | (px & 0x00ffffff);
+		((BufferedImage) image).setRGB(col, line, px);
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int alpha = px & 0xff000000;
+		px = (px & 0x00ff0000) >> 16;
+		if(interpolate)
+			px = palette.getInterpolateRGB2(px);
+		else
+			px = palette.getRGB(px);
+		px = (alpha & (px & 0xff000000)) | (px & 0x00ffffff);
+        for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++){
+				px = (alpha & (px & 0xff000000)) | (px & 0x00ffffff);
+				((BufferedImage) image).setRGB(j, i, px);			
+			}
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterDoubleToImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterDoubleToImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterDoubleToImageFilter.java	(revision 10281)
@@ -0,0 +1,59 @@
+package org.cresques.filter.bands;
+
+public class RasterDoubleToImageFilter extends RasterToImageFilter {
+	
+	private double[] 		px = {0, 0, 0, 255};
+	
+	public int getInRasterDataType() {
+		// TODO Auto-generated method stub
+		return super.getInRasterDataType();
+	}
+
+	public int getOutRasterDataType() {
+		// TODO Auto-generated method stub
+		return super.getOutRasterDataType();
+	}
+
+	public Object getResult(String name) {
+		// TODO Auto-generated method stub
+		return super.getResult(name);
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub
+		super.post();
+	}
+
+	public void pre() {
+		// TODO Auto-generated method stub
+		super.pre();
+	}
+
+	public void process(int col, int line) {
+		raster.getElemDouble(line, col, px);
+        rgb = (alpha & (((int)(255) & 0xff) << 24)) | (int)((Math.round(px[0]) & 0xff) << 16) |
+        (int)((Math.round(px[1]) & 0xff) << 8) | (int)(Math.round(px[2]) & 0xff);
+        /*rgb = (alpha & (int)((Math.round(px[3]) & 0xff) << 24)) | (int)((Math.round(px[0]) & 0xff) << 16) |
+        (int)((Math.round(px[1]) & 0xff) << 8) | (int)(Math.round(px[2]) & 0xff);*/
+
+        image.setRGB(col, line, rgb);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+		super.processLine(y);
+	}
+
+	public void processSuperSampling(int col, int line) {
+		raster.getElemDouble(line, col, px);
+        rgb = (alpha & ((((int)(255)) & 0xff) << 24)) | (int)((Math.round(px[0]) & 0xff) << 16) |
+        	(int)((Math.round(px[1]) & 0xff) << 8) | (int)(Math.round(px[2]) & 0xff);
+        /*rgb = (alpha & (int)((Math.round(px[3]) & 0xff) << 24)) | (int)((Math.round(px[0]) & 0xff) << 16) |
+    	(int)((Math.round(px[1]) & 0xff) << 8) | (int)(Math.round(px[2]) & 0xff);*/
+        
+        for(int j = col; j < raster.getWidth() && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < raster.getHeight() && i < (line + stepY[contY + 1]); i++)
+				image.setRGB(j, i, rgb);
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterDoubleToImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsFilter.java	(revision 10281)
@@ -0,0 +1,100 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.datastruct.Statistic;
+
+
+/**
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public abstract class RemoveBandsFilter extends RasterFilter {
+    public String bands = "RGB";
+    protected int mascara = 0xffffffff;
+    protected int m0 = 0xff;
+    protected int m1 = 0xff;
+    protected int m2 = 0xff;
+    protected int m3 = 0xff;
+
+    /**
+     * Constructor
+     *
+     */
+    public RemoveBandsFilter() {
+        super();
+    }
+
+    /**
+     * Operaciones que se realizan antes de la ejecución del filtro
+     */
+    public void pre() {
+        //Obtención de parámetros comunes a todos
+        this.stats = (Statistic) params.get("stats");
+        this.bands = (String) params.get("bands");
+
+        if (bands.compareTo("RGB") == 0) { //No modifica ninguna banda -> no se ejecuta el filtro
+            this.exec = false;
+
+            return;
+        }
+
+        if (bands.compareTo("R") == 0) {
+            mascara = 0xff00ffff;
+            m1 = 0x00;
+        }
+
+        if (bands.compareTo("G") == 0) {
+            mascara = 0xffff00ff;
+            m2 = 0x00;
+        }
+
+        if (bands.compareTo("B") == 0) {
+            mascara = 0xffffff00;
+            m3 = 0x00;
+        }
+
+        if (bands.compareTo("RG") == 0) {
+            mascara = 0xff0000ff;
+            m1 = m2 = 0x00;
+        }
+
+        if (bands.compareTo("RB") == 0) {
+            mascara = 0xff00ff00;
+            m1 = m3 = 0x00;
+        }
+
+        if (bands.compareTo("GB") == 0) {
+            mascara = 0xffff0000;
+            m2 = m3 = 0x00;
+        }
+    }
+
+    /**
+     * Operaciones que se realizan después de la ejecución del filtro
+     */
+    public void post() {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterToImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterToImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterToImageFilter.java	(revision 10281)
@@ -0,0 +1,112 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Renderiza el raster.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterToImageFilter extends RasterFilter {
+    protected BufferedImage image;
+    protected int alpha;
+    protected int alphaReal;
+    protected int rgb;
+
+    /**
+     * Constructor
+     *
+     */
+    public RasterToImageFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtenemos parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        this.alphaReal = ((Integer) params.get("alpha")).intValue();
+        this.height = raster.getHeight();
+        this.width = raster.getWidth();
+        this.alpha = (alphaReal & 0xff) << 24;
+        image = new BufferedImage(raster.getWidth(), raster.getHeight(),
+                                  BufferedImage.TYPE_INT_ARGB);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#process(int, int)
+     */
+    public void process(int x, int y) {
+      
+    }
+    
+	public void processSuperSampling(int x, int y) {
+		
+				
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getResult(java.lang.String)
+     */
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) image;
+        } else {
+            return null;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.PxRaster.RasterFilter#processLines(int)
+     */
+    public void processLine(int y) {
+       
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return raster.getDataType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RasterToImageFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsImageFilter.java	(revision 10281)
@@ -0,0 +1,111 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.bands;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RemoveBandsImageFilter extends RemoveBandsFilter {
+    /**
+     * Constructor
+     *
+     */
+    public RemoveBandsImageFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.image = (Image) params.get("raster");
+
+        height = image.getHeight(null);
+        width = image.getWidth(null);
+        super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        int px = ((BufferedImage) image).getRGB(col, line);
+        px = px & mascara;
+        ((BufferedImage) image).setRGB(col, line, px);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	 int px = ((BufferedImage) image).getRGB(col, line);
+         px = px & mascara;
+         for(int j = col; j < image.getWidth(null) && j < (col + stepX[contX + 1]); j++)
+ 			for(int i = line; i < image.getHeight(null) && i < (line + stepY[contY + 1]); i++)
+         		((BufferedImage) image).setRGB(j, i, px);
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+        super.post();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+
+    public Object getResult(String name) {
+        if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/RemoveBandsImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteIntFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteIntFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteIntFilter.java	(revision 10281)
@@ -0,0 +1,113 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Palette;
+
+/**
+ * Filtro de paleta a aplicar sobre una imagen con tipo de dato integer. Para cada elemento
+ * del RasterBuf se realiza la conversión de dato a través de la clase palette que se pasa
+ * como parámetro al filtro en la inicialización.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteIntFilter extends PaletteFilter {
+	private int[] 		px = new int[4];
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	public PaletteIntFilter(){
+		super();
+	}
+	
+	
+	public void pre(){
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+        rasterResult = new RasterBuf(raster.getDataType(),width,height,3,true);
+		super.pre();
+	}
+	
+	public void process(int col, int line) {
+        raster.getElemInt(line, col, px);
+        int rgb;
+        if(interpolate)
+        	rgb = palette.getInterpolateRGB2(px[0]);
+        else
+        	rgb = palette.getRGB(px[0]);
+		
+        int pxOut[] = {(rgb & 0x00ff0000) >> 16,
+						(rgb & 0x0000ff00) >> 8, 
+						(rgb & 0x000000ff)};
+        rasterResult.setElemInt(line, col,pxOut);
+
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		raster.getElemInt(line, col, px);
+		int rgb;
+        if(interpolate)
+        	rgb = palette.getInterpolateRGB2(px[0]);
+        else
+        	rgb = palette.getRGB(px[0]);
+		
+        int pxOut[] = {(rgb & 0x00ff0000) >> 16,
+				(rgb & 0x0000ff00) >> 8, 
+				(rgb & 0x000000ff)};
+        for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)
+				rasterResult.setElemInt(i, j,pxOut);		
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+			if(isExec())
+				return (Object) this.rasterResult;
+			else
+				return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteIntFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteStackManager.java	(revision 10281)
@@ -0,0 +1,242 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import java.util.ArrayList;
+
+import org.cresques.filter.IStackManager;
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Palette;
+
+/**
+ * Gestor de la pila de filtros para el filtro de brillo.
+ * @author Miguel ï¿½ngel Querol Carratalï¿½  <querol_mig@gva.es>
+ *
+ */
+
+public class PaletteStackManager implements IStackManager{
+	
+	public final static int				palette = 13;
+	
+	protected RasterFilterStack 		filterStack = null;
+	private RasterFilterStackManager	filterStackManager = null;
+	
+	
+	public PaletteStackManager(RasterFilterStackManager filterStackManager){
+		this.filterStackManager = filterStackManager;
+		this.filterStack = filterStackManager.getFilterStack();
+		filterStackManager.addTypeFilter("palette", PaletteStackManager.palette, 5);		
+	}
+	
+	
+	/**
+	 * Obtiene el valor entero que corresponde al tipo de filtro.
+	 * @param rasterFilter
+	 * @return
+	 */
+	public int getType(RasterFilter rasterFilter){
+		if(rasterFilter instanceof PaletteFilter)
+			return PaletteStackManager.palette;
+							
+		return -1;
+	}
+	
+	/**
+	 * Aï¿½ade un filtro de brillo a la pila de filtros.
+	 * @param incrBrillo
+	 */
+	public void addPaletteFilter(Palette palette, boolean interpolate){
+		//Si ya hay un filtro de paleta en la pila lo sobreescribimos
+		
+		if(filterStack.isActive(((Integer) filterStackManager.getTypeFilters().get("palette")).intValue()))
+			filterStack.removeFilter(((Integer) filterStackManager.getTypeFilters().get("palette")).intValue());
+	
+		RasterFilter filtro = null;
+		
+		switch(filterStack.getDataTypeInFilter(((Integer)this.filterStackManager.getTypeFilters().get("palette")).intValue())){
+		case RasterBuf.TYPE_IMAGE:
+			filtro = new PaletteImageFilter();
+			break;
+		case RasterBuf.TYPE_SHORT:
+			filtro = new PaletteShortFilter();
+			break;
+		case RasterBuf.TYPE_USHORT:
+			filtro = new PaletteShortFilter();
+			break;
+		case RasterBuf.TYPE_INT:
+			filtro = new PaletteIntFilter();
+			break;
+		case RasterBuf.TYPE_FLOAT:
+			filtro = new PaletteFloatFilter();
+			break;
+		case RasterBuf.TYPE_DOUBLE:
+			filtro = new PaletteDoubleFilter();
+			break;
+		}
+		
+		//Cuando el filtro esta creado, tomamos los valores y lo añadimos a la pila
+		
+		if(filtro != null){
+			filtro.addParam("palette", palette);
+			filtro.addParam("interpolate", new Boolean (interpolate));
+			filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("palette")).intValue(), filtro);
+			filterStackManager.controlTypes();
+		}
+	}
+	
+		
+	
+	public void createStackFromStrings(ArrayList f, Integer pos) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	/**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+	public int createStackFromStrings(ArrayList filters, String fil, GeoRasterFile[] grfList, int filteri) {
+		if(fil.startsWith("filter.palette.active")){
+			
+			boolean exec = true;
+			if((RasterFilterStackManager.getValue(fil).equals("false")))
+				exec = false;
+			
+			Palette palette = new Palette();	
+			int lengthList = 0;
+			boolean interpolate = false;
+			
+			filters.remove(0);
+			for(int prop = 0; prop < filters.size() ; prop++){	
+				String elem = (String) filters.get(prop);
+				if(elem.startsWith("filter.palette.type")){
+					palette.setType(Integer.parseInt(RasterFilterStackManager.getValue(elem)));
+					filters.remove(prop);
+					prop--;
+				}
+								
+				if(elem.startsWith("filter.palette.values")){
+					String[] listString = RasterFilterStackManager.getValue(elem).split(" ");
+					int[] listInt = new int[listString.length];
+					for(int i = 0; i < listString.length; i++)
+						listInt[i] = Integer.parseInt(listString[i]);
+					palette.setPalette(listInt);
+					filters.remove(prop);
+					prop--;
+				}
+				
+				if(elem.startsWith("filter.palette.range")){
+					String[] listString = RasterFilterStackManager.getValue(elem).split(" ");
+					lengthList = listString.length;
+					if(palette.getType() == RasterBuf.TYPE_BYTE || palette.getType() == RasterBuf.TYPE_SHORT || palette.getType() == RasterBuf.TYPE_INT){
+						int[] listInt = new int[listString.length];
+						for(int i = 0; i < listString.length; i++)
+							listInt[i] = Integer.parseInt(listString[i]);	
+						palette.setIntRange(listInt);
+					}else{
+						double[] listDouble = new double[listString.length];
+						for(int i = 0; i < listString.length; i++)
+							listDouble[i] = Double.parseDouble(listString[i]);	
+						palette.setDoubleRange(listDouble);
+					}
+					filters.remove(prop);
+					prop--;
+				}
+				
+				if(elem.startsWith("filter.palette.names")){
+					String[] listString = RasterFilterStackManager.getValue(elem).split(" ");
+					if(listString.length == 0){
+						listString = new String[lengthList];
+						for(int i = 0; i < listString.length; i++)
+							listString[i] = "";
+					}
+					palette.setNameClass(listString);
+					filters.remove(prop);
+					prop--;
+				}
+				
+				if(elem.startsWith("filter.palette.interpolate")){
+					interpolate = Boolean.valueOf(RasterFilterStackManager.getValue(elem)).booleanValue();
+					filters.remove(prop);
+					prop--;
+				}
+			}	
+			this.addPaletteFilter(palette,interpolate);	
+			
+			PaletteFilter pf = (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+			pf.setExec(exec);
+		}
+		//return filteri;
+		return -1;
+	}
+
+	public ArrayList getStringsFromStack() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	/**
+	 * Obtiene un Array de Strings a partir de una pila de filtros. Cada elemento del array
+	 * tendrï¿½ la forma de elemento=valor.
+	 */
+	
+	public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf) {
+		if(rf instanceof PaletteFilter){
+			PaletteFilter paletteFilter = (PaletteFilter)rf;
+			//Palette palette = ((PaletteFilter)rf).getPalette();
+			Palette palette = (Palette)((PaletteFilter)rf).getParam("palette");
+			if (palette !=null){
+				if (rf.isExec())
+					filterList.add("filter.palette.active=true");
+				else
+					filterList.add("filter.palette.active=false");
+				filterList.add("filter.palette.type="+palette.getType());
+				filterList.add("filter.palette.interpolate="+paletteFilter.interpolate);
+							
+				String range = "";
+				if(palette.getType() == RasterBuf.TYPE_BYTE || palette.getType() == RasterBuf.TYPE_SHORT || palette.getType() == RasterBuf.TYPE_INT){
+					for(int i = 0; i < palette.getIntRange().length; i++)
+						range += palette.getIntRange()[i]+" ";
+				}else{
+					for(int i = 0; i < palette.getDoubleRange().length; i++)
+						range += palette.getDoubleRange()[i]+" ";
+				}
+				filterList.add("filter.palette.range="+range);
+				
+				String values = "";
+				for(int i = 0; i < palette.getPalette().length; i++)
+					values += palette.getPalette()[i]+" ";
+				filterList.add("filter.palette.values="+values);
+				
+				String names = "";
+				for(int i = 0; i < palette.getNameClass().length; i++)
+					names += palette.getNameClass()[i]+" ";
+				filterList.add("filter.palette.names="+names);
+			}
+		}
+		return filterList;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteStackManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteShortFilter.java	(revision 10281)
@@ -0,0 +1,112 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.bands;
+
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de paleta a aplicar sobre una imagen con tipo de dato short. Para cada elemento
+ * del RasterBuf se realiza la conversión de dato a través de la clase palette que se pasa
+ * como parámetro al filtro en la inicialización.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteShortFilter extends PaletteFilter {
+	private short[] 		px = new short[4];
+	
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	public PaletteShortFilter(){
+		super();
+	}
+	
+	
+	public void pre(){
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+        rasterResult = new RasterBuf(raster.getDataType(),width,height,3,true);
+		super.pre();
+	}
+	
+	public void process(int col, int line) {
+		raster.getElemShort(line, col, px);
+        int rgb;
+        if(interpolate)
+        	rgb = palette.getInterpolateRGB2(px[0]);
+        else
+        	rgb = palette.getRGB(px[0]);
+		
+        short pxOut[] = {(short)((rgb & 0x00ff0000) >> 16),
+        		(short)((rgb & 0x0000ff00) >> 8), 
+        		(short)((rgb & 0x000000ff))};
+        rasterResult.setElemShort(line, col,pxOut);
+	}
+
+	 /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+	public void processSuperSampling(int col, int line) {
+		raster.getElemShort(line, col, px);
+		int rgb;
+        if(interpolate)
+        	rgb = palette.getInterpolateRGB2(px[0]);
+        else
+        	rgb = palette.getRGB(px[0]);
+		
+        short pxOut[] = {(short)((rgb & 0x00ff0000) >> 16),
+        		(short)((rgb & 0x0000ff00) >> 8), 
+        		(short)((rgb & 0x000000ff))};
+        for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+			for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)
+				rasterResult.setElemShort(i, j,pxOut);		
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+			if(isExec())
+				return (Object) this.rasterResult;
+			else
+				return (Object) this.raster;
+        } else {
+            return null;
+        }
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/bands/PaletteShortFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRaster.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRaster.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRaster.java	(revision 10281)
@@ -0,0 +1,95 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+import java.awt.image.DataBuffer;
+import es.gva.cit.jgdal.Gdal;
+
+
+/**
+ * Raster con acceso a los elementos individuales (pixeles o datos de celda).
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public interface IRaster {
+    public final static int TYPE_UNDEFINED = DataBuffer.TYPE_UNDEFINED;
+    public final static int TYPE_BYTE = DataBuffer.TYPE_BYTE;
+    public final static int TYPE_SHORT = DataBuffer.TYPE_SHORT;
+    public final static int TYPE_USHORT = DataBuffer.TYPE_USHORT;
+    public final static int TYPE_INT = DataBuffer.TYPE_INT;
+    public final static int TYPE_FLOAT = DataBuffer.TYPE_FLOAT;
+    public final static int TYPE_DOUBLE = DataBuffer.TYPE_DOUBLE;
+    public final static int TYPE_IMAGE = -1;
+
+    /**
+     * Ancho del raster
+     * @return Entero con el ancho del raster
+     */
+    public int getWidth();
+
+    /**
+     * Alto del raster
+     * @return Entero con el alto del raster
+     */
+    public int getHeight();
+
+    /**
+     * Número de bandas
+     * @return Entero con el número de bandas
+     */
+    public int getBandCount();
+
+    /**
+     * Devuelve el tipo de datos del raster
+     * @see java.awt.image.DataBuffer
+     */
+    public int getDataType();
+
+    /**
+     * Obtiene sobre un array de bandas el valor del raster en la
+     * coordenada que se le pasa. Los elementos son de 16 bits.
+     * @param x        coordenada X
+     * @param y coordenada Y
+     * @param px Array de 4 elementos para las bandas de la imagen ARGB
+     */
+    public void getElemShort(int x, int y, short[] px);
+
+    /**
+     * Obtiene sobre un array de bandas el valor del raster en la
+     * coordenada que se le pasa. Los elementos son de 32 bits.
+     * @param x        coordenada X
+     * @param y coordenada Y
+     * @param px Array de 4 elementos para las bandas de la imagen ARGB
+     */
+    public void getElemInt(int x, int y, int[] px);
+
+    /**
+     * Obtiene el valor del raster en la coordenada que se le pasa.
+     * Devuelve un int.
+     * @param x        coordenada X
+     * @param y coordenada Y
+     * @param band banda
+     * @return Entero
+     */
+    public int getElemInt(int x, int y, int band);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRaster.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IStackManager.java	(revision 10281)
@@ -0,0 +1,78 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+import java.util.ArrayList;
+
+import org.cresques.io.GeoRasterFile;
+
+
+/**
+ * Interfaz que deben implementar los Gestores de pila de filtros
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public interface IStackManager {
+    /**
+     * Convierte cada filtro o elemento de un filtro de la pila en un String de la forma
+     * elemento=valor
+     * @return ArrayList donde cada elemento es una cadena
+     */
+    public ArrayList getStringsFromStack();
+    
+    /**
+     * Convierte cada filtro o elemento de un filtro de la pila en un String de la forma
+     * elemento=valor. Esta versión la implementan las extensiones que registren filtros
+     * de forma externa para que pueda ser ejecutado por el RasterFilterStackManager.
+     * @return ArrayList donde cada elemento es una cadena
+     */
+    public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf);
+
+    /**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+    public void createStackFromStrings(ArrayList f, Integer pos);
+    
+    /**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor. Esta versión la implementan las extensiones que registren filtros
+     * de forma externa para que pueda ser ejecutado por el RasterFilterStackManager.
+     * @param fil Cadena que representa el identificador del elemento 
+     * @param filters	Lista de filtros
+     * @param grfList	Lista de geoRasterFile
+     * @param filteri Número de filtro de la lista analizado
+     * @return filteri modificado
+     */    
+    public int createStackFromStrings(ArrayList filters, String fil, GeoRasterFile[] grfList, int filteri);
+    
+    /**
+     * Obtiene el tipo de filtro a partir del objeto RasterFilter
+     * @param rasterFilter        Objeto RasterFilter del cual se quiere saber que tipo de filtro contiene
+     * @return        Tipo de filtro según las constantes contenidas en RasterFilterStackManager
+     */
+    public int getType(RasterFilter rasterFilter);
+}
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IStackManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxFilter.java	(revision 10281)
@@ -0,0 +1,134 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.datastruct.Statistic;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Calcula el máximo y el mínimo de un raster, Así como el segundo menor valor y
+ * el segundo mayor valor.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public abstract class ComputeMinMaxFilter extends RasterFilter {
+    protected int[] min = {
+                              Integer.MAX_VALUE, Integer.MAX_VALUE,
+                              Integer.MAX_VALUE
+                          };
+    protected int[] max = {
+                              Integer.MIN_VALUE, Integer.MIN_VALUE,
+                              Integer.MIN_VALUE
+                          };
+    protected int[] secondMin = {
+                                    Integer.MAX_VALUE, Integer.MAX_VALUE,
+                                    Integer.MAX_VALUE
+                                };
+    protected int[] secondMax = {
+                                    Integer.MIN_VALUE, Integer.MIN_VALUE,
+                                    Integer.MIN_VALUE
+                                };
+    protected int[] tmpMin = {
+                                 Integer.MAX_VALUE, Integer.MAX_VALUE,
+                                 Integer.MAX_VALUE
+                             };
+    protected int[] tmpMax = {
+                                 Integer.MIN_VALUE, Integer.MIN_VALUE,
+                                 Integer.MIN_VALUE
+                             };
+
+    /**
+     * Constructor
+     *
+     */
+    public ComputeMinMaxFilter() {
+        super();
+        //super.filterName = Messages.getText("compute_minmax");
+    }
+
+    /**
+     * Operaciones que se realizan antes de la ejecución del filtro
+     */
+    public void pre() {
+        //Obtención de parámetros comunes a todos
+        this.stats = (Statistic) params.get("stats");
+        this.stats.tailPercent = 0D;
+
+        //Operaciones del filtro concreto
+        this.min = new int[stats.minBandValue.length];
+        this.max = new int[stats.maxBandValue.length];
+        this.secondMin = new int[stats.minBandValue.length];
+        this.secondMax = new int[stats.maxBandValue.length];
+        this.tmpMin = new int[stats.minBandValue.length];
+        this.tmpMax = new int[stats.maxBandValue.length];
+
+        for (int i = 0; i < min.length; i++) {
+            secondMin[i] = tmpMin[i] = min[i] = Integer.MAX_VALUE;
+            secondMax[i] = tmpMax[i] = max[i] = Integer.MIN_VALUE;
+        }
+    }
+
+    /**
+     * Operaciones que se realizan después de la ejecución del filtro
+     */
+    public void post() {
+        for (int i = 0; i < 3; i++) {
+            stats.minBandValue[i] = min[i];
+            stats.maxBandValue[i] = max[i];
+            stats.secondMinBandValue[i] = secondMin[i];
+            stats.secondMaxBandValue[i] = secondMax[i];
+        }
+    }
+
+    /**
+     * Obtiene le mínimo para una banda dada
+     * @param bandNr        banda
+     * @return        valor mínimo
+     */
+    public int getMin(int bandNr) {
+        return min[bandNr];
+    }
+
+    /**
+     * Obtiene el máximo para una banda dada
+     * @param bandNr        banda
+     * @return        valor máximo
+     */
+    public int getMax(int bandNr) {
+        return max[bandNr];
+    }
+
+    /**
+     * Obtiene el objeto stats con el calculo de máximos y mínimos
+     */
+    public Object getResult(String name) {
+        if (name.equals("stats")) {
+            return stats;
+        } else {
+            return null;
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxShortFilter.java	(revision 10281)
@@ -0,0 +1,143 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Calcula el máximo y el mínimo de un raster.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class ComputeMinMaxShortFilter extends ComputeMinMaxFilter {
+	private short[] 		px = new short[4];
+    /**
+     * Constructor
+     *
+     */
+    public ComputeMinMaxShortFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line)  {
+        raster.getElemShort(line, col, px);
+
+        int pxBand = px[0];
+
+        if (pxBand < min[0]) {
+            secondMin[0] = min[0];
+            min[0] = pxBand;
+        } else if ((pxBand < secondMin[0]) && (pxBand != min[0])) {
+            secondMin[0] = pxBand;
+        }
+
+        if (pxBand > max[0]) {
+            secondMax[0] = max[0];
+            max[0] = pxBand;
+        } else if ((pxBand > secondMax[0]) && (pxBand != max[0])) {
+            secondMax[0] = pxBand;
+        }
+
+        pxBand = px[1];
+
+        if (pxBand < min[1]) {
+            secondMin[1] = min[1];
+            min[1] = pxBand;
+        } else if ((pxBand < secondMin[1]) && (pxBand != min[1])) {
+            secondMin[1] = pxBand;
+        }
+
+        if (pxBand > max[1]) {
+            secondMax[1] = max[1];
+            max[1] = pxBand;
+        } else if ((pxBand > secondMax[1]) && (pxBand != max[1])) {
+            secondMax[1] = pxBand;
+        }
+
+        pxBand = px[2];
+
+        if (pxBand < min[2]) {
+            secondMin[2] = min[2];
+            min[2] = pxBand;
+        } else if ((pxBand < secondMin[2]) && (pxBand != min[2])) {
+            secondMin[2] = pxBand;
+        }
+
+        if (pxBand > max[2]) {
+            secondMax[2] = max[2];
+            max[2] = pxBand;
+        } else if ((pxBand > secondMax[2]) && (pxBand != max[2])) {
+            secondMax[2] = pxBand;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line)  {
+    	process(col, line);
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+        super.post();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxShortFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFilter.java	(revision 10281)
@@ -0,0 +1,183 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.util.QuickSort;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * Filtro de recorte de colas. Este filtro toma pixels de la imagen (todos o algunas muestras
+ * dependiendo de la variable percentSample) y los ordena. Recorta un porcentaje controlado
+ * por tailPercenten ambos extremos del vector ordenado. El nuevo máximo y mínimo coinciden
+ * con el valor de la posición del vector recortado. Por arriba para el máximo y por abajo
+ * para el mínimo.
+ * El execute de este filtro no recorre toda la imagen sino que lo
+ * hace en función del porcentaje de muestras que quieren tomarse y
+ * calculando a partir de este porcentaje un incremento.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public abstract class PercentTailTrimFilter extends RasterFilter {
+    protected int[] 		min = {
+                              Integer.MAX_VALUE, Integer.MAX_VALUE,
+                              Integer.MAX_VALUE
+                          	};
+    protected int[] 		max = {
+                              Integer.MIN_VALUE, Integer.MIN_VALUE,
+                              Integer.MIN_VALUE
+                          	};
+    protected int 			count = 0;
+    protected double[][] 		sample;
+    private int 			tailSize = 0;
+    private int 			nSamples = 0;
+    private boolean 		removeMaxValue = false;
+    protected int 			incX , incY;
+
+    //Parámetros del filtro
+    protected double 		tailPercent = 0D;
+    public double 			percentSamples = 0D;
+    protected ArrayList 	fileList = new ArrayList();
+
+    public PercentTailTrimFilter() {
+    	super.filterName = Messages.getText("tail_trim");
+    }
+
+    /**
+     * Calcula el incremento de X y de Y para la toma de muestras en el calculo de
+     * valores para el recorte
+     */
+    public void pre() {
+        //Obtenemos parámetros comunes
+        this.stats = (Statistic) params.get("stats");
+        this.tailPercent = ((Double) params.get("tail")).doubleValue();
+        this.percentSamples = ((Double) params.get("samples")).doubleValue();
+        this.removeMaxValue = ((Boolean) params.get("remove")).booleanValue();
+
+        if (exec) {
+            this.stats.tailPercent = this.tailPercent;
+            count = 0;
+
+            if (this.percentSamples == 0) { //Se toman todos los pixeles de la imagen 
+                nSamples = height * width;
+                sample = new double[3][height * width];
+                tailSize = (int) Math.round(this.tailPercent * nSamples);
+            } else { //Se toma un porcentaje de pixeles de la imagen para el calculo
+                incX = (int) Math.round(width / (int) Math.round(this.percentSamples * width));
+                incY = (int) Math.round(height / (int) Math.round(this.percentSamples * height));
+                nSamples = (int) ((Math.round(width / incX) + 1) * (Math.round(height / incY) +
+                           1));
+                sample = new double[3][nSamples];
+                tailSize = (int) (nSamples * this.tailPercent);
+            }
+        }
+    }
+
+    /**
+     * Ordena las muestras , recorta y asigna máximo y mínimo dependiendo del porcentaje
+     * de recorte
+     */
+    public void post() {
+        if (exec) {
+            QuickSort q = new QuickSort();
+
+            int posInit = 0;
+            int posFin = sample[0].length - 1;
+
+            //Ordenamos los vectores
+            for (int i = 0; i < 3; i++)
+                //q.quicksort(sample[i]);
+            	Arrays.sort(sample[i]);
+
+            //Si está marcada la opción removeMaxValue se calcula la posición en la que el máximo valor
+            //y el mínimo ya no estan, teniendo así un subconjunto del vector que elimina estos valores
+            if (removeMaxValue) {
+                for (int i = 0; i < sample[0].length; i++) {
+                    if ((sample[0][i] != sample[0][0]) ||
+                            (sample[1][i] != sample[1][0]) ||
+                            (sample[2][i] != sample[2][0])) {
+                        posInit = i;
+
+                        break;
+                    }
+                }
+
+                for (int i = sample[0].length - 1; i > 0; i--) {
+                    if ((sample[0][i] != sample[0][sample[0].length - 1]) ||
+                            (sample[1][i] != sample[1][sample[0].length - 1]) ||
+                            (sample[2][i] != sample[2][sample[0].length - 1])) {
+                        posFin = i;
+
+                        break;
+                    }
+                }
+
+                //Calculamos de nuevo el número de muestras ya que hemos quitado los valores máximo y mínimo
+                nSamples = posFin - posInit;
+
+                //Como ha podido cambiar nSamples recalculamos tailsize
+                tailSize = (int) (nSamples * this.tailPercent);
+            }
+
+            //Ordenamos los elementos y cogemos el minimo y máximo para cada banda
+            for (int i = 0; i < 3; i++) {
+                stats.minBandValue[i] = sample[i][posInit + tailSize];
+                stats.maxBandValue[i] = sample[i][(posInit + nSamples) -
+                                        tailSize - 1];
+            }
+        }
+    }
+
+    /**
+     * Obtiene el objeto stats con el máximo y mínimo calculado
+     */
+    public Object getResult(String name) {
+        if (name.equals("stats")) {
+            return (Object) this.stats;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Obtiene el porcentaje de recorte
+     * @return porcentaje de recorte
+     */
+    public double getTailPercent() {
+        return tailPercent;
+    }
+
+    /**
+     * Devuelve true si se eliminan los extremos de la serie antes del calculo del recorte de colas
+     * o false si no se eliminan.
+     * @return
+     */
+    public boolean removeMaxValue() {
+        return this.removeMaxValue;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimShortFilter.java	(revision 10281)
@@ -0,0 +1,92 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Proceso del filtro de recorte de colas aplicado a imágenes 16 bits
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PercentTailTrimShortFilter extends PercentTailTrimFilter {
+	private short[] 		px = new short[4];
+	
+    public PercentTailTrimShortFilter() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        raster.getElemShort(line, col, px);
+        sample[0][count] = px[0];
+        sample[1][count] = px[1];
+        sample[2][count] = px[2];
+        count++;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	process(col, line);		
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_SHORT;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+
+    public void post() {
+        super.post();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimShortFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxImageFilter.java	(revision 10281)
@@ -0,0 +1,154 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Clase base para los filtros de calculo de máximo y mínimo en sus diferentes
+ * tipos de datos.
+ */
+public class ComputeMinMaxImageFilter extends ComputeMinMaxFilter {
+    
+	/**
+     * Constructor
+     *
+     */
+    public ComputeMinMaxImageFilter() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#pre()
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.image = (Image) params.get("raster");
+
+        height = image.getHeight(null);
+        width = image.getWidth(null);
+        super.pre();
+    }
+
+    /**
+     * Calcula el mínimo y el máximo y lo salva sobre las variables de instancia min, max,
+     * @param px
+     */
+    private void calcMinMax(int px){
+    	int pxBand = ((px & 0xff0000) >> 16);
+
+        if (pxBand < min[0]) {
+            secondMin[0] = min[0];
+            min[0] = pxBand;
+        } else if ((pxBand < secondMin[0]) && (pxBand != min[0])) {
+            secondMin[0] = pxBand;
+        }
+
+        if (pxBand > max[0]) {
+            secondMax[0] = max[0];
+            max[0] = pxBand;
+        } else if ((pxBand > secondMax[0]) && (pxBand != max[0])) {
+            secondMax[0] = pxBand;
+        }
+
+        pxBand = ((px & 0x00ff00) >> 8);
+
+        if (pxBand < min[1]) {
+            secondMin[1] = min[1];
+            min[1] = pxBand;
+        } else if ((pxBand < secondMin[1]) && (pxBand != min[1])) {
+            secondMin[1] = pxBand;
+        }
+
+        if (pxBand > max[1]) {
+            secondMax[1] = max[1];
+            max[1] = pxBand;
+        } else if ((pxBand > secondMax[1]) && (pxBand != max[1])) {
+            secondMax[1] = pxBand;
+        }
+
+        pxBand = (px & 0x0000ff);
+
+        if (pxBand < min[2]) {
+            secondMin[2] = min[2];
+            min[2] = pxBand;
+        } else if ((pxBand < secondMin[2]) && (pxBand != min[2])) {
+            secondMin[2] = pxBand;
+        }
+
+        if (pxBand > max[2]) {
+            secondMax[2] = max[2];
+            max[2] = pxBand;
+        } else if ((pxBand > secondMax[2]) && (pxBand != max[2])) {
+            secondMax[2] = pxBand;
+        }
+
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#process(int, int)
+     */
+    public void process(int col, int line) {
+        int px = ((BufferedImage) image).getRGB(col, line);
+        calcMinMax(px);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	process(col, line);
+	}
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+        super.post();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/ComputeMinMaxImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimImageFilter.java	(revision 10281)
@@ -0,0 +1,98 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+
+/**
+ * Proceso del filtro de recorte de colas aplicado a objetos Image
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PercentTailTrimImageFilter extends PercentTailTrimFilter {
+    public PercentTailTrimImageFilter() {
+    }
+
+    /**
+     * Obtiene parámetros para el filtro y obtiene el ancho y alto de
+     * la imagen sobre la que se aplica el filtro
+     */
+    public void pre() {
+        //Obtención de parámetros
+        this.image = (Image) params.get("raster");
+        height = image.getHeight(null);
+        width = image.getWidth(null);
+        super.pre();
+    }
+
+    /**
+     * Carga sobre el vector de muestras los valores de estas cogidos
+     * de la imagen
+     */
+    public void process(int col, int line) {
+        int pt = ((BufferedImage) image).getRGB(col, line);
+        sample[0][count] = ((pt & 0xff0000) >> 16) & 0xff;
+        sample[1][count] = ((pt & 0xff00) >> 8) & 0xff;
+        sample[2][count] = (pt & 0xff);
+        count++;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	process(col, line);		
+	}
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getInRasterDataType()
+     */
+    public int getInRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#getOutRasterDataType()
+     */
+    public int getOutRasterDataType() {
+        return RasterBuf.TYPE_IMAGE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.RasterFilter#processLine(int)
+     */
+    public void processLine(int y) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#post()
+     */
+    public void post() {
+        super.post();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFloatFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFloatFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFloatFilter.java	(revision 10281)
@@ -0,0 +1,46 @@
+package org.cresques.filter.statistics;
+
+import org.cresques.io.data.RasterBuf;
+
+public class PercentTailTrimFloatFilter extends PercentTailTrimFilter {
+
+	private float[] 		px = new float[4];
+	
+	public void process(int col, int line) {
+		raster.getElemFloat(line, col, px);
+        sample[0][count] = px[0];
+        sample[1][count] = px[1];
+        sample[2][count] = px[2];
+        count++;
+	}
+
+	public void processSuperSampling(int col, int line) {
+		process(col, line);	
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public void pre() {
+		 //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+	}
+
+	public void post() {
+		super.post();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimFloatFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramFilter.java	(revision 10281)
@@ -0,0 +1,55 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.statistics;
+
+import org.cresques.filter.RasterFilter;
+
+/**
+ * Clase base para los filtros de histograma.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ * 
+ */
+
+public abstract class HistogramFilter extends RasterFilter {
+	
+	/**
+	 * Número de bandas de la imagen sin contar RGB
+	 */
+	protected int				nBands = 0;
+	
+	
+	/**
+	 * Número de pixels de la imagen.
+	 */
+	int pixel = 0;
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	public HistogramFilter(){
+		super();
+	}
+	
+	
+	public void pre(){
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramImageFilter.java	(revision 10281)
@@ -0,0 +1,169 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.statistics;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.util.Vector;
+
+import org.cresques.io.data.RasterBuf;
+/**
+ * Filtro para crear histogramas de brillo para cada una de las bandas de la imagen.
+ * Toma como entrada la imagen y da como salida un histograma para cada una de las
+ * bandas representado mediante una matriz.
+ * @author Miguel Ángel Querol Carratalá  <querol_mig@gva.es>
+ *
+ */
+
+public class HistogramImageFilter extends HistogramFilter {
+
+	
+	/**
+	 * Matriz donde se van a almacenar los histogramas.
+	 */
+	int histoRed[] = new int[256];
+	int histoGreen[] =  new int[256];
+	int histoBlue[] = new int[256];
+	
+	
+	/**
+	 * Constructor
+	 *
+	 */
+	
+	
+	public HistogramImageFilter(){
+		super();
+	}
+	
+	public void pre(){
+		this.exec=true;
+		this.image = (Image) params.get("raster");
+		this.width = image.getWidth(null);
+		this.height = image.getHeight(null);
+		
+		for(int i = 0 ; i <= 255 ; i++){
+			histoRed[i]= 0; 
+			histoGreen[i] = 0;
+			histoBlue[i] = 0;
+		}
+		
+		super.pre();
+	}
+	
+	
+	public void post() {
+	}
+
+	public void process(int col, int line) {
+		int px = ((BufferedImage) image).getRGB(col, line);
+		int px3[] = {(px & 0xff0000) >> 16, (px & 0xff00) >> 8, (px & 0xff)};
+		
+		this.histoRed[px3[0]]+=1;  		//Histograma para la banda R
+		this.histoGreen[px3[1]]+=1;  	//Histograma para la banda G
+		this.histoBlue[px3[2]]+=1;  	//Histograma para la banda B
+		pixel++;						//Cuenta de los pixels de la imagen
+	}
+	
+	/* (non-Javadoc)
+     * @see org.cresques.io.raster.IRasterFilter#processSuperSampling(int, int)
+     */
+    public void processSuperSampling(int col, int line) {
+    	process(col, line);
+	}
+
+	/**
+	 * Metodo para obtener el valor medio de brillo para una banda de color.
+	 * @param vector
+	 * @return
+	 */
+	public int calculaMedia(int []vector){
+		int media = 0;
+		int suma = 0;
+		
+		for (int i = 1 ; i <= 255 ; i++){
+			suma += vector[i]*i;
+		}
+		media = suma/pixel;
+		
+		return media;
+	}
+	
+	public int getPixel(){
+		return this.pixel;
+	}
+	
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.image;
+        } else {
+            return null;
+        }
+	}
+	
+	/**
+	 * Metodos para acceder al los valores medios de brillo para cada banda
+	 * @return Media de brillo para la banda de color correspondiente.
+	 */
+	
+	public int getMediaRed(){
+		return calculaMedia(this.histoRed);
+	}
+
+	public int getMediaGreen(){
+		return calculaMedia(this.histoGreen);
+	}
+	
+	public int getMediaBlue(){
+		return calculaMedia(this.histoBlue);
+	}
+	
+	
+	/**
+	 * Metodos para acceder desde fuera a los histogramas calculados por el filtro
+	 * @return Histogramas de cada una de las bandas de color.
+	 */
+	public Object getRedHistogram(){
+		return (Object) this.histoRed;
+	}
+	
+	public Object getGreenHistogram(){
+		return (Object) this.histoGreen;
+	}
+	
+	public Object getBlueHistogram(){
+		return (Object) this.histoBlue;
+	}
+	
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/HistogramImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimDoubleFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimDoubleFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimDoubleFilter.java	(revision 10281)
@@ -0,0 +1,49 @@
+package org.cresques.filter.statistics;
+
+import org.cresques.io.data.RasterBuf;
+
+public class PercentTailTrimDoubleFilter extends PercentTailTrimFilter {
+	
+	private double[] 		px = new double[4];
+	
+	public void process(int col, int line) {
+		raster.getElemDouble(line, col, px);
+        sample[0][count] = px[0];
+        sample[1][count] = px[1];
+        sample[2][count] = px[2];
+        count++;
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		process(col, line);	
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub
+		super.post();
+	}
+
+	public void pre() {
+		 //Obtenciï¿½n de parï¿½metros
+        this.raster = (RasterBuf) params.get("raster");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimDoubleFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimIntegerFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimIntegerFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimIntegerFilter.java	(revision 10281)
@@ -0,0 +1,76 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter.statistics;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Proceso del filtro de recorte de colas aplicado a imágenes 32 bits
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PercentTailTrimIntegerFilter extends PercentTailTrimFilter {
+
+	private int[] 		px = new int[4];
+	
+	public void process(int col, int line) {
+		raster.getElemInt(line, col, px);
+        sample[0][count] = px[0];
+        sample[1][count] = px[1];
+        sample[2][count] = px[2];
+        count++;
+	}
+
+	public void processSuperSampling(int col, int line) {
+		process(col, line);	
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public void post() {
+		super.post();
+	}
+
+	public void pre() {
+		 //Obtención de parámetros
+        this.raster = (RasterBuf) params.get("raster");
+        height = raster.getHeight();
+        width = raster.getWidth();
+        super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/statistics/PercentTailTrimIntegerFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeImageFilter.java	(revision 10281)
@@ -0,0 +1,297 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.segmentation;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de Sobel que se aplica en la imagen. Toma como entrada la imagen
+ * y el umbral (cero para no umbralizar).
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class FirstDerivativeImageFilter extends FirstDerivativeFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public FirstDerivativeImageFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public FirstDerivativeImageFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		int px;
+		int outR,outG,outB;
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		px = ((BufferedImage) image).getRGB(col, line); 
+		int alpha = (px & 0xff000000);       //Extraigo el alpha para mantenerlo.
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					px = ((BufferedImage) image).getRGB(col + i, line + j);
+					ventanaR[i+semiLado][j+semiLado] =(px & 0x00ff0000) >> 16;
+					ventanaG[i+semiLado][j+semiLado] =(px & 0x0000ff00) >> 8;
+					ventanaB[i+semiLado][j+semiLado] =(px & 0x000000ff);
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+				convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+				convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+				convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+				convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+				convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+
+				if (compare){
+					if (convoResult[0][0]>convoResult[0][1]) outR= convoResult[0][0];
+					else outR= convoResult[0][1];
+					
+					if (convoResult[1][0]>convoResult[1][1]) outG= convoResult[1][0];
+					else outG= convoResult[1][1];
+					
+					if (convoResult[2][0]>convoResult[2][1]) outB= convoResult[2][0];
+					else outB= convoResult[2][1];
+				}
+				else{
+					outR=(short)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+					outG=(short)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+					outB=(short)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+				}
+				
+				if (umbral>0){
+					if(outR>=umbral)outR=255;
+					else outR=0;
+					if(outG>=umbral)outG=255;
+					else outG=0;
+					if(outB>=umbral)outB=255;
+					else outB=0;
+				}
+				
+				else{
+					if (outR<0) outR=0;
+					else if (outR>255) outR=255;
+					if (outG<0) outG=0;
+					else if (outG>255) outG=255;
+					if (outB<0) outB=0;
+					else if (outB>255) outB=255;
+				}
+			
+			((BufferedImage) imageResult).setRGB(col, line, (alpha | 
+															((outR << 16) & 0x00ff0000) | 
+															((outG << 8) & 0x0000ff00) | 
+															(outB & 0x000000ff)));
+			
+		}
+		else ((BufferedImage) imageResult).setRGB(col, line, px);
+		
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		int px;
+		int outR,outG,outB;
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+
+		Kernel kernelRGB[] = null;
+
+		px = ((BufferedImage) image).getRGB(col, line); 
+		int alpha = (px & 0xff000000);       //Extraigo el alpha para mantenerlo.
+		
+		//		 Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubImage(ladoVentana, col, line);
+		if(kernelRGB!=null)
+		{
+			convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+			convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+			convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+			convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+			convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+			convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+			
+			if (compare){
+				if (convoResult[0][0]>convoResult[0][1]) outR= convoResult[0][0];
+				else outR= convoResult[0][1];
+				
+				if (convoResult[1][0]>convoResult[1][1]) outG= convoResult[1][0];
+				else outG= convoResult[1][1];
+				
+				if (convoResult[2][0]>convoResult[2][1]) outB= convoResult[2][0];
+				else outB= convoResult[2][1];
+			}
+			else{
+				outR=(short)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+				outG=(short)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+				outB=(short)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+			}
+				
+			if (umbral>0){
+				if(outR>=umbral)outR=255;
+				else outR=0;
+				if(outG>=umbral)outG=255;
+				else outG=0;
+				if(outB>=umbral)outB=255;
+				else outB=0;
+			}
+			
+			else{
+				if (outR<0) outR=0;
+				else if (outR>255) outR=255;
+				if (outG<0) outG=0;
+				else if (outG>255) outG=255;
+				if (outB<0) outB=0;
+				else if (outB>255) outB=255;
+			}
+			
+			 for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+					for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)	
+				((BufferedImage) imageResult).setRGB(j, i, 	alpha | 
+												((outR << 16) & 0x00ff0000) |
+												((outG << 8) & 0x0000ff00) |
+												(outB & 0x000000ff));
+	
+		}
+		else
+			 for(int j = col; j < width && j < (col + stepX[contX + 1]); j++)
+					for(int i = line; i < height && i < (line + stepY[contY + 1]); i++)	
+				((BufferedImage) imageResult).setRGB(j, i,px);
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.imageResult;
+        } else {
+            return null;
+        }
+	}
+	
+	/**
+	 * Obtiene tres ventanas centradas en la coordena (x,y) de tamaï¿½o ladoVentana * ladoVentana.
+	 * 
+	 * @return null si la ventana se sale de la imagen.
+	 */
+	public Kernel[] extractSubImage(int ladoVentana,int x,int y){
+		
+		int indiceX,indiceY,origenX,origenY;
+		int px;
+		int semiLado = (ladoVentana-1)>>1;
+		int offsetX=0;
+		int offsetY=0;
+		
+		Kernel kernelRGB[] = null;
+
+		if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			for (int i=0;i<semiLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((contY+1-semiLado>=0) && (x+offsetX<width)&&(y+offsetY<height)){
+				
+				double ventanaR[][] = new double[ladoVentana][ladoVentana];
+				double ventanaG[][] = new double[ladoVentana][ladoVentana];
+				double ventanaB[][] = new double[ladoVentana][ladoVentana];
+				kernelRGB = new Kernel[3];
+				
+				origenX=x;
+				origenY=y;
+				
+				kernelRGB = new Kernel[3];
+				for (int i=0;i<semiLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];
+				}
+				//Recorro el kernel segï¿½n los step
+				indiceX=origenX;
+				for (int i=-semiLado;i<=semiLado;i++){
+					indiceY=origenY;
+					for(int j=-semiLado;j<=semiLado;j++){
+						px = ((BufferedImage) image).getRGB(indiceX, indiceY);
+						ventanaR[i+semiLado][j+semiLado] =(px & 0x00ff0000) >> 16;
+						ventanaG[i+semiLado][j+semiLado] =(px & 0x0000ff00) >> 8;
+						ventanaB[i+semiLado][j+semiLado] =(px & 0x000000ff);
+						indiceY=indiceY+stepY[contY+j+1];
+									
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				kernelRGB[0]= new Kernel(ventanaR);
+				kernelRGB[1]= new Kernel(ventanaG);
+				kernelRGB[2]= new Kernel(ventanaB);
+			}
+		}
+		return kernelRGB;
+	}
+
+	public void pre() {
+		exec = true;
+		this.image = (Image) params.get("raster");
+		height = image.getHeight(null);
+        width = image.getWidth(null);
+		imageResult = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+		
+		super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFloatFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFloatFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFloatFilter.java	(revision 10281)
@@ -0,0 +1,259 @@
+package org.cresques.filter.segmentation;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+public class FirstDerivativeFloatFilter extends FirstDerivativeFilter {
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public FirstDerivativeFloatFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public FirstDerivativeFloatFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		float[] pxOut = new float[4];
+		float[] px = new float[4];
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemFloat(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemFloat(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+				convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+				convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+				convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+				convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+				convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+				
+				
+				if (compare){
+					if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+					else pxOut[0]= convoResult[0][1];
+					
+					if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+					else pxOut[1]= convoResult[1][1];
+					
+					if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+					else pxOut[2]= convoResult[2][1];
+					
+				}
+				else{
+					pxOut[0]=(int)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+					pxOut[1]=(int)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+					pxOut[2]=(int)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+				}
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemFloat(line, col,pxOut);
+		}
+		else rasterResult.setElemFloat(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		float[] px = new float[4];
+		float[] pxOut = new float[4];
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemFloat(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+			convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+			convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+			convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+			convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+			convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+			convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+			
+			if (compare){
+				if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+				else pxOut[0]= convoResult[0][1];
+				
+				if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+				else pxOut[1]= convoResult[1][1];
+				
+				if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+				else pxOut[2]= convoResult[2][1];
+				
+			}
+			else{
+				pxOut[0]=(int)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+				pxOut[1]=(int)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+				pxOut[2]=(int)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+			}
+			
+			if (umbral>0){
+				if(pxOut[0]>=umbral)pxOut[0]=255;
+				else pxOut[0]=0;
+				if(pxOut[1]>=umbral)pxOut[1]=255;
+				else pxOut[1]=0;
+				if(pxOut[2]>=umbral)pxOut[2]=255;
+				else pxOut[2]=0;
+			}
+			else{
+				
+				if (pxOut[0]<0) pxOut[0]=0;
+				else if (pxOut[0]>255) pxOut[0]=255;
+				if (pxOut[1]<0) pxOut[1]=0;
+				else if (pxOut[1]>255) pxOut[1]=255;
+				if (pxOut[2]<0) pxOut[2]=0;
+				else if (pxOut[2]>255) pxOut[2]=255;
+			}
+			
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemFloat(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemFloat(j, i,px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+			
+			int k,indiceX,indiceY,origenX,origenY;
+			float[] 		px = new float[4];
+			int semiLado = (ladoVentana-1)>>1;
+			int offsetX=0;
+			int offsetY=0;
+			
+			Kernel kernelRGB[] = null;
+			
+			// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+			// Me situo en la esquina superior izquierda del "kernel"
+			if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+				
+				// Calcular el alcance del kernel cuyo centro es (x,y)
+				for (int i=0;i<semiLado;i++){
+					offsetX=offsetX+stepX[contX+i+1];
+					offsetY=offsetY+stepY[contY+i+1];
+				}
+				if((x+offsetX<width)&&(y+offsetY<height)){
+					
+					double ventanaR[][] = new double[ladoVentana][ladoVentana];
+					double ventanaG[][] = new double[ladoVentana][ladoVentana];
+					double ventanaB[][] = new double[ladoVentana][ladoVentana];
+					kernelRGB = new Kernel[3];
+					
+					origenX=x;
+					origenY=y;
+					for (int i=0;i<semiLado;i++){
+						origenX=origenX-stepX[contX-i];
+						origenY=origenY-stepY[contY-i];	
+					}
+					//Recorro el kernel segï¿½n los step
+					k=0;
+					indiceX=origenX;
+					for (int i=-semiLado;i<=semiLado;i++){
+						indiceY=origenY;
+						for(int j=-semiLado;j<=semiLado;j++){	
+							raster.getElemFloat(indiceY,indiceX,px);	
+							ventanaR[i+semiLado][j+semiLado] =px[0];
+							ventanaG[i+semiLado][j+semiLado] =px[1];
+							ventanaB[i+semiLado][j+semiLado] =px[2];
+							indiceY=indiceY+stepY[contY+j+1];
+							k++;
+						}
+						indiceX=indiceX+stepX[contX+i+1];
+					}
+					//**************************************************************************************************
+					kernelRGB[0]= new Kernel(ventanaR);
+					kernelRGB[1]= new Kernel(ventanaG);
+					kernelRGB[2]= new Kernel(ventanaB);
+				}
+			}
+			return kernelRGB;
+		}
+
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFloatFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeDoubleFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeDoubleFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeDoubleFilter.java	(revision 10281)
@@ -0,0 +1,260 @@
+package org.cresques.filter.segmentation;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+public class FirstDerivativeDoubleFilter extends FirstDerivativeFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public FirstDerivativeDoubleFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public FirstDerivativeDoubleFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		double[] pxOut = new double[4];
+		double[] px = new double[4];
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemDouble(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemDouble(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+				convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+				convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+				convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+				convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+				convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+				
+				
+				if (compare){
+					if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+					else pxOut[0]= convoResult[0][1];
+					
+					if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+					else pxOut[1]= convoResult[1][1];
+					
+					if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+					else pxOut[2]= convoResult[2][1];
+					
+				}
+				else{
+					pxOut[0]=(int)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+					pxOut[1]=(int)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+					pxOut[2]=(int)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+				}
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemDouble(line, col,pxOut);
+		}
+		else rasterResult.setElemDouble(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		double[] px = new double[4];
+		double[] pxOut = new double[4];
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemDouble(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+			convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+			convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+			convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+			convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+			convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+			convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+			
+			if (compare){
+				if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+				else pxOut[0]= convoResult[0][1];
+				
+				if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+				else pxOut[1]= convoResult[1][1];
+				
+				if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+				else pxOut[2]= convoResult[2][1];
+				
+			}
+			else{
+				pxOut[0]=(int)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+				pxOut[1]=(int)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+				pxOut[2]=(int)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+			}
+			
+			if (umbral>0){
+				if(pxOut[0]>=umbral)pxOut[0]=255;
+				else pxOut[0]=0;
+				if(pxOut[1]>=umbral)pxOut[1]=255;
+				else pxOut[1]=0;
+				if(pxOut[2]>=umbral)pxOut[2]=255;
+				else pxOut[2]=0;
+			}
+			else{
+				
+				if (pxOut[0]<0) pxOut[0]=0;
+				else if (pxOut[0]>255) pxOut[0]=255;
+				if (pxOut[1]<0) pxOut[1]=0;
+				else if (pxOut[1]>255) pxOut[1]=255;
+				if (pxOut[2]<0) pxOut[2]=0;
+				else if (pxOut[2]>255) pxOut[2]=255;
+			}
+			
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemDouble(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemDouble(j, i,px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+			
+			int k,indiceX,indiceY,origenX,origenY;
+			double[] 		px = new double[4];
+			int semiLado = (ladoVentana-1)>>1;
+			int offsetX=0;
+			int offsetY=0;
+			
+			Kernel kernelRGB[] = null;
+			
+			// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+			// Me situo en la esquina superior izquierda del "kernel"
+			if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+				
+				// Calcular el alcance del kernel cuyo centro es (x,y)
+				for (int i=0;i<semiLado;i++){
+					offsetX=offsetX+stepX[contX+i+1];
+					offsetY=offsetY+stepY[contY+i+1];
+				}
+				if((x+offsetX<width)&&(y+offsetY<height)){
+					
+					double ventanaR[][] = new double[ladoVentana][ladoVentana];
+					double ventanaG[][] = new double[ladoVentana][ladoVentana];
+					double ventanaB[][] = new double[ladoVentana][ladoVentana];
+					kernelRGB = new Kernel[3];
+					
+					origenX=x;
+					origenY=y;
+					for (int i=0;i<semiLado;i++){
+						origenX=origenX-stepX[contX-i];
+						origenY=origenY-stepY[contY-i];	
+					}
+					//Recorro el kernel segï¿½n los step
+					k=0;
+					indiceX=origenX;
+					for (int i=-semiLado;i<=semiLado;i++){
+						indiceY=origenY;
+						for(int j=-semiLado;j<=semiLado;j++){	
+							raster.getElemDouble(indiceY,indiceX,px);	
+							ventanaR[i+semiLado][j+semiLado] =px[0];
+							ventanaG[i+semiLado][j+semiLado] =px[1];
+							ventanaB[i+semiLado][j+semiLado] =px[2];
+							indiceY=indiceY+stepY[contY+j+1];
+							k++;
+						}
+						indiceX=indiceX+stepX[contX+i+1];
+					}
+					//**************************************************************************************************
+					kernelRGB[0]= new Kernel(ventanaR);
+					kernelRGB[1]= new Kernel(ventanaG);
+					kernelRGB[2]= new Kernel(ventanaB);
+				}
+			}
+			return kernelRGB;
+		}
+
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeDoubleFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeStackManager.java	(revision 10281)
@@ -0,0 +1,168 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.segmentation;
+
+import java.util.ArrayList;
+
+import org.cresques.filter.IStackManager;
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Gestor de la pila de filtros para el filtro de Sobel.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class FirstDerivativeStackManager implements IStackManager {
+
+	public final static int				firstDerivative = 12;
+	protected RasterFilterStack 		filterStack = null;
+	private RasterFilterStackManager	filterStackManager = null;
+	private GeoRasterFile[] 			grfList = null;
+	
+	
+	public FirstDerivativeStackManager(RasterFilterStackManager filterStackManager) {
+		this.filterStackManager = filterStackManager;
+		this.filterStack = filterStackManager.getFilterStack();
+		filterStackManager.addTypeFilter("firstDerivative", FirstDerivativeStackManager.firstDerivative, 8);
+	}
+
+	/**
+	 * Aï¿½ade un filtro de convoluciï¿½n a la pila de filtros.
+	 * @param kernel
+	 */
+	public void addFirstDerivativeFilter(int umbral,int operator,boolean compare,String Name){
+	
+		RasterFilter filtro = null;
+	
+		switch(filterStack.getDataTypeInFilter(((Integer)this.filterStackManager.getTypeFilters().get("firstDerivative")).intValue())){
+		case RasterBuf.TYPE_IMAGE:
+			filtro = new FirstDerivativeImageFilter(Name);
+			break;
+		case RasterBuf.TYPE_SHORT:
+			filtro = new FirstDerivativeShortFilter(Name);
+			break;
+		case RasterBuf.TYPE_USHORT:
+			filtro = new FirstDerivativeShortFilter(Name);
+			break;
+		case RasterBuf.TYPE_INT:
+			filtro = new FirstDerivativeIntegerFilter(Name);
+			break;
+		case RasterBuf.TYPE_FLOAT:
+			filtro = new FirstDerivativeFloatFilter(Name);
+			break;
+		case RasterBuf.TYPE_DOUBLE:
+			filtro = new FirstDerivativeDoubleFilter(Name);
+			break;
+		}
+		
+		//Cuando el filtro esta creado, tomamos los valores y lo aï¿½adimos a la pila
+		
+		if(filtro != null){
+			filtro.addParam("umbral",new Integer(umbral));
+			filtro.addParam("compare",new Boolean(compare));
+			filtro.addParam("operator",new Integer(operator));
+			filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("firstDerivative")).intValue(), filtro);
+			filterStackManager.controlTypes();
+		}
+	}
+	
+	public ArrayList getStringsFromStack() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf) {
+		if(rf instanceof FirstDerivativeFilter){
+			filterList.add("filter.firstDerivative.active=true");
+			FirstDerivativeFilter firstDerivative = (FirstDerivativeFilter) rf;
+			filterList.add("filter.firstDerivative.umbral="+firstDerivative.umbral);
+			filterList.add("filter.firstDerivative.operartor="+firstDerivative.operator);
+			filterList.add("filter.firstDerivative.compare="+firstDerivative.compare);
+			filterList.add("filter.firstDerivative.filterName="+firstDerivative.getFilterName());
+        }
+		return filterList;
+	}
+
+	public void createStackFromStrings(ArrayList f, Integer pos) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int createStackFromStrings(ArrayList filters, String fil,
+			GeoRasterFile[] grfList, int filteri) {
+		this.grfList = grfList;
+
+		if((fil.startsWith("filter.firstDerivative.active"))&&
+				(RasterFilterStackManager.getValue(fil).equals("true"))){
+			
+			int umbral = 0;
+			boolean compare = false;
+			int operator = 0;
+			String name="";
+			filters.remove(0);
+			
+			for(int prop = 0; prop < filters.size() ; prop++){	
+				String elem = (String) filters.get(prop);
+				if(elem.startsWith("filter.firstDerivative.umbral")){
+					umbral = Integer.parseInt(RasterFilterStackManager.getValue(elem));
+					filters.remove(prop);
+					prop--;
+				}
+				if(elem.startsWith("filter.firstDerivative.compare")){
+					compare = Boolean.getBoolean(RasterFilterStackManager.getValue(elem));
+					filters.remove(prop);
+					prop--;
+				}
+				if(elem.startsWith("filter.firstDerivative.operartor")){
+					operator = Integer.parseInt(RasterFilterStackManager.getValue(elem));
+					filters.remove(prop);
+					prop--;
+				}
+				if(elem.startsWith("filter.firstDerivative.filterName")){
+					name = RasterFilterStackManager.getValue(elem);
+					filters.remove(prop);
+					prop--;
+				}
+			}
+			addFirstDerivativeFilter(umbral,operator,compare,name);
+		}
+	//return filteri;
+		return -1;
+	}
+	
+	/**
+	 * Obtiene el valor entero que corresponde al tipo de filtro.
+	 * @param rasterFilter
+	 * @return
+	 */
+	public int getType(RasterFilter rasterFilter){
+		if(rasterFilter instanceof FirstDerivativeFilter)
+			return FirstDerivativeStackManager.firstDerivative;
+					
+		return -1;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeStackManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeIntegerFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeIntegerFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeIntegerFilter.java	(revision 10281)
@@ -0,0 +1,260 @@
+package org.cresques.filter.segmentation;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+public class FirstDerivativeIntegerFilter extends FirstDerivativeFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public FirstDerivativeIntegerFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public FirstDerivativeIntegerFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		int[] pxOut = new int[4];
+		int[] px = new int[4];
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemInt(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemInt(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+				convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+				convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+				convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+				convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+				convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+				
+				
+				if (compare){
+					if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+					else pxOut[0]= convoResult[0][1];
+					
+					if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+					else pxOut[1]= convoResult[1][1];
+					
+					if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+					else pxOut[2]= convoResult[2][1];
+					
+				}
+				else{
+					pxOut[0]=(int)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+					pxOut[1]=(int)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+					pxOut[2]=(int)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+				}
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemInt(line, col,pxOut);
+		}
+		else rasterResult.setElemInt(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		int[] px = new int[4];
+		int[] pxOut = new int[4];
+		int convoResult[][] = new int[3][4];
+		int ladoVentana = 3;
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemInt(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+			convoResult[0][0]=(int)operatorH.convolution(kernelRGB[0]);
+			convoResult[0][1]=(int)operatorV.convolution(kernelRGB[0]);
+			convoResult[1][0]=(int)operatorH.convolution(kernelRGB[1]);
+			convoResult[1][1]=(int)operatorV.convolution(kernelRGB[1]);
+			convoResult[2][0]=(int)operatorH.convolution(kernelRGB[2]);
+			convoResult[2][1]=(int)operatorV.convolution(kernelRGB[2]);
+			
+			if (compare){
+				if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+				else pxOut[0]= convoResult[0][1];
+				
+				if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+				else pxOut[1]= convoResult[1][1];
+				
+				if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+				else pxOut[2]= convoResult[2][1];
+				
+			}
+			else{
+				pxOut[0]=(int)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+				pxOut[1]=(int)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+				pxOut[2]=(int)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+			}
+			
+			if (umbral>0){
+				if(pxOut[0]>=umbral)pxOut[0]=255;
+				else pxOut[0]=0;
+				if(pxOut[1]>=umbral)pxOut[1]=255;
+				else pxOut[1]=0;
+				if(pxOut[2]>=umbral)pxOut[2]=255;
+				else pxOut[2]=0;
+			}
+			else{
+				
+				if (pxOut[0]<0) pxOut[0]=0;
+				else if (pxOut[0]>255) pxOut[0]=255;
+				if (pxOut[1]<0) pxOut[1]=0;
+				else if (pxOut[1]>255) pxOut[1]=255;
+				if (pxOut[2]<0) pxOut[2]=0;
+				else if (pxOut[2]>255) pxOut[2]=255;
+			}
+			
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemInt(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemInt(j, i,px);
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+			
+			int k,indiceX,indiceY,origenX,origenY;
+			int[] 		px = new int[4];
+			int semiLado = (ladoVentana-1)>>1;
+			int offsetX=0;
+			int offsetY=0;
+			
+			Kernel kernelRGB[] = null;
+			
+			// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+			// Me situo en la esquina superior izquierda del "kernel"
+			if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+				
+				// Calcular el alcance del kernel cuyo centro es (x,y)
+				for (int i=0;i<semiLado;i++){
+					offsetX=offsetX+stepX[contX+i+1];
+					offsetY=offsetY+stepY[contY+i+1];
+				}
+				if((x+offsetX<width)&&(y+offsetY<height)){
+					
+					double ventanaR[][] = new double[ladoVentana][ladoVentana];
+					double ventanaG[][] = new double[ladoVentana][ladoVentana];
+					double ventanaB[][] = new double[ladoVentana][ladoVentana];
+					kernelRGB = new Kernel[3];
+					
+					origenX=x;
+					origenY=y;
+					for (int i=0;i<semiLado;i++){
+						origenX=origenX-stepX[contX-i];
+						origenY=origenY-stepY[contY-i];	
+					}
+					//Recorro el kernel segï¿½n los step
+					k=0;
+					indiceX=origenX;
+					for (int i=-semiLado;i<=semiLado;i++){
+						indiceY=origenY;
+						for(int j=-semiLado;j<=semiLado;j++){	
+							raster.getElemInt(indiceY,indiceX,px);	
+							ventanaR[i+semiLado][j+semiLado] =px[0];
+							ventanaG[i+semiLado][j+semiLado] =px[1];
+							ventanaB[i+semiLado][j+semiLado] =px[2];
+							indiceY=indiceY+stepY[contY+j+1];
+							k++;
+						}
+						indiceX=indiceX+stepX[contX+i+1];
+					}
+					//**************************************************************************************************
+					kernelRGB[0]= new Kernel(ventanaR);
+					kernelRGB[1]= new Kernel(ventanaG);
+					kernelRGB[2]= new Kernel(ventanaB);
+				}
+			}
+			return kernelRGB;
+		}
+
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeIntegerFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFilter.java	(revision 10281)
@@ -0,0 +1,131 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.segmentation;
+
+import java.awt.Image;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Clase base para los filtros Sobel.
+ *
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public abstract class FirstDerivativeFilter extends RasterFilter {
+	public static final int TYPE_SOBEL  = 0;
+	public static final int TYPE_ROBERTS  = 1;
+	public static final int TYPE_PREWITT  = 2;
+	public static final int TYPE_FREICHEN  = 3;
+
+	protected int 			umbral = 0;
+	protected boolean 		compare = false;
+	protected Image  		imageResult = null;
+	protected RasterBuf 	rasterResult = null;
+	protected Kernel 		operatorH;
+	protected Kernel 		operatorV;
+	protected int			operator;
+	
+	// Kernels:------------------------------------------
+	double sobelH[][]= {{-1,0,1},{-2,0,2},{-1,0,1}};
+	double sobelV[][]= {{-1,-2,-1},{0,0,0},{1,2,1}};
+	Kernel sobelHKernel = new Kernel(sobelH);
+	Kernel sobelVKernel = new Kernel(sobelV);
+	
+	double robertsH[][]= {{0,0,-1},{0,1,0},{0,0,0}};
+	double robertsV[][]= {{-1,0,0},{0,1,0},{0,0,0}};
+	Kernel robertsHKernel = new Kernel(robertsH);
+	Kernel robertsVKernel = new Kernel(robertsV);
+	
+	double prewittH[][]= {{1,0,-1},{1,0,-1},{1,0,-1}};
+	double prewittV[][]= {{-1,-1,-1},{0,0,0},{1,1,1}};
+	Kernel prewittHKernel = new Kernel(prewittH);
+	Kernel prewittVKernel = new Kernel(prewittV);
+	
+	double freiChenH[][]= {{1,0,-1},{1.4142D,0,-1.4142D},{1,0,-1}};
+	double freiChenV[][]= {{-1,-1.4142D,-1},{0,0,0},{1,1.4142D,1}};
+	Kernel freiChenHKernel = new Kernel(freiChenH);
+	Kernel freiChenVKernel = new Kernel(freiChenV);
+	// --------------------------------------------------
+	
+	
+	public FirstDerivativeFilter() {
+		super();
+	}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public FirstDerivativeFilter(String fName) {
+		super();
+		super.filterName = fName;
+	}
+
+	public void pre() {
+		if (params.get("umbral")!=null)
+			umbral = ((Integer)params.get("umbral")).intValue();
+		else this.umbral = 0;
+		
+		if (params.get("compare")!=null)
+			compare = ((Boolean)params.get("compare")).booleanValue();
+		else this.compare = false;
+		
+		if (params.get("operator")!=null)
+			operator = ((Integer)params.get("operator")).intValue();
+		else this.operator = 0;
+		
+		switch (operator){
+		case TYPE_SOBEL:
+			operatorH=sobelHKernel;
+			operatorV=sobelVKernel;
+			break;
+		case TYPE_ROBERTS:
+			operatorH=robertsHKernel;
+			operatorV=robertsVKernel;
+			break;
+		case TYPE_PREWITT:
+			operatorH=prewittHKernel;
+			operatorV=prewittVKernel;
+			break;
+		case TYPE_FREICHEN:
+			operatorH=freiChenHKernel;
+			operatorV=freiChenVKernel;
+			break;
+		}
+	}
+	
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Obtiene el umbral 
+	 * @return entero que representa el umbral
+	 */
+	public int getUmbral() {
+		return umbral;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeShortFilter.java	(revision 10281)
@@ -0,0 +1,286 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+
+package org.cresques.filter.segmentation;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de Sobel que se aplica a un RasterBuf de tipo Short.
+ *  Toma como entrada la imagen y el umbral (cero para no umbralizar).
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class FirstDerivativeShortFilter extends FirstDerivativeFilter {
+
+	/**
+	 * Constructor sin parámetros. Este es usado principalmente desde controlTypes
+	 * ya que se instancia con newInstance y sin parámetros. Poseriormente le aplica
+	 * el nombre al filtro con la función setFilterName de RasterFilter.
+	 */
+	public FirstDerivativeShortFilter() {}
+	
+	/**
+	 * Constructor para la asignación del identificador del filtro
+	 * @param fName Cadena que representa el identificador del filtro 
+	 */
+	public FirstDerivativeShortFilter(String fName) {
+		super(fName);
+	}
+	
+	public void process(int col, int line) {
+		short[] pxOut = new short[4];
+		short[] px = new short[4];
+		short convoResult[][] = new short[3][4];
+		int ladoVentana = 3;
+		int semiLado = (ladoVentana-1)>>1;
+		
+		double ventanaR[][]=new double[ladoVentana][ladoVentana];
+		double ventanaG[][]=new double[ladoVentana][ladoVentana];
+		double ventanaB[][]=new double[ladoVentana][ladoVentana];
+		
+		Kernel kernelRGB[]=new Kernel[3];
+
+		raster.getElemShort(line, col, px); 
+		
+		if((col-semiLado >= 0) && (line-semiLado >= 0) &&(col+semiLado < width)&&(line+semiLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+			for (int i=-semiLado;i<=semiLado;i++)
+				for(int j=-semiLado;j<=semiLado;j++)
+				{
+					raster.getElemShort(line+j, col+i,px);
+					ventanaR[i+semiLado][j+semiLado] =px[0];
+					ventanaG[i+semiLado][j+semiLado] =px[1];
+					ventanaB[i+semiLado][j+semiLado] =px[2];
+				}
+				kernelRGB[0]=new Kernel(ventanaR);
+				kernelRGB[1]=new Kernel(ventanaG);
+				kernelRGB[2]=new Kernel(ventanaB);
+				
+				convoResult[0][0]=(short)operatorH.convolution(kernelRGB[0]);
+				convoResult[0][1]=(short)operatorV.convolution(kernelRGB[0]);
+				convoResult[1][0]=(short)operatorH.convolution(kernelRGB[1]);
+				convoResult[1][1]=(short)operatorV.convolution(kernelRGB[1]);
+				convoResult[2][0]=(short)operatorH.convolution(kernelRGB[2]);
+				convoResult[2][1]=(short)operatorV.convolution(kernelRGB[2]);
+				
+				if (compare){
+					if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+					else pxOut[0]= convoResult[0][1];
+					
+					if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+					else pxOut[1]= convoResult[1][1];
+					
+					if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+					else pxOut[2]= convoResult[2][1];
+					
+				}
+				else{
+					pxOut[0]=(short)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+					pxOut[1]=(short)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+					pxOut[2]=(short)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+				}
+				
+				if (umbral>0){
+					if(pxOut[0]>=umbral)pxOut[0]=255;
+					else pxOut[0]=0;
+					if(pxOut[1]>=umbral)pxOut[1]=255;
+					else pxOut[1]=0;
+					if(pxOut[2]>=umbral)pxOut[2]=255;
+					else pxOut[2]=0;
+				}
+				else{
+					if (pxOut[0]<0) pxOut[0]=0;
+					else if (pxOut[0]>255) pxOut[0]=255;
+					if (pxOut[1]<0) pxOut[1]=0;
+					else if (pxOut[1]>255) pxOut[1]=255;
+					if (pxOut[2]<0) pxOut[2]=0;
+					else if (pxOut[2]>255) pxOut[2]=255;
+				}
+				
+			rasterResult.setElemShort(line, col,pxOut);
+		}
+		else rasterResult.setElemShort(line, col,pxOut);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		short[] px = new short[4];
+		short[] pxOut = new short[4];
+		short convoResult[][] = new short[3][4];
+		int ladoVentana = 3;
+		RasterFilter.Kernel kernelRGB[];
+
+		raster.getElemShort(line, col,px); 
+		
+		//	Obtener el vector con la ventanas de muestras (una por componente RGB)
+		kernelRGB=extractSubRaster(ladoVentana,col,line);
+		if(kernelRGB!=null)
+		{
+			convoResult[0][0]=(short)operatorH.convolution(kernelRGB[0]);
+			convoResult[0][1]=(short)operatorV.convolution(kernelRGB[0]);
+			convoResult[1][0]=(short)operatorH.convolution(kernelRGB[1]);
+			convoResult[1][1]=(short)operatorV.convolution(kernelRGB[1]);
+			convoResult[2][0]=(short)operatorH.convolution(kernelRGB[2]);
+			convoResult[2][1]=(short)operatorV.convolution(kernelRGB[2]);
+			
+			if (compare){
+				if (convoResult[0][0]>convoResult[0][1]) pxOut[0]= convoResult[0][0];
+				else pxOut[0]= convoResult[0][1];
+				
+				if (convoResult[1][0]>convoResult[1][1]) pxOut[1]= convoResult[1][0];
+				else pxOut[1]= convoResult[1][1];
+				
+				if (convoResult[2][0]>convoResult[2][1]) pxOut[2]= convoResult[2][0];
+				else pxOut[2]= convoResult[2][1];
+				
+			}
+			else{
+				pxOut[0]=(short)Math.sqrt(Math.pow(convoResult[0][0],2)+Math.pow(convoResult[0][1],2));
+				pxOut[1]=(short)Math.sqrt(Math.pow(convoResult[1][0],2)+Math.pow(convoResult[1][1],2));
+				pxOut[2]=(short)Math.sqrt(Math.pow(convoResult[2][0],2)+Math.pow(convoResult[2][1],2));
+			}
+			
+			if (umbral>0){
+				if(pxOut[0]>=umbral)pxOut[0]=255;
+				else pxOut[0]=0;
+				if(pxOut[1]>=umbral)pxOut[1]=255;
+				else pxOut[1]=0;
+				if(pxOut[2]>=umbral)pxOut[2]=255;
+				else pxOut[2]=0;
+			}
+			else{
+				
+				if (pxOut[0]<0) pxOut[0]=0;
+				else if (pxOut[0]>255) pxOut[0]=255;
+				if (pxOut[1]<0) pxOut[1]=0;
+				else if (pxOut[1]>255) pxOut[1]=255;
+				if (pxOut[2]<0) pxOut[2]=0;
+				else if (pxOut[2]>255) pxOut[2]=255;
+			}
+			
+			for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+				for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)	
+					rasterResult.setElemShort(j, i,pxOut);
+		}
+		else
+		for(int i = col; i < rasterResult.getWidth() && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < rasterResult.getHeight() && j < (line + stepY[contY + 1]); j++)	
+				rasterResult.setElemShort(j, i,px);
+
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf)params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+	
+	/**
+	 * @param ladoVentana  Lado del subraster a extraer
+	 * @param x  Coordenada x del pixel central
+	 * @param y  Coordenada y del pixel central
+	 * @return
+	 */
+	public Kernel[] extractSubRaster(int ladoVentana,int x,int y){
+			
+			int k,indiceX,indiceY,origenX,origenY;
+			short[] 		px = new short[4];
+			int semiLado = (ladoVentana-1)>>1;
+			int offsetX=0;
+			int offsetY=0;
+			
+			Kernel kernelRGB[] = null;
+			
+			// Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+			// Me situo en la esquina superior izquierda del "kernel"
+			if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+				
+				// Calcular el alcance del kernel cuyo centro es (x,y)
+				for (int i=0;i<semiLado;i++){
+					offsetX=offsetX+stepX[contX+i+1];
+					offsetY=offsetY+stepY[contY+i+1];
+				}
+				if((x+offsetX<width)&&(y+offsetY<height)){
+					
+					double ventanaR[][] = new double[ladoVentana][ladoVentana];
+					double ventanaG[][] = new double[ladoVentana][ladoVentana];
+					double ventanaB[][] = new double[ladoVentana][ladoVentana];
+					kernelRGB = new Kernel[3];
+					
+					origenX=x;
+					origenY=y;
+					for (int i=0;i<semiLado;i++){
+						origenX=origenX-stepX[contX-i];
+						origenY=origenY-stepY[contY-i];	
+					}
+					//Recorro el kernel segï¿½n los step
+					k=0;
+					indiceX=origenX;
+					for (int i=-semiLado;i<=semiLado;i++){
+						indiceY=origenY;
+						for(int j=-semiLado;j<=semiLado;j++){	
+							raster.getElemShort(indiceY,indiceX,px);	
+							ventanaR[i+semiLado][j+semiLado] =px[0];
+							ventanaG[i+semiLado][j+semiLado] =px[1];
+							ventanaB[i+semiLado][j+semiLado] =px[2];
+							indiceY=indiceY+stepY[contY+j+1];
+							k++;
+						}
+						indiceX=indiceX+stepX[contX+i+1];
+					}
+					//**************************************************************************************************
+					kernelRGB[0]= new Kernel(ventanaR);
+					kernelRGB[1]= new Kernel(ventanaG);
+					kernelRGB[2]= new Kernel(ventanaB);
+				}
+			}
+			return kernelRGB;
+		}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/segmentation/FirstDerivativeShortFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Clases que tienen que ver con la entrada/salida en raster.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/package.html
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterFilter.java	(revision 10281)
@@ -0,0 +1,86 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public interface IRasterFilter {
+    /**
+     * Acciones a realizar antes de la ejecución del filtro
+     *
+     */
+    public void pre();
+
+    /**
+     * Ejecución.
+     *
+     */
+    public void execute();
+
+    /**
+     * Procesa la posición x,y de la imagen
+     * @param x posición X
+     * @param y posición Y
+     */
+    public void process(int x, int y);
+
+    /**
+     * Acciones a realizar después de la ejecución del filtro
+     *
+     */
+    public void post();
+
+    /**
+     * Parámetros obligatorios:
+     *         inRaster (IRaster)
+     * parámetros obligatorios (si se da el caso)
+     *         previousFilter (IRasterFilter)
+     *
+     * @param name
+     * @param value
+     */
+    public void addParam(String name, Object value);
+
+    /**
+     * Devuelve los resultados despues de la ejecución del filtro.
+     * @param name
+     * @return
+     */
+    public Object getResult(String name);
+
+    /**
+     * Obtiene el tipo de datos de entrada al filtro
+     * @return Tipo de dato
+     */
+    public int getInRasterDataType();
+
+    /**
+     * Obtiene el tipo de datos de salida del filtro
+     * @return Tipo de dato
+     */
+    public int getOutRasterDataType();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/IRasterFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/PixelFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/PixelFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/PixelFilter.java	(revision 10281)
@@ -0,0 +1,90 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+
+/**
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class PixelFilter {
+    public boolean debug = false;
+    int transparente = 0x10ffff00;
+    int orColor = 0xff000000;
+    int umbral = 0xf0f0f0;
+    private int alpha = 0xff;
+
+    /**
+     * Constructor para el Oleico
+     */
+    public PixelFilter(int alpha) {
+        transparente = 0x10ffff00;
+        setAlpha(alpha);
+
+        //orColor = 0xff000000 | (alpha * 0x1000000);
+        umbral = 0xf0f0f0;
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param trans Color que sustituye a los pixeles filtrados
+     * @param or        Máscara que se aplica a los pixeles restantes
+     * @param pxMax        Umbral que determina los pixeles.
+     */
+    public PixelFilter(int trans, int or, int pxMax) {
+        transparente = trans;
+        setAlpha((orColor >> 24) & 0xff);
+        orColor = or;
+        umbral = pxMax;
+    }
+
+    public void setAlpha(int alpha) {
+        this.alpha = alpha;
+        orColor = (alpha << 24) & 0xff000000;
+    }
+
+    public int getAlpha() {
+        return alpha;
+    }
+
+    /**
+     * Filtra una línea de pixeles.
+     *
+     * @param pRGBArray
+     */
+    public void filterLine(int[] pRGBArray) {
+        for (int i = 0; i < pRGBArray.length; i++) {
+            /*if (debug)
+                    System.out.print(""+i+":"+Integer.toHexString(pRGBArray[i])+",");*/
+            if (pRGBArray[i] >= umbral) {
+                pRGBArray[i] = transparente;
+            } else {
+                pRGBArray[i] |= orColor;
+            }
+        }
+
+        /*if (debug)
+                System.out.println("");*/
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/PixelFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStackManager.java	(revision 10281)
@@ -0,0 +1,952 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.filter;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.cresques.filter.bands.PaletteStackManager;
+import org.cresques.filter.bands.RemoveBandsFilter;
+import org.cresques.filter.bands.RemoveBandsImageFilter;
+import org.cresques.filter.bands.RemoveBandsShortFilter;
+import org.cresques.filter.convolution.ConvolutionStackManager;
+import org.cresques.filter.correction.MedianStackManager;
+import org.cresques.filter.enhancement.BrightnessContrastStackManager;
+import org.cresques.filter.enhancement.LinearEnhancementDoubleFilter;
+import org.cresques.filter.enhancement.LinearEnhancementFilter;
+import org.cresques.filter.enhancement.LinearEnhancementFloatFilter;
+import org.cresques.filter.enhancement.LinearEnhancementImageFilter;
+import org.cresques.filter.enhancement.LinearEnhancementIntegerFilter;
+import org.cresques.filter.enhancement.LinearEnhancementShortFilter;
+import org.cresques.filter.enhancement.TransparencyFilter;
+import org.cresques.filter.enhancement.TransparencyImageFilter;
+import org.cresques.filter.enhancement.TransparencyRange;
+import org.cresques.filter.enhancement.TransparencyShortFilter;
+import org.cresques.filter.segmentation.FirstDerivativeStackManager;
+import org.cresques.filter.statistics.ComputeMinMaxFilter;
+import org.cresques.filter.statistics.ComputeMinMaxImageFilter;
+import org.cresques.filter.statistics.ComputeMinMaxShortFilter;
+import org.cresques.filter.statistics.PercentTailTrimDoubleFilter;
+import org.cresques.filter.statistics.PercentTailTrimFilter;
+import org.cresques.filter.statistics.PercentTailTrimFloatFilter;
+import org.cresques.filter.statistics.PercentTailTrimImageFilter;
+import org.cresques.filter.statistics.PercentTailTrimIntegerFilter;
+import org.cresques.filter.statistics.PercentTailTrimShortFilter;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+
+
+/**
+ * Esta clase es de la parte cliente y es la encargada de la gestiï¿½n
+ * de la pila de filtros. Es la que conoce el orden en que se deben apilar
+ * estos para que la ejecuciï¿½n sea correcta. Un cliente que desee aplicar un
+ * filtro deberï¿½ introducirlo en la pila usando para ello esta clase.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class RasterFilterStackManager implements IStackManager {
+    protected RasterFilterStack 	filterStack = null;
+    private boolean 				debug = false;
+    protected Hashtable 			typeFilters = new Hashtable();
+    public int[] 					order = null;
+    protected ArrayList 			filterList = null;
+    private GeoRasterFile[] 		grfList = null;
+    private static ArrayList		stackManagerClass = new ArrayList();
+    private ArrayList 				managers = new ArrayList();
+	
+    static{
+    	RasterFilterStackManager.addClassStackManager(BrightnessContrastStackManager.class);
+    	RasterFilterStackManager.addClassStackManager(PaletteStackManager.class);
+    	RasterFilterStackManager.addClassStackManager(FirstDerivativeStackManager.class);
+    	RasterFilterStackManager.addClassStackManager(ConvolutionStackManager.class);
+    	RasterFilterStackManager.addClassStackManager(MedianStackManager.class);
+    }
+    
+	/**
+	 * Registra las clases que tendrï¿½n gestiï¿½n de algï¿½n filtro. Esta funciï¿½n suele llamarse en 
+	 * la carga de una extensiï¿½n.
+	 * @param clase Clase a registrar
+	 */
+	public static void addClassStackManager(Class clase) {
+		boolean esta = false;
+		for(int i=0;i<stackManagerClass.size();i++)
+			if(((Class)stackManagerClass.get(i)).equals(clase))
+				esta = true;
+		if(!esta)
+			RasterFilterStackManager.stackManagerClass.add(clase);
+	}
+	
+    /**
+     * Constructor
+     * @param filterStack
+     */
+    public RasterFilterStackManager(RasterFilterStack filterStack) {
+        this.filterStack = filterStack;
+        typeFilters.put("transparency", new Integer(0));
+        typeFilters.put("enhanced", new Integer(1));
+        typeFilters.put("computeminmax", new Integer(2));
+        typeFilters.put("tail", new Integer(3));
+        typeFilters.put("removebands", new Integer(4));
+        init();
+        this.filterStack.setOrder(order);
+                
+        //Cargamos el manager con los gestores de drivers registrados
+        for(int i = 0;i<RasterFilterStackManager.stackManagerClass.size();i++){
+        	Object obj = RasterFilterStackManager.loadClass((Class)stackManagerClass.get(i), this);
+        	if(obj != null)
+        		managers.add(obj);
+        }
+        
+    }
+
+    /**
+     * Registra un manager del sistema
+     * @param manager
+     */
+    /*public void register(IStackManager manager) {
+    	filterStack.managers.add(manager);
+    }*/
+
+    /**
+     * Inicializaciï¿½n. Asigna el orden de los filtros
+     */
+    protected void init() {
+        order = new int[typeFilters.size()];
+        //order[0] = ((Integer) typeFilters.get("sharpening")).intValue();
+        order[0] = ((Integer) typeFilters.get("computeminmax")).intValue();
+        order[1] = ((Integer) typeFilters.get("tail")).intValue();
+        order[2] = ((Integer) typeFilters.get("enhanced")).intValue();
+        order[3] = ((Integer) typeFilters.get("transparency")).intValue();
+        order[4] = ((Integer) typeFilters.get("removebands")).intValue();
+    }
+
+    /**
+     * Aï¿½ade un nuevo tipo de filtro
+     * @param key        Nombre del filtro
+     * @param type        Constante entera asignada a ese tipo
+     */
+    public void addTypeFilter(String key, int type, int position) {
+        typeFilters.put(key, new Integer(type));
+
+        int[] newOrder = new int[order.length + 1];
+
+        for (int i = 0; i < position; i++)
+            newOrder[i] = order[i];
+
+        newOrder[position] = type;
+
+        for (int i = position + 1; i < newOrder.length; i++)
+            newOrder[i] = order[i - 1];
+
+        order = newOrder;
+        this.filterStack.setOrder(order);
+    }
+
+    /**
+     * Obtiene la constante correspondiente a un tipo de filtro
+     * @param key        Clave para obtener la constante que corresponde al nombre del filtro
+     * @return        Tipo de filtro
+     */
+    public int getTypeFilter(String key) {
+    	Integer value = ((Integer) typeFilters.get(key));
+    	if(value != null)
+    		return value.intValue();
+    	else 
+    		return -1;
+    }
+
+    /**
+     * Aï¿½ade un filtro de transparencia
+     * @param red        Intervalos de la banda del rojo a poner transparentes
+     * @param green        Intervalos de la banda del verde a poner transparentes
+     * @param blue        Intervalos de la banda del azul a poner transparentes
+     * @param alpha        Transparencia
+     * @param transparencyRed        Color en la banda del rojo de la transparencia
+     * @param transparencyGreen        Color en la banda del verde de la transparencia
+     * @param transparencyBlue        Color en la banda del azul de la transparencia
+     */
+    public void addTransparencyFilter(ArrayList rangesList,
+                                      int alpha, int transparencyRed,
+                                      int transparencyGreen,
+                                      int transparencyBlue) {
+        RasterFilter filtro = null;
+
+        switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("transparency")).intValue())) {
+        case RasterBuf.TYPE_IMAGE:
+            filtro = new TransparencyImageFilter();
+            break;
+        case RasterBuf.TYPE_SHORT:
+        case RasterBuf.TYPE_USHORT:
+        case RasterBuf.TYPE_INT:
+            filtro = new TransparencyShortFilter();
+            break;
+        }
+
+        if(filtro != null){
+	        filtro.addParam("rangesList", rangesList);	
+	        filtro.addParam("alpha", new Integer(alpha));
+	        filtro.addParam("transparencyRed", new Integer(transparencyRed));
+	        filtro.addParam("transparencyGreen", new Integer(transparencyGreen));
+	        filtro.addParam("transparencyBlue", new Integer(transparencyBlue));
+	
+	        //Elimina los filtros que son equivalentes a este
+	        /*for(int i=0;i<filterStack.lenght();i++){
+	                if( filterStack.get(i) instanceof TransparencyImageFilter ||
+	                        filterStack.get(i) instanceof TransparencyShortFilter){
+	
+	                        //Si este filtro es equivalente a uno de la pila se elimina este
+	                        if(((TransparencyFilter)filtro).isEquivalent((TransparencyFilter)filterStack.get(i)))
+	                                filterStack.removeFilter(filterStack.get(i));
+	
+	                }
+	        }
+	
+	        //Aï¿½ade el filtro si no hay uno equivalente
+	
+	        boolean equivalentFilter = false;
+	        for(int i=0;i<filterStack.lenght();i++){
+	                if( filterStack.get(i) instanceof TransparencyImageFilter ||
+	                        filterStack.get(i) instanceof TransparencyShortFilter){
+	
+	                        //Si no existe en la pila un filtro equivalente se aï¿½ade
+	                        if(((TransparencyFilter)filterStack.get(i)).isEquivalent((TransparencyFilter)filtro)){
+	                                equivalentFilter = true;
+	                                break;
+	                        }
+	                }
+	        }
+	        if(!equivalentFilter)*/
+	        filterStack.removeFilter(((Integer) typeFilters.get("transparency")).intValue());
+	        filterStack.addFilter(((Integer) typeFilters.get("transparency")).intValue(),
+	                              filtro);
+	        this.controlTypes();
+        }
+    }
+
+    /**
+     * Obtiene la lista de rangos del filtro de transparencia de la pila
+     * @return ArrayList con la lista de rangos. Cada elemento es un objeto TransparencyRange 
+     */
+    public ArrayList getTransparencyRGB(){
+    	for (int i = 0; i < filterStack.lenght(); i++) {
+            if (filterStack.get(i) instanceof TransparencyImageFilter ||
+                    filterStack.get(i) instanceof TransparencyShortFilter) {
+                return ((TransparencyFilter) filterStack.get(i)).rangesList;
+            }
+        }
+        return null;
+    }
+   
+    /**
+     * Aï¿½ade un filtro de eliminado de bandas. Las pone a 0
+     * @param bands
+     */
+    public void addRemoveBands(String bands) {
+        RasterFilter filtro = null;
+
+        switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("removebands")).intValue())) {
+        case RasterBuf.TYPE_IMAGE:
+            filtro = new RemoveBandsImageFilter();
+            break;
+        case RasterBuf.TYPE_SHORT:
+        case RasterBuf.TYPE_USHORT:
+        case RasterBuf.TYPE_INT:
+            filtro = new RemoveBandsShortFilter();
+            break;
+        }
+        
+        if(filtro != null){
+	        filtro.addParam("stats", filterStack.getStats());
+	        filtro.addParam("bands", bands);
+	
+	        filterStack.removeFilter(((Integer) typeFilters.get("removebands")).intValue());
+	        filterStack.addFilter(((Integer) typeFilters.get("removebands")).intValue(),
+	                              filtro);
+	        this.controlTypes();
+        }
+    }
+
+    /**
+     * Aï¿½ade un filtro de recorte de colas.
+     * @param tail        porcentaje de recorte
+     * @param samples        porcentaje de muestras tomadas del total de la imagen
+     */
+    public void addTailFilter(double tail, double samples,
+                              boolean removeMaxValue) {
+        if (filterStack.isActive(((Integer) typeFilters.get("tail")).intValue())) {
+            filterStack.removeFilter(((Integer) typeFilters.get("tail")).intValue());
+        }
+
+        RasterFilter filtro = null;
+
+        switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("tail")).intValue())) {
+        case RasterBuf.TYPE_IMAGE:
+            filtro = new PercentTailTrimImageFilter();
+            break;
+        case RasterBuf.TYPE_SHORT:
+        	filtro = new PercentTailTrimShortFilter();
+            break;
+        case RasterBuf.TYPE_USHORT:
+        	filtro = new PercentTailTrimShortFilter();
+            break;
+        case RasterBuf.TYPE_INT:
+            filtro = new PercentTailTrimIntegerFilter();
+            break;
+        case RasterBuf.TYPE_FLOAT:
+        	filtro = new PercentTailTrimFloatFilter();
+            break;
+        case RasterBuf.TYPE_DOUBLE:
+        	filtro = new PercentTailTrimDoubleFilter();
+            break;
+        }
+        
+        if(filtro != null){
+	        filtro.addParam("stats", filterStack.getStats());
+	        filtro.addParam("tail", new Double(tail));
+	        filtro.addParam("samples", new Double(samples));
+	        filtro.addParam("remove", new Boolean(removeMaxValue));
+	
+	        filterStack.addFilter(((Integer) typeFilters.get("tail")).intValue(),
+	                              filtro);
+	        this.controlTypes();
+        }
+    }
+
+    /**
+     * Aï¿½ade un filtro de realce. Esta versiï¿½n tiene el parï¿½metro para aï¿½adirle el nombre
+     * del fichero. Esto se usa para que si a un fichero se le ha calculado ya el recorte de colas
+     * no se vuelva a calcular, evitando asï¿½ que si hacemos un draw a una imagen por bloques cada
+     * bloque tenga un calculo distinto para el recorte.
+     */
+    public void addEnhancedFilter(boolean remove, String fileName) {
+        if (filterStack.isActive(((Integer) typeFilters.get("enhanced")).intValue())) {
+            filterStack.removeFilter(((Integer) typeFilters.get("enhanced")).intValue());
+        }
+
+        RasterFilter filtro = null;
+        
+        switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("enhanced")).intValue())) {
+        case RasterBuf.TYPE_IMAGE:
+            filtro = new LinearEnhancementImageFilter();
+            break;
+        case RasterBuf.TYPE_SHORT:
+        	filtro = new LinearEnhancementShortFilter();
+            break;
+        case RasterBuf.TYPE_USHORT:
+        case RasterBuf.TYPE_INT:
+        	filtro = new LinearEnhancementIntegerFilter();
+            break;
+        case RasterBuf.TYPE_FLOAT:
+        	filtro = new LinearEnhancementFloatFilter();
+            break;
+        case RasterBuf.TYPE_DOUBLE:
+        	filtro = new LinearEnhancementDoubleFilter();
+            break;
+        }
+
+        if(filtro != null){
+	        filtro.addParam("stats", filterStack.getStats());
+	
+	        if (remove) {
+	            filtro.addParam("remove", new Boolean(true));
+	        } else {
+	            filtro.addParam("remove", new Boolean(false));
+	        }
+	
+	        if (fileName != null) {
+	            filtro.addParam("filename", fileName);
+	        } else {
+	            filtro.addParam("filename", new String(""));
+	        }
+	
+	        filterStack.addFilter(((Integer) typeFilters.get("enhanced")).intValue(),
+	                              filtro);
+	        this.controlTypes();
+        }
+    }
+
+    /**
+     * Aï¿½ade un filtro de realce
+     */
+    public void addEnhancedFilter(boolean remove) {
+        addEnhancedFilter(remove, "");
+    }
+
+    /**
+     * Aï¿½ade un filtro ComputeMinMax
+     */
+    public void addComputeMinMaxFilter() {
+        if (!filterStack.isActive(((Integer) typeFilters.get("computeminmax")).intValue())) { //Solo lo aï¿½adimos si no estï¿½
+
+            RasterFilter filtro = null;
+
+            switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("computeminmax")).intValue())) {
+            case RasterBuf.TYPE_IMAGE:
+                filtro = new ComputeMinMaxImageFilter();
+                break;
+            case RasterBuf.TYPE_SHORT:
+            case RasterBuf.TYPE_USHORT:
+            case RasterBuf.TYPE_INT:
+                filtro = new ComputeMinMaxShortFilter();
+                break;
+            }
+            
+            if(filtro != null){
+	            filtro.addParam("stats", filterStack.getStats());
+	            filterStack.addFilter(((Integer) typeFilters.get("computeminmax")).intValue(),
+	                                  filtro);
+            }
+        }
+
+        this.controlTypes();
+    }
+    
+    /**
+     * Obtiene de la pila el primer filtro del tipo solicitado si existe sino devuelve null
+     * @param type Tipo de filtro
+     * @return Filtro
+     */
+    public RasterFilter getFilter(String type){
+    	int intType = getTypeFilter(type);
+    	return filterStack.getByType(intType);
+    	
+    }
+    
+    /**
+     * Obtiene el tipo de filtro a partir del objeto RasterFilter
+     * @param rasterFilter        Objeto RasterFilter del cual se quiere saber que tipo de filtro contiene
+     * @return        Tipo de filtro segï¿½n las constantes contenidas en RasterFilterStackManager
+     */
+    public int getType(RasterFilter rasterFilter) {
+        if (rasterFilter instanceof TransparencyFilter) 
+            return ((Integer)typeFilters.get("transparency")).intValue();
+      
+        if (rasterFilter instanceof LinearEnhancementFilter) 
+        	return ((Integer)typeFilters.get("enhanced")).intValue();
+       
+        if (rasterFilter instanceof ComputeMinMaxFilter)
+        	return ((Integer)typeFilters.get("computeminmax")).intValue();
+        
+        if (rasterFilter instanceof PercentTailTrimFilter) 
+        	return ((Integer)typeFilters.get("tail")).intValue();
+        
+        if (rasterFilter instanceof RemoveBandsFilter) 
+        	return ((Integer)typeFilters.get("removebands")).intValue();
+      
+        for (int j = 0; j < managers.size(); j++){
+        	int type = ((IStackManager) managers.get(j)).getType(rasterFilter);
+        	if(type != -1)
+        		return type;
+        }
+            
+        return -1;
+    }
+
+    /**
+     * Sustituye el tipo de filtro de strPackage por el de newClass
+     * @param strPackage cadena con el paquete y filtro a sustituir, 
+     * por ej: org.cresques.filter.enhanced.ContrastImageFilter
+     * @param newClass clase con el tipo a sustituir. Por ej: ContrastShortFilter
+     * @return devuelve strPackage con la sustituciï¿½n hecha.
+     * Por ej: org.cresques.filter.enhanced.ContrastShortFilter
+     */
+    private String getStrPackage(String strPackage, String newClass){
+    	if(newClass.endsWith("ImageFilter"))
+        	strPackage = strPackage + newClass.substring(0, newClass.lastIndexOf("ImageFilter"));
+        else if(newClass.endsWith("ShortFilter"))
+        	strPackage = strPackage + newClass.substring(0, newClass.lastIndexOf("ShortFilter"));
+        else if(newClass.endsWith("DoubleFilter"))
+        	strPackage = strPackage + newClass.substring(0, newClass.lastIndexOf("DoubleFilter"));
+        else if(newClass.endsWith("FloatFilter"))
+        	strPackage = strPackage + newClass.substring(0, newClass.lastIndexOf("FloatFilter"));
+        strPackage = strPackage + "." + newClass;
+    	return strPackage;
+    }
+    
+    /**
+     * Controla que los tipos de los filtros de la pila sean correctos, es decir, que
+     * el tipo de salida de un filtro de salida coincida con el tipo de la entrada del
+     * siguiente. En caso de no ser asï¿½ crea el filtro de tipo adecuado y lo sustituye
+     * en el no coincidente. Esto es necesario ya que en la eliminaciï¿½n de filtros puede
+     * quedarse en inconsistencia de tipos.
+     */
+    public void controlTypes() {
+        for (int i = filterStack.lenght(); i >= 0; i--) {
+        	String classFilter = null, packageFilter = null, oldClass = null;
+        	try{
+	        	classFilter = filterStack.get(i - 1).getClass().toString();
+	        	packageFilter = classFilter.substring(classFilter.indexOf(" "), classFilter.lastIndexOf("."));
+	        	oldClass = classFilter.substring(classFilter.lastIndexOf(".") +1, classFilter.length());
+        	}catch(ArrayIndexOutOfBoundsException ex){
+        		return;
+        	}
+        	
+            if ((i - 1) >= 0) {
+                //Para el primer filtro comprobamos con el tipo de dato de entrada a la pila
+                if (i == filterStack.lenght()) {
+                    if (filterStack.getInitDataType() != filterStack.get(i - 1).getInRasterDataType()) {
+                        Pattern p = Pattern.compile(RasterBuf.typesToString(filterStack.get(i - 1).getInRasterDataType()));
+                        Matcher m = p.matcher(oldClass);
+                        String newClass = m.replaceAll(RasterBuf.typesToString(filterStack.getInitDataType()));
+                        String strPackage = packageFilter + "." + newClass;
+                    
+                        try {
+                            Class filterClass = Class.forName(strPackage);
+                            Constructor con = filterClass.getConstructor(null);
+                            RasterFilter newFilter = (RasterFilter) con.newInstance(null);
+                            newFilter.params = filterStack.get(i - 1).params;
+                            filterStack.replace(newFilter, i - 1, getType(newFilter));
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+
+                    //Desde el filtro 2 en adelante se compara la salida de uno con la entrada del siguiente
+                } else if (filterStack.get(i).getOutRasterDataType() != filterStack.get(i - 1).getInRasterDataType()) {
+                    Pattern p = Pattern.compile(RasterBuf.typesToString(filterStack.get(i - 1).getInRasterDataType()));
+                    Matcher m = p.matcher(oldClass);
+                    String newClass = m.replaceAll(RasterBuf.typesToString(filterStack.get(i).getOutRasterDataType()));
+                    String strPackage = packageFilter + "." + newClass;
+                    
+                    try {
+                        Class filterClass = Class.forName(strPackage.trim());
+                        Constructor con = filterClass.getConstructor(null);
+                        RasterFilter newFilter = (RasterFilter) con.newInstance(null);
+                        newFilter.setFilterName(filterStack.get(i - 1).getFilterName());
+                        newFilter.params = filterStack.get(i - 1).params;
+                        filterStack.replace(newFilter, i - 1, getType(newFilter));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+
+        if (debug) 
+            filterStack.show();
+    
+    }
+
+    /**
+     * Mï¿½todo que devuelve true si el tipo de filtro pasado por parï¿½metro estï¿½ en la
+     * pila y false si no lo estï¿½.
+     * @param filter        Tipo de filtro a comprobar
+     * @return true si estï¿½ en la pila y false si no lo estï¿½
+     */
+    public boolean isActive(int type) {
+        return filterStack.isActive(type);
+    }
+
+    /**
+     * Elimina los filtros de la pila de un determinado tipo
+     * @param type        Tipo de filtro a eliminar
+     */
+    public void removeFilter(int type) {
+        filterStack.removeFilter(type);
+        this.controlTypes();
+    }
+
+    /**
+     * Resetea el flag de temporalidad de los filtros de la pila.
+     * Esto equivale a fijar los filtros que ya existen en la pila. A partir de
+     * ese momento los filtros que se introduzcan podrï¿½n ser eliminados de golpe
+     * llamando a la funciï¿½n deleteTempFilters
+     */
+    public void resetTempFilters() {
+        filterStack.resetTempFilters();
+    }
+
+    /**
+     * Elimina los filtros temporales, es decir, todos los filtros introducidos desde
+     * el ï¿½ltimo resetTempFilters que se ha realizado.
+     */
+    public void deleteTempFilters() {
+        filterStack.deleteTempFilters();
+    }
+
+    /**
+     * Obtiene el objeto de estadisticas asignado a la pila.
+     * @return
+     */
+    public Statistic getStackStats() {
+        return filterStack.getStats();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.StackManager#getStringsFromStack()
+     */
+    public ArrayList getStringsFromStack() {
+        filterList = new ArrayList();
+        for (int i = 0; i < filterStack.lenght(); i++) {
+            RasterFilter rf = filterStack.get(i);
+
+            if (rf instanceof TransparencyFilter) {
+                filterList.add("filter.transparency.active=true");
+                for(int j=0;j<((TransparencyFilter) rf).rangesList.size();j++)
+                	filterList.add("filter.transparency.transparencyRange"+j+"="+
+                			((TransparencyRange)((TransparencyFilter) rf).rangesList.get(j)).getStrEntry());
+            } else if (rf instanceof LinearEnhancementFilter) {
+                filterList.add("filter.enhanced.active=true");
+                filterList.add("filter.enhanced.remove=" +
+                               ((LinearEnhancementFilter) rf).getRemoveExtrema()
+                                .toString());
+            } else if (rf instanceof ComputeMinMaxFilter) {
+                filterList.add("filter.computeminmax.active=true");
+            } else if (rf instanceof PercentTailTrimFilter) {
+                filterList.add("filter.tail.active=true");
+                filterList.add("filter.tail.value=" +
+                               this.getStackStats().tailPercent);
+                filterList.add("filter.tail.remove=" +
+                               ((PercentTailTrimFilter) rf).removeMaxValue());
+            } else if (rf instanceof RemoveBandsFilter) {
+                filterList.add("filter.removebands.active=true");
+                filterList.add("filter.removebands.bands=" +
+                               ((RemoveBandsFilter) rf).bands);
+            } else { //Se recorren todos los managers registrados comprobando si corresponde a la clase del filtro
+                /*for (int j = 0; j < filterStack.managers.size(); j++){
+                	filterList = ((IStackManager) filterStack.managers.get(j)).getStringsFromStack(filterList, rf);
+                }*/
+                for (int j = 0; j < managers.size(); j++){
+                	filterList = ((IStackManager) managers.get(j)).getStringsFromStack(filterList, rf);
+                }
+            }
+        }
+
+        return filterList;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.StackManager#getStringsFromStack()
+     */
+    public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf){
+    	return null;
+    }
+        
+    /**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+    public void createStackFromStrings(ArrayList f) {
+    	this.grfList = null;
+        this.createStackFromStrings(f, new Integer(0));
+    }
+    
+    /**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+    public void createStackFromStrings(ArrayList f, GeoRasterFile[] grfList) {
+    	this.grfList = grfList;
+        this.createStackFromStrings(f, new Integer(0));
+    }
+   
+    public void createStackFromStrings(ArrayList f, Integer pos) {
+        ArrayList filters = (ArrayList) f.clone();
+        filterStack.clear();
+
+        int filteri = pos.intValue();
+
+        //Busca un filtro activo y despuï¿½s todas las propiedades que necesita ese filtro para
+        //ser creado. Una vez las tiene aï¿½ade en la pila el tipo de filtro.
+        while ((filters.size() > 0) && (filteri < filters.size())) {
+            String fil = (String) filters.get(filteri);
+
+            if (fil.startsWith("filter.transparency.active") &&
+                    getValue(fil).equals("true")) {
+                filters.remove(filteri);
+                
+                ArrayList list = new ArrayList();
+                for (int propFilter = 0;propFilter < filters.size();propFilter++) {
+                    String elem = (String) filters.get(propFilter);
+
+                    if (elem.startsWith("filter.transparency.transparencyRange")) {
+                    	TransparencyRange tr = new TransparencyRange();
+                    	String value = getValue(elem);
+                    	tr.setStrEntry(value);
+                    	int[] red = new int[2];
+                		int[] green = new int[2];
+                		int[] blue = new int[2];
+                		boolean and = true;
+                		try{
+                			and = TransparencyRange.stringToInterval(value, red, green, blue);
+                			if(red[0] == -1)
+                				red = null;
+                			if(green[0] == -1)
+                				green = null;
+                			if(blue[0] == -1)
+                				blue = null;
+                		}catch(IOException e){
+                			e.printStackTrace();
+                		}
+                		tr.setAnd(and);
+                		tr.setRed(red);
+                		tr.setGreen(green);
+                		tr.setBlue(blue);
+                		list.add(tr);
+                        filters.remove(propFilter);
+                        propFilter--;
+                    }
+                }
+
+                this.addTransparencyFilter(list, 0x0, 0xff, 0xff, 0xff);
+                                   
+                filteri = -1;
+            }
+
+            if (fil.startsWith("filter.enhanced.active") &&
+                    getValue(fil).equals("true")) {
+                filters.remove(filteri);
+
+                for (int propFilter = 0;propFilter < filters.size();propFilter++) {
+                    String elem = (String) filters.get(propFilter);
+
+                    if (elem.startsWith("filter.enhanced.remove")) {
+                        this.addEnhancedFilter(Boolean.valueOf(getValue(elem))
+                                                      .booleanValue());
+                        filters.remove(propFilter);
+                        propFilter--;
+                    }
+                }
+
+                this.addComputeMinMaxFilter();
+                filteri = -1;
+            }
+
+            if (fil.startsWith("filter.tail.active") &&
+                    getValue(fil).equals("true")) {
+                filters.remove(filteri);
+                this.removeFilter(this.getTypeFilter("computeminmax"));
+
+                double recorte = 0D;
+                boolean remove = false;
+
+                for (int propFilter = 0; propFilter < filters.size();propFilter++) {
+                    String elem = (String) filters.get(propFilter);
+
+                    if (elem.startsWith("filter.tail.value")) {
+                        recorte = Double.parseDouble(getValue(elem));
+                        filters.remove(propFilter);
+                        propFilter--;
+                    }
+
+                    if (elem.startsWith("filter.tail.remove")) {
+                        remove = Boolean.valueOf(getValue(elem)).booleanValue();
+                        filters.remove(propFilter);
+                        propFilter--;
+                    }
+                }
+
+                this.addTailFilter(recorte, 0D, remove);
+                filteri = -1;
+            }
+
+            if (fil.startsWith("filter.removebands.active") &&
+                    getValue(fil).equals("true")) {
+                filters.remove(filteri);
+
+                for (int propFilter = 0;propFilter < filters.size();propFilter++) {
+                    String elem = (String) filters.get(propFilter);
+
+                    if (elem.startsWith("filter.removebands.bands")) {
+                        this.addRemoveBands(getValue(elem));
+                        filters.remove(propFilter);
+                        propFilter--;
+                    }
+                }
+                filteri = -1;
+            }
+            
+            for (int j = 0; j < managers.size(); j++){
+            	filteri = ((IStackManager) managers.get(j)).createStackFromStrings(filters, fil, this.grfList, filteri);
+            	this.grfList = null;
+            }
+
+            filteri++;
+        }
+    }
+
+    /**
+     * Obtiene el elemento de una cadena de la forma elemento=valor
+     * @param cadena
+     * @return
+     */
+    public static String getElem(String cadena) {
+        if (cadena != null) {
+            return cadena.substring(0, cadena.indexOf("="));
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Obtiene el valor de una cadena de la forma elemento=valor
+     * @param cadena
+     * @return
+     */
+    public static String getValue(String cadena) {
+        if (cadena != null) {
+            return cadena.substring(cadena.indexOf("=") + 1, cadena.length());
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Convierte un rango contenido en una array doble en una cadena
+     * de strings para poder salvar a xml
+     * @param rang
+     * @return
+     */
+    private String rangeToString(int[][] rang) {
+        StringBuffer rangoStr = new StringBuffer();
+
+        if (rang != null) {
+            for (int i = 0; i < rang.length; i++) {
+                rangoStr.append(String.valueOf(rang[i][0]) + ":");
+                rangoStr.append(String.valueOf(rang[i][1]) + ":");
+            }
+
+            String r = rangoStr.toString();
+
+            if (r.endsWith(":")) {
+                r = r.substring(0, r.length() - 1);
+            }
+
+            return r;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Convierte una cadena en una lista de rangos numericos para poder
+     * asignar transparencias a la imagen
+     * @param rang
+     * @return
+     */
+    private int[][] stringToRange(String rang) {
+        if ((rang != null) && !rang.equals("null")) {
+            ArrayList lista = new ArrayList();
+            StringTokenizer tokenizer = new StringTokenizer(rang, ":");
+
+            while (tokenizer.hasMoreTokens())
+                lista.add(tokenizer.nextToken());
+
+            int[][] intervalos = new int[(int) (lista.size() / 2)][2];
+
+            for (int i = 0; i < lista.size(); i = i + 2) {
+                intervalos[i / 2][0] = Integer.valueOf((String) lista.get(i))
+                                              .intValue();
+                intervalos[i / 2][1] = Integer.valueOf((String) lista.get(i +
+                                                                          1))
+                                              .intValue();
+            }
+
+            return intervalos;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Obtiene la pila de filtros
+     * @return RasterFilterStack
+     */
+	public RasterFilterStack getFilterStack() {
+		return filterStack;
+	}
+
+	/**
+	 * Obtiene la Hashable que contiene los tipos de filtros registrados
+	 * @return Hashtable
+	 */
+	public Hashtable getTypeFilters() {
+		return typeFilters;
+	}
+
+	public int createStackFromStrings(ArrayList filters, String fil, GeoRasterFile[] grfList, int filteri) {
+		// TODO Auto-generated method stub
+		return filteri;
+	}
+	
+	/**
+	 * Carga una clase pasada por parï¿½metro. Como argumento del constructor de la clase se 
+	 * pasarï¿½ un RasterFilterStackManager. Esto es usado para instanciar los gestores de filtros
+	 * registrados
+	 * @param clase Clase a instanciar
+	 * @param stackManager Parï¿½metro del constructor de la clase a instanciar
+	 * @return Objeto que corresponde a la instancia de la clase pasada.
+	 */
+	public static Object loadClass(Class clase, RasterFilterStackManager stackManager) {
+		Object obj = null;
+		Class [] args = {RasterFilterStackManager.class};
+		try {
+			Constructor hazNuevo = clase.getConstructor(args);
+			Object [] args2 = {stackManager};
+			obj =  hazNuevo.newInstance(args2);
+		} catch (SecurityException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (NoSuchMethodException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IllegalArgumentException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InstantiationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InvocationTargetException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return obj;
+	}
+	
+	/**
+	 * Obtiene el manager registrado a partir de la clase
+	 * @return
+	 */
+	public IStackManager getManagerByClass(Class c){
+		for (int j = 0; j < managers.size(); j++){
+        	if(managers.get(j).getClass().equals(c))
+        		return (IStackManager)managers.get(j);
+        }
+		return null;
+	}
+
+}
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/RasterFilterStackManager.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFloatFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFloatFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFloatFilter.java	(revision 10281)
@@ -0,0 +1,162 @@
+package org.cresques.filter.correction;
+
+import java.util.Arrays;
+
+import org.cresques.io.data.RasterBuf;
+
+public class MedianFloatFilter extends MedianFilter {
+
+	public void process(int col, int line) {
+		float[] pxOut = new float[4];
+		float[] px = new float[4];
+		
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+	    float [] ventanaR = new float[tamVentana];
+	    float [] ventanaG = new float[tamVentana];
+	    float [] ventanaB = new float[tamVentana];
+		int k;
+		
+		raster.getElemFloat(line,col,px); 
+		
+		if((col-mitadLado >= 0) && (line-mitadLado >= 0) &&(col+mitadLado < width)&&(line+mitadLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente banda)
+				k=0;
+				for (int i=-mitadLado;i<=mitadLado;i++)
+					for(int j=-mitadLado;j<=mitadLado;j++)
+					{
+						raster.getElemFloat(line+j,col+i,px); 
+						ventanaR[k] =px[0];
+						ventanaG[k] =px[1];
+						ventanaB[k] =px[2];
+						k++;
+					}
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+			//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				
+				rasterResult.setElemFloat(line, col, pxOut);
+		}
+		else rasterResult.setElemFloat(line, col, px);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		float[] px = new float[4];
+		float[] pxOut = new float[4];
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+	    int indiceX,indiceY,origenX,origenY;
+	    
+	    float [] ventanaR = new float[tamVentana];
+		float [] ventanaG = new float[tamVentana];
+		float [] ventanaB = new float[tamVentana];
+		
+		raster.getElemFloat(line,col,px);
+		
+		if ((contX+1-mitadLado>=0) && (contY+1-mitadLado>=0)&& (contX+1+mitadLado<stepX.length) && (contY+1+mitadLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			int offsetX=0;
+			int offsetY=0;
+			for (int i=0;i<mitadLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((col+offsetX<width)&&(line+offsetY<height)){
+//				 Obtener el vector con las ventanas de muestras (una por banda) **************************
+				// Me situo en la esquina superior izquierda del "kernel"
+				origenX=col;
+				origenY=line;
+				for (int i=0;i<mitadLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel segï¿½n los step
+				int k=0;
+				indiceX=origenX;
+				for (int i=-mitadLado;i<=mitadLado;i++){
+					indiceY=origenY;
+					for(int j=-mitadLado;j<=mitadLado;j++){		
+						raster.getElemFloat(indiceY,indiceX,px);
+						ventanaR[k] =px[0];
+						ventanaG[k] =px [1];
+						ventanaB[k] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+				//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+					for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+						rasterResult.setElemFloat(j, i,pxOut);
+				return;
+			}
+		}
+		
+		// Si la ventana se sale de la imagen dejar el pixeles original
+		for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+				rasterResult.setElemFloat(j, i,px);			
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_FLOAT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		this.ladoVentana = ((Integer) params.get("ladoVentana")).intValue();
+		this.rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFloatFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianDoubleFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianDoubleFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianDoubleFilter.java	(revision 10281)
@@ -0,0 +1,162 @@
+package org.cresques.filter.correction;
+
+import java.util.Arrays;
+
+import org.cresques.io.data.RasterBuf;
+
+public class MedianDoubleFilter extends MedianFilter {
+
+	public void process(int col, int line) {
+		double[] pxOut = new double[4];
+		double[] px = new double[4];
+		
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+	    double [] ventanaR = new double[tamVentana];
+	    double [] ventanaG = new double[tamVentana];
+	    double [] ventanaB = new double[tamVentana];
+		int k;
+		
+		raster.getElemDouble(line,col,px); 
+		
+		if((col-mitadLado >= 0) && (line-mitadLado >= 0) &&(col+mitadLado < width)&&(line+mitadLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente banda)
+				k=0;
+				for (int i=-mitadLado;i<=mitadLado;i++)
+					for(int j=-mitadLado;j<=mitadLado;j++)
+					{
+						raster.getElemDouble(line+j,col+i,px); 
+						ventanaR[k] =px[0];
+						ventanaG[k] =px[1];
+						ventanaB[k] =px[2];
+						k++;
+					}
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+			//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				
+				rasterResult.setElemDouble(line, col, pxOut);
+		}
+		else rasterResult.setElemDouble(line, col, px);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		double[] px = new double[4];
+		double[] pxOut = new double[4];
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+	    int indiceX,indiceY,origenX,origenY;
+	    
+	    double [] ventanaR = new double[tamVentana];
+		double [] ventanaG = new double[tamVentana];
+		double [] ventanaB = new double[tamVentana];
+		
+		raster.getElemDouble(line,col,px);
+		
+		if ((contX+1-mitadLado>=0) && (contY+1-mitadLado>=0)&& (contX+1+mitadLado<stepX.length) && (contY+1+mitadLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			int offsetX=0;
+			int offsetY=0;
+			for (int i=0;i<mitadLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((col+offsetX<width)&&(line+offsetY<height)){
+//				 Obtener el vector con las ventanas de muestras (una por banda) **************************
+				// Me situo en la esquina superior izquierda del "kernel"
+				origenX=col;
+				origenY=line;
+				for (int i=0;i<mitadLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel segï¿½n los step
+				int k=0;
+				indiceX=origenX;
+				for (int i=-mitadLado;i<=mitadLado;i++){
+					indiceY=origenY;
+					for(int j=-mitadLado;j<=mitadLado;j++){		
+						raster.getElemDouble(indiceY,indiceX,px);
+						ventanaR[k] =px[0];
+						ventanaG[k] =px [1];
+						ventanaB[k] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+				//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+					for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+						rasterResult.setElemDouble(j, i,pxOut);
+				return;
+			}
+		}
+		
+		// Si la ventana se sale de la imagen dejar el pixeles original
+		for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+				rasterResult.setElemDouble(j, i,px);			
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_DOUBLE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		this.ladoVentana = ((Integer) params.get("ladoVentana")).intValue();
+		this.rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianDoubleFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianStackManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianStackManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianStackManager.java	(revision 10281)
@@ -0,0 +1,163 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.correction;
+
+import java.util.ArrayList;
+
+import org.cresques.filter.IStackManager;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.io.GeoRasterFile;
+
+/**
+ * Gestor de la pila de filtros para el filtro de mediana.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class MedianStackManager implements IStackManager{
+	
+	public final static int				median = 9;
+	protected RasterFilterStack 		filterStack = null;
+	private RasterFilterStackManager	filterStackManager = null;
+	private GeoRasterFile[] 			grfList = null;
+	
+	public MedianStackManager(RasterFilterStackManager filterStackManager){
+		this.filterStackManager = filterStackManager;
+		this.filterStack = filterStackManager.getFilterStack();
+		filterStackManager.addTypeFilter("median", MedianStackManager.median, 8);
+	}
+	
+	/**
+	 * Obtiene el valor entero que corresponde al tipo de filtro.
+	 * @param rasterFilter
+	 * @return
+	 */
+	public int getType(RasterFilter rasterFilter){
+		if(rasterFilter instanceof MedianFilter)
+			return MedianStackManager.median;
+					
+		return -1;
+	}
+	
+	/**
+	 * Aï¿½ade un filtro de mediana a la pila de filtros.
+	 * @param ladoVentana
+	 */
+	public void addMedianFilter(int ladoVentana){
+		//Si ya hay un filtro de mediana en la pila lo sobreescribimos
+		
+		if(filterStack.isActive(((Integer) filterStackManager.getTypeFilters().get("median")).intValue()))
+			filterStack.removeFilter(((Integer) filterStackManager.getTypeFilters().get("median")).intValue());
+	
+		RasterFilter filtro = null;
+		
+		switch(filterStack.getDataTypeInFilter(((Integer)this.filterStackManager.getTypeFilters().get("median")).intValue())){
+		case RasterBuf.TYPE_IMAGE:
+			filtro = new MedianImageFilter();
+			break;
+		case RasterBuf.TYPE_SHORT:
+			filtro = new MedianShortFilter();
+			break;
+		case RasterBuf.TYPE_USHORT:
+			filtro = new MedianShortFilter();
+			break;
+		case RasterBuf.TYPE_INT:
+			filtro = new MedianIntegerFilter();
+			break;
+		case RasterBuf.TYPE_FLOAT:
+			filtro = new MedianFloatFilter();
+			break;
+		case RasterBuf.TYPE_DOUBLE:
+			filtro = new MedianDoubleFilter();
+			break;
+		}
+		
+		//Cuando el filtro esta creado, tomamos los valores y lo aï¿½adimos a la pila
+		
+		if(filtro != null){
+			filtro.addParam("ladoVentana", new Integer(ladoVentana));
+			filterStack.addFilter(((Integer) filterStackManager.getTypeFilters().get("median")).intValue(), filtro);
+			filterStackManager.controlTypes();
+		}
+	}
+	
+	public void createStackFromStrings(ArrayList f, Integer pos) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	
+	/**
+     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
+     * tener la forma elemento=valor.
+     * @param filters
+     */
+	public int createStackFromStrings(ArrayList filters, String fil, GeoRasterFile[] grfList, int filteri) {
+		this.grfList = grfList;
+
+			if((fil.startsWith("filter.median.active"))&&
+					(RasterFilterStackManager.getValue(fil).equals("true"))){
+				
+				int ladoVentana = 3;
+				filters.remove(0);
+				
+				for(int prop = 0; prop < filters.size() ; prop++){	
+					String elem = (String) filters.get(prop);
+					if(elem.startsWith("filter.median.ladoVentana")){
+						ladoVentana = Integer.parseInt(RasterFilterStackManager.getValue(elem));
+						filters.remove(prop);
+						prop--;
+					}
+				}
+				addMedianFilter(ladoVentana);
+			}
+		//return filteri;
+			return -1;
+	}
+
+	public ArrayList getStringsFromStack() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	/**
+	 * Obtiene un Array de Strings a partir de una pila de filtros. Cada elemento del array
+	 * tendrï¿½ la forma de elemento=valor.
+	 */
+	
+	public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf) {
+		
+		
+		if(rf instanceof MedianFilter)
+			filterList.add("filter.median.active=true");
+		
+		if(rf instanceof MedianFilter){
+			MedianFilter median = (MedianFilter) rf;
+			filterList.add("filter.median.ladoVentana="+median.ladoVentana);
+        }
+			
+		return filterList;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianStackManager.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianIntegerFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianIntegerFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianIntegerFilter.java	(revision 10281)
@@ -0,0 +1,162 @@
+package org.cresques.filter.correction;
+
+import java.util.Arrays;
+
+import org.cresques.io.data.RasterBuf;
+
+public class MedianIntegerFilter extends MedianFilter {
+
+	public void process(int col, int line) {
+		int[] pxOut = new int[4];
+		int[] px = new int[4];
+		
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+		int [] ventanaR = new int[tamVentana];
+		int [] ventanaG = new int[tamVentana];
+		int [] ventanaB = new int[tamVentana];
+		int k;
+		
+		raster.getElemInt(line,col,px); 
+		
+		if((col-mitadLado >= 0) && (line-mitadLado >= 0) &&(col+mitadLado < width)&&(line+mitadLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente banda)
+				k=0;
+				for (int i=-mitadLado;i<=mitadLado;i++)
+					for(int j=-mitadLado;j<=mitadLado;j++)
+					{
+						raster.getElemInt(line+j,col+i,px); 
+						ventanaR[k] =px[0];
+						ventanaG[k] =px[1];
+						ventanaB[k] =px[2];
+						k++;
+					}
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+			//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				
+				rasterResult.setElemInt(line, col, pxOut);
+		}
+		else rasterResult.setElemInt(line, col, px);
+
+	}
+
+	public void processSuperSampling(int col, int line) {
+		int[] px = new int[4];
+		int[] pxOut = new int[4];
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+	    int indiceX,indiceY,origenX,origenY;
+	    
+	    int [] ventanaR = new int[tamVentana];
+		int [] ventanaG = new int[tamVentana];
+		int [] ventanaB = new int[tamVentana];
+		
+		raster.getElemInt(line,col,px);
+		
+		if ((contX+1-mitadLado>=0) && (contY+1-mitadLado>=0)&& (contX+1+mitadLado<stepX.length) && (contY+1+mitadLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			int offsetX=0;
+			int offsetY=0;
+			for (int i=0;i<mitadLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((col+offsetX<width)&&(line+offsetY<height)){
+//				 Obtener el vector con las ventanas de muestras (una por banda) **************************
+				// Me situo en la esquina superior izquierda del "kernel"
+				origenX=col;
+				origenY=line;
+				for (int i=0;i<mitadLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel segï¿½n los step
+				int k=0;
+				indiceX=origenX;
+				for (int i=-mitadLado;i<=mitadLado;i++){
+					indiceY=origenY;
+					for(int j=-mitadLado;j<=mitadLado;j++){		
+						raster.getElemInt(indiceY,indiceX,px);
+						ventanaR[k] =px[0];
+						ventanaG[k] =px [1];
+						ventanaB[k] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+				//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+					for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+						rasterResult.setElemInt(j, i,pxOut);
+				return;
+			}
+		}
+		
+		// Si la ventana se sale de la imagen dejar el pixeles original
+		for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+				rasterResult.setElemInt(j, i,px);			
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_INT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		this.ladoVentana = ((Integer) params.get("ladoVentana")).intValue();
+		this.rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianIntegerFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFilter.java	(revision 10281)
@@ -0,0 +1,59 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.correction;
+
+import java.awt.Image;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Clase base para los filtros de mediana.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public abstract class MedianFilter extends RasterFilter {
+
+	/**
+	 * Variable para guardar el lado de la ventana de filtrado
+	 */
+	protected int ladoVentana = 0;
+	protected Image             imageResult = null;
+	protected RasterBuf rasterResult = null;
+	
+	
+	public MedianFilter(){
+		super();
+		super.filterName = "mediana";
+	}
+	
+	public void pre() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void post() {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianShortFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianShortFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianShortFilter.java	(revision 10281)
@@ -0,0 +1,169 @@
+package org.cresques.filter.correction;
+
+import java.util.Arrays;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de Mediana que se aplica a un RasterBuf de tipo Short.
+ * Toma como entrada la imagen y el lado de la ventana de filtrado.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class MedianShortFilter extends MedianFilter {
+
+	public void process(int col, int line) {
+		short[] pxOut = new short[4];
+		short[] px = new short[4];
+		
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+		short [] ventanaR = new short[tamVentana];
+		short [] ventanaG = new short[tamVentana];
+		short [] ventanaB = new short[tamVentana];
+		int k;
+		
+		raster.getElemShort(line,col,px); 
+		
+		if((col-mitadLado >= 0) && (line-mitadLado >= 0) &&(col+mitadLado < width)&&(line+mitadLado < height)) 
+		{
+				// Obtener el vector con la ventanas de muestras (una por componente banda)
+				k=0;
+				for (int i=-mitadLado;i<=mitadLado;i++)
+					for(int j=-mitadLado;j<=mitadLado;j++)
+					{
+						raster.getElemShort(line+j,col+i,px); 
+						ventanaR[k] =px[0];
+						ventanaG[k] =px[1];
+						ventanaB[k] =px[2];
+						k++;
+					}
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+			//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				
+				rasterResult.setElemShort(line, col, pxOut);
+		}
+		else rasterResult.setElemShort(line, col, px);
+	}
+
+	public void processSuperSampling(int col, int line) {
+		short[] px = new short[4];
+		short[] pxOut = new short[4];
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int mitadLado = (ladoVentana-1)>>1;
+	    int indiceX,indiceY,origenX,origenY;
+	    
+	    short [] ventanaR = new short[tamVentana];
+		short [] ventanaG = new short[tamVentana];
+		short [] ventanaB = new short[tamVentana];
+		
+		raster.getElemShort(line,col,px);
+		
+		if ((contX+1-mitadLado>=0) && (contY+1-mitadLado>=0)&& (contX+1+mitadLado<stepX.length) && (contY+1+mitadLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			int offsetX=0;
+			int offsetY=0;
+			for (int i=0;i<mitadLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((col+offsetX<width)&&(line+offsetY<height)){
+//				 Obtener el vector con las ventanas de muestras (una por banda) **************************
+				// Me situo en la esquina superior izquierda del "kernel"
+				origenX=col;
+				origenY=line;
+				for (int i=0;i<mitadLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel segï¿½n los step
+				int k=0;
+				indiceX=origenX;
+				for (int i=-mitadLado;i<=mitadLado;i++){
+					indiceY=origenY;
+					for(int j=-mitadLado;j<=mitadLado;j++){		
+						raster.getElemShort(indiceY,indiceX,px);
+						ventanaR[k] =px[0];
+						ventanaG[k] =px [1];
+						ventanaB[k] =px[2];
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+				
+				pxOut[0]=ventanaR[(tamVentana-1)/2];
+				pxOut[1]=ventanaG[(tamVentana-1)/2];
+				pxOut[2]=ventanaB[(tamVentana-1)/2];
+			
+				//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+					for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+						rasterResult.setElemShort(j, i,pxOut);
+				return;
+			}
+		}
+		
+		// Si la ventana se sale de la imagen dejar el pixeles original
+		for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+				rasterResult.setElemShort(j, i,px);			
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_SHORT;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.rasterResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void pre() {
+		exec = true;
+		this.raster = (RasterBuf) params.get("raster");
+		height = raster.getHeight();
+        width = raster.getWidth();
+		this.ladoVentana = ((Integer) params.get("ladoVentana")).intValue();
+		this.rasterResult = new RasterBuf(raster.getDataType(),width,height,raster.getBandCount(),true);
+		
+		super.pre();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianShortFilter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianImageFilter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianImageFilter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianImageFilter.java	(revision 10281)
@@ -0,0 +1,188 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+package org.cresques.filter.correction;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.util.Arrays;
+
+import org.cresques.io.data.RasterBuf;
+
+/**
+ * Filtro de Mediana que se aplica en la imagen. Toma como entrada la imagen
+ * y el lado de la ventana de filtrado.
+ * 
+ * @author Diego Guerrero Sevilla  <diego.guerrero@uclm.es>
+ *
+ */
+
+public class MedianImageFilter extends MedianFilter {
+	
+	public MedianImageFilter(){
+		super();
+	}
+	
+	public void pre(){
+		exec = true;
+		this.image = (Image) params.get("raster");
+		height = image.getHeight(null);
+        width = image.getWidth(null);
+		this.ladoVentana = ((Integer) params.get("ladoVentana")).intValue();
+		imageResult = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+		
+		super.pre();
+	}
+	
+public void process(int col, int line) {
+		
+		int px;
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int semiLado = (ladoVentana-1)>>1;
+	    
+		int [] ventanaR = new int[tamVentana];
+		int [] ventanaG = new int[tamVentana];
+		int [] ventanaB = new int[tamVentana];
+	
+		px = ((BufferedImage) image).getRGB(col, line); 
+		int alpha = (px & 0xff000000);       //Extraigo el alpha para mantenerlo.
+		
+				// Obtener el vector con la ventanas de muestras (una por componente RGB)
+				int k=0;
+				for (int i=-semiLado;i<=semiLado;i++)
+					for(int j=-semiLado;j<=semiLado;j++)
+					{
+						if((col+i >= 0) && (line+j >= 0) &&(col+i < width)&&(line+j < height)){  
+							px = ((BufferedImage) image).getRGB(col+i, line+j);
+							ventanaR[k] =(px & 0x00ff0000) >> 16;
+							ventanaG[k] =(px & 0x0000ff00) >> 8;
+							ventanaB[k] =(px & 0x000000ff);
+							k++;
+						}
+					}
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR,0,k);
+				Arrays.sort(ventanaG,0,k);
+				Arrays.sort(ventanaB,0,k);
+			
+			//Extraer los elementos centrales y asignarselos al pixel (x,y)
+			((BufferedImage) imageResult).setRGB(col, line, 	alpha | 
+													((ventanaR[k>>1] << 16) & 0x00ff0000) |
+													((ventanaG[k>>1] << 8) & 0x0000ff00) |
+													(ventanaB[k>>1] & 0x000000ff));
+	}
+
+	public void processLine(int y) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public int getInRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public int getOutRasterDataType() {
+		return RasterBuf.TYPE_IMAGE;
+	}
+
+	public Object getResult(String name) {
+		if (name.equals("raster")) {
+            return (Object) this.imageResult;
+        } else {
+            return null;
+        }
+	}
+
+	public void processSuperSampling(int col, int line){
+		int px;
+		ladoVentana = Math.abs(ladoVentana);     // El lado de la ventana debe
+		if(ladoVentana % 2 == 0) ladoVentana++;  // ser positivo e impar.
+	    int tamVentana = ladoVentana*ladoVentana;
+	    int semiLado = (ladoVentana-1)>>1;
+	    int indiceX,indiceY,origenX,origenY;
+	    
+		int [] ventanaR = new int[tamVentana];
+		int [] ventanaG = new int[tamVentana];
+		int [] ventanaB = new int[tamVentana];
+		
+		px = ((BufferedImage) image).getRGB(col, line); 
+		int alpha = (px & 0xff000000);       //Extraigo el alpha para mantenerlo.
+		
+		if ((contX+1-semiLado>=0) && (contY+1-semiLado>=0)&& (contX+1+semiLado<stepX.length) && (contY+1+semiLado<stepY.length)){
+			
+			// Calcular el alcance del kernel cuyo centro es (x,y)
+			int offsetX=0;
+			int offsetY=0;
+			for (int i=0;i<semiLado;i++){
+				offsetX=offsetX+stepX[contX+i+1];
+				offsetY=offsetY+stepY[contY+i+1];
+			}
+			if((col+offsetX<width)&&(line+offsetY<height)){
+//				 Obtener el vector con las ventanas de muestras (una por componente RGB) **************************
+				// Me situo en la esquina superior izquierda del "kernel"
+				origenX=col;
+				origenY=line;
+				for (int i=0;i<semiLado;i++){
+					origenX=origenX-stepX[contX-i];
+					origenY=origenY-stepY[contY-i];	
+				}
+				//Recorro el kernel segï¿½n los step
+				int k=0;
+				indiceX=origenX;
+				for (int i=-semiLado;i<=semiLado;i++){
+					indiceY=origenY;
+					for(int j=-semiLado;j<=semiLado;j++){		
+						px = ((BufferedImage) image).getRGB(indiceX, indiceY);
+						ventanaR[k] =(px & 0x00ff0000) >> 16;
+						ventanaG[k] =(px & 0x0000ff00) >> 8;
+						ventanaB[k] =(px & 0x000000ff);
+						indiceY=indiceY+stepY[contY+j+1];
+						k++;
+					}
+					indiceX=indiceX+stepX[contX+i+1];
+				}
+				//**************************************************************************************************
+				
+				// Ordenar los valores de las ventanas
+			    	// se supone que usa quickSort.
+				Arrays.sort(ventanaR);
+				Arrays.sort(ventanaG);
+				Arrays.sort(ventanaB);
+			
+				//Extraer los elementos centrales y asignarselos al pixel (x,y)
+				for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+					for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+							((BufferedImage) imageResult).setRGB(i, j, 	alpha | 
+														((ventanaR[(tamVentana-1)/2] << 16) & 0x00ff0000) |
+														((ventanaG[(tamVentana-1)/2] << 8) & 0x0000ff00) |
+														(ventanaB[(tamVentana-1)/2] & 0x000000ff));
+				return;
+			}
+		}
+		
+		 // Si la ventana se sale de la imagen dejar el pixeles original
+		for(int i = col; i < width && i < (col + stepX[contX + 1]); i++)
+			for(int j = line; j < height && j < (line + stepY[contY + 1]); j++)
+				((BufferedImage) imageResult).setRGB(i, j, px);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/filter/correction/MedianImageFilter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/package.html	(revision 10281)
@@ -0,0 +1,5 @@
+<html>
+	<body>Input/Output: Acceso a ficheros, zips, etc.
+</body>
+</html>
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MrSidFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MrSidFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MrSidFile.java	(revision 10281)
@@ -0,0 +1,1090 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.awt.Image;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.Vector;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.io.MrSidNative.Contour;
+import org.cresques.io.data.BandList;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.exceptions.SupersamplingNotSupportedException;
+import org.cresques.px.Extent;
+
+import es.gva.cit.jgdal.GdalBuffer;
+import es.gva.cit.jgdal.GdalException;
+import es.gva.cit.jgdal.GdalRasterBand;
+import es.gva.cit.jmrsid.LTIColorSpace;
+import es.gva.cit.jmrsid.LTIDataType;
+import es.gva.cit.jmrsid.LTIGeoCoord;
+import es.gva.cit.jmrsid.LTIImageStage;
+import es.gva.cit.jmrsid.LTIMetadataDatabase;
+import es.gva.cit.jmrsid.LTIMetadataRecord;
+import es.gva.cit.jmrsid.LTIPixel;
+import es.gva.cit.jmrsid.LTIScene;
+import es.gva.cit.jmrsid.LTISceneBuffer;
+import es.gva.cit.jmrsid.LTIUtils;
+import es.gva.cit.jmrsid.MrSIDException;
+import es.gva.cit.jmrsid.MrSIDImageReader;
+
+
+/**
+ * Soporte para los fichero MrSID de Lizardtech
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+class MrSidNative extends MrSIDImageReader {
+    static boolean WITH_OVERVIEWS = true;
+
+    /**
+     * Contorno en coordenadas geográficas. (y Extent del raster).
+     */
+    public Contour 					esq = new Contour();
+    public int 						width = 0;
+    public int 						height = 0;
+    public double 					originX = 0D;
+    public double 					originY = 0D;
+    public String 					version = "";
+    public LTIMetadataDatabase 		metadata;
+    public LTIPixel 				pixel = null;
+    private int 					alpha = 0;
+    protected int 					rBandNr = 1;
+    protected int 					gBandNr = 2;
+    protected int 					bBandNr = 3;
+    protected byte[] 				bandR;
+    protected byte[] 				bandG;
+    protected byte[] 				bandB;
+    private int 					dataType = LTIDataType.LTI_DATATYPE_UINT8;
+
+    //View
+    private double 					zoomoverview = 0.0;
+    private int 					eColorSpace;
+    private int 					eSampleType;
+    private int 					noverviews;
+    public int 						xini;
+    public int 						yini;
+    /**
+     * Ancho y alto de la overview
+     */
+    public int 						anchoOver;
+    public int 						altoOver;
+    public int 						blocksize = 1;
+    /**
+     * Número de bandas de la imagen
+     */
+    public int 						nbands;
+    /**
+     * Número de overview actualmente seleccionada
+     */
+    private int 					currentOverview = -1;
+    /**
+     * Posición de la esquina superior izquierda en coordenadas pixel
+     */
+    private double 					currentViewY = -1;
+    private double 					currentViewX = 0D;
+    /**
+     * Ancho y alto de la imágen (pixeles en pantalla)
+     */
+    private int 					currentViewWidth = -1;
+    private int 					currentViewHeight = -1;
+    /**
+     * Ancho y alto de la imagen completa en pixeles
+     */
+    private int 					currentFullWidth = -1;
+    private int 					currentFullHeight = -1;
+    /**
+     * Escala del viewport en X e Y
+     */
+    private double 					viewportScaleX = 0D;
+    private double 					viewportScaleY = 0D;
+    /**
+     * Último extent de la ventana seleccionada por el usuario. Este extent corresponde al de la
+     * imagen, no al del viewport de la vista.
+     */
+    private double[]				currentImageView = new double[4];
+    /**
+     * 
+     */
+	public int[]					stepArrayX = null, stepArrayY = null;
+	/**
+	 * 
+	 */
+	public boolean  				isSupersampling = false;
+	/**
+	 * Nombre del fichero MrSID
+	 */
+	private String					fileName = null;
+	
+    /**
+     * Constructor
+     * @param fName
+     * @throws MrSIDException
+     * @throws IOException
+     */
+    public MrSidNative(String fName) throws MrSIDException, IOException {
+        super(fName);
+        init(fName);
+    }
+    
+    /**
+     * Inicializa las variables de instancia con los valores de la imagen
+     * @param fName
+     * @throws MrSIDException
+     * @throws IOException
+     */
+    private void init(String fName) throws MrSIDException, IOException {
+        this.initialize();
+        
+        String ext = fName.toLowerCase().substring(fName.lastIndexOf('.') + 1);
+
+        fileName = fName;
+        width = this.getWidth();
+        height = this.getHeight();
+        eSampleType = this.getDataType();
+        nbands = this.getNumBands();
+        eColorSpace = this.getColorSpace();
+        noverviews = this.getNumLevels();
+
+        metadata = this.getMetadata();
+
+        double ox = 0D;
+        double oy = 0D;
+        double resx = 0D;
+        double resy = 0D;
+
+        LTIGeoCoord geoc = this.getGeoCoord();
+
+        ox = geoc.getX();
+        oy = geoc.getY();
+        resx = geoc.getXRes();
+        resy = geoc.getYRes();
+
+        esq.add(new Point2D.Double(ox, oy));
+        esq.add(new Point2D.Double(ox + (resx * width), oy));
+        esq.add(new Point2D.Double(ox, oy + (resy * height)));
+        esq.add(new Point2D.Double(ox + (resx * width), oy + (resy * height)));
+
+        blocksize = this.getStripHeight();
+    }
+
+    /**
+     * Asigna el valor de Alpha
+     * @param a        alpha
+     */
+    public void setAlpha(int a) {
+        alpha = a;
+    }
+
+    /**
+     * Asigna el tipo de datos
+     * @param dt        tipo de datos
+     */
+    public void setDataType(int dt) {
+        dataType = dt;
+    }
+
+    /**
+     * Obtiene un punto 2D con las coordenadas del raster a partir de uno en coordenadas
+     * del punto real.
+     * @param pt        punto en coordenadas del punto real
+     * @return        punto en coordenadas del raster
+     */
+    public Point2D worldToRaster(Point2D pt) {
+        double x = (((double) currentFullWidth) / (esq.maxX - esq.minX)) * (pt.getX() - esq.minX);
+        double y = (((double) currentFullHeight) / (esq.maxY - esq.minY)) * (esq.maxY - pt.getY());
+        Point2D ptRes = new Point2D.Double(x, y);
+        return ptRes;
+    }
+
+    /**
+     * Calcula el overview a usar de la imagen y el viewport a partir del ancho, alto y
+     * coordenadas del mundo real
+     * @param dWorldTLX        Coordenada X superior izquierda
+     * @param dWorldTLY        Coordenada Y superior izquierda
+     * @param dWorldBRX        Coordenada X inferior derecha
+     * @param dWorldBRY        Coordenada Y inferior derecha
+     * @param nWidth        ancho
+     * @param nHeight        alto
+     */
+    public void setView(double dWorldTLX, double dWorldTLY, double dWorldBRX,
+                        double dWorldBRY, int nWidth, int nHeight) {
+    	currentImageView[0] = dWorldTLX;
+    	currentImageView[1] = dWorldTLY;
+    	currentImageView[2] = dWorldBRX;
+    	currentImageView[3] = dWorldBRY;
+    	
+        //Ancho y alto de la imágen en pixeles (pixeles de la overview)
+        currentFullWidth = width;
+        currentFullHeight = height;
+
+        //Ventana de la imagen. (en tamaño completo)
+        //tl->esq sup izda en pixeles
+        //br->esq inf der en pixeles
+        Point2D tl = worldToRaster(new Point2D.Double(dWorldTLX, dWorldTLY));
+        Point2D br = worldToRaster(new Point2D.Double(dWorldBRX, dWorldBRY));
+
+        //Ancho y alto de la imágen (pixeles en pantalla)
+        currentViewWidth = nWidth;
+        currentViewHeight = nHeight;
+
+        //Posición de la esquina superior izquierda en coordenadas pixel
+        currentViewX = tl.getX();
+        currentViewY = tl.getY();
+
+        //Escala de la vista en X e Y
+        viewportScaleX = (double) currentViewWidth / (br.getX() - tl.getX());
+        viewportScaleY = (double) currentViewHeight / (br.getY() - tl.getY());
+       
+        try {
+            // calcula el overview a usar
+            int[] dims = null;
+            double zoom = 1.0;
+            zoomoverview = 1.0;
+            currentOverview = -1;
+
+            if (WITH_OVERVIEWS && ((noverviews - 1) > 0)) {
+                for (int i = (noverviews - 1); i > 0; i--) {
+                    zoom = LTIUtils.levelToMag(i);
+                    dims = this.getDimsAtMag(zoom);
+
+                    if (dims[0] > (this.getWidth() * viewportScaleX)) {
+                        currentOverview = i;
+                        zoomoverview = zoom;
+                        viewportScaleX /= zoomoverview;
+                        viewportScaleY /= zoomoverview;
+                        currentFullWidth = dims[0];
+                        currentFullHeight = dims[1];
+                        tl = worldToRaster(new Point2D.Double(dWorldTLX, dWorldTLY));
+                        currentViewX = tl.getX();
+                        currentViewY = tl.getY();
+
+                        break;
+                    }
+                }
+            }
+
+            setDataType(eSampleType);
+        } catch (MrSIDException e) {
+            e.printStackTrace();
+        }
+    }
+	
+    /**
+     * Muestra alguna información para la depuración
+     */
+    void pintaInfo() {
+        try {
+            System.out.println("GeoTransform:");
+
+            LTIGeoCoord geoc = this.getGeoCoord();
+
+            System.out.println("  param[0]=" + geoc.getX());
+            System.out.println("  param[0]=" + geoc.getY());
+            System.out.println("  param[0]=" + geoc.getXRes());
+            System.out.println("  param[0]=" + geoc.getYRes());
+            System.out.println("  param[0]=" + geoc.getXRot());
+            System.out.println("  param[0]=" + geoc.getYRot());
+            System.out.println("Metadata:");
+
+            LTIMetadataDatabase metadata = this.getMetadata();
+
+            for (int i = 0; i < metadata.getIndexCount(); i++) {
+                LTIMetadataRecord rec = null;
+                rec = metadata.getDataByIndex(i);
+                System.out.println(rec.getTagName());
+
+                if (rec.isScalar()) {
+                    System.out.println(rec.getScalarData());
+                } else if (rec.isVector()) {
+                    String[] s = rec.getVectorData();
+
+                    for (int j = 0; j < s.length; j++)
+                        System.out.println("V" + j + "->" + s[j]);
+                } else if (rec.isArray()) {
+                    String[] s = rec.getArrayData();
+
+                    for (int j = 0; j < s.length; j++)
+                        System.out.println("A" + j + "->" + s[j]);
+                } else {
+                    System.out.println("");
+                }
+            }
+        } catch (MrSIDException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    void pintaPaleta() {
+    }
+
+    public LTISceneBuffer readBuffer(int x, int y, int SceneWidth, int SceneHeight)throws MrSIDException{
+    	LTISceneBuffer buffer = null;
+    	LTIScene scene = new LTIScene(x, y, SceneWidth, SceneHeight, zoomoverview);
+    	buffer = new LTISceneBuffer(pixel, SceneWidth, SceneHeight, true);
+    	((LTIImageStage) this).read(scene, buffer);
+    	return buffer;
+    }
+    
+    /**
+	 * Esta función calcula los arrays de steps en X e Y para que cuando hay supersampleo 
+	 * se aplique el filtro solo a la esquina superior izquierda de cada pixel. 
+	 */
+	private void calcArraySteps(int w, int h, double stepX, double stepY, double offsetX, double offsetY){
+		if(stepX < 1 && stepY < 1){
+			isSupersampling = true;
+			this.stepArrayX = new int[w];
+			for (double j = offsetX; j < w; j += stepX) 
+					stepArrayX[(int)(j)] ++;
+							
+			this.stepArrayY = new int[h];
+			for (double j =  offsetY; j < h; j += stepY) 
+				stepArrayY[(int)(j)] ++;
+		}else{
+			isSupersampling = false;
+			this.stepArrayX = this.stepArrayY = null;
+		}
+	}
+	
+    /**
+     * Lee la escena de la imagen correspondiente a la vista seleccionada con
+     * currentView a través de la libreria de MrSid. Esta escena es cargada sobre
+     * un buffer y asignada al parámetro de salida.
+     * @param line        Escena leida
+     * @throws MrSIDException Lanzada si ocurre un error en la lectura de la escena
+     */
+    public void readScene(int[] line) throws MrSIDException {
+    	//Posición de inicio de la escena en entero para la petición a la libreria
+        int x = (int) Math.floor(currentViewX);
+        int y = (int) Math.floor(currentViewY);
+        //Ancho y alto de la escena en pixeles
+        int SceneWidth = 0;
+        int SceneHeight = 0;
+
+        try {
+			SceneWidth = (int) Math.ceil((((double) currentViewWidth) / viewportScaleX) + 1);
+			if (SceneWidth > currentFullWidth)
+				SceneWidth = currentFullWidth;
+			SceneHeight = (int) Math.ceil((((double) currentViewHeight) / viewportScaleY) + 1);
+		    if (SceneHeight > currentFullHeight)
+		       	SceneHeight = currentFullHeight;
+          
+            if (SceneWidth == 0) 
+                SceneWidth = 1;
+           
+            if (SceneHeight == 0)
+                SceneHeight = 1;
+            
+            if (pixel == null)
+                pixel = new LTIPixel(eColorSpace, nbands, eSampleType);
+            
+            LTISceneBuffer buffer = null;
+            
+            boolean  sizeOk = false;
+			while (!sizeOk){
+				sizeOk = true;
+	            try {
+	            	buffer = readBuffer(x, y, SceneWidth, SceneHeight);
+	            } catch (MrSIDException ex) {
+	            	SceneWidth-- ;
+	            	try{
+	            		buffer = readBuffer(x, y, SceneWidth, SceneHeight);
+	            	} catch (MrSIDException ex1) {
+	            		SceneWidth++;
+	            		SceneHeight--;
+	                	try{
+	                		buffer = readBuffer(x, y, SceneWidth, SceneHeight);
+	                	} catch (MrSIDException ex2) {
+	                		SceneWidth-- ;
+	                    	try{
+	                    		buffer = readBuffer(x, y, SceneWidth, SceneHeight);
+	                    	} catch (MrSIDException ex3) {
+	                    		sizeOk = false;
+	                    	}
+	                	}
+	            	}
+	            }
+			}
+            
+            			
+            if ((dataType == LTIDataType.LTI_DATATYPE_UINT8) ||
+                    (dataType == LTIDataType.LTI_DATATYPE_SINT8) ||
+                    (dataType == LTIDataType.LTI_DATATYPE_SINT16) ||
+                    (dataType == LTIDataType.LTI_DATATYPE_SINT32) ||
+                    (dataType == LTIDataType.LTI_DATATYPE_UINT16) ||
+                    (dataType == LTIDataType.LTI_DATATYPE_UINT32)) {
+                int kd;
+                int k;
+                double scaleX = 1 / viewportScaleX;
+                double scaleY = 1 / viewportScaleY;
+                                
+                int alpha = (this.alpha & 0xff) << 24;
+                             
+                if (rBandNr == 1) {
+                    bandR = buffer.buf1;
+                } else if (rBandNr == 2) {
+                    bandR = buffer.buf2;
+                } else if (rBandNr == 3) {
+                    bandR = buffer.buf3;
+                }
+
+                if (gBandNr == 1) {
+                    bandG = buffer.buf1;
+                } else if (gBandNr == 2) {
+                    bandG = buffer.buf2;
+                } else if (gBandNr == 3) {
+                    bandG = buffer.buf3;
+                }
+
+                if (bBandNr == 1) {
+                    bandB = buffer.buf1;
+                } else if (bBandNr == 2) {
+                    bandB = buffer.buf2;
+                } else if (bBandNr == 3) {
+                    bandB = buffer.buf3;
+                }
+                
+                //Desplazamiento para la X y la Y leidas. Estas tienen efecto cuando un pixel no empieza a visualizarse
+                //justo en su esquina superior izquierda y tiene que ser cortado en la visualización.
+                double offsetX = Math.abs(currentViewX - ((int)currentViewX));
+                double offsetY = Math.abs(currentViewY - ((int)currentViewY));
+                
+                calcArraySteps(SceneWidth, SceneHeight, scaleX, scaleY, offsetX, offsetY);
+                
+                for (int y1 = 0; y1 < currentViewHeight; y1++){
+                   for (int x1 = 0; x1 < currentViewWidth; x1++){
+                      kd = (y1 * currentViewWidth) + x1;
+                      k = (((int) ((y1 * scaleY) + offsetY)) * SceneWidth) + (int) ((x1 * scaleX) + offsetX);
+                      try {
+                            line[kd] = alpha + ((0xff & bandR[k]) << 16) + ((0xff & bandG[k]) << 8) + (0xff & bandB[k]);
+                      } catch (java.lang.ArrayIndexOutOfBoundsException e) {
+                      }
+                   }
+                }
+            }
+            
+            buffer = null;
+        } catch (MrSIDException e) {
+            e.printStackTrace();
+        }
+    }
+    
+	/**
+	 * Lee una ventana de datos sin resampleo a partir de coordenadas en pixeles.
+	 * @param buf Buffer donde se almacenan los datos
+	 * @param bandList Lista de bandas que queremos leer y sobre que bandas del buffer de destino queremos escribirlas
+	 * @param x Posición X en pixeles
+	 * @param y Posición Y en pixeles
+	 * @param w Ancho en pixeles
+	 * @param h Alto en pixeles
+	 * @throws GdalException
+	 */
+	public void readWindow(RasterBuf buf, BandList bandList, int x, int y, int w, int h) throws MrSIDException  {
+		isSupersampling = false;
+		if (pixel == null) {
+            pixel = new LTIPixel(eColorSpace, nbands, eSampleType);
+        }
+		
+        LTIScene scene = new LTIScene(x, y, w, h, 1.0);
+        LTISceneBuffer buffer = new LTISceneBuffer(pixel, w, h, true);
+        ((LTIImageStage) this).read(scene, buffer);
+        
+        int yMax = y + h;
+        byte[] bandBuf = null;
+        for(int iBand = 0; iBand < getNumBands(); iBand++){
+        	int[] drawableBands = bandList.getBufferBandToDraw(fileName, iBand);
+        	if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1))
+				continue;
+        	switch(iBand) {
+        	case 0:  bandBuf = buffer.buf1; break;
+        	case 1:  bandBuf = buffer.buf2; break;
+        	case 2:  bandBuf = buffer.buf3; break;
+            }
+        	for (int line = 0; line < h; line++){
+                for (int col = 0; col < w; col++){
+                   int kd = (line * w) + col;
+                   buf.setElemByte(line, col, iBand, bandBuf[kd]);
+                }
+            }
+        }
+	}
+	
+    /**
+     * Lee una ventana de la imagen y devuelve un buffer de bytes
+     * @param ulX        Coordenada X de la esquina superior izquierda
+     * @param ulY        Coordenada Y de la esquina superior izquierda
+     * @param sizeX        Tamaño X de la imagen
+     * @param sizeY        Tamaño Y de la image
+     * @param band        Número de bandas
+     * @return        buffer con la ventana leida
+     * @throws MrSIDException
+     */
+    public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band)
+                     throws MrSIDException {
+        if (pixel == null) {
+            pixel = new LTIPixel(eColorSpace, nbands, eSampleType);
+        }
+
+        LTIScene scene = new LTIScene(ulX, ulY, sizeX, sizeY, 1.0);
+        LTISceneBuffer buffer = new LTISceneBuffer(pixel, sizeX, sizeY, true);
+        ((LTIImageStage) this).read(scene, buffer);
+
+        if (band == 1) {
+            return buffer.buf1;
+        } else if (band == 2) {
+            return buffer.buf2;
+        } else if (band == 3) {
+            return buffer.buf3;
+        }
+
+        return null;
+    }
+
+    // Polilinea con extent
+    class Contour extends Vector {
+        final private static long serialVersionUID = -3370601314380922368L;
+        public double minX = Double.MAX_VALUE;
+        public double minY = Double.MAX_VALUE;
+        public double maxX = -Double.MAX_VALUE;
+        public double maxY = -Double.MAX_VALUE;
+
+        public Contour() {
+            super();
+        }
+
+        public void add(Point2D pt) {
+            super.add(pt);
+
+            if (pt.getX() > maxX) {
+                maxX = pt.getX();
+            }
+
+            if (pt.getX() < minX) {
+                minX = pt.getX();
+            }
+
+            if (pt.getY() > maxY) {
+                maxY = pt.getY();
+            }
+
+            if (pt.getY() < minY) {
+                minY = pt.getY();
+            }
+        }
+    }
+}
+
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ * Clase encargada del acceso a los datos y repintado de imagenes MrSID. Estos
+ * son registrados con la extensión sid
+ */
+public class MrSidFile extends GeoRasterFile {
+    public final static int BAND_HEIGHT = 64;
+
+    protected MrSidNative file = null;
+    private Extent v = null;
+
+    /**
+     * Contructor. Abre el fichero mrsid
+     * @param proj        Proyección
+     * @param fName        Nombre del fichero mrsid
+     */
+    public MrSidFile(IProjection proj, String fName) {
+        super(proj, fName);
+        
+        extent = new Extent();
+
+        try {
+            file = new MrSidNative(fName);
+            load();
+            bandCount = file.nbands;
+
+            if (bandCount > 2) {
+                setBand(RED_BAND, 0);
+                setBand(GREEN_BAND, 1);
+                setBand(BLUE_BAND, 2);
+            } else {
+                setBand(RED_BAND | GREEN_BAND | BLUE_BAND, 0);
+            }
+        } catch (Exception e) {
+            System.out.println("Error en constructor de MrSID");
+            e.printStackTrace();
+            file = null;
+        }
+    }
+
+	/**
+	 * Obtenemos o calculamos el extent de la imagen.
+	 */
+    public GeoFile load() {
+    	
+   		extent = new Extent(file.esq.minX, file.esq.minY, file.esq.maxX, file.esq.maxY);
+   		requestExtent = extent;
+    	
+    	/*if((this.assignedExtent == GeoRasterFile.IMAGE_EXTENT || this.assignedExtent == GeoRasterFile.ORDER ) 
+    		&& file !=null	&& file.esq != null){
+    		extent = new Extent(file.esq.minX, file.esq.minY, file.esq.maxX, file.esq.maxY);
+    		return this;
+    	}
+    	
+    	if((this.assignedExtent == GeoRasterFile.ASSIGNED_EXTENT || this.assignedExtent == GeoRasterFile.ORDER ) 
+    		&& this.getTempExtent() != null){
+        
+        	extent = this.getTempExtent();
+			file.esq = file.new Contour();
+  			file.esq.add(new Point2D.Double(extent.minX(), extent.minY()));
+  			file.esq.add(new Point2D.Double(extent.minX()+(extent.maxX() - extent.minX()), extent.minY()));
+  			file.esq.add(new Point2D.Double(extent.minX(), extent.minY()+(extent.maxY() - extent.minY())));
+  			file.esq.add(new Point2D.Double(extent.minX()+(extent.maxX() - extent.minX()), extent.minY()+(extent.maxY() - extent.minY())));
+        }*/ 
+        
+        return this;
+    }
+
+    /**
+     * Libera el objeto que ha abierto el fichero
+     */
+    public void close() {
+    	if(file != null){
+    		file.close();
+    		file = null;
+    	}
+    }
+
+    /**
+     * Asigna una banda R, G o B
+     */
+    public void setBand(int flag, int bandNr) {
+        super.setBand(flag, bandNr);
+
+        if ((flag & GeoRasterFile.RED_BAND) == GeoRasterFile.RED_BAND) {
+            file.rBandNr = bandNr + 1;
+        }
+
+        if ((flag & GeoRasterFile.GREEN_BAND) == GeoRasterFile.GREEN_BAND) {
+            file.gBandNr = bandNr + 1;
+        }
+
+        if ((flag & GeoRasterFile.BLUE_BAND) == GeoRasterFile.BLUE_BAND) {
+            file.bBandNr = bandNr + 1;
+        }
+    }
+
+    /**
+     * Asigna el extent de la vista
+     */
+    public void setView(Extent e) {
+        v = new Extent(e);
+    }
+
+    /**
+     * Obtiene el Extent de la vista
+     */
+    public Extent getView() {
+        return v;
+    }
+
+    /**
+     * Obtiene el ancho de la imagen
+     */
+    public int getWidth() {
+        return file.width;
+    }
+
+    /**
+     * Obtiene el alto de la imagen
+     */
+    public int getHeight() {
+        return file.height;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO Auto-generated method stub	
+    }
+
+    /**
+     * Actualiza la imagen. Se encarga de llamar a la función que calcula la vista
+     * y luego a la que lee la escena sobre un buffer. Vuelca la información obtenida
+     * sobre el Image que la visualiza.
+     */
+    public Image updateImage(int width, int height, ICoordTrans rp) {
+        int line;
+        int[] pRGBArray = null;
+        Image image = null;
+        
+        if(mustVerifySize()){
+	        // Work out the correct aspect for the setView call.
+	        double dFileAspect = (double) v.width() / (double) v.height();
+	        double dWindowAspect = (double) width / (double) height;
+	
+	        if (dFileAspect > dWindowAspect) {
+	            height = (int) ((double) width / dFileAspect);
+	        } else {
+	            width = (int) ((double) height * dFileAspect);
+	        }
+        }
+        
+        // Set the view
+        file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(), width, height);
+		setStep(file.stepArrayX, file.stepArrayY);
+
+        //Impedimos que los valores de ancho y alto de la imágen sean menores que 1
+        if (width <= 0) {
+            width = 1;
+        }
+
+        if (height <= 0) {
+            height = 1;
+        }
+
+        image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+        pRGBArray = new int[width * height];
+
+        try {
+            file.setAlpha(getAlpha());
+            
+            setBand(RED_BAND, rBandNr);
+            setBand(GREEN_BAND, gBandNr);
+            setBand(BLUE_BAND, bBandNr);
+                     
+
+            file.readScene(pRGBArray);
+            setStep(file.stepArrayX, file.stepArrayY);
+            ((BufferedImage) image).setRGB(0, 0, width, height, pRGBArray, 0,
+                                           width);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return image;
+    }
+
+    /**
+     * Muestra información del fichero abierto.
+     *
+     */
+    private void showOnOpen() {
+        // Report en la apertura (quitar)
+        System.out.println("Fichero MrSID '" + getName() + "' abierto.");
+        System.out.println("Version = " + file.version);
+        System.out.println("   Size = (" + file.width + "," + file.height +
+                           ")");
+        System.out.println("   NumBands = (" + file.nbands + ")");
+
+        //file.pintaInfo();
+        file.pintaPaleta();
+    }
+
+    /**
+     * Asigna al objeto Image los valores con los dato de la imagen contenidos en el
+     * vector de enteros.
+     * @param image        imagen con los datos actuales
+     * @param startX        inicio de la posición en X dentro de la imagen
+     * @param startY        inicio de la posición en X dentro de la imagen
+     * @param w        Ancho de la imagen
+     * @param h        Alto de la imagen
+     * @param rgbArray        vector que contiene la banda que se va a sustituir
+     * @param offset        desplazamiento
+     * @param scansize        tamaño de imagen recorrida por cada p
+     */
+    protected void setRGBLine(BufferedImage image, int startX, int startY,
+                              int w, int h, int[] rgbArray, int offset,
+                              int scansize) {
+        image.setRGB(startX, startY, w, h, rgbArray, offset, scansize);
+    }
+
+    /**
+     * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores
+     * con los datos de la imagen contenidos en el vector de enteros. De los valores RGB
+     * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
+     * banda correspondiente a flags es sustituida por los datos del vector.
+     * @param image        imagen con los datos actuales
+     * @param startX        inicio de la posición en X dentro de la imagen
+     * @param startY        inicio de la posición en X dentro de la imagen
+     * @param w        Ancho de la imagen
+     * @param h        Alto de la imagen
+     * @param rgbArray        vector que contiene la banda que se va a sustituir
+     * @param offset        desplazamiento
+     * @param scansize        tamaño de imagen recorrida por cada paso
+     * @param flags        banda que se va a sustituir (Ctes de GeoRasterFile)
+     */
+    protected void setRGBLine(BufferedImage image, int startX, int startY,
+                              int w, int h, int[] rgbArray, int offset,
+                              int scansize, int flags) {
+        int[] line = new int[rgbArray.length];
+        image.getRGB(startX, startY, w, h, line, offset, scansize);
+
+        if (flags == GeoRasterFile.RED_BAND) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
+        } else if (flags == GeoRasterFile.GREEN_BAND) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
+        } else if (flags == GeoRasterFile.BLUE_BAND) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
+        }
+
+        image.setRGB(startX, startY, w, h, line, offset, scansize);
+    }
+
+    /**
+     * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores
+     * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
+     * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
+     * banda correspondiente a flags es sustituida por los datos del vector.
+     * @param image        imagen con los datos actuales
+     * @param startX        inicio de la posición en X dentro de la imagen
+     * @param startY        inicio de la posición en X dentro de la imagen
+     * @param w        Ancho de la imagen
+     * @param h        Alto de la imagen
+     * @param rgbArray        vector que contiene la banda que se va a sustituir
+     * @param offset        desplazamiento
+     * @param scansize        tamaño de imagen recorrida por cada paso
+     * @param origBand        Banda origen del GeoRasterFile
+     * @param destBandFlag        banda que se va a sustituir (Ctes de GeoRasterFile)
+     */
+    protected void setRGBLine(BufferedImage image, int startX, int startY,
+                              int w, int h, int[] rgbArray, int offset,
+                              int scansize, int origBand, int destBandFlag) {
+        int[] line = new int[rgbArray.length];
+        image.getRGB(startX, startY, w, h, line, offset, scansize);
+
+        if ((origBand == 0) && (destBandFlag == GeoRasterFile.RED_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
+        } else if ((origBand == 1) &&
+                       (destBandFlag == GeoRasterFile.GREEN_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
+        } else if ((origBand == 2) &&
+                       (destBandFlag == GeoRasterFile.BLUE_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
+        } else if ((origBand == 0) &&
+                       (destBandFlag == GeoRasterFile.GREEN_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffff00ff) |
+                          ((rgbArray[i] & 0x00ff0000) >> 8);
+        } else if ((origBand == 0) &&
+                       (destBandFlag == GeoRasterFile.BLUE_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffffff00) |
+                          ((rgbArray[i] & 0x00ff0000) >> 16);
+        } else if ((origBand == 1) && (destBandFlag == GeoRasterFile.RED_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xff00ffff) |
+                          ((rgbArray[i] & 0x0000ff00) << 8);
+        } else if ((origBand == 1) &&
+                       (destBandFlag == GeoRasterFile.BLUE_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffffff00) |
+                          ((rgbArray[i] & 0x0000ff00) >> 8);
+        } else if ((origBand == 2) && (destBandFlag == GeoRasterFile.RED_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xff00ffff) |
+                          ((rgbArray[i] & 0x000000ff) << 16);
+        } else if ((origBand == 2) &&
+                       (destBandFlag == GeoRasterFile.GREEN_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffff00ff) |
+                          ((rgbArray[i] & 0x000000ff) << 8);
+        }
+
+        image.setRGB(startX, startY, w, h, line, offset, scansize);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans, java.awt.Image, int)
+     */
+    public Image updateImage(int width, int height, ICoordTrans rp, Image img,
+                             int origBand, int destBandFlag) throws SupersamplingNotSupportedException{
+        int line;
+        int[] pRGBArray = null;
+        Image mrSidImage = null;
+
+        if(mustVerifySize()){
+	        // Work out the correct aspect for the setView call.
+	        double dFileAspect = (double) v.width() / (double) v.height();
+	        double dWindowAspect = (double) width / (double) height;
+	
+	        if (dFileAspect > dWindowAspect) {
+	            height = (int) ((double) width / dFileAspect);
+	        } else {
+	            width = (int) ((double) height * dFileAspect);
+	        }
+        }
+        // Set the view
+        file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(), width, height);
+
+        //Impedimos que los valores de ancho y alto de la imágen sean menores que 1
+        if (width <= 0) {
+            width = 1;
+        }
+
+        if (height <= 0) {
+            height = 1;
+        }
+
+        file.setAlpha(getAlpha());
+      
+        setBand(RED_BAND, rBandNr);
+        setBand(GREEN_BAND, gBandNr);
+        setBand(BLUE_BAND, bBandNr);
+       
+        pRGBArray = new int[width * height];
+
+        if (img == null) { //Caso en el que se crea una imagen
+            mrSidImage = new BufferedImage(width, height,
+                                           BufferedImage.TYPE_INT_ARGB);
+
+            try {
+                file.readScene(pRGBArray);
+                setStep(file.stepArrayX, file.stepArrayY);
+                setRGBLine((BufferedImage) mrSidImage, 0, 0, width, height, pRGBArray, 0, width);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            return mrSidImage;
+        } else { //Caso en el que se actualiza una banda del Image
+
+            try {
+                file.readScene(pRGBArray);
+                setStep(file.stepArrayX, file.stepArrayY);
+                setRGBLine((BufferedImage) img, 0, 0, width, height, pRGBArray, 0, width, origBand, destBandFlag);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            return img;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoRasterFile#getData(int, int, int)
+     */
+    public Object getData(int x, int y, int band) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param rasterBuf	Buffer de datos
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+    public RasterBuf getWindowRaster(double x, double y, double w, double h, BandList bandList, RasterBuf rasterBuf) {		
+		//Extent selectedExtent = new Extent(x, y, x + w, y - h);
+		//setView(selectedExtent);
+
+		int initX = (int)((x * file.width) / extent.width());
+		int initY = (int)((y * file.height) / extent.height());
+		int width = (int)((w * file.width) / extent.width());
+		int height = (int)((h * file.height) / extent.height());
+				
+		return getWindowRaster(initX, initY, width, height, bandList, rasterBuf);
+	}
+	
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas pixel. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param rasterBuf	Buffer de datos
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	public RasterBuf getWindowRaster(int x, int y, int w, int h, BandList bandList, RasterBuf rasterBuf) {
+		try {
+			rasterBuf = new RasterBuf(getDataType(), w, h, bandList.getDrawableBandsCount(), true);
+			file.readWindow(rasterBuf, bandList, x, y, w, h);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return rasterBuf;
+	}
+
+    /**
+     * Devuelve los datos de una ventana solicitada
+     * @param ulX        coordenada X superior izda.
+     * @param ulY        coordenada Y superior derecha.
+     * @param sizeX        tamaño en X de la ventana.
+     * @param sizeY tamaño en Y de la ventana.
+     * @param band        Banda solicitada.
+     */
+    public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band) {
+        try {
+            return file.getWindow(ulX, ulY, sizeX, sizeY, band);
+        } catch (MrSIDException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * Devuelve el tamaño de bloque
+     * @return Tamaño de bloque
+     */
+    public int getBlockSize() {
+        return file.blocksize;
+    }
+    
+    /**
+	 * Calcula la transformación que se produce sobre la vista cuando la imagen tiene un fichero .rmf
+	 * asociado. En Ecw el origen de coordenadas en Y es el valor máximo y decrece hasta el mínimo.
+	 * @param originX Origen de la imagen en la coordenada X
+	 * @param originY Origen de la imagen en la coordenada Y
+	 */
+    public void setExtentTransform(double originX, double originY, double psX, double psY) {
+		
+	}
+    
+    /**
+	 * Informa de si el driver ha supersampleado en el último dibujado. Es el driver el que colocará
+	 * el valor de esta variable cada vez que dibuja. 
+	 * @return true si se ha supersampleado y false si no se ha hecho.
+	 */
+	public boolean isSupersampling() {
+		return file.isSupersampling;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MrSidFile.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/EcwFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/EcwFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/EcwFile.java	(revision 10281)
@@ -0,0 +1,1209 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.image.BufferedImage;
+import java.awt.image.PixelGrabber;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.io.data.BandList;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.exceptions.SupersamplingNotSupportedException;
+import org.cresques.px.Extent;
+
+import com.ermapper.ecw.JNCSException;
+import com.ermapper.ecw.JNCSFile;
+import com.ermapper.ecw.JNCSFileNotOpenException;
+import com.ermapper.ecw.JNCSInvalidSetViewException;
+import com.ermapper.ecw.JNCSProgressiveUpdate;
+import com.ermapper.util.JNCSDatasetPoint;
+import com.ermapper.util.JNCSWorldPoint;
+
+
+/**
+ * Soporte para los ficheros .ecw de ErMapper.
+ * <br>
+ * NOTA: El SDK que ermapper ha puesto a disposición del público en java
+ * es una versión 2.45, de 19/11/2001. Está implementada usando JNI que
+ * se apoya en tres librerías dinámicas (dll), y presenta deficiencias
+ * muy graves a la hora de acceder a la información. Hasta el momento
+ * hemos detectado 3 de ellas:<BR>
+ *     1º.- No soporta ampliaciones superiores a 1:1. si se intenta acceder
+ * a un ecw con un zoom mayor da una excepción del tipo
+ * com.ermapper.ecw.JNCSInvalidSetViewException, que de no ser tenida encuenta
+ * acaba tirando abajo la máquina virtual de java.<BR>
+ *     2º.- La longitud máxima de línea que adminte el método readLineRGBA es
+ * de unos 2500 pixeles, lo que hace el uso para la impresión en formatos
+ * superiorea a A4 a 300 ppp o más inviable.<BR>
+ *     3º.- La actualización progresiva usando el interface JNCSProgressiveUpdate
+ * con el JNCSFile hace que el equipo genere un error severo y se apague. Este
+ * error imposibilita esta técnica de acceso a ECW.<BR>
+ * <br>
+ * Para saltarnos la limitación del bug#1 pedimos la ventana correspondiente al zoom 1:1 para
+ * el view que nos han puesto, y la resizeamos al tamaño que nos pide el usuario.<br>
+ * Como consecuencia del bug#2, para tamaños de ventana muy grandes (los necesarios
+ * para imprimir a más de A4 a 300DPI), hay que hacer varias llamadas al fichero con
+ * varios marcos contiguos, y los devolvemos 'pegados' en una sola imagen (esto se
+ * realiza de manera transparente para el usuario dentro de la llamada a updateImage.<br>
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class EcwFile extends GeoRasterFile implements JNCSProgressiveUpdate {
+    //Lleva la cuenta del número de actualizaciones que se hace de una imagen que corresponde con el 
+    //número de bandas que tiene. Esto es necesario ya que si una imagen tiene el mustResize a
+    //true solo debe llamar a la función resizeImage al actualizar la última banda, sino al hacer
+    //un zoom menor que 1:1 se veria mal
+    private static int nUpdate = 0;
+    private JNCSFile file = null;
+    private boolean bErrorOnOpen = false;
+    private String errorMessage = null;
+    private boolean multifile = false;
+    private Extent v = null;
+
+    // Ultimo porcentaje de refresco. Se carga en el update y se
+    // actualiza en el refreshUpdate
+    private int lastRefreshPercent = 0;
+
+    public EcwFile(IProjection proj, String fName) {
+        super(proj, null);
+        fName = DataSource.normalize(fName);
+        super.setName(fName);
+        extent = new Extent();
+
+        try {
+            //System.err.println("Abriendo "+fName);
+            file = new JNCSFile(fName, false);
+            load();
+            //readGeoInfo(fName);
+            bandCount = file.numBands;
+
+            if ( bandCount > 2) {
+                    setBand(RED_BAND,   0);
+                    setBand(GREEN_BAND, 1);
+                    setBand(BLUE_BAND,  2);
+            } else
+                    setBand(RED_BAND|GREEN_BAND|BLUE_BAND, 0);
+        } catch (Exception e) {
+            bErrorOnOpen = true;
+            errorMessage = e.getMessage();
+            System.err.println(errorMessage);
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Carga un ECW.
+     *
+     * @param fname
+     */
+    public GeoFile load() {
+        double minX;
+        double minY;
+        double maxX;
+        double maxY;
+
+        if(file.cellIncrementY > 0)
+        	file.cellIncrementY = -file.cellIncrementY;
+        
+        minX = file.originX;
+        maxY = file.originY;
+        maxX = file.originX +
+               ((double) (file.width - 1) * file.cellIncrementX);
+        minY = file.originY +
+               ((double) (file.height - 1) * file.cellIncrementY);
+        
+        extent = new Extent(minX, minY, maxX, maxY);
+        requestExtent = extent;
+        return this;
+    }
+
+    public void close() {
+    	if(file != null){
+    		file.close(true);
+    		file = null;
+    	}
+    }
+
+    /**
+     * Devuelve el ancho de la imagen
+     */
+    public int getWidth() {
+        return file.width;
+    }
+
+    /**
+     * Devuelve el alto de la imagen
+     */
+    public int getHeight() {
+        return file.height;
+    }
+
+    /**
+     *
+     */
+    public void setMultifile(boolean mult) {
+        this.multifile = mult;
+    }
+
+    public void setView(Extent e) {
+    	//Aplicamos la transformación a la vista en caso de que haya un fichero .rmf 
+    	/*    	         
+    	if(file.cellIncrementY > 0)
+        	file.cellIncrementY = -file.cellIncrementY;
+    	if(minX < file.originX)
+    		minX = file.originX;
+    	if(maxY > file.originY)
+    		maxY = file.originY;
+    	if(maxX > (file.originX + ((double) (file.width - 1) * file.cellIncrementX)))
+    		maxX = file.originX + ((double) (file.width - 1) * file.cellIncrementX);
+    	if(minY < file.originY + ((double) (file.height - 1) * file.cellIncrementY))
+    		minY = file.originY + ((double) (file.height - 1) * file.cellIncrementY);
+    	
+		Extent transformView = new Extent(	minX, minY, maxX, maxY );*/
+        v = new Extent(e);
+    }
+
+    public Extent getView() {
+        return v;
+    }
+    
+    private void setFileView(int numBands, int [] bandList, ChunkFrame f)
+    	throws JNCSFileNotOpenException, JNCSInvalidSetViewException {
+        file.setView(file.numBands, bandList, f.v.minX(), f.v.maxY(), f.v.maxX(), f.v.minY(), f.width, f.height);
+    }
+
+    /**
+     * Obtiene un trozo de imagen (determinado por la vista y los parámetros.
+     *
+     * @param width
+     * @param height
+     */
+    public synchronized Image updateImage(int width, int height, ICoordTrans rp) {
+        // TODO reproyectar para devolver el trozo de imagen pedida sobre ...
+        // la proyección de destino.
+        int line = 0;
+        boolean mustResize = false;
+        Dimension fullSize = null;
+        Image ecwImage = null;
+
+        if (file == null) {
+            return ecwImage;
+        }
+
+        try {
+            int[] bandlist;
+            int[] bandListTriband;
+            int[] pRGBArray = null;
+
+            if(mustVerifySize()){
+            // Work out the correct aspect for the setView call.
+	            double dFileAspect = (double) v.width() / (double) v.height();
+	            double dWindowAspect = (double) width / (double) height;
+	
+	            if (dFileAspect > dWindowAspect) {
+	                height = (int) ((double) width / dFileAspect);
+	            } else {
+	                width = (int) ((double) height * dFileAspect);
+	            }
+            }
+            fullSize = new Dimension(width, height);
+
+            //System.out.println("fullSize = ("+width+","+height+")");
+            // Peta en los pequeños ... arreglar antes de meter del todo
+            ChunkFrame[] frames = ChunkFrame.computeFrames(file, v, fullSize, extent);
+
+            if (frames.length == 1) {
+                width = frames[0].width;
+                height = frames[0].height;
+
+                if (width <= 0) {
+                    width = 1;
+                }
+
+                if (height <= 0) {
+                    height = 1;
+                }
+            }
+
+            /*                        JNCSDatasetPoint ptMin = file.convertWorldToDataset(v.minX(), v.minY());
+                                    JNCSDatasetPoint ptMax = file.convertWorldToDataset(v.maxX(), v.maxY());
+                                    System.out.println("Dataset coords Width = "+(ptMax.x-ptMin.x)+", px width ="+width);
+                                    // BEGIN Cambiando para soportar e < 1:1
+                                    // TODO Mejorarlo para que los PAN con un zoom muy grande sean correctos
+                                    if ((ptMax.x-ptMin.x)<width) {
+                                            width = ptMax.x-ptMin.x;
+                                            height = ptMin.y-ptMax.y;
+                                            System.out.println("Size=("+width+","+height+")");
+                                            mustResize = true;
+                                    }*/
+
+            // Create an image of the ecw file.
+            if (doTransparency) {
+                ecwImage = new BufferedImage(width, height,
+                                             BufferedImage.TYPE_INT_ARGB);
+            } else {
+                ecwImage = new BufferedImage(width, height,
+                                             BufferedImage.TYPE_INT_RGB);
+            }
+
+            pRGBArray = new int[width];
+
+            // Setup the view parameters for the ecw file.
+            bandlist = new int[bandCount];
+            bandListTriband = new int[bandCount];
+
+            if (bandCount > 2) {
+                bandlist[0] = getBand(RED_BAND);
+                bandlist[1] = getBand(GREEN_BAND);
+                bandlist[2] = getBand(BLUE_BAND);
+
+                if (bandCount > 3) {
+                    for (int i = 3; i < bandCount; i++) {
+                        bandlist[i] = 0;
+                    }
+                }
+            } else {
+                for (int i = 0; i < bandCount; i++) {
+                    bandlist[i] = i;
+                }
+            }
+
+            if (bandCount == 3) {
+                bandListTriband[0] = 0;
+                bandListTriband[1] = 1;
+                bandListTriband[2] = 2;
+            }
+
+            for (int nChunk = 0; nChunk < frames.length; nChunk++) {
+                ChunkFrame f = frames[nChunk];
+
+                // Set the view			
+                if (bandCount != 3) {
+                    setFileView(file.numBands, bandlist, f);
+                } else {
+                    setFileView(file.numBands, bandListTriband, f);
+                }
+
+                /* 
+                 * Esta peli es porque el Ecw no intercambia las bandas con lo que me toca hacerlo
+                 * a mano. Primero detectamos si se ha alterado el orden de las mismas. Si es así
+                 * calculamos mascaras y desplazamientos y hacemos una copia en pRGBArrayCopy
+                 * con las bandas alteradas de orden
+                 */
+                int[] pRGBArrayCopy = null;
+                int[] mascara = new int[3];
+                int[] shl = new int[3];
+                int[] shr = new int[3];
+                boolean order = true;
+
+                if (bandCount == 3) {
+                    for (int i = 0; i < bandCount; i++)
+                        if (bandlist[i] != i) {
+                            order = false;
+                        }
+
+                    if (!order) {
+                        for (int i = 0; i < bandCount; i++) {
+                            switch (bandlist[i]) {
+                            case 0:
+                                mascara[i] = 0x00ff0000;
+                                break;
+                            case 1:
+                                mascara[i] = 0x0000ff00;
+                                break;
+                            case 2:
+                                mascara[i] = 0x000000ff;
+                                break;
+                            }
+                            if ((i == 1) && (bandlist[i] == 0)) 
+                                shr[i] = 8;
+                            if ((i == 2) && (bandlist[i] == 0)) 
+                                shr[i] = 16;
+                            if ((i == 0) && (bandlist[i] == 1)) 
+                                shl[i] = 8;
+                            if ((i == 2) && (bandlist[i] == 1))
+                                shr[i] = 8;
+                            if ((i == 0) && (bandlist[i] == 2)) 
+                                shl[i] = 16;
+                            if ((i == 1) && (bandlist[i] == 2))
+                                shl[i] = 8;
+                        }
+                    }
+                }
+
+                // Read the scan lines
+                for (line = 0; line < f.height; line++) {
+                    file.readLineRGBA(pRGBArray);
+
+                    if ((bandCount == 3) && !order) {
+                        pRGBArrayCopy = new int[pRGBArray.length];
+
+                        for (int i = 0; i < pRGBArray.length; i++) {
+                            pRGBArrayCopy[i] = (pRGBArray[i] & 0xff000000) +
+                                               (((pRGBArray[i] & mascara[2]) << shl[2]) >> shr[2]) +
+                                               (((pRGBArray[i] & mascara[1]) << shl[1]) >> shr[1]) +
+                                               (((pRGBArray[i] & mascara[0]) << shl[0]) >> shr[0]);
+                        }
+
+                        pRGBArray = pRGBArrayCopy;
+                    }
+
+                    // Prueba de sustitución de color transparente
+                    if (doTransparency) {
+                        if (line == 0) {
+                            tFilter.debug = true;
+                        }
+
+                        tFilter.filterLine(pRGBArray);
+                        tFilter.debug = false;
+                    }
+
+                    ((BufferedImage) ecwImage).setRGB(f.pos.x, f.pos.y + line,
+                                                      f.width, 1, pRGBArray, 0,
+                                                      f.width);
+                }
+            }
+
+            if (frames[0].mustResize) {
+                //System.out.println("resize "+fullSize);
+                return resizeImage(fullSize, ecwImage);
+            }
+
+            /*
+             * La excepción atrapada es la de 'zoom > 1:1 no valido'
+            } catch (com.ermapper.ecw.JNCSInvalidSetViewException e) {
+                    System.err.println(errorMessage);
+                    e.printStackTrace(); */
+        } catch (com.ermapper.ecw.JNCSException e) { //java.lang.ArrayIndexOutOfBoundsException:
+            bErrorOnOpen = true;
+            System.err.println("EcwFile JNCS Error en la línea " + line + "/" +
+                               height);
+            System.err.println(e.getMessage());
+            e.printStackTrace();
+        } catch (java.lang.ArrayIndexOutOfBoundsException e) { //:
+            bErrorOnOpen = true;
+            System.err.println("EcwFile ArrayIndex Error en la línea " + line +
+                               "/" + height);
+            System.err.println(e.getMessage());
+            e.printStackTrace();
+        } catch (Exception e) {
+            bErrorOnOpen = true;
+            errorMessage = e.getMessage();
+
+            //			g.drawString(errorMessage, 0, 50);
+            System.err.println(errorMessage);
+            e.printStackTrace();
+        }
+
+        lastRefreshPercent = file.getPercentComplete();
+        System.out.println("Leido al " + lastRefreshPercent + " %.");
+
+        return ecwImage;
+    }
+
+    /**
+     * Redimensionado de imagen
+     * La función getScaledInstance nos devuelve un tipo image que no sirve por lo que
+     * habrá que crear  buffImg como BufferedImage y copiar los datos devueltos por esta
+     * función a este que es el que será devuelto por la función
+     * @param sz
+     * @param image        Image de entrada
+     * @return        Imagen reescalada
+     */
+    private Image resizeImage(Dimension sz, Image image) {
+        Image buffImg = null;
+        Image img = image.getScaledInstance((int) sz.getWidth(),
+                                            (int) sz.getHeight(),
+                                            Image.SCALE_SMOOTH);
+
+        //Todo este pollo es para copiar el tipo image devuelto a BufferedImage
+        buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null),
+                                    BufferedImage.TYPE_INT_ARGB);
+
+        int[] pixels = new int[img.getWidth(null) * img.getHeight(null)];
+        PixelGrabber pg = new PixelGrabber(img, 0, 0, img.getWidth(null),
+                                           img.getHeight(null), pixels, 0,
+                                           img.getWidth(null));
+
+        try {
+            pg.grabPixels();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+        for (int j = 0; j < buffImg.getHeight(null); j++) {
+            for (int i = 0; i < buffImg.getWidth(null); i++) {
+                ((BufferedImage) buffImg).setRGB(i, j,
+                                                 pixels[(j * buffImg.getWidth(null)) +
+                                                 i]);
+            }
+        }
+
+        return buffImg;
+    }
+
+    /**
+     * Reproyecta el raster.
+     */
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    /**
+     * Soporte para actualización de la imagen
+     * @see com.ermapper.ecw.JNCSProgressiveUpdate#refreshUpdate(int, int, double, double, double, double)
+     */
+    public void refreshUpdate(int nWidth, int nHeight, double dWorldTLX,
+                              double dWorldTLY, double dWorldBRX,
+                              double dWorldBRY) {
+        int completado = file.getPercentComplete();
+        System.out.println("EcwFile: se actualiza 1: " + completado +
+                           " % completado");
+
+        if ((updatable != null) && (lastRefreshPercent < 100)) {
+            if (((completado - lastRefreshPercent) > 25) ||
+                    (completado == 100)) {
+                lastRefreshPercent = file.getPercentComplete();
+                updatable.repaint();
+            }
+        }
+    }
+
+    public void refreshUpdate(int nWidth, int nHeight, int dDatasetTLX,
+                              int dDatasetTLY, int dDatasetBRX, int dDatasetBRY) {
+        System.out.println("EcwFile: se actualiza 2");
+    }
+
+    /**
+     *  Esta función es porque el Ecw no intercambia las bandas con lo que me toca hacerlo
+     * a mano. Primero detectamos si se ha alterado el orden de las mismas. Si es así
+     * calculamos mascaras y desplazamientos y hacemos una copia en pRGBArrayCopy
+     * con las bandas alteradas de orden
+     * @param bandList        lista de bandas
+     * @param mask mascara
+     * @param shl desplazamiento izquierda
+     * @param shr desplazamiento derecha
+     */
+    private boolean calcMaskAndShift(int[] bandList, int[] mask, int[] shl,
+                                     int[] shr) {
+        boolean order = true;
+
+        if (bandCount == 3) {
+            for (int i = 0; i < bandCount; i++)
+                if (bandList[i] != i) {
+                    order = false;
+                }
+
+            if (!order) {
+                for (int i = 0; i < bandCount; i++) {
+                    switch (bandList[i]) {
+                    case 0:
+                        mask[i] = 0x00ff0000;
+                        break;
+                    case 1:
+                        mask[i] = 0x0000ff00;
+                        break;
+                    case 2:
+                        mask[i] = 0x000000ff;
+                        break;
+                    }
+                    
+                    if ((i == 1) && (bandList[i] == 0))
+                        shr[i] = 8;
+                    if ((i == 2) && (bandList[i] == 0)) 
+                        shr[i] = 16;
+                    if ((i == 0) && (bandList[i] == 1))
+                        shl[i] = 8;
+                    if ((i == 2) && (bandList[i] == 1))
+                        shr[i] = 8;
+                    if ((i == 0) && (bandList[i] == 2))
+                        shl[i] = 16;
+                    if ((i == 1) && (bandList[i] == 2))
+                        shl[i] = 8;
+                }
+            }
+        }
+
+        return order;
+    }
+
+    /**
+     * Intercambio de bandas para ecw manual. Se le pasa el array de bytes que se desea intercambiar
+     * la mascara y desplazamientos previamente calculados con calcMaskAndShift
+     * @param order        true si el orden de las bandas no está alterado y false si lo está
+     * @param pRGBArray array de
+     * @param mascara
+     * @param shl desplazamiento a izquierda
+     * @param shr desplazamiento a derecha
+     * @return array con las bandas cambiadas
+     */
+    private int[] changeBands(boolean order, int[] pRGBArray, int[] mascara,
+                              int[] shl, int[] shr) {
+        if ((bandCount == 3) && !order) {
+            int[] pRGBArrayCopy = new int[pRGBArray.length];
+
+            for (int i = 0; i < pRGBArray.length; i++) {
+                pRGBArrayCopy[i] = (pRGBArray[i] & 0xff000000) +
+                                   (((pRGBArray[i] & mascara[2]) << shl[2]) >> shr[2]) +
+                                   (((pRGBArray[i] & mascara[1]) << shl[1]) >> shr[1]) +
+                                   (((pRGBArray[i] & mascara[0]) << shl[0]) >> shr[0]);
+            }
+
+            return pRGBArrayCopy;
+        }
+
+        return pRGBArray;
+    }
+
+    /**
+     * Asigna al objeto Image los valores con los dato de la imagen contenidos en el
+     * vector de enteros.
+     * @param image        imagen con los datos actuales
+     * @param startX        inicio de la posición en X dentro de la imagen
+     * @param startY        inicio de la posición en X dentro de la imagen
+     * @param w        Ancho de la imagen
+     * @param h        Alto de la imagen
+     * @param rgbArray        vector que contiene la banda que se va a sustituir
+     * @param offset        desplazamiento
+     * @param scansize        tamaño de imagen recorrida por cada p
+     */
+    protected void setRGBLine(BufferedImage image, int startX, int startY,
+                              int w, int h, int[] rgbArray, int offset,
+                              int scansize) {
+        image.setRGB(startX, startY, w, h, rgbArray, offset, scansize);
+    }
+
+    /**
+     * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores
+     * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
+     * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
+     * banda correspondiente a flags es sustituida por los datos del vector.
+     * @param image        imagen con los datos actuales
+     * @param startX        inicio de la posición en X dentro de la imagen
+     * @param startY        inicio de la posición en X dentro de la imagen
+     * @param w        Ancho de la imagen
+     * @param h        Alto de la imagen
+     * @param rgbArray        vector que contiene la banda que se va a sustituir
+     * @param offset        desplazamiento
+     * @param scansize        tamaño de imagen recorrida por cada paso
+     * @param flags        banda que se va a sustituir (Ctes de GeoRasterFile)
+     */
+    protected void setRGBLine(BufferedImage image, int startX, int startY,
+                              int w, int h, int[] rgbArray, int offset,
+                              int scansize, int flags) {
+        int[] line = new int[rgbArray.length];
+        image.getRGB(startX, startY, w, h, line, offset, scansize);
+
+        if (flags == GeoRasterFile.RED_BAND) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
+        } else if (flags == GeoRasterFile.GREEN_BAND) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
+        } else if (flags == GeoRasterFile.BLUE_BAND) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
+        }
+
+        image.setRGB(startX, startY, w, h, line, offset, scansize);
+    }
+
+    /**
+     * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores
+     * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
+     * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
+     * banda correspondiente a flags es sustituida por los datos del vector.
+     * @param image        imagen con los datos actuales
+     * @param startX        inicio de la posición en X dentro de la imagen
+     * @param startY        inicio de la posición en X dentro de la imagen
+     * @param w        Ancho de la imagen
+     * @param h        Alto de la imagen
+     * @param rgbArray        vector que contiene la banda que se va a sustituir
+     * @param offset        desplazamiento
+     * @param scansize        tamaño de imagen recorrida por cada paso
+     * @param origBand        Banda origen del GeoRasterFile
+     * @param destBandFlag        banda que se va a sustituir (Ctes de GeoRasterFile)
+     */
+    protected void setRGBLine(BufferedImage image, int startX, int startY,
+                              int w, int h, int[] rgbArray, int offset,
+                              int scansize, int origBand, int destBandFlag) {
+        int[] line = new int[rgbArray.length];
+        image.getRGB(startX, startY, w, h, line, offset, scansize);
+
+        if ((origBand == 0) && (destBandFlag == GeoRasterFile.RED_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xff00ffff) | (rgbArray[i] & 0x00ff0000);
+        } else if ((origBand == 1) &&
+                       (destBandFlag == GeoRasterFile.GREEN_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffff00ff) | (rgbArray[i] & 0x0000ff00);
+        } else if ((origBand == 2) &&
+                       (destBandFlag == GeoRasterFile.BLUE_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffffff00) | (rgbArray[i] & 0x000000ff);
+        }
+        else if ((origBand == 0) && (destBandFlag == GeoRasterFile.GREEN_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffff00ff) |
+                          ((rgbArray[i] & 0x00ff0000) >> 8);
+        } else if ((origBand == 0) &&
+                       (destBandFlag == GeoRasterFile.BLUE_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffffff00) |
+                          ((rgbArray[i] & 0x00ff0000) >> 16);
+        }
+        else if ((origBand == 1) && (destBandFlag == GeoRasterFile.RED_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xff00ffff) |
+                          ((rgbArray[i] & 0x0000ff00) << 8);
+        } else if ((origBand == 1) &&
+                       (destBandFlag == GeoRasterFile.BLUE_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffffff00) |
+                          ((rgbArray[i] & 0x0000ff00) >> 8);
+        }
+        else if ((origBand == 2) && (destBandFlag == GeoRasterFile.RED_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xff00ffff) |
+                          ((rgbArray[i] & 0x000000ff) << 16);
+        } else if ((origBand == 2) &&
+                       (destBandFlag == GeoRasterFile.GREEN_BAND)) {
+            for (int i = 0; i < line.length; i++)
+                line[i] = (line[i] & 0xffff00ff) |
+                          ((rgbArray[i] & 0x000000ff) << 8);
+        }
+
+        image.setRGB(startX, startY, w, h, line, offset, scansize);
+    }
+            
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans, java.awt.Image, int origBand, int destBand)
+     */
+    public Image updateImage(int width, int height, ICoordTrans rp, Image img,
+                             int origBand, int destBandFlag) throws SupersamplingNotSupportedException{
+        //TODO reproyectar para devolver el trozo de imagen pedida sobre ...
+        // la proyección de destino.
+        int line = 0;
+        boolean mustResize = false;
+        Dimension fullSize = null;
+        boolean trySupersampling = false;
+
+        if (file == null) {
+            return null;
+        }
+
+        try {
+            int[] bandlist;
+            int[] bandListTriband;
+            int[] pRGBArray = null;
+
+            if(mustVerifySize()){
+	            // Work out the correct aspect for the setView call.
+	            double dFileAspect = (double) v.width() / (double) v.height();
+	            double dWindowAspect = (double) width / (double) height;
+	
+	            if (dFileAspect > dWindowAspect) {
+	                height = (int) ((double) width / dFileAspect);
+	            } else {
+	                width = (int) ((double) height * dFileAspect);
+	            }
+            }
+
+            fullSize = new Dimension(width, height);
+			
+            ChunkFrame[] frames = ChunkFrame.computeFrames(file, v, fullSize, extent);
+            	
+            if (frames.length == 1) {
+                width = frames[0].width;
+                height = frames[0].height;
+
+                if (width <= 0)
+                    width = 1;
+             
+                if (height <= 0)
+                    height = 1;
+            }
+                        
+            // Create an image of the ecw file.
+            pRGBArray = new int[width];
+
+            // Setup the view parameters for the ecw file.
+            bandlist = new int[bandCount];
+            bandListTriband = new int[bandCount];
+
+            if (bandCount > 2) {
+                bandlist[0] = getBand(RED_BAND);
+                bandlist[1] = getBand(GREEN_BAND);
+                bandlist[2] = getBand(BLUE_BAND);
+
+                if (bandCount > 3) {
+                    for (int i = 3; i < bandCount; i++) {
+                        bandlist[i] = 0;
+                    }
+                }
+            } else {
+                for (int i = 0; i < bandCount; i++)
+                    bandlist[i] = i;
+            }
+
+            if (bandCount == 3) {
+                bandListTriband[0] = 0;
+                bandListTriband[1] = 1;
+                bandListTriband[2] = 2;
+            }
+
+            int[] mascara = new int[3];
+            int[] shl = new int[3];
+            int[] shr = new int[3];
+            boolean order = true;
+            
+			
+            if (img == null) { //Caso en el que se crea un Image
+                EcwFile.nUpdate = 1;
+
+                Image ecwImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+
+                for (int nChunk = 0; nChunk < frames.length; nChunk++) {
+                    ChunkFrame f = frames[nChunk];
+                    
+                    try{
+	                    if (bandCount != 3) {
+	                        setFileView(file.numBands, bandlist, f);
+	                    } else {
+	                        setFileView(file.numBands, bandListTriband, f);
+	                    }
+                    }catch(JNCSInvalidSetViewException exc){
+                    	trySupersampling = true;
+                    }
+
+                    order = calcMaskAndShift(bandlist, mascara, shl, shr);
+
+                    for (line = 0; line < f.height; line++) {
+                        file.readLineRGBA(pRGBArray);
+                        pRGBArray = changeBands(order, pRGBArray, mascara, shl, shr);
+                        setRGBLine((BufferedImage) ecwImage, f.pos.x, f.pos.y + line, f.width, 1, pRGBArray, 0, f.width);
+                    }
+                                        
+                } //Chuncks
+
+                applyAlpha(ecwImage);
+
+                if (frames[0].mustResize && !this.multifile)
+                    return resizeAndResampleImage(fullSize, ecwImage);
+                
+                lastRefreshPercent = file.getPercentComplete();
+
+                //System.out.println("Leido al "+lastRefreshPercent+" %.");
+                return ecwImage;
+            } else { //Caso en el que se actualiza una banda del Image
+                EcwFile.nUpdate++;
+
+                for (int nChunk = 0; nChunk < frames.length; nChunk++) {
+                    ChunkFrame f = frames[nChunk];
+
+                    if (bandCount != 3) {
+                        setFileView(file.numBands, bandlist, f);
+                    } else {
+                        setFileView(file.numBands, bandListTriband, f);
+                    }
+
+                    order = calcMaskAndShift(bandlist, mascara, shl, shr);
+                    
+                    for (line = 0; line < f.height; line++) {
+                        file.readLineRGBA(pRGBArray);
+                        pRGBArray = changeBands(order, pRGBArray, mascara, shl, shr);
+                        setRGBLine((BufferedImage) img, f.pos.x, f.pos.y + line, f.width, 1, pRGBArray, 0, f.width, origBand, destBandFlag);
+                    }
+                } //Chuncks
+
+                applyAlpha(img);
+
+                if (frames[0].mustResize && (nUpdate == 3) && this.multifile) {
+                    return resizeAndResampleImage(fullSize, img);
+                }else{
+                	isSupersampling = false;
+        			this.stepArrayX = this.stepArrayY = null;
+                }
+
+                lastRefreshPercent = file.getPercentComplete();
+
+                //System.out.println("Leido al "+lastRefreshPercent+" %.");
+                return img;
+            }
+        } catch (com.ermapper.ecw.JNCSException e) { //java.lang.ArrayIndexOutOfBoundsException:
+            bErrorOnOpen = true;
+            System.err.println("EcwFile JNCS Error en la línea " + line + "/" +
+                               height);
+            System.err.println(e.getMessage());
+        } catch (java.lang.ArrayIndexOutOfBoundsException e) { //:
+            bErrorOnOpen = true;
+            System.err.println("EcwFile ArrayIndex Error en la línea " + line +"/" + height);
+            System.err.println(e.getMessage());
+        } catch (Exception e) {
+            bErrorOnOpen = true;
+            errorMessage = e.getMessage();
+            System.err.println(errorMessage);
+            if(trySupersampling)
+            	throw new SupersamplingNotSupportedException();
+        }
+
+        return img;
+    }
+
+	/**
+	 * Esta función calcula los arrays de steps en X e Y para que cuando hay supersampleo 
+	 * se aplique el filtro solo a la esquina superior izquierda de cada pixel. 
+	 */
+    private void calcArraySteps(int width, int height, double stepX, double stepY, double offsetX, double offsetY){
+    	isSupersampling = true;
+    	int w = (int) (Math.ceil(((double)width) * stepX) + 1);
+    	this.stepArrayX = new int[w];
+    	for (double j =  Math.abs(offsetX); j < w; j += stepX) 
+    		stepArrayX[(int)(j)] ++;
+    	int h = (int) (Math.ceil(((double)height) * stepY) + 1);
+    	this.stepArrayY = new int[h];
+    	for (double j =  Math.abs(offsetY); j < h; j += stepY) 
+    		stepArrayY[(int)(j)] ++;
+	}
+
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param rasterBuf	Buffer de datos
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	public RasterBuf getWindowRaster(double x, double y, double w, double h, BandList bandList, RasterBuf rasterBuf) {		
+		Extent selectedExtent = new Extent(x, y, x + w, y - h);
+		setView(selectedExtent);
+		int wPx = rasterBuf.getWidth();
+		int hPx = rasterBuf.getHeight();
+		try{
+			int[] bl = new int[3];
+			bl[0] = 0;bl[1] = 1;bl[2] = 2;
+			file.setView(file.numBands, bl, selectedExtent.minX(), selectedExtent.maxY(), selectedExtent.maxX(), selectedExtent.minY(), wPx, hPx);			
+			int width = (int)((w * file.width) / extent.width());
+			int height = (int)((h * file.height) / extent.height());
+			rasterBuf = new RasterBuf(RasterBuf.TYPE_BYTE, wPx, hPx, bandList.getDrawableBandsCount(), true);
+			
+			int[] pRGBArray = new int[width];
+			for (int line = 0; line < rasterBuf.getHeight(); line++) {
+                file.readLineRGBA(pRGBArray);
+                for(int col = 0; col < pRGBArray.length; col ++){
+                	rasterBuf.setElemByte(line, col, 0, (byte)(pRGBArray[col] & 0x000000ff));
+                	rasterBuf.setElemByte(line, col, 1, (byte)((pRGBArray[col] & 0x0000ff00) >> 8));
+                	rasterBuf.setElemByte(line, col, 2, (byte)((pRGBArray[col] & 0x00ff0000) >> 16));
+                }
+            }
+		}catch(JNCSInvalidSetViewException exc){
+			exc.printStackTrace();
+		}catch (JNCSFileNotOpenException e) {
+			e.printStackTrace();
+		}catch (JNCSException ex) {
+			ex.printStackTrace();
+		}
+		
+		return rasterBuf;
+	}
+	
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas pixel. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param rasterBuf	Buffer de datos
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	public RasterBuf getWindowRaster(int x, int y, int w, int h, BandList bandList, RasterBuf rasterBuf) {
+		double initX = file.originX + ((x * extent.width()) / file.width);
+		double initY = file.originY - ((y * extent.height()) / file.height);
+		double width = ((w * extent.width()) / file.width);
+		double height = ((h * extent.height()) / file.height);
+		return getWindowRaster(initX, initY, width, height, bandList, rasterBuf);
+	}
+    
+    /**
+     * 
+     * @param sz
+     * @param image
+     * @return
+     */
+    private Image resizeAndResampleImage(Dimension sz, Image image) {
+        int w = (int)sz.getWidth();
+        int h = (int)sz.getHeight();
+    	Image buffImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+    	
+        //Desplazamiento para la X y la Y leidas. Estas tienen efecto cuando un pixel no empieza a visualizarse
+        //justo en su esquina superior izquierda y tiene que ser cortado en la visualización.
+       
+        double currentViewX = (((double) file.width)/(Math.abs(extent.getMax().getX() - extent.getMin().getX())))*(v.minX()-file.originX);
+		double currentViewY = (((double) file.height)/(Math.abs(extent.getMax().getY() - extent.getMin().getY())))*(file.originY - v.minY());
+        double offsetX = Math.abs(currentViewX - ((int)currentViewX));
+        double offsetY = Math.abs(currentViewY - ((int)currentViewY));
+        
+        int xSrc, ySrc;
+        int decr = 2;
+
+        if(v.minX() == extent.minX() || v.maxX() == extent.maxX() || v.minY() == extent.minY() || v.maxY() == extent.maxY()){
+        	decr = 0;
+        	offsetX = offsetY = 0;
+        }
+
+        double scaleW = (double)((double)(image.getWidth(null) - decr) / (double)w);
+        double scaleH = (double)((double)(image.getHeight(null) - decr) / (double)h);
+        this.calcArraySteps(w, h, scaleW, scaleH, offsetX, offsetY);
+        for (int y1 = 0; y1 < h; y1++){
+        ySrc = (int) ((y1 * scaleH) + offsetY);
+        	for (int x1 = 0; x1 < w; x1++){
+        		xSrc = (int) ((x1 * scaleW) + offsetX);
+        		try {
+        			((BufferedImage) buffImg).setRGB(x1, y1, ((BufferedImage)image).getRGB(xSrc, ySrc));
+        		} catch (java.lang.ArrayIndexOutOfBoundsException e) {
+        		}
+        	}
+        }
+        
+        return buffImg;
+    }
+
+    
+    private void applyAlpha(Image im) {
+        BufferedImage img = (BufferedImage) im;
+        int alpha = (getAlpha() & 0xff) << 24;
+        int w = img.getWidth();
+        int[] line = new int[w];
+
+        for (int j = 0; j < img.getHeight(); j++) {
+            img.getRGB(0, j, w, 1, line, 0, w);
+
+            for (int i = 0; i < w; i++)
+                line[i] = (alpha | (line[i] & 0x00ffffff));
+
+            img.setRGB(0, j, w, 1, line, 0, w);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoRasterFile#getData(int, int)
+     */
+    public Object getData(int x, int y, int band) {
+        //file.readLineRGBA();
+        return null;
+    }
+
+    /**
+     * Devuelve los datos de una ventana solicitada
+     * @param ulX        coordenada X superior izda.
+     * @param ulY        coordenada Y superior derecha.
+     * @param sizeX        tamaño en X de la ventana.
+     * @param sizeY tamaño en Y de la ventana.
+     * @param band        Banda solicitada.
+     */
+    public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band) {
+        //TODO Nacho: Implementar getWindow de EcwFile
+        return null;
+    }
+
+    /**
+     * Obtiene la zona (Norte / Sur)
+     * @return true si la zona es norte y false si es sur
+     */
+    public boolean getZone() {
+        //TODO Nacho: Implementar getZone de EcwFile
+        return false;
+    }
+
+    /**
+     *Devuelve el número de zona UTM
+     *@return Número de zona
+     */
+    public int getUTM() {
+        //		TODO Nacho: Implementar getUTM de EcwFile
+        return 0;
+    }
+
+    /**
+     * Obtiene el sistema de coordenadas geograficas
+     * @return Sistema de coordenadas geográficas
+     */
+    public String getGeogCS() {
+        //TODO Nacho: Implementar getGeogCS de EcwFile
+        return new String("");
+    }
+
+    /**
+     * Devuelve el tamaño de bloque
+     * @return Tamaño de bloque
+     */
+    public int getBlockSize() {
+        //TODO Nacho: Implementar getBlockSize de EcwFile	
+        return 1;
+    }
+	
+    /**
+	 * Calcula la transformación que se produce sobre la vista cuando la imagen tiene un fichero .rmf
+	 * asociado. En Ecw el origen de coordenadas en Y es el valor máximo y decrece hasta el mínimo.
+	 * @param originX Origen de la imagen en la coordenada X
+	 * @param originY Origen de la imagen en la coordenada Y
+	 */
+    public void setExtentTransform(double originX, double originY, double psX, double psY) {
+		
+	}
+
+    /**
+     * Trozo de imagen (Chunk) en que se divide la consulta a la librería,
+     * para esquivar el bug#2.
+     *
+     * @author luisw
+     */
+    static class ChunkFrame {
+        // Ancho máximo (~2500 px)
+        final static int MAX_WIDTH = 1536;
+
+        // Alto máximo (no hay límite)
+        final static int MAX_HEIGHT = 1536;
+        Point pos;
+        Extent v;
+        int width;
+        int height;
+        boolean mustResize = false;
+
+        public ChunkFrame(Extent vista, int w, int h) {
+            v = vista;
+            width = w;
+            height = h;
+        }
+
+        /**
+         * Calcula el array de chunks (trozos).
+         * @param file        Fichero ecw que hay que trocear.
+         * @param v Extent total de la vista.
+         * @param sz        Tamaño total de la vista.
+         * @return array de ChunkFrames.
+         * @throws JNCSFileNotOpenException
+         */
+        public static ChunkFrame[] computeFrames(JNCSFile file, Extent v,
+                                                 Dimension sz, Extent extent)
+                                          throws JNCSFileNotOpenException {
+            ChunkFrame[] frames = null;
+            ChunkFrame f = null;
+
+            // Calcula el nº de chunks (filas y columnas)
+            int numCol = (sz.width / MAX_WIDTH);
+
+            // Calcula el nº de chunks (filas y columnas)
+            int numRow = (sz.height / MAX_HEIGHT);
+
+            if ((sz.width - (numCol * MAX_WIDTH)) > 0) {
+                numCol++;
+            }
+
+            if ((sz.height - (numRow * MAX_HEIGHT)) > 0) {
+                numRow++;
+            }
+
+            frames = new ChunkFrame[numCol * numRow];
+
+            JNCSDatasetPoint ptMin = file.convertWorldToDataset(v.minX(), v.minY());
+            JNCSDatasetPoint ptMax = file.convertWorldToDataset(v.maxX(), v.maxY());
+
+            //No utilizamos JNCSDatasetPoint porque siempre hace un redondeo por abajo con lo que perdemos precisión. En su lugar
+            //utilizamos currentViewM... calculado manualmente y que nos proporciona todos los decimales 
+            double currentViewMinX = (((double) file.width)/(Math.abs(extent.getMax().getX() - extent.getMin().getX())))*(v.minX()-file.originX);
+            double currentViewMaxX = (((double) file.width)/(Math.abs(extent.getMax().getX() - extent.getMin().getX())))*(v.maxX()-file.originX);
+    		double currentViewMinY = (((double) file.height)/(Math.abs(extent.getMax().getY() - extent.getMin().getY())))*(file.originY - v.minY());
+    		double currentViewMaxY = (((double) file.height)/(Math.abs(extent.getMax().getY() - extent.getMin().getY())))*(file.originY - v.maxY());
+                      
+            if ((ptMax.x - ptMin.x) < sz.width) {
+                numCol = numRow = 1;
+                frames = new ChunkFrame[numCol * numRow];
+                int nPixelsX = (int)Math.ceil(Math.abs(currentViewMaxX - currentViewMinX));
+                int nPixelsY = (int)Math.ceil(Math.abs(currentViewMaxY - currentViewMinY));
+                
+                if(v.minX() == extent.minX() || v.maxX() == extent.maxX() || v.minY() == extent.minY() || v.maxY() == extent.maxY()){
+                	f = frames[0] = new ChunkFrame(v, nPixelsX, nPixelsY);
+                	f.v = new Extent(v);
+                }else{
+                	f = frames[0] = new ChunkFrame(v, nPixelsX + 1, nPixelsY + 1);
+                	double pointEndWcX = v.minX() + (((nPixelsX + 1) * Math.abs(v.maxX() - v.minX())) / nPixelsX);
+                	double pointEndWcY = v.maxY() - (((nPixelsY + 1) * Math.abs(v.maxY() - v.minY())) / nPixelsY);
+                	f.v = new Extent(v.minX(), v.maxY(), pointEndWcX, pointEndWcY);
+                }
+                
+                f.pos = new Point(0, 0);
+                f.mustResize = true;
+            } else {
+                // Calcula cada chunk
+                double stepx = ((double) ptMax.x - ptMin.x) / sz.getWidth();
+                double stepy = ((double) ptMax.y - ptMin.y) / sz.getHeight();
+                int h = sz.height;
+
+                for (int r = 0; r < numRow; r++) {
+                    int w = sz.width;
+
+                    for (int c = 0; c < numCol; c++) {
+                        f = new ChunkFrame(null, -1, -1);
+
+                        // Posición del chunk
+                        f.pos = new Point(c * MAX_WIDTH, r * MAX_HEIGHT);
+
+                        // Tamaño del chunk
+                        f.width = Math.min(MAX_WIDTH, w);
+                        f.height = Math.min(MAX_HEIGHT, h);
+
+                        // Extent del chunk
+                        int x1 = ptMin.x + (int) (f.pos.x * stepx);
+                        int x2 = x1 + (int) (f.width * stepx);
+                        int y1 = ptMax.y - (int) (f.pos.y * stepy); 
+                        int y2 = y1 - (int) (f.height * stepy); //ptMin.y;
+                        JNCSWorldPoint pt1 = file.convertDatasetToWorld(x1, y1);
+                        JNCSWorldPoint pt2 = file.convertDatasetToWorld(x2, y2);
+                        
+                        f.v = new Extent(pt1.x, pt1.y, pt2.x, pt2.y); // Hay que calcularlo
+                        frames[(r * numCol) + c] = f;
+                        w -= MAX_WIDTH;
+                    }
+
+                    h -= MAX_HEIGHT;
+                }
+            }
+
+            //System.out.println("Hay "+numRow+" filas y "+numCol+" columnas.");
+            return frames;
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/EcwFile.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/IDataWriter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/IDataWriter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/IDataWriter.java	(revision 10281)
@@ -0,0 +1,40 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+
+/**
+ * Este interfaz debe ser implementado por las clases que vayan a
+ * servir datos a los drivers de escritura.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public interface IDataWriter {
+	public int[] readARGBData(int sizeX, int sizeY, int nBand);
+	
+    public byte[][] readByteData(int sizeX, int sizeY);
+    public short[][] readShortData(int sizeX, int sizeY);
+    public int[][] readIntData(int sizeX, int sizeY);
+    public float[][] readFloatData(int sizeX, int sizeY);
+    public double[][] readDoubleData(int sizeX, int sizeY);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/IDataWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GmlFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GmlFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GmlFile.java	(revision 10281)
@@ -0,0 +1,319 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.IObjList;
+import org.cresques.px.gml.Feature;
+import org.cresques.px.gml.FeatureCollection;
+import org.cresques.px.gml.Geometry;
+import org.cresques.px.gml.LineString;
+import org.cresques.px.gml.MultiGeometry;
+import org.cresques.px.gml.MultiPolygon;
+import org.cresques.px.gml.Point;
+import org.cresques.px.gml.Polygon;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import java.util.Hashtable;
+
+
+/**
+ * Cargador de ficheros .gml de JUMP de vivid solutions.
+ * Actualmente lee un subconjunto de datos. Datos de prueba generados por JUMP.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class GmlFile extends GeoFile {
+    final static int NOWHERE = -1;
+    final static int INCOORDINATES = 0;
+    final static int INPROPERTY = 1;
+    final static String LT = "<";
+    final static String GT = ">";
+    int where = NOWHERE;
+    Hashtable tipos = new Hashtable();
+    FeatureCollection collection = null;
+    Feature activeFeature = null;
+    Geometry activeGeometry = null;
+    Geometry activeMember = null;
+    String buf = null;
+    String propName = null;
+    long lineNr = 0;
+    BufferedReader fi;
+    long l = 0;
+    int count = 0;
+
+    /**
+     * Constructor de la clase Gml
+     *
+     */
+    public GmlFile(IProjection proj, String name) {
+        super(proj, name);
+    }
+
+    /**
+     * Carga un .gml
+     * @param name nombre del fichero
+     */
+    public GeoFile load() {
+        System.out.println("Cargando " + name + " ...");
+
+        try {
+            if (FileFolder.isUrl(name)) {
+                ZipFileFolder zFolder = new ZipFileFolder(name);
+                InputStream is = zFolder.getInputStream(name);
+
+                return load(new InputStreamReader(is));
+            } else {
+                return load(new FileReader(name));
+            }
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException ie) {
+            System.err.println("ERROR." + l + "lineas leidas");
+            ie.printStackTrace();
+        }
+
+        return this;
+    }
+
+    public GeoFile load(Reader fr) {
+        try {
+            fi = new BufferedReader(fr);
+
+            while ((buf = fi.readLine()) != null) {
+                //System.out.println(buf);
+                l++;
+                preParseLine(buf.trim());
+            }
+
+            fi.close();
+            System.out.println("'" + name + "' cargado. (" + l + " líneas).");
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException ie) {
+            System.err.println("ERROR." + l + "lineas leidas");
+            ie.printStackTrace();
+        }
+
+        this.lineNr = l;
+        extent.add(collection.getExtent());
+
+        return this;
+    }
+
+    /**
+     * Analiza una línea del fichero .gml
+     * @param l linea que analiza
+     */
+    void preParseLine(String l) {
+        String line1;
+
+        //System.err.println("pre0: '"+l+"'");
+        //if (count++>500) System.exit(1);
+        if (l.indexOf(LT) > 0) {
+            line1 = l.substring(0, l.indexOf(LT)).trim();
+            l = l.substring(l.indexOf(LT)).trim();
+
+            //System.err.println("pre1: '"+line1+"', '"+l+"'");
+            preParseLine(line1);
+            preParseLine(l);
+
+            return;
+        }
+
+        if ((l.indexOf(GT) >= 0) && (l.indexOf(GT) != (l.length() - 1))) {
+            line1 = l.substring(0, l.indexOf(GT) + 1).trim();
+            l = l.substring(l.indexOf(GT) + 1).trim();
+
+            //System.err.println("pre2: '"+line1+"', '"+l+"'");
+            preParseLine(line1);
+            preParseLine(l);
+
+            return;
+        }
+
+        parseToken(l);
+    }
+
+    /**
+     * Analiza un token
+     * @param l
+     */
+    void parseToken(String l) {
+        String token = null;
+
+        //System.err.println(l);
+        if ((l.length() > 0) && (l.substring(0, 1).compareTo(LT) == 0)) {
+            token = l.substring(1, l.indexOf(GT));
+
+            if (token.compareTo("gml:coordinates") == 0) {
+                where = INCOORDINATES;
+            } else if (token.compareTo("/gml:coordinates") == 0) {
+                where = NOWHERE;
+            } else if (token.compareTo("gml:LinearRing") == 0) {
+            } else if (token.compareTo("/gml:LinearRing") == 0) {
+            } else if (token.compareTo("gml:Polygon") == 0) {
+                activeMember = new Polygon();
+
+                if (activeGeometry == null) {
+                    activeGeometry = activeMember;
+                }
+            } else if (token.compareTo("/gml:Polygon") == 0) {
+                if (activeGeometry.getClass() == MultiPolygon.class) {
+                    ((MultiPolygon) activeGeometry).add(activeMember);
+                }
+
+                activeMember = null;
+            } else if (token.compareTo("gml:LineString") == 0) {
+                activeMember = new LineString();
+
+                if (activeGeometry == null) {
+                    activeGeometry = activeMember;
+                }
+            } else if (token.compareTo("/gml:LineString") == 0) {
+                if (activeGeometry.getClass() == MultiGeometry.class) {
+                    ((MultiGeometry) activeGeometry).add(activeMember);
+                }
+
+                activeMember = null;
+            } else if (token.compareTo("gml:outerBoundaryIs") == 0) {
+            } else if (token.compareTo("/gml:outerBoundaryIs") == 0) {
+            } else if (token.compareTo("featureCollection") == 0) {
+                collection = new FeatureCollection(proj);
+            } else if (token.compareTo("/featureCollection") == 0) {
+            } else if (token.compareTo("feature") == 0) {
+                System.err.println("feature");
+                activeFeature = new Feature();
+            } else if (token.compareTo("/feature") == 0) {
+                collection.add(activeFeature);
+                activeFeature = null;
+            } else if (token.compareTo("geometry") == 0) {
+            } else if (token.compareTo("/geometry") == 0) {
+                activeFeature.setGeometry(activeGeometry);
+                activeGeometry = null;
+                activeMember = null;
+            } else if (token.compareTo("gml:Point") == 0) {
+                activeMember = new Point();
+
+                if (activeGeometry == null) {
+                    activeGeometry = activeMember;
+                }
+            } else if (token.compareTo("/gml:Point") == 0) {
+                activeMember = null;
+            } else if (token.compareTo("gml:MultiPolygon") == 0) {
+                activeGeometry = new MultiPolygon();
+            } else if (token.compareTo("/gml:MultiPolygon") == 0) {
+            } else if (token.compareTo("gml:MultiPoint") == 0) {
+                //activeGeometry = new MultiPoint();
+            } else if (token.compareTo("/gml:MultiPoint") == 0) {
+            } else if (token.compareTo("gml:polygonMember") == 0) {
+            } else if (token.compareTo("/gml:polygonMember") == 0) {
+            } else if (token.compareTo("gml:innerBoundaryIs") == 0) {
+                ((Polygon) activeMember).setInnerBoundary();
+            } else if (token.compareTo("/gml:innerBoundaryIs") == 0) {
+            } else if (token.startsWith("property")) {
+                where = INPROPERTY;
+                propName = l.substring(l.indexOf("\"") + 1);
+                propName = propName.substring(0, propName.indexOf("\""));
+            } else if (token.startsWith("/property")) {
+                where = NOWHERE;
+
+                Integer tipo = new Integer(0);
+
+                if (tipos.containsKey(token)) {
+                    tipo = (Integer) tipos.get(token);
+                }
+
+                tipos.put(token, new Integer(tipo.intValue() + 1));
+            }
+        } else {
+            switch (where) {
+            case INPROPERTY:
+                activeFeature.setProp(propName, l);
+
+                break;
+
+            case INCOORDINATES:
+
+                String[] txt = l.split(",");
+                double[] pt = new double[3];
+
+                for (int i = 0; i < txt.length; i++)
+                    pt[i] = Double.parseDouble(txt[i]);
+
+                activeMember.add(proj.createPoint(pt[0], pt[1]));
+
+                break;
+            }
+        }
+    }
+
+    /**
+     * Obtiene la lista de features.
+     */
+    public IObjList getObjects() {
+        return collection;
+    }
+
+    /**
+     * Saca las estadisticas del fichero por stdout.
+     */
+    public void pintaStats() {
+        /*                print "GML file '%s': %d lineas" % (self.name, self.lineNr)
+                        print "GML Tokens:"
+                        kk = self.tipos.keys()
+                        kk.sort()
+                        for k in kk:
+                                print k, self.tipos[k]
+                        print "\nTotal Coordenadas %d\n" % geo.Polygon.numCoords
+                        #print "\nExtent: min=(%.2f,%df), max=(%.2f,%.2f)" % (self.minX, self.minY, self.maxX, self.maxY)
+                        print "\nExtent: ", (self.minX, self.minY, self.maxX, self.maxY)*/
+        String txt = "GML file: '" + name + "': " + lineNr + " líneas\n";
+        txt += ("\nGML file: Total Coordenadas: " + Polygon.pointNr + "\n");
+        txt += ("GML file: Total features: " + collection.size() + "\n");
+        txt += ("GML file: " + collection.getExtent() + "\n");
+        txt += ("GML file: " + ((Feature) collection.get(0)).getExtent());
+        System.out.println(txt);
+    }
+
+    public void reProject(ICoordTrans rp) {
+        collection.reProject(rp);
+        setProjection(rp.getPDest());
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoFile#close()
+     */
+    public void close() {
+        // TODO Auto-generated method stub
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GmlFile.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/CXMLParser.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/CXMLParser.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/CXMLParser.java	(revision 10281)
@@ -0,0 +1,193 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+/**
+ * Parser básico XML para las ventanas de propiedades de los drivers de escritura.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class CXMLParser {
+    private String XML;
+
+    /**
+     * Constructor
+     * @param fXML        Texto en formato XML
+     */
+    public CXMLParser(String fXML) {
+        XML = fXML;
+    }
+
+    /**
+     * Obtiene texto XML
+     * @return        texto XML
+     */
+    public String getXML() {
+        return this.XML;
+    }
+
+    /**
+     * Obtiene el valor del tag
+     * @param tag        Tag del cual se quiere obtener el valor
+     * @param bDeleteValue        Si es true elimina el tag y si es false lo mantiene
+     * @return        Devuelve el contenido del tag
+     */
+    public String getValue(String tag, boolean deleteValue) {
+        XML = XML.trim();
+
+        String startTag = new String("<" + tag);
+        String endTag = new String("</" + tag + ">");
+
+        int iStart = XML.indexOf(startTag);
+        int endOpenTag = XML.indexOf(">");
+
+        while ((endOpenTag < iStart) && (endOpenTag != -1))
+            endOpenTag = XML.indexOf(">", endOpenTag + 1);
+
+        iStart = endOpenTag + 1;
+
+        if (iStart == 0) {
+            return "";
+        }
+
+        int iEnd = XML.indexOf(endTag);
+
+        if (iEnd == 0) {
+            return "";
+        }
+
+        String res;
+
+        try {
+            res = XML.substring(iStart, iEnd);
+
+            if (deleteValue) {
+                int start = XML.indexOf(startTag);
+                int end = XML.indexOf(">");
+
+                while ((end < start) && (end != -1))
+                    end = XML.indexOf(">", end + 1);
+
+                String subcadena = XML.substring(start, end + 1);
+                Pattern p = Pattern.compile(subcadena);
+                Matcher m = p.matcher(XML);
+                XML = m.replaceFirst("");
+                p = Pattern.compile(endTag);
+                m = p.matcher(XML);
+                XML = m.replaceFirst("");
+                XML = XML.trim();
+
+                if (!XML.startsWith("<")) {
+                    if (XML.indexOf("<") == -1) {
+                        XML = new String("");
+                    } else {
+                        XML = XML.substring(XML.indexOf("<"), XML.length());
+                    }
+                }
+            }
+        } catch (StringIndexOutOfBoundsException e) {
+            return "";
+        }
+
+        return res;
+    }
+
+    /**
+     * Obtiene un atributo de la primera aparición de un  tag concreto
+     * @param tag        Tag del cual quiere obtenerse un atributo
+     * @param att        Atributo del cual se desea el valor
+     * @return
+     */
+    public String getAttr(String tag, String att) {
+        XML = XML.trim();
+
+        int start = XML.indexOf(tag) + tag.length();
+        int end = XML.indexOf(">");
+
+        while ((end < start) && (end != -1))
+            end = XML.indexOf(">", end + 1);
+
+        String subcadena = XML.substring(start, end);
+        start = subcadena.indexOf(att) + att.length() + 1;
+
+        if (subcadena.indexOf(att) != -1) {
+            end = subcadena.indexOf("\"", start + 1);
+
+            //System.out.println(start+" "+end);
+            if (end == -1) {
+                end = subcadena.length();
+            }
+
+            return subcadena.substring(start + 1, end);
+        } else {
+            return new String("");
+        }
+    }
+
+    /**
+     * Obtiene el nombre del siguiente tag XML
+     * @return        Nombre del siguiente tag
+     */
+    public String getTag() {
+        XML = XML.trim();
+
+        int start = XML.indexOf("<");
+
+        if (start == -1) {
+            return new String("");
+        }
+
+        int end = XML.indexOf(" ");
+
+        if ((end > XML.indexOf(">")) || (end == -1)) {
+            end = XML.indexOf(">");
+        }
+
+        if (end == -1) {
+            return new String("");
+        }
+
+        return XML.substring(start + 1, end);
+    }
+
+    /**
+     * Dado un nombre de un tag devuelve el número de estos en el XML
+     * @param tag        Nombre del tag a contar
+     * @return        Número de tags coincidentes
+     */
+    public int getNumTags(String tag) {
+        int numTags = 0;
+        int index = XML.indexOf("<" + tag);
+
+        while (index != -1) {
+            numTags++;
+            index = XML.indexOf("<" + tag, index + 1);
+        }
+
+        return numTags;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/CXMLParser.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfFile.java	(revision 10281)
@@ -0,0 +1,1674 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ * 
+ * Copyright (C) 2004-5. 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ * 
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Vector;
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Projected;
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.dxf.DxfEntityMaker;
+import org.cresques.px.dxf.DxfHeaderManager;
+import org.cresques.px.dxf.DxfHeaderVariables;
+
+/**
+ * Clase que representa un fichero en formato DXF. Contiene los interfaces y métodos
+ * necesarios para acceder a la información almacenada en su interior.
+ * 
+ * @author jmorell
+ */
+public class DxfFile extends GeoFile {
+	
+	private boolean cadFlag = true;
+	
+	long lineNr = 0;
+
+	String buf = null;
+	
+	BufferedReader fi;
+	long l = 0;
+	int count = 0;
+	DxfGroup grp = null;
+	
+	EntityFactory entityMaker = null;
+	VarSettings headerManager;
+    private boolean dxf3DFlag;
+	
+	/**
+	 * Crea los objetos en el Modelo correspondiente.
+	 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+	 */
+	public interface EntityFactory extends Projected {
+        
+		/**
+         * Permite saber si se están añadiendo elementos a un bloque
+         * @param booleano que indica si se están añadiendo elementos a un bloque
+		 */
+        public void setAddingToBlock(boolean a);
+        
+        /**
+         * Crea una nueva capa partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción de la nueva capa
+         * @throws Exception
+         */
+		public void createLayer(DxfGroupVector v) throws Exception ;
+        
+        /**
+         * Crea una nueva polilínea partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción de la nueva polilínea
+         * @throws Exception
+         */
+		public void createPolyline(DxfGroupVector v) throws Exception ;
+        
+        /**
+         * Añade un vértice a la polilínea que se está creando
+         * @param DxfGroupVector con la información necesaria para la adición del vértice
+         * @throws Exception
+         */
+		public void addVertex(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Fin de secuencia
+         * @throws Exception
+         */
+        public void endSeq() throws Exception ;
+        
+        /**
+         * Crea una nueva LwPolyline partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción de la nueva polilínea
+         * @throws Exception
+         */
+		public void createLwPolyline(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea una nueva línea partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción de la nueva línea
+         * @throws Exception
+         */
+        public void createLine(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo texto partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo texto
+         * @throws Exception
+         */
+        public void createText(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo MText partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo MText
+         * @throws Exception
+         */
+        public void createMText(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo punto partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo punto
+         * @throws Exception
+         */
+        public void createPoint(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo círculo partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo círculo
+         * @throws Exception
+         */
+        public void createCircle(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea una nueva elipse partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción de la nueva elipse
+         * @throws Exception
+         */
+        public void createEllipse(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo arco partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo arco
+         * @throws Exception
+         */
+        public void createArc(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo punto de inserción partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo punto de inserción
+         * @throws Exception
+         */
+        public void createInsert(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo sólido 2D partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo sólido
+         * @throws Exception
+         */
+        public void createSolid(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo Spline partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción del nuevo Spline
+         * @throws Exception
+         */
+        public void createSpline(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Construye la definición de un nuevo atributo partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la construcción de la definición del nuevo atributo
+         * @throws Exception
+         */
+        public void createAttdef(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un nuevo atributo partiendo de la información almacenada en el DXF
+         * @param DxfGroupVector con información para la creación del nuevo atributo
+         * @throws Exception
+         */
+        public void createAttrib(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Crea un bloque
+         * @param DxfGroupVector con información para la creación del nuevo elemento
+         * @throws Exception
+         */
+        public void createBlock(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Fin de la definición de un bloqe
+         * @param DxfGroupVector con información referente al final de un bloque
+         * @throws Exception
+         */
+        public void endBlk(DxfGroupVector v) throws Exception ;
+		
+        /**
+         * Gestiona los bloques que no se han tratado en la primera vuelta
+         */
+        void testBlocks();
+		
+        /**
+         * Devuelve el extent
+         * @return el extent
+         */
+        public Extent getExtent();
+		
+        /**
+         * Devuelve la lista de bloques
+         * @return la lista de bloques
+         */
+        public Vector getBlkList();
+		
+		/**
+         * Permite la gestión de los atributos almacenados en unn DXF
+         * @return un Vector con la lista de atributos
+		 */
+        public Vector getAttributes();
+		
+        /**
+         * Borra los atributos repetidos
+         */
+        public void depureAttributes();
+		
+        /**
+         * Devuelve los objetos almacenados en el DXF
+         * @return IObjList con los objetos procedentes del DXF
+         */
+        public IObjList getObjects();
+		
+        /**
+         * Permite saber si se trata de un fichero DXF en 2D o en 3D
+         * @return booleano que indica si se trata de un fichero DXF 3D
+         */
+        public boolean isDxf3DFile();
+	};
+	
+	/**
+	 * Establece el estado de las variables propias de un DXF que están definidas
+	 * en la sección HEADER. Por ejemplo, la versión del DXF.
+	 * @author jmorell (jose.morell@gmail.com)
+	 * @version 15-dic-2004
+	 */
+	public interface VarSettings {
+		
+		/**
+		 * Establece la versión de Autocad en la que fue generado el DXF.
+		 * @param información de base
+		 * @throws Exception
+		 */
+		public void setAcadVersion(DxfGroupVector v) throws Exception ;
+		
+		/**
+		 * Devuelve la versión de Autocad en la que fue generado el DXF.
+		 * @return
+		 */
+		public String getAcadVersion();
+		
+		/**
+		 * Devuelve el estado de las variables propias de un DXF
+		 * @return
+		 */
+		public DxfHeaderVariables getDxfHeaderVars();
+        public boolean isWritedDxf3D();
+        public void loadMinZFromHeader(double d);
+        public void loadMaxZFromHeader(double d);
+	};
+	
+    /**
+     * Constructor de la clase
+     * @param proj, la proyección cartográfica
+     * @param name, el path absoluto hasta el fichero DXF
+     * @param maker, el interface que permite la construcción de las entidades procedentes del DXF
+     */
+	public DxfFile(IProjection proj, String name, EntityFactory maker) {
+		super(proj, name);
+		entityMaker = maker;
+		headerManager = new DxfHeaderManager();
+	}
+	
+    /**
+     * Constructor de la clase que además incorpora la capacidad de leer una porción del HEADER
+     * @param proj, la proyección cartográfica
+     * @param name, el path absoluto hasta el fichero DXF
+     * @param maker, el interface que permite la construcción de las entidades procedentes del DXF
+     * @param dxfVars, el interface que permite la lectura del HEADER de un DXF
+     */
+    public DxfFile(IProjection proj, String name, EntityFactory maker, VarSettings dxfVars) {
+		super(proj, name);
+		entityMaker = maker;
+		headerManager = dxfVars;
+	}
+	
+	/**
+	 * Carga un fichero en formato DXF
+	 */
+	public GeoFile load() {
+		System.out.println("Dxf: Cargando "+name+" ...");
+		try {
+			if (ZipFileFolder.isUrl(name)) {
+				ZipFileFolder zFolder = new ZipFileFolder(name);
+				InputStream is = zFolder.getInputStream(name);
+				return load(new InputStreamReader(is));
+			} else 
+				return load(new FileReader(name));
+		} catch (FileNotFoundException fnfe) {
+			fnfe.printStackTrace();
+		} catch (Exception e) {
+			System.err.println("Dxf: ERROR."+l+"lineas leidas");
+			e.printStackTrace();
+		}
+		return this;
+	}
+	
+    /**
+     * Carga un fichero en formato DXF tomando un Reader como parámetro
+     * @param fr, Reader que se le pasa como parámetro
+     * @return devuelve un objeto GeoFile, padre de DxfFile
+     * @throws NumberFormatException
+     * @throws Exception
+     */
+	public GeoFile load(Reader fr) throws NumberFormatException, Exception {
+		System.out.println("Dxf: Cargando '"+name+"' ...");
+		fi = new BufferedReader(fr);
+		while ((grp = readGrp()) != null) {
+			l+=2;
+			
+			if (grp.equals(0, "EOF"))		break;
+			if (grp.equals(0, "SECTION"))
+				readSection();
+		}
+		fi.close();
+		extent.add(entityMaker.getExtent());
+		System.out.println("Dxf: '"+name+"' cargado. ("+l+" líneas).");
+		this.lineNr = l;
+		return this;
+	}
+	
+    /**
+     * El fichero DXF se divide en grupos. Este método permite leer cada grupo individualmente
+     * @return devuelve la información del DXF en forma de objetos de la clase DxfGroup
+     * @throws NumberFormatException
+     * @throws IOException
+     */
+	private DxfGroup readGrp() throws NumberFormatException, IOException {
+		DxfGroup g = DxfGroup.read(fi);
+		if (g != null) l += 2;
+		/*if (g.code == 8)
+			if (((String) g.data).length() < 1) {
+				System.err.println("a que un layer no puede ser ''?");
+				System.exit(1);
+			}*/
+		return g;
+	}
+	
+    /**
+     * El fichero DXF se divide en varias secciones. Este método se encarga de leer cada
+     * una de ellas
+     * @throws NumberFormatException
+     * @throws Exception
+     */
+	private void readSection() throws NumberFormatException, Exception {
+		while (true) {
+			grp = readGrp(); System.out.print("-1:"+grp);
+			if (grp.code == 2)
+				if (((String) grp.data).compareTo("HEADER") == 0)
+					readHeader();
+				else if (((String) grp.data).compareTo("CLASSES") == 0)
+					readAnySection();
+				else if (((String) grp.data).compareTo("TABLES") == 0)
+					readTables();
+				else if (((String) grp.data).compareTo("BLOCKS") == 0)
+					readBlocks();
+				else if (((String) grp.data).compareTo("ENTITIES") == 0)
+					readEntities();
+				else if (((String) grp.data).compareTo("OBJECTS") == 0)
+					readAnySection();
+				else {
+					System.out.println("DxfRead: Seccion "+grp.data);
+					readAnySection();
+				}
+			else
+				System.err.println("Dxf: Codigo/Seccion desconocidos" + grp);
+			if (grp.equals(0, "EOF")) break;
+			if (grp.equals(0, "ENDSEC")) break;
+		}		
+	}
+	
+    /**
+     * Habilita la lectura de la sección de TABLES
+     * @throws NumberFormatException
+     * @throws Exception
+     */
+	private void readTables() throws NumberFormatException, Exception {
+		System.out.println("Dxf: Seccion TABLAS, linea "+ l+ "grp ="+ grp);
+		int layerCnt = 0;
+		String tableAct = "NONAME";
+		
+		Hashtable tables = new Hashtable();
+		Vector table = new Vector();
+		DxfGroupVector v = new DxfGroupVector();
+		
+		grp = readGrp();// System.out.print("0:"+grp);
+		while (true) {
+			if (grp.code == 0) {
+				String data = (String) grp.getData();
+				if (data.compareTo("ENDSEC") == 0 || data.compareTo("EOF") == 0)
+					break;
+				else if (data.compareTo("ENDTAB") == 0) {
+					tables.put(tableAct, table);
+					table = new Vector();
+					grp = readGrp();// System.out.print("1:"+grp);
+					
+					/**/if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
+						entityMaker.createLayer(v);
+						System.out.println("Dxf: Layer "+v.getDataAsString(2));
+						layerCnt++;
+						v.clear();
+					}/**/
+					continue;
+				} else {
+					if (table.size()==1) {
+						tableAct = v.getDataAsString(2);
+						System.out.println("Dxf: Tabla "+tableAct);
+					} else
+						if (tableAct.compareTo("LAYER") == 0 && v.size()>0) {
+							entityMaker.createLayer(v);
+							System.out.println("Dxf: Layer "+v.getDataAsString(2));
+							layerCnt++;
+						}
+
+					v.clear();
+					v.add(grp);
+				}
+				while (true) {
+					grp = readGrp();// System.out.print("2:"+grp);
+					if (grp.code == 0)	break;
+					v.add(grp);
+				}
+				table.add(v);
+			} else {
+				System.err.println("Dxf: Error de secuencia");
+				grp = readGrp(); //System.out.print("3:"+grp);	
+			}
+		}
+		System.out.println("Dxf: Seccion TABLAS: " + layerCnt + " Capas. ");
+	}
+	
+    /**
+     * Método de lectura de sección por defecto. Se utiliza mientras se realiza la
+     * implementación correspondiente
+     * @throws NumberFormatException
+     * @throws IOException
+     */
+	private void readAnySection() throws NumberFormatException, IOException {
+		System.out.println("Dxf: Seccion '"+((String) grp.getData())+"', linea "+ l);
+		while (true) {
+			grp = readGrp();
+			if (grp.equals(0, "ENDSEC")) break;
+			else if (grp.equals(0, "EOF")) break;
+		}
+	}
+	
+	/**
+	 * Primera aproximación a la implementación de la lectura del HEADER. En principio
+	 * interesa que se lea la versión del DXF.
+	 * Para implementar esta parte del lector se ha optado por incluir el método
+	 * setAcadVersion en el interface EntityFactory. A lo mejor conviene implementar
+	 * un nuevo interface VarSettings.
+	 * @throws NumberFormatException
+	 * @throws Exception
+	 */
+	private void readHeader() throws NumberFormatException, Exception {
+		System.out.println("Dxf: Seccion HEADER, linea "+ l);
+		int variableCnt = 0;
+		int cntVeces = 0;
+		DxfGroupVector v = new DxfGroupVector();
+		grp = readGrp();
+		while (true) {
+			if (grp.equals(0, "EOF")) {
+				break;
+			}
+			else if (grp.code==9 || grp.code==0) {
+				if (v.size() > 0) {
+					String lastVariable = (String) ((DxfGroup) v.get(0)).data;
+					//System.out.println(lastVariable);
+					if (lastVariable.compareTo("$ACADVER") == 0) {
+						//System.out.println("Aqui llega.");
+						headerManager.setAcadVersion(v);
+					} else if (lastVariable.compareTo("$EXTMIN") == 0) {
+                        headerManager.loadMinZFromHeader(((Double)((DxfGroup) v.get(3)).data).doubleValue());
+                    } else if (lastVariable.compareTo("$EXTMAX") == 0) {
+                        headerManager.loadMaxZFromHeader(((Double)((DxfGroup) v.get(3)).data).doubleValue());
+                    } else if (lastVariable.compareTo("ENDSEC") == 0) {
+                        //System.out.println("Llega al ENDSEC.");
+                        break;
+					} /*else
+						System.err.println("Dxf: Variable "+lastVariable+" desconocida.");*/
+				}
+				v.clear();
+				v.add(grp);
+				while (true) {
+					grp = readGrp();
+					if (grp.code == 9 || grp.code==0)	break;
+					v.add(grp);
+				}
+				variableCnt++;
+			}
+			cntVeces++;
+		}
+		System.out.println("Dxf: Seccion HEADER, " + variableCnt + " variables, "+ cntVeces + " veces.");
+		//System.out.println("Seccion HEADER, linea "+ l+ " (SALGO)");
+		System.out.println("readHeader: ACAD Version: " + headerManager.getDxfHeaderVars().getAcadVersion());
+	}	
+	
+    /**
+     * Permite leer la sección ENTITIES del DXF, donde se encuentran las entidades
+     * geométricas del DXF que no aparecen dentro de ningún bloque
+     * @throws NumberFormatException
+     * @throws Exception
+     */
+	private void readEntities() throws NumberFormatException, Exception {
+		System.out.println("Dxf: Seccion ENTITIES, linea "+ l);
+		int entityCnt = 0;
+		int cntVeces = 0;
+		DxfGroupVector v = new DxfGroupVector();
+		grp = readGrp();
+		while (true) {
+			if (grp.equals(0, "EOF")) break;
+			else if (grp.code == 0) {
+				if (v.size() > 0) {
+					String lastEntity = (String) ((DxfGroup) v.get(0)).data;
+					if (lastEntity.compareTo("POLYLINE") == 0) {
+						entityMaker.createPolyline(v);
+					} else if (lastEntity.compareTo("VERTEX") == 0) {
+						entityMaker.addVertex(v);
+					} else if (lastEntity.compareTo("SEQEND") == 0) {
+						entityMaker.endSeq();
+					} else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
+						entityMaker.createLwPolyline(v);
+					} else if (lastEntity.compareTo("LINE") == 0) {
+						entityMaker.createLine(v);
+					} else if (lastEntity.compareTo("TEXT") == 0) {
+						entityMaker.createText(v);
+					} else if (lastEntity.compareTo("MTEXT") == 0) {
+						entityMaker.createMText(v);
+					} else if (lastEntity.compareTo("POINT") == 0) {
+						entityMaker.createPoint(v);
+					} else if (lastEntity.compareTo("CIRCLE") == 0) {
+						entityMaker.createCircle(v);
+					} else if (lastEntity.compareTo("ELLIPSE") == 0) {
+						entityMaker.createEllipse(v);
+					} else if (lastEntity.compareTo("ARC") == 0) {
+						entityMaker.createArc(v);
+					} else if (lastEntity.compareTo("INSERT") == 0) {
+						entityMaker.createInsert(v);
+					} else if (lastEntity.compareTo("SOLID") == 0) {
+						entityMaker.createSolid(v);
+					} else if (lastEntity.compareTo("SPLINE") == 0) {
+						entityMaker.createSpline(v);
+					} else if (lastEntity.compareTo("ATTRIB") == 0) {
+						entityMaker.createAttrib(v);
+					} else if (lastEntity.compareTo("ENDSEC") == 0) {
+						break;
+					} else
+						System.err.println("Dxf: Entidad "+lastEntity+" desconocida.");
+				}
+				v.clear();
+				v.add(grp);
+				while (true) {
+					grp = readGrp();
+					if (grp.code == 0)	break;
+					v.add(grp);
+				}
+				entityCnt++;
+			}
+			cntVeces++;
+		}
+		System.out.println("Dxf: Seccion ENTITIES, " + entityCnt + " entidades, "+ cntVeces + " veces.");
+		//System.out.println("Seccion ENTITIES, linea "+ l+ " (SALGO)");
+	}
+	
+    /**
+     * Permite la sección BLOCKS del DXF, donde se encuentran las definiciones de los
+     * bloques que componen el DXF
+     * @throws NumberFormatException
+     * @throws Exception
+     */
+	private void readBlocks() throws NumberFormatException, Exception {
+		System.out.println("Dxf: Seccion BLOCKS, linea "+ l);
+		int blkCnt = 0;
+		int cntVeces = 0;
+		DxfGroupVector v = new DxfGroupVector();
+		grp = readGrp();
+		while (true) {
+			if (grp.equals(0, "EOF")) break;
+			else if (grp.code == 0) {
+				if (v.size() > 0) {
+					String lastEntity = (String) ((DxfGroup) v.get(0)).data;
+					if (lastEntity.compareTo("BLOCK") == 0) {
+						//System.out.println("readBlocks(): Empezamos a leer un bloque");
+						entityMaker.createBlock(v);
+					} else if (lastEntity.compareTo("POLYLINE") == 0) {
+						//System.out.println("readBlocks(): Añadimos una polilinea al bloque");
+						entityMaker.createPolyline(v);
+					} else if (lastEntity.compareTo("VERTEX") == 0) {
+						//System.out.println("readBlocks(): Añadimos un vertice a la polilinea");
+						entityMaker.addVertex(v);
+					} else if (lastEntity.compareTo("SEQEND") == 0) {
+						//System.out.println("readBlocks(): Cerramos una polilinea");
+						entityMaker.endSeq();
+					} else if (lastEntity.compareTo("LWPOLYLINE") == 0) {
+						//System.out.println("readBlocks(): Añadimos una lwpolilinea al bloque");
+						entityMaker.createLwPolyline(v);
+					} else if (lastEntity.compareTo("LINE") == 0) {
+						//System.out.println("readBlocks(): Añadimos una linea al bloque");
+						entityMaker.createLine(v);
+					} else if (lastEntity.compareTo("TEXT") == 0) {
+						//System.out.println("readBlocks(): Añadimos un texto al bloque");
+						entityMaker.createText(v);
+					} else if (lastEntity.compareTo("MTEXT") == 0) {
+						//System.out.println("readBlocks(): Añadimos un m-texto al bloque");
+						entityMaker.createMText(v);
+					} else if (lastEntity.compareTo("POINT") == 0) {
+						//System.out.println("readBlocks(): Añadimos un punto al bloque");
+						entityMaker.createPoint(v);
+					} else if (lastEntity.compareTo("CIRCLE") == 0) {
+						//System.out.println("readBlocks(): Añadimos un circulo al bloque");
+						entityMaker.createCircle(v);
+					} else if (lastEntity.compareTo("ARC") == 0) {
+						//System.out.println("readBlocks(): Añadimos un arco al bloque");
+						entityMaker.createArc(v);
+					} else if (lastEntity.compareTo("INSERT") == 0) {
+						//System.out.println("readBlocks(): Añadimos un insert al bloque");
+						entityMaker.createInsert(v);
+					} else if (lastEntity.compareTo("SOLID") == 0) {
+						//System.out.println("readBlocks(): Añadimos un solido al bloque");
+						entityMaker.createSolid(v);
+					} else if (lastEntity.compareTo("SPLINE") == 0) {
+						entityMaker.createSpline(v);
+					} else if (lastEntity.compareTo("ATTDEF") == 0) {
+						entityMaker.createAttdef(v);
+					} else if (lastEntity.compareTo("ENDBLK") == 0) {
+						//System.out.println("readBlocks(): Cerramos un bloque"+v);
+						entityMaker.endBlk(v);
+					} else if (lastEntity.compareTo("ENDSEC") == 0) {
+						break;
+					} else
+						System.err.println("Dxf: Entidad de bloque "+lastEntity+" desconocida.");
+				}
+				v.clear();
+				v.add(grp);
+				while (true) {
+					grp = readGrp();
+					if (grp.code == 0)	break;
+					v.add(grp);
+				}
+				blkCnt++;
+			}
+			cntVeces++;
+		}
+		
+		entityMaker.testBlocks();
+		// Cuando termina de leer la sección de bloques se asegura de que todos los campos
+		// son distintos.
+		//System.out.println("readBlocks(): entityMaker.getAttributes().size() = " + entityMaker.getAttributes().size());
+		entityMaker.depureAttributes();
+		//System.out.println("readBlocks(): entityMaker.getAttributes().size() = " + entityMaker.getAttributes().size());
+		System.out.println("Dxf: Seccion BLOCKS, " + blkCnt + " elementos de bloque. "+ cntVeces + " veces.");
+	}
+	
+    /**
+     * Devuelve los objetos geométricos obtenidos de un DXF
+     */
+	public IObjList getObjects() {
+		return this.entityMaker.getObjects();
+	}
+	
+	/**
+	 * jmorell: Método que permite salvar capas al formato DXF2000.
+	 * Este método ha sido actualizado en el proceso de implementación del piloto
+	 * de CAD. En este piloto debía existir soporte para elipses, y este es uno de
+	 * los motivos que nos llevan a implementar ahora para DXF2000, puesto que el
+	 * DXF R12 no soporta elipses.
+	 * @param fName
+	 * @throws IOException
+	 */
+	public void save(String fName) throws IOException {
+		System.out.println("save: fName = " + fName);
+		long t2, t1;
+		t1 = getTime();
+		fName = DataSource.normalize(fName);
+		FileWriter fw = new FileWriter(fName);
+		// COMMENTAIRES DU TRADUCTEUR
+//		fw.write(DxfGroup.toString(999, Integer.toString(features.size()) + " features")); 
+		fw.write(DxfGroup.toString(999, "TRANSLATION BY geo.cresques.io.DxfFile"));
+		fw.write(DxfGroup.toString(999, "DATE : " + (new Date()).toString()));
+		writeHeader(fw);
+		writeTables(fw);
+		writeBlocks(fw);
+		writeEntities(fw);
+		writeObjects(fw);
+		fw.write(DxfGroup.toString(0, "EOF"));
+		fw.flush();
+		fw.close();
+		t2 = getTime();
+		System.out.println("DxfFile.save(): Tiempo salvando: " + (t2-t1)/1000 + " seg.");
+	}
+    
+	/**
+	 * Escritor de la cabecera de un DXF.
+	 * jmorell: Actualización del escritor de DXF de R12 a 2000.
+	 * @param fw, un FileWriter para escribir ficheros
+	 * @throws IOException
+	 */
+	public void writeHeader(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "SECTION"));
+		fw.write(DxfGroup.toString(2, "HEADER"));
+		fw.write(DxfGroup.toString(9, "$ACADVER"));
+			//fw.write(DxfGroup.toString(1, "AC1009"));			// DXF R12
+			fw.write(DxfGroup.toString(1, "AC1015"));			// DXF 2000
+		fw.write(DxfGroup.toString(9, "$INSBASE"));
+			fw.write(DxfGroup.toString(10, 0.0, 1));
+			fw.write(DxfGroup.toString(20, 0.0, 1));
+			fw.write(DxfGroup.toString(30, 0.0, 1));
+		fw.write(DxfGroup.toString(9, "$EXTMIN"));
+			fw.write(DxfGroup.toString(10, extent.minX(), 6));
+			fw.write(DxfGroup.toString(20, extent.minY(), 6));
+			if (dxf3DFlag) fw.write(DxfGroup.toString(30, extent.minX(), 6));
+            else fw.write(DxfGroup.toString(30, 0.0, 6));
+		fw.write(DxfGroup.toString(9, "$EXTMAX"));
+			fw.write(DxfGroup.toString(10, extent.maxX(), 6));
+			fw.write(DxfGroup.toString(20, extent.maxY(), 6));
+            if (dxf3DFlag) fw.write(DxfGroup.toString(30, extent.maxX(), 6));
+            else fw.write(DxfGroup.toString(30, 0.0, 6));
+		fw.write(DxfGroup.toString(9, "$LIMMIN"));
+			fw.write(DxfGroup.toString(10, extent.minX(), 6));
+			fw.write(DxfGroup.toString(20, extent.minY(), 6));
+		fw.write(DxfGroup.toString(9, "$LIMMAX"));
+			fw.write(DxfGroup.toString(10, extent.maxX(), 6));
+			fw.write(DxfGroup.toString(20, extent.maxY(), 6));
+		fw.write(DxfGroup.toString(9, "$ORTHOMODE")+DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(9, "$REGENMODE")+DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(9, "$FILLMODE")+	DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(9, "$QTEXTMODE")+DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(9, "$MIRRTEXT")+	DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(9, "$DRAGMODE")+	DxfGroup.toString(70, 2));
+		fw.write(DxfGroup.toString(9, "$LTSCALE")+	DxfGroup.toString(40, 1.0, 1));
+		fw.write(DxfGroup.toString(9, "$OSMODE")+	DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(9, "$ATTMODE")+	DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(9, "$TEXTSIZE")+	DxfGroup.toString(40, 0.2, 1));
+		fw.write(DxfGroup.toString(9, "$TRACEWID")+	DxfGroup.toString(40, 0.05, 2));
+		fw.write(DxfGroup.toString(9, "$TEXTSTYLE")+	DxfGroup.toString(7, "STANDARD"));
+		fw.write(DxfGroup.toString(9, "$CLAYER")+	DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(9, "$CELTYPE")+	DxfGroup.toString(6, "CONTINUOUS"));
+		fw.write(DxfGroup.toString(9, "$CECOLOR")+	DxfGroup.toString(62, 256));
+		fw.write(DxfGroup.toString(9, "$DIMSCALE")+	DxfGroup.toString(40, 1.0, 1));
+		fw.write(DxfGroup.toString(9, "$DIMASZ")+	DxfGroup.toString(40, 0.18, 2));
+		fw.write(DxfGroup.toString(9, "$DIMEXO")+	DxfGroup.toString(40, 0.0625, 4));
+		fw.write(DxfGroup.toString(9, "$DIMDLI")+	DxfGroup.toString(40, 0.38, 2));
+		fw.write(DxfGroup.toString(9, "$DIMRND")+	DxfGroup.toString(40, 0.0, 1));
+		fw.write(DxfGroup.toString(9, "$DIMDLE")+	DxfGroup.toString(40, 0.0, 1));
+		fw.write(DxfGroup.toString(9, "$DIMEXE")+	DxfGroup.toString(40, 0.18, 2));
+		fw.write(DxfGroup.toString(9, "$DIMTP")+	DxfGroup.toString(40, 0.0, 1));
+		fw.write(DxfGroup.toString(9, "$DIMTM")+	DxfGroup.toString(40, 0.0, 1));
+		fw.write(DxfGroup.toString(9, "$DIMTXT")+	DxfGroup.toString(40, 0.18, 2));
+		fw.write(DxfGroup.toString(9, "$DIMCEN")+	DxfGroup.toString(40, 0.09, 2));
+		fw.write(DxfGroup.toString(9, "$DIMTSZ")+	DxfGroup.toString(40, 0.0, 1));
+		fw.write(DxfGroup.toString(9,"$DIMTOL")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMLIM")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMTIH")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$DIMTOH")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$DIMSE1")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMSE2")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMTAD")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMZIN")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMBLK")+	DxfGroup.toString(1,""));
+		fw.write(DxfGroup.toString(9,"$DIMASO")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$DIMSHO")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$DIMPOST")+	DxfGroup.toString(1,""));
+		fw.write(DxfGroup.toString(9,"$DIMAPOST")+	DxfGroup.toString(1,""));
+		fw.write(DxfGroup.toString(9,"$DIMALT")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMALTD")+	DxfGroup.toString(70,2));
+		fw.write(DxfGroup.toString(9,"$DIMALTF")+	DxfGroup.toString(40,25.4,1));
+		fw.write(DxfGroup.toString(9,"$DIMLFAC")+	DxfGroup.toString(40,1.0,1));
+		fw.write(DxfGroup.toString(9,"$DIMTOFL")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMTVP")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$DIMTIX")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMSOXD")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMSAH")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMBLK1")+	DxfGroup.toString(1,""));
+		fw.write(DxfGroup.toString(9,"$DIMBLK2")+	DxfGroup.toString(1,""));
+		fw.write(DxfGroup.toString(9,"$DIMSTYLE")+	DxfGroup.toString(2,"STANDARD"));
+		fw.write(DxfGroup.toString(9,"$DIMCLRD")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMCLRE")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMCLRT")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$DIMTFAC")+	DxfGroup.toString(40,1.0,1));
+		fw.write(DxfGroup.toString(9,"$DIMGAP")+	DxfGroup.toString(40,0.09,2));
+		fw.write(DxfGroup.toString(9,"$LUNITS")+	DxfGroup.toString(70,2));
+		fw.write(DxfGroup.toString(9,"$LUPREC")+	DxfGroup.toString(70,4));
+		fw.write(DxfGroup.toString(9,"$AXISMODE")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$AXISUNIT"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(9,"$SKETCHINC")+	DxfGroup.toString(40,0.1,1));
+		fw.write(DxfGroup.toString(9,"$FILLETRAD")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$AUNITS")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$AUPREC")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$MENU")+		DxfGroup.toString(1,"acad"));
+		fw.write(DxfGroup.toString(9,"$ELEVATION")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PELEVATION")+DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$THICKNESS")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$LIMCHECK")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$BLIPMODE")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$CHAMFERA")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$CHAMFERB")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$SKPOLY")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$TDCREATE")+	DxfGroup.toString(40,2453116.436828704,9));
+		fw.write(DxfGroup.toString(9,"$TDUPDATE")+	DxfGroup.toString(40,2453116.436828704,9));
+		fw.write(DxfGroup.toString(9,"$TDINDWG")+	DxfGroup.toString(40,0.0000000000,10));
+		fw.write(DxfGroup.toString(9,"$TDUSRTIMER")+DxfGroup.toString(40,0.0000000000,10));
+		fw.write(DxfGroup.toString(9,"$USRTIMER")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$ANGBASE")+	DxfGroup.toString(50,0.0,1));
+		fw.write(DxfGroup.toString(9,"$ANGDIR")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$PDMODE")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$PDSIZE")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PLINEWID")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$COORDS")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$SPLFRAME")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$SPLINETYPE")+DxfGroup.toString(70,6));
+		fw.write(DxfGroup.toString(9,"$SPLINESEGS")+DxfGroup.toString(70,10));
+		fw.write(DxfGroup.toString(9,"$ATTDIA")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$ATTREQ")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$HANDLING")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$HANDSEED")+	DxfGroup.toString(5,"394B"));
+		fw.write(DxfGroup.toString(9,"$SURFTAB1")+	DxfGroup.toString(70,6));
+		fw.write(DxfGroup.toString(9,"$SURFTAB2")+	DxfGroup.toString(70,6));
+		fw.write(DxfGroup.toString(9,"$SURFTYPE")+	DxfGroup.toString(70,6));
+		fw.write(DxfGroup.toString(9,"$SURFU")+		DxfGroup.toString(70,6));
+		fw.write(DxfGroup.toString(9,"$SURFV")+		DxfGroup.toString(70,6));
+		fw.write(DxfGroup.toString(9,"$UCSNAME")+	DxfGroup.toString(2,""));
+		fw.write(DxfGroup.toString(9,"$UCSORG"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$UCSXDIR"));
+		fw.write(DxfGroup.toString(10,1.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$UCSYDIR"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,1.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PUCSNAME")+	DxfGroup.toString(2,""));
+		fw.write(DxfGroup.toString(9,"$PUCSORG"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PUCSXDIR"));
+		fw.write(DxfGroup.toString(10,1.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PUCSYDIR"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,1.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$USERI1")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$USERI2")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$USERI3")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$USERI4")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$USERI5")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$USERR1")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$USERR2")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$USERR3")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$USERR4")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$USERR5")+	DxfGroup.toString(40,0.0,1));
+		fw.write(DxfGroup.toString(9,"$WORLDVIEW")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$SHADEDGE")+	DxfGroup.toString(70,3));
+		fw.write(DxfGroup.toString(9,"$SHADEDIF")+	DxfGroup.toString(70,70));
+		fw.write(DxfGroup.toString(9,"$TILEMODE")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$MAXACTVP")+	DxfGroup.toString(70,16));
+		fw.write(DxfGroup.toString(9,"$PINSBASE"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(30,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PLIMCHECK")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$PEXTMIN"));
+		fw.write(DxfGroup.toString(10,"-1.000000E+20"));
+		fw.write(DxfGroup.toString(20,"-1.000000E+20"));
+		fw.write(DxfGroup.toString(30,"-1.000000E+20"));
+		fw.write(DxfGroup.toString(9,"$PEXTMAX"));
+		fw.write(DxfGroup.toString(10,"-1.000000E+20"));
+		fw.write(DxfGroup.toString(20,"-1.000000E+20"));
+		fw.write(DxfGroup.toString(30,"-1.000000E+20"));
+		fw.write(DxfGroup.toString(9,"$PLIMMIN"));
+		fw.write(DxfGroup.toString(10,0.0,1));
+		fw.write(DxfGroup.toString(20,0.0,1));
+		fw.write(DxfGroup.toString(9,"$PLIMMAX"));
+		fw.write(DxfGroup.toString(10,12.0,1));
+		fw.write(DxfGroup.toString(20,9.0,1));
+		fw.write(DxfGroup.toString(9,"$UNITMODE")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$VISRETAIN")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$PLINEGEN")+	DxfGroup.toString(70,1));
+		fw.write(DxfGroup.toString(9,"$PSLTSCALE")+	DxfGroup.toString(70,0));
+		fw.write(DxfGroup.toString(9,"$TREEDEPTH")+	DxfGroup.toString(70,3020));
+		fw.write(DxfGroup.toString(9,"$DWGCODEPAGE")+DxfGroup.toString(3,"ansi_1252"));
+/*		
+		fw.write(DxfGroup.toString(9, "$ELEVATION"));
+			fw.write(DxfGroup.toString(40, 0.0, 3));
+		fw.write(DxfGroup.toString(9, "$LIMCHECK"));
+			fw.write(DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(9, "$LUNITS"));
+			fw.write(DxfGroup.toString(70, 2));
+		fw.write(DxfGroup.toString(9, "$LUPREC"));
+			fw.write(DxfGroup.toString(70, 2));*/
+		fw.write(DxfGroup.toString(0, "ENDSEC"));
+	}
+	
+	/**
+	 * Escritor de la sección TABLES de un DXF.
+	 * @param fw, FileWriter
+	 * @throws IOException
+	 */
+	public void writeTables(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "SECTION"));
+		fw.write(DxfGroup.toString(2, "TABLES"));
+		// esta tampoco.
+		writeVPortTable(fw);
+		writeLTypeTable(fw);
+		writeLayerTable(fw);
+		writeStyleTable(fw);
+		// estas no son las provocan el pete.
+		writeViewTable(fw);
+		writeUCSTable(fw);
+		// esta provoca el pete. Y si no se pone las tablas aparecen
+		// incompletas y acad no abre el fichero ...
+		writeAppidTable(fw);
+		writeDimStyleTable(fw);
+		// esta no provoca pete.
+		writeBlockRecordTable(fw);
+		fw.write(DxfGroup.toString(0, "ENDSEC"));
+	}
+    
+	/**
+	 * Escritor de la tabla VPORT.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeVPortTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "VPORT"));
+		fw.write(DxfGroup.toString(5, 8));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 0));
+		/*fw.write(DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(0, "VPORT"));
+		fw.write(DxfGroup.toString(5, 30));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbViewportTableRecord"));
+		fw.write(DxfGroup.toString(2, "*Active"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(10, 0.0, 4));
+		fw.write(DxfGroup.toString(20, 0.0, 4));
+		fw.write(DxfGroup.toString(11, 1.0, 4));
+		fw.write(DxfGroup.toString(21, 1.0, 4));
+		fw.write(DxfGroup.toString(12, 286.30555555555549, 10));
+		fw.write(DxfGroup.toString(22, 148.5, 4));
+		fw.write(DxfGroup.toString(13, 0.0, 4));
+		fw.write(DxfGroup.toString(23, 0.0, 4));
+		fw.write(DxfGroup.toString(14, 10.0, 4));
+		fw.write(DxfGroup.toString(24, 10.0, 4));
+		fw.write(DxfGroup.toString(15, 10.0, 4));
+		fw.write(DxfGroup.toString(25, 10.0, 4));
+		fw.write(DxfGroup.toString(16, 0.0, 4));
+		fw.write(DxfGroup.toString(26, 0.0, 4));
+		fw.write(DxfGroup.toString(36, 1.0, 4));
+		fw.write(DxfGroup.toString(17, 0.0, 4));
+		fw.write(DxfGroup.toString(27, 0.0, 4));
+		fw.write(DxfGroup.toString(37, 0.0, 4));
+		fw.write(DxfGroup.toString(40, 297.0, 4));
+		fw.write(DxfGroup.toString(41, 1.92798353909465, 10));
+		fw.write(DxfGroup.toString(42, 50.0, 4));
+		fw.write(DxfGroup.toString(43, 0.0, 4));
+		fw.write(DxfGroup.toString(44, 0.0, 4));
+		fw.write(DxfGroup.toString(50, 0.0, 4));
+		fw.write(DxfGroup.toString(51, 0.0, 4));
+		fw.write(DxfGroup.toString(71, 0));
+		fw.write(DxfGroup.toString(72, 100));
+		fw.write(DxfGroup.toString(73, 1));
+		fw.write(DxfGroup.toString(74, 3));
+		fw.write(DxfGroup.toString(75, 1));
+		fw.write(DxfGroup.toString(76, 1));
+		fw.write(DxfGroup.toString(77, 0));
+		fw.write(DxfGroup.toString(78, 0));
+		fw.write(DxfGroup.toString(281, 0));
+		fw.write(DxfGroup.toString(65, 1));
+		fw.write(DxfGroup.toString(110, 0.0, 4));
+		fw.write(DxfGroup.toString(120, 0.0, 4));
+		fw.write(DxfGroup.toString(130, 0.0, 4));
+		fw.write(DxfGroup.toString(111, 1.0, 4));
+		fw.write(DxfGroup.toString(121, 0.0, 4));
+		fw.write(DxfGroup.toString(131, 0.0, 4));
+		fw.write(DxfGroup.toString(112, 0.0, 4));
+		fw.write(DxfGroup.toString(122, 1.0, 4));
+		fw.write(DxfGroup.toString(132, 0.0, 4));
+		fw.write(DxfGroup.toString(79, 0));
+		fw.write(DxfGroup.toString(146, 0.0, 4));*/
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla LTYPE.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeLTypeTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "LTYPE"));
+		fw.write(DxfGroup.toString(5, 5));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 1));
+		// Aqui hay que crear un objeto DxfLType como el DxfLayer también basado en
+		// el lector de DXF de Mich.
+		/*DxfTABLE_LTYPE_ITEM ltype =
+			new DxfTABLE_LTYPE_ITEM("CONTINUE", 0, "", 65, 0f, new float[0]);
+		fw.write(ltype.toString());*/
+		fw.write(DxfGroup.toString(0, "LTYPE"));
+		fw.write(DxfGroup.toString(5, 14));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbLinetypeTableRecord"));
+		fw.write(DxfGroup.toString(2, "ByBlock"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(3, ""));
+		fw.write(DxfGroup.toString(72, 65));
+		fw.write(DxfGroup.toString(73, 0));
+		fw.write(DxfGroup.toString(40, 0.0, 4));
+		fw.write(DxfGroup.toString(0, "LTYPE"));
+		fw.write(DxfGroup.toString(5, 15));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbLinetypeTableRecord"));
+		fw.write(DxfGroup.toString(2, "ByLayer"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(3, ""));
+		fw.write(DxfGroup.toString(72, 65));
+		fw.write(DxfGroup.toString(73, 0));
+		fw.write(DxfGroup.toString(40, 0.0, 4));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla LAYER.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeLayerTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "LAYER"));
+		fw.write(DxfGroup.toString(5, 2));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 1));
+		//layer = new DxfLayer(layerName, 0, 131, "CONTINUOUS");
+		//fw.write(layer.toString());
+		//fw.write(((DxfEntityMaker) entityMaker).getLayers().toDxfString());
+		fw.write(DxfGroup.toString(0, "LAYER"));
+		fw.write(DxfGroup.toString(5, 10));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbLayerTableRecord"));
+		fw.write(DxfGroup.toString(2, "0"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(62, 7));
+		fw.write(DxfGroup.toString(6, "CONTINUOUS"));
+		fw.write(DxfGroup.toString(390, "F"));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla STYLE.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeStyleTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "STYLE"));
+		fw.write(DxfGroup.toString(5, 3));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 0));
+		/*fw.write(DxfGroup.toString(70, 1));
+		DxfTABLE_STYLE_ITEM style =
+			new DxfTABLE_STYLE_ITEM("STANDARD", 0, 0f, 1f, 0f, 0, 1.0f, "xxx.txt", "yyy.txt");
+		fw.write(style.toString());*/
+		fw.write(DxfGroup.toString(0, "STYLE"));
+		fw.write(DxfGroup.toString(5, 11));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbTextStyleTableRecord"));
+		fw.write(DxfGroup.toString(2, "Standard"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(71, 0));
+		fw.write(DxfGroup.toString(40, 0.0, 4));
+		fw.write(DxfGroup.toString(41, 1.0, 4));
+		fw.write(DxfGroup.toString(42, 2.5, 4));
+		fw.write(DxfGroup.toString(50, 0.0, 4));
+		fw.write(DxfGroup.toString(3, "txt"));
+		fw.write(DxfGroup.toString(4, ""));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla VIEW.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeViewTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "VIEW"));
+		fw.write(DxfGroup.toString(5, 6));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla UCS.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeUCSTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "UCS"));
+		fw.write(DxfGroup.toString(5, 7));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla APPID.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeAppidTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "APPID"));
+		fw.write(DxfGroup.toString(5, 9));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(0, "APPID"));
+		fw.write(DxfGroup.toString(5, 12));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbRegAppTableRecord"));
+		fw.write(DxfGroup.toString(2, "ACAD"));
+		fw.write(DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla DIMSTYLE.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeDimStyleTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "DIMSTYLE"));
+		fw.write(DxfGroup.toString(5, "A"));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(100, "AcDbDimStyleTable"));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la tabla BLOCK_RECORD.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeBlockRecordTable(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "TABLE"));
+		fw.write(DxfGroup.toString(2, "BLOCK_RECORD"));
+		fw.write(DxfGroup.toString(5, 1));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTable"));
+		fw.write(DxfGroup.toString(70, 1));
+		fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
+		fw.write(DxfGroup.toString(5, "1F"));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
+		fw.write(DxfGroup.toString(2, "*Model_Space"));
+		fw.write(DxfGroup.toString(340, "22"));
+		fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
+		fw.write(DxfGroup.toString(5, "1B"));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
+		fw.write(DxfGroup.toString(2, "*Paper_Space"));
+		fw.write(DxfGroup.toString(340, "1E"));
+		fw.write(DxfGroup.toString(0, "BLOCK_RECORD"));
+		fw.write(DxfGroup.toString(5, "23"));
+		fw.write(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockTableRecord"));
+		fw.write(DxfGroup.toString(2, "*Paper_Space0"));
+		fw.write(DxfGroup.toString(340, "26"));
+		fw.write(DxfGroup.toString(0, "ENDTAB"));
+	}
+    
+	/**
+	 * Escritor de la sección de bloques por defecto de un DXF2000.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeBlocks(FileWriter fw) throws IOException {
+		fw.write(DxfGroup.toString(0, "SECTION"));
+		fw.write(DxfGroup.toString(2, "BLOCKS"));
+		fw.write(DxfGroup.toString(0, "BLOCK"));
+		fw.write(DxfGroup.toString(5, "20"));
+		fw.write(DxfGroup.toString(100, "AcDbEntity"));
+		fw.write(DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
+		fw.write(DxfGroup.toString(2, "*Model_Space"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(10, 0.0, 4));
+		fw.write(DxfGroup.toString(20, 0.0, 4));
+		fw.write(DxfGroup.toString(30, 0.0, 4));
+		fw.write(DxfGroup.toString(3, "*Model_Space"));
+		fw.write(DxfGroup.toString(1, ""));
+		fw.write(DxfGroup.toString(0, "ENDBLK"));
+		fw.write(DxfGroup.toString(5, "21"));
+		fw.write(DxfGroup.toString(100, "AcDbEntity"));
+		fw.write(DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
+		fw.write(DxfGroup.toString(0, "BLOCK"));
+		fw.write(DxfGroup.toString(5, "1C"));
+		fw.write(DxfGroup.toString(100, "AcDbEntity"));
+		fw.write(DxfGroup.toString(67, 1));
+		fw.write(DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
+		fw.write(DxfGroup.toString(2, "*Paper_Space"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(10, 0.0, 4));
+		fw.write(DxfGroup.toString(20, 0.0, 4));
+		fw.write(DxfGroup.toString(30, 0.0, 4));
+		fw.write(DxfGroup.toString(3, "*Paper_Space"));
+		fw.write(DxfGroup.toString(1, ""));
+		fw.write(DxfGroup.toString(0, "ENDBLK"));
+		fw.write(DxfGroup.toString(5, "1D"));
+		fw.write(DxfGroup.toString(100, "AcDbEntity"));
+		fw.write(DxfGroup.toString(67, 1));
+		fw.write(DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
+		fw.write(DxfGroup.toString(0, "BLOCK"));
+		fw.write(DxfGroup.toString(5, "24"));
+		fw.write(DxfGroup.toString(100, "AcDbEntity"));
+		fw.write(DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockBegin"));
+		fw.write(DxfGroup.toString(2, "*Paper_Space0"));
+		fw.write(DxfGroup.toString(70, 0));
+		fw.write(DxfGroup.toString(10, 0.0, 4));
+		fw.write(DxfGroup.toString(20, 0.0, 4));
+		fw.write(DxfGroup.toString(30, 0.0, 4));
+		fw.write(DxfGroup.toString(3, "*Paper_Space0"));
+		fw.write(DxfGroup.toString(1, ""));
+		fw.write(DxfGroup.toString(0, "ENDBLK"));
+		fw.write(DxfGroup.toString(5, "25"));
+		fw.write(DxfGroup.toString(100, "AcDbEntity"));
+		fw.write(DxfGroup.toString(8, "0"));
+		fw.write(DxfGroup.toString(100, "AcDbBlockEnd"));
+		fw.write(DxfGroup.toString(0, "ENDSEC"));
+	}
+    
+	/**
+	 * Escritor de la sección ENTITIES de entidades.
+	 * @param fw
+	 * @throws IOException
+	 */
+	public void writeEntities(FileWriter fw) throws IOException {
+		// ECRITURE DES FEATURES
+		fw.write(DxfGroup.toString(0, "SECTION"));
+		fw.write(DxfGroup.toString(2, "ENTITIES"));                
+		if (cadFlag) {
+			fw.write(((DxfEntityMaker) entityMaker).getEntities().toDxfString());
+		} else {
+			//fw.write(((DxfFeatureMaker) entityMaker).getObjects().toDxfString());			
+		}
+		fw.write(DxfGroup.toString(0, "ENDSEC"));
+	}
+	
+	/**
+	 * 050224, jmorell: Escritura de la sección OBJECTS según QCAD.
+	 * Writes a objects section. This section is needed in VER_R13.
+	 * Note that this method currently only writes a faked OBJECTS section
+	 * to make the file readable by Aut*cad.
+	 */
+	public void writeObjects(FileWriter fw) throws IOException {
+	    //int dicId, dicId2, dicId3, dicId4, dicId5;
+	    //int dicId5;
+
+	    fw.write(DxfGroup.toString(  0, "SECTION"));
+	    fw.write(DxfGroup.toString(  2, "OBJECTS"));
+	    fw.write(DxfGroup.toString(  0, "DICTIONARY"));
+	    //fw.write(DxfGroup.toString(5, 0xC);                            // C
+	    fw.write(DxfGroup.toString(  5, "C"));
+	    //fw.write(DxfGroup.toString(330, 0);
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(280, 0));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  3, "ACAD_GROUP"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle());          // D
+	    fw.write(DxfGroup.toString(350, "D"));          // D
+	    fw.write(DxfGroup.toString(  3, "ACAD_LAYOUT"));
+	    fw.write(DxfGroup.toString(350, "1A"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+0);        // 1A
+	    fw.write(DxfGroup.toString(  3, "ACAD_MLINESTYLE"));
+	    fw.write(DxfGroup.toString(350, "17"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+1);        // 17
+	    fw.write(DxfGroup.toString(  3, "ACAD_PLOTSETTINGS"));
+	    fw.write(DxfGroup.toString(350, "19"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+2);        // 19
+	    fw.write(DxfGroup.toString(  3, "ACAD_PLOTSTYLENAME"));
+	    fw.write(DxfGroup.toString(350, "E"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+3);        // E
+	    fw.write(DxfGroup.toString(  3, "AcDbVariableDictionary"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()));        // 2C
+	    fw.write(DxfGroup.toString(350, "2C"));        // 2C
+	    fw.write(DxfGroup.toString(  0, "DICTIONARY"));
+	    fw.write(DxfGroup.toString(5, "D"));
+	    //dw.handle();                                    // D
+	    //fw.write(DxfGroup.toString(330, 0xC);
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(280, 0));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  0, "ACDBDICTIONARYWDFLT"));
+	    fw.write(DxfGroup.toString(5, "E"));
+	    //dicId4 = dw.handle();                           // E
+	    //fw.write(DxfGroup.toString(330, 0xC);                       // C
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  3, "Normal"));
+	    fw.write(DxfGroup.toString(350, "F"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // F
+	    fw.write(DxfGroup.toString(100, "AcDbDictionaryWithDefault"));
+	    fw.write(DxfGroup.toString(340, "F"));
+	    //fw.write(DxfGroup.toString(340, dw.getNextHandle()+5);        // F
+	    fw.write(DxfGroup.toString(  0, "ACDBPLACEHOLDER"));
+	    fw.write(DxfGroup.toString(5, "F"));
+	    //dw.handle();                                    // F
+	    //fw.write(DxfGroup.toString(330, dicId4);                      // E
+	    fw.write(DxfGroup.toString(  0, "DICTIONARY"));
+	    //dicId3 = dw.handle();                           // 17
+	    fw.write(DxfGroup.toString(5, "17"));
+	    //fw.write(DxfGroup.toString(330, 0xC);                       // C
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(280, 0));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  3, "Standard"));
+	    fw.write(DxfGroup.toString(350, "18"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // 18
+	    fw.write(DxfGroup.toString(  0, "MLINESTYLE"));
+	    fw.write(DxfGroup.toString(5, "18"));
+	    //dw.handle();                                    // 18
+	    //fw.write(DxfGroup.toString(330, dicId3);                      // 17
+	    fw.write(DxfGroup.toString(100, "AcDbMlineStyle"));
+	    fw.write(DxfGroup.toString(  2, "STANDARD"));
+	    fw.write(DxfGroup.toString( 70, 0));
+	    fw.write(DxfGroup.toString(  3, ""));
+	    fw.write(DxfGroup.toString( 62, 256));
+	    //dw.dxfReal( 51, 90.0);
+	    fw.write(DxfGroup.toString( 51, 90.0, 4));
+	    fw.write(DxfGroup.toString( 52, 90.0, 4));
+	    fw.write(DxfGroup.toString( 71, 2));
+	    fw.write(DxfGroup.toString( 49, 0.5, 4));
+	    fw.write(DxfGroup.toString( 62, 256));
+	    fw.write(DxfGroup.toString(  6, "BYLAYER"));
+	    fw.write(DxfGroup.toString( 49, -0.5, 4));
+	    fw.write(DxfGroup.toString( 62, 256));
+	    fw.write(DxfGroup.toString(  6, "BYLAYER"));
+	    fw.write(DxfGroup.toString(  0, "DICTIONARY"));
+	    fw.write(DxfGroup.toString(5, "19"));
+	    //dw.handle();                           // 17
+	    //fw.write(DxfGroup.toString(330, 0xC);                       // C
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(280, 0));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  0, "DICTIONARY"));
+	    //dicId2 = dw.handle();                           // 1A
+	    fw.write(DxfGroup.toString(5, "1A"));
+	    //fw.write(DxfGroup.toString(330, 0xC);
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  3, "Layout1"));
+	    fw.write(DxfGroup.toString(350, "1E"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+2);        // 1E
+	    fw.write(DxfGroup.toString(  3, "Layout2"));
+	    fw.write(DxfGroup.toString(350, "26"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+4);        // 26
+	    fw.write(DxfGroup.toString(  3, "Model"));
+	    fw.write(DxfGroup.toString(350, "22"));
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+5);        // 22
+
+	    fw.write(DxfGroup.toString(  0, "LAYOUT"));
+	    fw.write(DxfGroup.toString(5, "1E"));
+	    //dw.handle();                                    // 1E
+	    //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
+	    fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
+	    fw.write(DxfGroup.toString(  1, ""));
+	    fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
+	    fw.write(DxfGroup.toString(  4, ""));
+	    fw.write(DxfGroup.toString(  6, ""));
+	    fw.write(DxfGroup.toString( 40, 0.0, 4));
+	    fw.write(DxfGroup.toString( 41, 0.0, 4));
+	    fw.write(DxfGroup.toString( 42, 0.0, 4));
+	    fw.write(DxfGroup.toString( 43, 0.0, 4));
+	    fw.write(DxfGroup.toString( 44, 0.0, 4));
+	    fw.write(DxfGroup.toString( 45, 0.0, 4));
+	    fw.write(DxfGroup.toString( 46, 0.0, 4));
+	    fw.write(DxfGroup.toString( 47, 0.0, 4));
+	    fw.write(DxfGroup.toString( 48, 0.0, 4));
+	    fw.write(DxfGroup.toString( 49, 0.0, 4));
+	    fw.write(DxfGroup.toString(140, 0.0, 4));
+	    fw.write(DxfGroup.toString(141, 0.0, 4));
+	    fw.write(DxfGroup.toString(142, 1.0, 4));
+	    fw.write(DxfGroup.toString(143, 1.0, 4));
+	    fw.write(DxfGroup.toString( 70, 688));
+	    fw.write(DxfGroup.toString( 72, 0));
+	    fw.write(DxfGroup.toString( 73, 0));
+	    fw.write(DxfGroup.toString( 74, 5));
+	    fw.write(DxfGroup.toString(  7, ""));
+	    fw.write(DxfGroup.toString( 75, 16));
+	    fw.write(DxfGroup.toString(147, 1.0, 4));
+	    fw.write(DxfGroup.toString(148, 0.0, 4));
+	    fw.write(DxfGroup.toString(149, 0.0, 4));
+	    fw.write(DxfGroup.toString(100, "AcDbLayout"));
+	    fw.write(DxfGroup.toString(  1, "Layout1"));
+	    fw.write(DxfGroup.toString( 70, 1));
+	    fw.write(DxfGroup.toString( 71, 1));
+	    fw.write(DxfGroup.toString( 10, 0.0, 4));
+	    fw.write(DxfGroup.toString( 20, 0.0, 4));
+	    fw.write(DxfGroup.toString( 11, 420.0, 4));
+	    fw.write(DxfGroup.toString( 21, 297.0, 4));
+	    fw.write(DxfGroup.toString( 12, 0.0, 4));
+	    fw.write(DxfGroup.toString( 22, 0.0, 4));
+	    fw.write(DxfGroup.toString( 32, 0.0, 4));
+	    fw.write(DxfGroup.toString( 14, 1.000000000000000E+20, 4));
+	    fw.write(DxfGroup.toString( 24, 1.000000000000000E+20, 4));
+	    fw.write(DxfGroup.toString( 34, 1.000000000000000E+20, 4));
+	    fw.write(DxfGroup.toString( 15, -1.000000000000000E+20, 4));
+	    fw.write(DxfGroup.toString( 25, -1.000000000000000E+20, 4));
+	    fw.write(DxfGroup.toString( 35, -1.000000000000000E+20, 4));
+	    fw.write(DxfGroup.toString(146, 0.0, 4));
+	    fw.write(DxfGroup.toString( 13, 0.0, 4));
+	    fw.write(DxfGroup.toString( 23, 0.0, 4));
+	    fw.write(DxfGroup.toString( 33, 0.0, 4));
+	    fw.write(DxfGroup.toString( 16, 1.0, 4));
+	    fw.write(DxfGroup.toString( 26, 0.0, 4));
+	    fw.write(DxfGroup.toString( 36, 0.0, 4));
+	    fw.write(DxfGroup.toString( 17, 0.0, 4));
+	    fw.write(DxfGroup.toString( 27, 1.0, 4));
+	    fw.write(DxfGroup.toString( 37, 0.0, 4));
+	    fw.write(DxfGroup.toString( 76, 0));
+	    //fw.write(DxfGroup.toString(330, dw.getPaperSpaceHandle());    // 1B
+	    fw.write(DxfGroup.toString(330, "1B"));
+	    fw.write(DxfGroup.toString(  0, "LAYOUT"));
+	    fw.write(DxfGroup.toString(5, "22"));
+	    //dw.handle();                                    // 22
+	    //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
+	    fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
+	    fw.write(DxfGroup.toString(  1, ""));
+	    fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
+	    fw.write(DxfGroup.toString(  4, ""));
+	    fw.write(DxfGroup.toString(  6, ""));
+	    fw.write(DxfGroup.toString( 40, 0.0, 4));
+	    fw.write(DxfGroup.toString( 41, 0.0, 4));
+	    fw.write(DxfGroup.toString( 42, 0.0, 4));
+	    fw.write(DxfGroup.toString( 43, 0.0, 4));
+	    fw.write(DxfGroup.toString( 44, 0.0, 4));
+	    fw.write(DxfGroup.toString( 45, 0.0, 4));
+	    fw.write(DxfGroup.toString( 46, 0.0, 4));
+	    fw.write(DxfGroup.toString( 47, 0.0, 4));
+	    fw.write(DxfGroup.toString( 48, 0.0, 4));
+	    fw.write(DxfGroup.toString( 49, 0.0, 4));
+	    fw.write(DxfGroup.toString(140, 0.0, 4));
+	    fw.write(DxfGroup.toString(141, 0.0, 4));
+	    fw.write(DxfGroup.toString(142, 1.0, 4));
+	    fw.write(DxfGroup.toString(143, 1.0, 4));
+	    fw.write(DxfGroup.toString( 70, 1712));
+	    fw.write(DxfGroup.toString( 72, 0));
+	    fw.write(DxfGroup.toString( 73, 0));
+	    fw.write(DxfGroup.toString( 74, 0));
+	    fw.write(DxfGroup.toString(  7, ""));
+	    fw.write(DxfGroup.toString( 75, 0));
+	    fw.write(DxfGroup.toString(147, 1.0, 4));
+	    fw.write(DxfGroup.toString(148, 0.0, 4));
+	    fw.write(DxfGroup.toString(149, 0.0, 4));
+	    fw.write(DxfGroup.toString(100, "AcDbLayout"));
+	    fw.write(DxfGroup.toString(  1, "Model"));
+	    fw.write(DxfGroup.toString( 70, 1));
+	    fw.write(DxfGroup.toString( 71, 0));
+	    fw.write(DxfGroup.toString( 10, 0.0, 4));
+	    fw.write(DxfGroup.toString( 20, 0.0, 4));
+	    fw.write(DxfGroup.toString( 11, 12.0, 4));
+	    fw.write(DxfGroup.toString( 21, 9.0, 4));
+	    fw.write(DxfGroup.toString( 12, 0.0, 4));
+	    fw.write(DxfGroup.toString( 22, 0.0, 4));
+	    fw.write(DxfGroup.toString( 32, 0.0, 4));
+	    fw.write(DxfGroup.toString( 14, 0.0, 4));
+	    fw.write(DxfGroup.toString( 24, 0.0, 4));
+	    fw.write(DxfGroup.toString( 34, 0.0, 4));
+	    fw.write(DxfGroup.toString( 15, 0.0, 4));
+	    fw.write(DxfGroup.toString( 25, 0.0, 4));
+	    fw.write(DxfGroup.toString( 35, 0.0, 4));
+	    fw.write(DxfGroup.toString(146, 0.0, 4));
+	    fw.write(DxfGroup.toString( 13, 0.0, 4));
+	    fw.write(DxfGroup.toString( 23, 0.0, 4));
+	    fw.write(DxfGroup.toString( 33, 0.0, 4));
+	    fw.write(DxfGroup.toString( 16, 1.0, 4));
+	    fw.write(DxfGroup.toString( 26, 0.0, 4));
+	    fw.write(DxfGroup.toString( 36, 0.0, 4));
+	    fw.write(DxfGroup.toString( 17, 0.0, 4));
+	    fw.write(DxfGroup.toString( 27, 1.0, 4));
+	    fw.write(DxfGroup.toString( 37, 0.0, 4));
+	    fw.write(DxfGroup.toString( 76, 0));
+	    //fw.write(DxfGroup.toString(330, dw.getModelSpaceHandle());    // 1F
+	    fw.write(DxfGroup.toString(330, "1F"));
+	    fw.write(DxfGroup.toString(  0, "LAYOUT"));
+	    //dw.handle();                                    // 26
+	    fw.write(DxfGroup.toString(5, "26"));
+	    //fw.write(DxfGroup.toString(330, dicId2);                      // 1A
+	    fw.write(DxfGroup.toString(100, "AcDbPlotSettings"));
+	    fw.write(DxfGroup.toString(  1, ""));
+	    fw.write(DxfGroup.toString(  2, "C:\\Program Files\\AutoCAD 2002\\plotters\\DWF ePlot (optimized for plotting).pc3"));
+	    fw.write(DxfGroup.toString(  4, ""));
+	    fw.write(DxfGroup.toString(  6, ""));
+	    fw.write(DxfGroup.toString( 40, 0.0, 4));
+	    fw.write(DxfGroup.toString( 41, 0.0, 4));
+	    fw.write(DxfGroup.toString( 42, 0.0, 4));
+	    fw.write(DxfGroup.toString( 43, 0.0, 4));
+	    fw.write(DxfGroup.toString( 44, 0.0, 4));
+	    fw.write(DxfGroup.toString( 45, 0.0, 4));
+	    fw.write(DxfGroup.toString( 46, 0.0, 4));
+	    fw.write(DxfGroup.toString( 47, 0.0, 4));
+	    fw.write(DxfGroup.toString( 48, 0.0, 4));
+	    fw.write(DxfGroup.toString( 49, 0.0, 4));
+	    fw.write(DxfGroup.toString(140, 0.0, 4));
+	    fw.write(DxfGroup.toString(141, 0.0, 4));
+	    fw.write(DxfGroup.toString(142, 1.0, 4));
+	    fw.write(DxfGroup.toString(143, 1.0, 4));
+	    fw.write(DxfGroup.toString( 70, 688));
+	    fw.write(DxfGroup.toString( 72, 0));
+	    fw.write(DxfGroup.toString( 73, 0));
+	    fw.write(DxfGroup.toString( 74, 5));
+	    fw.write(DxfGroup.toString(  7, ""));
+	    fw.write(DxfGroup.toString( 75, 16));
+	    fw.write(DxfGroup.toString(147, 1.0, 4));
+	    fw.write(DxfGroup.toString(148, 0.0, 4));
+	    fw.write(DxfGroup.toString(149, 0.0, 4));
+	    fw.write(DxfGroup.toString(100, "AcDbLayout"));
+	    fw.write(DxfGroup.toString(  1, "Layout2"));
+	    fw.write(DxfGroup.toString( 70, 1));
+	    fw.write(DxfGroup.toString( 71, 2));
+	    fw.write(DxfGroup.toString( 10, 0.0, 4));
+	    fw.write(DxfGroup.toString( 20, 0.0, 4));
+	    fw.write(DxfGroup.toString( 11, 12.0, 4));
+	    fw.write(DxfGroup.toString( 21, 9.0, 4));
+	    fw.write(DxfGroup.toString( 12, 0.0, 4));
+	    fw.write(DxfGroup.toString( 22, 0.0, 4));
+	    fw.write(DxfGroup.toString( 32, 0.0, 4));
+	    fw.write(DxfGroup.toString( 14, 0.0, 4));
+	    fw.write(DxfGroup.toString( 24, 0.0, 4));
+	    fw.write(DxfGroup.toString( 34, 0.0, 4));
+	    fw.write(DxfGroup.toString( 15, 0.0, 4));
+	    fw.write(DxfGroup.toString( 25, 0.0, 4));
+	    fw.write(DxfGroup.toString( 35, 0.0, 4));
+	    fw.write(DxfGroup.toString(146, 0.0, 4));
+	    fw.write(DxfGroup.toString( 13, 0.0, 4));
+	    fw.write(DxfGroup.toString( 23, 0.0, 4));
+	    fw.write(DxfGroup.toString( 33, 0.0, 4));
+	    fw.write(DxfGroup.toString( 16, 1.0, 4));
+	    fw.write(DxfGroup.toString( 26, 0.0, 4));
+	    fw.write(DxfGroup.toString( 36, 0.0, 4));
+	    fw.write(DxfGroup.toString( 17, 0.0, 4));
+	    fw.write(DxfGroup.toString( 27, 1.0, 4));
+	    fw.write(DxfGroup.toString( 37, 0.0, 4));
+	    fw.write(DxfGroup.toString( 76, 0));
+	    //fw.write(DxfGroup.toString(330, dw.getPaperSpace0Handle());   // 23
+	    fw.write(DxfGroup.toString(330, "23"));
+	    fw.write(DxfGroup.toString(  0, "DICTIONARY"));
+	    fw.write(DxfGroup.toString(5, 0x2E));
+	    //dicId5 =
+	    //dw.handle();                           // 2C
+	    //fw.write(DxfGroup.toString(330, 0xC);                       // C
+	    fw.write(DxfGroup.toString(100, "AcDbDictionary"));
+	    fw.write(DxfGroup.toString(281, 1));
+	    fw.write(DxfGroup.toString(  3, "DIMASSOC"));
+	    //fw.write(DxfGroup.toString(350, 0x2F);
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle()+1);        // 2E
+	    fw.write(DxfGroup.toString(350, 0x30));        // 2E
+	    fw.write(DxfGroup.toString(  3, "HIDETEXT"));
+	    //fw.write(DxfGroup.toString(350, 0x2E);
+	    //fw.write(DxfGroup.toString(350, dw.getNextHandle());        // 2D
+	    fw.write(DxfGroup.toString(350, 0x2F));        // 2D
+	    fw.write(DxfGroup.toString(  0, "DICTIONARYVAR"));
+	    fw.write(DxfGroup.toString(5, 0x2F));
+	    //dw.handle();                                    // 2E
+	    //fw.write(DxfGroup.toString(330, dicId5);                      // 2C
+	    fw.write(DxfGroup.toString(100, "DictionaryVariables"));
+	    fw.write(DxfGroup.toString(280, 0));
+	    fw.write(DxfGroup.toString(  1, 2));
+	    fw.write(DxfGroup.toString(  0, "DICTIONARYVAR"));
+	    fw.write(DxfGroup.toString(5, 0x30));
+	    //dw.handle();                                    // 2D
+	    //fw.write(DxfGroup.toString(330, dicId5);                      // 2C
+	    fw.write(DxfGroup.toString(100, "DictionaryVariables"));
+	    fw.write(DxfGroup.toString(280, 0));
+	    fw.write(DxfGroup.toString(  1, 1));
+		fw.write(DxfGroup.toString(0, "ENDSEC"));
+	}
+	
+    /**
+     * Habilita la reproyección cartográfica
+     */
+	public void reProject(ICoordTrans rp) {
+		System.out.println("Dxf: reproyectando ...");
+		entityMaker.reProject(rp);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.io.GeoFile#close()
+	 */
+	public void close() {
+		// TODO Auto-generated method stub
+		
+	}
+    
+	/**
+     * Informa sobre si estamos trabajando con el modelo de datos GIS o con el de CAD
+	 * @return Returns the cadFlag.
+	 */
+	public boolean isCadFlag() {
+		return cadFlag;
+	}
+    
+	/**
+     * Establece si trabajamos con el modelo de datos GIS o con el de CAD
+	 * @param cadFlag The cadFlag to set.
+	 */
+	public void setCadFlag(boolean cadFlag) {
+		this.cadFlag = cadFlag;
+	}
+
+    /**
+     * @return Returns the dxf3DFlag.
+     */
+    public boolean isDxf3DFlag() {
+        return dxf3DFlag;
+    }
+
+    /**
+     * @param dxf3DFlag The dxf3DFlag to set.
+     */
+    public void setDxf3DFlag(boolean dxf3DFlag) {
+        this.dxf3DFlag = dxf3DFlag;
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfFile.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroupVector.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroupVector.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroupVector.java	(revision 10281)
@@ -0,0 +1,128 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.util.Vector;
+
+
+/**
+ * Vector de DxfGroup. Auxiliar para leer ficheros .dxf
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class DxfGroupVector extends Vector {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    /**
+     * Valor del dato del codigo de grupo especificado.
+     *
+     * @param code Código de grupo dxf.
+     * @return Valor del data del grupo dxf, null si no existe.
+     */
+    public boolean hasCode(int code) {
+        DxfGroup grp = null;
+
+        for (int i = 0; i < size(); i++) {
+            grp = (DxfGroup) get(i);
+
+            if (grp.code == code) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+    
+    /**
+     * Devuelve la información contenida en un DxfGroup.
+     * @param code, la parte concreta del DxfGroup a la que queremos acceder
+     * @return
+     */
+    public Object getData(int code) {
+        DxfGroup grp = null;
+
+        for (int i = 0; i < size(); i++) {
+            grp = (DxfGroup) get(i);
+
+            if (grp.code == code) {
+                return grp.data;
+            }
+        }
+
+        return null;
+    }
+    
+    /**
+     * Obtiene la información contenida en un DxfGroup en forma de String
+     * @param code
+     * @return
+     */
+    public String getDataAsString(int code) {
+        return (String) getData(code);
+    }
+    
+    /**
+     * Obtiene la información contenida en un DxfGroup en forma de double
+     * @param code
+     * @return
+     */
+    public double getDataAsDouble(int code) {
+        Double f = (Double) getData(code);
+
+        if (f == null) {
+            System.err.println(this);
+        }
+
+        return f.doubleValue();
+    }
+    
+    /**
+     * Obtiene la información contenida en un DxfGroup en forma de integer
+     * @param code
+     * @return
+     */
+    public int getDataAsInt(int code) {
+        Integer i = (Integer) getData(code);
+
+        if (i == null) {
+            System.err.println(this);
+        }
+
+        return i.intValue();
+    }
+    
+    /**
+     * Permite obtener el contenido de un DxfGroup en forma de String
+     */
+    public String toString() {
+        String str = "DxfGroupVector[";
+        DxfGroup grp = null;
+
+        for (int i = 0; i < size(); i++) {
+            grp = (DxfGroup) get(i);
+            str += ("(" + grp.code + ":" + grp.data + "),");
+        }
+
+        return str;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroupVector.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/JpegWriter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/JpegWriter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/JpegWriter.java	(revision 10281)
@@ -0,0 +1,395 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+import org.cresques.px.PxRaster;
+
+import es.gva.cit.jgdal.Gdal;
+import es.gva.cit.jgdal.GdalDriver;
+import es.gva.cit.jgdal.GdalException;
+
+
+/**
+ * Driver para la escritura de Jpeg.
+ * Este driver utiliza GdalWriter para salvar Jpeg. 
+ * La escritura de un jpeg no es posible utilizando un servidor de datos 
+ * como el que usan los drivers comunes por lo que será necesario salvar antes
+ * a Tif con el driver de Gdal para posteriormente convertir la imagen completa
+ * a jpg.
+ *  
+ @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class JpegWriter extends GeoRasterWriter {
+    
+	public final int 				windowSizeX = 386;
+    public final int 				windowSizeY = 220;
+    public final int 				panelSizeX = 358;
+    public final int 				panelSizeY = 125;
+    
+	//Datos de registro de drivers
+    static {
+        GeoRasterWriter.registerWriterExtension("jpg", JpegWriter.class);
+        //GeoRasterWriter.registerWriterExtension("jpeg", JpegWriter.class);
+        typeList.put("jpg", "Jpeg");
+        //typeList.put("jpeg", "Jpeg");
+    }
+
+    private GdalWriter				gdalWriter = null;
+    private JpegSupportOptions		support = null;
+    private String					outTif = null;
+    private String					outJpg = null;
+    private String[]				props = null;
+    private ViewPortData			viewPort =  null;
+    private String[] 				params = null; //Parámetros de creación del dataset.
+        
+    /**
+     * Constructor para la obtención de parámetros del driver
+     * @param drvType        Tipo de driver
+     */
+    public JpegWriter(String fileName) {
+    	ident = fileName.toLowerCase().substring(fileName.lastIndexOf(".") + 1);
+    	driver = (String)typeList.get(ident);
+    	support = new JpegSupportOptions(driver);
+    	gdalWriter = new GdalWriter(fileName);
+    	gdalWriter.getSupport().setTfw(true);
+    	setParams();
+    }
+
+    /**
+     * Constructor para salvar una sola imagen completa
+     * @param raster        PxRaster de la imagen de  origen
+     * @param outfilename        Nombre del fichero de salida
+     * @param infilename        Nombre del fichero de entrada
+     * @param drvType        Tipo de driver
+     */
+    public JpegWriter(PxRaster raster, String outFileName, String inFileName) throws GdalException, IOException {
+    	ident = inFileName.toLowerCase().substring(inFileName.lastIndexOf(".") + 1);
+    	driver = (String)typeList.get(ident);
+    	support = new JpegSupportOptions(driver);
+    	gdalWriter = new GdalWriter(raster, outFileName, inFileName);
+    	gdalWriter.getSupport().setTfw(true);
+    	setParams();
+    }
+
+    /**
+     * Constructor para salvar datos servidos por el cliente
+     * @param dataWriter        Objeto servidor de datos para el driver de escritura
+     * @param outSizeX        Número de pixels en X de la imagen de salida
+     * @param outSizeY        Número de pixels en Y de la imagen de salida
+     * @param outFilename        Fichero de salida
+     * @param extentMaxX        Posición en X máxima del extent
+     * @param extentMinX        Posición en X mínima del extent
+     * @param extentMaxY        Posición en Y máxima del extent
+     * @param extentMinY        Posición en Y mínima del extent
+     * @param nBands        Número de bandas
+     * @param drvType        Tipo de driver
+     * @throws GdalException
+     * @throws IOException
+     */
+    public JpegWriter(	IDataWriter dataWriter, 
+     					String outFileName, 
+     					Integer blockSize, 
+     					Integer nBands,
+     					ViewPortData vp,
+     					Integer compresion,
+     					Integer outSizeX,
+     					Integer outSizeY,
+     					Integer dataType)throws GdalException, IOException {
+    	ident = outFileName.toLowerCase().substring(outFileName.lastIndexOf(".") + 1);
+    	driver = (String)typeList.get(ident);
+    	support = new JpegSupportOptions(driver);
+    	outJpg = outFileName;
+    	outTif = outFileName.substring(0, outFileName.lastIndexOf(".") + 1);
+    	outTif = outTif + "tif";
+    	this.viewPort = vp;
+    	gdalWriter = new GdalWriter(dataWriter, outTif, blockSize, nBands, 
+    								vp, compresion, outSizeX, outSizeY, dataType);
+    	gdalWriter.getSupport().setTfw(true);
+    	setParams();
+    }
+
+   
+    /**
+     * Asigna el tipo de driver con el que se salvará la imagen
+     * @param drvType        Tipo de driver
+     */
+    public void setDriverType(String drvType) {
+        gdalWriter.setDriverType(drvType);
+    }
+    
+    /**
+     * A partir de un elemento que contiene una propiedad y un valor
+     * lo parsea y asigna el valor a su variable.
+     * @param propValue        elemento con la forma propiedad=valor
+     */
+    private void readProperty(String propValue) {
+        String prop = propValue.substring(0, propValue.indexOf("="));
+
+        if (propValue.startsWith(prop)) {
+            String value = propValue.substring(propValue.indexOf("=") + 1,
+                                               propValue.length());
+
+            if ((value != null) && !value.equals("")) {
+                if (prop.equals("COMPRESSION"))
+                	support.setCompressionDefault(Integer.parseInt(value));
+                
+                if (prop.equals("PROGRESSIVE")) {
+                    boolean prog = true;
+
+                    if (value.equals("yes")) {
+                        prog = true;
+                    } else {
+                        prog = false;
+                    }
+
+                    support.setProgressive(prog);
+                }
+            }
+        }
+    }
+    
+    /**
+     * Asigna propiedades al driver a partir de un vector de
+     * strings donde cada elemento tiene la estructura de
+     * propiedad=valor.
+     * @param props        Propiedades
+     */
+    public void setProps(String[] props) {
+    	this.props = props;
+        for (int iProps = 0; iProps < props.length; iProps++)
+            readProperty(props[iProps]);
+    	setParams();
+    }
+
+    /**
+     * Realiza la función de compresión a partir de un GeoRasterFile.
+     * @throws IOException
+     */
+    public void fileWrite() throws IOException {
+    	gdalWriter.fileWrite();
+    }
+
+    /**
+     * Realiza una copia en el formato especificado.
+     * @throws IOException
+     */
+    public static void createCopy(GdalDriver driverDst, String dst, String src, 
+    		boolean bstrict, String[] params, IProjection proj) throws IOException, GdalException {
+    	GdalWriter.createCopy(driverDst, dst, src, bstrict, params, proj);
+    }
+    
+    /**
+     *Asigna parámetros de creación del dataset de Gdal
+     */
+    private void setParams() {
+        params = new String[3];
+
+        params[0] = new String("WORLDFILE=ON");
+        params[1] = new String("QUALITY=" + support.getCompressionRealValue());
+        String prog = null;
+
+        if (support.isProgressive()) {
+        	prog = new String("ON");
+        } else {
+        	prog = new String("NO");
+        }
+        params[2] = new String("PROGRESSIVE=" + prog); 
+    }
+    
+    /**
+     * Realiza la escritura de datos con los datos que le pasa el cliente.
+     * @throws IOException
+     */
+    public void dataWrite() throws IOException {
+        gdalWriter.dataWrite();
+        if(gdalWriter.isWrite()){
+	        gdalWriter.writeClose();
+	        if(outTif != null){
+	        	GdalDriver driver = null;
+	        	try{
+	    			driver = Gdal.getDriverByName("JPEG");
+	    		
+	    			GdalWriter.createCopy(driver, outJpg, outTif, false, 
+											params, viewPort.getProjection());
+	        	}catch(GdalException exc){
+	    		    System.err.println("No se ha podido obtener el driver.");
+	    		}
+	        	File file = new File(outTif);
+	        	file.delete();	
+	        }
+        }
+    }
+
+    /**
+     * Cierra el compresor ecw.
+     * @throws GdalException
+     */
+    public void writeClose() {
+    	//El close del tif se hizo en dataWrite
+    }
+
+    /**
+     * Cancela el salvado de datos.
+     */
+    public void writeCancel() {
+    	gdalWriter.setWrite(false);
+    }
+    
+    /**
+     * Devuelve la configuración de la ventana de dialogo
+     * para las propiedades del driver de escritura de Gdal.
+     * @return XML de configuración del dialogo.
+     */
+    public String getXMLPropertiesDialog() {
+    	StringBuffer options = null;
+        options = new StringBuffer();
+        options.append("<window sizex=\"" + windowSizeX + "\" sizey=\"" +
+        		windowSizeY + "\">");
+        options.append("<panel sizex=\"" + panelSizeX + "\" sizey=\"" +
+        		panelSizeY + "\" layout=\"" + gdalWriter.panelLayout +
+                       "\" border=\"yes\">");
+
+        options.append("<panel layout=\"FlowLayout\" position=\"North\" align=\"left\">");
+        options.append("<label>Block size:</label>");
+        options.append("<combo ident=\"BLOCKSIZE\" selected=\"" +
+        		gdalWriter.getSupport().getBlockSize() + "\">");
+
+        for (int i = 0; i < gdalWriter.getSupport().getBlockSizeList().length; i++)
+            options.append("<elem>" + gdalWriter.getSupport().getBlockSizeList()[i] +
+                           "</elem>");
+
+        options.append("</combo>");
+        options.append("</panel>");
+
+        
+        options.append("<panel layout=\"FlowLayout\" position=\"Center\">");
+        options.append("<slider ident=\"COMPRESSION\" name=\"Compression\" sizex=\"370\" sizey=\"20\">");
+        options.append("<min>" + support.getCompressionList()[0] +
+                       "</min>");
+        options.append("<max>" + support.getCompressionList()[1] +
+                       "</max>");
+        options.append("<value>" + support.getCompressionDefault() + "</value>");
+        options.append("<minorspacing>" + support.getCompressionList()[3] +
+                       "</minorspacing>");
+        options.append("<majorspacing>" + support.getCompressionList()[4] +
+                       "</majorspacing>");
+        options.append("</slider>");
+        options.append("</panel>");
+        
+
+        options.append("<panel layout=\"FlowLayout\" position=\"South\" align=\"left\">");
+        options.append("<label>Progressive:</label>");
+        String sel = null;
+        if (support.isProgressive()) {
+            sel = new String("yes");
+        } else {
+            sel = new String("no");
+        }
+        options.append("<check ident=\"PROGRESSIVE\" selected=\"" + sel +
+                       "\" text=\"\">");
+        options.append("</check>");
+
+        options.append("</panel>");
+        
+        options.append("</panel>");
+        options.append("</window>");
+
+        return options.toString();
+    }
+    
+    /**
+    *
+    * @author Nacho Brodin (brodin_ign@gva.es)
+    *
+    * Opciones que soporta el driver de escritura de Jpeg.
+    */
+   public class JpegSupportOptions extends WriterSupportOptions {
+       private boolean 		progressive = true; 
+       private String[] 	compresionListValues = { "10", "100", "16", "5", "30" }; //min, max, valor defecto, intervalo pequeño, intervalo grande;
+       private int 			compresionDefaultValue = 16;
+       
+       public JpegSupportOptions(String ext) {
+           super(ext);
+       }
+
+       /**
+        * Obtiene la compresion seleccionada
+        * @return Compresión seleccionada
+        */
+       public int getCompressionDefault() {
+           return compresionDefaultValue;
+       }
+
+       /**
+        * Obtiene la compresion seleccionada en el valor real que necesita gdal. Por defecto gdal
+        * tiene un valor de 75 en un rango de 10-100 donde 10 es la máxima compresión. 
+        * Como el slider está en un rango de 0-100 donde el 100 es la máxima compresión y 0 
+        * la mínima hay que hacer una conversión.
+        * @return Compresión seleccionada
+        */
+       public int getCompressionRealValue() {
+           return 110 - compresionDefaultValue;
+       }
+
+       
+       /**
+        * Obtiene la lista de los valores para la generación de la barra de
+        * compresión. Son cinco valores mínimo, máximo, seleccionado,
+        * intervalo pequeño, intervalo grande.
+        * @return lista de valores de compresión
+        */
+       public String[] getCompressionList() {
+           return compresionListValues;
+       }
+       
+       /**
+        * Asigna el nivel de compresiónpor defecto
+        * @param compress        Nivel de compresión
+        */
+       public void setCompressionDefault(int compress) {
+           this.compresionDefaultValue = compress;
+       }
+       
+       /**
+        * Asigna la lista de valores de compresión
+        * @param compresion        lista de valores
+        */
+       public void setCompressionList(String[] compresion) {
+           this.compresionListValues = compresion;
+       }
+       
+	   public boolean isProgressive() {
+			return progressive;
+	   }
+
+	   public void setProgressive(boolean progressive) {
+			this.progressive = progressive;
+	   }
+   }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/JpegWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/WriterSupportOptions.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/WriterSupportOptions.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/WriterSupportOptions.java	(revision 10281)
@@ -0,0 +1,95 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+
+/**
+* Opciones soportadas por los drivers de escritura
+* @author Nacho Brodin (brodin_ign@gva.es)
+*/
+public class WriterSupportOptions {
+    private String extension = null;
+    private String[] blockSizeList = {
+                                         "1", "8", "16", "32", "64", "128",
+                                         "256", "512", "1024"
+                                     };
+    private boolean georef = true;
+    private int blockSizeDefault = 1;
+
+    /**
+     * Constructor
+     * @param extension        Extensión del driver
+     */
+    public WriterSupportOptions(String extension) {
+        this.extension = extension;
+    }
+
+    /**
+     * Asigna el tamaño de bloque que se lee de una vez en la imagen origen
+     * @param blockSize        Tamaño de bloque
+     */
+    public void setBlockSize(int blockSize) {
+        this.blockSizeDefault = blockSize;
+    }
+
+    /**
+     * Se asigna true o false si se desea o no que el fichero de salida tenga georeferenciación.
+     * @param geor true salva con georeferenciación
+     */
+    public void setWriteGeoref(boolean geor) {
+        this.georef = geor;
+    }
+
+    /**
+     * Obtiene el valor del flag que dice si se desea o no salvar con georeferenciación
+     * @return        true si se desea salvar con georeferenciación
+     */
+    public boolean getGeoref() {
+        return georef;
+    }
+
+    /**
+     * Obtiene el tamaño de bloque seleccionado
+     * @return        Tamaño de bloque
+     */
+    public int getBlockSize() {
+        return blockSizeDefault;
+    }
+
+    /**
+     * Obtiene la extensión del driver
+     * @return        Extensión del driver
+     */
+    public String getExtension() {
+        return extension;
+    }
+
+    /**
+     * Obtiene la lista de tamaños de bloque posible
+     * @return        Lista de tamaños de bloque
+     */
+    public String[] getBlockSizeList() {
+        return blockSizeList;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/WriterSupportOptions.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterWriter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterWriter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterWriter.java	(revision 10281)
@@ -0,0 +1,278 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.cresques.geo.ViewPortData;
+import org.cresques.px.PxRaster;
+
+
+/**
+ * Clase abstracta de la que heredan los drivers de escritura. Tiene los
+ * métodos abstractos que debe implementar cualquier driver de escritura
+ * y las funcionalidades y opciones soportadas comunes a todos ellos.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public abstract class GeoRasterWriter {
+    
+	public static int			blockSizeDefault = 256;
+	
+	private static TreeMap 		supportedExtensions = null;
+    protected static TreeMap 	typeList = new TreeMap();
+    protected String 			outFileName = null;
+    protected String 			inFileName = null;
+    protected int 				sizeWindowX = 0;
+    protected int 				sizeWindowY = 0;
+    protected int 				ulX = 0;
+    protected int 				ulY = 0;
+    protected PxRaster 			currentRaster;
+    protected IDataWriter 		dataWriter = null;
+    protected int 				nBands = 0;
+    protected String 			ident = null;
+    protected String 			driver = null;
+    
+    /**
+     * Registra un formato de escritura
+     * @param ext        Extensión del fichero registrado
+     * @param clase        Clase que maneja el formato registrado
+     */
+    public static void registerWriterExtension(String ext, Class clase) {
+        if (supportedExtensions == null) {
+            supportedExtensions = new TreeMap();
+        }
+
+        ext = ext.toLowerCase();
+        System.out.println("Write RASTER: extension '" + ext + "' supported.");
+        supportedExtensions.put(ext, clase);
+    }
+
+    /**
+     * Obtiene la lista de extensiones registradas
+     * @return Lista de extensiones registradas o null si no hay ninguna
+     */
+    public static String[] getDriversExtensions(){
+    	if (supportedExtensions.size() == 0)
+    		return null;
+    	String[] list = new String[supportedExtensions.size()];
+    	Set values = supportedExtensions.entrySet();
+    	int i = 0;
+    	for (Iterator it=values.iterator(); it.hasNext(); ) {
+            list[i] = (String)((Map.Entry)it.next()).getKey();
+            i++;
+        }
+    	
+    	return list;
+    }
+    
+    /**
+     * Obtiene la lista de tipos de driver
+     * @return Lista de tipos de driver registradas o null si no hay ninguno
+     */
+    public static String[] getDriversType(){
+    	if (typeList.size() == 0)
+    		return null;
+    	String[] list = new String[typeList.size()];
+    	Set values = typeList.entrySet();
+    	int i = 0;
+    	for (Iterator it=values.iterator(); it.hasNext(); ) {
+            list[i] = (String)((Map.Entry)it.next()).getValue();
+            i++;
+        }
+    	
+    	return list;
+    }
+    
+    /**
+     * Obtiene el tipo de driver a partir de la extensión
+     * @param ext	Extensión
+     * @return	Tipo
+     */
+    public static String getDriverType(String ext){
+    	return (String)typeList.get(ext);
+    }
+    
+    /**
+     * Devuelve el número de drivers soportados
+     * @return Número de drivers soportados
+     */
+    public static int getNDrivers() {
+        return supportedExtensions.size();
+    }
+    
+    /**
+     * Devuelve el número de tipos de driver registrados
+     * @return Número de tipos de driver soportados
+     */
+    public static int getNTypes() {
+        return typeList.size();
+    }
+
+    /**
+     * Devuelve el identificador del driver
+     * @return        Identificador del driver
+     */
+    public String getIdent() {
+        return ident;
+    }
+
+    /**
+     * Obtiene el nombre del driver.
+     * @return        Nombre del driver
+     */
+    public String getDriverName() {
+        return driver;
+    }
+
+    /**
+     * 
+     * @return
+     */
+    public String getDriverType() {
+        return driver;
+    }
+    
+    /**
+	 * Factoria para obtener escritores de los distintos tipos de raster.
+	 * 
+	 * @param fName Nombre del fichero.
+	 * @return GeoRasterWriter, o null si hay problemas.
+	 */
+	public static GeoRasterWriter getWriter(String fName) {
+		String ext = fName.toLowerCase().substring(fName.lastIndexOf('.')+1);
+		GeoRasterWriter grw = null;
+		
+		if (!supportedExtensions.containsKey(ext)) 
+			return grw;
+		
+		Class clase = (Class) supportedExtensions.get(ext);
+		Class [] args = {String.class};
+		try {
+			Constructor hazNuevo = clase.getConstructor(args);
+			Object [] args2 = {fName};
+			grw = (GeoRasterWriter) hazNuevo.newInstance(args2);
+		} catch (SecurityException e) {
+			e.printStackTrace();
+		} catch (NoSuchMethodException e) {
+			e.printStackTrace();
+		} catch (IllegalArgumentException e) {
+			e.printStackTrace();
+		} catch (InstantiationException e) {
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			e.printStackTrace();
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+		return grw;
+	}
+	
+	/**
+	 * Factoria para obtener escritores de los distintos tipos de raster.
+	 * 
+	 * @param fName Nombre del fichero.
+	 * @return GeoRasterWriter, o null si hay problemas.
+	 */
+	public static GeoRasterWriter getWriter(IDataWriter dataWriter, 
+     										String outFileName, 
+     										int blockSize, 
+     										int nBands,
+     										ViewPortData vp,
+     										int compresion,
+     										int outSizeX,
+     										int outSizeY,
+     										int dataType) {
+		String ext = outFileName.toLowerCase().substring(outFileName.lastIndexOf('.')+1);
+		GeoRasterWriter grw = null;
+		
+		if (!supportedExtensions.containsKey(ext)) 
+			return grw;
+		
+		Class clase = (Class) supportedExtensions.get(ext);
+		Class [] args = {IDataWriter.class, String.class, Integer.class, Integer.class, 
+						 ViewPortData.class, Integer.class, Integer.class, Integer.class, Integer.class};
+		try {
+			Constructor hazNuevo = clase.getConstructor(args);
+			Object [] args2 = {dataWriter, outFileName, new Integer(blockSize), new Integer(nBands), 
+								vp, new Integer(compresion), new Integer(outSizeX), new Integer(outSizeY), new Integer(dataType)};
+			grw = (GeoRasterWriter) hazNuevo.newInstance(args2);
+		} catch (SecurityException e) {
+			e.printStackTrace();
+		} catch (NoSuchMethodException e) {
+			e.printStackTrace();
+		} catch (IllegalArgumentException e) {
+			e.printStackTrace();
+		} catch (InstantiationException e) {
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			e.printStackTrace();
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+		return grw;
+	}
+	
+    /**
+     * Asigna propiedades al driver a partir de un vector de
+     * strings donde cada elemento tiene la estructura de
+     * propiedad=valor.
+     * @param props        Propiedades
+     */
+    public abstract void setProps(String[] props);
+
+    /**
+     * Realiza la función de compresión a partir de un GeoRasterFile.
+     * @throws IOException
+     */
+    public abstract void fileWrite() throws IOException;
+
+    /**
+     * Realiza la función de compresión a partir de los datos pasados por el cliente.
+     * @throws IOException
+     */
+    public abstract void dataWrite() throws IOException;
+
+    /**
+     * Cierra el driver
+     */
+    public abstract void writeClose();
+    
+    /**
+     * Cancela el grabado de datos
+     */
+    public abstract void writeCancel();
+
+    /**
+     * Devuelve la configuración de la ventana de dialogo
+     * para las propiedades del driver de escritura que se esté tratando.
+     * @return Texto XML con las propiedades
+     */
+    public abstract String getXMLPropertiesDialog();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/CutRasterProcess.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/CutRasterProcess.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/CutRasterProcess.java	(revision 10281)
@@ -0,0 +1,206 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.GeoRasterWriter;
+import org.cresques.io.IDataWriter;
+import org.cresques.px.Extent;
+import org.cresques.util.Utilities;
+
+
+/**
+ * Clase que realiza el proceso de recorte de un raster a partir de unos datos
+ * de entrada. Para realizar este recorte necesita la extensión o coordenadas 
+ * pixel de la imagen, el tamaño del recorte, el número de bandas que intervienen
+ * desde la original y si se desea crear un raster por banda o todos en un mismo 
+ * raster. Como fuente de datos de entrada estará el grid que a través de un proceso
+ * que muestra el incremento de la operación crea el/los recorte/s. Debemos indicarle
+ * también el directorio donde queremos crear el/los raster y el nombre del mismo.
+ * 
+ * En caso de generar varios (uno por banda) pondrá el mismo nomnbre a todos pero 
+ * numerandolos (raster_1.tif, raster_2.tif, ...)
+ *
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class CutRasterProcess extends Thread {
+	
+	/**
+	 * Escritores para salvar los raster a disco. Uno por raster a salvar.
+	 */
+	private GeoRasterWriter[] 			writers = null;
+	/**
+	 * Bandas que se salvan y en el orden que se hace. Cada posición del array es 
+	 * una banda que se salvará y el elemento que contiene el número de banda del 
+	 * grid que va en esa posición.
+	 */
+	private int[] 						bands = null;
+	/**
+	 * Datos fuente
+	 */
+	private Grid						grid = null;
+	/**
+	 * Nombre de el/los ficheros donde se salva. 
+	 */
+	private volatile String[]			fileNames = null;
+	
+	private ViewPortData 				vpData = null;
+	/**
+	 * Rasterizador de bandas
+	 */
+	private RasterizeGrid[]				rasterizer = null;
+	/**
+	 * Clase que instancia a esta y que pone en marcha el thread para generar los recortes.
+	 */
+	private ICutRaster					parent = null;
+	/**
+	 * Ancho y alto del grid resultante
+	 */
+	//private int 						width = 0, height = 0;
+	/**
+	 * Informa de si hay un fichero por banda o todas las bandas en un fichero. True en el primer caso
+	 * y false en el segundo.
+	 */
+	private boolean 					aFilePerBand = false;
+	/**
+	 * Nombre del fichero destino. En caso de crearse un fichero por banda, se numerarán. 
+	 * (raster_1.tif, raster_2.tif, ...)
+	 */
+	private String						fileName = null;
+	
+	/**
+	 * Constructor cuando la selección se hace por coordenadas pixel
+	 * @param pixelCoord Coordenadas pixeles que representan los margenes del recorte
+	 * @param bands Lista de bandas a salvar. Cada posición del array es una banda que se
+	 * salvará y el elemento que contiene el número de banda del grid que va en esa posición
+	 * por lo que si tenemos un grid de 3 bandas y queremos hacer un recorte con solo la 
+	 * banda tres pasaremos un array {3}
+	 * @param grid Grid con los datos fuente
+	 * @param fileName Nombre del fichero destino. En caso de crearse un fichero por banda, 
+	 * se numerarán. (raster_1.tif, raster_2.tif, ...)
+	 * @param aFilePerBand Variable que dice si hay un fichero por banda o todas las bandas 
+	 * van en un fichero. En el primer caso valdrá true y en el segundo false.
+	 * @param w Ancho en pixeles del raster resultante
+	 * @param h Alto en pixeles del raster resultante
+	 * @param parent Objeto que implementa el interfaz ITailRaster que tiene los métodos que
+	 * son llamados cuando se finaliza el proceso de recortado. 
+	 */
+	public CutRasterProcess(int[] pixelCoord, int[] bands, Grid grid, String fileName, boolean aFilePerBand, int w, int h, ICutRaster parent){
+		this.bands = bands;
+		this.grid = grid;
+		this.parent = parent;
+		this.aFilePerBand = aFilePerBand;
+		this.fileName = fileName;
+		
+		grid.clearDrawableBand();
+		grid.addDrawableBands(bands);
+		grid.setAreaOfInterest(pixelCoord[0], pixelCoord[1], w, h);
+						
+		//Hallamos primero las coordenadas del mapa que corresponden a esos pixeles y calculamos con ellos el extent
+		Rectangle2D extent = Utilities.getMapRectFromPxRect(	grid.getExtent().toRectangle2D(), 
+				grid.getWidth(), grid.getHeight(),
+				new Rectangle2D.Double(pixelCoord[0], pixelCoord[1], w, h));
+		
+		vpData = new ViewPortData(null, new Extent(extent), null);
+	
+		//createWriters(grid.getRasterBuf());
+	}
+	
+	/**
+	 * Constructor cuando la selección se hace por coordenadas reales
+	 * @param mapCoord Coordenadas del mundo real que representan los margenes del recorte
+	 * @param bands Lista de bandas a salvar. Cada posición del array es una banda que se
+	 * salvará y el elemento que contiene el número de banda del grid que va en esa posición
+	 * por lo que si tenemos un grid de 3 bandas y queremos hacer un recorte con solo la 
+	 * banda tres pasaremos un array {3}
+	 * @param grid Grid con los datos fuente
+	 * @param fileName Nombre del fichero destino. En caso de crearse un fichero por banda, 
+	 * se numerarán. (raster_1.tif, raster_2.tif, ...)
+	 * @param aFilePerBand Variable que dice si hay un fichero por banda o todas las bandas 
+	 * van en un fichero. En el primer caso valdrá true y en el segundo false.
+	 * @param w Ancho en pixeles del raster resultante
+	 * @param h Alto en pixeles del raster resultante
+	 * @param parent Objeto que implementa el interfaz ITailRaster que tiene los métodos que
+	 * son llamados cuando se finaliza el proceso de recortado.
+	 */
+	public CutRasterProcess(double[] mapCoord, int[] bands, Grid grid, String fileName, boolean aFilePerBand, int w, int h, ICutRaster parent){
+		this.bands = bands;
+		this.grid = grid;
+		this.parent = parent;
+		this.aFilePerBand = aFilePerBand;
+		this.fileName = fileName;
+		
+		grid.clearDrawableBand();
+		grid.addDrawableBands(bands);
+		grid.setAreaOfInterest(mapCoord[0], mapCoord[1], Math.abs(mapCoord[2] - mapCoord[0]), Math.abs(mapCoord[3] - mapCoord[1]));
+		
+		//Calculamos el Extent con las coordenadas del mapa pasadas
+		vpData = new ViewPortData(null, new Extent(mapCoord[0], mapCoord[1], mapCoord[2], mapCoord[3]), null);
+		
+		//createWriters(grid.getRasterBuf());
+	}
+	
+	/**
+	 * Creador de writers. Genera uno por fichero a salvar. Si hay un solo fichero se pone
+	 * el nombre pasado por parámetro, si hay uno por bandas será el nombre más un número de
+	 * secuencia (raster_1.tif, raster_2.tif, ...)
+	 * @param rasterBuf Buffer desde donde se obtienen los datos.
+	 */
+	public String[] createWriters(RasterBuf rasterBuf, int w, int h){
+		if(aFilePerBand){
+			rasterizer = new RasterizeGrid[bands.length];
+			fileNames = new String[bands.length];
+			writers = new GeoRasterWriter[bands.length];
+			
+			for(int iFile = 0; iFile < bands.length; iFile ++){
+				rasterizer[iFile] = new RasterizeGrid(rasterBuf, iFile);
+				fileNames[iFile] = fileName + "_" + iFile + ".tif";
+				writers[iFile] = GeoRasterWriter.getWriter((IDataWriter)rasterizer[iFile], fileNames[iFile], RasterizeGrid.BLOCKSIZE, 
+						1, vpData, 0, w, h, grid.getDataType());
+			}
+		}else{
+			rasterizer = new RasterizeGrid[1];
+			rasterizer[0] = new RasterizeGrid(rasterBuf, bands);
+			fileNames = new String[1];
+			fileNames[0] = fileName + ".tif";
+			writers = new GeoRasterWriter[1];
+			writers[0] = GeoRasterWriter.getWriter((IDataWriter)rasterizer[0], fileNames[0], RasterizeGrid.BLOCKSIZE, 
+					bands.length, vpData, 0, w, h, grid.getDataType());
+		}
+		return fileNames;
+	}
+		
+	/**
+	 * Proceso que escribe la/las imagen/es
+	 */
+	public synchronized void run(){
+		try{
+			for(int i = 0; i < writers.length; i ++){
+				writers[i].dataWrite();
+				writers[i].writeClose(); 	
+			}
+		}catch(IOException ev){
+			return;
+		}
+		parent.cutFinalize(fileNames);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/CutRasterProcess.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterBuf.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterBuf.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterBuf.java	(revision 10281)
@@ -0,0 +1,787 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import org.cresques.filter.IRaster;
+
+
+/**
+ * Rectangulo de pixeles. Para cada tipo de datos java hay un buffer distinto donde cada elemento es
+ * accedido de la siguiente forma: [banda][fila][columna]
+ * m[1][2][0] = cte;-> Sustituye el elemento de la fila 2 de la banda 1 columna 0
+ * m[1][0] = array; -> Sustituye la fila 0 de la banda 1 
+ * m[0] = matriz cuadrada; -> Sustituye la banda entera.
+ * 
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class RasterBuf implements IRaster {
+    private byte[][][] 		byteBuf;
+    private short[][][] 	shortBuf;
+    private int[][][] 		intBuf;
+    private float[][][]		floatBuf;
+    private double[][][]	doubleBuf;
+    
+    private int 			width;
+    private int 			height;
+    private int 			nBands;
+    private int 			dataType;
+
+    /**
+     * Constructor
+     */
+    public RasterBuf() {
+    	
+    }
+    
+    /**
+     * Constructor
+     * @param dataType Tipo de dato
+     * @param width Ancho
+     * @param height Alto
+     * @param bandNr Banda
+     * @param orig
+     */
+    public RasterBuf(int dataType, int width, int height, int bandNr, boolean malloc) {
+    	if(malloc)
+    		malloc(dataType, width, height, bandNr);
+    	else
+    		loadVariables(dataType, width, height, bandNr);
+    }
+
+    /**
+     * Reserva de memoria para el rasterbuf
+     * @param dataType Tipo de dato
+     * @param width Ancho
+     * @param height Alto
+     * @param bandNr Banda
+     * @param orig
+     */
+    public void malloc(int dataType, int width, int height, int bandNr) {
+    	this.dataType = dataType;
+        this.width = width;
+        this.height = height;
+        this.nBands = bandNr;
+
+        if (dataType == TYPE_BYTE) {
+            byteBuf = new byte[bandNr][height][width];
+        } else if ((dataType == TYPE_SHORT) | (dataType == TYPE_USHORT)) {
+            shortBuf = new short[bandNr][height][width];
+        } else if (dataType == TYPE_INT) {
+            intBuf = new int[bandNr][height][width];
+        } else if (dataType == TYPE_FLOAT) {
+            floatBuf = new float[bandNr][height][width];
+        } else if (dataType == TYPE_DOUBLE) {
+            doubleBuf = new double[bandNr][height][width];
+        }
+
+    }
+
+    /**
+     * Carga las variables del rasterBuf
+     * @param dataType Tipo de dato
+     * @param width Ancho
+     * @param height Alto
+     * @param bandNr Banda
+     * @param orig
+     */
+    private void loadVariables(int dataType, int width, int height, int bandNr) {
+    	this.dataType = dataType;
+        this.width = width;
+        this.height = height;
+        this.nBands = bandNr;
+
+        if (dataType == TYPE_BYTE) {
+            byteBuf = new byte[bandNr][height][];
+        } else if ((dataType == TYPE_SHORT) | (dataType == TYPE_USHORT)) {
+            shortBuf = new short[bandNr][height][];
+        } else if (dataType == TYPE_INT) {
+            intBuf = new int[bandNr][height][];
+        } else if (dataType == TYPE_FLOAT) {
+            floatBuf = new float[bandNr][height][];
+        } else if (dataType == TYPE_DOUBLE) {
+            doubleBuf = new double[bandNr][height][];
+        }
+
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRaster#getWidth()
+     */
+    public int getWidth() {
+        return width;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRaster#getHeight()
+     */
+    public int getHeight() {
+        return height;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRaster#getBandNr()
+     */
+    public int getBandCount() {
+        return nBands;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.raster.IRaster#getDataType()
+     */
+    public int getDataType() {
+        return dataType;
+    }
+
+    /**
+     * Obtiene el tamaño del tipo de dato en bytes
+     * @return Tipo de dato
+     */
+    public int getDataSize() {
+        if (dataType == TYPE_BYTE) {
+            return 1;
+        } else if ((dataType == TYPE_SHORT) | (dataType == TYPE_USHORT)) {
+            return 2;
+        } else if (dataType == TYPE_INT) {
+            return 4;
+        }else if (dataType == TYPE_FLOAT) {
+            return 8;
+        }else if (dataType == TYPE_DOUBLE) {
+            return 16;
+        }
+
+        return 0;
+    }
+
+    /**
+     * Obtiene el tamaño del buffer
+     * @return tamaño del buffer
+     */
+    public int sizeof() {
+        return getDataSize() * width * height * nBands;
+    }
+
+    //***********************************************
+    //Obtiene una linea de datos con todas las bandas
+    
+    public byte[][] getLineByte(int line) {
+    	byte[][] r = new byte[nBands][];
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		r[iBand] = byteBuf[iBand][line];
+    	return r;
+    }
+
+    public short[][] getLineShort(int line) {
+    	short[][] r = new short[nBands][];
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		r[iBand] = shortBuf[iBand][line];
+    	return r;
+    }
+
+    public int[][] getLineInt(int line) {
+    	int[][] r = new int[nBands][];
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		r[iBand] = intBuf[iBand][line];
+    	return r;
+    }
+        
+    public float[][] getLineFloat(int line) {
+    	float[][] r = new float[nBands][];
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		r[iBand] = floatBuf[iBand][line];
+    	return r;
+    }
+    
+    public double[][] getLineDouble(int line) {
+    	double[][] r = new double[nBands][];
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		r[iBand] = doubleBuf[iBand][line];
+    	return r;
+    }
+
+    //***********************************************
+    //Asigna una linea de datos a todas las bandas
+    
+    public void setLineByte(byte[][] data, int line) {
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		byteBuf[iBand][line] = data[iBand];
+    }
+
+    public void setLineShort(short[][] data, int line) {
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		shortBuf[iBand][line] = data[iBand];
+    }
+
+    public void setLineInt(int[][] data, int line) {
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		intBuf[iBand][line] = data[iBand];
+    }
+        
+    public void setLineFloat(float[][] data, int line) {
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		floatBuf[iBand][line] = data[iBand];
+    }
+    
+    public void setLineDouble(double[][] data, int line) {
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+    		doubleBuf[iBand][line] = data[iBand];
+    }
+    
+    //***********************************************
+    //Obtiene una linea de datos de una banda
+    
+    public byte[] getLineFromBandByte(int line, int band) {
+        return byteBuf[band][line];
+    }
+
+    public short[] getLineFromBandShort(int line, int band) {
+        return shortBuf[band][line];
+    }
+
+    public int[] getLineFromBandInt(int line, int band) {
+        return intBuf[band][line];
+    }
+        
+    public float[] getLineFromBandFloat(int line, int band) {
+        return floatBuf[band][line];
+    }
+    
+    public double[] getLineFromBandDouble(int line, int band) {
+        return doubleBuf[band][line];
+    }
+        
+    //***********************************************
+    //Asigna una linea de datos a una banda
+    
+    public void setLineInBandByte(byte[] data, int line, int band) {
+        byteBuf[band][line] = data;
+    }
+
+    public void setLineInBandShort(short[] data, int line, int band) {
+        shortBuf[band][line] = data;
+    }
+
+    public void setLineInBandInt(int[] data, int line, int band) {
+        intBuf[band][line] = data;
+    }
+        
+    public void setLineInBandFloat(float[] data, int line, int band) {
+        floatBuf[band][line] = data;
+    }
+    
+    public void setLineInBandDouble(double[] data, int line, int band) {
+        doubleBuf[band][line] = data;
+    }
+    
+    //***********************************************    
+    //Obtiene un elemento de la matriz
+    
+    public byte getElemByte(int line, int col, int band) {
+        return byteBuf[band][line][col];
+    }
+    
+    public short getElemShort(int line, int col, int band) {
+        return shortBuf[band][line][col];
+    }
+    
+    public int getElemInt(int line, int col, int band) {
+        return intBuf[band][line][col];
+    }
+    
+    public float getElemFloat(int line, int col, int band) {
+        return floatBuf[band][line][col];
+    }
+    
+    public double getElemDouble(int line, int col, int band) {
+        return doubleBuf[band][line][col];
+    }
+    
+    //**********************************************    
+    //Asigna un elemento de la matriz
+    
+    public void setElemByte(int line, int col, int band, byte data) {
+        byteBuf[band][line][col] = data;
+    }
+    
+    public void setElemShort(int line, int col, int band, short data) {
+        shortBuf[band][line][col] = data;
+    }
+    
+    public void setElemInt(int line, int col, int band, int data) {
+        intBuf[band][line][col] = data;
+    }
+    
+    public void setElemFloat(int line, int col, int band, float data) {
+        floatBuf[band][line][col] = data;
+    }
+    
+    public void setElemDouble(int line, int col, int band, double data) {
+        doubleBuf[band][line][col] = data;
+    }
+    
+    //***********************************************
+    //Copia un elemento de todas la bandas en el buffer pasado por parámetro
+    
+    public void getElemByte(int line, int col, byte[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            data[iBand] = byteBuf[iBand][line][col];
+    }
+    
+    public void getElemShort(int line, int col, short[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            data[iBand] = shortBuf[iBand][line][col];
+    }
+    
+    public void getElemInt(int line, int col, int[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            data[iBand] = intBuf[iBand][line][col];
+    }  
+    
+    public void getElemFloat(int line, int col, float[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            data[iBand] = floatBuf[iBand][line][col];
+    }
+    
+    public void getElemDouble(int line, int col, double[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            data[iBand] = doubleBuf[iBand][line][col];
+    }
+
+    //***********************************************
+    //Asigna un elemento a todas la bandas en el buffer pasado por parámetro
+    
+    public void setElemByte(int line, int col, byte[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            byteBuf[iBand][line][col] = data[iBand];
+    }
+    
+    public void setElemShort(int line, int col, short[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            shortBuf[iBand][line][col] = data[iBand];
+    }
+    
+    public void setElemInt(int line, int col, int[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            intBuf[iBand][line][col] = data[iBand];
+    }
+
+    public void setElemFloat(int line, int col, float[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            floatBuf[iBand][line][col] = data[iBand];
+    }
+    
+    public void setElemDouble(int line, int col, double[] data) {
+    	for (int iBand = 0; (iBand < nBands && iBand < data.length); iBand++)
+            doubleBuf[iBand][line][col] = data[iBand];
+    }
+
+    //***********************************************
+    //Obtiene una banda entera
+    
+    public byte[][] getBandByte(int band) {
+        return byteBuf[band];
+    }
+
+    public short[][] getBandShort(int band) {
+        return shortBuf[band];
+    }
+
+    public int[][] getBandInt(int band) {
+        return intBuf[band];
+    }
+        
+    public float[][] getBandFloat(int band) {
+        return floatBuf[band];
+    }
+    
+    public double[][] getBandDouble(int band) {
+        return doubleBuf[band];
+    }
+
+    //***********************************************
+    //Sustituye una banda entera
+    
+    public void getBandByte(int band, byte[][] data) {
+        byteBuf[band] = data;
+    }
+
+    public void getBandShort(int band, short[][] data) {
+        shortBuf[band] = data;
+    }
+
+    public void getBandInt(int band, int[][] data) {
+        intBuf[band] = data;
+    }
+        
+    public void getBandFloat(int band, float[][] data) {
+        floatBuf[band] = data;
+    }
+    
+    public void getBandDouble(int band, double[][] data) {
+        doubleBuf[band] = data;
+    }
+    
+    //***********************************************
+    //Crea un buffer banda inicializado con el valor pasado por parámetro
+
+    public static byte[][] createByteBand(int width, int height, byte defaultValue){
+    	byte[][] band = new byte[height][width];
+    	if(defaultValue != 0){
+	    	for(int line = 0; line < height; line ++)
+	    		for(int col = 0; col < width; col ++)
+	    			band[line][col] = defaultValue;
+    	}
+    	return band;
+    }
+    
+    public static short[][] createShortBand(int width, int height, short defaultValue){
+    	short[][] band = new short[height][width];
+    	if(defaultValue != 0){
+	    	for(int line = 0; line < height; line ++)
+	    		for(int col = 0; col < width; col ++)
+	    			band[line][col] = defaultValue;
+    	}
+    	return band;
+    }
+    
+    public static int[][] createIntBand(int width, int height, int defaultValue){
+    	int[][] band = new int[height][width];
+    	if(defaultValue != 0){
+	    	for(int line = 0; line < height; line ++)
+	    		for(int col = 0; col < width; col ++)
+	    			band[line][col] = defaultValue;
+    	}
+    	return band;
+    }
+    
+    public static float[][] createFloatBand(int width, int height, float defaultValue){
+    	float[][] band = new float[height][width];
+    	if(defaultValue != 0){
+	    	for(int line = 0; line < height; line ++)
+	    		for(int col = 0; col < width; col ++)
+	    			band[line][col] = defaultValue;
+    	}
+    	return band;
+    }
+    
+    public static double[][] createDoubleBand(int width, int height, double defaultValue){
+    	double[][] band = new double[height][width];
+    	if(defaultValue != 0){
+	    	for(int line = 0; line < height; line ++)
+	    		for(int col = 0; col < width; col ++)
+	    			band[line][col] = defaultValue;
+    	}
+    	return band;
+    }
+    
+    //***********************************************
+    //Añade una banda entera. Los datos son asignados por referencia
+
+    public void addBandByte(int pos, byte[][] data) {
+    	if(pos < 0)
+    		return;
+    	byte[][][] tmp = null;
+    	if(pos >= byteBuf.length){
+    		tmp = new byte[pos + 1][][];
+    		for(int iBand = 0; iBand < byteBuf.length; iBand ++)
+    			tmp[iBand] = byteBuf[iBand];
+    		tmp[pos] = data;
+    	}else{
+    		tmp = new byte[byteBuf.length + 1][][];
+    		for(int iBand = 0; iBand < pos; iBand ++)
+    			tmp[iBand] = byteBuf[iBand];
+    		tmp[pos] = data;
+    		for(int iBand = pos + 1; iBand < byteBuf.length; iBand ++)
+    			tmp[iBand] = byteBuf[iBand - 1];
+    	}
+    	nBands++;
+    	byteBuf = tmp;
+    }
+    
+    public void addBandShort(int pos, short[][] data) {
+    	if(pos < 0)
+    		return;
+    	short[][][] tmp = null;
+    	if(pos >= shortBuf.length){
+    		tmp = new short[pos + 1][][];
+    		for(int iBand = 0; iBand < shortBuf.length; iBand ++)
+    			tmp[iBand] = shortBuf[iBand];
+    		tmp[pos] = data;
+    	}else{
+    		tmp = new short[shortBuf.length + 1][][];
+    		for(int iBand = 0; iBand < pos; iBand ++)
+    			tmp[iBand] = shortBuf[iBand];
+    		tmp[pos] = data;
+    		for(int iBand = pos + 1; iBand < shortBuf.length; iBand ++)
+    			tmp[iBand] = shortBuf[iBand - 1];
+    	}
+    	nBands++;
+    	shortBuf = tmp;
+    }
+    
+    public void addBandInt(int pos, int[][] data) {
+    	if(pos < 0)
+    		return;
+    	int[][][] tmp = null;
+    	if(pos >= intBuf.length){
+    		tmp = new int[pos + 1][][];
+    		for(int iBand = 0; iBand < intBuf.length; iBand ++)
+    			tmp[iBand] = intBuf[iBand];
+    		tmp[pos] = data;
+    	}else{
+    		tmp = new int[intBuf.length + 1][][];
+    		for(int iBand = 0; iBand < pos; iBand ++)
+    			tmp[iBand] = intBuf[iBand];
+    		tmp[pos] = data;
+    		for(int iBand = pos + 1; iBand < intBuf.length; iBand ++)
+    			tmp[iBand] = intBuf[iBand - 1];
+    	}
+    	nBands++;
+    	intBuf = tmp;
+    }
+    
+    public void addBandFloat(int pos, float[][] data) {
+    	if(pos < 0)
+    		return;
+    	float[][][] tmp = null;
+    	if(pos >= floatBuf.length){
+    		tmp = new float[pos + 1][][];
+    		for(int iBand = 0; iBand < floatBuf.length; iBand ++)
+    			tmp[iBand] = floatBuf[iBand];
+    		tmp[pos] = data;
+    	}else{
+    		tmp = new float[floatBuf.length + 1][][];
+    		for(int iBand = 0; iBand < pos; iBand ++)
+    			tmp[iBand] = floatBuf[iBand];
+    		tmp[pos] = data;
+    		for(int iBand = pos + 1; iBand < floatBuf.length; iBand ++)
+    			tmp[iBand] = floatBuf[iBand - 1];
+    	}
+    	nBands++;
+    	floatBuf = tmp;
+    }
+    
+    public void addBandDouble(int pos, double[][] data) {
+    	if(pos < 0)
+    		return;
+    	double[][][] tmp = null;
+    	if(pos >= doubleBuf.length){
+    		tmp = new double[pos + 1][][];
+    		for(int iBand = 0; iBand < doubleBuf.length; iBand ++)
+    			tmp[iBand] = doubleBuf[iBand];
+    		tmp[pos] = data;
+    	}else{
+    		tmp = new double[doubleBuf.length + 1][][];
+    		for(int iBand = 0; iBand < pos; iBand ++)
+    			tmp[iBand] = doubleBuf[iBand];
+    		tmp[pos] = data;
+    		for(int iBand = pos + 1; iBand < doubleBuf.length; iBand ++)
+    			tmp[iBand] = doubleBuf[iBand - 1];
+    	}
+    	nBands++;
+    	doubleBuf = tmp;
+    }
+    
+    //***********************************************
+    //Reemplaza una banda entera. Los datos son reemplazados por referencia
+    
+    public void replaceBandByte(int pos, byte[][] data) {
+    	if(pos >= byteBuf.length)
+    		return;
+    	byteBuf[pos] = data;
+    }
+    
+    public void replaceBandShort(int pos, short[][] data) {
+    	if(pos >= shortBuf.length)
+    		return;
+    	shortBuf[pos] = data;
+    }
+    
+    public void replaceBandInt(int pos, int[][] data) {
+    	if(pos >= intBuf.length)
+    		return;
+    	intBuf[pos] = data;
+    }
+    
+    public void replaceBandFloat(int pos, float[][] data) {
+    	if(pos >= floatBuf.length)
+    		return;
+    	floatBuf[pos] = data;
+    }
+    
+    public void replaceBandDouble(int pos, double[][] data) {
+    	if(pos >= doubleBuf.length)
+    		return;
+    	doubleBuf[pos] = data;
+    }
+    
+    /**
+     * Replica la banda de una posición sobre otra. Si la banda de destino no existe
+     * se crea nueva. Si la posición de la banda de destino está intercalada entre bandas 
+     * que ya existen las otras se desplazan hacia abajo, NO se machacan los datos de ninguna.
+     * Los datos se replican por referencia por lo que al modificar la banda original las
+     * del resto quedarán afectadas.
+     * @param orig. Posición de la banda de origen. 
+     * @param dest. Posición de la banda destino
+     */   
+    public void replicateBand(int orig, int dest){
+    	switch(getDataType()){
+    	case RasterBuf.TYPE_BYTE: 	if(orig >= byteBuf.length)
+										return;
+									addBandByte(dest, getBandByte(orig));
+									break;
+    	case RasterBuf.TYPE_SHORT: 	if(orig >= shortBuf.length)
+    									return;
+    								addBandShort(dest, getBandShort(orig));
+    								break;
+    	case RasterBuf.TYPE_INT: 	if(orig >= intBuf.length)
+										return;
+									addBandInt(dest, getBandInt(orig));
+									break;
+    	case RasterBuf.TYPE_FLOAT: 	if(orig >= floatBuf.length)
+										return;
+									addBandFloat(dest, getBandFloat(orig));
+									break;
+    	case RasterBuf.TYPE_DOUBLE:	if(orig >= doubleBuf.length)
+										return;
+									addBandDouble(dest, getBandDouble(orig));
+									break;
+    	}
+    }
+    
+    /**
+     * Convierte un tipo de dato a cadena
+     * @param type Tipo de dato
+     * @return cadena  que representa el tipo de dato
+     */
+    public static String typesToString(int type) {
+        switch (type) {
+        case RasterBuf.TYPE_IMAGE:
+            return new String("Image");
+
+        case RasterBuf.TYPE_BYTE:
+            return new String("Byte");
+
+        case RasterBuf.TYPE_DOUBLE:
+            return new String("Double");
+
+        case RasterBuf.TYPE_FLOAT:
+            return new String("Float");
+
+        case RasterBuf.TYPE_INT:
+        	return new String("Integer");
+        	
+        case RasterBuf.TYPE_USHORT:
+        case RasterBuf.TYPE_SHORT:
+            return new String("Short");
+        }
+
+        return null;
+    }
+    
+    /**
+     * Ajusta el raster al ancho y alto solicitado por el vecino más cercano.
+     * @param w Nuevo ancho
+     * @param h Nuevo alto
+     */
+    public RasterBuf adjustRasterNearestNeighbour(int w, int h, int[] bands){
+    	double stepX = (double)w / (double)width;
+    	double stepY = (double)h / (double)height;
+    	RasterBuf rasterBuf = new RasterBuf(getDataType(), w, h, getBandCount(), true);
+    	
+    	//Si bands == null las bandas a copiar son todas las de la imagen
+    	if(bands == null){
+    		bands = new int[rasterBuf.getBandCount()];
+    		for(int iBand = 0; iBand < rasterBuf.getBandCount(); iBand ++)
+    			bands[iBand] = iBand;
+    	}
+    	
+    	switch (dataType) {
+        case RasterBuf.TYPE_IMAGE:
+                    
+        case RasterBuf.TYPE_BYTE:
+        	for(int iBand = 0; iBand < bands.length; iBand ++){
+        		if(w <= width){ //submuestreo
+        			for(int iRow = 0; iRow < height; iRow ++)
+        				for(int iCol = 0; iCol < width; iCol ++)
+        					rasterBuf.setElemByte((int)(iRow * stepY), (int)(iCol * stepX), bands[iBand], getElemByte(iRow, iCol, iBand));
+        		}else{ //supermuestreo
+        			for(int iRow = 0; iRow < h; iRow ++)
+        				for(int iCol = 0; iCol < w; iCol ++)
+        					rasterBuf.setElemByte(iRow, iCol, bands[iBand], getElemByte((int)(iRow / stepY), (int)(iCol / stepX), iBand));
+        		}
+        	}
+        	break;
+        case RasterBuf.TYPE_DOUBLE:
+        	for(int iBand = 0; iBand < bands.length; iBand ++){
+        		if(w <= width){ //submuestreo
+        			for(int iRow = 0; iRow < height; iRow ++)
+        				for(int iCol = 0; iCol < width; iCol ++)
+        					rasterBuf.setElemDouble((int)(iRow * stepY), (int)(iCol * stepX), bands[iBand], getElemDouble(iRow, iCol, iBand));
+        		}else{ //supermuestreo
+        			for(int iRow = 0; iRow < h; iRow ++)
+        				for(int iCol = 0; iCol < w; iCol ++)
+        					rasterBuf.setElemDouble(iRow, iCol, bands[iBand], getElemDouble((int)(iRow / stepY), (int)(iCol / stepX), iBand));
+        		}
+        	}
+        	break;
+        case RasterBuf.TYPE_FLOAT:
+        	for(int iBand = 0; iBand < bands.length; iBand ++){
+        		if(w <= width){ //submuestreo
+        			for(int iRow = 0; iRow < height; iRow ++)
+        				for(int iCol = 0; iCol < width; iCol ++)
+        					rasterBuf.setElemFloat((int)(iRow * stepY), (int)(iCol * stepX), bands[iBand], getElemFloat(iRow, iCol, iBand));
+        		}else{ //supermuestreo
+        			for(int iRow = 0; iRow < h; iRow ++)
+        				for(int iCol = 0; iCol < w; iCol ++)
+        					rasterBuf.setElemFloat(iRow, iCol, bands[iBand], getElemFloat((int)(iRow / stepY), (int)(iCol / stepX), iBand));
+        		}
+        	}
+        	break;
+        case RasterBuf.TYPE_INT:
+        	for(int iBand = 0; iBand < bands.length; iBand ++){
+        		if(w <= width){ //submuestreo
+        			for(int iRow = 0; iRow < height; iRow ++)
+        				for(int iCol = 0; iCol < width; iCol ++)
+        					rasterBuf.setElemInt((int)(iRow * stepY), (int)(iCol * stepX), bands[iBand], getElemInt(iRow, iCol, iBand));
+        		}else{ //supermuestreo
+        			for(int iRow = 0; iRow < h; iRow ++)
+        				for(int iCol = 0; iCol < w; iCol ++)
+        					rasterBuf.setElemInt(iRow, iCol, bands[iBand], getElemInt((int)(iRow / stepY), (int)(iCol / stepX), iBand));
+        		}
+        	}
+        	break;
+        case RasterBuf.TYPE_USHORT:
+        case RasterBuf.TYPE_SHORT:
+        	for(int iBand = 0; iBand < bands.length; iBand ++){
+        		if(w <= width){ //submuestreo
+        			for(int iRow = 0; iRow < height; iRow ++)
+        				for(int iCol = 0; iCol < width; iCol ++)
+        					rasterBuf.setElemShort((int)(iRow * stepY), (int)(iCol * stepX), bands[iBand], getElemShort(iRow, iCol, iBand));
+        		}else{ //supermuestreo
+        			for(int iRow = 0; iRow < h; iRow ++)
+        				for(int iCol = 0; iCol < w; iCol ++)
+        					rasterBuf.setElemShort(iRow, iCol, bands[iBand], getElemShort((int)(iRow / stepY), (int)(iCol / stepX), iBand));
+        		}
+        	}
+        	break;
+        }
+    	return rasterBuf; 
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterBuf.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterizeGrid.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterizeGrid.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterizeGrid.java	(revision 10281)
@@ -0,0 +1,270 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import org.cresques.io.Rasterizer;
+
+/**
+ * Salva a raster un objeto Grid.
+ * Sirve datos solicitados por los drivers que salvan a raster. 
+ * Hereda de Rasterizer y reescribe el método readData que es el que 
+ * será llamado desde el driver cada vez que vacie el buffer y 
+ * necesite más datos.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterizeGrid extends Rasterizer{
+	
+	public static final int			BLOCKSIZE = 512;
+	
+	/**
+	 * Número de bloques totales a leer del grid
+	 */
+	private int						nBlocks = 0;
+	/**
+	 * Tamaño en pixeles del último bloque
+	 */
+	private int						sizeLastBlock = 0;
+	/**
+	 * Posición y del grid donde se ha quedado la lectura para que el la siguiente
+	 * petición se sirva desde donde se quedó la última vez.
+	 */
+	private int 					line = 0;
+	/**
+	 * Buffer con los datos del grid
+	 */
+	private RasterBuf 				rasterBuf = null;
+	/**
+	 * Bandas a salvar. Si vale null se salvarán todas las del rasterBuf sino se hará
+	 * una selección. Cada elemento del array es una banda del rasterBuf y el valor del contenido
+	 * es la posición en la que se salva.
+	 */
+	private int[]					bands = null;
+	/**
+	 * Cuando se desea salvar un raster con una sola banda del rasterBuf bands valdrá null y se 
+	 * usará band para saber que banda del rasterBuf se va a salvar. Esto indica usando el constructor
+	 * adecuado.
+	 */
+	private int						band = 0;
+	/**
+	 * Constructor
+	 * @param grid Grid desde donde se leen los datos
+	 * @param bands Bandas a salvar. Si vale null se salvarán todas las del rasterBuf sino se hará
+	 * una selección. Cada elemento del array es una banda del rasterBuf y el valor del contenido
+	 * es la posición en la que se salva.
+	 */
+	public RasterizeGrid(RasterBuf rasterBuf, int[] bands){
+		super(BLOCKSIZE);	
+		this.bands = bands;
+		
+		//Cuando bands es null es que entran todas las bandas
+		if(bands == null){
+			bands = new int[rasterBuf.getBandCount()];
+			for (int iBand = 0; iBand < rasterBuf.getBandCount(); iBand++)
+				bands[iBand] = iBand;
+		}
+				
+		init(rasterBuf);
+	}
+	
+	/**
+	 * Constructor
+	 * @param rasterBuf RasterBuf desde donde se leen los datos
+	 * @param bands Bandas a salvar. Si vale null se salvarán todas las del rasterBuf sino se hará
+	 * una selección. Cada elemento del array es una banda del rasterBuf y el valor del contenido
+	 * es la posición en la que se salva.
+	 */
+	public RasterizeGrid(RasterBuf rasterBuf, int band){
+		super(BLOCKSIZE);
+		this.band = band;
+		init(rasterBuf);
+	}
+	
+	/**
+	 * Inicializa el número de bloques y el tamaño del último. Asigna el grid
+	 * y el rasterbuf desde el que se obtienen los datos.
+	 * @param grid
+	 */
+	public void init(RasterBuf rasterBuf){
+		this.rasterBuf = rasterBuf;;
+		nBlocks = (int)(rasterBuf.getHeight() / BLOCKSIZE);
+		sizeLastBlock = (rasterBuf.getHeight() - (nBlocks * BLOCKSIZE));
+		nBlocks ++;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.cresques.io.IDataWriter#readData(int, int, int)
+	 */
+	public int[] readARGBData(int sX, int sY, int nBand){
+		return null;
+	}
+	
+	/**
+	 * Lee los datos tipo byte del grid de ancho sizeX y alto sizeY desde la posición
+	 * indicada en la variable de instancia "line". El array bands dice que bandas del
+	 * rasterBuf va a ser salvadas, en caso de que bands sea null significa que solo vamos
+	 * a salvar una banda del rasterBuf con lo que usaremos la variable band que indica que
+	 * banda hay que salvar.
+	 */
+	public byte[][] readByteData(int sizeX, int sizeY) {
+		byte[][] buffer = null;
+		int cont = 0;
+		
+		if(bands != null){
+			buffer = new byte[bands.length][sizeX * sizeY];
+			for (int iBand = 0; iBand < bands.length; iBand++){
+				cont = 0;
+				for(int iRow = line; iRow < (line + sizeY); iRow ++){
+					for(int iCol = 0; iCol < sizeX; iCol ++){
+						buffer[iBand][cont] = rasterBuf.getElemByte(iRow, iCol, iBand);
+						cont ++;
+					}
+				}
+			}
+		}else{
+			buffer = new byte[1][sizeX * sizeY];
+			for(int iRow = line; iRow < (line + sizeY); iRow ++){
+				for(int iCol = 0; iCol < sizeX; iCol ++){
+					buffer[0][cont] = rasterBuf.getElemByte(iRow, iCol, band);
+					cont ++;
+				}
+			}
+		}
+				
+		line += sizeY;
+		return buffer;
+	}
+
+	public short[][] readShortData(int sizeX, int sizeY) {
+		short[][] buffer = null;
+		int cont = 0;
+		
+		if(bands != null){
+			buffer = new short[bands.length][sizeX * sizeY];
+			for (int iBand = 0; iBand < bands.length; iBand++){
+				cont = 0;
+				for(int iRow = line; iRow < (line + sizeY); iRow ++){
+					for(int iCol = 0; iCol < sizeX; iCol ++){
+						buffer[iBand][cont] = rasterBuf.getElemShort(iRow, iCol, iBand);
+						cont ++;
+					}
+				}
+			}
+		}else{
+			buffer = new short[1][sizeX * sizeY];
+			for(int iRow = line; iRow < (line + sizeY); iRow ++){
+				for(int iCol = 0; iCol < sizeX; iCol ++){
+					buffer[0][cont] = rasterBuf.getElemShort(iRow, iCol, band);
+					cont ++;
+				}
+			}
+		}		
+				
+		line += sizeY;
+		return buffer;
+	}
+
+	public int[][] readIntData(int sizeX, int sizeY) {
+		int[][] buffer = null;
+		int cont = 0;
+		
+		if(bands != null){
+			buffer = new int[bands.length][sizeX * sizeY];
+			for (int iBand = 0; iBand < bands.length; iBand++){
+				cont = 0;
+				for(int iRow = line; iRow < (line + sizeY); iRow ++){
+					for(int iCol = 0; iCol < sizeX; iCol ++){
+						buffer[iBand][cont] = rasterBuf.getElemInt(iRow, iCol, iBand);
+						cont ++;
+					}
+				}
+			}
+		}else{
+			buffer = new int[1][sizeX * sizeY];
+			for(int iRow = line; iRow < (line + sizeY); iRow ++){
+				for(int iCol = 0; iCol < sizeX; iCol ++){
+					buffer[0][cont] = rasterBuf.getElemInt(iRow, iCol, band);
+					cont ++;
+				}
+			}
+		}			
+		
+		line += sizeY;
+		return buffer;
+	}
+	
+	public float[][] readFloatData(int sizeX, int sizeY) {
+		float[][] buffer = null;
+		int cont = 0;
+		
+		if(bands != null){
+			buffer = new float[bands.length][sizeX * sizeY];
+			for (int iBand = 0; iBand < bands.length; iBand++){
+				cont = 0;
+				for(int iRow = line; iRow < (line + sizeY); iRow ++){
+					for(int iCol = 0; iCol < sizeX; iCol ++){
+						buffer[iBand][cont] = rasterBuf.getElemFloat(iRow, iCol, iBand);
+						cont ++;
+					}
+				}
+			}
+		}else{
+			buffer = new float[1][sizeX * sizeY];
+			for(int iRow = line; iRow < (line + sizeY); iRow ++){
+				for(int iCol = 0; iCol < sizeX; iCol ++){
+					buffer[0][cont] = rasterBuf.getElemFloat(iRow, iCol, band);
+					cont ++;
+				}
+			}
+		}				
+		
+		line += sizeY;
+		return buffer;
+	}
+
+	public double[][] readDoubleData(int sizeX, int sizeY) {
+		double[][] buffer = null;
+		int cont = 0;
+		
+		if(bands != null){
+			buffer = new double[bands.length][sizeX * sizeY];
+			for (int iBand = 0; iBand < bands.length; iBand++){
+				cont = 0;
+				for(int iRow = line; iRow < (line + sizeY); iRow ++){
+					for(int iCol = 0; iCol < sizeX; iCol ++){
+						buffer[iBand][cont] = rasterBuf.getElemDouble(iRow, iCol, iBand);
+						cont ++;
+					}
+				}
+			}
+		}else{
+			buffer = new double[1][sizeX * sizeY];
+			for(int iRow = line; iRow < (line + sizeY); iRow ++){
+				for(int iCol = 0; iCol < sizeX; iCol ++){
+					buffer[0][cont] = rasterBuf.getElemDouble(iRow, iCol, band);
+					cont ++;
+				}
+			}
+		}				
+		
+		line += sizeY;
+		return buffer;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterizeGrid.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/BandList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/BandList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/BandList.java	(revision 10281)
@@ -0,0 +1,244 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import java.util.ArrayList;
+
+import org.cresques.io.exceptions.BandFoundInListException;
+
+/**
+ * Esta clase gestiona una lista de bandas que puede pertenecer
+ * a un fichero (la tiene un geoRasterFile) o puede ser una lista 
+ * de bandas de multiples ficheros (la tiene un multifiledataset) 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class BandList {
+	private ArrayList bands = new ArrayList();
+			
+	/**
+	 * Encuentra una banda en la lista.
+	 * @param file Fichero al que pertenece la banda buscada.
+	 * @param pos Posición que ocupa en el fichero.
+	 * @return true si se ha hallado la banda y false si no se 
+	 * ha encontrado
+	 */
+	public boolean findBand(Band band){
+		for(int i = 0; i < bands.size(); i++){
+			Band b = (Band)bands.get(i); 
+			if(	b.getFileName().equals(band.getFileName()) &&
+				b.getPosition() == band.getPosition())
+				return true;
+		}
+		return false;
+	}
+		
+	/**
+	 * Obtiene la lista de bandas a pintar sobre el buffer de 
+	 * salida en forma de array. Cada elemento del array es una banda
+	 * del RasterBuf de salida que ha de dibujarse y el valor que contiene
+	 * ese elemento es la banda de la imagen que va pintada en esa banda 
+	 * del RasterBuf.
+	 * <table border=1>
+	 * <tr><td>Elem</td><td>Valor</td></tr>
+	 * <tr><td>0</td><td>1</td></tr>
+	 * <tr><td>1</td><td>0</td></tr>
+	 * <tr><td>2</td><td>-1</td></tr>
+	 * <tr><td>3</td><td>0</td></tr>
+	 * <tr><td>4</td><td>2</td></tr>
+	 * </table>
+	 * El RasterBuf tendra en la banda 0 dibujada la banda 1 de este GeoRasterFile, 
+	 * en la banda 1 la 0 del dataset, en la banda 2 no habrá ninguna de este dataset,
+	 * en la 3 la 0 y en la 4 la 2 de este GeoRasterFile.
+	 * @return lista de bandas a dibujar o un array de un elemento con valor -1.
+	 */
+	public int[] bandsToDrawList(int nBandsDataImage){
+		
+		int[] bandsToRead = new int[nBandsDataImage];
+		for(int dataImageBand = 0;dataImageBand < nBandsDataImage;dataImageBand++){
+			bandsToRead[dataImageBand] = -1;
+			for(int band = 0;band < bands.size();band++){
+				if(	((Band)bands.get(band)) != null &&
+					((Band)bands.get(band)).getDataImageBandToDraw() != null){
+					for(int dest=0;dest<((Band)bands.get(band)).getDataImageBandToDraw().length;dest++){
+						if(dataImageBand == ((Band)bands.get(band)).getDataImageBandToDraw()[dest])
+							bandsToRead[dataImageBand] = band;
+					}
+				}
+			}
+		}
+	
+		return bandsToRead;
+	}
+	
+	/**
+	 * Checkea si alguna banda de la lista se estça dibujando en el buffer de salida.
+	 * @return	true si alguna banda se está dibujando y false si no
+	 */
+	public boolean isDrawingAnyBand(){
+		for(int band = 0;band < bands.size();band++){
+			if(((Band)bands.get(band)).isDrawing())
+				return true;
+		}
+		return false;
+	}
+	
+	//******************************
+	//Setters and Getters
+	//******************************
+	
+	/**
+	 * Añade una banda a la lista.
+	 * @param b banda a añadir.
+	 */
+	public void addBand(Band b, int pos)throws BandFoundInListException{
+		bands.add(b);
+	}
+	
+	/**
+	 * Añade la lista de bandas pasada por parámetro a la lista
+	 * actual. Si alguna banda ya existe no la añade y continua.
+	 * @param bl Lista de bandas
+	 */
+	public void addBandList(BandList bl){
+		for(int i = 0; i < bl.getBandCount(); i++){
+			if(!findBand(bl.getBand(i)))
+				bands.add(bl.getBand(i));
+		}
+	}
+	
+	/**
+	 * ELimina todas las bandas que tienen un nombre determinado.
+	 * @param name Nombre de las bandas a eliminar
+	 */
+	public void removeBands(String name){
+		for(int i = 0; i < getBandCount(); i++){
+			Band band = getBand(i);
+			if(band.getFileName().equals(name))
+				bands.remove(i);
+		}
+	}
+	
+	/**
+	 * Resetea la asignación de dibujado de las bandas de la imagen
+	 * sobre el DataImage cuando se hace un update para esta banda.
+	 */
+	public void clearDrawableBand(){
+		for(int i = 0; i < getBandCount(); i++)
+			((Band)bands.get(i)).clearDrawableBands();
+	}
+	
+	/**
+	 * Para este GeoRasterFile asigna que bandas se pintaran
+	 * sobre el RasterBuf cuando se haga un update. Especificamos a 
+	 * través de los parámetros para que posición del RasterBuf irá 
+	 * dibujada con que banda del fichero de imagen.
+	 * @param posDataImage	Posición del RasterBuf que queremos pintar.
+	 * @param imageBand	Banda de la imagen que se pintará
+	 */
+	public void addDrawableBand(int posRasterBuf, int imageBand){
+		try{
+			((Band)bands.get(imageBand)).setPositionToDrawInBuffer(posRasterBuf);
+		}catch(IndexOutOfBoundsException exc){
+			//No hacemos nada simplemente no inserta la banda.
+		}
+	}
+	
+	/**
+	 * Obtiene el número de bandas de un RasterBuf sobre las que se pintara
+	 * alguna banda de este fichero cuando se llama a un updateBuffer. 
+	 * @return Número de bandas. Cero en caso de no tener ninguna asignada. 
+	 */
+	public int getDrawableBandsCount(){
+		int nbands = 0;
+		for(int i = 0;i<bands.size();i++){
+			Band b = (Band)bands.get(i);
+			if(b.getDataImageBandToDraw() != null)
+				nbands += b.getDataImageBandToDraw().length;
+		}
+		return nbands;
+	}
+	
+	/**
+	 * Obtiene la banda de la posición i.
+	 * @param i Posición de la banda a obtener.
+	 * @return Banda.
+	 */
+	public Band getBand(int i){
+		return (Band)bands.get(i);
+	}
+	
+	/**
+	 * Obtiene el número de bandas.
+	 * @return entero con el número de bandas.
+	 */
+	public int getBandCount(){
+		return bands.size();
+	}
+	
+	/**
+	 * A partir de un nombre de fichero y un número de banda obtiene la banda o bandas del buffer de salida 
+	 * donde se pinta.
+	 * @param fileName Nombre de fichero
+	 * @param band Número de banda de la imagen
+	 * @return banda o bandas del buffer de salida donde se dibuja.
+	 */
+	public int[] getBufferBandToDraw(String fileName, int band){
+		for(int i = 0; i < bands.size(); i++){
+			if(((Band)bands.get(i)).getFileName().equals(fileName))
+				if(((Band)bands.get(i)).getPosition() == band)
+					return ((Band)bands.get(i)).getDataImageBandToDraw();
+		}
+		int[] r = {-1};
+		return r;
+	}
+	/**
+	 * Obtiene en un array de String la lista de nombres de ficheros
+	 * @return lista de nombres de los ficheros del GeoRasterMultiFile
+	 */
+	public String[] getBandStringList(){
+		String[] list = new String[bands.size()];
+		for(int i = 0; i < bands.size(); i++)
+			list[i] = ((Band)bands.get(i)).getFileName();
+		return list;
+	}
+	
+	/**
+	 * Obtiene en un array de enteros con la lista de la posición de bandas
+	 * @return lista de la posición de bandas
+	 */
+	public int[] getBandPositionList(){
+		int[] list = new int[bands.size()];
+		for(int i = 0; i < bands.size(); i++)
+			list[i] = ((Band)bands.get(i)).getPosition();
+		return list;
+	}
+	
+	/**
+	 * Obtiene el tipo de dato de las bandas. Esta llamada supone que todos los tipos de dato
+	 * de las bandas son igual por lo que devolverá el primero. 
+	 * @return Entero que representa el tipo de datos de las bandas
+	 */
+	public int getBandsDataType(){
+		if(bands.size() <= 0)
+			return RasterBuf.TYPE_UNDEFINED;
+		return ((Band)bands.get(0)).getDataType();
+	}
+	 
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/BandList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IQueryableRaster.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IQueryableRaster.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IQueryableRaster.java	(revision 10281)
@@ -0,0 +1,100 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+
+
+public interface IQueryableRaster {	  
+	public final static int INTERPOLATION_Undefined			= 0;
+	public final static int INTERPOLATION_NearestNeighbour	= 1;
+	public final static int INTERPOLATION_Bilinear			= 2;
+	public final static int INTERPOLATION_InverseDistance	= 3;
+	public final static int INTERPOLATION_BicubicSpline		= 4;
+	public final static int INTERPOLATION_BSpline			= 5;
+
+	/**
+	 * Obtiene el ancho de la imagen
+	 * @return  Ancho en pixeles de la imagen
+	 */
+	public int getWidth();
+	
+	/**
+	 * Obtiene el alto de la imagen
+	 * @return  Alto en pixeles de la imagen
+	 */
+	public int getHeight();
+	
+	/**
+	 * Tamaño de celda en X
+	 * @return 
+	 */
+	public double getXCellSize();
+	
+	/**
+	 * Tamaño de celda en Y
+	 * @return
+	 */
+	public double getYCellSize();
+	
+	/**
+	 * Asigna un area de interes desde la posición x,y en pixeles de ancho w y alto h
+	 * @param x Coordenada x de la esquina superior izquierda
+	 * @param y Coordenada y de la esquina superior izquierda
+	 * @param w Ancho del grid
+	 * @param h Alto del grid
+	 */
+	public void setAreaOfInterest(int x, int y, int w, int h);
+	
+	/**
+	 * Obtiene un buffer desde la posición x,y en pixeles de ancho w y alto h
+	 * @param x Coordenada x de la esquina superior izquierda
+	 * @param y Coordenada y de la esquina superior izquierda
+	 * @param w Ancho del grid
+	 * @param h Alto del grid
+	 * @return Buffer de datos
+	 */
+	public RasterBuf getData(int x, int y, int w, int h);
+	
+	/**
+	 * Devuelve el tipo de datos del raster
+	 * @see java.awt.image.DataBuffer
+	 */
+	public int getDataType();
+
+	/**
+	 * Asigna tipo de datos del raster
+	 * @see java.awt.image.DataBuffer
+	 */
+	public void setDataType(int dt);
+
+	/**
+	 * Devuelve true si la celda contiene un valor de NODATA
+	 * @param x	coordenada X
+	 * @param y coordenada Y
+	 * @return
+	 */
+	public boolean isNoData(int x, int y, int band);
+	
+	/**
+	 * Obtiene el número de bandas
+	 * @return Número de bandas
+	 */
+	public int getBandCount();
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IQueryableRaster.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IWritableRaster.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IWritableRaster.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IWritableRaster.java	(revision 10281)
@@ -0,0 +1,28 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+
+public interface IWritableRaster extends IQueryableRaster {
+	/*public void setData(int x, int y, int band, String value);
+	public void setData(int x, int y, int band, Number value);
+	public void setData(int x, int y, int band, double value);
+	public void setData(int x, int y, int band, float value);
+	public void setData(int x, int y, int band, int value);*/
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/IWritableRaster.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Band.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Band.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Band.java	(revision 10281)
@@ -0,0 +1,144 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import org.cresques.filter.IRaster;
+
+/**
+ * Clase que representa a una banda de un fichero.
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class Band {
+	//Nombre del fichero al que pertenece la banda
+	private String 		fileName = "";
+	//Posición en el fichero de la  banda
+	private int 		position = -1;
+	//Tipo de dato de la banda
+	private int 		dataType = IRaster.TYPE_BYTE;
+	//lista de bandas del buffer donde se dibuja esta banda de imagen. Cada elemento
+	//del vector es un número que corresponde con el número de banda del buffer donde se escribe esta
+	private int[]		rasterBufBandToDrawList = null;
+	
+	public Band(String f, int p, int dt){
+		setFileName(f);
+		setPosition(p);
+		setDataType(dt);
+	}
+	
+	/**
+	 * Resetea la asignación de dibujado de las bandas de la imagen
+	 * sobre el DataImage cuando se hace un update para esta banda.
+	 */
+	public void clearDrawableBands(){
+		rasterBufBandToDrawList = null;
+	}
+
+	//******************************
+	//Setters and Getters
+	//******************************
+	
+	/**
+	 * Obtiene las banda del RasterBuf sobre la que se pinta
+	 * este objeto banda
+	 * @return bandas del RasterBuf
+	 */
+	public int[] getDataImageBandToDraw() {
+		return rasterBufBandToDrawList;
+	}
+
+	
+	
+	/**
+	 * Dice si la banda se está dibujando en el buffers de salida.
+	 * @return true si la banda se está dibujando y false si no se está haciendo
+	 */
+	public boolean isDrawing(){
+		if(this.rasterBufBandToDrawList == null)
+			return false;
+		return true;
+	}
+		
+	/**
+	 * Asigna una banda del RasterBuf sobre la que se pinta
+	 * este objeto banda
+	 * @param rasterBufBandToDraw banda del RasterBuf
+	 */
+	public void setPositionToDrawInBuffer(int rasterBufBandToDraw) {
+		if(rasterBufBandToDrawList == null){
+			rasterBufBandToDrawList = new int[1];
+			rasterBufBandToDrawList[0] = rasterBufBandToDraw;
+		}else{
+			int[] auxList = new int[rasterBufBandToDrawList.length + 1];
+			for(int i=0;i<rasterBufBandToDrawList.length;i++)
+				auxList[i] = rasterBufBandToDrawList[i];
+			auxList[rasterBufBandToDrawList.length] = rasterBufBandToDraw;
+			rasterBufBandToDrawList = auxList;
+		}
+	}
+	
+	/**
+	 * Obtiene el nombre del fichero al que pertenece la banda
+	 * @return String con el nombre del fichero al 
+	 * que pertenece la banda
+	 */
+	public String getFileName() {
+		return fileName;
+	}
+
+	/**
+	 * Asigna el nombre del fichero al que pertenece la banda
+	 * @param fileName String con el nombre del fichero al 
+	 * que pertenece la banda
+	 */
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	/**
+	 * Obtiene la posición de la banda en el fichero
+	 * @return entero con la posición de la banda en el fichero
+	 */
+	public int getPosition() {
+		return position;
+	}
+
+	/**
+	 * Asigna la posición de la banda en el fichero
+	 * @param position Posición de la banda en el fichero
+	 */
+	public void setPosition(int position) {
+		this.position = position;
+	}
+
+	/**
+	 * Obtiene el tipo de dato de la banda
+	 * @return entero con el tipo de dato 
+	 */
+	public int getDataType() {
+		return dataType;
+	}
+
+	/**
+	 * Asigna el tipo de dato de la banda
+	 * @param datatype entero con el tipo de dato de la banda
+	 */
+	public void setDataType(int dataType) {
+		this.dataType = dataType;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Band.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Grid.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Grid.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Grid.java	(revision 10281)
@@ -0,0 +1,318 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.datastruct.Histogram;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.io.exceptions.FileFoundInListException;
+import org.cresques.px.Extent;
+import org.cresques.px.PxRaster;
+import org.cresques.util.Utilities;
+
+public class Grid implements IQueryableRaster, IWritableRaster  {
+	
+	private GeoRasterMultiFile 		grmf = new GeoRasterMultiFile(null);
+	private RasterBuf				rasterBuf = null;
+	private Histogram				histogram = null;
+	private PxRaster				pxRaster = null;
+	private Statistic				stats = null;
+	private int						width = 0;
+	private int						height = 0;
+	
+	private double m_dNoDataValue = -99999; //TODO:temporal
+	
+	/**
+	 * Constructor
+	 */
+	public Grid(){}
+	
+	/**
+	 * Constructor
+	 * @param grf Lista de geoRasterFile
+	 */
+	public Grid(GeoRasterFile[] grf){
+		for(int i = 0; i< grf.length; i++)
+			addFile(grf[i]);
+	}
+	
+	/**
+	 * Constructor
+	 * @param grf GeoRasterFile
+	 */
+	public Grid(GeoRasterFile grf){
+		addFile(grf);
+	}
+
+	/**
+	 * Asigna el renderizador para el calculo de histogramas a partir 
+	 * de la visualización.
+	 * @param pxR Renderizador.
+	 */
+	public void addRenderizer(PxRaster pxR){
+		this.pxRaster = pxR;
+		this.stats = pxR.stats;
+		this.getHistogram().addRenderizer(pxR);
+	}
+	
+	/**
+	 * Añade un GeoRasterFile al Grid
+	 * @param grf GeoRasterFile a añadir
+	 */
+	public void addFile(GeoRasterFile grf){
+		try{
+			grmf.addFile(grf);
+			width = grf.getWidth();
+			height = grf.getHeight();
+		}catch(FileFoundInListException e){
+			//El fichero está en la lista por lo que no lo añadimos
+		}
+	}
+	
+	/**
+	 * Elimina un GeoRasterFile del Grid
+	 * @param grf GeoRasterFile a eliminar
+	 */
+	public void removeFile(GeoRasterFile grf){
+		grmf.removeFile(grf);
+	}
+	
+	/**
+	 * Obtiene la estructura que contiene la lista de ficheros del Grid
+	 * @return GeoRasterMultiFile
+	 */
+	public GeoRasterMultiFile getGeoRasterMultiFile(){
+		return grmf;
+	}
+	
+	/**
+	 * Libera el buffer de memoria
+	 */
+	public void free(){
+		rasterBuf = null;
+		System.gc();
+	}
+	
+	/**
+	 * Resetea la asignación de dibujado de las bandas de la imagen
+	 * sobre el DataImage cuando se hace un update para esta banda.
+	 */
+	public void clearDrawableBand(){
+		for(int i = 0; i< grmf.getFileCount(); i++)
+			grmf.getBands().clearDrawableBand();
+	}
+	
+	/**
+	 * Para este GeoRasterFile asigna que bandas se pintaran
+	 * sobre el RasterBuf cuando se haga un update. Cada posición del vector es una banda
+	 * del rasterBuf y el contenido de esa posición es la banda de la imagen que se dibujará
+	 * sobre ese RasterBuf.
+	 * @param drawableBands	.
+	 */
+	public void addDrawableBands(int[] drawableBands){
+		for(int i = 0; i< drawableBands.length; i++)
+			grmf.getBands().addDrawableBand(i, drawableBands[i]);				
+	}
+	
+	/**
+	 * Asigna el área de interes en coordenadas del mundo real. Si las coordenadas exceden del tamaño de la imagen
+	 * estas coordenadas son ajustadas el extent.
+	 * @param x Coordenada X, esquina superior izquierda
+	 * @param y Coordenada Y, esquina superior izquierda
+	 * @param w Ancho del área 
+	 * @param h Alto del área
+	 * @throws ArrayIndexOutOfBoundsException
+	 */
+	public void setAreaOfInterest(double x, double y, double w, double h) throws ArrayIndexOutOfBoundsException{
+		Extent ext = new Extent(x, y, x + w, y + h);
+		ext = Utilities.calculateAdjustedView(ext, grmf.getExtent());
+		
+		rasterBuf = grmf.getWindowRaster(x, y, w, h);
+		//width = rasterBuf.getWidth();
+		//height = rasterBuf.getHeight();
+	}
+	
+	/**
+	 * Asigna el área de interes en coordenadas pixel. Si las coordenadas exceden del tamaño de la imagen
+	 * lanza una excepción.
+	 * @param x Coordenada X, esquina superior izquierda
+	 * @param y Coordenada Y, esquina superior izquierda
+	 * @param w Ancho del área 
+	 * @param h Alto del área
+	 * @throws ArrayIndexOutOfBoundsException
+	 */
+	public void setAreaOfInterest(int x, int y, int w, int h) throws ArrayIndexOutOfBoundsException{
+		if((x + w) > getWidth() || (y + h) > getHeight())
+			throw new ArrayIndexOutOfBoundsException("Out of Image");
+		
+		rasterBuf = grmf.getWindowRaster(x, y, w, h);
+		//width = rasterBuf.getWidth();
+		//height = rasterBuf.getHeight();
+	}
+		
+	/**
+	 * Ajusta el área del grid a un ancho y un alto dado en pixeles. Este ajuste se hará 
+	 * en relación a un método de interpolación definido en el parámetro.
+	 * @param w Ancho de la nueva imagen.
+	 * @param h Alto de la nueva imagen.
+	 * @param interpolation Método de interpolación que se usará en el ajuste.
+	 * @param bands Bandas que se desea en el nuevo RasterBuf ajustado. Si este parámetro es null
+	 * se usarán todas las bandas de la imagen.
+	 */
+	public void setAdjustedWindow(int w, int h, int interpolationMethod, int[] bands){
+		if(w == width && h == height)
+			return;
+		switch(interpolationMethod){
+		case IQueryableRaster.INTERPOLATION_NearestNeighbour:
+				rasterBuf = rasterBuf.adjustRasterNearestNeighbour(w, h, bands);
+				break;
+		case IQueryableRaster.INTERPOLATION_Bilinear:
+				System.out.println("Method not implemented yet");
+				break;
+		case IQueryableRaster.INTERPOLATION_InverseDistance:
+				System.out.println("Method not implemented yet");
+				break;
+		case IQueryableRaster.INTERPOLATION_BicubicSpline:
+				System.out.println("Method not implemented yet");
+				break;
+		case IQueryableRaster.INTERPOLATION_BSpline:
+				System.out.println("Method not implemented yet");
+				break;
+		}
+		//width = rasterBuf.getWidth();
+		//height = rasterBuf.getHeight();
+	}
+	
+	public RasterBuf getData(int x, int y, int w, int h) {
+
+		return null;
+	}
+
+	/**
+	 * Obtiene el tipo de datos del grid.
+	 * @return entero que representa el tipo de dato de las celdas del grid.
+	 */
+	public int getDataType() {
+		return grmf.getDataType()[0];
+	}
+
+	/**
+	 * Obtiene la altura del grid.
+	 * @return altura en celdas del grid.
+	 */
+	public int getHeight() {
+		return height;
+	}
+
+	/**
+	 * Obtiene la anchura del grid.
+	 * @return anchura en celdas del grid.
+	 */
+	public int getWidth() {
+		return width;
+	}
+
+	public double getXCellSize() {
+
+		//TODO:remove this
+		Extent e = grmf.getExtent();
+		double dCellsize = (e.getMax().getX() - e.getMin().getX() ) / (double) width;
+		
+		return dCellsize;
+		
+	}
+
+	public double getYCellSize() {
+
+		return 0;
+	}
+
+	public boolean isNoData(int x, int y, int band) {
+
+		return false;
+		
+	}
+	
+	public void setNoDataValue(double dNoDataValue){
+		
+		//TODO:temporal
+		m_dNoDataValue = dNoDataValue;
+	}
+	
+	public double getNoDataValue(){
+		
+		return m_dNoDataValue;
+		
+	}
+
+	public void setDataType(int dt) {
+		
+	}
+	
+	public int getBandCount(){
+		if(rasterBuf != null)
+			return rasterBuf.getBandCount();
+		else
+			return this.getGeoRasterMultiFile().getBandCount();
+	}
+
+	/**
+	 * Obtiene el buffer de datos del grid
+	 * @return RasterBuf
+	 */
+	public RasterBuf getRasterBuf() {
+		return rasterBuf;
+	}
+	
+	/**
+	 * Obtiene el objeto histograma asociado al grid
+	 * @return
+	 */
+	public Histogram getHistogram() {
+		if(histogram == null)
+			histogram = new Histogram(this);
+		
+		return histogram;
+	}
+
+	/**
+	 * Obtiene la clase para estadisticas
+	 * @return
+	 */
+	public Statistic getStatistic() {
+		return stats;
+	}
+	
+	/**
+	 * Evalua si una coordenada pixel cae dentro de la imagen.
+	 * @param x coordenada pixel X
+	 * @param y coordenada pixel Y
+	 */
+	public boolean isPixelInGrid(int x, int y){
+		return (x >= 0 && y >= 0 && x <= getWidth() && y <= getHeight());
+	}
+	
+	/**
+	 * Extent del grid
+	 */
+	public Extent getExtent(){
+		return grmf.getExtent();
+	}
+}
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/Grid.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/ICutRaster.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/ICutRaster.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/ICutRaster.java	(revision 10281)
@@ -0,0 +1,52 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+
+
+/**
+ * Interfaz que debe implemetar la clase que instancie un TailRasterProcess.
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public interface ICutRaster{
+	
+	/**
+	 * Método en el que deben escribirse las acciones a realizar cuando un proceso
+	 * de recortado finaliza. Esto es necesario ya que el proceso es un hilo de 
+	 * ejecución que al finalizar debe comunicar que los raster creados ya están
+	 * listos para ser tratados. Las acciones comunes a implemetar son , el
+	 * cerrado de la ventana que llama y la carga de estas capas que ya están listas.
+	 */
+	public void cutFinalize(String[] fileNames);
+	
+	/**
+	 * Método que es llamado al pulsar el botón de seleccionar herramienta. El que implemente
+	 * este interfaz debe definir una acción para dicho botón. En el caso de gvSIG deberá
+	 * realizar las acciones para seleccionar la tool cutRaster del MapTool.
+	 */
+	public void selectToolButton();
+	
+	/**
+	 * Asigna el valor inicial del recorte en pixeles
+	 * @param w Ancho del recorte
+	 * @param h Alto del recorte
+	 */
+	public void setInitValuesToSize(double w, double h);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/ICutRaster.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/GeoRasterMultiFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/GeoRasterMultiFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/GeoRasterMultiFile.java	(revision 10281)
@@ -0,0 +1,391 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.exceptions.BandFoundInListException;
+import org.cresques.io.exceptions.FileFoundInListException;
+import org.cresques.io.exceptions.NotSupportedExtensionException;
+import org.cresques.px.Extent;
+
+/**
+ * Clase que representa una imagen de raster georreferenciada formada por varias
+ * imagenes de disco que tienen la misma extensión. Contiene funcionalidades para 
+ * abrir ficheros, gestionar el extent, pintar el raster sobre un DataImage con 
+ * su gestión de bandas correspondiente.
+ *  
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class GeoRasterMultiFile{
+	//File list
+	private ArrayList 		files = new ArrayList();
+	private String			name = null;
+	//Band list
+	private BandList		bandList = new BandList();
+			
+	public GeoRasterMultiFile(String name){
+		this.name = name;
+	}
+	
+	/**
+	 * Add a file to the list.
+	 * @param f file to add.
+	 */
+	public void addFile(GeoRasterFile f)throws FileFoundInListException{
+		if(findFile(f))
+			throw new FileFoundInListException("The file already is in list.");
+		files.add(f);
+		addBands(f);
+	}
+	
+	/**
+	 * Añade un fichero a la lista a partir de su nombre
+	 * @param f fichero a añadir.
+	 */
+	public void addFile(String fileName)throws FileFoundInListException, NotSupportedExtensionException{
+		if(findFile(fileName))
+			throw new FileFoundInListException("The file already is in list.");
+		GeoRasterFile f = GeoRasterFile.openFile(null, fileName);
+		files.add(f);
+		addBands(f);
+	}
+	
+	/**
+	 * Añade el fichero a lista de georrasterfiles y sus bandas a la lista de bandas
+	 * @param grf
+	 */
+	private void addBands(GeoRasterFile grf){
+		if(grf == null)
+			return;
+		
+		int dataType = grf.getDataType();
+		for(int i = 0; i < grf.getBandCount();i++){
+			try{
+				Band band = new Band(grf.getName(), i, dataType);
+				bandList.addBand(band, i);
+			}catch(BandFoundInListException ex){
+				//No añadimos la banda
+			}
+		}
+	}
+	
+	/**
+	 * Elimina un fichero a la lista a partir de su nombre
+	 * @param fileName	Nombre del fichero a eliminar.
+	 */
+	public void removeFile(String fileName){
+		for(int i=0;i<files.size();i++){
+			if(((GeoRasterFile)files.get(i)).getName().equals(fileName)){
+				files.remove(i);
+				bandList.removeBands(fileName);
+				return;
+			}
+		}
+	}
+	
+	/**
+	 * Elimina un fichero a la lista
+	 * @param file Fichero a eliminar
+	 */
+	public void removeFile(GeoRasterFile file){
+		for(int i=0;i<files.size();i++){
+			if(((GeoRasterFile)files.get(i)).getName().equals(file.getName())){
+				files.remove(i);
+				bandList.removeBands(file.getName());
+				return;
+			}
+		}
+	}
+		
+	/**
+	 * Obtiene el número de ficheros en la lista
+	 * @return integer.
+	 */
+	public int getFileCount(){
+		return files.size();
+	}
+	
+	/**
+	 * Encuentra un fichero en la lista.
+	 * @param file Fichero búscado.
+	 * @return true si se ha hallado el fichero y false si no se 
+	 * ha encontrado
+	 */
+	public boolean findFile(GeoRasterFile file){
+		for(int i = 0;i<files.size();i++){
+			GeoRasterFile grf = (GeoRasterFile)files.get(i); 
+			if(	grf.getName().equals(file.getName()))
+				return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * Encuentra un fichero en la lista.
+	 * @param file Fichero búscado.
+	 * @return true si se ha hallado el fichero y false si no se 
+	 * ha encontrado
+	 */
+	public boolean findFile(String fileName){
+		for(int i = 0;i<files.size();i++){
+			if(((GeoRasterFile)files.get(i)).getName().equals(fileName))
+				return true;
+		}
+		return false;
+	}
+	    		
+	/**
+	 * @see org.javaGeoRaster.io.GeoData
+	 */
+	public void close(){
+		for(int i = 0; i < files.size(); i++)
+			((GeoRasterFile)files.get(i)).close();
+	}
+	
+	/**
+	 * Obtiene en un array de String la lista de nombres de ficheros
+	 * @return lista de nombres de los ficheros del GeoRasterMultiFile
+	 */
+	public String[] getNameFileStringList(){
+		String[] list = new String[files.size()];
+		for(int i = 0; i < files.size(); i++)
+			list[i] = ((GeoRasterFile)files.get(i)).getName();
+		return list;
+	}
+	
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	public RasterBuf getWindowRaster(double x, double y, double w, double h) {
+		
+		Extent selectedExtent = new Extent(x, y, x + w, y + h);
+
+		int width = (int)((selectedExtent.width() * ((GeoRasterFile)files.get(0)).getWidth()) / ((GeoRasterFile)files.get(0)).getExtent().width());
+		int height = (int)((selectedExtent.height() * ((GeoRasterFile)files.get(0)).getHeight()) / ((GeoRasterFile)files.get(0)).getExtent().height());
+					
+		RasterBuf raster = new RasterBuf(getDataType()[0], width, height, bandList.getDrawableBandsCount(), false);
+		
+		for(int i = 0; i < files.size(); i++)
+			raster = ((GeoRasterFile)files.get(i)).getWindowRaster(x, y, w, h, bandList, raster);
+							
+		return raster;
+	}
+	
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas pixel
+	 * @param h Alto en coordenadas pixel
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	public RasterBuf getWindowRaster(int x, int y, int w, int h) {
+				
+		RasterBuf raster = new RasterBuf(getDataType()[0], w, h, bandList.getDrawableBandsCount(), false);
+		
+		for(int i = 0; i < files.size(); i++)
+			raster = ((GeoRasterFile)files.get(i)).getWindowRaster(x, y, w, h, bandList, raster);
+							
+		return raster;
+	}
+	
+	//******************************
+	//Setters and Getters
+	//******************************
+	
+	/**
+	 * Calcula el tamaño de los ficheros en disco
+	 * @return tamaño en bytes de todos los ficheros de la lista
+	 */
+	public long getFileSize(){
+		int len = 0;
+		for(int i=0;i<files.size();i++){
+			if(((GeoRasterFile)files.get(i)) != null){
+				File f = new File(((GeoRasterFile)files.get(i)).getName());
+				len += f.length();
+			}
+		}
+		return len;
+	}
+	
+	/**
+	 * Obtiene la altura de la imagen a partir de la primera
+	 * @return altura
+	 */
+	public int getHeight() {
+		for(int i=0;i<files.size();i++)
+			if(((GeoRasterFile)files.get(i)) != null)
+				return ((GeoRasterFile)files.get(i)).getHeight();
+		return 0;
+	}
+
+	/**
+	 * Obtiene la anchura de la imagen a partir de la primera
+	 * @return anchura
+	 */
+	public int getWidth() {
+		for(int i=0;i<files.size();i++)
+			if(((GeoRasterFile)files.get(i)) != null)
+				return ((GeoRasterFile)files.get(i)).getWidth();
+		return 0;	}
+	
+	/**
+	 * Obtiene el número de bandas del fichero
+	 * @return
+	 */
+	public int getBandCount(){
+		return bandList.getBandCount();
+	}
+
+	/**
+	 * Obtiene el tipo de dato por banda
+	 * @return tipo de dato por banda
+	 */
+	public int[] getDataType() {
+		int[] dt = new int[getFileCount()];
+		for(int i=0;i<files.size();i++)
+			dt[i] = ((GeoRasterFile)files.get(i)).getDataType();
+				
+	    if(dt.length == 0)
+	    	return null;
+	    else
+	    	return dt;
+	}
+	
+	/**
+	 * Obtiene fichero de la posición i.
+	 * @param i Posición del fichero a obtener.
+	 * @return GeoRasterFileDataset.
+	 */
+	public GeoRasterFile getFile(int i){
+		return (GeoRasterFile)files.get(i);
+	}
+	
+	/**
+	 * Obtiene fichero de nombre fileName.
+	 * @param i Posición del fichero a obtener.
+	 * @return GeoRasterFile.
+	 */
+	public GeoRasterFile getFile(String fileName){
+		for(int i=0;i<files.size();i++){
+			if(((GeoRasterFile)files.get(i)).getName().equals(fileName))
+				return (GeoRasterFile)files.get(i); 
+		}
+		return null;		
+	}
+	
+	/**
+	 * Asigna el nombre al GeoRasterMultiFile
+	 * @param name Nombre del GeoRasterMultiFile
+	 */
+	public void setName(String name){
+		this.name = name;
+	}
+	
+	/**
+	 * Obtiene la lista de bandas
+	 * @return BandList
+	 */
+	public BandList getBands(){
+		return bandList;
+	}
+	
+	/**
+	 * Obtiene la coordenada X mínima de toda la lista
+	 * @return Coordenada X mínima
+	 */
+	public double getMinX(){
+		double minx = Double.MAX_VALUE;
+		for(int i = 0; i < files.size(); i++){
+			double aux = ((GeoRasterFile)files.get(i)).getExtent().getMin().getX();
+			if(aux < minx)
+				minx = aux;
+		}
+		return minx;
+	}
+	
+	/**
+	 * Obtiene la coordenada Y mínima de toda la lista
+	 * @return Coordenada Y mínima
+	 */
+	public double getMinY(){
+		double miny = Double.MAX_VALUE;
+		for(int i = 0; i < files.size(); i++){
+			double aux = ((GeoRasterFile)files.get(i)).getExtent().getMin().getY();
+			if(aux < miny)
+				miny = aux;
+		}
+		return miny;
+	}
+	
+	/**
+	 * Obtiene la coordenada Y máxima de toda la lista
+	 * @return Coordenada Y máxima
+	 */
+	public double getMaxX(){
+		double maxx = Double.MIN_VALUE;
+		for(int i = 0; i < files.size(); i++){
+			double aux = ((GeoRasterFile)files.get(i)).getExtent().getMin().getY();
+			if(aux > maxx)
+				maxx = aux;
+		}
+		return maxx;
+	}
+
+	/**
+	 * Obtiene la coordenada Y máxima de toda la lista
+	 * @return Coordenada Y máxima
+	 */
+	public double getMaxY(){
+		double maxy = Double.MIN_VALUE;
+		for(int i = 0; i < files.size(); i++){
+			double aux = ((GeoRasterFile)files.get(i)).getExtent().getMin().getY();
+			if(aux > maxy)
+				maxy = aux;
+		}
+		return maxy;
+	}
+	
+	/**
+	 * Obtiene el extent del multi fichero. Este corresponde al primer
+	 * GeoRasterFile de la lista.
+	 * @return Extent
+	 */
+	public Extent getExtent(){
+		if(files.size() == 0)
+			return null;
+		else
+			return ((GeoRasterFile)files.get(0)).getExtent();
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/GeoRasterMultiFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterMetaFileTags.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterMetaFileTags.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterMetaFileTags.java	(revision 10281)
@@ -0,0 +1,67 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+/**
+ * Tags que corresponden al fichero XML .rmf (Raster Metafile) 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class RasterMetaFileTags {
+	public static final String NAMESPACE = "http://www.gvsig.org";
+	public static final String ENCODING = "ISO-8859-15";
+	public static final String MAIN_TAG = "RasterMetaFile";
+	public static final String LAYER = "FLyrGeoRaster";
+	public static final String VIEWPORT = "ViewPort";
+	public static final String PROJ = "Projection";
+	public static final String BBOX = "Extent";
+	public static final String POSX = "X";
+	public static final String POSY = "Y";
+	public static final String ROTX = "RotationX";
+	public static final String ROTY = "RotationY";
+	public static final String PX_SIZE_X = "PixelSizeX";
+	public static final String PX_SIZE_Y = "PixelSizeY";
+	public static final String WIDTH = "Width";
+	public static final String HEIGHT = "Height";
+	public static final String PX_WIDTH = "ImagePxWidth";
+	public static final String PX_HEIGHT = "ImagePxHeight";
+	public static final String DIM = "Dimension";
+	
+	public static final String GEOPOINTS = "GeoPoints";
+	public static final String GEOPOINT = "GeoPoint";
+	public static final String GEOPOINT_PX = "PixelX";
+	public static final String GEOPOINT_PY = "PixelY";
+	public static final String GEOPOINT_MAPX = "MapX";
+	public static final String GEOPOINT_MAPY = "MapY";
+	public static final String GEOPOINT_ACTIVE = "Active";
+	public static final String GEOPOINT_LCENTER = "LeftCenterPoint";
+	public static final String GEOPOINT_RCENTER = "RightCenterPoint";
+	public static final String GEOPOINT_LVP = "LeftViewPort";
+	public static final String GEOPOINT_RVP = "RightViewPort";
+		
+	public static final String POINTS_LYR = "Layer";
+	public static final String POINTS_VP = "ViewPortData";
+	public static final String POINTS_PROJ = "Proj";
+	public static final String POINTS_ZOOM = "Zoom";
+	public static final String POINTS_BBOX = "Bbox";
+	public static final String POINTS_PX = "Px";
+	public static final String POINTS_PY = "Py";
+	public static final String POINTS_W = "WCWidth";
+	public static final String POINTS_H = "WCHeight";
+	public static final String POINTS_DIM = "Pdim";
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/data/RasterMetaFileTags.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFile.java	(revision 10281)
@@ -0,0 +1,130 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.IObjList;
+import org.cresques.px.gml.*;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+
+
+/**
+ * Clase de soporte para ficheros .shp de ArcView
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ * TODO extension .shp sin implementar
+ */
+public class ShpFile extends GeoFile {
+    private String name;
+    int l = 0;
+    FeatureCollection collection = null;
+
+    /**
+     * Constructor de la clase Shp
+     *
+     */
+    public ShpFile(IProjection proj, String name) {
+        super(proj, name);
+    }
+
+    /**
+     * Carga un .gml
+     * @param name nombre del fichero
+     */
+    public GeoFile load() {
+        System.out.println("Cargando " + name + " ...");
+
+        try {
+            if (FileFolder.isUrl(name)) {
+                ZipFileFolder zFolder = new ZipFileFolder(name);
+
+                return load(zFolder.getInputStream(name));
+            } else {
+                return load(new FileInputStream(name));
+            }
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException ie) {
+            System.err.println("ERROR." + l + "lineas leidas");
+            ie.printStackTrace();
+        }
+
+        return this;
+    }
+
+    public int openLayer() {
+        String m_Path = null;
+
+        try {
+            FileInputStream fin = new FileInputStream(m_Path);
+
+            // Open the file and then get a channel from the stream
+            FileChannel fc = fin.getChannel();
+            long sz = fc.size();
+
+            // Get the file's size and then map it into memory
+            MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);
+        } catch (Exception e) {
+            System.err.notify();
+        }
+
+        return 0;
+    }
+
+    public GeoFile load(InputStream is) {
+        // create a new header.
+        ShpFileHeader myHeader = new ShpFileHeader();
+
+        // read the header
+        //myHeader.readHeader(fr);
+        return this;
+    }
+
+    /**
+     * Obtiene la lista de features.
+     */
+    public IObjList getObjects() {
+        return collection;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoFile#close()
+     */
+    public void close() {
+        // TODO Auto-generated method stub
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/Rasterizer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/Rasterizer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/Rasterizer.java	(revision 10281)
@@ -0,0 +1,185 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+import org.cresques.px.PxLayerList;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.WritableRaster;
+
+
+/**
+ * Sirve datos solicitados por los drivers que salvan a raster. Implementa
+ * IDataWriter que obliga al método readData que es el que será llamado
+ * desde el driver cada vez que vacie el buffer y necesite más datos.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class Rasterizer implements IDataWriter {
+    private ViewPortData viewPort = null;
+    private ViewPortData viewPortBlock = null;
+    protected BufferedImage image;
+    private PxLayerList layerList;
+    protected int sizeBlock = 0;
+    protected int lastBlock = 0;
+    protected WritableRaster raster = null;
+    protected int contBlocks = 1;
+    protected double wcIntervalo = 0;
+    protected int[] rasterData = null;
+    protected Dimension dimension = null;
+    protected int[] buffer;
+    protected double wcAlto = 0;
+    protected Graphics2D g;
+
+    /**
+     * Constructor para las clases que hereden de esta
+     * y redefinan la funcionalidad que sirve los datos. Estas
+     * tampoco usaran el viewPort ya que se supone que disponen
+     * de su propia estructura para la seleccion de la vista
+     */
+    public Rasterizer(int sizeBlock) {
+        this.sizeBlock = sizeBlock;
+    }
+
+    /**
+     * Constructor
+     * @param layerList
+     * @param vp
+     * @param sizeBlock
+     */
+    public Rasterizer(PxLayerList layerList, ViewPortData vp, int sizeBlock) {
+        viewPort = (ViewPortData) vp.clone();
+
+        //Calculo del viewPort del primer bloque
+        wcAlto = viewPort.getExtent().maxY() - viewPort.getExtent().minY();
+        wcIntervalo = (sizeBlock * wcAlto) / viewPort.getHeight();
+        dimension = new Dimension((int) viewPort.getWidth(), sizeBlock);
+
+        calcViewPort(viewPort);
+
+        //Tamaño de último bloque
+        int nBlocks = (int) (vp.getHeight() / sizeBlock);
+        lastBlock = (int) (vp.getHeight() - (nBlocks * sizeBlock));
+
+        this.layerList = layerList;
+        this.sizeBlock = sizeBlock;
+
+        //System.out.println("==>Iniciando servidor datos raster "+viewPort.getHeight()+" "+viewPort.getWidth()+" "+wcIntervalo +"..."+viewPortBlock.getExtent().maxX()+" - "+viewPortBlock.getExtent().maxY()+" - "+viewPortBlock.getExtent().minX()+" - "+viewPortBlock.getExtent().minY());
+    }
+
+    /**
+     * Calculo del viewPort de cada bloque que vamos salvando a raster
+     * @param vp        viewPort
+     */
+    private void calcViewPort(ViewPortData vp) {
+        Extent ext = null;
+
+        if (viewPortBlock == null) { //Primer bloque
+            ext = new Extent(Math.round(vp.getExtent().minX()),
+                             Math.round(vp.getExtent().maxY()),
+                             Math.round(vp.getExtent().maxX()),
+                             Math.round(vp.getExtent().maxY() - wcIntervalo));
+        } else { //Bloques siguientes
+            ext = new Extent(Math.round(vp.getExtent().minX()),
+                             Math.round(vp.getExtent().minY()),
+                             Math.round(vp.getExtent().maxX()),
+                             Math.round(vp.getExtent().minY() - wcIntervalo));
+        }
+
+        viewPortBlock = new ViewPortData(vp.getProjection(), ext, dimension);
+        viewPortBlock.zoom(ext);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.IDataWriter#readData(int, int, int)
+     */
+    public int[] readARGBData(int sX, int sY, int nBand) {
+        if (nBand == 0) { //Con nBand==0 se devuelven las 3 bandas
+
+            //image = new BufferedImage((int)this.viewPortBlock.getWidth(), (int)this.viewPortBlock.getHeight(), BufferedImage.TYPE_INT_RGB);
+            image = new BufferedImage(sX, sY, BufferedImage.TYPE_INT_RGB);
+            g = (Graphics2D) image.getGraphics();
+            layerList.draw(g, viewPortBlock);
+
+            rasterData = image.getRGB(0, 0, sX, sY, rasterData, 0, sX);
+
+            //System.out.println("==>Cargando bloque ..."+(int)this.viewPortBlock.getWidth()+" * "+(int)this.viewPortBlock.getHeight()+" * "+viewPortBlock.getExtent().maxX()+" - "+viewPortBlock.getExtent().maxY()+" - "+viewPortBlock.getExtent().minX()+" - "+viewPortBlock.getExtent().minY());
+            //System.out.println("==>Escribiendo linea ...0 - 0 - "+sX+" - "+sY+" - "+contBlocks);
+            //Calculamos el viewPort del sgte bloque
+            if (((contBlocks + 1) * sizeBlock) <= viewPort.getHeight()) {
+                dimension = new Dimension(sX, sY);
+            } else { //Calculo de la altura del último bloque
+                dimension = new Dimension(sX,
+                                          (int) (viewPort.getHeight() -
+                                          (contBlocks * sizeBlock)));
+                wcIntervalo = (lastBlock * wcAlto) / viewPort.getHeight();
+            }
+
+            calcViewPort(viewPortBlock);
+
+            contBlocks++;
+
+            return rasterData;
+        }
+
+        return null;
+    }
+
+    /**
+     * Asigna el ancho del bloque
+     * @param sizeBlock Ancho del bloque en pixeles
+     */
+	public void setSizeBlock(int sizeBlock) {
+		this.sizeBlock = sizeBlock;
+	}
+
+	public byte[][] readByteData(int sizeX, int sizeY) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public short[][] readShortData(int sizeX, int sizeY) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public int[][] readIntData(int sizeX, int sizeY) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	public float[][] readFloatData(int sizeX, int sizeY) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public double[][] readDoubleData(int sizeX, int sizeY) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/Rasterizer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DataSource.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DataSource.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DataSource.java	(revision 10281)
@@ -0,0 +1,94 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.util.Hashtable;
+
+
+/**
+ * Origen de datos. Unidad, volumen de red, etc.
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class DataSource {
+    private static int counter = 0;
+    private static Hashtable units = new Hashtable();
+    String path = null;
+    String name = null;
+
+    public DataSource(String path, String name) {
+        this.path = path;
+        this.name = name;
+        units.put(name, this);
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public static DataSource getDSFromName(String name) {
+        if (name.indexOf("[") >= 0) {
+            name = name.substring(name.indexOf("[") + 1);
+        }
+
+        if (name.indexOf("]") >= 0) {
+            name = name.substring(0, name.indexOf("]"));
+        }
+
+        DataSource ds = (DataSource) units.get(name);
+
+        return ds;
+    }
+
+    /**
+     * Sustituye en el path el nombre de la unidad por su path real.
+     *
+     * @param path
+     * @return
+     */
+    public static String normalize(String path) {
+        if (path.indexOf("[") >= 0) {
+            DataSource ds = DataSource.getDSFromName(path);
+
+            if (ds == null) {
+                return null;
+            }
+
+            path = path.substring(0, path.indexOf("[")) + ds.getPath() +
+                   path.substring(path.indexOf("]") + 1);
+
+            //System.out.println(path);
+        }
+
+        return path;
+    }
+
+    public String toString() {
+        return "[" + counter + "]";
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DataSource.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterFile.java	(revision 10281)
@@ -0,0 +1,948 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ * 
+ * Copyright (C) 2004-5. 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ * 
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.DataBuffer;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.TreeMap;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.filter.PixelFilter;
+import org.cresques.filter.SimplePixelFilter;
+import org.cresques.io.data.BandList;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.data.RasterMetaFileTags;
+import org.cresques.io.datastruct.Metadata;
+import org.cresques.io.datastruct.Palette;
+import org.cresques.io.exceptions.SupersamplingNotSupportedException;
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.PxContour;
+import org.cresques.px.PxObjList;
+import org.gvsig.i18n.Messages;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Manejador de ficheros raster georeferenciados.
+ * 
+ * Esta clase abstracta es el ancestro de todas las clases que proporcionan
+ * soporte para ficheros raster georeferenciados.<br>
+ * Actua tambien como una 'Fabrica', ocultando al cliente la manera en que
+ * se ha implementado ese manejo. Una clase nueva que soportara un nuevo
+ * tipo de raster tendría que registrar su extensión o extensiones usando
+ * el método @see registerExtension.<br> 
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>*
+ */
+
+public abstract class GeoRasterFile extends GeoFile {
+	
+	/**
+	 * Flag que representa a la banda del Rojo
+	 */
+	public static final int 	RED_BAND	= 0x01;
+	
+	/**
+	 * Flag que representa a la banda del Verde
+	 */
+	public static final int 	GREEN_BAND	= 0x02;
+	
+	/**
+	 * Flag que representa a la banda del Azul
+	 */
+	public static final int 	BLUE_BAND	= 0x04;
+	private static TreeMap 		supportedExtensions = null;
+	protected Component 		updatable = null;
+	protected boolean 			doTransparency = false;
+	private boolean				verifySize = false;
+	/**
+	 * Parámetros de transformación del fichero .rmf. Esta será distinta
+	 * de la identidad si la función rmfExists() devuelve true.
+	 */
+	protected AffineTransform	rmfTransform = new AffineTransform();
+	
+	/**
+	 * Esta variable estará a true si el driver está supersampleando en el último dibujado.
+	 * Debe tenerse especial cuidado ya que está consulta no es adecuada desde gvSIG ya que el
+	 * dibujado se realiza asincronamente por lo que el valor puede no coincidir con el último
+	 * dibujado.
+	 */
+	protected boolean			isSupersampling = false;
+	/**
+	 * Paso correspondiente al supersampling o subsampling que se está aplicando en el último dibujado.
+	 */
+	protected int[] stepArrayX = null, stepArrayY = null;
+	
+	/**
+	 * Filtro para raster.
+	 * Permite eliminar la franja inutil alrededor de un raster girado o de
+	 * un mosaico de borde irregular.
+	 * 
+	 * Funciona bien solo con raster en tonos de gris, porque se basa que
+	 * el valor del pixel no supere un determinado valor 'umbral' que se
+	 * le pasa al constructor.
+	 * 
+	 * Desarrollado para 'limpiar' los bordes de los mosaicos del SIG
+	 * Oleicola. Para ese caso los parámetros del constructo son:
+	 * PixelFilter(0x10ffff00, 0xff000000, 0xf0f0f0);
+	 */
+	protected PixelFilter 		tFilter = null;
+	
+	/**
+	 * Asignación de banda del Rojo a una banda de la imagen
+	 */
+	protected int 				rBandNr = 1;
+	
+	/**
+	 * Asignación de banda del Verde a una banda de la imagen
+	 */
+	protected int 				gBandNr = 1;
+	
+	/**
+	 * Asignación de banda del Azul a una banda de la imagen
+	 */
+	protected int 				bBandNr = 1;
+	
+	/**
+	 * Número de bandas de la imagen
+	 */
+	protected int 				bandCount = 1;
+	private int 				dataType = DataBuffer.TYPE_BYTE;
+	protected Palette			palette = null;
+	/**
+	 * Parámetros de transformación del fichero .rmf. Estas variables tendrán valores distinto
+	 * de 0 si la función rmfExists() devuelve true.
+	 */
+	protected double imageWidth = 0D, imageHeight = 0D;
+	
+	static {
+		Messages.addResourceFamily("org.cresques.translations.text", "org.cresques.ui");
+		supportedExtensions = new TreeMap();
+		supportedExtensions.put("ecw",  EcwFile.class);
+		supportedExtensions.put("jp2",  EcwFile.class);
+		
+		supportedExtensions.put("sid",  MrSidFile.class);
+
+		supportedExtensions.put("bmp", GdalFile.class);
+		supportedExtensions.put("gif", GdalFile.class);
+		supportedExtensions.put("img", GdalFile.class);
+		supportedExtensions.put("tif", GdalFile.class);
+		supportedExtensions.put("tiff", GdalFile.class);
+		supportedExtensions.put("jpg", GdalFile.class);
+		supportedExtensions.put("png", GdalFile.class);
+		supportedExtensions.put("vrt", GdalFile.class);
+		
+		supportedExtensions.put("dat",  GdalFile.class); // Envi
+		supportedExtensions.put("lan",  GdalFile.class); // Erdas
+		supportedExtensions.put("gis",  GdalFile.class); // Erdas
+		supportedExtensions.put("pix",  GdalFile.class); // PCI Geomatics
+		supportedExtensions.put("aux",  GdalFile.class); // PCI Geomatics
+		supportedExtensions.put("adf",  GdalFile.class); // ESRI Grids
+		supportedExtensions.put("mpr",  GdalFile.class); // Ilwis
+		supportedExtensions.put("mpl",  GdalFile.class); // Ilwis
+		supportedExtensions.put("map",  GdalFile.class); // PC Raster
+	}
+	
+	/**
+	 * Factoria para abrir distintos tipos de raster.
+	 * 
+	 * @param proj Proyección en la que está el raster.
+	 * @param fName Nombre del fichero.
+	 * @return GeoRasterFile, o null si hay problemas.
+	 */
+	public static GeoRasterFile openFile(IProjection proj, String fName) {
+		String ext = fName.toLowerCase().substring(fName.lastIndexOf('.')+1);
+		GeoRasterFile grf = null;
+
+		//if (!supportedExtensions.containsKey(ext)) 
+			//return grf;
+		Class clase = null;
+		if (supportedExtensions.containsKey(ext))
+			clase = (Class) supportedExtensions.get(ext);
+		else 
+			clase = GdalFile.class;
+		
+		Class [] args = {IProjection.class, String.class};
+		try {
+			Constructor hazNuevo = clase.getConstructor(args);
+			Object [] args2 = {proj, fName};
+			grf = (GeoRasterFile) hazNuevo.newInstance(args2);
+			grf.setFileSize(new File(fName).length());
+		} catch (SecurityException e) {
+			e.printStackTrace();
+		} catch (NoSuchMethodException e) {
+			e.printStackTrace();
+		} catch (IllegalArgumentException e) {
+			e.printStackTrace();
+		} catch (InstantiationException e) {
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			e.printStackTrace();
+		} catch (InvocationTargetException e) {
+			System.err.println("Extension not supported!!!");
+			return null;
+		}
+		return grf;
+	}
+	
+	/**
+	 * Registra una clase que soporta una extensión raster.
+	 * @param ext extensión soportada.
+	 * @param clase clase que la soporta.
+	 */
+	public static void registerExtension(String ext, Class clase) {
+		ext = ext.toLowerCase();
+		System.out.println("RASTER: extension '"+ext+"' supported.");
+		supportedExtensions.put(ext, clase);
+	}
+	
+	/**
+	 * Tipo de fichero soportado.
+	 * Devuelve true si el tipo de fichero (extension) está soportado, si no
+	 * devuelve false.
+	 * 
+	 * @param fName Fichero raster
+	 * @return  true si está soportado, si no false.
+ 	 */
+	public static boolean fileIsSupported(String fName) {
+		return true;
+		//String ext = fName.toLowerCase().substring(fName.lastIndexOf('.')+1);
+		//return supportedExtensions.containsKey(ext);
+	}
+	
+	/**
+	 * Constructor
+	 * @param proj	Proyección
+	 * @param name	Nombre del fichero de imagen.
+	 */
+	public GeoRasterFile(IProjection proj, String name) {
+		super(proj, name);
+	}
+	
+	/**
+	 * Carga un fichero raster. Puede usarse para calcular el extent e instanciar 
+	 * un objeto de este tipo.
+	 */
+	abstract public GeoFile load();
+	
+	/**
+	 * Cierra el fichero y libera los recursos.
+	 */
+	abstract public void close();
+	
+	/**
+	 * Obtiene la codificación del fichero XML
+	 * @param file Nombre del fichero XML
+	 * @return Codificación
+	 */
+	private String readFileEncoding(String file){
+		FileReader fr;
+		String encoding = null;
+		try
+    	{
+			fr = new FileReader(file);
+    		BufferedReader br = new BufferedReader(fr);
+    		char[] buffer = new char[100];
+    		br.read(buffer);
+    		StringBuffer st = new StringBuffer(new String(buffer));
+    		String searchText = "encoding=\"";
+    		int index = st.indexOf(searchText);
+    		if (index>-1) {
+    			st.delete(0, index+searchText.length());
+    			encoding = st.substring(0, st.indexOf("\""));
+    		}
+    		fr.close();
+    	} catch(FileNotFoundException ex)	{
+    		ex.printStackTrace();
+    	} catch (IOException e) {
+			e.printStackTrace();
+		}
+    	return encoding;
+	}
+	
+	private double[] parserExtent(KXmlParser parser) throws XmlPullParserException, IOException {		
+		double originX = 0D, originY = 0D, w = 0D, h = 0D;
+		double pixelSizeX = 0D, pixelSizeY = 0D;
+		double shearX = 0D, shearY = 0D;
+		
+		boolean end = false;
+    	int tag = parser.next();
+    	while (!end) {
+    		switch(tag) {
+        		case KXmlParser.START_TAG:
+        			if(parser.getName() != null){	
+						if (parser.getName().equals(RasterMetaFileTags.POSX)){
+							originX = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.POSY)){
+							originY = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.PX_SIZE_X)){
+							pixelSizeX = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.PX_SIZE_Y)){
+							pixelSizeY = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.ROTX)){
+							shearX = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.ROTY)){
+							shearY = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.WIDTH)){
+							w = Double.parseDouble(parser.nextText());
+						}else if (parser.getName().equals(RasterMetaFileTags.HEIGHT)){
+							h = Double.parseDouble(parser.nextText());
+						}
+					}		    	    
+					break;
+         		case KXmlParser.END_TAG:
+         			if (parser.getName().equals(RasterMetaFileTags.BBOX))
+         				end = true;
+        			break;
+        		case KXmlParser.TEXT:
+        			break;
+    		}
+    		tag = parser.next();
+    	}
+		
+    	double[] values = {originX, originY, w, h, pixelSizeX, pixelSizeY, shearX, shearY};
+		return values;
+	}
+	
+	/**
+	 * Obtiene la información de georreferenciación asociada a la imagen en un fichero .rmf. Esta 
+	 * georreferenciación tiene la caracteristica de que tiene prioridad sobre la de la imagen.
+	 * Es almacenada en la clase GeoFile en la variable virtualExtent.
+	 * @param file Fichero de metadatos .rmf
+	 */
+	protected void readGeoInfo(String file){
+		String rmf = file.substring(0, file.lastIndexOf(".") + 1) + "rmf";
+		File rmfFile = new File(rmf);
+		if(!rmfFile.exists())
+			return;
+		
+		boolean georefOk = false;
+		
+		FileReader fr = null;
+		String v = null;
+		try {
+			fr = new FileReader(rmf);
+			KXmlParser parser = new KXmlParser();
+			parser.setInput(new FileInputStream(rmf), readFileEncoding(rmf));
+			int tag = parser.nextTag();
+			if ( parser.getEventType() != KXmlParser.END_DOCUMENT ){    		
+				parser.require(KXmlParser.START_TAG, null, RasterMetaFileTags.MAIN_TAG);    			
+				while(tag != KXmlParser.END_DOCUMENT) {
+					switch(tag) {
+						case KXmlParser.START_TAG:
+							if (parser.getName().equals(RasterMetaFileTags.LAYER)) {
+								int layerListTag = parser.next();
+								boolean geoRefEnd = false;
+								while (!geoRefEnd){
+									if(parser.getName() != null){
+										if (parser.getName().equals(RasterMetaFileTags.PROJ)){
+											//System.out.println("PROJ:"+parser.nextText());
+										} else if (parser.getName().equals(RasterMetaFileTags.BBOX)){
+											double[] values = parserExtent(parser);
+											rmfTransform = new AffineTransform(	values[4], values[7],
+													                           	values[6], values[5],
+													   							values[0], values[1]);
+											georefOk = true;
+										} else if (parser.getName().equals(RasterMetaFileTags.DIM)){
+											boolean DimEnd = false;
+											while (!DimEnd){
+												layerListTag = parser.next();
+												if(parser.getName() != null){	
+													if (parser.getName().equals(RasterMetaFileTags.PX_WIDTH)){
+														imageWidth = Double.parseDouble(parser.nextText());
+													}else if (parser.getName().equals(RasterMetaFileTags.PX_HEIGHT)){
+														imageHeight = Double.parseDouble(parser.nextText());
+														DimEnd = true;
+													}													
+												}
+											}
+											geoRefEnd = true;
+										}
+									}
+									layerListTag = parser.next();
+								}
+							}
+							break;
+						case KXmlParser.END_TAG:							
+							break;
+						case KXmlParser.TEXT:							
+							break;
+					}
+					tag = parser.next();
+				}
+				parser.require(KXmlParser.END_DOCUMENT, null, null);
+			}
+			
+			if(georefOk){
+				rmfExists = true;
+				setExtentTransform(	rmfTransform.getTranslateX(), rmfTransform.getTranslateY(), 
+									rmfTransform.getScaleX(), rmfTransform.getScaleY());
+				createExtentsFromRMF(	rmfTransform.getTranslateX(), rmfTransform.getTranslateY(), 
+										rmfTransform.getScaleX(), rmfTransform.getScaleY(), 
+										imageWidth, imageHeight, 
+										rmfTransform.getShearX(), rmfTransform.getShearY());
+			}
+			
+		} catch (FileNotFoundException fnfEx) {
+		} catch (XmlPullParserException xmlEx) {
+			xmlEx.printStackTrace();
+		} catch (IOException e) {
+		} 
+		try{
+			if(fr != null)
+				fr.close();
+		}catch(IOException ioEx){
+			//No está abierto el fichero por lo que no hacemos nada
+		}
+	}
+
+	/**
+	 * Asigna una transformación al raster para que se tenga en cuenta en la asignación del setView. 
+	 * Esta asignación recalcula el extent, el requestExtent y asigna el AffineTransform que se 
+	 * usará para la transformación. Esta transformación será considerada como si la imagen tuviera 
+	 * asociado un rmf.
+	 * @param t Transformación afín a aplicar
+	 */
+	public void setAffineTransform(AffineTransform t){
+		rmfExists = true;
+		rmfTransform = (AffineTransform)t.clone();
+		setExtentTransform(t.getTranslateX(), t.getTranslateY(), t.getScaleX(), t.getScaleY());
+		createExtentsFromRMF(	t.getTranslateX(), t.getTranslateY(), t.getScaleX(), t.getScaleY(), 
+								this.getWidth(), this.getHeight(), 
+								t.getShearX(), t.getShearY());
+	}
+	
+	/**
+	 * Asigna una transformación al raster para que se tenga en cuenta en la asignación del setView. 
+	 * Esta asignación recalcula el extent, el requestExtent y asigna el AffineTransform que se 
+	 * usará para la transformación. Esta transformación será considerada como si la imagen tuviera 
+	 * asociado un rmf.
+	 * @param originX Coordenada X de origen del raster
+	 * @param originY Coordenada Y de origen del raster
+	 * @param pixelSizeX Tamaño de pixel en X
+	 * @param pixelSizeY Tamaño de pixel en Y
+	 * @param imageWidth Ancho del raster en pixels
+	 * @param imageHeight Alto del raster en pixels
+	 * @param shearX Shearing en X
+	 * @param shearY Shearing en Y
+	 */
+	public void setAffineTransform(	double originX, double originY, double pixelSizeX, 
+										double pixelSizeY, double shearX, double shearY){
+		rmfExists = true;
+		rmfTransform.setToTranslation(originX, originY);
+		rmfTransform.shear(shearX, shearY);
+		rmfTransform.scale(pixelSizeX, pixelSizeY);
+		setExtentTransform(originX, originY, pixelSizeX, pixelSizeY);
+		createExtentsFromRMF(	originX, originY, pixelSizeX, pixelSizeY, 
+								imageWidth, imageHeight, shearX, shearY);
+	}
+	
+	/**
+	 * Obtiene la matriz de transformación que se aplica sobre la visualización 
+	 * del raster.
+	 * @return Matriz de transformación.
+	 */
+	public AffineTransform getAffineTransform(){
+		return rmfTransform;
+	}
+	
+	/**
+	 * Elimina la matriz de transformación asociada al raster y que se tiene en cuenta para
+	 * el setView. Este reseteo tendrá en cuenta que si el raster tiene asociado un rmf
+	 * esta transformación no será eliminada sino que se asignará la correspondiente al rmf
+	 * existente.  
+	 * @return devuelve true si tiene fichero rmf asociado y false si no lo tiene.
+	 */
+	public boolean resetAffineTransform(){
+		rmfExists = false;
+		rmfTransform.setToIdentity();
+		
+		//Crea los extent iniciales
+		load();
+		
+		//Lee y carga el rmf si existe
+		readGeoInfo(this.getName());
+		
+		if(rmfExists)
+			return true;
+		else
+			return false;
+	}
+	
+	/**
+	 * <P>
+	 * Calcula el extent de la imagen a partir del fichero rmf con y sin rotación. El extent con rotación corresponde
+	 * a la variable extent que contiene el extent verdadero marcado por el fichero de georreferenciación .rmf. El extent
+	 * sin rotación requestExtent es utilizado para realizar la petición ya que la petición al driver no se puede
+	 * hacer con coordenadas rotadas.
+	 * 
+	 * El calculo de la bounding box rotada lo hace con los valores de transformación leidos desde el fichero .rmf.
+	 * </p>
+	 * <P>
+	 * Para el calculo de una esquina aplicamos la formula siguiente:<BR>
+	 * PtoX = originX + pixelSizeX * x + shearX * y;<BR>
+	 * PtoY = originY + shearY * x + pixelSizeY * y;<BR>
+	 * Aplicandolo a las cuatro esquinas sustituimos en cada una de ellas por.
+	 * </P>
+	 * <UL> 
+	 * <LI>Esquina superior izquierda: x = 0; y = 0;</LI>
+	 * <LI>Esquina superior derecha: x = MaxX; y = 0;</LI>
+	 * <LI>Esquina inferior izquierda: x = 0; y = MaxY;</LI>
+	 * <LI>Esquina inferior derecha: x = MaxX; y = MaxY;</LI>
+	 * </UL> 
+	 * <P>
+	 * quedandonos en los cuatro casos:
+	 * </P>
+	 * <UL> 
+	 * <LI>Esquina superior izquierda: originX; originY;</LI>
+	 * <LI>Esquina superior derecha: PtoX = originX + pixelSizeX * x; PtoY = originY + shearY * x;</LI>
+	 * <LI>Esquina inferior izquierda:  PtoX = originX + shearX * y; PtoY = originY + pixelSizeY * y;</LI>
+	 * <LI>Esquina inferior derecha: PtoX = originX + pixelSizeX * x + shearX * y; PtoY = originY + shearY * x + pixelSizeY * y;</LI>
+	 * </UL>
+	 * 
+	 * <P>
+	 * El calculo de la bounding box se realizará de la misma forma pero anulando los parametros de shearing.
+	 * </P>
+	 * 
+	 * @param originX Coordenada X de origen del raster
+	 * @param originY Coordenada Y de origen del raster
+	 * @param pixelSizeX Tamaño de pixel en X
+	 * @param pixelSizeY Tamaño de pixel en Y
+	 * @param imageWidth Ancho del raster en pixels
+	 * @param imageHeight Alto del raster en pixels
+	 * @param shearX Shearing en X
+	 * @param shearY Shearing en Y
+	 */
+	private void createExtentsFromRMF(	double originX, double originY, double pixelSizeX, double pixelSizeY, 
+										double imageWidth, double imageHeight, double shearX, double shearY){
+				
+		Point2D p1 = new Point2D.Double(originX, originY);
+		Point2D p2 = new Point2D.Double(originX + shearX * imageHeight, originY + pixelSizeY * imageHeight);
+		Point2D p3 = new Point2D.Double(originX + pixelSizeX * imageWidth, originY + shearY * imageWidth);
+		Point2D p4 = new Point2D.Double(originX + pixelSizeX * imageWidth + shearX * imageHeight, originY + pixelSizeY * imageHeight + shearY * imageWidth);
+		
+		double minX = Math.min(Math.min(p1.getX(), p2.getX()), Math.min(p3.getX(), p4.getX()));
+		double minY = Math.min(Math.min(p1.getY(), p2.getY()), Math.min(p3.getY(), p4.getY()));
+		double maxX = Math.max(Math.max(p1.getX(), p2.getX()), Math.max(p3.getX(), p4.getX()));
+		double maxY = Math.max(Math.max(p1.getY(), p2.getY()), Math.max(p3.getY(), p4.getY()));
+		extent = new Extent(minX, minY, maxX, maxY);
+		requestExtent = new Extent(originX, originY, originX + (pixelSizeX * imageWidth), originY + (pixelSizeY * imageHeight));
+	}
+	
+	/**
+	 * Calcula la transformación que se produce sobre la vista cuando la imagen tiene un fichero .rmf
+	 * asociado. Esta transformación tiene diferencias entre los distintos formatos por lo que debe calcularla
+	 * el driver correspondiente.
+	 * @param originX Origen de la imagen en la coordenada X
+	 * @param originY Origen de la imagen en la coordenada Y
+	 */
+	abstract public void setExtentTransform(double originX, double originY, double psX, double psY);
+	
+	public static PxContour getContour(String fName, String name, IProjection proj) {
+		PxContour contour = null;
+		return contour;
+	}
+		
+	/**
+	 * Obtiene el ancho de la imagen
+	 * @return Ancho de la imagen
+	 */
+	abstract public int getWidth();
+	
+	/**
+	 * Obtiene el ancho de la imagen
+	 * @return Ancho de la imagen
+	 */
+	abstract public int getHeight();
+
+	/**
+	 * Reproyección.
+	 * @param rp	Coordenadas de la transformación
+	 */
+	abstract public void reProject(ICoordTrans rp);
+
+	/**
+	 * Asigna un nuevo Extent 
+	 * @param e	Extent
+	 */
+	abstract public void setView(Extent e);
+	
+	/**
+	 * Obtiene el extent asignado
+	 * @return	Extent
+	 */
+	abstract public Extent getView();
+	
+	public void setTransparency(boolean t) {
+		doTransparency = t;
+		tFilter = new PixelFilter(255);
+	}
+	
+	/**
+	 * Asigna un valor de transparencia
+	 * @param t	Valor de transparencia
+	 */
+	public void setTransparency(int t ) {
+		doTransparency = true;
+		tFilter = new SimplePixelFilter(255 - t);
+	}
+	
+	public boolean getTransparency() { return doTransparency; }
+	
+	public void setAlpha(int alpha) {
+		if (!doTransparency) setTransparency(255 - alpha);
+		else tFilter.setAlpha(alpha);
+	}
+	public int getAlpha() {
+		if (tFilter == null)
+			return 255;
+		return tFilter.getAlpha();
+	}
+	
+	public void setUpdatable(Component c) { updatable = c; }
+	
+	/**
+	 * Actualiza la imagen
+	 * @param width	ancho
+	 * @param height	alto
+	 * @param rp	Reproyección
+	 * @return	img
+	 */
+	abstract public Image updateImage(int width, int height, ICoordTrans rp);
+
+	/**
+	 * Obtiene el valor del raster en la coordenada que se le pasa.
+	 * El valor será Double, Int, Byte, etc. dependiendo del tipo de
+	 * raster.
+	 * @param x	coordenada X
+	 * @param y coordenada Y
+	 * @return
+	 */
+	abstract public Object getData(int x, int y, int band);
+
+	/**
+	 * Actualiza la/s banda/s especificadas en la imagen.
+	 * @param width		ancho
+	 * @param height	alto
+	 * @param rp		reproyección
+	 * @param img		imagen
+	 * @param flags		que bandas [ RED_BAND | GREEN_BAND | BLUE_BAND ]
+	 * @return		img
+	 * @throws SupersamplingNotSupportedException
+	 */
+	abstract public Image updateImage(int width, int height, ICoordTrans rp, Image img, int origBand, int destBand)throws SupersamplingNotSupportedException;
+
+	public int getBandCount() { return bandCount; }
+	
+	/**
+	 * Asocia un colorBand al rojo, verde o azul.
+	 * @param flag cual (o cuales) de las bandas.
+	 * @param nBand	que colorBand
+	 */
+	
+	public void setBand(int flag, int bandNr) {
+		if ((flag & GeoRasterFile.RED_BAND) == GeoRasterFile.RED_BAND) rBandNr = bandNr;
+		if ((flag & GeoRasterFile.GREEN_BAND) == GeoRasterFile.GREEN_BAND) gBandNr = bandNr;
+		if ((flag & GeoRasterFile.BLUE_BAND) == GeoRasterFile.BLUE_BAND) bBandNr = bandNr;
+	}
+
+	/**
+	 * Devuelve el colorBand activo en la banda especificada.
+	 * @param flag banda.
+	 */
+	
+	public int getBand(int flag) {
+		if (flag == GeoRasterFile.RED_BAND) return rBandNr;
+		if (flag == GeoRasterFile.GREEN_BAND) return gBandNr;
+		if (flag == GeoRasterFile.BLUE_BAND) return bBandNr;
+		return -1;
+	}
+	
+	/**
+	 * @return Returns the dataType.
+	 */
+	public int getDataType() {
+		return dataType;
+	}
+	
+	/**
+	 * @param dataType The dataType to set.
+	 */
+	public void setDataType(int dataType) {
+		this.dataType = dataType;
+	}
+
+	public IObjList getObjects() {
+		// TODO hay que añadir el raster a la lista de objetos
+		IObjList oList = new PxObjList(proj);
+		return oList;
+	}
+	
+	/**
+	 * Calcula los parámetros de un worl file a partir de las esquinas del raster.
+	 *    1. X pixel size A
+	 *    2. X rotation term D
+	 *    3. Y rotation term B
+	 *    4. Y pixel size E
+	 *    5. X coordinate of upper left corner C
+	 *    6. Y coordinate of upper left corner F
+	 * where the real-world coordinates x',y' can be calculated from
+	 * the image coordinates x,y with the equations
+	 *  x' = Ax + By + C and y' = Dx + Ey + F.
+	 *  The signs of the first 4 parameters depend on the orientation
+	 *  of the image. In the usual case where north is more or less
+	 *  at the top of the image, the X pixel size will be positive
+	 *  and the Y pixel size will be negative. For a south-up image,
+	 *  these signs would be reversed.
+	 * 
+	 * You can calculate the World file parameters yourself based
+	 * on the corner coordinates. The X and Y pixel sizes can be
+	 *  determined simply by dividing the distance between two
+	 *  adjacent corners by the number of columns or rows in the image.
+	 *  The rotation terms are calculated with these equations:
+	 * 
+	 *  # B = (A * number_of_columns + C - lower_right_x') / number_of_rows * -1
+	 *  # D = (E * number_of_rows + F - lower_right_y') / number_of_columns * -1
+	 * 
+	 * @param corner (tl, tr, br, bl)
+	 * @return
+	 */
+	public static double [] cornersToWorldFile(Point2D [] esq, Dimension size) {
+		double a=0,b=0,c=0,d=0,e=0,f=0;
+		double x1 = esq[0].getX(), y1 = esq[0].getY();
+		double x2 = esq[1].getX(), y2 = esq[1].getY();
+		double x3 = esq[2].getX(), y3 = esq[2].getY();
+		double x4 = esq[3].getX(), y4 = esq[3].getY();
+		// A: X-scale
+		a = Math.abs( Math.sqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
+		      / size.getWidth());
+
+		// E: negative Y-scale
+		e =  - Math.abs(Math.sqrt((x1-x4)*(x1-x4)+
+		      (y1-y4)*(y1-y4))/size.getHeight());
+
+		// C, F: upper-left coordinates
+		c = x1;
+		f = y1;
+		
+		// B & D: rotation parameters
+		b = (a * size.getWidth() + c - x3 ) / size.getHeight() * -1;
+		d = (e * size.getHeight() + f - y3 ) / size.getWidth() * -1;
+
+		double [] wf = {a,d,b,e,c,f}; 
+		return wf;  
+	}
+    public static String printWF(String fName, Point2D [] esq, Dimension sz) {
+    	double [] wf = GeoRasterFile.cornersToWorldFile(esq, sz);
+    	System.out.println("wf para "+fName);
+    	System.out.println(esq+"\n"+sz);
+    	String wfData = "";
+    	for (int i=0; i<6; i++)
+    		wfData += wf[i]+"\n";
+		System.out.println(wfData);
+		return wfData;
+    }
+    
+    public static void saveWF(String fName, String data) throws IOException {
+    	FileWriter fw = new FileWriter(fName);
+    	fw.write(data);
+    	fw.flush();
+    	fw.close();
+    }
+
+	/**
+	 * Cosulta si hay que verificar la relación de aspecto de la imagen, es decir comprueba que el ancho/alto
+	 * pasados a updateImage coinciden con el ancho/alto solicitado en setView a la imagen
+	 * @return true si está verificando la relación de aspecto. 
+	 */
+	public boolean mustVerifySize() {
+		return verifySize;
+	}
+
+	/**
+	 * Asigna el flag que dice si hay que verificar la relación de aspecto de la imagen, es decir 
+	 * comprueba que el ancho/alto pasados a updateImage coinciden con el ancho/alto solicitado 
+	 * en setView a la imagen.
+	 * @return true si está verificando la relación de aspecto. 
+	 */
+	public void setMustVerifySize(boolean verifySize) {
+		this.verifySize = verifySize;
+	}
+
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas reales. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param rasterBuf	Buffer de datos
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	abstract public RasterBuf getWindowRaster(double x, double y, double w, double h, BandList bandList, RasterBuf rasterBuf);
+	
+	/**
+	 * Obtiene una ventana de datos de la imagen a partir de coordenadas pixel. 
+	 * No aplica supersampleo ni subsampleo sino que devuelve una matriz de igual tamaño a los
+	 * pixeles de disco. 
+	 * @param x Posición X superior izquierda
+	 * @param y Posición Y superior izquierda
+	 * @param w Ancho en coordenadas reales
+	 * @param h Alto en coordenadas reales
+	 * @param rasterBuf	Buffer de datos
+	 * @param bandList
+	 * @return Buffer de datos
+	 */
+	abstract public RasterBuf getWindowRaster(int x, int y, int w, int h, BandList bandList, RasterBuf rasterBuf);
+	
+	abstract public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band);
+	
+	abstract public int getBlockSize();
+	
+	/**
+	 * Obtiene el objeto que contiene los metadatos. Este método debe ser redefinido por los
+	 * drivers si necesitan devolver metadatos. 
+	 * @return
+	 */
+	public Metadata getMetadata(){
+		return null;
+	}
+	
+	/**
+	 * Asigna un extent temporal que puede coincidir con el de la vista. Esto es 
+	 * util para cargar imagenes sin georreferenciar ya que podemos asignar el extent
+	 * que queramos para ajustarnos a una vista concreta
+	 * @param tempExtent The tempExtent to set.
+	 */
+	public void setExtent(Extent ext) {
+		this.extent = ext;
+	}
+	
+	/**
+	 * Dice si el fichero tiene georreferenciación o no.
+	 * @return true si tiene georreferenciación y false si no la tiene
+	 */
+	public boolean isGeoreferenced(){
+		return true;
+	}
+
+	/**
+	 * Informa de si el driver ha supersampleado en el último dibujado. Es el driver el que colocará
+	 * el valor de esta variable cada vez que dibuja. Debe tenerse especial cuidado ya que está consulta no es adecuada desde gvSIG ya que el
+	 * dibujado se realiza asincronamente por lo que el valor puede no coincidir con el último
+	 * dibujado.
+	 * @return true si se ha supersampleado y false si no se ha hecho.
+	 */
+	public boolean isSupersampling() {
+		return this.isSupersampling;
+	}
+	
+	/**
+	 * Asigna el valor del paso en X e Y aplicado en el último dibujado. Es el driver el que colocará
+	 * el valor de esta variable cada vez que dibuja. 
+	 * @param stepx Paso en X
+	 * @param stepy Paso en Y
+	 */
+	public void setStep(int[] stepArrayx, int[] stepArrayy){
+		this.stepArrayX = stepArrayx;
+		this.stepArrayY = stepArrayy;
+	}
+	
+	/**
+	 * Obtiene el valor del paso en X aplicado en el último dibujado. Es el driver el que colocará
+	 * el valor de esta variable cada vez que dibuja. 
+	 * @return
+	 */
+	public int[] getStepX(){
+		return stepArrayX;
+	}
+	
+	/**
+	 * Obtiene el valor del paso en Y aplicado en el último dibujado. Es el driver el que colocará
+	 * el valor de esta variable cada vez que dibuja. 
+	 * @return
+	 */
+	public int[] getStepY(){
+		return stepArrayY;
+	}
+
+	/**
+	 * Obtiene el objeto paleta. Esta paleta es la que tiene adjunta el fichero de disco. Si es
+	 * null este objeto quiere decir que no tiene paleta para su visualización. 
+	 * @return Palette
+	 */
+	public Palette getPalette() {
+		return palette;
+	}
+
+	/**
+	 * Asigna el objeto paleta. Esta paleta es la que tiene adjunta el fichero de disco. Si es
+	 * null este objeto quiere decir que no tiene paleta para su visualización. 
+	 * @param Palette
+	 */
+	public void setPalette(Palette palette) {
+		this.palette = palette;
+	}
+	
+	/**
+	 * Método que indica si existe un fichero .rmf asociado al GeoRasterFile.
+	 * @return
+	 */
+	public boolean rmfExists(){
+		return this.rmfExists;
+	}
+		
+	/**
+	 * Obtiene los parámetros de la transformación afín que corresponde con los elementos de
+	 * un fichero tfw.
+	 * <UL> 
+	 * <LI>[1]tamaño de pixel en X</LI>
+	 * <LI>[2]rotación en X</LI>
+	 * <LI>[4]rotación en Y</LI>
+	 * <LI>[5]tamaño de pixel en Y</LI>
+	 * <LI>[0]origen en X</LI>
+	 * <LI>[3]origen en Y</LI>
+	 * </UL>
+	 * Este método debe ser reimplementado por el driver si tiene esta información. En principio
+	 * Gdal es capaz de proporcionarla de esta forma.
+	 * @return vector de double con los elementos de la transformación afín.
+	 */
+	public double[] getTransform(){return null;}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoRasterFile.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/.cvsignore	(revision 10281)
@@ -0,0 +1,3 @@
+*.swp
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroup.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroup.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroup.java	(revision 10281)
@@ -0,0 +1,350 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+
+import java.util.Locale;
+
+
+/**
+ * Grupo Dxf (code, data). Auxiliar para leer ficheros dxf
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author "Michel Michaud" (code from)
+ */
+public class DxfGroup {
+    /*
+    def get_group(handle):
+    _code = int(handle.readline())
+    _dfun = get_data_type(_code)
+    _data = _dfun(handle.readline())
+    return (_code, _data)
+     */
+    private static final DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
+    private static final DecimalFormat[] decimalFormats = new DecimalFormat[] {
+                                                              new DecimalFormat("#0",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.0",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.00",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.0000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.00000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.000000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.0000000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.00000000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.000000000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.0000000000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.00000000000",
+                                                                                dfs),
+                                                              new DecimalFormat("#0.000000000000",
+                                                                                dfs)
+                                                          };
+    int code;
+    Object data;
+    
+    /**
+     * Constructor por defecto.
+     */
+    public DxfGroup() {
+        code = -1;
+        data = null;
+    }
+    
+    /**
+     * Constructor habitual. Representa una entidad individual dentro del DXF
+     * @param code, índice del dato dentro del DxfGroup
+     * @param data, el propio dato que queda almacenado en el DxfGroup
+     */
+    public DxfGroup(int code, String data) {
+        this.code = code;
+        this.data = data;
+    }
+    
+    /**
+     * Lee una entidad del DXF y la empaqueta en un DxfGroup.
+     * @param fi, BufferedReader mediante el cual accedemos al DXF
+     * @return DxfGroup con la información procedente del DXF
+     * @throws NumberFormatException
+     * @throws IOException
+     */
+    public static DxfGroup read(BufferedReader fi)
+                         throws NumberFormatException, IOException {
+        DxfGroup grp = null;
+        String txt = fi.readLine();
+
+        if (txt != null) {
+            if (!txt.equals("")) {
+                grp = new DxfGroup();
+                grp.code = Integer.parseInt(txt.trim());
+                grp.readData(fi);
+            } else {
+                // Se trata de una linea en blanco y no se hace nada.
+            }
+        }
+
+        return grp;
+    }
+    
+    /**
+     * Devuelve el code
+     * @return
+     */
+    public int getCode() {
+        return code;
+    }
+    
+    /**
+     * Devuelve data
+     * @return
+     */
+    public Object getData() {
+        return data;
+    }
+    
+    /**
+     * Lee un dato individual dentro de un DxfGroup
+     * @param fi, BufferedReader
+     * @throws IOException
+     */
+    private void readData(BufferedReader fi) throws IOException {
+        String txt = fi.readLine().trim();
+
+        if ((0 <= code) && (code <= 9)) {
+            data = txt; //_dfun = string_data
+        } else if ((10 <= code) && (code <= 59)) {
+            data = new Double(Double.parseDouble(txt)); //_dfun = float_data
+        } else if ((60 <= code) && (code <= 79)) {
+            try {
+                data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 16-bit int
+            } catch (java.lang.NumberFormatException e) {
+                data = new Integer((int) Double.parseDouble(txt));
+            }
+        } else if ((90 <= code) && (code <= 99)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 32-bit int
+        } else if (code == 100) {
+            data = txt; //_dfun = unicode_data
+        } else if (code == 102) {
+            // Fran: Comentado para ganar velocidad.
+            //System.err.println("Dxf: codigo " + code + " no implementado."); //_dfun = unicode_data
+        } else if (code == 105) {
+            data = txt;
+            ; //_dfun = handle_data
+        } else if ((110 <= code) && (code <= 139)) {
+            data = new Double(Double.parseDouble(txt)); //_dfun = float_data // not in dxf spec
+        } else if ((140 <= code) && (code <= 149)) { // says 147 in dxf spec
+            data = new Double(Double.parseDouble(txt)); //_dfun = float_data
+        } else if ((170 <= code) && (code <= 179)) { // says 175 in dxf spec
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 16-bit int
+        } else if ((210 <= code) && (code <= 239)) {
+            data = new Double(Double.parseDouble(txt)); //_dfun = float_data // del TEXT procendente de exportacion de microstation 
+        } else if ((270 <= code) && (code <= 279)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // not in dxf spec
+        } else if ((280 <= code) && (code <= 289)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 8-bit int
+        } else if ((290 <= code) && (code <= 299)) {
+            data = new Boolean(Boolean.getBoolean(txt)); //_dfun = bool_data
+        } else if ((300 <= code) && (code <= 309)) {
+            data = txt; //_dfun = string_data
+        } else if ((310 <= code) && (code <= 319)) {
+            //_dfun = bin_data
+            //throw new IOException("Dxf: codigo "+code+" no implementado.");
+        } else if ((320 <= code) && (code <= 329)) {
+            //_dfun = handle_data
+            //throw new IOException("Dxf: codigo "+code+" no implementado.");
+        } else if ((330 <= code) && (code <= 369)) {
+            // Fran: Comentado para ganar velocidad.
+            //System.err.println("Dxf: codigo " + code + " no implementado."); //_dfun = hex_data
+        } else if ((370 <= code) && (code <= 379)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 8-bit int
+        } else if ((380 <= code) && (code <= 389)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 8-bit int
+        } else if ((390 <= code) && (code <= 399)) {
+            data = txt; //_dfun = handle_data
+        } else if ((400 <= code) && (code <= 409)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 16-bit int
+        } else if ((410 <= code) && (code <= 419)) {
+            data = txt; //_dfun = string_data
+        } else if (code == 999) {
+            data = txt; //_dfun = string_data // comment
+        } else if ((1000 <= code) && (code <= 1009)) {
+            data = txt; //_dfun = string_data
+        } else if ((1010 <= code) && (code <= 1059)) {
+            data = new Double(Double.parseDouble(txt)); //_dfun = float_data
+        } else if ((1060 <= code) && (code <= 1070)) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data // 16-bit int
+        } else if (code == 1071) {
+            data = new Integer(Integer.parseInt(txt)); //_dfun = int_data # 32-bit int
+        } else {
+            throw new IOException("DxfReader: código " + code +
+                                  " desconocido.");
+
+            //raise ValueError, "Unexpected code: %d" % code
+        }
+
+        //return _dfun
+    }
+    
+    /**
+     * Permite comparar dos objetos de la clase DxfGroup
+     * @param c, code
+     * @param s, data
+     * @return boolean
+     */
+    public boolean equals(int c, String s) {
+        if ((c == code) && (s.compareTo((String) data) == 0)) {
+            return true;
+        }
+
+        return false;
+    }
+    
+    /**
+     * Devuelve un dato concreto en forma de String tabulado
+     * @param code
+     * @return String
+     */
+    public static String int34car(int code) {
+        if (code < 10) {
+            return "  " + Integer.toString(code);
+        } else if (code < 100) {
+            return " " + Integer.toString(code);
+        } else {
+            return Integer.toString(code);
+        }
+    }
+    
+    /**
+     * Devuelve un dato concreto en forma de String tabulado
+     * @param value
+     * @return String
+     */
+    public static String int6car(int value) {
+        String s = "     " + Integer.toString(value);
+
+        return s.substring(s.length() - 6, s.length());
+    }
+    
+    /**
+     * Convierte a String un dato del DxfGroup
+     * @param code
+     * @param value
+     * @return String
+     */
+    public static String toString(int code, String value) {
+        return int34car(code) + "\r\n" + value + "\r\n";
+    }
+    
+    /**
+     * Convierte a String un dato del DxfGroup
+     * @param code
+     * @param value
+     * @return String
+     */
+    public static String toString(int code, int value) {
+        return int34car(code) + "\r\n" + int6car(value) + "\r\n";
+    }
+    
+    /**
+     * Convierte a String un dato del DxfGroup
+     * @param code
+     * @param value
+     * @param decimalPartLength
+     * @return String
+     */
+    public static String toString(int code, float value, int decimalPartLength) {
+        return int34car(code) + "\r\n" +
+               decimalFormats[decimalPartLength].format((double) value) +
+               "\r\n";
+    }
+    
+    /**
+     * Convierte a String un dato del DxfGroup
+     * @param code
+     * @param value
+     * @param decimalPartLength
+     * @return String
+     */
+    public static String toString(int code, double value, int decimalPartLength) {
+        return int34car(code) + "\r\n" +
+               decimalFormats[decimalPartLength].format(value) + "\r\n";
+    }
+    
+    /**
+     * Convierte a String un dato del DxfGroup
+     * @param code
+     * @param value
+     * @return String
+     */
+    public static String toString(int code, Object value) {
+        if (value instanceof String) {
+            return toString(code, (String) value);
+        } else if (value instanceof Integer) {
+            return toString(code, ((Integer) value).intValue());
+        } else if (value instanceof Double) {
+            return toString(code, ((Double) value).floatValue(), 3);
+        } else if (value instanceof Double) {
+            return toString(code, ((Double) value).doubleValue(), 6);
+        } else {
+            return toString(code, value.toString());
+        }
+    }
+    
+    /**
+     * Convierte a String un dato del DxfGroup
+     */
+    public String toString() {
+        return toString(code, data);
+    }
+
+    /**
+     * jmorell: Permite rellenar los datos. Útil en la escritura de DXFs.
+     * @param data The data to set.
+     */
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+    /**
+     * jmorell: Permite rellenar los códigos. Útil en la escritura de DXFs.
+     * @param code The code to set.
+     */
+    public void setCode(int code) {
+        this.code = code;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DxfGroup.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ZipFileFolder.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ZipFileFolder.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ZipFileFolder.java	(revision 10281)
@@ -0,0 +1,110 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class ZipFileFolder extends FileFolder {
+    String zName = null;
+    public ZipFile file = null;
+
+    public ZipFileFolder() {
+        super();
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param fname
+     */
+    public ZipFileFolder(String fName) throws IOException {
+        fName = DataSource.normalize(fName);
+
+        if (isUrl(fName)) {
+            zName = getZName(fName);
+        } else {
+            zName = fName;
+        }
+
+        file = new ZipFile(zName);
+    }
+
+    /**
+     * Analiza un nombre de fichero en formato zip://zipname.zip?file.ext
+     * @param urlName
+     */
+    public static boolean isUrl(String name) {
+        String str = name.substring(0, 3);
+        str.toLowerCase();
+
+        if (str.compareTo("zip") == 0) {
+            return true;
+        }
+
+        return false;
+    }
+
+    private String getZName(String urlName) {
+        return urlName.substring(6, urlName.indexOf("?"));
+    }
+
+    private String getFName(String urlName) {
+        return urlName.substring(urlName.indexOf("?") + 1);
+    }
+
+    public ZipEntry getZipEntry(String fName) throws IOException {
+        InputStream is = null;
+
+        if (isUrl(fName)) {
+            fName = getFName(fName);
+        }
+
+        return file.getEntry(fName);
+    }
+
+    public InputStream getInputStream(String fName) throws IOException {
+        return file.getInputStream(getZipEntry(fName));
+    }
+
+    public InputStream getInputStream(ZipEntry ze) throws IOException {
+        return file.getInputStream(ze);
+    }
+
+    public int count() {
+        return file.size();
+    }
+
+    public Enumeration entries() {
+        return file.entries();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ZipFileFolder.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Histogram.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Histogram.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Histogram.java	(revision 10281)
@@ -0,0 +1,617 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io.datastruct;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Writer;
+
+import org.cresques.io.data.Grid;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.px.Extent;
+import org.cresques.px.PxRaster;
+import org.cresques.util.Utilities;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+
+/**
+ * Clase para la gestión de histogramas de un raster. Es la encargada del calculo de un histograma
+ * total o parcial de un raster a partir de los datos de disco. Este calculo se hace leyendo los
+ * datos por bloques para no cargarlo completamente en memoria. Además también es la encargada de gestionar
+ * salvar este histograma a .rmf. En caso de que solicite un histograma del raster completo este irá
+ * a buscarlo al fichero rmf asociado antes de calcularlo por si ya existise. Al realizar el calculo
+ * del histograma de la imagen completa este será salvado en el fichero .rmf asociado al raster.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class Histogram extends Thread{
+	
+	/**
+	 * Tamaño del bloque de calculo de histograma. La lectura del raster se divide en partes
+	 * de BLOCK de altura para no cargar todo el raster en memoria de una vez.
+	 */
+	private static final int			BLOCK = 512;
+	private Grid 						grid = null;
+
+	/**
+	 * Flag que dice si el histograma a calcualar es el seleccionado en el area de interes
+	 * o el histograma completo.
+	 */ 
+	private boolean 					calcFullHistogram = true;
+	/**
+	 * Histograma de la imagen completa
+	 */
+	private int[][]						histogram = null;
+	/**
+	 * Histograma acumulado de la imagen completa
+	 */
+	private int[][]						accumulatedHistogram = null;
+	/**
+	 * Variables que definen una área de interes
+	 */
+	private int 						xAOI, yAOI, widthAOI, heightAOI;
+	/**
+	 * Porcentaje que lleva construido el histograma
+	 */
+	private int							percent = 0;
+	/**
+	 * Variable que estará a true si el histograma esta siendo leido desde fichero .rmf y false
+	 * si ha sido calculado. En este último caso se salvará a disco una vez termine de ser calculado
+	 */
+	private boolean[]					isReadingFromRMF = null;
+	/**
+	 * Renderizador para el calculo de histogramas a partir 
+	 * de la visualización.
+	 */
+	private PxRaster					pxRaster = null;
+	/**
+	 * Histograma de la vista
+	 */
+	private int[][]						viewHistogram = null;
+	/**
+	 * Bandas que solicita el cliente. Cada elemento del array es una banda, si está a true se devuelve 
+	 * esa banda con histograma calculado y si está a false se devolverá esa banda con el histograma a 0.
+	 * Este array solo es tenído en cuenta para el histograma con fuente de datos reales y no para el de
+	 * la visualización.
+	 */
+	private boolean[]					showBands = {true, true, true};
+	/**
+	 * Writer para modificar o crear los archivos .rmf.
+	 */
+	private Writer						writer = null;
+	/**
+	 * Herramientas para la persistencia del histograma;
+	 */
+	private HistogramPersistence				tools = null;
+	/**
+	 * Constructor 
+	 * @param grid
+	 */
+	public Histogram(Grid grid){
+		addGrid(grid);
+	}
+	
+	/**
+	 * Sustituye el grid del histograma 
+	 * @param grid
+	 */
+	public void addGrid(Grid grid){
+		this.grid = grid;
+		isReadingFromRMF = new boolean[grid.getBandCount()];
+	}
+
+	/**
+	 * Obtiene el grid asociado al histograma
+	 * @return Grid
+	 */
+	public Grid getGrid() {
+		return grid;
+	}
+	
+	/**
+	 * Obtiene el renderizador asociado al histograma
+	 * @return PxRaster
+	 */
+	public PxRaster getRenderizer() {
+		return pxRaster;
+	}
+	
+	/**
+	 * Asigna el renderizador para el calculo de histogramas a partir 
+	 * de la visualización.
+	 * @param pxR Renderizador.
+	 */
+	public void addRenderizer(PxRaster pxR){
+		this.pxRaster = pxR;
+	}
+	
+	/**
+	 * Asigna un area de interes para el calculo de histograma
+	 * @param x Posición X del area de interes
+	 * @param y Posición Y del area de interes
+	 * @param w Ancho del área de interes
+	 * @param h Alto del área de interes
+	 */
+	public void setAreaOfInterest(int x, int y, int w, int h){
+		this.xAOI = x;
+		this.yAOI = y;
+		this.widthAOI = w;
+		this.heightAOI = h;
+	}
+	
+	/**
+	 * Obtiene el histograma de la imagen completa en caso de que este ya haya sido
+	 * calculado. Si histogram es null habrá que llamar a la función calcFullHistogram para
+	 * calcularlo.
+	 * @return histograma de la imagen completa
+	 */
+	public int[][] getFullHistogram(){
+		return histogram;
+	}
+	
+	/**
+	 * Obtiene el histograma acumulado de la imagen completa en caso de que este ya haya sido
+	 * calculado. Si histogram es null habrá que llamar a la función calcFullAccumulatedHistogram para
+	 * calcularlo.
+	 * @return histograma acumulado de la imagen completa
+	 */
+	public int[][] getFullAccumulatedHistogram(){
+		histogram = null;
+		histogram = readFullHistogramFromRMF();
+		
+		return accumulatedHistogram;
+	}
+	
+	/**
+	 * Obtiene el histograma desde el fichero RMF si tiene
+	 * @return 
+	 */
+	private int[][] readFullHistogramFromRMF(){
+		String fName = null;
+		String values = null;
+		String[] vect = null;
+		File fl = null;
+		KXmlParser parser = new KXmlParser();
+		int [][] hist = null;
+		int index = 0;
+		boolean end = false;
+		boolean exists = false;
+		
+		hist = new int [grid.getGeoRasterMultiFile().getBandCount()][256];
+		try{
+			for(int i = 0 ; i < grid.getGeoRasterMultiFile().getFileCount() ; i++){
+				fName = grid.getGeoRasterMultiFile().getFile(i).getName();
+				fl = new File(fName.substring(0, fName.lastIndexOf(".") + 1) + "rmf");
+				exists = false;
+				if (!fl.exists())
+					return null;
+				else{
+					parser.setInput(new FileInputStream(fl.getPath()), null);
+					int tag = parser.next();
+					parser.require(parser.START_TAG, null, "RasterMetaFile");
+					tag = parser.next();
+					end = false;
+					while(!end){
+						switch(tag){
+						case KXmlParser.TEXT:
+							tag = parser.next();
+							break;
+						case KXmlParser.START_TAG:
+							if (parser.getName().equals("Band")){
+								parser.require(KXmlParser.START_TAG, null, "Band");
+								parser.nextTag();
+								parser.require(KXmlParser.START_TAG, null, "Values");
+								values = parser.nextText();
+								parser.require(KXmlParser.END_TAG, null, "Values");
+								tag = parser.nextTag();
+								parser.require(KXmlParser.END_TAG, null, "Band");
+								
+								exists = true;
+								vect = new String[256];
+								vect = values.split(" ");
+								
+								for(int j = 0 ; j < 256 ; j++){
+									if (showBands[index])
+										hist[index][j] = Integer.valueOf(vect[j]).intValue();
+									else
+										hist[index][j] = 0;
+								}
+									
+								index++;
+							}
+							tag = parser.next();
+							break;
+						case KXmlParser.END_TAG:
+							if(parser.getName().equals("RasterMetaFile"))
+								end = true;
+							tag = parser.next();
+							break;
+							
+						default: 
+							tag = parser.next();
+						}
+					}
+					if (!exists)
+						return null;
+				}
+			}
+		}catch(XmlPullParserException e){
+			return null;
+		}catch(FileNotFoundException ex){
+			return null;
+		}catch(IOException exc){
+			return null;
+		}
+		
+		return hist;
+		
+	}
+	
+	/**
+	 * Obtiene el histograma desde el fichero RMF si tiene y calcula a partir de
+	 * este el acumulado
+	 * @return 
+	 */
+	public int[][] readFullAccumulatedHistogramFromRMF(){
+		//TODO: implementar readFullAccumulatedHistogramFromRMF()
+		this.readFullHistogramFromRMF();
+		//.....
+		return null;
+	}
+	
+	/**
+	 * Escribe el histograma en el fichero RMF de disco asociado al raster. Esta escritura
+	 * solo se realiza si no se ha leido de RMF
+	 */
+	public void writeFullHistogramToRMF() throws IOException{
+		File rmfFile = null;
+		String grfName = null;
+		tools = new HistogramPersistence();
+		int[][] grfHistogram = null;
+		
+		//Cuando solo existe un GeoRasterFile en el Grid
+		if (grid.getGeoRasterMultiFile().getFileCount() == 1)
+			if (!isReadingFromRMF[0]){
+				grfName = grid.getGeoRasterMultiFile().getFile(0).getName();
+				int grfBands = grid.getGeoRasterMultiFile().getFile(0).getBandCount();
+				tools.makeRMFHistogram(histogram, grfName, grfBands);				
+			}
+		
+		//Si el Grid contiene mas de un GeoRasterFile
+		if (grid.getGeoRasterMultiFile().getFileCount() > 1){
+			for (int i = 0; i < grid.getGeoRasterMultiFile().getFileCount() ; i++){
+				int grfBands = grid.getGeoRasterMultiFile().getFile(i).getBandCount();
+				int grfCount = 0;
+				grfName = grid.getGeoRasterMultiFile().getFile(i).getName();
+				boolean isReading = false;
+				grfHistogram = new int[grfBands][256];
+				for (int j = 0 ; j < grid.getBandCount() ; j++){
+					if (grid.getGeoRasterMultiFile().getBands().getBandStringList()[j].equals(grfName)){
+						grfHistogram[grfCount] = histogram[j];
+						grfCount++;
+						//if(isReadingFromRMF[j])
+							//isReading = true;
+						}
+				}
+				if (!isReading)
+					tools.makeRMFHistogram(grfHistogram, grfName, grfBands);
+			}
+		}
+	}
+	
+	/**
+	 * Calcula el histograma de la imagen completa.
+	 */
+	public synchronized void run(){
+		while(true){
+			//Asignamos las bandas que van a dibujarse
+			int[] drawableBands = new int[grid.getBandCount()];
+			for(int i = 0; i < grid.getBandCount(); i++)
+				drawableBands[i] = i;
+			grid.clearDrawableBand();
+			grid.addDrawableBands(drawableBands);
+			
+			int heightArea = grid.getHeight();
+			int widthArea = grid.getWidth();
+			int poxInitX = 0;
+			int lastY = 0;
+			if(!calcFullHistogram){ //Calculo del histograma en el área de interes
+				heightArea = heightAOI;
+				widthArea = widthAOI;
+				poxInitX = xAOI;
+				lastY = yAOI;
+			}
+			
+			//Calculamos bloques de tamaño BLOCK para no leer toda la imagen de golpe
+			int nBlocks = (int)(heightArea / BLOCK);
+			int lastBlock = heightArea - (nBlocks * BLOCK);
+			int incrPercent = (int)(100 / (nBlocks + 1));
+	
+			switch(grid.getDataType()){
+			case RasterBuf.TYPE_BYTE: byteHistogram(poxInitX, lastY, widthArea, nBlocks, lastBlock, incrPercent); break;
+			case RasterBuf.TYPE_SHORT: shortHistogram(poxInitX, lastY, widthArea, nBlocks, lastBlock, incrPercent); break;
+			case RasterBuf.TYPE_INT: intHistogram(poxInitX, lastY, widthArea, nBlocks, lastBlock, incrPercent); break;
+			}
+			percent = 100;
+			
+			//Si hemos calculado el histograma de la imagen completa lo salvamos a disco
+			if(calcFullHistogram)
+				try{
+					writeFullHistogramToRMF();
+				}catch(IOException ex){
+					System.err.println("No se ha podido guardar el histograma");
+				}
+			grid.free();
+			this.suspend();
+		}
+	}
+
+	/**
+	 * Calcula el histograma para tipo de datos byte
+	 * @param nBlocks Número de bloques 
+	 * @param lastBlock Tamaño del último bloque
+	 * @param lastY posición Y donde empieza el primer bloque 
+	 */
+	private void byteHistogram(int x, int lastY, int widthArea, int nBlocks, int lastBlock, int incrPercent){
+		histogram = new int[grid.getBandCount()][Utilities.MAX_BYTE_BIT_VALUE + 1];
+		for(int nBlock = 0; nBlock < nBlocks; nBlock++){
+			grid.setAreaOfInterest(x, lastY, widthArea, BLOCK);
+			RasterBuf raster = grid.getRasterBuf();
+			for(int iBand = 0; iBand < grid.getBandCount(); iBand ++)
+				for(int line = 0; line < BLOCK; line ++)
+					for(int col = 0; col < widthArea; col ++)
+						histogram[iBand][(raster.getElemByte(line, col, iBand) & 0xff)]++;
+			lastY += BLOCK;
+			percent += incrPercent;
+		}
+		grid.setAreaOfInterest(x, lastY, widthArea, lastBlock);
+		RasterBuf raster = grid.getRasterBuf();
+		for(int iBand = 0; iBand < grid.getBandCount(); iBand ++)
+			for(int line = 0; line < lastBlock; line ++)
+				for(int col = 0; col < widthArea; col ++)
+					histogram[iBand][(raster.getElemByte(line, col, iBand) & 0xff)]++;	
+		
+		accumulateAllDataTypes(Utilities.MAX_BYTE_BIT_VALUE + 1);
+	}
+	
+	/**
+	 * Calcula el histograma para tipo de datos short
+	 * @param nBlocks Número de bloques 
+	 * @param lastBlock Tamaño del último bloque
+	 * @param lastY posición Y donde empieza el primer bloque 
+	 */
+	private void shortHistogram(int x, int lastY, int widthArea, int nBlocks, int lastBlock, int incrPercent){
+		histogram = new int[grid.getBandCount()][Utilities.MAX_SHORT_BIT_VALUE + 1];
+		for(int nBlock = 0; nBlock < nBlocks; nBlock++){
+			grid.setAreaOfInterest(x, lastY, widthArea, BLOCK);
+			RasterBuf raster = grid.getRasterBuf();
+			for(int iBand = 0; iBand < grid.getBandCount(); iBand ++)
+				for(int line = 0; line < BLOCK; line ++)
+					for(int col = 0; col < widthArea; col ++)
+						histogram[iBand][(raster.getElemShort(line, col, iBand) & 0xffff)]++;
+			lastY += BLOCK;
+			percent += incrPercent;
+		}
+		grid.setAreaOfInterest(x, lastY, widthArea, lastBlock);
+		RasterBuf raster = grid.getRasterBuf();
+		for(int iBand = 0; iBand < grid.getBandCount(); iBand ++)
+			for(int line = 0; line < lastBlock; line ++)
+				for(int col = 0; col < widthArea; col ++)
+					histogram[iBand][(raster.getElemShort(line, col, iBand) & 0xffff)]++;	
+		
+		accumulateAllDataTypes(Utilities.MAX_SHORT_BIT_VALUE + 1);
+	}
+	
+	/**
+	 * Calcula el histograma para tipo de datos short
+	 * @param nBlocks Número de bloques 
+	 * @param lastBlock Tamaño del último bloque
+	 * @param lastY posición Y donde empieza el primer bloque 
+	 */
+	private void intHistogram(int x, int lastY, int widthArea, int nBlocks, int lastBlock, int incrPercent){
+		histogram = new int[grid.getBandCount()][Utilities.MAX_SHORT_BIT_VALUE + 1];
+		for(int nBlock = 0; nBlock < nBlocks; nBlock++){
+			grid.setAreaOfInterest(x, lastY, widthArea, BLOCK);
+			RasterBuf raster = grid.getRasterBuf();
+			for(int iBand = 0; iBand < grid.getBandCount(); iBand ++)
+				for(int line = 0; line < BLOCK; line ++)
+					for(int col = 0; col < widthArea; col ++)
+						histogram[iBand][(raster.getElemInt(line, col, iBand) & 0xffff)]++;
+			lastY += BLOCK;
+			percent += incrPercent;
+		}
+		grid.setAreaOfInterest(x, lastY, widthArea, lastBlock);
+		RasterBuf raster = grid.getRasterBuf();
+		for(int iBand = 0; iBand < grid.getBandCount(); iBand ++)
+			for(int line = 0; line < lastBlock; line ++)
+				for(int col = 0; col < widthArea; col ++)
+					histogram[iBand][(raster.getElemInt(line, col, iBand) & 0xffff)]++;	
+		
+		accumulateAllDataTypes(Utilities.MAX_SHORT_BIT_VALUE + 1);
+	}
+	
+	/**
+	 * Calcula el histograma acumulado a partir del normal ya calculado. Esta llamada es usada para
+	 * el histograma a partir de la fuente de datos. Además de calcular el acumulado elimina las
+	 * bandas que no se han pedido
+	 * @param nValues Número de valores del histograma
+	 */
+	private void accumulateAllDataTypes(int nValues){
+		//Acumulado, además eliminamos bandas que no se han pedido
+		accumulatedHistogram = new int[grid.getBandCount()][nValues];
+		for(int iBand = 0; iBand < accumulatedHistogram.length; iBand++){
+			if(showBands[iBand])
+				accumulatedHistogram[iBand][0] = histogram[iBand][0];
+			else
+				histogram[iBand][0] = 0;
+			for(int i = 1; i < accumulatedHistogram[iBand].length; i++){
+				if(showBands[iBand])
+					accumulatedHistogram[iBand][i] = histogram[iBand][i] + accumulatedHistogram[iBand][i - 1];
+				else
+					histogram[iBand][i] = 0;
+			}
+		}
+		
+	}
+	
+	/**
+	 * Obtiene el porcentaje que lleva construido el histograma
+	 * @return porcentaje de construcción
+	 */
+	public int getPercent() {
+		return percent;
+	}
+	
+	/**
+	 * calcula el histograma de la imagen completa. En caso de que exista un fichero RMF con 
+	 * el histograma calculado se leerá de allí.
+	 */
+	public void calcFullHistogram(boolean[] bands){
+		percent = 0;
+		showBands = bands;
+		calcFullHistogram = true;
+		histogram = null;
+		histogram = readFullHistogramFromRMF();
+		if(histogram == null){
+			if(this.isAlive())
+				resume();
+			else
+				start();
+		}else
+			percent = 100;
+	}
+	
+	/**
+	 * calcula el histograma acumulado de la imagen completa. En caso de que exista un fichero RMF con 
+	 * el histograma calculado se leerá de allí.
+	 */
+	public void calcFullAccumulatedHistogram(boolean[] bands){
+		percent = 0;
+		showBands = bands;
+		calcFullHistogram = true;
+		histogram = null;
+		histogram = readFullAccumulatedHistogramFromRMF();
+		if(histogram == null){
+			if(this.isAlive())
+				resume();
+			else
+				start();
+		}else{
+			
+			percent = 100;
+		}
+	}
+	
+	/**
+	 * Calcula el histograma de la imagen correspondiente al área de interes. Antes de llamar a esta función 
+	 * hay que asignar el área de interes
+	 */
+	public void calcHistogramFromLimetedArea(boolean[] bands){
+		percent = 0;
+		showBands = bands;
+		calcFullHistogram = false;
+		if(this.isAlive())
+			resume();
+		else
+			start();
+	}
+	
+	/**
+	 * Calcula el histograma de la imagen correspondiente al área de interes. Este área de interes es
+	 * es obtenida del extent del renderizador. 
+	 */
+	public boolean calcHistogramFromRenderizerLimetedArea(boolean[] bands){
+		percent = 0;
+		showBands = bands;
+		calcFullHistogram = false;
+		Extent fullExtent = pxRaster.getExtent();
+		Extent wcArea = new Extent(pxRaster.getLastViewPort().getExtent());
+		
+		if(	wcArea.getMax().getX() < fullExtent.getMin().getX() ||
+				wcArea.getMin().getX() > fullExtent.getMax().getX() ||	
+				wcArea.getMax().getY() < fullExtent.getMin().getY() ||
+				wcArea.getMin().getY() > fullExtent.getMax().getY() ){
+			histogram = new int[grid.getBandCount()][Utilities.MAX_BYTE_BIT_VALUE + 1];
+			accumulatedHistogram = new int[grid.getBandCount()][Utilities.MAX_BYTE_BIT_VALUE + 1];
+			return false;
+		}
+		wcArea = Utilities.calculateAdjustedView(wcArea, fullExtent);
+		
+		Rectangle2D pxArea = Utilities.getPxRectFromMapRect(pxRaster.getFiles()[0].getExtent().toRectangle2D(), pxRaster.getFiles()[0].getWidth(), pxRaster.getFiles()[0].getHeight(), wcArea.toRectangle2D());
+		setAreaOfInterest((int)pxArea.getMinX(), (int)pxArea.getMinY(), (int)Math.abs(pxArea.getMaxX() - pxArea.getMinX()), (int)Math.abs(pxArea.getMaxY() - pxArea.getMinY()));
+		if(this.isAlive())
+			resume();
+		else
+			start();
+		return true;
+	}
+	
+	/**
+	 * Calcula el histograma de la vista y solo con los datos de visualización
+	 * @return Histograma en forma de array bidimensional de enteros en el que el 
+	 * el primer indice es el número de bandas y el segundo el histograma por banda
+	 */
+	public int[][] calcHistogramFromView(boolean[] bands){
+		viewHistogram = new int[3][256];
+		if(pxRaster != null){
+			BufferedImage img = (BufferedImage)pxRaster.getGeoImage();
+			if(img !=null)
+				for(int col = 0; col < img.getHeight(); col++){
+					for(int line = 0; line < img.getWidth(); line++){
+						int px = ((BufferedImage) img).getRGB(line, col);
+						int px3[] = {(px & 0xff0000) >> 16, (px & 0xff00) >> 8, (px & 0xff)};
+						if(bands[0])
+							viewHistogram[0][px3[0]] ++;  		//Histograma para la banda R
+						if(bands[1])
+							viewHistogram[1][px3[1]] ++;  		//Histograma para la banda G
+						if(bands[2])
+							viewHistogram[2][px3[2]] ++;  		//Histograma para la banda B
+					}
+				}
+		}
+		return viewHistogram;
+	}
+		
+	/**
+	 * Calcula el histograma de la vista acumulado y solo con los datos de visualización
+	 * @return Histograma en forma de array bidimensional de enteros en el que el 
+	 * el primer indice es el número de bandas y el segundo el histograma por banda
+	 */
+	public int[][] calcAccumulatedHistogramFromView(boolean[] bands){
+		viewHistogram = calcHistogramFromView(bands);
+		for(int iBand = 0; iBand < viewHistogram.length; iBand++){
+			for(int i = 1; i < viewHistogram[iBand].length; i++){
+				viewHistogram[iBand][i] += viewHistogram[iBand][i - 1];
+			}
+		}
+		return viewHistogram;
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Histogram.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Palette.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Palette.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Palette.java	(revision 10281)
@@ -0,0 +1,462 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io.datastruct;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.util.Utilities;
+
+import es.gva.cit.jgdal.GdalColorEntry;
+import es.gva.cit.jgdal.GdalColorTable;
+import es.gva.cit.jgdal.GdalException;
+
+/**
+ * Paleta para raster. Esta consta de los valores RGB de la paleta que son almacenados en un vector de
+ * enteros donde cada elemento entero contiene en su interior el RGB completo y del vector de rangos. 
+ * Dependiendo de si el tipo de rango es entero o decimal este estará almacenado en un vector de rangos
+ * entero (intRange) o enun vector de rangos double (doubleRange). El tipo de dato del rango quedará 
+ * almacenado en la variable type.  
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class Palette{
+	/**
+	 * Tipo de dato de la paleta
+	 * <UL>
+	 * <LI>TYPE_INT = Valido para byte, short e int</LI>
+	 * <LI>TYPE_DOUBLE = Valido para float y double</LI>
+	 * </UL>
+	 */
+	private int type = RasterBuf.TYPE_UNDEFINED;
+	/**
+	 * Lista de rangos para paletas enteras
+	 */
+	private int[] 		intRange = null;
+	/**
+	 * Lista de rangos para paletas decimales
+	 */
+	private double[] 	doubleRange = null;
+	/**
+	 * Lista de valores RGB
+	 */
+	private int[]		palette = null;
+	/**
+	 * Heuristica para paletas enteras. Esta heuristica simple consiste en el valor
+	 * intermedio de la tabla, de esta forma reduce la tabla a la mitad.
+	 */
+	private int 		intHeuristica = Integer.MAX_VALUE;
+	/**
+	 * Heuristica para paletas decimales. Esta heuristica simple consiste en el valor
+	 * intermedio de la tabla, de esta forma reduce la tabla a la mitad.
+	 */
+	private double 		doubleHeuristica = Double.MAX_VALUE;
+	/**
+	 * Nombre de la clase asociada a la entrada
+	 */
+	private String[]	nameClass = null;
+	
+	
+	/**
+	 * Obtiene el valor RGB interpolado para un clave entera pasada por parámetro
+	 * @param value clave de la cual se quiere obtener el valor RGB de la paleta
+	 * @return valor RGB
+	 */
+	public int getInterpolateRGB2(double value){
+		int maxGrad = 127;
+		int init = 1;
+		int color = 0;
+		double beginValue = 0;
+		double nextValue = 0;
+		for(int i = init; i <= doubleRange.length; i++){
+			if(i < doubleRange.length){
+				if(value > doubleRange[i]){
+					color = palette[i - 1];
+					beginValue = doubleRange[i - 1];
+					nextValue = doubleRange[i];
+					break;
+				}
+			}else{
+				color = palette[i - 1];
+				beginValue = doubleRange[i - 1];
+				nextValue = 0;
+				break;
+			}
+		}
+		int[] colorBegin = Utilities.getARGBFromIntToIntArray(color);
+		
+		int max = Math.max(Math.max(colorBegin[0], colorBegin[1]), colorBegin[2]);
+		
+		double distance = Math.abs(beginValue - nextValue);
+		double absValue = Math.abs(value - nextValue);
+		
+		int newBand = 0;
+		if(distance != 0)
+			newBand = (int)Math.round((absValue * maxGrad) / distance);
+		
+		int[] res = new int[3];
+		
+		if((max + maxGrad) > 255){
+			for(int i = 0; i < 3; i++)
+				if(colorBegin[i] == max){
+					res[i] = max - newBand;
+					break;
+				}else
+					res[i] = colorBegin[i];
+		}else{
+			for(int i = 0; i < 3; i++)
+				if(colorBegin[i] == max){
+					res[i] = max + newBand;
+					break;
+				}else
+					res[i] = colorBegin[i];
+		}
+		
+		return Utilities.getIntFromARGB(colorBegin[3], res[0], res[1], res[2]);
+	}
+	
+	/**
+	 * Obtiene el valor RGB interpolado para un clave entera pasada por parámetro
+	 * @param value clave de la cual se quiere obtener el valor RGB de la paleta
+	 * @return valor RGB
+	 */
+	public int getInterpolateRGB2(int value){
+		int maxGrad = 127;
+		int init = 1;
+		int color = 0;
+		int beginValue = 0;
+		int nextValue = 0;
+		for(int i = init; i <= intRange.length; i++){
+			if(i < intRange.length){
+				if(value > intRange[i]){
+					color = palette[i - 1];
+					beginValue = intRange[i - 1];
+					nextValue = intRange[i];
+					break;
+				}
+			}else{
+				color = palette[i - 1];
+				beginValue = intRange[i - 1];
+				nextValue = 0;
+				break;
+			}
+		}
+		int[] colorBegin = Utilities.getARGBFromIntToIntArray(color);
+		
+		int max = Math.max(Math.max(colorBegin[0], colorBegin[1]), colorBegin[2]);
+		
+		int distance = Math.abs(beginValue - nextValue);
+		int absValue = Math.abs(value - nextValue);
+		
+		int newBand = 0;
+		if(distance != 0)
+			newBand = (absValue * maxGrad) / distance;
+		
+		int[] res = new int[3];
+		
+		if((max + maxGrad) > 255){
+			for(int i = 0; i < 3; i++)
+				if(colorBegin[i] == max){
+					res[i] = max - newBand;
+					break;
+				}else
+					res[i] = colorBegin[i];
+		}else{
+			for(int i = 0; i < 3; i++)
+				if(colorBegin[i] == max){
+					res[i] = max + newBand;
+					break;
+				}else
+					res[i] = colorBegin[i];
+		}
+		
+		return Utilities.getIntFromARGB(colorBegin[3], res[0], res[1], res[2]);
+	}
+	
+	
+	/**
+	 * Obtiene el valor RGB interpolado para un clave entera pasada por parámetro
+	 * @param value clave de la cual se quiere obtener el valor RGB de la paleta
+	 * @return valor RGB
+	 */
+	public int getInterpolateRGB(int value){
+		int init = 1;
+		int color = 0;
+		int beginValue = 0;
+		int nextValue = 0;
+		int nextColor = 0;
+		for(int i = init; i <= intRange.length; i++){
+			if(i < intRange.length){
+				if(value > intRange[i]){
+					color = palette[i - 1];
+					beginValue = intRange[i - 1];
+					nextValue = intRange[i];
+					nextColor = palette[i];
+					break;
+				}
+			}else{
+				color = palette[i - 1];
+				beginValue = intRange[i - 1];
+				nextValue = intRange[0];
+				nextColor = palette[0];
+				break;
+			}
+		}
+		int[] colorBegin = Utilities.getARGBFromIntToIntArray(color);
+		int[] colorEnd = Utilities.getARGBFromIntToIntArray(nextColor);
+		
+		int dif = Math.abs(beginValue - nextValue);
+		double difR = Math.abs(colorBegin[0] - colorEnd[0]) / (double)dif;
+		double difG = Math.abs(colorBegin[1] - colorEnd[1]) / (double)dif;
+		double difB = Math.abs(colorBegin[2] - colorEnd[2]) / (double)dif;
+		
+		int[] res = new int[3];
+		res[0] = (int)(colorBegin[0] + difR * (value - colorBegin[0]));
+		res[1] = (int)(colorBegin[1] + difG * (value - colorBegin[1]));
+		res[2] = (int)(colorBegin[2] + difB * (value - colorBegin[2]));
+		
+		return Utilities.getIntFromARGB(colorBegin[3], res[0], res[1], res[2]);
+	}
+	
+	/**
+	 * Obtiene el valor RGB para un clave entera pasada por parámetro
+	 * @param value clave de la cual se quiere obtener el valor RGB de la paleta
+	 * @return valor RGB
+	 */
+	public int getRGB(int value){
+		int init = 1;
+		/*if(value > intHeuristica)
+			init = intRange.length >> 1;*/
+		for(int i = init; i <= intRange.length; i++)
+			if(i < intRange.length){
+				if(value > intRange[i])
+					return palette[i - 1];
+			}else{
+				return palette[i - 1];
+			}
+		return 0;
+	}
+	
+	/**
+	 * Obtiene el valor RGB para un clave decimal pasada por parámetro
+	 * @param value clave de la cual se quiere obtener el valor RGB de la paleta
+	 * @return valor RGB
+	 */
+	public int getRGB(double value){
+		int init = 1;
+		/*if(value > doubleHeuristica)
+			init = doubleRange.length >> 1;*/
+		for(int i = init; i <= doubleRange.length; i++)
+			if(i < doubleRange.length){
+				if(value > doubleRange[i])
+					return palette[i - 1];
+			}else{
+				return palette[i - 1];
+			}
+		return 0;
+	}
+	
+	/**
+	 * Genera una paleta a partir de una tabla de entradas de la forma
+	 * <UL>
+	 * <LI>(String) Nombre de la clase</LI>
+	 * <LI>(Integer) Rojo</LI>
+	 * <LI>(Integer) Verde</LI>
+	 * <LI>(Integer) Azul</LI>
+	 * <LI>(Double) Valor</LI>
+	 * </UL>
+	 * @param entries
+	 */
+	public void createPaletteFromTable(Object[][] entries, int type){
+		this.type = type;
+		nameClass = new String[entries.length];
+		palette = new int[entries.length];
+		if(type <= RasterBuf.TYPE_INT){
+			intRange = new int[entries.length];
+			intHeuristica = (int)((Double)entries[(entries.length >> 1)][4]).doubleValue();
+		}else{
+			doubleRange = new double[entries.length];
+			doubleHeuristica = ((Double)entries[(entries.length >> 1)][4]).doubleValue();
+		}
+		for(int entry = 0; entry < entries.length; entry++){
+			//palette[entry] = 0xff000000;
+			for(int value = 0; value < entries[entry].length; value++){
+				switch(value){
+				case 0: nameClass[entry] = (String)entries[entry][value];
+						break;
+				case 1: palette[entry] |= ((((Integer)entries[entry][value]).intValue() & 0x000000ff) << 16);
+						break;
+				case 2: palette[entry] |= ((((Integer)entries[entry][value]).intValue() & 0x000000ff) << 8);
+						break;
+				case 3: palette[entry] |= (((Integer)entries[entry][value]).intValue() & 0x000000ff);
+						break;
+				case 4: if(type <= RasterBuf.TYPE_INT)
+							intRange[entry] = ((Double)entries[entry][value]).intValue();
+						else
+							doubleRange[entry] = ((Double)entries[entry][value]).doubleValue();
+						break;
+				case 5: palette[entry] |= ((((Integer)entries[entry][value]).intValue() & 0x000000ff) << 24);
+						break;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Crea una paleta a partir de un objeto GdalColorTable. Esto es necesario para los ficheros
+	 * que tienen un paleta asignada, como los gif, y que son tratados por Gdal. Se pasa la tabla
+	 * de color leída desde gdal y se crea directamente un objeto Palette. 
+	 * @param table
+	 */
+	public void createPaletteFromGdalColorTable(GdalColorTable table){
+		try{
+			type = RasterBuf.TYPE_BYTE;
+			nameClass = new String[table.getColorEntryCount()];
+			palette = new int[table.getColorEntryCount()];
+			intRange = new int[table.getColorEntryCount()];
+			
+			int cont = table.getColorEntryCount() - 1;
+	    	for(int iEntry = 0; iEntry < table.getColorEntryCount(); iEntry++){
+	    		GdalColorEntry entry = table.getColorEntryAsRGB(iEntry);
+	    		nameClass[cont] = "";
+	    		palette[cont] = 0x00000000;
+	    		palette[cont] |= ((entry.c4 & 0x000000ff) << 24);
+	    		palette[cont] |= ((entry.c1 & 0x000000ff) << 16);
+	    		palette[cont] |= ((entry.c2 & 0x000000ff) << 8);
+	    		palette[cont] |= (entry.c3 & 0x000000ff);
+	    		intRange[cont] = iEntry;
+	    		cont --;
+	    	}
+		}catch(GdalException ex){
+			//No se crea la paleta
+		}
+	}
+	
+	/**
+	 * Carga una paleta desde un fichero XML
+	 * @param file nombre del fichero
+	 * @param palette Nombre de la paleta
+	 */
+	public void loadPaletteFromXML(String file, String palette){
+		//TODO: Implemetar cargar paleta desde el directorio gvSIG
+	}
+	
+	/**
+	 * Carga una paleta desde el fichero .rmf asociado a la imagen
+	 * @param file nombre del fichero de imagen
+	 */
+	public void loadPaletteFromRMF(String file){
+		//TODO: Implemetar cargar paleta desde .rmf
+	}
+	
+	/**
+	 * Salva una paleta desde al fichero .rmf asociado a la imagen
+	 * @param file nombre del fichero de imagen
+	 */
+	public void savePaletteToRMF(String file){
+		//TODO: Implemetar salvar paleta a .rmf
+	}
+
+	/**
+	 * Obtiene la paleta
+	 * @return Paleta
+	 */
+	public int[] getPalette() {
+		return palette;
+	}
+
+	/**
+	 * Asigna una paleta
+	 * @param palette Paleta
+	 */
+	public void setPalette(int[] palette) {
+		this.palette = palette;
+	}
+
+	/**
+	 * Obtiene el tipo del rango de la paleta que corresponde con los tipos de rasterBuf
+	 * @return Tipo de rango, entero o double
+	 */
+	public int getType() {
+		return type;
+	}
+	
+	/**
+	 * Asigna el tipo del rango de la paleta que corresponde con los tipos de rasterBuf
+	 * @param Tipo de rango, entero o double
+	 */
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	/**
+	 * Asigna los rangos si el tipo es decimal
+	 * @param rangos
+	 */
+	public void setDoubleRange(double[] value) {
+		doubleRange = value;
+	}
+
+	/**
+	 * Asigna los rangos si el tipo es entero
+	 * @param values
+	 */
+	public void setIntRange(int[] values) {
+		intRange = values;
+	}
+
+	/**
+	 * Obtiene los rangos si el tipo es decimal
+	 * @return rangos
+	 */
+	public double[] getDoubleRange() {
+		return doubleRange;
+	}
+
+	/**
+	 * Obtiene los rangos si el tipo es entero
+	 * @return rangos
+	 */
+	public int[] getIntRange() {
+		return intRange;
+	}
+
+	
+	/**
+	 * Obtiene los nombres de las clases de la paleta
+	 * @return Array de cadenas. Cada una corresponde con un nombre de clase
+	 * que corresponde a cada rango de tipos.
+	 */
+	public String[] getNameClass() {
+		return nameClass;
+	}
+	
+	/**
+	 * Asigna los nombres de las clases de la paleta
+	 * @param names Array de cadenas. Cada una corresponde con un nombre de clase
+	 * que corresponde a cada rango de tipos.
+	 */
+	public void setNameClass(String[] names) {
+		nameClass = names;
+	}
+	
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Palette.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Metadata.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Metadata.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Metadata.java	(revision 10281)
@@ -0,0 +1,275 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io.datastruct;
+
+import java.util.ArrayList;
+
+import org.cresques.filter.enhancement.TransparencyRange;
+
+/**
+ * Guarda en un Array los metadatos de los distintos tipos de imagenes.
+ * 
+ *  NODATA_VALUES=255 255 255 1
+ *  AREA_OR_POINT=Point 4
+ *  TIFFTAG_XRESOLUTION=72 4
+ *  TIFFTAG_YRESOLUTION=72 4
+ *  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) 4
+ * 
+ *  STATISTICS_MINIMUM=0
+ *  STATISTICS_MAXIMUM=221
+ *  STATISTICS_MEAN=35.910196078431
+ *  STATISTICS_MEDIAN=30
+ *  STATISTICS_MODE=0
+ *  STATISTICS_STDDEV=29.609849452294
+ *  STATISTICS_HISTONUMBINS=256
+ *  STATISTICS_HISTOMIN=0
+ *  STATISTICS_HISTOMAX=255
+ *  LAYER_TYPE=athematic
+ *  STATISTICS_HISTOBINVALUES=30285675|0|0|22050| ...
+ *  
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class Metadata{
+	/**
+	 * Valores para los identificadores de los metadatos
+	 */
+	private ArrayList 	metadata = new ArrayList();
+	/**
+	 * Valores de los metadatos
+	 */
+	private ArrayList 	values = new ArrayList();
+	/**
+	 * Interpretación de color para cada banda
+	 */
+	private String[] 	colorInterpretation = null;
+	/**
+	 * true si la imagen tiene una banda con el identificador de interpretación de color a Alpha
+	 */
+	private boolean 	isAlphaBand = false;
+	/**
+	 * Valores no data para cada banda de la imagen (si los tiene)
+	 */
+	private double[]	noDataByBand = null;
+	/**
+	 * Metadatos
+	 */
+	private String[] 	metadataString = null;
+	
+	public Metadata(String[] metadata){
+		if(metadata == null)
+			return;
+		metadataString = metadata;
+		for(int i = 0;i<metadata.length;i++){
+			String[] value = metadata[i].split("=");
+			if(value.length >= 2){
+				this.metadata.add(value[0]);
+				this.values.add(value[1]);
+			}
+		}
+	}
+	
+	/**
+	 * Crea un objeto TransparencyRange a partir de los rangos de transparencia
+	 * @return
+	 */
+	public TransparencyRange parserNodataByBand(){
+		int bandR = getBand("Red");
+		int bandG = getBand("Green");
+		int bandB = getBand("Blue");
+		
+		if(bandR < 0 && bandG < 0 && bandB < 0)
+			return null;
+		
+		//Esta comprobación es para los raster con paleta (gif). Cuando se trate la paleta y no se usen como
+		//imagenes de una banda habrá que cambiar esto
+		if((colorInterpretation.length == 1) && colorInterpretation[0].equals("Palette"))
+			return null;
+				
+		if(noDataByBand == null)
+			return null;
+		
+		//Si todos los valores nodata por banda son -1 es que no hay ninguno asignado 
+		int count =0;
+		for(int i = 0; i < noDataByBand.length; i++)
+			if(noDataByBand[i] < 0)
+				count ++;
+		
+		if(count == noDataByBand.length)
+			return null;
+		
+		TransparencyRange tr = new TransparencyRange();
+		int[] red = new int[2];
+		int[] green = new int[2];
+		int[] blue = new int[2];
+		
+		if(bandR >= 0){
+			red[0] = red[1] = (int)noDataByBand[bandR];
+			tr.setRed(red);
+		}
+		if(bandG >= 0){
+			green[0] = green[1] = (int)noDataByBand[bandG];
+			tr.setGreen(green);
+		}
+		if(bandB >= 0){
+			blue[0] = blue[1] = (int)noDataByBand[bandB];
+			tr.setBlue(blue);
+		}
+		
+		tr.setAnd(true);
+		tr.loadStrEntryFromValues();
+		
+		return tr;
+	}
+	
+	/**
+	 * Parsea los metadatos NODATA_VALUES si existe alguno y devuelve un objeto TransparencyRange. 
+	 * @param nodata
+	 * @return Vector de enteros con los valores RGBA o null si no tiene este metadato o no es parseable
+	 * en este formato.
+	 */
+	public TransparencyRange[] parserNodataInMetadata(){
+		//Esta comprobación es para los raster con paleta (gif). Cuando se trate la paleta y no se usen como
+		//imagenes de una banda habrá que cambiar esto
+		if((colorInterpretation.length == 1) && colorInterpretation[0].equals("Palette"))
+			return null;
+		
+		int count = 0;
+		for(int i = 0; i < metadata.size(); i++){
+			if(((String)metadata.get(i)).equals("NODATA_VALUES"))
+				count ++;
+		}
+		if(count == 0)
+			return null;
+		
+		TransparencyRange[] trList = new TransparencyRange[count];
+		
+		count = 0;
+		for(int i = 0; i < metadata.size(); i++){
+			TransparencyRange tr = new TransparencyRange();
+			int[] red = new int[2];
+			int[] green = new int[2];
+			int[] blue = new int[2];
+			
+			if(((String)metadata.get(i)).equals("NODATA_VALUES")){
+				String data = (String)values.get(i);
+				String[] dataValues = data.split(" ");
+				int[] values = new int[dataValues.length];
+				try{
+					red[0] = red[1] = Integer.parseInt(dataValues[0]);
+					green[0] = green[1] = Integer.parseInt(dataValues[1]);
+					blue[0] = blue[1] = Integer.parseInt(dataValues[2]);
+				}catch(NumberFormatException exc){
+					return null;
+				}
+			}
+			tr.setAnd(true);
+			tr.setRed(red);
+			tr.setGreen(green);
+			tr.setBlue(blue);
+			tr.loadStrEntryFromValues();
+			trList[count] = tr;
+			count ++;
+		}
+		
+		return trList;
+	}
+	
+	/**
+	 * Inicializa el vector de cadenas que contendrán el nombre de la interpretación 
+	 * de color asignada a cada banda. Este valor es el devuelto por la imagen.
+	 * @param values Número de valores
+	 */
+	public void initColorInterpretation(int values){
+		colorInterpretation = new String[values];
+	}
+	
+	/**
+	 * Asigna un valor para la interpretación de color de una banda
+	 * @param band Banda 
+	 * @param value valor
+	 */
+	public void setColorInterpValue(int band, String value){
+		try{
+			colorInterpretation[band] = value;
+			if(value.equals("Alpha"))
+				isAlphaBand = true;
+		}catch(ArrayIndexOutOfBoundsException ex){
+			//No asignamos el elemento
+		}
+	}
+	
+	/**
+	 * Obtiene la posición de la banda que contiene el identificador pasado por parámetro 
+	 * o -1 si no tiene dicho identificador.
+	 * @return Posición de la banda que contiene el identificador o -1 si no lo tiene.
+	 */
+	public int getBand(String id){
+		if(colorInterpretation != null){
+			for(int i = 0; i < colorInterpretation.length; i++)
+				if(colorInterpretation[i].equals(id))
+					return i;
+		}
+		return -1;
+	}
+
+	/**
+	 * Obtiene true si existe una banda de alpha
+	 * @return
+	 */
+	public boolean isAlphaBand() {
+		return isAlphaBand;
+	}
+	
+	/**
+	 * Inicializa los valores no data;
+	 * @param values
+	 */
+	public void initNoDataByBand(int values){
+		noDataByBand = new double[values];
+		for(int i = 0; i < values; i++)
+			noDataByBand[i] = -1;
+	}
+	
+	/**
+	 * Asigna un valor para el valor noData por banda
+	 * @param band Banda 
+	 * @param value valor
+	 */
+	public void setNoDataValue(int band, double value){
+		try{
+			noDataByBand[band] = value;
+		}catch(ArrayIndexOutOfBoundsException ex){
+			//No asignamos el elemento
+		}
+	}
+
+	/**
+	 * Obtiene los metadatos en forma de vector de cadenas
+	 * @return Vector de cadenas en el que cada cadena es atributo=valor
+	 */
+	public String[] getMetadataString() {
+		return metadataString;
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Metadata.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/HistogramPersistence.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/HistogramPersistence.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/HistogramPersistence.java	(revision 10281)
@@ -0,0 +1,159 @@
+package org.cresques.io.datastruct;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.Writer;
+
+/**
+ * Clase con herramientas la persistencia de los histogramas calculados.
+ * Se implementan métodos para ecribir y leer en los ficheros .rmf correspondientes
+ * los histogramas calculados.
+ * @author Miguel Ángel Querol Carratalá <querol_mig@gva.es>
+ *
+ */
+public class HistogramPersistence {
+
+	
+	public HistogramPersistence(){
+	}
+	
+	/**
+	 * Crea o modifica el archivo .rmf asociado al GeoRasterFile del que le pasamos
+	 * el nombre con los valores del histograma.
+	 * @param histogram
+	 * @param grfName
+	 * @throws IOException
+	 */
+	public void makeRMFHistogram(int histogram[][], String grfName, int numBands)throws IOException{
+		File rmfFile = null;
+		File rmfAux = null;
+		Writer writer = null;
+		boolean copy = true;
+
+		rmfFile = new File(grfName.substring(0, grfName.lastIndexOf(".") + 1) + "rmf");
+		if(rmfFile.exists()){
+			BufferedReader inGrf = new BufferedReader(new InputStreamReader(new FileInputStream(rmfFile)));
+			String str = inGrf.readLine();
+			rmfAux = new File(grfName.substring(0, grfName.lastIndexOf(".") + 1) + "aux.rmf");
+			rmfAux.createNewFile();
+			writer = new FileWriter(rmfAux);
+			
+			while(str != null){
+				if(!str.equals("</RasterMetaFile>")){
+					if(str.equals("<Histogram>"))
+						copy = false;
+					if(str.equals("</Histogram>"))
+						copy = true;
+					if(copy && (!str.equals("</Histogram>")))
+						writer.write(str + "\n");
+				}else{
+					writer.write(getRMFHistogramHeader());
+					for (int i = 0; i < numBands ; i++){
+						writer.write(getXMLRasterBandHistogram(histogram, i));
+					}
+					writer.write(getRMFHistogramEnd());
+					writer.write(str + "\n");
+				}
+				str = inGrf.readLine();
+			}
+			writer.close();
+			
+			rmfAux.renameTo(rmfFile);
+			
+			
+		}else{
+			rmfFile.createNewFile();
+			writer = new FileWriter(rmfFile);
+			writer.write(getRMFHeader());
+			writer.write(getRMFHistogramHeader());
+			for (int i = 0; i < numBands ; i++){
+				writer.write(getXMLRasterBandHistogram(histogram, i));
+			}
+			writer.write(getRMFHistogramEnd());
+			writer.write(getRMFEnd());
+			writer.close();
+		}
+	}
+	
+	
+	
+	/**
+	 * Calcula la cabecera del archivo .rmf asociado a la imagen en el caso
+	 * de que éste no exista.
+	 * @return
+	 */
+	private String getRMFHeader(){
+		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>\n");
+		buffer.append("<RasterMetaFile xmlns=\"http://www.gvsig.org\">\n");
+		
+		return buffer.toString();
+	}
+	
+	/**
+	 * Crea el final del archivo .rmf asociado a la imagen en el caso de que
+	 * éste no exista.
+	 * @return
+	 */
+	private String getRMFEnd(){
+		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append("</RasterMetaFile>\n");
+		
+		return buffer.toString();
+	}
+	
+	/**
+	 * Crea la cabecera en XML para el bloque del histograma completo de la
+	 * imagen.
+	 * @return
+	 */
+	private String getRMFHistogramHeader(){
+		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append("<Histogram>\n");
+		buffer.append("\t<FullHistogram>\n");
+		
+		return buffer.toString();
+	}
+	
+	/**
+	 * Crea el final en XML para el bloque del histograma completo de la
+	 * imagen.
+	 * @return
+	 */
+	private String getRMFHistogramEnd(){
+		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append("\t</FullHistogram>\n");
+		buffer.append("</Histogram>\n");
+		
+		return buffer.toString();
+	}
+	
+	/**
+	 * Crea el código XML correspondiendte a los datos del histograma de la 
+	 * imagen de la banda correspondiente.
+	 * @param n_band: banda de la que crear el XML con los datos de su histograma.
+	 * @return
+	 */
+	private String getXMLRasterBandHistogram(int histogram[][], int n_band){
+		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append("\t\t<Band>\n");
+		buffer.append("\t\t\t<Values>");
+		for (int i = 0 ; i <= 255 ; i++)
+			buffer.append(histogram[n_band][i] + " ");
+		buffer.append("</Values>\n");
+		buffer.append("\t\t</Band>\n");
+		
+		return buffer.toString();
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/HistogramPersistence.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Statistic.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Statistic.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Statistic.java	(revision 10281)
@@ -0,0 +1,217 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io.datastruct;
+
+import java.util.ArrayList;
+
+
+/**
+ * Clase para estadisticas
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class Statistic {
+    /**
+     * Mínimo valor de pixel por banda
+     */
+    public double[] minBandValue = {
+                                    Double.MAX_VALUE, Double.MAX_VALUE,
+                                    Double.MAX_VALUE
+                                };
+
+    /**
+     * Máximo valor de pixel por banda
+     */
+    public double[] maxBandValue = {
+                                    Double.MIN_VALUE, Double.MIN_VALUE,
+                                    Double.MIN_VALUE
+                                };
+
+    /**
+     * Segundo valor más pequeño de pixel por banda
+     */
+    public double[] secondMinBandValue = {
+                                          Double.MAX_VALUE, Double.MAX_VALUE,
+                                          Double.MAX_VALUE
+                                      };
+
+    /**
+     * Segundo valor más grande de pixel por banda
+     */
+    public double[] secondMaxBandValue = {
+                                          Double.MIN_VALUE, Double.MIN_VALUE,
+                                          Double.MIN_VALUE
+                                      };
+
+    /**
+     * Historial de valores para una imagen. Esto se usa cuando se solicita varias
+     * veces para una misma imagen solo tenga que calcular los valores una vez
+     */
+    public ArrayList history = new ArrayList();
+
+    /**
+     * Porcentaje de recorte de colas
+     */
+    public double tailPercent = 0D;
+
+    /**
+     * Constructor
+     */
+    public Statistic() {
+        super();
+    }
+    
+    /**
+     * Calculo de estadísticas a partir de un histograma. El resultado de la función es un array
+     * bidimensional donde el primer índice inndica la estadistica y el segundo el número de banda.
+     * 
+     * <UL>
+     * <LI>mínimo</LI>
+     * <LI>máximo</LI>
+     * <LI>media</LI>
+     * <LI>mediana</LI>
+     * <LI>Número de pixels</LI>
+     * </UL>
+     * @param histogram
+     * @param bandas solicitadas. Cada elemento del vector representa una banda. Si está a true se calcula la 
+     * estadistica para esa banda y si está a false no se calculará.
+     * @return
+     */
+    public static long[][] getBasicStatsFromHistogram(int[][] histogram, boolean[] bands){
+    	if(histogram == null)
+    		return null;
+    	return getBasicStatsFromHistogram(histogram, 0, histogram[0].length - 1, bands);
+    }
+    /**
+     * Calculo de estadísticas a partir de un histograma. El resultado de la función es un array
+     * bidimensional donde el primer índice inndica la estadistica y el segundo el número de banda.
+     * 
+     * <UL>
+     * <LI>mínimo</LI>
+     * <LI>máximo</LI>
+     * <LI>media</LI>
+     * <LI>mediana</LI>
+     * <LI>Número de pixels</LI>
+     * </UL>
+     * @param histogram
+     * @param beginPos Posición de inicio del histograma para contabilizar estadisticas
+     * @param endPos Posición de fin del histograma para contabilizar estadisticas
+     * @param bandas solicitadas. Cada elemento del vector representa una banda. Si está a true se calcula la 
+     * estadistica para esa banda y si está a false no se calculará.
+     * @return
+     */
+    public static long[][] getBasicStatsFromHistogram(int[][] histogram, int beginPos, int endPos, boolean[] bands){
+    	if(histogram == null)
+    		return null;
+    	
+    	//Contamos el número de bandas para las cuales se calcula la estadística
+    	int bandCount = 0;
+    	for(int iBand = 0; iBand < bands.length; iBand ++)
+    		if(bands[iBand])
+    			bandCount ++;
+    	
+    	int values = 5;
+    	long[][] res = new long[values][];
+    	
+    	long[] min = new long[bandCount];//Mínimo
+    	long[] max = new long[bandCount];//Máximo
+    	for(int iBand = 0; iBand < bandCount; iBand ++){
+    		max[iBand] = beginPos;
+    		min[iBand] = endPos;
+    	}
+    	long[] average = new long[bandCount]; //Valor de pixel medio (Media)
+    	long[] middle = new long[bandCount]; //Mediana
+    	long[] nPixelsBand = new long[bandCount];//Número de pixels por banda
+    	    	    	    	
+    	int showBandCounter = 0;  //Contador de bandas de las que hay calcular la estadistica
+    	for(int iBand = 0; iBand < histogram.length; iBand ++){
+    		if(bands[iBand]){
+	    		int pixels = 0; //Número de valores por banda (entre 0 y 255)
+				for(int i = beginPos; i <= endPos; i ++){
+					
+					//Calculo del mínimo
+					if(histogram[iBand][i] != 0 && i < min[showBandCounter])
+						min[showBandCounter] = i;
+					
+					//Calculo del máximo										
+					if(histogram[iBand][i] != 0 && i > max[showBandCounter])
+						max[showBandCounter] = i;
+					
+					//Calculo del número de pixeles
+					nPixelsBand[showBandCounter] += (long)histogram[iBand][i];
+					
+					if(histogram[iBand][i] != 0)
+						pixels ++;
+					
+					average[showBandCounter] += histogram[iBand][i] * i;
+				}
+				//Calculo de la media
+				try{
+					average[showBandCounter] /= nPixelsBand[showBandCounter];
+				}catch(ArithmeticException exc){
+					average[showBandCounter] = 0;
+				}
+				
+				//Calculo de mediana
+				long middlePos = nPixelsBand[showBandCounter] >> 1;
+				int aux = 0;
+				int i = 0;
+				for(i = 0; aux < middlePos; i++)
+					aux += histogram[iBand][i];
+				middle[showBandCounter] = i - 1;
+				
+				showBandCounter ++;
+    		}
+    	}
+     
+    	res[0] = min;
+    	res[1] = max;
+    	res[2] = average;
+    	res[3] = middle;
+    	res[4] = nPixelsBand;
+    	return res;	
+    }
+    
+    /**
+     * Clase que contiene los valores calculados para una imagen.
+     * Esto se usa cuando se solicita varias veces para una misma imagen solo
+     * tenga que calcular los valores una vez.
+     * @author Nacho Brodin (brodin_ign@gva.es)
+     */
+    public class History {
+        public String file = null;
+        public double[] min = null;
+        public double[] max = null;
+        public double[] secMin = null;
+        public double[] secMax = null;
+
+        public History(String file, double[] min, double[] max, double[] secMin,
+                       double[] secMax) {
+            this.file = file;
+            this.min = (double[]) min.clone();
+            this.max = (double[]) max.clone();
+            this.secMin = (double[]) secMin.clone();
+            this.secMax = (double[]) secMax.clone();
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/datastruct/Statistic.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/TrkFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/TrkFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/TrkFile.java	(revision 10281)
@@ -0,0 +1,165 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.IObjList;
+import org.cresques.px.PxObjList;
+import org.cresques.px.gml.LineString;
+
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+
+/**
+ * @author luisw
+ */
+public class TrkFile extends GeoFile {
+    private DataInputStream is;
+    long l = 0;
+    LineString line;
+
+    public TrkFile(IProjection proj, String name) {
+        super(proj, name);
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.io.GeoFile#load()
+     */
+    public GeoFile load() {
+        try {
+            return load(new FileInputStream(name));
+        } catch (NumberFormatException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        } catch (FileNotFoundException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        } catch (Exception e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+
+        return this;
+    }
+
+    public GeoFile load(InputStream is) throws NumberFormatException, Exception {
+        System.out.println("Trk: Cargando '" + name + "' ...");
+        this.is = new DataInputStream(is);
+        line = new LineString();
+
+        while (readPoint()) {
+            l++;
+        }
+
+        extent.add(line.getExtent());
+        is.close();
+        System.out.println("Trk: '" + name + "' cargado. (" + l + " puntos).");
+
+        return this;
+    }
+
+    public boolean readPoint() {
+        int h;
+        int m;
+        int s;
+        int sgn = 1;
+        double D;
+        double M;
+        double S;
+        double lat;
+        double lng;
+
+        try {
+            h = is.readUnsignedByte();
+            m = is.readUnsignedByte();
+            s = is.readUnsignedByte();
+            is.skipBytes(1);
+            D = is.readUnsignedByte();
+            M = is.readByte();
+            S = is.readUnsignedShort();
+            S /= 1000.0;
+
+            if (M < 0) {
+                sgn = -1;
+                M *= -1;
+            } else {
+                sgn = 1;
+            }
+
+            lat = sgn * (D + ((M / 60D) + (S / 3600D)));
+            D = is.readUnsignedByte();
+            M = is.readByte();
+            S = is.readUnsignedShort();
+            S /= 1000.0;
+
+            if (M < 0) {
+                sgn = -1;
+                M *= -1;
+            } else {
+                sgn = 1;
+            }
+
+            lng = sgn * (D + ((M / 60D) + (S / 3600D)));
+            line.add(proj.createPoint(lng, lat));
+        } catch (EOFException eof) {
+            return false;
+        } catch (IOException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+
+            return false;
+        }
+
+        return true;
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.io.GeoFile#reProject(org.cresques.geo.ReProjection)
+     */
+    public IObjList getObjects() {
+        IObjList oList = new PxObjList(proj);
+        oList.add(line);
+
+        return oList;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        line.reProject(rp);
+        setProjection(rp.getPDest());
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoFile#close()
+     */
+    public void close() {
+        // TODO Auto-generated method stub
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/TrkFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/BookmarkList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/BookmarkList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/BookmarkList.java	(revision 10281)
@@ -0,0 +1,228 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.ui.CQApp;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import javax.swing.ImageIcon;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+class Bookmark {
+    String folder;
+    String name;
+    String[] fName;
+    String projName;
+    IProjection proj;
+
+    public Bookmark(String fld, String n, String f, IProjection p) {
+        projName = null;
+        fName = new String[1];
+        folder = fld;
+        name = n;
+        fName[0] = f;
+        proj = p;
+    }
+
+    public Bookmark(String fld, String n, String[] f, IProjection p) {
+        projName = null;
+        fName = new String[f.length];
+        folder = fld;
+        name = n;
+        proj = p;
+
+        for (int i = 0; i < f.length; i++)
+            fName[i] = f[i];
+    }
+}
+
+
+public class BookmarkList extends TreeMap implements ActionListener {
+    final private static long serialVersionUID = -3370601314380922368L;
+    CQApp app = null;
+
+    public BookmarkList(CQApp mainApp) {
+        app = mainApp;
+        loadList();
+    }
+
+    public void loadList() {
+    }
+
+    public void addEntry(String fld, String n, String f, IProjection p) {
+        addEntry(new Bookmark(fld, n, f, p));
+    }
+
+    public void addEntry(String fld, String n, String[] f, IProjection p) {
+        addEntry(new Bookmark(fld, n, f, p));
+    }
+
+    public void addEntry(Bookmark bookmark) {
+        Vector vector;
+
+        if (containsKey(bookmark.folder)) {
+            vector = (Vector) get(bookmark.folder);
+        } else {
+            vector = new Vector();
+        }
+
+        vector.add(bookmark);
+        put(bookmark.folder, vector);
+    }
+
+    public JMenu getJMenu() {
+        JMenuItem it = null;
+        JMenu menu = null;
+        JMenu menu2 = null;
+        ClassLoader loader = this.getClass().getClassLoader();
+
+        //loader.getResource("images/"+"folderXP.gif");
+        //System.err.println("URL="+loader.getResource("images/"+"folderXP.gif"));
+        ImageIcon folderIcon = new ImageIcon(loader.getResource("images/" +
+                                                                "folderXP.gif"));
+        ImageIcon dxfIcon = new ImageIcon(loader.getResource("images/" +
+                                                             "fileXPdxf.gif"));
+        ImageIcon gmlIcon = new ImageIcon(loader.getResource("images/" +
+                                                             "fileXPgml.gif"));
+        ImageIcon ecwIcon = new ImageIcon(loader.getResource("images/" +
+                                                             "fileXPecw.gif"));
+        ImageIcon tifIcon = new ImageIcon(loader.getResource("images/" +
+                                                             "fileXPtif.gif"));
+        ImageIcon fileIcon = new ImageIcon(loader.getResource("images/" +
+                                                              "fileXP.gif"));
+
+        menu = new JMenu("Favoritos");
+        menu.setMnemonic('F');
+
+        // Arbol de carpetas
+        TreeMap menuMap = new TreeMap();
+        String[] menuNames;
+        JMenu parentMenu = null;
+        String mName = null;
+        String key = null;
+        ;
+
+        Iterator mIter = keySet().iterator();
+
+        while (mIter.hasNext()) {
+            key = (String) mIter.next();
+            System.out.println("Key:" + key);
+            menuNames = key.split("\\|");
+
+            parentMenu = menu;
+            mName = "";
+
+            for (int i = 0; i < menuNames.length; i++) {
+                if (i > 0) {
+                    mName += "|";
+                }
+
+                mName += menuNames[i];
+
+                if (menuMap.containsKey(mName)) {
+                    //System.out.println(" mName:"+mName+", parent:"+parentMenu.getText());
+                    parentMenu = (JMenu) menuMap.get(mName);
+                } else {
+                    //System.out.println("+mName:"+mName+", parent:"+parentMenu.getText());
+                    menu2 = new JMenu(menuNames[i]);
+                    menu2.setIcon(folderIcon);
+                    parentMenu.add(menu2);
+                    menuMap.put(mName, menu2);
+                    parentMenu = menu2;
+                }
+            }
+        }
+
+        // Entradas (Bookmarks)
+        mIter = entrySet().iterator();
+
+        while (mIter.hasNext()) {
+            Map.Entry entry = (Map.Entry) mIter.next();
+            String folder = (String) entry.getKey();
+
+            /*menu2 = new JMenu(folder);
+            menu2.setIcon(folderIcon);
+            menu.add(menu2);*/
+            menu2 = (JMenu) menuMap.get(folder);
+
+            Vector vector = ((Vector) entry.getValue());
+            Bookmark bookmark;
+
+            for (int i = 0; i < vector.size(); i++) {
+                bookmark = (Bookmark) vector.get(i);
+                it = new JMenuItem(bookmark.name);
+                it.setActionCommand(i + "|" + folder);
+                it.addActionListener(this);
+
+                if (bookmark.fName[0].endsWith("tif")) {
+                    it.setIcon(tifIcon);
+                } else if (bookmark.fName[0].endsWith("ecw")) {
+                    it.setIcon(ecwIcon);
+                } else if (bookmark.fName[0].endsWith("gml")) {
+                    it.setIcon(gmlIcon);
+                } else if (bookmark.fName[0].endsWith("dxf") ||
+                               bookmark.fName[0].endsWith("DXF")) {
+                    it.setIcon(dxfIcon);
+                } else {
+                    it.setIcon(fileIcon);
+                }
+
+                menu2.add(it);
+            }
+        }
+
+        //menu.add(menu2);
+        return menu;
+    }
+
+    public void actionPerformed(ActionEvent event) {
+        IProjection proj = null;
+        String cmd = event.getActionCommand();
+        int mark = cmd.indexOf('|');
+        int vectorPos = Integer.parseInt(cmd.substring(0, mark));
+        cmd = cmd.substring(mark + 1);
+
+        Bookmark bookmark = (Bookmark) ((Vector) get(cmd)).get(vectorPos);
+
+        if (bookmark.fName.length == 1) {
+            app.loadFile(bookmark.fName[0], bookmark.proj);
+        } else {
+            app.loadFile(bookmark.fName, bookmark.proj);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/BookmarkList.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/FileFoundInListException.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/FileFoundInListException.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/FileFoundInListException.java	(revision 10281)
@@ -0,0 +1,14 @@
+package org.cresques.io.exceptions;
+
+/**
+ * Excepción cuando un fichero no se encuentra en una lista en la
+ * que se está buscando y dicha falta constituye una situación de
+ * error.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class FileFoundInListException extends Exception{
+	public FileFoundInListException(String msg){
+		super(msg);
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/FileFoundInListException.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/SupersamplingNotSupportedException.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/SupersamplingNotSupportedException.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/SupersamplingNotSupportedException.java	(revision 10281)
@@ -0,0 +1,52 @@
+package org.cresques.io.exceptions;
+
+/**
+ * Excepción que indica que un driver no soporta supersampling, es decir no se pueden
+ * tomar muestras del contenido de un pixel en distintas posiciones.
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class SupersamplingNotSupportedException extends Exception {
+	/**
+	 *
+	 */
+	public SupersamplingNotSupportedException() {
+		super();
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 */
+	public SupersamplingNotSupportedException(String message) {
+		super(message);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public SupersamplingNotSupportedException(String message, Throwable cause) {
+		super(message, cause);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param cause
+	 */
+	public SupersamplingNotSupportedException(Throwable cause) {
+		super(cause);
+
+		// TODO Auto-generated constructor stub
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/SupersamplingNotSupportedException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/BandFoundInListException.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/BandFoundInListException.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/BandFoundInListException.java	(revision 10281)
@@ -0,0 +1,14 @@
+package org.cresques.io.exceptions;
+
+/**
+ * Excepción cuando una banda no se encuentra en una lista en la
+ * que se está buscando y dicha falta constituye una situación de
+ * error.
+ * @author Nacho Brodin (brodin_ignn@gva.es)
+ *
+ */
+public class BandFoundInListException extends Exception{
+	public BandFoundInListException(String msg){
+		super(msg);
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/BandFoundInListException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/NotSupportedExtensionException.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/NotSupportedExtensionException.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/NotSupportedExtensionException.java	(revision 10281)
@@ -0,0 +1,13 @@
+package org.cresques.io.exceptions;
+
+/**
+ * Excepción cuando una extensión de fichero no está soportada
+ * por la aplicación.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class NotSupportedExtensionException extends Exception{
+	public NotSupportedExtensionException(String msg){
+		super(msg);
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/exceptions/NotSupportedExtensionException.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MapServerClient.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MapServerClient.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MapServerClient.java	(revision 10281)
@@ -0,0 +1,154 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.px.Extent;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+
+/**
+ * Consulta para un servidor de mapas.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public abstract class MapServerClient implements Extent.Has {
+    public static final int MAXBUFSIZE = 1024 * 1024;
+    BufferedInputStream bufIn = null;
+    byte[] buffer;
+    int bufPos;
+    String serverName;
+    protected String urlBase = null;
+    protected long xMin;
+    protected long xMax;
+    protected long yMin;
+    protected long yMax;
+    protected int ancho;
+    protected int alto;
+    public boolean echo = false;
+    private Extent extent = null;
+    private int maxViewWidth = 1500;
+    private int maxViewHeight = 1500;
+    private float minTimeBetweenQuerys = 0;
+
+    public MapServerClient(String serverName) {
+        this.serverName = serverName;
+    }
+
+    public String getName() {
+        return serverName;
+    }
+
+    public byte[] getBuffer() {
+        return buffer;
+    }
+
+    public void setView(long xMin, long yMin, long xMax, long yMax) {
+        this.xMin = xMin;
+        this.xMax = xMax;
+        this.yMax = yMax;
+        this.yMin = yMin;
+    }
+
+    public void setViewSize(int w, int h) {
+        ancho = w;
+        alto = h;
+    }
+
+    /**
+     * Pone el tamaño máximo de la vista. Solicitando una vista más
+     * grande que esta al servidor dará error (y no imágenes)  :-(
+     * @param w        ancho
+     * @param h alto
+     */
+    public void setMaxViewSize(int w, int h) {
+        maxViewWidth = w;
+        maxViewHeight = h;
+    }
+
+    public Extent getViewExtent() {
+        return new Extent(xMin, yMax, xMax, yMin);
+    }
+
+    public void setExtent(Extent e) {
+        extent = e;
+    }
+
+    public Extent getExtent() {
+        return extent;
+    }
+
+    abstract public String getUrl();
+
+    public void get() throws Exception {
+        get(getUrl());
+    }
+
+    public void get(String address) throws Exception {
+        bufPos = 0;
+        buffer = new byte[MAXBUFSIZE];
+
+        try {
+            // Check to see that a command parameter was entered
+            // Create an URL instance
+            URL url = new URL(address);
+
+            // Get an input stream for reading
+            InputStream in = url.openStream();
+
+            // Create a buffered input stream for efficency
+            bufIn = new BufferedInputStream(in);
+
+            // Repeat until end of file
+            int data;
+
+            for (bufPos = 0; (data = bufIn.read()) != -1; bufPos++) {
+                buffer[bufPos] = (byte) data;
+
+                if (echo) {
+                    System.out.println(data);
+                }
+            }
+
+            byte[] buf = new byte[bufPos];
+
+            for (int i = 0; i < bufPos; i++)
+                buf[i] = buffer[i];
+
+            buffer = buf;
+            System.out.println(bufPos + " bytes leidos.");
+
+            bufIn.close();
+            in.close();
+        } catch (MalformedURLException mue) {
+            System.err.println("Invalid URL");
+        } catch (IOException ioe) {
+            System.err.println("I/O Error - " + ioe);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/MapServerClient.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFileHeader.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFileHeader.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFileHeader.java	(revision 10281)
@@ -0,0 +1,266 @@
+package org.cresques.io;
+
+
+/*
+ *    GISToolkit - Geographical Information System Toolkit
+ *    (C) 2002, Ithaqua Enterprises Inc.
+ *
+ *    This library is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU Lesser General Public
+ *    License as published by the Free Software Foundation;
+ *    version 2.1 of the License.
+ *
+ *    This library is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *    Lesser General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Lesser General Public
+ *    License along with this library; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+import java.nio.*;
+
+
+/**
+ * Procesa la cabecera de un .shp
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class ShpFileHeader {
+    //}
+
+    /**
+     * Class to represent the header in the shape file.
+     */
+
+    //public class ShapeFileHeader {
+
+    /**
+     * Shape Type
+     * Value Shape Type
+     * 0 Null Shape
+     * 1 Point
+     * 3 PolyLine
+     * 5 Polygon
+     * 8 MultiPoint
+     * 11 PointZ
+     * 13 PolyLineZ
+     * 15 PolygonZ
+     * 18 MultiPointZ
+     * 21 PointM
+     * 23 PolyLineM
+     * 25 PolygonM
+     * 28 MultiPointM
+     * 31 MultiPatch
+     */
+
+    /* The null shape type, there is no shape for this record. */
+    public static final int SHAPE_NULL = 0;
+    public static final int SHAPE_POINT = 1;
+    public static final int SHAPE_POLYLINE = 3;
+    public static final int SHAPE_POLYGON = 5;
+    public static final int SHAPE_MULTIPOINT = 8;
+    public static final int SHAPE_POINTZ = 11;
+    public static final int SHAPE_POLYLINEZ = 13;
+    public static final int SHAPE_POLYGONZ = 15;
+    public static final int SHAPE_MULTIPOINTZ = 18;
+    public static final int SHAPE_POINTM = 21;
+    public static final int SHAPE_POLYLINEM = 23;
+    public static final int SHAPE_POLYGONM = 25;
+    public static final int SHAPE_MULTIPOINTM = 28;
+    public static final int SHAPE_MULTIPATCH = 31;
+
+    /**File Code, must be the value 9994*/
+    int myFileCode = 9994;
+
+    /**
+     * Unused 1;
+     */
+    int myUnused1 = 0;
+
+    /**
+     * Unused 2;
+     */
+    int myUnused2 = 0;
+
+    /**
+     * Unused 3;
+     */
+    int myUnused3 = 0;
+
+    /**
+     * Unused 4;
+     */
+    int myUnused4 = 0;
+
+    /**
+     * Unused 5;
+     */
+    int myUnused5 = 0;
+
+    /**File Length;*/
+    int myFileLength = 0;
+
+    /**Version of the file.*/
+    int myVersion = 1000;
+    int myShapeType = 0;
+
+    /**
+     * BoundingBox Xmin
+     */
+    double myXmin = 0;
+
+    /**
+     * BoundingBox Ymin
+     */
+    double myYmin = 0;
+
+    /**
+     * BoundingBox Xmax
+     */
+    double myXmax = 0;
+
+    /**
+     * BoundingBox Ymax
+     */
+    double myYmax = 0;
+
+    /**
+     * BoundingBox Zmin
+     */
+    double myZmin = 0;
+
+    /**
+     * BoundingBox Zmax
+     */
+    double myZmax = 0;
+
+    /**
+     * BoundingBox Zmin
+     */
+    double myMmin = 0;
+
+    /**
+     * BoundingBox Zmax
+     */
+    double myMmax = 0;
+
+    // notify about warnings.
+    private boolean myWarning = true;
+
+    /**
+     * ShapeFileHeader constructor comment.
+     */
+    public ShpFileHeader() {
+        super();
+    }
+
+    /** Return the file code. */
+    public int getFileCode() {
+        return myFileCode;
+    }
+
+    /** Return the version of the file. */
+    public int getVersion() {
+        return myVersion;
+    }
+
+    /** Get the extents of the shape file. */
+    public java.awt.geom.Rectangle2D.Double getFileExtents() {
+        return new java.awt.geom.Rectangle2D.Double(myXmin, myYmin,
+                                                    myXmax - myXmin,
+                                                    myYmax - myYmin);
+    }
+
+    /** Print warnings to system.out. */
+    public void setWarnings(boolean inWarning) {
+        myWarning = inWarning;
+    }
+
+    /**
+     * Return the length of the header in 16 bit words..
+     */
+    public int getHeaderLength() {
+        return 50;
+    }
+
+    /**
+     * Return the number of 16 bit words in the shape file as recorded in the header
+     */
+    public int getFileLength() {
+        return myFileLength;
+    }
+
+    /**
+     * Read the header from the shape file.
+     */
+    public void readHeader(ByteBuffer in) {
+        // the first four bytes are integers
+        // in.setLittleEndianMode(false);
+        in.order(ByteOrder.BIG_ENDIAN);
+        myFileCode = in.getInt();
+
+        if (myFileCode != 9994) {
+            warn("File Code = " + myFileCode + " Not equal to 9994");
+        }
+
+        // From 4 to 8 are unused.
+        myUnused1 = in.getInt();
+
+        // From 8 to 12 are unused.
+        myUnused2 = in.getInt();
+
+        // From 12 to 16 are unused.
+        myUnused3 = in.getInt();
+
+        // From 16 to 20 are unused.
+        myUnused4 = in.getInt();
+
+        // From 20 to 24 are unused.
+        myUnused5 = in.getInt();
+
+        // From 24 to 28 are the file length.
+        myFileLength = in.getInt();
+
+        // From 28 to 32 are the File Version.
+        in.order(ByteOrder.LITTLE_ENDIAN);
+        myVersion = in.getInt();
+
+        // From 32 to 36 are the Shape Type.
+        myShapeType = in.getInt();
+
+        // From 36 to 44 are Xmin.
+        myXmin = in.getDouble(); // Double.longBitsToDouble(in.getLong());
+
+        // From 44 to 52 are Ymin.
+        myYmin = in.getDouble();
+
+        // From 52 to 60 are Xmax.
+        myXmax = in.getDouble();
+
+        // From 60 to 68 are Ymax.
+        myYmax = in.getDouble();
+
+        // From 68 to 76 are Zmin.
+        myZmin = in.getDouble();
+
+        // From 76 to 84 are Zmax.
+        myZmax = in.getDouble();
+
+        // From 84 to 92 are Mmin.
+        myMmin = in.getDouble();
+
+        // From 92 to 100 are Mmax.
+        myMmax = in.getDouble();
+
+        // that is all 100 bytes of the header.
+    }
+
+    private void warn(String inWarn) {
+        if (myWarning) {
+            System.out.print("WARNING: ");
+            System.out.println(inWarn);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ShpFileHeader.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalWriter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalWriter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalWriter.java	(revision 10281)
@@ -0,0 +1,992 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.io.BufferedOutputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.cresques.cts.IProjection;
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.exceptions.NotSupportedExtensionException;
+import org.cresques.px.Extent;
+import org.cresques.px.PxRaster;
+import org.cresques.util.Utilities;
+
+import es.gva.cit.jecwcompress.EcwException;
+import es.gva.cit.jgdal.Gdal;
+import es.gva.cit.jgdal.GdalBuffer;
+import es.gva.cit.jgdal.GdalDriver;
+import es.gva.cit.jgdal.GdalException;
+import es.gva.cit.jgdal.GdalRasterBand;
+import es.gva.cit.jgdal.GeoTransform;
+import es.gva.cit.jogr.OGRSpatialReference;
+
+
+/**
+ * Driver para la escritura a través de Gdal.
+ * Puede exportar un fichero de un formato a otro desde un GeoRasterFile
+ * en cualquier formato soportado por la lectura a un formato que este incluido
+ * en la lista supportedDrv.
+ *
+ * Puede salvar a disco en un formato que este incluido en la lista supportedDrv
+ * obteniendo los datos que van siendo servidos desde el cliente. Este cliente
+ * debe implementar un IDataWriter o tener un objeto que lo implemente. Inicialmente
+ * le pasará los parámetros de la imagen de salida y cuando el driver comience a
+ * escribir le irá solicitando más a través del método readData de IDataWriter.
+ * El cliente será el que lleve el control de lo que va sirviendo y lo que le queda
+ * por servir.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class GdalWriter extends GeoRasterWriter {
+	
+	//Datos de registro de drivers
+    static {
+        GeoRasterWriter.registerWriterExtension("tif", GdalWriter.class);
+        //GeoRasterWriter.registerWriterExtension("tiff", GdalWriter.class);
+        typeList.put("tif", "GTiff");
+        //typeList.put("tiff", "GTiff");
+    }
+
+    public final int 				windowSizeX = 386;
+    public final int 				windowSizeY = 195;
+    public final int 				panelSizeX = 358;
+    public final int 				panelSizeY = 105;
+    public final String 			panelLayout = "BorderLayout";
+    private GdalDriver 				drv;
+    private Gdal 					dset_destino = null;
+    private GdalRasterBand 			rband = null;
+    private GeoTransform 			geot = null; //Datos de georeferenciación
+    private OGRSpatialReference 	oSRS; //Datos de proyección						
+    private GdalBuffer 				buf = null; //Buffer de origen de gdal
+    private GdalBuffer[]			bufBands = null;
+    private int 					nBlocks = 0; //Número de bloques en Y en el que se divide la imagen para escribir
+    private int 					anchoResto = 0; //Tamaño del último bloque de la imagen.
+    private String[] 				params = null; //Parámetros de creación del dataset.
+    private GdalSupportOptions 		support = null;
+    private boolean 				consulta = false;
+    private	boolean					write = true; //Cuando está a true se puede escribir en la imagen de salida. Si está a false el proceso es interrumpido
+    private int 					dataType = RasterBuf.TYPE_UNDEFINED;
+
+    /**
+     * Constructor para la obtención de parámetros del driver
+     * @param drvType        Tipo de driver
+     */
+    public GdalWriter(String fileName) {
+    	ident = fileName.toLowerCase().substring(fileName.lastIndexOf(".") + 1); 
+    	driver = (String)typeList.get(ident);
+        support = new GdalSupportOptions(driver);
+        support.setBlockSize(blockSizeDefault);
+        support.setPhotometric("RGB");
+        support.setInterleave("BAND");
+        support.setCompress("NONE");
+        support.setWriteGeoref(true);
+        support.setTfw(false);
+        consulta = true;
+    }
+
+    /**
+     * Constructor para salvar una sola imagen completa
+     * @param raster        PxRaster de la imagen de  origen
+     * @param outfilename        Nombre del fichero de salida
+     * @param infilename        Nombre del fichero de entrada
+     * @param drvType        Tipo de driver
+     */
+    public GdalWriter(PxRaster raster, String outFileName, String inFileName) throws GdalException, IOException {
+    	ident = outFileName.toLowerCase().substring(outFileName.lastIndexOf(".") + 1); 
+    	driver = (String)typeList.get(ident);
+        support = new GdalSupportOptions(driver);   
+        
+        this.outFileName = outFileName;
+        this.inFileName = inFileName;
+        currentRaster = raster;
+
+        sizeWindowX = raster.getFWidth();
+        sizeWindowY = raster.getFHeight();
+
+        //Obtenemos la georeferenciación
+        if (support.getGeoref()) {
+            double maxX = currentRaster.getExtent().maxX();
+            double minX = currentRaster.getExtent().minX();
+            double maxY = currentRaster.getExtent().maxY();
+            double minY = currentRaster.getExtent().minY();
+
+            geot = new GeoTransform();
+            geot.adfgeotransform[0] = minX;
+            geot.adfgeotransform[3] = maxY;
+            geot.adfgeotransform[1] = (maxX - minX) / currentRaster.getFWidth();
+            geot.adfgeotransform[5] = (minY - maxY) / currentRaster.getFHeight();
+        }
+
+        nBands = currentRaster.getBandCount();
+
+        this.support.setBlockSize(64/*currentRaster.getBlockSize()*/);
+
+        if ((sizeWindowX < 0) || (sizeWindowY < 0)) {
+            throw new IOException("Tamaño del fichero de salida erroneo.");
+        }
+
+        if (nBands == 3) {
+            this.support.setPhotometric("PHOTOMETRIC=RGB");
+        } else if (nBands == 1) {
+            this.support.setPhotometric("PHOTOMETRIC=MINISBLACK");
+        } else {
+            this.support.setPhotometric("");
+        }
+
+        params = new String[2];
+        params[0] = new String("TILED=YES");
+        params[1] = new String(this.support.getPhotometric());
+
+        init();
+
+        /*oSRS = new OGRSpatialReference();
+        try{
+                oSRS.setUTM(currentRaster.geoFile.getUTM(), currentRaster.geoFile.getZone());
+                  oSRS.setWellKnownGeogCS(currentRaster.geoFile.getGeogCS());
+                  //System.out.println(currentRaster.geoFile.getGeogCS()+"Nueva Proyección ==> "+oSRS.exportToWkt());
+                  dset_destino.setProjection(oSRS.exportToWkt());
+        }catch(Exception e){
+                e.printStackTrace();
+        }*/
+    }
+
+    /**
+     * Constructor para salvar datos servidos por el cliente
+     * @param dataWriter        Objeto servidor de datos para el driver de escritura
+     * @param outSizeX        Número de pixels en X de la imagen de salida
+     * @param outSizeY        Número de pixels en Y de la imagen de salida
+     * @param outFilename        Fichero de salida
+     * @param extentMaxX        Posición en X máxima del extent
+     * @param extentMinX        Posición en X mínima del extent
+     * @param extentMaxY        Posición en Y máxima del extent
+     * @param extentMinY        Posición en Y mínima del extent
+     * @param nBands        Número de bandas
+     * @param drvType        Tipo de driver
+     * @throws GdalException
+     * @throws IOException
+     */
+    public GdalWriter(	IDataWriter dataWriter, 
+     					String outFileName, 
+     					Integer blockSize, 
+     					Integer nBands,
+     					ViewPortData vp,
+     					Integer compresion,
+     					Integer outSizeX,
+     					Integer outSizeY,
+     					Integer dataType)throws GdalException, IOException {
+               
+    	ident = outFileName.toLowerCase().substring(outFileName.lastIndexOf(".") + 1); 
+    	driver = (String)typeList.get(ident);
+        support = new GdalSupportOptions(driver);
+        this.dataType = dataType.intValue();
+        
+        this.dataWriter = dataWriter;
+        this.outFileName = outFileName;
+
+        this.sizeWindowX = outSizeX.intValue();
+        this.sizeWindowY = outSizeY.intValue();
+
+        if ((sizeWindowX < 0) || (sizeWindowY < 0)) {
+            throw new IOException("Tamaño del fichero de salida erroneo.");
+        }
+
+        this.nBands = nBands.intValue();
+
+        //Calculamos la georeferenciación a partir del extend pasado por el cliente.
+        if (support.getGeoref()) {
+        	Extent ex = vp.getExtent();
+            double maxX = ex.maxX();
+            double minX = ex.minX();
+            double maxY = ex.maxY();
+            double minY = ex.minY();
+
+            this.support.setBlockSize(blockSize.intValue());
+            
+            geot = new GeoTransform();
+            geot.adfgeotransform[0] = minX;
+            geot.adfgeotransform[3] = maxY; //-((pixelSizeY * outSizeY)-minY);
+            geot.adfgeotransform[1] = (double) ((maxX - minX) / outSizeX.intValue()); //pixelSizeX;
+            geot.adfgeotransform[5] = (double) ((minY - maxY) / outSizeY.intValue()); //pixelSizeY;
+        }
+
+        setParams();
+
+        init();
+    }
+
+    /**
+     *Asigna parámetros de creación del dataset de Gdal
+     */
+    private void setParams() {
+        params = new String[5];
+
+        params[0] = new String("TILED=YES");
+        params[1] = new String("PHOTOMETRIC=" + this.support.getPhotometric());
+        params[2] = new String("INTERLEAVE=" + this.support.getInterleave());
+        params[3] = new String("COMPRESS=" + this.support.getCompress());
+
+        String tfw = null;
+
+        if (this.support.getTfw()) {
+            tfw = new String("YES");
+        } else {
+            tfw = new String("NO");
+        }
+
+        params[4] = new String("TFW=" + tfw);
+    }
+
+    /**
+     * Asigna el tipo de driver con el que se salvará la imagen
+     * @param drvType        Tipo de driver
+     */
+    public void setDriverType(String drvType) {
+        this.driver = drvType;
+    }
+
+    /**
+     * Creación del dataset de destino.
+     * @throws EcwException
+     */
+    private void init() throws GdalException {
+        //Controlamos que el tipo de driver sea correcto
+        if (driver == null) {
+            throw new GdalException("Tipo de driver sin especificar.");
+        }
+
+        boolean okdrvtype = false;
+
+        String[] types = GeoRasterWriter.getDriversType();
+        for (int i = 0; i < GeoRasterWriter.getNTypes(); i++)
+            if (driver.equals(types[i])) {
+                okdrvtype = true;
+            }
+
+        if (okdrvtype == false) {
+            throw new GdalException("El tipo de driver "+driver+" no está soportado por GdalWriter.");
+        }
+
+        //Obtenemos el driver y creamos el dataset del destino
+        drv = Gdal.getDriverByName(driver);
+        
+        if (dset_destino != null) {
+            dset_destino.close();
+            dset_destino = null;
+        }
+                
+        dset_destino = drv.create(outFileName, sizeWindowX, sizeWindowY,
+                                  nBands, Utilities.getGdalTypeFromRasterBufType(dataType), params);
+
+        if (this.support.getGeoref()) {
+            dset_destino.setGeoTransform(geot);
+        }
+
+        nBlocks = (int) (sizeWindowY / this.support.getBlockSize());
+        anchoResto = sizeWindowY - (nBlocks * this.support.getBlockSize());
+    }
+
+    /**
+     * A partir de un elemento que contiene una propiedad y un valor
+     * lo parsea y asigna el valor a su variable.
+     * @param propValue        elemento con la forma propiedad=valor
+     */
+    private void readProperty(String propValue) {
+        String prop = propValue.substring(0, propValue.indexOf("="));
+
+        if (propValue.startsWith(prop)) {
+            String value = propValue.substring(propValue.indexOf("=") + 1,
+                                               propValue.length());
+
+            if ((value != null) && !value.equals("")) {
+                if (prop.equals("BLOCKSIZE")) {
+                    this.support.setBlockSize(Integer.parseInt(value));
+                }
+
+                if (prop.equals("GEOREF")) {
+                    boolean georef = true;
+
+                    if (value.equals("yes")) {
+                        georef = true;
+                    } else {
+                        georef = false;
+                    }
+
+                    this.support.setWriteGeoref(georef);
+                }
+
+                if (prop.equals("INTERLEAVE")) {
+                    this.support.setInterleave(value);
+                }
+
+                if (prop.equals("PHOTOMETRIC")) {
+                    this.support.setPhotometric(value);
+                }
+
+                if (prop.equals("COMPRESS")) {
+                    this.support.setCompress(value);
+                }
+
+                if (prop.equals("TFW")) {
+                    boolean tfw = true;
+
+                    if (value.equals("yes")) {
+                        tfw = true;
+                    } else {
+                        tfw = false;
+                    }
+
+                    this.support.setTfw(tfw);
+                }
+            }
+        }
+    }
+
+    /**
+     * Asigna propiedades al driver a partir de un vector de
+     * strings donde cada elemento tiene la estructura de
+     * propiedad=valor.
+     * @param props        Propiedades
+     */
+    public void setProps(String[] props) {
+        for (int iProps = 0; iProps < props.length; iProps++)
+            readProperty(props[iProps]);
+
+        setParams();
+
+        try {
+            if (!consulta) {
+                init();
+            }
+        } catch (GdalException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Escritura de datos tipo Byte.
+     * @param sizeY Alto del bloque que se escribe.
+     * @param posicionY Posicióny a partir desde donde se comienza.
+     */
+    public void writeByteBand(int sizeY, int posicionY){
+    	byte[][] buftmp = dataWriter.readByteData(sizeWindowX, sizeY);
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+        	bufBands[iBand].buffByte = new byte[buftmp[iBand].length];	
+  
+    	//Escribimos el bloque destino
+    	for (int iBand = 0; iBand < buftmp.length; iBand++)
+    		for (int i = 0; i < buftmp[iBand].length; i++)
+    			bufBands[iBand].buffByte[i] = buftmp[iBand][i];
+    	
+        for (int iBand = 0; iBand < buftmp.length; iBand++){
+        	try {
+				rband = dset_destino.getRasterBand(iBand + 1);
+				rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[iBand], Gdal.GDT_Byte);
+        	} catch (GdalException e) {
+				//No se está escribiendo ...
+			}
+        }
+    }
+    
+    /**
+     * Escritura de datos tipo Short.
+     * @param sizeY Alto del bloque que se escribe.
+     * @param posicionY Posicióny a partir desde donde se comienza.
+     */
+    public void writeShortBand(int sizeY, int posicionY){
+    	short[][] buftmp = dataWriter.readShortData(sizeWindowX, sizeY);
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+        	bufBands[iBand].buffShort = new short[buftmp[iBand].length];	
+  
+    	//Escribimos el bloque destino
+    	for (int iBand = 0; iBand < buftmp.length; iBand++)
+    		for (int i = 0; i < buftmp[iBand].length; i++)
+    			bufBands[iBand].buffShort[i] = buftmp[iBand][i];
+    	
+        for (int iBand = 0; iBand < buftmp.length; iBand++){
+        	try {
+				rband = dset_destino.getRasterBand(iBand + 1);
+				rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[iBand], Gdal.GDT_Int16);
+        	} catch (GdalException e) {
+				//No se está escribiendo ...
+			}
+        }
+    }
+        
+    /**
+     * Escritura de datos tipo Int.
+     * @param sizeY Alto del bloque que se escribe.
+     * @param posicionY Posicióny a partir desde donde se comienza.
+     */
+    public void writeIntBand(int sizeY, int posicionY){
+    	int[][] buftmp = dataWriter.readIntData(sizeWindowX, sizeY);
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+        	bufBands[iBand].buffInt = new int[buftmp[iBand].length];	
+  
+    	//Escribimos el bloque destino
+    	for (int iBand = 0; iBand < buftmp.length; iBand++)
+    		for (int i = 0; i < buftmp[iBand].length; i++)
+    			bufBands[iBand].buffInt[i] = buftmp[iBand][i];
+    	
+        for (int iBand = 0; iBand < buftmp.length; iBand++){
+        	try {
+				rband = dset_destino.getRasterBand(iBand + 1);
+				rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[iBand], Gdal.GDT_Int32);
+        	} catch (GdalException e) {
+				//No se está escribiendo ...
+			}
+        }
+    }
+    
+    /**
+     * Escritura de datos tipo Float.
+     * @param sizeY Alto del bloque que se escribe.
+     * @param posicionY Posicióny a partir desde donde se comienza.
+     */
+    public void writeFloatBand(int sizeY, int posicionY){
+    	float[][] buftmp = dataWriter.readFloatData(sizeWindowX, sizeY);
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+        	bufBands[iBand].buffFloat = new float[buftmp[iBand].length];	
+  
+    	//Escribimos el bloque destino
+    	for (int iBand = 0; iBand < buftmp.length; iBand++)
+    		for (int i = 0; i < buftmp[iBand].length; i++)
+    			bufBands[iBand].buffFloat[i] = buftmp[iBand][i];
+    	
+        for (int iBand = 0; iBand < buftmp.length; iBand++){
+        	try {
+				rband = dset_destino.getRasterBand(iBand + 1);
+				rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[iBand], Gdal.GDT_Float32);
+        	} catch (GdalException e) {
+				//No se está escribiendo ...
+			}
+        }
+    }
+    
+    /**
+     * Escritura de datos tipo Double.
+     * @param sizeY Alto del bloque que se escribe.
+     * @param posicionY Posicióny a partir desde donde se comienza.
+     */
+    public void writeDoubleBand(int sizeY, int posicionY){
+    	double[][] buftmp = dataWriter.readDoubleData(sizeWindowX, sizeY);
+    	for(int iBand = 0; iBand < nBands; iBand ++)
+        	bufBands[iBand].buffDouble = new double[buftmp[iBand].length];	
+  
+    	//Escribimos el bloque destino
+    	for (int iBand = 0; iBand < buftmp.length; iBand++)
+    		for (int i = 0; i < buftmp[iBand].length; i++)
+    			bufBands[iBand].buffDouble[i] = buftmp[iBand][i];
+    	
+        for (int iBand = 0; iBand < buftmp.length; iBand++){
+        	try {
+				rband = dset_destino.getRasterBand(iBand + 1);
+				rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[iBand], Gdal.GDT_Float64);
+        	} catch (GdalException e) {
+				//No se está escribiendo ...
+			}
+        }
+    }
+    /**
+     * Escritura para tipo de dato ARGB.
+     * @param sizeY Alto del bloque que se escribe.
+     * @param posicionY Posicióny a partir desde donde se comienza.
+     */
+    public void writeARGBBand(int sizeY, int posicionY){
+    	int[] buftmp = dataWriter.readARGBData(sizeWindowX, sizeY, 0);
+     	for(int iBand = 0; iBand < nBands; iBand ++)
+         	bufBands[iBand].buffByte = new byte[buftmp.length];	
+     	
+         //Escribimos el bloque destino
+         for (int i = 0; i < buftmp.length; i++) {
+             bufBands[0].buffByte[i] = (byte) (((buftmp[i] & 0xff0000) >> 16) &
+                                    0xff);
+             bufBands[1].buffByte[i] = (byte) (((buftmp[i] & 0xff00) >> 8) & 0xff);
+             bufBands[2].buffByte[i] = (byte) ((buftmp[i] & 0xff) & 0xff);
+         }
+
+         try {
+             rband = dset_destino.getRasterBand(1);
+             rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[0],
+                               Gdal.GDT_Byte);
+             rband = dset_destino.getRasterBand(2);
+             rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[1],
+                               Gdal.GDT_Byte);
+             rband = dset_destino.getRasterBand(3);
+             rband.writeRaster(0, posicionY, sizeWindowX, sizeY, bufBands[2],
+                               Gdal.GDT_Byte);
+         } catch (GdalException e) {
+             e.printStackTrace();
+         }
+    }
+    
+    /**
+     * Escribe tres bandas en el GDALRasterBand desde el IDataWriter con una
+     * altura definida por sizeY.
+     * @param buftmp        Buffer
+     * @param sizeY        Altura en pixels del bloque leido
+     * @param posicionY        Posición y a partir de la cual se escribe en el GDALRasterBand destino
+     */
+    private void writeBands(int sizeY, int posicionY) {
+        //leemos el bloque origen
+        
+        switch(dataType){
+        case RasterBuf.TYPE_IMAGE: 
+        	writeARGBBand(sizeY, posicionY);
+        	break;
+        case RasterBuf.TYPE_BYTE:
+        	writeByteBand(sizeY, posicionY);
+        	break;
+        case RasterBuf.TYPE_SHORT:
+        	writeShortBand(sizeY, posicionY);
+        	break;
+        case RasterBuf.TYPE_INT:
+        	writeIntBand(sizeY, posicionY);
+        	break;
+        case RasterBuf.TYPE_FLOAT:
+        	writeFloatBand(sizeY, posicionY);
+        	break;
+        case RasterBuf.TYPE_DOUBLE:
+        	writeDoubleBand(sizeY, posicionY);
+        	break;
+        }
+    }
+
+    /**
+     * Función que gestiona la lectura desde el origen y la escritura
+     * de Gdal sobre el fichero destino.
+     * @param mode        Modo de escritura
+     * @throws IOException
+     */
+    private void write(int mode) throws IOException {
+        buf = new GdalBuffer();
+        bufBands = new GdalBuffer[nBands];
+        for(int iBand = 0; iBand < nBands; iBand ++)
+        	bufBands[iBand] = new GdalBuffer();
+        
+       // int[] buftmp = null;
+
+        //long t1 = System.currentTimeMillis();
+        try {
+            if (mode == Mode.fileWrite) {
+                for (int iBand = 0; iBand < this.nBands; iBand++) {
+                    rband = dset_destino.getRasterBand(iBand + 1);
+
+                    for (int iBlock = 0; iBlock < nBlocks; iBlock++) {
+                    	if(write){
+	                        //leemos el bloque origen
+	                        buf.buffByte = currentRaster.getGeoFile().getWindow(0,
+	                                                                            iBlock * this.support.getBlockSize(),
+	                                                                            sizeWindowX,
+	                                                                            this.support.getBlockSize(),
+	                                                                            iBand +
+	                                                                            1);
+	
+	                        //Escribimos el bloque destino
+	                        rband.writeRaster(0,
+	                                          iBlock * this.support.getBlockSize(),
+	                                          sizeWindowX,
+	                                          this.support.getBlockSize(), buf,
+	                                          Gdal.GDT_Byte);
+                    	}/*else
+                    		this.writeClose();*/
+                    }
+                }
+            } else if (mode == Mode.dataWrite) {
+                //for(int iBlock=1;iBlock<=nBlocks;iBlock++){
+                for (int iBlock = 0; iBlock < nBlocks; iBlock++) {
+                    int posicionY = iBlock * this.support.getBlockSize();
+                    if(write)
+                    	writeBands( this.support.getBlockSize(), posicionY);
+                    /*else
+                    	this.writeClose();*/
+                }
+            }
+
+            if (anchoResto != 0) {
+                if (mode == Mode.fileWrite) {
+                    for (int iBand = 0; iBand < this.nBands; iBand++) {
+                        rband = dset_destino.getRasterBand(iBand + 1);
+                        if(write){
+	                        //leemos el bloque origen
+	                        buf.buffByte = currentRaster.getGeoFile().getWindow(0,
+	                                                                            nBlocks * this.support.getBlockSize(),
+	                                                                            sizeWindowX,
+	                                                                            anchoResto,
+	                                                                            iBand +
+	                                                                            1);
+	
+	                        //Escribimos el bloque destino
+	                        rband.writeRaster(0,
+	                                          nBlocks * this.support.getBlockSize(),
+	                                          sizeWindowX, anchoResto, buf,
+	                                          Gdal.GDT_Byte);
+                        }/*else
+                        	this.writeClose();*/
+                    }
+                } else if (mode == Mode.dataWrite) {
+                    int posicionY = nBlocks * this.support.getBlockSize();
+                    if(write)
+                    	writeBands(anchoResto, posicionY);
+                    /*else
+                    	this.writeClose();*/
+                }
+            }
+        } catch (GdalException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Realiza la función de compresión a partir de un GeoRasterFile.
+     * @throws IOException
+     */
+    public void fileWrite() throws IOException {
+        if (currentRaster == null) {
+            throw new IOException("No se ha asignado un fichero de entrada.");
+        }
+
+        this.write(Mode.fileWrite);
+    }
+
+    /**
+     * Realiza una copia en el formato especificado.
+     * @throws IOException
+     */
+    public static void createCopy(GdalDriver driverDst, String dst, String src, 
+    		boolean bstrict, String[] params, IProjection proj) throws IOException, GdalException {
+        if (dst == null || src == null) {
+            throw new IOException("No se ha asignado un fichero de entrada.");
+        }
+
+        GdalFile gdalFile;
+		try {
+			gdalFile = new GdalFile(proj, src);
+	        driverDst.createCopy(dst, gdalFile.file, bstrict, params);
+	        if(dst.endsWith(".jpg") || dst.endsWith(".jpeg"))
+	        	GdalWriter.createWorldFile(dst, gdalFile);
+	        gdalFile.close();
+		} catch (NotSupportedExtensionException e) {
+			e.printStackTrace();
+		}
+    }
+    
+    /**
+	 * Crea un fichero de georeferenciación
+	 * @param img
+	 * @param name
+	 * @return
+	 * @throws IOException
+	 */
+	private static void createWorldFile(String name, GdalFile gdalFile) throws IOException{
+    	File tfw = null;
+	    
+    	String extWorldFile = ".wld";
+	    if(name.endsWith("tif"))
+	    	extWorldFile = ".tfw";
+	    if(name.endsWith("jpg") || name.endsWith("jpeg"))
+	    	extWorldFile = ".jpgw";
+	    	    	
+	    tfw = new File(name.substring(0, name.lastIndexOf(".")) + extWorldFile);
+	    
+	    //Generamos un world file para gdal
+	    DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(tfw)) );
+	    dos.writeBytes((gdalFile.getExtent().getMax().getX() - gdalFile.getExtent().getMin().getX())/gdalFile.getWidth()+"\n");
+	    dos.writeBytes("0.0\n");
+	    dos.writeBytes("0.0\n");
+	    dos.writeBytes((gdalFile.getExtent().getMax().getY() - gdalFile.getExtent().getMin().getY())/gdalFile.getHeight()+"\n");
+	    dos.writeBytes(""+gdalFile.getExtent().getMin().getX()+"\n");
+	    dos.writeBytes(""+gdalFile.getExtent().getMin().getY()+"\n");
+	    dos.close();    
+	}
+
+    
+    /**
+     * Realiza la escritura de datos con los datos que le pasa el cliente.
+     * @throws IOException
+     */
+    public void dataWrite() throws IOException {
+        if (dataWriter == null) {
+            throw new IOException("No se ha obtenido un objeto de entrada para la escritura valido.");
+        }
+
+        this.write(Mode.dataWrite);
+    }
+
+    /**
+     * Cancela el salvado de datos.
+     * @throws GdalException
+     */
+    public void writeClose() {
+        try {
+        	if(dset_destino != null)
+        		dset_destino.close();
+            oSRS = null;
+        } catch (GdalException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Cancela el salvado de datos.
+     */
+    public void writeCancel() {
+       write = false; 
+    }
+    
+    /**
+     * Devuelve la configuración de la ventana de dialogo
+     * para las propiedades del driver de escritura de Gdal.
+     * @return XML de configuración del dialogo.
+     */
+    public String getXMLPropertiesDialog() {
+        StringBuffer options = null;
+        options = new StringBuffer();
+        options.append("<window sizex=\"" + this.windowSizeX + "\" sizey=\"" +
+                       this.windowSizeY + "\">");
+        options.append("<panel sizex=\"" + this.panelSizeX + "\" sizey=\"" +
+                       this.panelSizeY + "\" layout=\"" + this.panelLayout +
+                       "\" border=\"yes\">");
+
+        options.append("<panel layout=\"FlowLayout\" position=\"North\" align=\"left\">");
+        options.append("<label>Block Size:</label>");
+        options.append("<combo ident=\"BLOCKSIZE\" selected=\"" +
+                       this.support.getBlockSize() + "\">");
+
+        for (int i = 0; i < this.support.getBlockSizeList().length; i++)
+            options.append("<elem>" + this.support.getBlockSizeList()[i] +
+                           "</elem>");
+
+        options.append("</combo>");
+        //options.append("<label>Georef Si/No:</label>");
+
+        String sel = null;
+
+        if (this.support.getGeoref()) {
+            sel = new String("yes");
+        } else {
+            sel = new String("no");
+        }
+
+        /*options.append("<check ident=\"GEOREF\" selected=\"" + sel +
+                       "\" text=\"\">");
+        options.append("</check>");*/
+        options.append("</panel>");
+
+        options.append("<panel layout=\"FlowLayout\" position=\"Center\" align=\"left\">");
+        options.append("<label>Photometric:</label>");
+        options.append("<combo ident=\"PHOTOMETRIC\" selected=\"" +
+                       this.support.getPhotometric() + "\">");
+
+        for (int i = 0; i < this.support.getPhotometricList().length; i++)
+            options.append("<elem>" + this.support.getPhotometricList()[i] +
+                           "</elem>");
+
+        options.append("</combo>");
+        options.append("<label>Interleave:</label>");
+        options.append("<combo ident=\"INTERLEAVE\" selected=\"" +
+                       this.support.getInterleave() + "\">");
+
+        for (int i = 0; i < this.support.getInterleaveList().length; i++)
+            options.append("<elem>" + this.support.getInterleaveList()[i] +
+                           "</elem>");
+
+        options.append("</combo>");
+        options.append("</panel>");
+
+        options.append("<panel layout=\"FlowLayout\" position=\"South\" align=\"left\">");
+        options.append("<label>Compresión:</label>");
+        options.append("<combo ident=\"COMPRESS\" selected=\"" +
+                       this.support.getCompress() + "\">");
+
+        for (int i = 0; i < this.support.getCompressList().length; i++)
+            options.append("<elem>" + this.support.getCompressList()[i] +
+                           "</elem>");
+
+        options.append("</combo>");
+        options.append("<label>Generar Tfw:</label>");
+        sel = null;
+
+        if (this.support.getTfw()) {
+            sel = new String("yes");
+        } else {
+            sel = new String("no");
+        }
+
+        options.append("<check ident=\"TFW\" selected=\"" + sel +
+                       "\" text=\"\">");
+        options.append("</check>");
+        options.append("</panel>");
+
+        options.append("</panel>");
+        options.append("</window>");
+
+        return options.toString();
+    }
+
+    /**
+     * Obtiene el valor a la variable write que estará a true cuando se está escribiendo
+     *  o puede escribirse la imagen de salida. El cancelar la operación de escritura
+     * pondrá esta variable a false deteniendose la escritura y cerrandose el dataset
+     * de salida. 
+     * @return True si puede escribirse y false si no puede
+     */
+    public boolean isWrite() {
+		return write;
+	}
+
+    /**
+     * Asigna el valor a la variable write que estará a true cuando se está escribiendo
+     *  o puede escribirse la imagen de salida. El cancelar la operación de escritura
+     * pondrá esta variable a false deteniendose la escritura y cerrandose el dataset
+     * de salida. 
+     * @param write Variable booleana. True si puede escribirse y false si no puede
+     */
+	public void setWrite(boolean write) {
+		this.write = write;
+	}
+	
+	/**
+	 * Obtiene las opciones de salvado.
+	 * @return GdalSupportOptions
+	 */
+	public GdalSupportOptions getSupport(){
+    	return this.support; 
+    }
+	
+    /**
+     *
+     * @author Nacho Brodin (brodin_ign@gva.es)
+     *
+     * Opciones que soporta el driver de escritura de Gdal.
+     */
+    public class GdalSupportOptions extends WriterSupportOptions {
+        private String[] 	photometric = {
+                                           "YCBR", "MINISBLACK", "MINISWHITE",
+                                           "RGB", "CMYK", "CIELAB", "ICCLAB",
+                                           "ITULAB", "CBCR"
+                                       };
+        private String[] 	interleave = { "BAND", "PIXEL" };
+        private String[] 	compress = { "LZW", "PACKBITS", "DEFLATE", "NONE" };
+        private String 		photometricDefault = "RGB";
+        private String 		interleaveDefault = "BAND";
+        private String 		compressDefault = "NONE";
+       
+        private boolean tfw = false;
+
+        public GdalSupportOptions(String ext) {
+            super(ext);
+        }
+
+        /**
+         * @param defaultPhot        Tipo de imagen
+         */
+        public void setPhotometric(String defaultPhot) {
+            this.photometricDefault = defaultPhot;
+        }
+
+        /**
+         * @param defaultInt
+         */
+        public void setInterleave(String defaultInt) {
+            this.interleaveDefault = defaultInt;
+        }
+
+        /**
+         * @param defaultComp
+         */
+        public void setCompress(String defaultComp) {
+            this.compressDefault = defaultComp;
+        }
+
+        /**
+         * Asigna true o false si se desea generar un fichero tfw con la
+         * georeferenciación o no;
+         * @param tfw true se genera el fichero tfw y false no se genera
+         */
+        public void setTfw(boolean tfw) {
+            this.tfw = tfw;
+        }
+
+        /**
+         * @return
+         */
+        public String[] getPhotometricList() {
+            return photometric;
+        }
+
+        /**
+         * @return
+         */
+        public String[] getInterleaveList() {
+            return interleave;
+        }
+
+        /**
+         * @return
+         */
+        public String[] getCompressList() {
+            return compress;
+        }
+
+        /**
+         * @return
+         */
+        public String getPhotometric() {
+            return photometricDefault;
+        }
+
+        /**
+         * @return
+         */
+        public String getInterleave() {
+            return interleaveDefault;
+        }
+
+        /**
+         * Obtiene el parámetro de compresión
+         * @return
+         */
+        public String getCompress() {
+            return compressDefault;
+        }
+
+        /**
+         * Devuelve true o false si se genera un fichero tfw con la
+         * georeferenciación o no;
+         * @param tfw true se genera el fichero tfw y false no se genera
+         */
+        public boolean getTfw() {
+            return tfw;
+        }
+    }
+
+    private class Mode {
+        public final static int fileWrite = 0;
+        public final static int dataWrite = 1;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalWriter.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalFile.java	(revision 10281)
@@ -0,0 +1,1530 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ * 
+ * Copyright (C) 2004-5. 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ * 
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.Vector;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.io.data.BandList;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Metadata;
+import org.cresques.io.datastruct.Palette;
+import org.cresques.io.exceptions.NotSupportedExtensionException;
+import org.cresques.io.exceptions.SupersamplingNotSupportedException;
+import org.cresques.px.Extent;
+import org.cresques.util.Utilities;
+
+import es.gva.cit.jgdal.Gdal;
+import es.gva.cit.jgdal.GdalBuffer;
+import es.gva.cit.jgdal.GdalException;
+import es.gva.cit.jgdal.GdalRasterBand;
+import es.gva.cit.jgdal.GeoTransform;
+
+/**
+ * Soporte 'nativo' para ficheros desde GDAL.
+ * Este conjunto de funcionalidades está tomado de manera casi literal
+ * del soporte para ECW de ermapper.<br>
+ * Probablemente esto debería formar parte del JNI que recubre a la
+ * librería en C extraida de gdal.<br>
+ * Lo pongo aquí a manera de ejemplo de como atacar un formato binario
+ * desde Java.<br><br>   
+ * @author Luis W. Sevilla.
+ */
+
+class GdalNative extends Gdal {
+	static boolean 				WITH_OVERVIEWS = true;
+	private GdalFile			driver = null;
+	private String 				ext = "";
+	private String 				fileName = null;
+	/**
+	 * Nombre corto del driver de gdal
+	 */
+	private String 				shortName = "";
+	public 	GeoTransform 		trans = null;
+	/**
+	 * Contorno en coordenadas geográficas. (y Extent del raster).
+	 */
+	public Contour 				bBoxRot = new Contour();
+	/**
+	 * Contorno en coordenadas geográficas sin rotación aplicada. Esto es util para poder
+	 * calcular los pixeles necesarios que se van a leer del raster. Cuando el raster no tiene 
+	 * rotación coincide con esq. 
+	 */
+	public Contour				bBoxWithoutRot = new Contour();
+	public int 					width = 0, height = 0;
+	public double 				originX = 0D, originY = 0D;
+	public String 				version = "";
+	private int 				alpha = 0;
+	protected int 				rBandNr = 1, gBandNr = 2, bBandNr = 3, aBandNr = 4;
+	private int 				dataType = GDT_Byte;
+	/**
+	 * Metadatos leidos de la imagen
+	 */
+	private Metadata			metadata = null;
+	private boolean 			georeferenced = true;
+	
+	/**
+	 * Vectores que contiene los desplazamientos de un pixel cuando hay supersampling.
+	 * , es decir el número de pixels de pantalla que tiene un pixel de imagen. Como todos
+	 * los pixeles no tienen el mismo ancho y alto ha de meterse en un array y no puede ser
+	 * una variable. Además hay que tener en cuenta que el primer y último pixel son de 
+	 * distinto tamaño que el resto.   
+	 */
+	public int[]				stepArrayX = null, stepArrayY = null;
+	protected GdalRasterBand[] 	gdalBands = null;
+	private double				lastReadLine = -1;
+	private int 				currentFullWidth = -1;
+	private int 				currentFullHeight = -1;
+	private int 				currentViewWidth = -1;
+	private int 				currentViewHeight = -1;
+	private double 				currentViewX = 0D;
+	private double 				currentViewY = 0D;
+	private double 				viewportScaleX = 0D;
+	private double 				viewportScaleY = 0D;
+	private double 				wcWidth = 0D;
+	private double 				stepX = 0D;
+	private double 				stepY = 0D;
+	public boolean  			isSupersampling = false;
+	private boolean[] 			orientation;
+	
+	/**
+	 * Overview usada en el último setView
+	 */
+	int currentOverview = -1;
+	
+	// Polilinea con extent
+	public class Contour extends Vector {
+		final private static long serialVersionUID = -3370601314380922368L;
+		public double minX = Double.MAX_VALUE, minY = Double.MAX_VALUE;
+		public double maxX = -Double.MAX_VALUE, maxY = -Double.MAX_VALUE;
+		public Contour() {
+			super();
+		}
+		public void add(Point2D pt) {
+			super.add(pt);
+			if (pt.getX() > maxX) maxX = pt.getX();
+			if (pt.getX() < minX) minX = pt.getX();
+			if (pt.getY() > maxY) maxY = pt.getY();
+			if (pt.getY() < minY) minY = pt.getY();
+		}
+	}
+		
+	public GdalNative(String fName, GdalFile driver) throws GdalException, IOException {
+		super();
+		this.driver = driver;
+		init(fName);
+	}
+	
+	/**
+	 * <P>
+	 * Calcula la bounding box en la que está metido el raster teniendo en cuenta
+	 * el tamaño de pixel y la rotación. Esto lo hace con los valores de transformación 
+	 * leidos por gdal en el vector de 6 elementos adfGeoTransform donde cada elemento
+	 * del vector represnta los siguientes valores
+	 * </P>
+	 * <UL>
+	 * <LI>0-origen X</LI>
+	 * <LI>1-tamaño de pixel X</LI>
+	 * <LI>2-shear en X</LI>
+	 * <LI>3-origen Y</LI>
+	 * <LI>4-shear en Y</LI>
+	 * <LI>5-Tamaño de pixel Y</LI>
+	 * </UL>
+	 * <P>
+	 * Para el calculo de una esquina aplicamos la formula siguiente:<BR>
+	 * PtoX = originX + pixelSizeX * x + shearX * y;<BR>
+	 * PtoY = originY + shearY * x + pixelSizeY * y;<BR>
+	 * Aplicandolo a las cuatro esquinas sustituimos en cada una de ellas por.
+	 * </P>
+	 * <UL> 
+	 * <LI>Esquina superior izquierda: x = 0; y = 0;</LI>
+	 * <LI>Esquina superior derecha: x = MaxX; y = 0;</LI>
+	 * <LI>Esquina inferior izquierda: x = 0; y = MaxY;</LI>
+	 * <LI>Esquina inferior derecha: x = MaxX; y = MaxY;</LI>
+	 * </UL> 
+	 * <P>
+	 * quedandonos en los cuatro casos:
+	 * </P>
+	 * <UL> 
+	 * <LI>Esquina superior izquierda: originX; originY;</LI>
+	 * <LI>Esquina superior derecha: PtoX = originX + pixelSizeX * x; PtoY = originY + shearY * x;</LI>
+	 * <LI>Esquina inferior izquierda:  PtoX = originX + shearX * y; PtoY = originY + pixelSizeY * y;</LI>
+	 * <LI>Esquina inferior derecha: PtoX = originX + pixelSizeX * x + shearX * y; PtoY = originY + shearY * x + pixelSizeY * y;</LI>
+	 * </UL>
+	 * 
+	 */
+	private void boundingBoxFromGeoTransform(){
+		double geoX = 0D, geoY = 0D;
+
+		//Upper left corner
+		bBoxRot.add(new Point2D.Double(trans.adfgeotransform[0], trans.adfgeotransform[3]));
+
+		//Lower left corner
+		geoX = trans.adfgeotransform[0] +  trans.adfgeotransform[2] * height;
+		geoY = trans.adfgeotransform[3] +  trans.adfgeotransform[5] * height;
+		bBoxRot.add(new Point2D.Double(geoX, geoY));
+		
+		//Upper right corner
+		geoX = trans.adfgeotransform[0] + trans.adfgeotransform[1] * width;
+		geoY = trans.adfgeotransform[3] + trans.adfgeotransform[4] * width;
+		bBoxRot.add(new Point2D.Double(geoX, geoY));
+		
+		//Lower right corner
+		geoX = trans.adfgeotransform[0] + trans.adfgeotransform[1] * width + trans.adfgeotransform[2] * height;
+		geoY = trans.adfgeotransform[3] + trans.adfgeotransform[4] * width + trans.adfgeotransform[5] * height;
+		bBoxRot.add(new Point2D.Double(geoX, geoY));
+		
+		//TODO: ¡OJO! con coordenadas geográficas
+	}
+	
+	/**
+	 * Calcula la bounding box en la que está metido el raster teniendo en cuenta
+	 * el tamaño de pixel y la rotación. 
+	 */
+	private void boundingBoxWithoutRotation(){
+		double ox = trans.adfgeotransform[0];
+		double oy = trans.adfgeotransform[3];
+		double resx = trans.adfgeotransform[1];
+		double resy = trans.adfgeotransform[5];
+				
+		bBoxWithoutRot.add(new Point2D.Double(ox, oy));
+		bBoxWithoutRot.add(new Point2D.Double(ox + resx * width, oy));
+		bBoxWithoutRot.add(new Point2D.Double(ox, oy + resy * height));
+		bBoxWithoutRot.add(new Point2D.Double(ox + resx * width, oy + resy * height));
+
+		//TODO: ¡OJO! con coordenadas geográficas
+	}
+	
+	private void init(String fName) throws GdalException, IOException {
+		fileName = fName;
+		open(fName,GA_ReadOnly);
+		ext = fName.toLowerCase().substring(fName.lastIndexOf('.')+1);
+		if (ext.compareTo("tif") == 0)
+			WITH_OVERVIEWS = false;
+		width = getRasterXSize();
+		height = getRasterYSize();
+		setDataType(this.getRasterBand(1).getRasterDataType());
+		shortName = getDriverShortName();
+		metadata = new Metadata(getMetadata());
+		
+		//Asignamos la interpretación de color leida por gdal a cada banda. Esto nos sirve
+		//para saber que banda de la imagen va asignada a cada banda de visualización (ARGB)
+		metadata.initColorInterpretation(getRasterCount());
+		metadata.initNoDataByBand(getRasterCount());
+	    for(int i = 0; i < getRasterCount(); i++){
+	    	GdalRasterBand rb = getRasterBand(i + 1);
+	    	String colorInt = getColorInterpretationName(rb.getRasterColorInterpretation());
+	    	metadata.setNoDataValue(i, rb.getRasterNoDataValue());
+	    	metadata.setColorInterpValue(i, colorInt);
+	    	if(colorInt.equals("Red"))
+	    		rBandNr = i + 1;
+	    	if(colorInt.equals("Green"))
+	    		gBandNr = i + 1;	
+	    	if(colorInt.equals("Blue"))
+	    		bBandNr = i + 1;		
+	    	if(colorInt.equals("Alpha"))
+	    		aBandNr = i + 1;
+	    }
+	    
+		double ox=0D, oy=0D, resx=0D, resy=0D;
+		try{
+			trans = getGeoTransform();
+						
+			boundingBoxWithoutRotation();
+			boundingBoxFromGeoTransform();
+						
+			this.georeferenced = true;
+		}catch(GdalException exc){
+			bBoxRot.add(new Point2D.Double(0, 0));
+			bBoxRot.add(new Point2D.Double(width, 0));
+			bBoxRot.add(new Point2D.Double(0, height));
+			bBoxRot.add(new Point2D.Double(width, height));		
+			bBoxWithoutRot = bBoxRot;
+			this.georeferenced = false;
+		}
+	}
+	
+	/**
+	 * Asigna el valor de Alpha
+	 * @param a
+	 */
+	public void setAlpha(int a) { 
+		alpha = a; 
+	}
+	
+	/**
+	 * Asigna el tipo de dato
+	 * @param dt entero que representa el tipo de dato
+	 */
+	public void setDataType(int dt) { 
+		dataType = dt; 
+	}
+	
+	/**
+	 * Obtiene el tipo de dato
+	 * @return entero que representa el tipo de dato
+	 */
+	public int getDataType() { 
+		return dataType; 
+	}
+		
+	// Supone rasters no girados
+	public Point2D worldToRaster(Point2D pt) {
+		double x = (((double) currentFullWidth) / (bBoxWithoutRot.maxX - bBoxWithoutRot.minX)) * (pt.getX() - bBoxWithoutRot.minX);
+		double y = (((double) currentFullHeight) / (bBoxWithoutRot.maxY - bBoxWithoutRot.minY)) * (bBoxWithoutRot.maxY - pt.getY());
+		Point2D ptRes = new Point2D.Double(x, y);
+		return ptRes;
+	}
+	
+	/**
+	 * Calcula el overview a usar. Hay que tener en cuenta que tenemos que tener calculadas las variables
+	 * viewPortScale, currentFullWidth y currentFulHeight
+	 * @param coordenada pixel expresada en double que indica la posición superior izquierda
+	 * @throws GdalException
+	 */
+	private void calcOverview(Point2D tl, Point2D br, boolean[] orientation) throws GdalException{
+		gdalBands[0] = getRasterBand(1);
+		currentOverview = -1;
+		if (WITH_OVERVIEWS && gdalBands[0].getOverviewCount() > 0) {
+			GdalRasterBand ovb = null;
+			for (int i = gdalBands[0].getOverviewCount()-1; i > 0; i--) {              
+				ovb = gdalBands[0].getOverview(i);
+				if (ovb.getRasterBandXSize()>getRasterXSize()*viewportScaleX) {
+					currentOverview = i;
+            		viewportScaleX *= ((double) width/(double) ovb.getRasterBandXSize());
+            		viewportScaleY *= ((double) height/(double) ovb.getRasterBandYSize());
+            		stepX = 1D/viewportScaleX;
+            		stepY = 1D/viewportScaleY;
+            		currentFullWidth = ovb.getRasterBandXSize();
+            		currentFullHeight = ovb.getRasterBandYSize();
+            		if(!orientation[0])//Invierte la orientación en X
+            			currentViewX = (width - tl.getX()) - (br.getX()-tl.getX());
+            		else
+            			currentViewX = tl.getX();
+            		if(orientation[1])//Invierte la orientación en Y
+            			lastReadLine = (height - tl.getY()) - (br.getY()-tl.getY());
+            		else
+            			lastReadLine = tl.getY();
+            		break;
+				}
+			}
+		}
+	}
+	
+	public void setView(double dWorldTLX, double dWorldTLY,
+            double dWorldBRX, double dWorldBRY,
+            int nWidth, int nHeight, boolean[] orientation) {
+		this.orientation = orientation;
+		currentFullWidth = width;
+		currentFullHeight = height;
+		Point2D tl = worldToRaster(new Point2D.Double(dWorldTLX, dWorldTLY));
+		Point2D br = worldToRaster(new Point2D.Double(dWorldBRX, dWorldBRY));
+		// Calcula cual es la primera línea a leer;
+		currentViewWidth = nWidth;
+		currentViewHeight = nHeight;
+		wcWidth = Math.abs(br.getX() - tl.getX());
+		
+		if(!orientation[0]) //Invierte la orientación en X
+			currentViewX = (width - tl.getX()) - (br.getX()-tl.getX());
+		else
+			currentViewX = tl.getX();
+		
+		viewportScaleX = (double) currentViewWidth/(br.getX()-tl.getX());
+		viewportScaleY = (double) currentViewHeight/(br.getY()-tl.getY());
+		stepX = 1D/viewportScaleX;
+		stepY = 1D/viewportScaleY;
+						
+		if(orientation[1])//Invierte la orientación en Y
+			lastReadLine = (height - tl.getY()) - (br.getY()-tl.getY());
+		else
+			lastReadLine = tl.getY();
+		
+		//Para lectura del renderizado (ARGB). readWindow selecciona las bandas que necesita.
+		try {
+			// calcula el overview a usar
+			gdalBands = new GdalRasterBand[4];
+			calcOverview(tl, br, orientation);
+			calcArraySteps();
+				      		      					
+			// Selecciona las bandas y los overviews necesarios
+			gdalBands[0] = getRasterBand(rBandNr);
+			gdalBands[1] = gdalBands[0]; 
+			gdalBands[2] = gdalBands[1]; 
+			setDataType(gdalBands[0].getRasterDataType());
+			if(this.getRasterCount() >= 2) {
+				gdalBands[1] = getRasterBand(gBandNr);
+				gdalBands[2] = gdalBands[1]; 
+			}
+			if(this.getRasterCount() >= 3) 
+				gdalBands[2] = getRasterBand(bBandNr);
+			if(metadata.isAlphaBand())
+				gdalBands[3] = getRasterBand(aBandNr);			
+			
+			
+			if (currentOverview > 0) {
+				gdalBands[0] = gdalBands[0].getOverview(currentOverview);
+				gdalBands[1] = gdalBands[0]; 
+				gdalBands[2] = gdalBands[1];
+				if(this.getRasterCount() >= 2) {
+					gdalBands[1] = gdalBands[1].getOverview(currentOverview);
+					gdalBands[2] = gdalBands[1]; 
+				}
+				if(this.getRasterCount() >= 3) 
+					gdalBands[2] = gdalBands[2].getOverview(currentOverview);
+				if(metadata.isAlphaBand())
+					gdalBands[3] = gdalBands[3].getOverview(currentOverview);			
+				
+			}
+			
+		} catch (GdalException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Esta función calcula los arrays de steps en X e Y para que cuando hay supersampleo 
+	 * se aplique el filtro solo a la esquina superior izquierda de cada pixel. 
+	 */
+	private void calcArraySteps(){
+		if(stepX < 1 && stepY < 1){
+			isSupersampling = true;
+			int w = (int) (Math.ceil(((double)currentViewWidth) * stepX) + 1);
+			this.stepArrayX = new int[w];
+			for (double j =  Math.abs(currentViewX - ((int)currentViewX)); j < w; j += stepX) 
+					stepArrayX[(int)(j)] ++;
+							
+			int h = (int) (Math.ceil(((double)currentViewHeight) * stepY) + 1);
+			this.stepArrayY = new int[h];
+			for (double j =  Math.abs(currentViewY - ((int)currentViewY)); j < h; j += stepY) 
+				stepArrayY[(int)(j)] ++;
+		}else{
+			isSupersampling = false;
+			this.stepArrayX = this.stepArrayY = null;
+		}
+	}
+	
+	int lastY = -1;
+	
+	/**
+	 * Lee una línea de bytes
+	 * @param line Buffer donde se cargan los datos
+	 * @param initOffset Desplazamiento inicial desde el margen inzquierdo. Esto es necesario para cuando
+	 * se supersamplea ya que cada pixel de imagen ocupa muchos pixeles de pantalla y puede empezar a dibujarse
+	 * por la izquierda a mitad de pixel
+	 * @param gdalBuffer Buffer con la línea de datos original
+	 */
+	private void readLine(byte[][] line, double initOffset, GdalBuffer[] gdalBuffer){
+		double j = 0D;
+  		int i = 0;
+		for (int iBand = 0; iBand < gdalBuffer.length; iBand++){
+			for (i = 0, j = initOffset; i < currentViewWidth && j < gdalBuffer[0].getSize(); i++, j+=stepX) {
+				line[iBand][i] = gdalBuffer[iBand].buffByte[(int) j];
+			}
+		}
+	}
+	
+	/**
+	 * Lee una línea de shorts
+	 * @param line Buffer donde se cargan los datos
+	 * @param initOffset Desplazamiento inicial desde el margen inzquierdo. Esto es necesario para cuando
+	 * se supersamplea ya que cada pixel de imagen ocupa muchos pixeles de pantalla y puede empezar a dibujarse
+	 * por la izquierda a mitad de pixel
+	 * @param gdalBuffer Buffer con la línea de datos original
+	 */
+	private void readLine(short[][] line, double initOffset, GdalBuffer[] gdalBuffer){
+  		double j = 0D; 
+  		int i = 0;
+		for (int iBand = 0; iBand < gdalBuffer.length; iBand++){
+			for (i = 0, j = initOffset; i < currentViewWidth && j < gdalBuffer[0].getSize(); i++, j+=stepX) {
+				line[iBand][i] = (short)(gdalBuffer[iBand].buffShort[(int) j] & 0xffff);
+			}
+		}
+	}
+
+	/**
+	 * Lee una línea de ints
+	 * @param line Buffer donde se cargan los datos
+	 * @param initOffset Desplazamiento inicial desde el margen inzquierdo. Esto es necesario para cuando
+	 * se supersamplea ya que cada pixel de imagen ocupa muchos pixeles de pantalla y puede empezar a dibujarse
+	 * por la izquierda a mitad de pixel
+	 * @param gdalBuffer Buffer con la línea de datos original
+	 */
+	private void readLine(int[][] line, double initOffset, GdalBuffer[] gdalBuffer){
+		double j = 0D;
+  		int i = 0;
+		for (int iBand = 0; iBand < gdalBuffer.length; iBand++){
+			for (i = 0, j = initOffset; i < currentViewWidth && j < gdalBuffer[0].getSize(); i++, j+=stepX) {
+				line[iBand][i] = (gdalBuffer[iBand].buffInt[(int) j] & 0xffffffff);
+			}
+		}
+	}
+
+	/**
+	 * Lee una línea de float
+	 * @param line Buffer donde se cargan los datos
+	 * @param initOffset Desplazamiento inicial desde el margen izquierdo. Esto es necesario para cuando
+	 * se supersamplea ya que cada pixel de imagen ocupa muchos pixeles de pantalla y puede empezar a dibujarse
+	 * por la izquierda a mitad de pixel
+	 * @param gdalBuffer Buffer con la línea de datos original
+	 */
+	private void readLine(float[][] line, double initOffset, GdalBuffer[] gdalBuffer){
+		double j = 0D;
+  		int i = 0;
+		for (int iBand = 0; iBand < gdalBuffer.length; iBand++){
+			for (i = 0, j = initOffset; i < currentViewWidth && j < gdalBuffer[0].getSize(); i++, j+=stepX) {
+				line[iBand][i] = gdalBuffer[iBand].buffFloat[(int) j];
+			}
+		}
+	}
+	
+	/**
+	 * Lee una línea de doubles
+	 * @param line Buffer donde se cargan los datos
+	 * @param initOffset Desplazamiento inicial desde el margen inzquierdo. Esto es necesario para cuando
+	 * se supersamplea ya que cada pixel de imagen ocupa muchos pixeles de pantalla y puede empezar a dibujarse
+	 * por la izquierda a mitad de pixel
+	 * @param gdalBuffer Buffer con la línea de datos original
+	 */
+	private void readLine(double[][] line, double initOffset, GdalBuffer[] gdalBuffer){
+		double j = 0D;
+  		int i = 0;
+		for (int iBand = 0; iBand < gdalBuffer.length; iBand++){
+			for (i = 0, j = initOffset; i < currentViewWidth && j < gdalBuffer[0].getSize(); i++, j+=stepX) {
+				line[iBand][i] = gdalBuffer[iBand].buffDouble[(int) j];
+			}
+		}
+	}
+	
+	public void readLine(Object line) throws GdalException {
+        int w = (int) (Math.ceil(((double)currentViewWidth)*stepX) + 1);
+        int x = (int) (currentViewX);
+        int y = (int) (lastReadLine);
+        GdalBuffer r = null, g = null, b = null;
+        GdalBuffer a = new GdalBuffer();
+        
+        while(y >= gdalBands[0].getRasterBandYSize())
+        	y--;
+        
+        if (x+w > gdalBands[0].getRasterBandXSize()) 
+        	w = gdalBands[0].getRasterBandXSize()-x;
+        
+        if(gdalBands[0].getRasterColorTable() != null){
+        	Palette palette = new Palette();
+        	palette.createPaletteFromGdalColorTable(gdalBands[0].getRasterColorTable());
+        	driver.setPalette(palette);
+        	r = gdalBands[0].readRaster(x, y, w, 1, w, 1, dataType);
+        }else{
+        	a.buffByte = new byte[w];
+			r = gdalBands[0].readRaster(x, y, w, 1, w, 1, dataType);
+			g = b = r;
+			if (getRasterCount() > 1 && gdalBands[1] != null)
+	    		g = gdalBands[1].readRaster(x, y, w, 1, w, 1, dataType);
+			if (getRasterCount() > 2 && gdalBands[2] != null)
+	    		b = gdalBands[2].readRaster(x, y, w, 1, w, 1, dataType);
+        }
+          		
+        lastReadLine += stepY;
+        
+  		double initOffset =  Math.abs(currentViewX - ((int)currentViewX));
+  		GdalBuffer[] bands = {r, g, b};
+  		  		
+  		if (dataType == GDT_Byte)
+  			readLine((byte[][])line, initOffset, bands);
+		else if (dataType == GDT_CInt16 || dataType == GDT_Int16  || dataType == GDT_UInt16)
+			readLine((short[][])line, initOffset, bands);
+		else if (dataType == GDT_CInt32 || dataType == GDT_Int32  || dataType == GDT_UInt32)
+			readLine((int[][])line, initOffset, bands);
+  		else if(dataType == GDT_Float32 || dataType == GDT_CFloat32)
+  			readLine((float[][])line, initOffset, bands);
+  		else if(dataType == GDT_Float64 || dataType == GDT_CFloat64)
+  			readLine((double[][])line, initOffset, bands);
+  	
+		return;
+	}
+	
+	/**
+	 * Lee una línea y la guarda cada elemento sobre un entero. Este entero representa
+	 * un valor ARGB
+	 * @param line Buffer sobre el que se escribe la linea
+	 * @return 
+	 * @throws GdalException
+	 */
+	int readLineRGBA(int[] line) throws GdalException {
+		int err = 0;
+		
+        int w = (int) (Math.ceil(((double)currentViewWidth)*stepX) + 1);
+        int x = (int) currentViewX;
+        int y = (int) lastReadLine;
+        GdalBuffer r = null, g = null, b = null, p = null;
+        GdalBuffer a = new GdalBuffer();
+        
+        while(y >= gdalBands[0].getRasterBandYSize())
+        	y--;
+        
+        if (x+w > gdalBands[0].getRasterBandXSize()) 
+        	w = gdalBands[0].getRasterBandXSize()-x;
+        
+        if(gdalBands[0].getRasterColorTable() != null){
+        	Palette palette = new Palette();
+        	palette.createPaletteFromGdalColorTable(gdalBands[0].getRasterColorTable());
+        	driver.setPalette(palette);
+        	r = gdalBands[0].readRaster(x, y, w, 1, w, 1, dataType);
+        }else{
+        	
+        	r = gdalBands[0].readRaster(x, y, w, 1, w, 1, dataType);
+        	g = b = r;
+			if (getRasterCount() > 1 && gdalBands[1] != null)
+	    		g = gdalBands[1].readRaster(x, y, w, 1, w, 1, dataType);
+			if (getRasterCount() > 2 && gdalBands[2] != null)
+	    		b = gdalBands[2].readRaster(x, y, w, 1, w, 1, dataType);
+        	
+        	if(metadata.isAlphaBand()){
+        		a = gdalBands[3].readRaster(x, y, w, 1, w, 1, GDT_Byte);	
+        	}else{
+    			a.buffByte = new byte[w];
+    			for (int i = 0;i < w;i++)
+    				a.buffByte[i] = (byte)255;
+        	}
+        }
+  		lastReadLine += stepY;
+  		
+  		int i=0;
+  		double j =  Math.abs(currentViewX - ((int)currentViewX));
+		int alpha = (this.alpha & 0xff) << 24;
+		
+		if(orientation[0]){ //Pixel size en X positivo
+			if (dataType == GDT_Byte){
+	  			if(gdalBands[0].getRasterColorTable() != null){
+	  				for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+		      			int jInt = (int)(j);
+		      			line[i] = (alpha) + ((r.buffByte[jInt] & 0xff) << 16) + ((r.buffByte[jInt] & 0xff) << 8) + (r.buffByte[jInt] & 0xff);
+		      		}
+	  			}else{
+	  				for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+		      			int jInt = (int)(j);
+		      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) + ((r.buffByte[jInt] & 0xff) << 16) + ((g.buffByte[jInt] & 0xff) << 8) + (b.buffByte[jInt] & 0xff);
+		      		}
+	  			}
+	  		}else if (dataType == GDT_CInt16 || dataType == GDT_Int16  || dataType == GDT_UInt16){
+	  			if (g == null) // Sibgle Band (Typical DEM)
+	  		  		for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+	  		  			int jInt = (int)(j);
+		      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) + r.buffShort[jInt];
+		      		}
+	  			else { // Multiband
+	  				// System.err.println("Raster 16bits multibanda");
+		      		for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+		      			int jInt = (int)(j);
+		      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) | (((r.buffShort[jInt] & 0xfff0) << 12) & 0xff0000 ) | 
+										  						 (((g.buffShort[jInt] & 0xfff0) << 4 ) & 0xff00 ) |
+										  						 (((b.buffShort[jInt] & 0xfff0) >> 4 ) & 0xff );
+		      		}
+	  			}
+	  		}
+		}else{ //Pixel size en X negativo
+			if (dataType == GDT_Byte){
+	  			if(gdalBands[0].getRasterColorTable() != null){
+	  				for (i=currentViewWidth - 1; i>=0 && j<r.getSize(); i--, j+=stepX)  {
+		      			int jInt = (int)(j);
+		      			line[i] = (alpha) + ((r.buffByte[jInt] & 0xff) << 16) + ((r.buffByte[jInt] & 0xff) << 8) + (r.buffByte[jInt] & 0xff);
+		      		}
+	  			}else{
+	  				for (i=currentViewWidth - 1; i>=0 && j<r.getSize(); i--, j+=stepX)  {
+		      			int jInt = (int)(j);
+		      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) + ((r.buffByte[jInt] & 0xff) << 16) + ((g.buffByte[jInt] & 0xff) << 8) + (b.buffByte[jInt] & 0xff);
+		      		}
+	  			}
+	  		}else if (dataType == GDT_CInt16 || dataType == GDT_Int16  || dataType == GDT_UInt16){
+	  			if (g == null) // Sibgle Band (Typical DEM)
+	  		  		for (i=currentViewWidth - 1; i>=0 && j<r.getSize(); i--, j+=stepX) {
+	  		  			int jInt = (int)(j);
+		      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) + r.buffShort[jInt];
+		      		}
+	  			else { // Multiband
+	  				// System.err.println("Raster 16bits multibanda");
+		      		for (i=currentViewWidth - 1; i>=0 && j<r.getSize(); i--, j+=stepX) {
+		      			int jInt = (int)(j);
+		      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) | (((r.buffShort[jInt] & 0xfff0) << 12) & 0xff0000 ) | 
+										  						 (((g.buffShort[jInt] & 0xfff0) << 4 ) & 0xff00 ) |
+										  						 (((b.buffShort[jInt] & 0xfff0) >> 4 ) & 0xff );
+		      		}
+	  			}
+	  		}			
+		}
+		
+  		/*if (dataType == GDT_Byte){
+  			if(gdalBands[0].getRasterColorTable() != null){
+  				for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+	      			int jInt = (int)(j);
+	      			line[i] = (alpha) + ((r.buffByte[jInt] & 0xff) << 16) + ((r.buffByte[jInt] & 0xff) << 8) + (r.buffByte[jInt] & 0xff);
+	      		}
+  			}else{
+  				for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+	      			int jInt = (int)(j);
+	      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) + ((r.buffByte[jInt] & 0xff) << 16) + ((g.buffByte[jInt] & 0xff) << 8) + (b.buffByte[jInt] & 0xff);
+	      		}
+  			}
+  		}else if (dataType == GDT_CInt16 || dataType == GDT_Int16  || dataType == GDT_UInt16){
+  			if (g == null) // Sibgle Band (Typical DEM)
+  		  		for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+  		  			int jInt = (int)(j);
+	      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) + r.buffShort[jInt];
+	      		}
+  			else { // Multiband
+  				// System.err.println("Raster 16bits multibanda");
+	      		for (i=0; i<currentViewWidth && j<r.getSize(); i++, j+=stepX) {
+	      			int jInt = (int)(j);
+	      			line[i] = (alpha & ((a.buffByte[jInt])& 0xff) << 24) | (((r.buffShort[jInt] & 0xfff0) << 12) & 0xff0000 ) | 
+									  						 (((g.buffShort[jInt] & 0xfff0) << 4 ) & 0xff00 ) |
+									  						 (((b.buffShort[jInt] & 0xfff0) >> 4 ) & 0xff );
+	      		}
+  			}
+  		}*/
+		return err;
+	}
+		
+	/**
+	 * Lee una ventana de datos sin resampleo a partir de coordenadas reales.
+	 * @param buf Buffer donde se almacenan los datos
+	 * @param bandList Lista de bandas que queremos leer y sobre que bandas del buffer de destino queremos escribirlas
+	 * @param dWorldTLX Posición X en pixeles
+	 * @param dWorldTLY Posición Y en pixeles
+	 * @param w Ancho en pixeles
+	 * @param h Alto en pixeles
+	 * @throws GdalException
+	 */
+	public void readWindow(RasterBuf buf, BandList bandList, double dWorldTLX, double dWorldTLY,
+            				int nWidth, int nHeight) throws GdalException {
+		Point2D tl = worldToRaster(new Point2D.Double(dWorldTLX, dWorldTLY));
+
+		gdalBands = new GdalRasterBand[getRasterCount()];
+		isSupersampling = false;
+		if(gdalBands.length == 0)
+			return;
+		
+		try {			
+			// Selecciona las bandas
+			gdalBands[0] = getRasterBand(1);
+			setDataType(gdalBands[0].getRasterDataType());
+			for(int iBand = 1; iBand < gdalBands.length; iBand++)
+				gdalBands[iBand] = getRasterBand(iBand + 1);
+			
+		} catch (GdalException e) {
+			e.printStackTrace();
+		}
+		
+        int x = (int) Math.ceil(tl.getX());
+        int y = (int) Math.ceil(tl.getY());
+        
+        if ((x + nWidth) > gdalBands[0].getRasterBandXSize()) 
+        	nWidth = gdalBands[0].getRasterBandXSize() - x;
+        
+        if ((y + nHeight) > gdalBands[0].getRasterBandYSize()) 
+        	nHeight = gdalBands[0].getRasterBandYSize() - y;
+        
+		int yMax = y + nHeight;
+        readData(buf, bandList, x, y, nWidth, yMax);
+	}
+	
+	/**
+	 * Lee una ventana de datos sin resampleo a partir de coordenadas en pixeles.
+	 * @param buf Buffer donde se almacenan los datos
+	 * @param bandList Lista de bandas que queremos leer y sobre que bandas del buffer de destino queremos escribirlas
+	 * @param x Posición X en pixeles
+	 * @param y Posición Y en pixeles
+	 * @param w Ancho en pixeles
+	 * @param h Alto en pixeles
+	 * @throws GdalException
+	 */
+	public void readWindow(RasterBuf buf, BandList bandList, int x, int y, int w, int h) throws GdalException {
+        GdalBuffer gdalBuf = null;
+		gdalBands = new GdalRasterBand[getRasterCount()];
+		isSupersampling = false;
+		if(gdalBands.length == 0)
+			return;
+		
+		// Selecciona las bandas
+		gdalBands[0] = getRasterBand(1);
+		setDataType(gdalBands[0].getRasterDataType());
+		for(int iBand = 1; iBand < gdalBands.length; iBand++)
+			gdalBands[iBand] = getRasterBand(iBand + 1);
+					
+		int yMax = y + h;
+		readData(buf, bandList, x, y, w, yMax);
+	}
+	
+	/**
+	 * Lee una ventana de datos sin resampleo a partir de coordenadas en pixeles. Esta función es usuada por
+	 * readWindow para coordenadas reales y readWindow en coordenadas pixel. 
+	 * @param buf Buffer donde se almacenan los datos
+	 * @param bandList Lista de bandas que queremos leer y sobre que bandas del buffer de destino queremos escribirlas
+	 * @param x Posición X en pixeles
+	 * @param y Posición Y en pixeles
+	 * @param w Ancho en pixeles
+	 * @param yMax altura máxima de y
+	 * @throws GdalException
+	 */
+	private void readData(RasterBuf buf, BandList bandList, int x, int y, int w, int yMax) throws GdalException {
+		GdalBuffer gdalBuf = null;
+		int rasterBufLine;
+		for(int iBand = 0; iBand < gdalBands.length; iBand++){
+			int[] drawableBands = bandList.getBufferBandToDraw(fileName, iBand);
+			if(drawableBands == null || (drawableBands.length == 1 && drawableBands[0] == -1))
+				continue;	
+			if(dataType == Gdal.GDT_Byte){
+				for (int line = y; line < yMax; line++) {
+					gdalBuf = gdalBands[iBand].readRaster(x, line, w, 1, w, 1, dataType);
+					rasterBufLine = line - y;
+					for(int drawBands = 0; drawBands < drawableBands.length; drawBands++)
+						buf.setLineInBandByte(gdalBuf.buffByte, rasterBufLine, drawableBands[drawBands]);
+				}
+			}else if((dataType == Gdal.GDT_UInt16) || (dataType == Gdal.GDT_Int16) || (dataType == Gdal.GDT_CInt16)){
+				for (int line = y; line < yMax; line++) {
+					gdalBuf = gdalBands[iBand].readRaster(x, line, w, 1, w, 1, dataType);
+					rasterBufLine = line - y;
+					for(int drawBands = 0; drawBands < drawableBands.length; drawBands++)
+						buf.setLineInBandShort(gdalBuf.buffShort, rasterBufLine, drawableBands[drawBands]);
+				}
+			}else if((dataType == Gdal.GDT_UInt32) || (dataType == Gdal.GDT_Int32) || (dataType == Gdal.GDT_CInt32)){
+				for (int line = y; line < yMax; line++) {
+					gdalBuf = gdalBands[iBand].readRaster(x, line, w, 1, w, 1, dataType);
+					rasterBufLine = line - y;
+					for(int drawBands = 0; drawBands < drawableBands.length; drawBands++)
+						buf.setLineInBandInt(gdalBuf.buffInt, rasterBufLine, drawableBands[drawBands]);
+				}
+			}else if(dataType == Gdal.GDT_Float32){
+				for (int line = y; line < yMax; line++) {
+					gdalBuf = gdalBands[iBand].readRaster(x, line, w, 1, w, 1, dataType);
+					rasterBufLine = line - y;
+					for(int drawBands = 0; drawBands < drawableBands.length; drawBands++)
+						buf.setLineInBandFloat(gdalBuf.buffFloat, rasterBufLine, drawableBands[drawBands]);
+				}
+			}else if(dataType == Gdal.GDT_Float64){
+				for (int line = y; line < yMax; line++) {
+					gdalBuf = gdalBands[iBand].readRaster(x, line, w, 1, w, 1, dataType);
+					rasterBufLine = line - y;
+					for(int drawBands = 0; drawBands < drawableBands.length; drawBands++)
+						buf.setLineInBandDouble(gdalBuf.buffDouble, rasterBufLine, drawableBands[drawBands]);
+				}
+			}
+		}
+	}
+	
+	void pintaInfo() {
+		try {
+			//System.out.println("Origin = "+originX+","+originY);
+			//System.out.println("Origin = "+this.);
+			System.out.println("GeoTransform:");
+			GeoTransform trans = getGeoTransform();
+			for (int i=0; i<6; i++)
+				System.out.println("  param["+i+"]="+trans.adfgeotransform[i]);
+			System.out.println("Metadata:");
+			String [] metadata = getMetadata();
+			for (int i=0; i<metadata.length; i++) {
+				System.out.println(metadata[i]);
+			}
+		} catch (GdalException e) {
+			
+		}
+		
+	}
+	
+	void pintaPaleta() {
+	}
+	
+	public int getBlockSize(){
+		return this.getBlockSize();
+	}
+
+	/**
+	 * Obtiene el objeto que contiene los metadatos
+	 */
+	public Metadata getMetadataJavaObject() {
+		return metadata;
+	}
+
+	/**
+	 * Obtiene el flag que dice si la imagen está o no georreferenciada
+	 * @return true si está georreferenciada y false si no lo está.
+	 */
+	public boolean isGeoreferenced() {
+		return georeferenced;
+	}
+	
+}
+
+/**
+ * @author Luis W. Sevilla
+ */
+public class GdalFile extends GeoRasterFile {
+	public final static int 	BAND_HEIGHT = 64;
+	protected GdalNative 		file = null;
+	/**
+	 * Tamaño de pixel para las imagenes con fichero RMF. No podemos salvarlo en file porque es necesario conocer el
+	 * tamaño de pixel asignado por rl .rmf y el tamaño de pixel real.
+	 */
+	private double				pixelSizeX = 0D, pixelSizeY = 0D;
+
+	private Extent v = null;
+	
+	public GdalFile(IProjection proj, String fName)throws NotSupportedExtensionException{
+		super(proj, fName);
+		extent = new Extent();
+		try {
+			file = new GdalNative(fName, this);
+			load();
+			readGeoInfo(fName);
+			bandCount = file.getRasterCount(); 
+			if ( bandCount > 2) {
+				setBand(RED_BAND,   0);
+				setBand(GREEN_BAND, 1);
+				setBand(BLUE_BAND,  2);
+			} else
+				setBand(RED_BAND|GREEN_BAND|BLUE_BAND, 0);
+		} catch (GdalException e) {
+			throw new NotSupportedExtensionException("Extension not supported");
+		} catch(Exception e){
+		  	System.out.println("Error en GdalOpen");
+		  	e.printStackTrace();
+		  	file = null;
+		}
+		
+		//Obtenemos el tipo de dato de gdal y lo convertimos el de RasterBuf
+		setDataType(org.cresques.util.Utilities.getRasterBufTypeFromGdalType(file.getDataType()));
+	}
+	
+	/**
+	 * Obtenemos o calculamos el extent de la imagen.
+	 */
+	public GeoFile load() {
+		extent = new Extent(file.bBoxRot.minX, file.bBoxRot.minY, file.bBoxRot.maxX, file.bBoxRot.maxY);
+		requestExtent = new Extent(file.bBoxWithoutRot.minX, file.bBoxWithoutRot.minY, file.bBoxWithoutRot.maxX, file.bBoxWithoutRot.maxY);
+		return this;
+	}
+	
+	/**
+	 * Cierra el fichero de imagen
+	 */
+	public void close() {
+		try {
+			if(file != null){
+				file.close();
+				file = null;
+			}
+		} catch (GdalException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Asigna a cada banda R,G o B una banda de la imagen
+	 */
+	public void setBand(int flag, int bandNr) {
+		super.setBand(flag, bandNr);
+		if ((flag & GeoRasterFile.RED_BAND) == GeoRasterFile.RED_BAND) file.rBandNr = bandNr+1;
+		if ((flag & GeoRasterFile.GREEN_BAND) == GeoRasterFile.GREEN_BAND) file.gBandNr = bandNr+1;
+		if ((flag & GeoRasterFile.BLUE_BAND) == GeoRasterFile.BLUE_BAND) file.bBandNr = bandNr+1;
+	}
+	
+	/**
+	 * Asigna el extent de la vista actual. existe un fichero .rmf debemos hacer una transformación
+	 * de la vista asignada ya que la petición viene en coordenadas del fichero .rmf y la vista (v)
+	 * ha de estar en coordenadas del fichero.
+	 */
+	public void setView(Extent e) { 
+		if(rmfExists){
+			
+			Point2D.Double petInit = null, petEnd = null;
+			try{
+				petInit = new Point2D.Double(e.minX(),  e.maxY());
+				petEnd = new Point2D.Double(e.maxX(), e.minY());
+				transformRMF.inverseTransform(petInit, petInit);
+				transformRMF.inverseTransform(petEnd, petEnd);
+				transformTFW.transform(petInit, petInit);
+				transformTFW.transform(petEnd, petEnd);
+			}catch(NoninvertibleTransformException ex){}
+			double h = file.bBoxWithoutRot.maxY - file.bBoxWithoutRot.minY;
+			if(!file.isGeoreferenced())
+				v = new Extent(	petInit.getX(), h - petInit.getY(), petEnd.getX(), h - petEnd.getY()); 
+			else
+				v = new Extent(	petInit.getX(), petInit.getY(), petEnd.getX(), petEnd.getY());
+			
+		}else
+			v = new Extent(e.minX(), e.minY(), e.maxX(), e.maxY());	
+	}
+		
+	 /**
+	 * Calcula la transformación que se produce sobre la vista cuando la imagen tiene un fichero .rmf
+	 * asociado. En Gdal el origen de coordenadas en Y es el valor mínimo y crece hasta el máximo. De la
+	 * misma forma calcula la matriz de transformación de la cabecera del fichero o del world file asociado
+	 * @param originX Origen de la imagen en la coordenada X
+	 * @param originY Origen de la imagen en la coordenada Y
+	 */
+	public void setExtentTransform(double originX, double originY, double psX, double psY) {		
+		transformRMF.setToTranslation(originX, originY);
+		transformRMF.scale(psX, psY);
+		
+		if(file.trans != null){	
+			transformTFW.setToTranslation(file.trans.adfgeotransform[0], file.trans.adfgeotransform[3]);
+			transformTFW.scale(file.trans.adfgeotransform[1], file.trans.adfgeotransform[5]);
+		}
+	}
+	
+	/**
+	 * Obtiene extent de la vista actual
+	 */
+	public Extent getView() { 
+		return v; 
+	}
+	
+	/**
+	 * Obtiene la anchura del fichero
+	 */
+	public int getWidth() {	
+		return file.width; 
+	}
+	
+	/**
+	 * Obtiene la altura del fichero
+	 */
+	public int getHeight() { 
+		return file.height;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.io.GeoRasterFile#reProject(org.cresques.cts.ICoordTrans)
+	 */
+	public void reProject(ICoordTrans rp) {
+		// TODO Auto-generated method stub
+	}
+	
+	/**
+	 * Obtiene la orientación de la imagen a partir del signo del tamaño de pixel para poder
+	 * asignarlo en el setView. Esto es util para poder conocer como debe leerse la image, 
+	 * de abajo a arriba, de arriba a abajo, de izquierda a derecha o de derecha a izquierda. 
+	 * La posición habitual es la que el pixel size en X es positivo y en Y negativo leyendose 
+	 * en este caso las X de menor a mayor y las Y de mayor a menor. Los casos posibles son:
+	 * <UL>
+	 * <LI><B>X > 0; Y < 0;</B> {true, false}</LI>
+	 * <LI><B>X > 0; Y > 0;</B> {true, true}</LI>
+	 * <LI><B>X < 0; Y > 0;</B> {false, true}</LI>
+	 * <LI><B>X < 0; Y < 0;</B> {false, false}</LI>
+	 * </UL>
+	 *  
+	 * @return
+	 */
+	private boolean[] getOrientation(){
+		boolean[] orientation = {true, false};
+		if(!rmfExists){
+			if(file.trans != null && file.trans.adfgeotransform != null && file.trans.adfgeotransform[5] > 0)
+				orientation[1] = true;
+			if(file.trans != null && file.trans.adfgeotransform != null && file.trans.adfgeotransform[1] < 0)
+				orientation[0] = false;
+		}else{
+			if(rmfTransform.getScaleY() > 0)
+				orientation[1] = true;
+			if(rmfTransform.getScaleX() < 0)
+				orientation[0] = false;
+		}
+		return orientation;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans)
+	 */
+	public Image updateImage(int width, int height, ICoordTrans rp) {
+		int line, pRGBArray[] = null;
+		Image image = null;
+			
+		if (mustVerifySize()) {
+			// Work out the correct aspect for the setView call.
+			double dFileAspect = (double)v.width()/(double)v.height();
+			double dWindowAspect = (double)width /(double)height;
+	
+			if (dFileAspect > dWindowAspect) {
+			  height =(int)((double)width/dFileAspect);
+			} else {
+			  width = (int)((double)height*dFileAspect);
+			}
+		}
+		
+		// Set the view
+		file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(), width, height, getOrientation());
+		setStep(file.stepArrayX, file.stepArrayY);
+		
+		if(width<=0)width=1;
+		if(height<=0)height=1;
+		
+		image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+		//image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+		pRGBArray = new int[width/**BAND_HEIGHT*/];
+		try {
+			//int nLin = height % BAND_HEIGHT;
+			file.setAlpha(getAlpha());
+			setBand(RED_BAND,   rBandNr);
+			setBand(GREEN_BAND, gBandNr);
+			setBand(BLUE_BAND,  bBandNr);
+			for (line=0; line < height; line++) { //+=BAND_HEIGHT) {
+				//int bandH = Math.min(BAND_HEIGHT, height-line);
+				//file.readBandRGBA(bandH, BAND_HEIGHT, pRGBArray);
+				file.readLineRGBA(pRGBArray);
+				setRGBLine((BufferedImage) image, 0, line, width, 1/*bandH*/, pRGBArray, 0, width);
+			}
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		return image;
+	}
+	
+	public RasterBuf getRaster(int width, int height, ICoordTrans rp) {
+		int line;
+		RasterBuf raster = null;
+			
+		if(mustVerifySize()){
+			// Work out the correct aspect for the setView call.
+			double dFileAspect = (double)v.width()/(double)v.height();
+			double dWindowAspect = (double)width /(double)height;
+	
+			if (dFileAspect > dWindowAspect) {
+			  height =(int)((double)width/dFileAspect);
+			} else {
+			  width = (int)((double)height*dFileAspect);
+			}
+		}
+		
+		// Set the view
+		boolean[] orientation = getOrientation();
+		file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(),
+			width, height, orientation);
+		setStep(file.stepArrayX, file.stepArrayY);
+		
+		try {
+			//Esta función se usa para la renderización, por eso se crean 4 bandas a piñon fijo
+			raster = new RasterBuf(getDataType(), width, height, 4, true);
+		
+			file.setAlpha(getAlpha());
+			setBand(RED_BAND,   rBandNr);
+			setBand(GREEN_BAND, gBandNr);
+			setBand(BLUE_BAND,  bBandNr);
+			
+			switch(getDataType()){
+			case RasterBuf.TYPE_BYTE: 
+				for (line=0; line < height; line++) 
+					file.readLine(raster.getLineByte(line));
+				break;
+			case RasterBuf.TYPE_SHORT:;	
+				for (line=0; line < height; line++) 
+					file.readLine(raster.getLineShort(line));
+				break;
+			case RasterBuf.TYPE_INT:
+				for (line=0; line < height; line++) 
+					file.readLine(raster.getLineInt(line));
+				break;
+			case RasterBuf.TYPE_FLOAT:
+				for (line=0; line < height; line++) 
+					file.readLine(raster.getLineFloat(line));
+				break;
+			case RasterBuf.TYPE_DOUBLE:
+				for (line=0; line < height; line++) 
+					file.readLine(raster.getLineDouble(line));
+				break;
+			case RasterBuf.TYPE_UNDEFINED:break;
+			}
+			
+			
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		return raster;
+	}
+	
+	/**
+	 * Asigna al objeto Image los valores con los dato de la imagen contenidos en el 
+	 * vector de enteros.
+	 * @param image	imagen con los datos actuales
+	 * @param startX	inicio de la posición en X dentro de la imagen
+	 * @param startY	inicio de la posición en X dentro de la imagen
+	 * @param w	Ancho de la imagen
+	 * @param h	Alto de la imagen
+	 * @param rgbArray	vector que contiene la banda que se va a sustituir
+	 * @param offset	desplazamiento
+	 * @param scansize	tamaño de imagen recorrida por cada p
+	 */
+	protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, 
+			 int offset, int scansize) {
+		image.setRGB(startX, startY, w, h, rgbArray, offset, scansize);
+	}
+	
+	/**
+	 * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores 
+	 * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
+	 * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
+	 * banda correspondiente a flags es sustituida por los datos del vector.
+	 * @param image	imagen con los datos actuales
+	 * @param startX	inicio de la posición en X dentro de la imagen
+	 * @param startY	inicio de la posición en X dentro de la imagen
+	 * @param w	Ancho de la imagen
+	 * @param h	Alto de la imagen
+	 * @param rgbArray	vector que contiene la banda que se va a sustituir
+	 * @param offset	desplazamiento
+	 * @param scansize	tamaño de imagen recorrida por cada paso
+	 * @param flags	banda que se va a sustituir (Ctes de GeoRasterFile)
+	 */
+	protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, 
+			 int offset, int scansize, int flags) {
+		int [] line = new int[rgbArray.length]; 
+		image.getRGB(startX, startY, w, h, line, offset, scansize);
+		if (flags == GeoRasterFile.RED_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
+		else if (flags == GeoRasterFile.GREEN_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
+		else if (flags == GeoRasterFile.BLUE_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
+		image.setRGB(startX, startY, w, h, line, offset, scansize);
+	}
+	
+	/**
+	 * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores 
+	 * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
+	 * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
+	 * banda correspondiente a flags es sustituida por los datos del vector.
+	 * @param image	imagen con los datos actuales
+	 * @param startX	inicio de la posición en X dentro de la imagen
+	 * @param startY	inicio de la posición en X dentro de la imagen
+	 * @param w	Ancho de la imagen
+	 * @param h	Alto de la imagen
+	 * @param rgbArray	vector que contiene la banda que se va a sustituir
+	 * @param offset	desplazamiento
+	 * @param scansize	tamaño de imagen recorrida por cada paso
+	 * @param origBand	Banda origen del GeoRasterFile
+	 * @param destBandFlag	banda que se va a sustituir (Ctes de GeoRasterFile)
+	 */
+	protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, 
+			 int offset, int scansize, int origBand, int destBandFlag) {
+		int [] line = new int[rgbArray.length]; 
+		image.getRGB(startX, startY, w, h, line, offset, scansize);
+		if (origBand == 0 && destBandFlag == GeoRasterFile.RED_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
+		else if (origBand == 1 && destBandFlag == GeoRasterFile.GREEN_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
+		else if (origBand == 2 && destBandFlag == GeoRasterFile.BLUE_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
+		
+		else if (origBand == 0 && destBandFlag == GeoRasterFile.GREEN_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0xffff00ff) | ((rgbArray[i] & 0x00ff0000) >> 8) ;
+		else if (origBand == 0 && destBandFlag == GeoRasterFile.BLUE_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0xffffff00) | ((rgbArray[i] & 0x00ff0000) >> 16);
+		else if (origBand == 1 && destBandFlag == GeoRasterFile.RED_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0xff00ffff) | ((rgbArray[i] & 0x0000ff00) << 8);
+		
+		else if (origBand == 1 && destBandFlag == GeoRasterFile.BLUE_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0xffffff00) | ((rgbArray[i] & 0x0000ff00) >> 8);
+		else if (origBand == 2 && destBandFlag == GeoRasterFile.RED_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0xff00ffff) | ((rgbArray[i] & 0x000000ff) << 16);
+		else if (origBand == 2 && destBandFlag == GeoRasterFile.GREEN_BAND)
+			for (int i=0; i<line.length; i++)
+				line[i] = (line[i] & 0xffff00ff) | ((rgbArray[i] & 0x000000ff) << 8);
+		image.setRGB(startX, startY, w, h, line, offset, scansize);
+	}
+	
+	private void showOnOpen() {
+  		// Report en la apertura (quitar)
+  		System.out.println("Fichero GDAL '"+getName()+"' abierto.");
+  		System.out.println("Version = "+file.version);
+  		System.out.println("   Size = ("+file.width+","+file.height+")");
+  		try {
+			System.out.println("   NumBands = ("+file.getRasterCount()+")");
+		} catch (GdalException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+  		//file.pintaInfo();
+  		file.pintaPaleta();
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans, java.awt.Image, int, int)
+	 */
+	public Image updateImage(int width, int height, ICoordTrans rp, Image img, int origBand, int destBandFlag)throws SupersamplingNotSupportedException{
+		int line, pRGBArray[] = null;
+			
+		if(mustVerifySize()){
+			// Work out the correct aspect for the setView call.
+			double dFileAspect = (double)v.width()/(double)v.height();
+			double dWindowAspect = (double)width /(double)height;
+	
+			if (dFileAspect > dWindowAspect) {
+			  height =(int)((double)width/dFileAspect);
+			} else {
+			  width = (int)((double)height*dFileAspect);
+			}
+		}
+
+//		 Set the view
+		boolean[] orientation = getOrientation();
+		file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(),
+			width, height, orientation);
+		setStep(file.stepArrayX, file.stepArrayY);
+
+		if(width<=0)width=1;
+		if(height<=0)height=1;
+				
+		pRGBArray = new int[width];
+		try {
+			setBand(RED_BAND,   rBandNr);
+			setBand(GREEN_BAND, gBandNr);
+			setBand(BLUE_BAND,  bBandNr);
+			file.setAlpha(getAlpha());
+			if(img!=null){
+				if(orientation[1]){
+					for (line=0; line < height; line++) {
+						file.readLineRGBA(pRGBArray);
+						setRGBLine((BufferedImage) img, 0, height - 1 - line, width, 1, pRGBArray, 0, width, origBand, destBandFlag);
+					}	
+				}else{
+					for (line=0; line < height; line++) {
+						file.readLineRGBA(pRGBArray);
+						setRGBLine((BufferedImage) img, 0, line, width, 1, pRGBArray, 0, width, origBand, destBandFlag);
+					}
+				}
+				return img;
+			}else{
+				Image image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+				if(orientation[1]){
+					for (line=0; line < height; line++) {
+						file.readLineRGBA(pRGBArray);
+						setRGBLine((BufferedImage) image, 0, height - 1 - line, width, 1, pRGBArray, 0, width);
+					}	
+				}else{
+					for (line=0; line < height; line++) {
+						file.readLineRGBA(pRGBArray);
+						setRGBLine((BufferedImage) image, 0, line, width, 1, pRGBArray, 0, width);
+					}
+				}
+				return image;
+			}
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		return img;
+	}
+			
+	/* (non-Javadoc)
+	 * @see org.cresques.io.GeoRasterFile#getData(int, int, int)
+	 */
+	public Object getData(int x, int y, int band) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	/**
+	 * Devuelve los datos de una ventana solicitada
+	 * @param ulX	coordenada X superior izda.
+	 * @param ulY	coordenada Y superior derecha.
+	 * @param sizeX	tamaño en X de la ventana.
+	 * @param sizeY tamaño en Y de la ventana.
+	 * @param band	Banda solicitada.
+	 */
+	public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band){
+		
+		return null;
+	}
+	
+	public RasterBuf getWindowRaster(double x, double y, double w, double h, BandList bandList, RasterBuf rasterBuf) {		
+		Extent selectedExtent = new Extent(x, y, x + w, y - h);
+		setView(selectedExtent);
+		
+		int width = 0;
+		int height = 0;
+		if(file.trans != null){
+			width = (int)Math.abs(selectedExtent.width() / file.trans.adfgeotransform[1]);//(int)(selectedExtent.width() * file.width) / extent.width();
+			height = (int)Math.abs(selectedExtent.height() / file.trans.adfgeotransform[5]);
+		}else{
+			width = (int)Math.abs(selectedExtent.width());
+			height = (int)Math.abs(selectedExtent.height());
+		}
+				
+		try {
+			file.readWindow(rasterBuf, bandList, x, y, width, height);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		return rasterBuf;
+	}
+	
+	public RasterBuf getWindowRaster(int x, int y, int w, int h, BandList bandList, RasterBuf rasterBuf) {
+		try {
+			setView(
+			new Extent( Utilities.getMapRectFromPxRect(getExtent().toRectangle2D(), 
+						getWidth(), 
+						getHeight(),
+						new Rectangle2D.Double(x, y, w, h)))
+			);
+			file.readWindow(rasterBuf, bandList, x, y, w, h);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return rasterBuf;
+	}
+	
+	/**
+	 * Obtiene la zona (Norte / Sur)
+	 * @return true si la zona es norte y false si es sur
+	 */
+	
+	public boolean getZone(){
+		
+		return false;
+	}
+	
+	/**
+	 *Devuelve el número de zona UTM
+	 *@return Número de zona 
+	 */
+	
+	public int getUTM(){
+		
+		return 0;	
+	}
+	
+	/**
+	 * Obtiene el sistema de coordenadas geograficas
+	 * @return Sistema de coordenadas geográficas
+	 */
+	public String getGeogCS(){
+		return new String("");	
+	}
+	
+	/**
+	 * Devuelve el tamaño de bloque
+	 * @return Tamaño de bloque
+	 */
+	public int getBlockSize(){
+		if(file != null)
+			return file.getBlockSize();
+		else
+			return 0;
+	}
+	
+	/**
+	 * Obtiene el objeto que contiene los metadatos
+	 */
+	public Metadata getMetadata() {
+		if(file != null)
+			return file.getMetadataJavaObject();
+		else
+			return null;
+	}
+	
+	/**
+	 * Obtiene el flag que dice si la imagen está o no georreferenciada
+	 * @return true si está georreferenciada y false si no lo está.
+	 */
+	public boolean isGeoreferenced() {
+		if(file != null)
+			return file.isGeoreferenced();
+		else 
+			return false;
+	}
+    
+	/**
+	 * Informa de si el driver ha supersampleado en el último dibujado. Es el driver el que colocará
+	 * el valor de esta variable cada vez que dibuja. 
+	 * @return true si se ha supersampleado y false si no se ha hecho.
+	 */
+	public boolean isSupersampling() {
+		if(file != null)
+			return file.isSupersampling;
+		else 
+			return false;
+	}
+	
+	/**
+	 * Obtiene los parámetros de la transformación afín que corresponde con los elementos de
+	 * un fichero tfw.
+	 * <UL> 
+	 * <LI>[1]tamaño de pixel en X</LI>
+	 * <LI>[2]rotación en X</LI>
+	 * <LI>[4]rotación en Y</LI>
+	 * <LI>[5]tamaño de pixel en Y</LI>
+	 * <LI>[0]origen en X</LI>
+	 * <LI>[3]origen en Y</LI>
+	 * </UL>
+	 * Este método debe ser reimplementado por el driver si tiene esta información. En principio
+	 * Gdal es capaz de proporcionarla de esta forma.
+	 * 
+	 * En caso de que exista fichero .rmf asociado al raster pasaremos de la información de georreferenciación
+	 * del .tfw y devolveremos la que está asociada al rmf
+	 * @return vector de double con los elementos de la transformación afín.
+	 */
+	public double[] getTransform(){
+		if(file != null && file.trans != null && !this.rmfExists())
+			return file.trans.adfgeotransform;
+		else{
+			if(this.rmfExists){
+				double[] rmfGeoref = {	rmfTransform.getTranslateX(), 
+										rmfTransform.getScaleX(),
+										rmfTransform.getShearX(), 
+										rmfTransform.getTranslateY(),
+										rmfTransform.getShearY(),
+										rmfTransform.getScaleY()};
+				return rmfGeoref;
+			}
+			return null;
+		}
+		
+	}
+	
+}
+
+
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GdalFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ErmapperWriter.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ErmapperWriter.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ErmapperWriter.java	(revision 10281)
@@ -0,0 +1,784 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import es.gva.cit.jecwcompress.*;
+import es.gva.cit.jgdal.GdalRasterBand;
+
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.GdalWriter.GdalSupportOptions;
+
+import org.cresques.px.PxRaster;
+
+import java.io.IOException;
+
+
+/**
+ * Driver para la compresión en formato Ecw.
+ *
+ * Puede exportar un fichero desde un GeoRasterFile en cualquier formato soportado
+ * por los drivers de lectura a uno en formato Ecw.
+ *
+ * Puede salvar a disco en formato Ecw obteniendo los datos que van siendo servidos
+ * desde el cliente. Este cliente debe implementar un IDataWriter o tener un objeto
+ * que lo implemente. Inicialmente le pasará los parámetros de la imagen de salida
+ * y cuando el driver comience a escribir le irá solicitando más a través del método
+ * readData de IDataWriter. El cliente será el que lleve el control de lo que va
+ * sirviendo y lo que le queda por servir.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class ErmapperWriter extends GeoRasterWriter {
+    static {
+    	String os = System.getProperties().getProperty("os.version");
+        if (os.startsWith("2.4")){
+        	GeoRasterWriter.registerWriterExtension("ecw", ErmapperWriter.class);
+        	typeList.put("ecw", "Ecw");
+        }
+        GeoRasterWriter.registerWriterExtension("jp2", ErmapperWriter.class);
+        typeList.put("jp2", "Jpeg2000");
+    }
+
+    public final int 				windowSizeX = 386;
+    public final int 				windowSizeY = 220;
+    public final int 				panelSizeX = 358;
+    public final int 				panelSizeY = 125;
+    public final String 			panelLayout = "BorderLayout";
+    private NCSEcwCompressClient 	compressclient = null;
+    private Reader 					readerObj;
+    private double 					pixelSizeX;
+    private double 					pixelSizeY;
+    private double 					geoCoordOrigenX;
+    private double 					geoCoordOrigenY;
+    private EcwSupportOptions 		support = null;
+    private boolean 				consulta = false;
+
+    /**
+     * Constructor para la obtención de parámetros del driver.
+     */
+    public ErmapperWriter(String fileName) {
+    	ident = fileName.toLowerCase().substring(fileName.lastIndexOf(".") + 1);    	
+    	driver = (String)typeList.get(ident);
+    	
+        support = new EcwSupportOptions(driver);
+        support.setBlockSize(blockSizeDefault);
+        support.setCompressionDefault(10);
+        support.setFormatDefault(4);
+        support.setWriteGeoref(true);
+        consulta = true;
+    }
+
+    /**
+     * Constructor para salvar una sola imagen completa
+     * @param raster        PxRaster de la imagen origen
+     * @param outfilename        Fichero de salida
+     * @param infilename        Fichero de entrada
+     * @param compresion        Compresión
+     */
+    public ErmapperWriter(PxRaster raster, String outFileName, String inFileName,
+                     int compresion) throws EcwException, IOException {
+    	ident = outFileName.toLowerCase().substring(outFileName.lastIndexOf(".") + 1); 
+    	driver = (String)typeList.get(ident);
+        support = new EcwSupportOptions(driver);
+        
+        this.outFileName = outFileName;
+        this.inFileName = inFileName;
+        currentRaster = raster;
+
+        support.setCompressionDefault(compresion);
+
+        sizeWindowX = raster.getFWidth();
+        sizeWindowY = raster.getFHeight();
+
+        support.setBlockSize(currentRaster.getBlockSize());
+
+        nBands = currentRaster.getBandCount();
+
+        //Calculamos la georeferenciación
+        double maxX = currentRaster.getExtent().maxX();
+        geoCoordOrigenX = currentRaster.getExtent().minX();
+        geoCoordOrigenY = currentRaster.getExtent().maxY();
+
+        double minY = currentRaster.getExtent().minY();
+        double w = currentRaster.getFWidth();
+        double h = currentRaster.getFHeight();
+        pixelSizeX = (maxX - geoCoordOrigenX) / w;
+        pixelSizeY = (minY - geoCoordOrigenY) / h;
+
+        if ((sizeWindowX < 0) || (sizeWindowY < 0)) {
+            throw new IOException("Tamaño del fichero de salida erroneo.");
+        }
+
+        if (nBands == 1) {
+            this.support.setFormatDefault(CompressFormat.COMPRESS_UINT8);
+        } else if (nBands == 3) {
+            this.support.setFormatDefault(CompressFormat.COMPRESS_RGB);
+        } else {
+            this.support.setFormatDefault(CompressFormat.COMPRESS_MULTI);
+        }
+
+        init();
+    }
+
+    /**
+     * Constructor para la lectura de datos desde el objeto cliente a partir
+     * de un viewport dado.
+     * @param dataWriter        Objeto que sirve datos para el escritor
+     * @param vp        viewport de origen
+     * @param outFileName        Fichero de salida
+     * @param blockSize        Tamaño de bloque
+     * @param nBands        Número de bandas
+     * @param compresion        Compresión
+     * @throws EcwException
+     * @throws IOException
+     */
+    public ErmapperWriter(	IDataWriter dataWriter, 
+                     		String outFileName, 
+                     		Integer blockSize, 
+                     		Integer nBands,
+                     		ViewPortData vp,
+                     		Integer compresion,
+                     		Integer outSizeX,
+                     		Integer outSizeY,
+                     		Integer dataType) throws EcwException, IOException {
+    	ident = outFileName.toLowerCase().substring(outFileName.lastIndexOf(".") + 1); 
+    	driver = (String)typeList.get(ident);
+        support = new EcwSupportOptions(driver);
+        
+        if (compresion.intValue() <= 0) {
+            throw new EcwException("Tasa de compresión no valida.");
+        }
+
+        if (nBands.intValue() <= 0) {
+            throw new EcwException("Número de bandas erroneo.");
+        }
+
+        if ((vp.getWidth() <= 0) || (vp.getHeight() <= 0)) {
+            throw new EcwException("Tamaño de la imagen de salida erroneo.");
+        }
+
+        this.outFileName = outFileName;
+        this.dataWriter = dataWriter;
+        this.support.setCompressionDefault(compresion.intValue());
+        this.nBands = nBands.intValue();
+
+        this.sizeWindowX = (int) vp.getWidth();
+        this.sizeWindowY = (int) vp.getHeight();
+        this.support.setBlockSize(blockSize.intValue());
+
+        //Calculamos la georeferenciación a partir del extend pasado por el cliente.
+        double maxX = vp.getExtent().maxX();
+        geoCoordOrigenX = vp.getExtent().minX();
+        geoCoordOrigenY = vp.getExtent().maxY();
+
+        double minY = vp.getExtent().minY();
+        pixelSizeX = (maxX - geoCoordOrigenX) / vp.getWidth();
+        pixelSizeY = (minY - geoCoordOrigenY) / vp.getHeight();
+
+        if (pixelSizeX == 0) {
+            pixelSizeX = 1.0;
+        }
+
+        if (pixelSizeY == 0) {
+            pixelSizeY = 1.0;
+        }
+
+        init();
+    }
+
+    /**
+     * Inicialización de los parámetros del compresor que serán obtenidos
+     * de PxRaster.
+     * @throws EcwException
+     */
+    private void init() throws EcwException {
+        if (this.support.getCompression() == 0) {
+            this.support.setCompressionDefault(1);
+        }
+
+        if (compressclient == null) {
+            compressclient = new NCSEcwCompressClient();
+        }
+
+        compressclient.setOutputFilename(outFileName);
+        compressclient.setInputFilename(inFileName);
+        compressclient.setTargetCompress(this.support.getCompression());
+        compressclient.setInOutSizeX(sizeWindowX);
+        compressclient.setInOutSizeY(sizeWindowY);
+        compressclient.setInputBands(nBands);
+        compressclient.setCompressFormat(this.support.getFormat());
+
+        //System.out.println("Origen=>"+minX + "  "+maxY );
+        //System.out.println("Pixel Size=>"+psX+"  "+psY);
+        //compressclient.setDatum("UTM Zona 31N");
+        //client.setProjection("WGS84");
+        if (this.support.getGeoref()) {
+            compressclient.setCellIncrementX(pixelSizeX);
+            compressclient.setCellIncrementY(pixelSizeY);
+            compressclient.setOriginX(geoCoordOrigenX);
+            compressclient.setOriginY(geoCoordOrigenY);
+        }
+
+        compressclient.setCellSizeUnits(1);
+
+        //System.out.println(outfilename+" "+infilename+" "+compresion+" "+sizeWindowX+" "+sizeWindowY+" "+currentRaster.getBandCount());
+        //System.out.println(psX+" "+psY+" "+minX+" "+maxX);
+        if (currentRaster != null) {
+            readerObj = new Reader(currentRaster.getGeoFile(), compressclient,
+                                   ulX, ulY, sizeWindowX, sizeWindowY,
+                                   this.support.getBlockSize());
+        } else if (dataWriter != null) {
+            readerObj = new Reader(dataWriter, compressclient, sizeWindowX,
+                                   sizeWindowY, this.support.getBlockSize(),
+                                   this.nBands);
+        }
+    }
+
+    /**
+     * A partir de un elemento que contiene una propiedad y un valor
+     * lo parsea y asigna el valor a su variable.
+     * @param propValue        elemento con la forma propiedad=valor
+     */
+    private void readProperty(String propValue) {
+        String prop = propValue.substring(0, propValue.indexOf("="));
+
+        if (propValue.startsWith(prop)) {
+            String value = propValue.substring(propValue.indexOf("=") + 1,
+                                               propValue.length());
+
+            if ((value != null) && !value.equals("")) {
+                if (prop.equals("BLOCKSIZE")) {
+                    this.support.setBlockSize(Integer.parseInt(value));
+                }
+
+                if (prop.equals("FORMAT")) {
+                    int select = 0;
+
+                    if (value.equals("UINT8")) {
+                        select = 1;
+                    }
+
+                    if (value.equals("YUV")) {
+                        select = 2;
+                    }
+
+                    if (value.equals("MULTI")) {
+                        select = 3;
+                    }
+
+                    if (value.equals("RGB")) {
+                        select = 4;
+                    }
+
+                    this.support.setFormatDefault(select);
+                }
+
+                if (prop.equals("GEOREF")) {
+                    boolean georef = true;
+
+                    if (value.equals("yes")) {
+                        georef = true;
+                    } else {
+                        georef = false;
+                    }
+
+                    this.support.setWriteGeoref(georef);
+                }
+
+                if (prop.equals("COMPRESSION")) {
+                    this.support.setCompressionDefault(Integer.parseInt(value));
+                }
+            }
+        }
+    }
+
+    /**
+     * Asigna propiedades al driver a partir de un vector de
+     * strings donde cada elemento tiene la estructura de
+     * propiedad=valor.
+     * @param props        Propiedades
+     */
+    public void setProps(String[] props) {
+        for (int iProps = 0; iProps < props.length; iProps++)
+            readProperty(props[iProps]);
+
+        try {
+            if (!consulta) {
+                init();
+            }
+        } catch (EcwException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Realiza la función de compresión a partir de un GeoRasterFile.
+     * @throws IOException
+     */
+    public void fileWrite() throws IOException {
+        if (currentRaster == null) {
+            throw new IOException("No se ha asignado un fichero de entrada.");
+        }
+
+        try {
+            compressclient.NCSEcwCompressOpen(false);
+            compressclient.NCSEcwCompress(readerObj);
+        } catch (EcwException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Realiza la función de compresión a partir de los datos pasados por el cliente.
+     * @throws IOException
+     */
+    public void dataWrite() throws IOException {
+        if (dataWriter == null) {
+            throw new IOException("No se ha obtenido un objeto para la lectura valido.");
+        }
+
+        try {
+            compressclient.NCSEcwCompressOpen(false);
+            compressclient.NCSEcwCompress(readerObj);
+        } catch (EcwException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Cierra el compresor ecw.
+     */
+    public void writeClose() {
+        try {
+            compressclient.NCSEcwCompressClose();
+        } catch (EcwException e) {
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Cancela el compresor ecw.
+     */
+    public void writeCancel() {
+        try {
+        	if(readerObj != null)
+        		readerObj.setWrite(false);
+            compressclient.NCSEcwCompressCancel();
+        } catch (EcwException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Devuelve la configuración de la ventana de dialogo
+     * para las propiedades del driver de escritura de Ecw.
+     * @return XML de configuración del dialogo.
+     */
+    public String getXMLPropertiesDialog() {
+        StringBuffer options = null;
+        options = new StringBuffer();
+        options.append("<window sizex=\"" + this.windowSizeX + "\" sizey=\"" +
+                       this.windowSizeY + "\">");
+        options.append("<panel sizex=\"" + this.panelSizeX + "\" sizey=\"" +
+                       this.panelSizeY + "\" layout=\"" + this.panelLayout +
+                       "\" border=\"yes\">");
+
+        options.append("<panel layout=\"FlowLayout\" position=\"North\" align=\"left\">");
+        options.append("<label>Tamaño bloque:</label>");
+        options.append("<combo ident=\"BLOCKSIZE\" selected=\"" +
+                       this.support.getBlockSize() + "\">");
+
+        for (int i = 0; i < this.support.getBlockSizeList().length; i++)
+            options.append("<elem>" + this.support.getBlockSizeList()[i] +
+                           "</elem>");
+
+        options.append("</combo>");
+        /*options.append("<label>Formato:</label>");
+
+        String sel = null;
+
+        if (this.support.getGeoref()) {
+            sel = new String("yes");
+        } else {
+            sel = new String("no");
+        }
+
+        options.append("<check ident=\"GEOREF\" selected=\"" + sel +
+                       "\" text=\"Georef Si/No\">");
+        options.append("</check>");*/
+        options.append("</panel>");
+
+        options.append("<panel layout=\"FlowLayout\" position=\"South\">");
+        options.append("<slider ident=\"COMPRESSION\" name=\"Nivel de Compresión\" sizex=\"350\" sizey=\"20\">");
+        options.append("<min>" + this.support.getCompressionList()[0] +
+                       "</min>");
+        options.append("<max>" + this.support.getCompressionList()[1] +
+                       "</max>");
+        options.append("<value>" + this.support.compresionDefault + "</value>");
+        options.append("<minorspacing>" + this.support.getCompressionList()[3] +
+                       "</minorspacing>");
+        options.append("<majorspacing>" + this.support.getCompressionList()[4] +
+                       "</majorspacing>");
+        options.append("</slider>");
+        options.append("</panel>");
+
+        options.append("</panel>");
+        options.append("</window>");
+
+        return options.toString();
+    }
+
+    /**
+     * @author Nacho Brodin <brodin_ign@gva.es>
+     *
+     * Opciones de escritura para el Ecw. Estas opciones son utilizadas para el
+     * dialogo de propiedades de Salvar a Raster en Ecw.
+     */
+    class EcwSupportOptions extends WriterSupportOptions {
+        private String[] compresionListValues = { "0", "20", "10", "1", "5" }; //min, max, valor defecto, intervalo pequeño, intervalo grande;
+        private String[] formatList = { "NONE", "UINT8", "YUV", "MULTI", "RGB" };
+        private int formatDefault = 4;
+        private int compresionDefault = 10;
+
+        EcwSupportOptions(String drv) {
+            super(drv);
+        }
+
+        /**
+         * Asigna la lista de valores de compresión
+         * @param compresion        lista de valores
+         */
+        public void setCompressionList(String[] compresion) {
+            this.compresionListValues = compresion;
+        }
+
+        /**
+         * Valor de formato seleccionado en el driver.
+         * 0-NONE, 1-UINT8, 2-YUV, 3-MULTI, 4-RGB
+         * @param i        valor de formato
+         */
+        public void setFormatDefault(int i) {
+            this.formatDefault = i;
+        }
+
+        /**
+         * Asigna el nivel de compresiónpor defecto
+         * @param compress        Nivel de compresión
+         */
+        public void setCompressionDefault(int compress) {
+            this.compresionDefault = compress;
+        }
+
+        /**
+         * Obtiene el tipo de imagen en un formato comprensible por el driver.
+         * @return        Tipo de imagen
+         */
+        public String getStringFormat() {
+            return "COMPRESS_" + formatList[formatDefault];
+        }
+
+        /**
+         * Obtiene la lista de los tipos de formato disponible
+         * @return Lista de tipos de formato
+         */
+        public String[] getFormatList() {
+            return formatList;
+        }
+
+        /**
+         * Obtiene el tipo de formato seleccionado en el driver
+         * @return Tipo de formato seleccionado
+         */
+        public int getFormat() {
+            return formatDefault;
+        }
+
+        /**
+         * Obtiene la compresion seleccionada
+         * @return Compresión seleccionada
+         */
+        public int getCompression() {
+            return compresionDefault;
+        }
+
+        /**
+         * Obtiene la lista de los valores para la generación de la barra de
+         * compresión. Son cinco valores mínimo, máximo, seleccionado,
+         * intervalo pequeño, intervalo grande.
+         * @return lista de valores de compresión
+         */
+        public String[] getCompressionList() {
+            return compresionListValues;
+        }
+    }
+}
+
+
+/**
+ * Clase que se encarga de la lectura de datos que serán escritos. Hereda de JniObject
+ * para asegurar  para asegurar que el interfaz de la libreria tiene acceso a variables
+ * necesarias para la petición de datos cuando vacia el buffer. Implementa ReadCallBack
+ * para obligar escribir el método loadBuffer encargado de servir los datos cuando el
+ * buffer se vacia.
+ *
+ */
+class Reader extends JniObject implements ReadCallBack {
+    private NCSEcwCompressClient	compressclient = null;
+    private int 					width;
+    private int 					height;
+    private int 					ulX;
+    private int 					ulY;
+    private GeoRasterFile 			grf = null;
+    private IDataWriter 			dataWriter = null;
+    private GdalRasterBand 			rband = null;
+    private int 					blockSizeRead = 1; //Alto del bloque leido de la imagen origen 
+    private int 					countLine = 1; //Contador de líneas procesadas en cada lectura de bloque
+    byte[][] 						buf = null;
+    byte[] 							bufband1 = null;
+    byte[] 							bufband2 = null;
+    byte[] 							bufband3 = null;
+    byte[] 							bufband4 = null;
+    byte[] 							bufband5 = null;
+    byte[] 							bufband6 = null;
+    int[] 							dataBuffer = null;
+    private int 					lineasBloqueFinal = 0; //Número de líneas leidas del bloque final
+    private int 					nBlocks = 0; //Número de bloques completos
+    private int 					countBlock = 1; //Contador de bloques completos procesados
+    private int 					nBands = 0;
+    private	boolean					write = true; //Cuando está a true se puede escribir en la imagen de salida. Si está a false el proceso es interrumpido
+
+    /**
+     * Constructor para la escritura de un fichero desde un GeoRasterFile
+     * @param grf        GeorasterFile del fichero de origen
+     * @param compressclient        Objeto que representa al compresor ecw
+     * @param ulx        Coordenada X de la esquina superior izquierda
+     * @param uly        Coordenada Y de la esquina superior izquierda
+     * @param width        Ancho de la imagen
+     * @param height        Alto de la imagen
+     * @param blockSizeRead        Altura del bloque en la lectura
+     */
+    public Reader(GeoRasterFile grf, NCSEcwCompressClient compressclient,
+                  int ulx, int uly, int width, int height, int blockSizeRead) {
+        this.compressclient = compressclient;
+        this.width = width;
+        this.height = height;
+        this.ulX = ulx;
+        this.ulY = uly;
+        this.grf = grf;
+        this.nBands = grf.getBandCount();
+
+        if (blockSizeRead != 0) {
+            this.blockSizeRead = blockSizeRead;
+        }
+
+        nBlocks = (int) (height / this.blockSizeRead);
+        lineasBloqueFinal = height - (nBlocks * this.blockSizeRead);
+
+    }
+
+    /**
+     * Constructor para que los datos sean servidos desde el cliente a través de un
+     * IDataWriter.
+     * @param dataWriter        Objeto servidor de datos del driver
+     * @param compressclient        Objeto que representa al compresor ecw
+     * @param width        Ancho de la imagen
+     * @param height        Alto de la imagen
+     * @param blockSizeRead        Altura del bloque en la lectura
+     * @param nBands        Número de bandas
+     */
+    public Reader(IDataWriter dataWriter, NCSEcwCompressClient compressclient,
+                  int width, int height, int blockSizeRead, int nBands) {
+        this.compressclient = compressclient;
+        this.width = width;
+        this.height = height;
+        this.dataWriter = dataWriter;
+        this.nBands = nBands;
+
+        if (blockSizeRead != 0) {
+            this.blockSizeRead = blockSizeRead;
+        }
+
+        nBlocks = (int) (height / this.blockSizeRead);
+        lineasBloqueFinal = height - (nBlocks * this.blockSizeRead);
+
+    }
+
+    /**
+     * Lectura de bandas desde un GeoRasterFile
+     * @param ulX        Coordenada X de la esquina superior izquierda
+     * @param ulY        Coordenada Y de la esquina superior izquierda
+     * @param width        Ancho de la imagen
+     * @param lineasLeidas        Número de líneas a leer del origen
+     */
+    private void readBandsGRFile(int ulX, int ulY, int width, int lineasLeidas) {
+        if (nBands >= 1) {
+            bufband1 = grf.getWindow(ulX, ulY, width, lineasLeidas, 1);
+        }
+
+        if (nBands >= 2) {
+            bufband2 = grf.getWindow(ulX, ulY, width, lineasLeidas, 2);
+        }
+
+        if (nBands >= 3) {
+            bufband3 = grf.getWindow(ulX, ulY, width, lineasLeidas, 3);
+        }
+
+        if (nBands >= 4) {
+            bufband4 = grf.getWindow(ulX, ulY, width, lineasLeidas, 4);
+        }
+
+        if (nBands >= 5) {
+            bufband5 = grf.getWindow(ulX, ulY, width, lineasLeidas, 5);
+        }
+
+        if (nBands >= 6) {
+            bufband6 = grf.getWindow(ulX, ulY, width, lineasLeidas, 6);
+        }
+    }
+
+    /**
+     * Lectura de bandas llamando al objeto cliente para que nos cargue el buffer
+     * @param width        Ancho de la imagen
+     * @param height        Alto de la imagen
+     */
+    private void readBands(int width, int height) {
+        dataBuffer = dataWriter.readARGBData(width, height, 0);
+    }
+
+    /**
+     * Método obligado por el interfaz y que es llamado desde C cuando el
+     * compresor necesita que le sirvan más datos.
+     */
+    public void loadBuffer() {
+        int lineasLeidas = 0;
+
+        //si se leen bloques completos lineasLeidas es == al tamaño de bloque sino
+        //es que es el último con lo que será del tamaño del bloque final
+        if (countBlock <= nBlocks) {
+            lineasLeidas = blockSizeRead;
+        } else {
+            lineasLeidas = lineasBloqueFinal;
+        }
+
+        //Leemos un bloque nuevo cuando se han procesado todas las líneas del anterior
+        if ((nNextLine % blockSizeRead) == 0) {
+            if (grf != null) {
+                readBandsGRFile(ulX, ulY + nNextLine, width, lineasLeidas);
+            } else if (dataWriter != null) {
+                readBands(width, lineasLeidas);
+            }
+
+            countLine = 0;
+            countBlock++;
+        }
+
+        for (int iBand = 0; iBand < this.nBands; iBand++) {
+            for (int pos = 0; pos < width; pos++) {
+                if (grf != null && write) {
+                    if (iBand == 0) {
+                        compressclient.buffer[pos + (width * iBand)] = bufband1[pos +
+                                                                       (width * countLine)];
+                    }
+
+                    if (iBand == 1) {
+                        compressclient.buffer[pos + (width * iBand)] = bufband2[pos +
+                                                                       (width * countLine)];
+                    }
+
+                    if (iBand == 2) {
+                        compressclient.buffer[pos + (width * iBand)] = bufband3[pos +
+                                                                       (width * countLine)];
+                    }
+
+                    if (iBand == 3) {
+                        compressclient.buffer[pos + (width * iBand)] = bufband4[pos +
+                                                                       (width * countLine)];
+                    }
+
+                    if (iBand == 4) {
+                        compressclient.buffer[pos + (width * iBand)] = bufband5[pos +
+                                                                       (width * countLine)];
+                    }
+
+                    if (iBand == 5) {
+                        compressclient.buffer[pos + (width * iBand)] = bufband6[pos +
+                                                                       (width * countLine)];
+                    }
+                } else {
+                    if (iBand == 0) {
+                        compressclient.buffer[pos + (width * iBand)] = (byte) ((dataBuffer[pos +
+                                                                       (width * countLine)] &
+                                                                       0xff0000) >> 16);
+                    }
+
+                    if (iBand == 1) {
+                        compressclient.buffer[pos + (width * iBand)] = (byte) ((dataBuffer[pos +
+                                                                       (width * countLine)] &
+                                                                       0xff00) >> 8);
+                    }
+
+                    if (iBand == 2) {
+                        compressclient.buffer[pos + (width * iBand)] = (byte) (dataBuffer[pos +
+                                                                       (width * countLine)] &
+                                                                       0xff);
+                    }
+                }
+
+                if ((pos == (width - 1)) && (iBand == (this.nBands - 1))) {
+                    countLine++;
+                }
+            }
+        }
+    }
+
+    /**
+     * Método obligado por el interfaz y que es llamado desde C cuando el
+     * compresor actualiza el porcentaje de compresión
+     */
+    public void updatePercent() {
+        System.out.println(compressclient.getPercent() + "%");
+    }
+    
+    /**
+     * Obtiene el valor a la variable write que estará a true cuando se está escribiendo
+     *  o puede escribirse la imagen de salida. El cancelar la operación de escritura
+     * pondrá esta variable a false deteniendose la escritura y cerrandose el dataset
+     * de salida. 
+     * @return True si puede escribirse y false si no puede
+     */
+    public boolean isWrite() {
+		return write;
+	}
+
+    /**
+     * Asigna el valor a la variable write que estará a true cuando se está escribiendo
+     *  o puede escribirse la imagen de salida. El cancelar la operación de escritura
+     * pondrá esta variable a false deteniendose la escritura y cerrandose el dataset
+     * de salida. 
+     * @param write Variable booleana. True si puede escribirse y false si no puede
+     */
+	public void setWrite(boolean write) {
+		this.write = write;
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/ErmapperWriter.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DgnFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DgnFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DgnFile.java	(revision 10281)
@@ -0,0 +1,67 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.IObjList;
+
+
+/**
+ * Clase de soporte para ficheros .dgn de MicroStation
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ * TODO extension .dgn sin implementar
+ */
+public class DgnFile extends GeoFile {
+    private String name;
+
+    public DgnFile(IProjection proj, String name) {
+        super(proj, name);
+    }
+
+    public GeoFile load() {
+        return this;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.io.GeoFile#getObjects()
+     */
+    public IObjList getObjects() {
+        // TODO Apéndice de método generado automáticamente
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.GeoFile#close()
+     */
+    public void close() {
+        // TODO Auto-generated method stub
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/DgnFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoFile.java	(revision 10281)
@@ -0,0 +1,178 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.Date;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Projected;
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+
+
+/**
+ * Ancestro de todos los formatos geográficos
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public abstract class GeoFile implements Projected, Extent.Has {
+    IProjection proj = null;
+    /**
+     * Extent completo del raster. Este contiene las coordenadas reales tanto
+     * para un raster rotado como sin rotar. Este extent coincide con requestExtent
+     * cuando el raster no tiene rotación. 
+     */
+    protected Extent extent = null;
+    /**
+     * Este es el extent sobre el que se ajusta una petición para que esta no exceda el 
+     * extent máximo del raster. Para un raster sin rotar será igual al extent
+     * pero para un raster rotado será igual al extent del raster como si no 
+     * tuviera rotación. Esto ha de ser así ya que la rotación solo se hace sobre la
+     * vista y las peticiones han de hacerse en coordenadas de la imagen sin shearing
+     * aplicado.
+     */
+    protected Extent requestExtent = null;
+    /**
+     * Esto corresponde a la transformación del extent de la imagen. Se calcula a partir del extent
+     * guardado en el fichero .rmf asociado a la imagen.  En caso de que no exista este fichero no habrá
+     * transformación
+     */
+    protected AffineTransform	transformRMF = null;
+    /**
+     * Esto corresponde a la transformación del extent de la imagen. Se calcula a partir del extent
+     * guardado en el fichero .tfw asociado a la imagen o en la cabecera de la misma.
+     */
+    protected AffineTransform	transformTFW = null;
+    
+    protected boolean			rmfExists = false;
+    long fileSize = 0;
+    protected long bytesReaded = 0;
+    protected long lineCnt = 0;
+    String name;
+
+    public GeoFile() {
+    }
+
+    public GeoFile(IProjection p, String n) {
+        proj = p;
+        name = n;
+
+        if (name != null) {
+            name = DataSource.normalize(name);
+        }
+        extent = new Extent();
+      	transformRMF = new AffineTransform();
+    	transformTFW = new AffineTransform();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String n) {
+        name = n;
+    }
+
+    public long getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(long sz) {
+        fileSize = sz;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    abstract public void reProject(ICoordTrans rp);
+
+    /**
+     * Extent completo del raster. Este contiene las coordenadas reales tanto
+     * para un raster rotado como sin rotar. Este extent coincide con requestExtent
+     * cuando el raster no tiene rotación.
+     * @return Extent 
+     */
+    public Extent getExtent() {
+        return extent;
+    }
+    
+    /**
+     * Este es el extent sobre el que se ajusta una petición para que esta no exceda el 
+     * extent máximo del raster. Para un raster sin rotar será igual al extent
+     * pero para un raster rotado será igual al extent del raster como si no 
+     * tuviera rotación. Esto ha de ser así ya que la rotación solo se hace sobre la
+     * vista y las peticiones han de hacerse en coordenadas de la imagen sin shearing
+     * aplicado.
+     * @return Extent
+     */
+    public Extent getExtentForRequest() {
+        return requestExtent;
+    }
+
+    abstract public GeoFile load();
+
+    abstract public void close();
+
+    abstract public IObjList getObjects();
+
+    /**
+     * Filtra espacios en blanco. Deja solo uno por
+     */
+    public static String filterWS(String buf) {
+        boolean lastCharWhite = false;
+        String str = "";
+        buf = buf.trim();
+
+        for (int i = 0; i < buf.length(); i++) {
+            char c = buf.charAt(i);
+
+            if (Character.isWhitespace(c)) {
+                if (lastCharWhite) {
+                    continue;
+                }
+
+                lastCharWhite = true;
+                c = ' ';
+            } else {
+                lastCharWhite = false;
+            }
+
+            str += c;
+        }
+
+        return str;
+    }
+
+    protected long getTime() {
+        return (new Date()).getTime();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/GeoFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/FileFolder.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/FileFolder.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/FileFolder.java	(revision 10281)
@@ -0,0 +1,51 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.io;
+
+
+/**
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+abstract public class FileFolder {
+    static String[] supportedFolders = { "zip://" };
+
+    abstract public int count();
+
+    /**
+     * Analiza un nombre de fichero en formato zip://zipname.zip?file.ext
+     * @param urlName
+     */
+    public static boolean isUrl(String name) {
+        String str = name.substring(0, 6);
+        str.toLowerCase();
+
+        for (int i = 0; i < supportedFolders.length; i++)
+            if (str.compareTo(supportedFolders[i]) == 0) {
+                return true;
+            }
+
+        return false;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io/FileFolder.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/io
___________________________________________________________________
Added: svn:ignore
   + *.swp
*.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRect.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRect.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRect.java	(revision 10281)
@@ -0,0 +1,140 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+
+
+public class PxRect extends PxObj implements IPoint, ISize, Colored {
+    private int px = 0;
+    private int py = 0;
+    private int pw = 0;
+    private int ph = 0;
+    private Color pc;
+    private Color filColor = null;
+
+    public PxRect(IPoint p, ISize s, Color color, Color fc) {
+        x(p.x());
+        y(p.y());
+        w(s.w());
+        h(s.h());
+        c(color);
+        fillColor(fc);
+        extent = new Extent(x(), y(), x() + w(), y() + h());
+    }
+
+    public PxRect(int x, int y, int w, int h, Color color, Color fc) {
+        x(x);
+        y(y);
+        w(w);
+        h(h);
+        c(color);
+        fillColor(fc);
+        extent = new Extent(x(), y(), x() + w(), y() + h());
+    }
+
+    public int x() {
+        return px;
+    }
+
+    public int x(int x) {
+        px = x;
+
+        return px;
+    }
+
+    public int y() {
+        return py;
+    }
+
+    public int y(int y) {
+        py = y;
+
+        return py;
+    }
+
+    public int w() {
+        return pw;
+    }
+
+    public int w(int w) {
+        pw = w;
+
+        return pw;
+    }
+
+    public int h() {
+        return ph;
+    }
+
+    public int h(int h) {
+        ph = h;
+
+        return ph;
+    }
+
+    public Color c() {
+        return pc;
+    }
+
+    public Color c(Color color) {
+        pc = color;
+
+        return pc;
+    }
+
+    public Color fillColor() {
+        return filColor;
+    }
+
+    public Color fillColor(Color c) {
+        filColor = c;
+
+        return filColor;
+    }
+
+    /*        public void draw(Graphics2D g) {
+                    draw(g, g.getTransform(), null);
+            }
+
+            public void draw(Graphics2D g, AffineTransform mat, Extent sz) {
+    */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        AffineTransform msave = g.getTransform();
+        g.setTransform(vp.mat);
+
+        if (fillColor() != null) {
+            g.setColor(fillColor());
+            g.fillRect(x(), y(), w(), h());
+        }
+
+        g.setColor(c());
+        g.drawRect(x(), y(), w(), h());
+        g.setTransform(msave);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRect.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Paleta.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Paleta.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Paleta.java	(revision 10281)
@@ -0,0 +1,118 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.io.GeoFile;
+
+import java.awt.Color;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+
+/**
+ * Paleta de color (en principio para MDT
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Paleta {
+    public String fName = null;
+    String name = null;
+    public Color[] color = null;
+    boolean enPaleta = false;
+
+    /**
+     * Lee una paleta desde un .lut de ArcView
+     *
+     * @param fName
+     */
+    public void loadLut(String fName) throws IOException {
+        BufferedReader fi;
+        String buf;
+        int l = 0;
+
+        if (fName == null) {
+            fName = "C:/ESRI/AV_GIS30/ARCVIEW/averm/LUT/elevation.lut";
+        }
+
+        this.fName = fName;
+        fi = new BufferedReader(new FileReader(fName));
+
+        while ((buf = fi.readLine()) != null) {
+            //System.out.println(buf);
+            l++;
+            parseLine(buf);
+        }
+
+        fi.close();
+
+        //setColorFromLut("	  0     0 19200 65280");
+    }
+
+    private void parseLine(String buf) {
+        //LookUpTable Begin
+        //	Version         = "1.0"
+        //	Name            = "elevation"
+        //	Description     = "one of several std color schemes for color coding elevation data"
+        //	NrEntries       = 256
+        //	LUT             = {
+        //	  0     0 19200 65280
+        // ...
+        //	}
+        //LookUpTable End
+        buf = GeoFile.filterWS(buf);
+
+        String[] datos = buf.split(" ");
+        System.out.println(buf);
+
+        if (enPaleta) {
+            if (buf.length() > 4) {
+                int nr = Integer.parseInt(datos[0].trim());
+                int r = Integer.parseInt(datos[1].trim());
+                int g = Integer.parseInt(datos[2].trim());
+                int b = Integer.parseInt(datos[3].trim());
+                setColorFromLut(nr, r, g, b);
+            } else {
+                enPaleta = false;
+            }
+        } else if (buf.length() > 4) {
+            if (buf.substring(0, 3).compareTo("LUT") == 0) {
+                enPaleta = true;
+            } else if (buf.substring(0, 3).compareTo("NrE") == 0) {
+                int numC = Integer.parseInt(datos[2].trim());
+                color = new Color[numC];
+                System.out.println("hay " + numC + " colores.");
+            }
+        }
+    }
+
+    private void setColorFromLut(int nr, int r, int g, int b) {
+        //"	  0     0 19200 65280"
+        color[nr] = new Color(r / 256, g / 256, b / 256);
+
+        //System.out.println(nr+":["+l.substring(5,10)+","+l.substring(11,16)+","+l.substring(17)+"]");	 
+        System.out.println(nr + ":" + color[nr]);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Paleta.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Extent.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Extent.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Extent.java	(revision 10281)
@@ -0,0 +1,235 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+import java.text.DecimalFormat;
+
+/**
+ *	Clase que getiona el extent de una imagen
+ *	
+ *  @author Luis W.Sevilla (sevilla_lui@gva.es)
+ */
+public class Extent {
+    Point2D min = null;
+    Point2D max = null;
+
+    /**
+     * Constructor sin parámetros
+     */
+    public Extent() {
+        min = new Point2D.Double(999999999.0, 999999999.0);
+        max = new Point2D.Double(-999999999.0, -999999999.0);
+    }
+
+    /**
+     * Constructor 
+     * @param pt1	punto que representa la esquina superior izquierda
+     * @param pt2	punto que representa la esquina inferior derecha
+     */
+    public Extent(Point2D pt1, Point2D pt2) {
+        newExtent(pt1.getX(), pt1.getY(), pt2.getX(), pt2.getY());
+    }
+
+    /**
+     * Contructor
+     * @param x1 punto que representa la coordenada X de la esquina superior izquierda
+     * @param y1 punto que representa la coordenada Y de la esquina superior izquierda
+     * @param x2 punto que representa la coordenada X de la esquina inferior derecha
+     * @param y2 punto que representa la coordenada Y de la esquina inferior derecha
+     */
+    public Extent(double x1, double y1, double x2, double y2) {
+        newExtent(x1, y1, x2, y2);
+    }
+
+    /**
+     * Constructor
+     * @param r	Rectangulo 2D
+     */
+    public Extent(Rectangle2D r) {
+        newExtent(r.getX(), r.getY(), r.getX() + r.getWidth(),
+                  r.getY() + r.getHeight());
+    }
+
+    /**
+     * Constructor de copia
+     * @param ext	Objeto Extent
+     */
+    public Extent(Extent ext) {
+        newExtent(ext.minX(), ext.minY(), ext.maxX(), ext.maxY());
+    }
+
+    /**
+     * Crea un objeto extent identico y lo retorna
+     * @return Objeto extent
+     */
+    public Object clone() {
+        Extent e = (Extent) clone();
+        e.min = (Point2D) min.clone();
+        e.max = (Point2D) max.clone();
+
+        return e;
+    }
+
+    private void newExtent(double x1, double y1, double x2, double y2) {
+        double[] e = { x1, y1, x2, y2 };
+        min = new Point2D.Double(Math.min(x1, x2), Math.min(y1, y2));
+        max = new Point2D.Double(Math.max(x1, x2), Math.max(y1, y2));
+    }
+
+    /**
+     * Obtiene la coordenada X mínima
+     * @return valor de la coordenada X mínima
+     */
+    public double minX() {
+        return min.getX();
+    }
+
+    /**
+     * Obtiene la coordenada Y mínima
+     * @return valor de la coordenada X mínima
+     */
+    public double minY() {
+        return min.getY();
+    }
+
+    /**
+     * Obtiene la coordenada X máxima
+     * @return valor de la coordenada X máxima
+     */
+    public double maxX() {
+        return max.getX();
+    }
+
+    /**
+     * Obtiene la coordenada Y máxima
+     * @return valor de la coordenada Y máxima
+     */
+    public double maxY() {
+        return max.getY();
+    }
+    
+    /**
+     * Obtiene el punto mínimo
+     * @return mínimo
+     */
+    public Point2D getMin() {
+        return min;
+    }
+
+    /**
+     * Obtiene el punto máximo
+     * @return máximo
+     */
+    public Point2D getMax() {
+        return max;
+    }
+
+    public boolean isAt(Point2D pt) {
+        if (pt.getX() < minX()) {
+            return false;
+        }
+
+        if (pt.getX() > maxX()) {
+            return false;
+        }
+
+        if (pt.getY() < minY()) {
+            return false;
+        }
+
+        if (pt.getY() > maxY()) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public double width() {
+        return Math.abs(maxX() - minX());
+    }
+
+    public double height() {
+        return Math.abs(maxY() - minY());
+    }
+
+    /**
+     * Verifica un punto, y modifica el extent si no está incluido
+     */
+    public void add(Point2D pt) {
+        if (pt == null) {
+            return;
+        }
+
+        min.setLocation(Math.min(pt.getX(), minX()), Math.min(pt.getY(), minY()));
+        max.setLocation(Math.max(pt.getX(), maxX()), Math.max(pt.getY(), maxY()));
+    }
+
+    public void add(Extent ext) {
+        if (ext == null) {
+            return;
+        }
+
+        min.setLocation(Math.min(ext.minX(), minX()),
+                        Math.min(ext.minY(), minY()));
+        max.setLocation(Math.max(ext.maxX(), maxX()),
+                        Math.max(ext.maxY(), maxY()));
+    }
+
+    /**
+     * Obtiene la escala
+     * @param width	Ancho
+     * @param height	Alto
+     * @return
+     */
+    public double[] getScale(int width, int height) {
+        return getScale((double) width, (double) height);
+    }
+
+    public double[] getScale(double width, double height) {
+        double[] scale = new double[2];
+        scale[0] = ((float) width) / width();
+        scale[1] = ((float) height) / height();
+
+        return scale;
+    }
+
+    public Rectangle2D toRectangle2D() {
+        return new Rectangle2D.Double(minX(), minY(), width(), height());
+    }
+
+    public String toString() {
+        DecimalFormat format = new DecimalFormat("####.000");
+
+        return "Extent: (" + format.format(minX()) + "," +
+               format.format(minY()) + "), (" + format.format(maxX()) + "," +
+               format.format(maxY()) + ")";
+    }
+
+    public interface Has {
+        public Extent getExtent();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Extent.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRaster.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRaster.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRaster.java	(revision 10281)
@@ -0,0 +1,1580 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.awt.image.ImageObserver;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Vector;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+import org.cresques.filter.bands.RasterByteToImageFilter;
+import org.cresques.filter.bands.RasterDoubleToImageFilter;
+import org.cresques.filter.bands.RasterFloatToImageFilter;
+import org.cresques.filter.bands.RasterIntToImageFilter;
+import org.cresques.filter.bands.RasterShortToImageFilter;
+import org.cresques.filter.bands.RasterToImageFilter;
+import org.cresques.filter.enhancement.TransparencyRange;
+import org.cresques.geo.Projected;
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.EcwFile;
+import org.cresques.io.GdalFile;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.io.datastruct.Statistic;
+import org.cresques.io.exceptions.SupersamplingNotSupportedException;
+
+
+/**
+ *
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PxRaster extends PxObj implements Projected {
+    protected GeoRasterFile[] geoFile = null;
+    protected ImageObserver component = null;
+    Vector pts = null;
+
+    // Soporte para n bandas, visibles de 3 en 3, en ficheros separados
+    //protected GeoRasterFile [] colorBand = null;
+    protected int rBand = 1;
+
+    // Soporte para n bandas, visibles de 3 en 3, en ficheros separados
+    //protected GeoRasterFile [] colorBand = null;
+    protected int gBand = 2;
+
+    // Soporte para n bandas, visibles de 3 en 3, en ficheros separados
+    //protected GeoRasterFile [] colorBand = null;
+    protected int bBand = 3;
+    public Statistic stats = new Statistic();
+    int transparente = 0x10ffff80;
+    String vName = null;
+    protected boolean pintaMarco = false; //true;
+    IProjection proj = null;
+    protected Extent extentOrig = null;
+    ICoordTrans rp = null;
+    public RasterFilterStack filterStack = new RasterFilterStack(stats);
+    private BandSwitch bandSwitch = new BandSwitch();
+    private boolean firstPxRaster = true;
+    private final double percentFilterInit = 0.02;
+    private RasterFilterStackManager stackManager = null;
+    private Image geoImage = null;
+    private ViewPortData lastViewPort = null;
+
+    /**
+     * Variable usada por el draw para calcular el número de pixeles a leer de un
+     * raster rotado. 
+     */
+    private double[] adjustedRotedExtent = null;
+    
+    /**
+     * Constructor.
+     * @param component
+     */
+    public PxRaster(ImageObserver component) {
+        this.component = component;
+    }
+
+    /**
+     * Contructor para un solo fichero
+     * @param proj        Proyeccción
+     * @param fname Nombre del fichero
+     * @param component
+     */
+    public PxRaster(IProjection proj, String fname, ImageObserver component) {
+        geoFile = new GeoRasterFile[1];
+        geoFile[0] = GeoRasterFile.openFile(proj, fname); //loadECW(fname);
+        geoFile[0].setUpdatable((Component) component);
+        this.proj = proj;
+        this.component = component;
+        setExtent(geoFile[0].getExtent());
+        setExtentForRequest(geoFile[0].getExtentForRequest());
+        geoFile[0].setView(geoFile[0].getExtent());
+        extentOrig = extent;
+        bandSwitch.addFile(geoFile[0]);
+
+        if (geoFile[0].getBandCount() >= 3) {
+            setBand(GeoRasterFile.RED_BAND, 0);
+            setBand(GeoRasterFile.GREEN_BAND, 1);
+            setBand(GeoRasterFile.BLUE_BAND, 2);
+        } else if (geoFile[0].getBandCount() == 2) {
+            setBand(GeoRasterFile.RED_BAND, 0);
+            setBand(GeoRasterFile.GREEN_BAND, 1);
+            setBand(GeoRasterFile.BLUE_BAND, 1);
+        } else if (geoFile[0].getBandCount() == 1) {
+            //setBand(GeoRasterFile.RED_BAND|GeoRasterFile.GREEN_BAND|GeoRasterFile.BLUE_BAND, 0);
+            setBand(GeoRasterFile.RED_BAND, 0);
+            setBand(GeoRasterFile.GREEN_BAND, 0);
+            setBand(GeoRasterFile.BLUE_BAND, 0);
+        }
+    }
+
+    /**
+     * Constructor para multiples ficheros
+     */
+    public PxRaster(IProjection proj, String[] fnames, ImageObserver component) {
+        this.proj = proj;
+        this.component = component;
+        geoFile = new GeoRasterFile[fnames.length];
+
+        for (int i = 0; i < geoFile.length; i++) {
+            geoFile[i] = GeoRasterFile.openFile(proj, fnames[i]); //loadECW(fname);
+            geoFile[i].setUpdatable((Component) component);
+            setExtent(geoFile[i].getExtent());
+            setExtentForRequest(geoFile[i].getExtentForRequest());
+            geoFile[i].setView(geoFile[i].getExtent());
+            bandSwitch.addFile(geoFile[i]);
+        }
+
+        //geoFile = geoFile[0];
+        extentOrig = extent;
+
+        if ((fnames.length >= 3) || (geoFile[0].getBandCount() > 2)) {
+            setBand(GeoRasterFile.RED_BAND, 0);
+            setBand(GeoRasterFile.GREEN_BAND, 1);
+            setBand(GeoRasterFile.BLUE_BAND, 2);
+        } else {
+            setBand(GeoRasterFile.RED_BAND | GeoRasterFile.GREEN_BAND |
+                    GeoRasterFile.BLUE_BAND, 0);
+        }
+    }
+
+    public PxRaster(GeoRasterFile eFile, ImageObserver component, Extent view) {
+        geoFile = new GeoRasterFile[1];
+        geoFile[0] = eFile; //loadECW(fname);
+        geoFile[0].setUpdatable((Component) component);
+        setProjection(geoFile[0].getProjection());
+        this.component = component;
+
+        setExtent(geoFile[0].getExtent());
+        setExtentForRequest(geoFile[0].getExtentForRequest());
+        if(view != null){
+	        geoFile[0].setView(view); //geoFile.getExtent());
+	        extentOrig = extent;
+	        bandSwitch.addFile(eFile);
+	
+	        if (geoFile[0].getBandCount() >= 3) {
+	            setBand(GeoRasterFile.RED_BAND, 0);
+	            setBand(GeoRasterFile.GREEN_BAND, 1);
+	            setBand(GeoRasterFile.BLUE_BAND, 2);
+	        } else if (geoFile[0].getBandCount() == 2) {
+	            setBand(GeoRasterFile.RED_BAND, 0);
+	            setBand(GeoRasterFile.GREEN_BAND, 1);
+	            setBand(GeoRasterFile.BLUE_BAND, 1);
+	        } else if (geoFile[0].getBandCount() == 1) {
+	            //setBand(GeoRasterFile.RED_BAND|GeoRasterFile.GREEN_BAND|GeoRasterFile.BLUE_BAND, 0);
+	            setBand(GeoRasterFile.RED_BAND, 0);
+	            setBand(GeoRasterFile.GREEN_BAND, 0);
+	            setBand(GeoRasterFile.BLUE_BAND, 0);
+	        }
+        }
+    }
+
+    /**
+     * Añade un GeoRasterFile al PxRaster
+     * @param fileName Nombre del fichero
+     */
+    public GeoRasterFile addFile(String fileName) {
+        if (geoFile != null) {
+            GeoRasterFile[] listFiles = new GeoRasterFile[geoFile.length + 1];
+
+            for (int i = 0; i < geoFile.length; i++)
+                listFiles[i] = geoFile[i];
+
+            listFiles[geoFile.length] = GeoRasterFile.openFile(proj, fileName);
+            listFiles[geoFile.length].setUpdatable((Component) component);
+            setExtent(listFiles[geoFile.length].getExtent());
+            setExtentForRequest(listFiles[geoFile.length].getExtentForRequest());
+            listFiles[geoFile.length].setView(listFiles[geoFile.length].getExtent());
+            bandSwitch.addFile(listFiles[geoFile.length]);
+            geoFile = listFiles;
+            return listFiles[geoFile.length - 1];
+        } else {
+            System.err.println("PxRaster.addFile(): Imagen no cargada.");
+            return null;
+        }
+    }
+
+    /**
+     * Devuelve el Extent de un fichero son necesidad de añadirlo
+     * al PxRaster
+     * @param fileName
+     * @return
+     */
+    public Extent testExtentFile(String fileName) {
+        GeoRasterFile grf = GeoRasterFile.openFile(proj, fileName);
+
+        return grf.getExtent();
+    }
+
+    /**
+     * Obtiene el valor del pixel del Image en la posición wcx,wcy
+     * @param wcx Posición x
+     * @param wcx Posición y
+     * @return valor de pixel
+     */
+    public int[] getPixel(double wcx, double wcy) {
+        if (geoImage != null) {
+            int ptox = 0;
+            int ptoy = 0;
+
+            try {
+                //Extent de la imagen completa
+                Extent extOrtofoto = geoFile[0].getExtent();
+
+                //Variables q definen el extent del objeto image
+                double minx = 0;
+
+                //Variables q definen el extent del objeto image
+                double miny = 0;
+
+                //Variables q definen el extent del objeto image
+                double maxx = 0;
+
+                //Variables q definen el extent del objeto image
+                double maxy = 0;
+
+                if (lastViewPort.getExtent().getMin().getX() < extOrtofoto.minX()) {
+                    minx = extOrtofoto.minX();
+                } else {
+                    minx = lastViewPort.getExtent().getMin().getX();
+                }
+
+                if (lastViewPort.getExtent().getMax().getX() > extOrtofoto.maxX()) {
+                    maxx = extOrtofoto.maxX();
+                } else {
+                    maxx = lastViewPort.getExtent().getMax().getX();
+                }
+
+                if (lastViewPort.getExtent().getMin().getY() < extOrtofoto.minY()) {
+                    miny = extOrtofoto.minY();
+                } else {
+                    miny = lastViewPort.getExtent().getMin().getY();
+                }
+
+                if (lastViewPort.getExtent().getMax().getY() > extOrtofoto.maxY()) {
+                    maxy = extOrtofoto.maxY();
+                } else {
+                    maxy = lastViewPort.getExtent().getMax().getY();
+                }
+
+                //Comprobamos que estemos dentro del extent del Image
+                if ((wcx < minx) || (wcx > maxx) || (wcy < miny) ||
+                        (wcy > maxy)) {
+                    int[] res = { -1, -1, -1, -1 };
+
+                    return res;
+                }
+
+                //Pasamos a coordenadas del Image las coordenadas del mundo real
+                int w = ((BufferedImage) geoImage).getWidth();
+                int h = ((BufferedImage) geoImage).getHeight();
+                double wcw = maxx - minx;
+                double wch = maxy - miny;
+                ptox = (int) (((wcx - minx) * w) / wcw);
+                ptoy = (int) (((wcy - miny) * h) / wch);
+
+                //Obtenemos el pto seleccionado del Image y extraemos el RGB
+                int px = ((BufferedImage) geoImage).getRGB(ptox, h - ptoy);
+                int[] values = new int[4];
+                values[0] = ((px & 0xff000000) >> 24);
+                values[1] = ((px & 0x00ff0000) >> 16);
+                values[2] = ((px & 0x0000ff00) >> 8);
+                values[3] = (px & 0x000000ff);
+
+                return values;
+            } catch (ArrayIndexOutOfBoundsException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Elimina un GeoRasterFile al PxRaster
+     * @param finaName Nombre del fichero
+     */
+    public GeoRasterFile delFile(String fileName) {
+        if (geoFile != null) {
+            Vector grfTemp = new Vector();
+
+            GeoRasterFile grfDelete = null;
+            
+            for (int i = 0; i < geoFile.length; i++) {
+                if (!fileName.endsWith(geoFile[i].getName())) {
+                    grfTemp.add(geoFile[i]);
+                }else
+                	grfDelete = geoFile[i];
+            }
+
+            GeoRasterFile[] listFiles = new GeoRasterFile[grfTemp.size()];
+
+            for (int i = 0; i < listFiles.length; i++)
+                listFiles[i] = (GeoRasterFile) grfTemp.get(i);
+
+            //Lo eliminamos del bandSwitch
+            for (int i = 0; i < geoFile.length; i++) {
+                if (fileName.endsWith(geoFile[i].getName())) {
+                    bandSwitch.removeFile(geoFile[i]);
+                }
+            }
+
+            geoFile = listFiles;
+            return grfDelete;
+        } else {
+            System.err.println("PxRaster.addFile(): Imagen no cargada.");
+            return null;
+        }
+    }
+
+    /**
+     * Obtiene el tamaño de bloque
+     * @return
+     */
+    public int getBlockSize() {
+        return geoFile[0].getBlockSize();
+    }
+
+    /**
+     *
+     * @return
+     */
+    public GeoRasterFile[] getGeoFiles() {
+        return geoFile;
+    }
+
+    public GeoRasterFile getGeoFile() {
+        return geoFile[0];
+    }
+
+    /**
+     * Obtiene el número de bandas del PxRaster. Si ls longitud de geoFile es 1 quiere
+     * decir que hay un solo fichero que contiene todas las bandas. Si hay más de un geoFile
+     * el número de bandas será la suma de todas las bandas de las imágenes que forman
+     * el geoFile
+     * @return Número de bandas
+     */
+    public int getBandCount() {
+        return bandSwitch.getBandCount();
+    }
+
+    /**
+     * Obtiene el tipo de dato del primer GeoRasterFile
+     * @return
+     */
+    public int getDataType() {
+        if (geoFile != null) {
+            return geoFile[0].getDataType();
+        } else {
+            System.err.println("PxRaster.getDataType(): Imagen no cargada.");
+        }
+
+        return 0;
+    }
+
+    /**
+     * Obtiene el vector de GeoRasterFile que componen el PxRaster
+     * @return vector GeoRasterFile
+     */
+    public GeoRasterFile[] getFiles() {
+        return geoFile;
+    }
+
+    /**
+     * Asocia un colorBand al rojo, verde o azul.
+     * @param flag cual (o cuales) de las bandas.
+     * @param nBand        que colorBand
+     */
+    public void setBand(int flag, int nBand) {
+        bandSwitch.setBand(flag, nBand);
+    }
+
+    /**
+     * Obtiene la posición del fichero asignado a la banda
+     * que se le pasa por parámetro
+     * @return
+     */
+    public int getPosFile(int flag) {
+        if (flag == GeoRasterFile.RED_BAND) {
+            return bandSwitch.getBandR().getPos();
+        } else if (flag == GeoRasterFile.GREEN_BAND) {
+            return bandSwitch.getBandG().getPos();
+        } else if (flag == GeoRasterFile.BLUE_BAND) {
+            return bandSwitch.getBandB().getPos();
+        } else {
+            return -1;
+        }
+    }
+
+    /**
+     * Devuelve el colorBand activo en la banda especificada.
+     * @param flag banda.
+     */
+    public int getBand(int flag) {
+        if (flag == GeoRasterFile.RED_BAND) {
+            return bandSwitch.getBandR().getBand();
+        } else if (flag == GeoRasterFile.GREEN_BAND) {
+            return bandSwitch.getBandG().getBand();
+        } else if (flag == GeoRasterFile.BLUE_BAND) {
+            return bandSwitch.getBandB().getBand();
+        } else {
+            return -1;
+        }
+    }
+
+    /**
+     * @param pm
+     */
+    public void setDrawBorder(boolean pm) {
+        pintaMarco = pm;
+    }
+
+    /**
+     * Obtiene el nombre del fichero si solo hay uno
+     * @return Nombre del fichero
+     */
+    public String getFName() {
+        return geoFile[0].getName();
+    }
+
+    /**
+     * Obtiene el nombre del fichero GeoRasterFile seleccionado
+     * @param i        posición del GeoRasterFile
+     * @return Nombre del fichero
+     */
+    public String getFName(int i) {
+        if (geoFile != null) {
+            if (i < geoFile.length) {
+                return geoFile[i].getName();
+            } else {
+                return null;
+            }
+        } else {
+            System.err.println("PxRaster.getFName(): Imagen no cargada.");
+
+            return null;
+        }
+    }
+
+    /**
+     * Obtiene una lista de Strings con los nombres de todos los ficheros
+     * que tiene el PxRaster
+     * @return Lista de nombres
+     */
+    public String[] getLisName() {
+        if (geoFile != null) {
+            String[] list = new String[geoFile.length];
+
+            for (int i = 0; i < geoFile.length; i++)
+                list[i] = geoFile[i].getName();
+
+            return list;
+        } else {
+            System.err.println("PxRaster.getListName(): Imagen no cargada.");
+
+            return null;
+        }
+    }
+
+    /**
+     * Devuelve la anchura total del fichero, en pixeles.
+     * @return ancho en pixeles
+     */
+    public int getFWidth() {
+        if (geoFile != null) {
+            return geoFile[0].getWidth();
+        } else {
+            System.err.println("PxRaster.getFWidth(): Imagen no cargada.");
+
+            return 0;
+        }
+    }
+
+    /**
+     * Devuelve la anchura total del fichero, en pixeles.
+     * @return ancho en pixeles
+     */
+    public int getFWidth(int i) {
+        if (i < geoFile.length) {
+            return geoFile[i].getWidth();
+        } else {
+            System.err.println("PxRaster.getFWidth(): Imagen no cargada.");
+
+            return 0;
+        }
+    }
+
+    /**
+     * Devuelve la altura total del fichero, en pixeles.
+     * @return alto en pixeles
+     */
+    public int getFHeight() {
+        if (geoFile != null) {
+            return geoFile[0].getHeight();
+        } else {
+            System.err.println("PxRaster.getFHeight(): Imagen no cargada.");
+
+            return 0;
+        }
+    }
+
+    /**
+     * Devuelve la altura total del fichero, en pixeles.
+     * @return alto en pixeles
+     */
+    public int getFHeight(int i) {
+        if (i < geoFile.length) {
+            return geoFile[i].getHeight();
+        } else {
+            System.err.println("PxRaster.getFHeight(): Imagen no cargada.");
+
+            return 0;
+        }
+    }
+
+    /**
+     * Devuelve el número de ficheros que componen el PxRaster
+     * @return Número de ficheros
+     */
+    public int nFiles() {
+        if (geoFile != null) {
+            return geoFile.length;
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * Activa o desactiva la transparencia de los ficheros que forman el PxRaster
+     * @param t true o false para activar o desactivar transparencia
+     */
+    public void setTransparency(boolean t) {
+        if (geoFile != null) {
+            for (int i = 0; i < geoFile.length; i++) {
+                geoFile[i].setTransparency(t);
+            }
+        } else {
+            System.err.println("PxRaster.setTransparency(): Imagen no cargada.");
+
+            return;
+        }
+    }
+
+    /**
+     * Pone la transparencia de los ficheros de la imagen a un valor
+     * @param t Valor para la transparencia
+     */
+    public void setTransparency(int t) {
+        if (geoFile != null) {
+            for (int i = 0; i < geoFile.length; i++) {
+                geoFile[i].setTransparency(t);
+            }
+        } else {
+            System.err.println("PxRaster.setTransparency(): Imagen no cargada.");
+
+            return;
+        }
+    }
+
+    /**
+     * Obtiene el alpha del primer fichero. Han de ser iguales en todos
+     * los ficheros de la imagen.
+     * @return alpha
+     */
+    public int getAlpha() {
+        if (geoFile != null) {
+            return geoFile[0].getAlpha();
+        } else {
+            System.err.println("PxRaster.getAlpha(): Imagen no cargada.");
+
+            return 0;
+        }
+    }
+
+    /**
+     * Asigna el extent completo del raster. Este contiene las coordenadas reales tanto
+     * para un raster rotado como sin rotar. Este extent coincide con requestExtent
+     * cuando el raster no tiene rotación.
+     * @param Extent 
+     */
+    public void setExtent(Extent e) {
+        super.extent = e;
+        if(e != null){
+	        pts = new Vector();
+	        pts.add(proj.createPoint(e.minX(), e.minY()));
+	        pts.add(proj.createPoint(e.maxX(), e.minY()));
+	        pts.add(proj.createPoint(e.maxX(), e.maxY()));
+	        pts.add(proj.createPoint(e.minX(), e.maxY()));
+        }
+    }
+    
+    /**
+     * Asigna el extent sobre el que se ajusta una petición para que esta no exceda el 
+     * extent máximo del raster. Para un raster sin rotar será igual al extent
+     * pero para un raster rotado será igual al extent del raster como si no 
+     * tuviera rotación. Esto ha de ser así ya que la rotación solo se hace sobre la
+     * vista y las peticiones han de hacerse en coordenadas de la imagen sin shearing
+     * aplicado.
+     * @param Extent
+     */
+    public void setExtentForRequest(Extent e) {
+        super.requestExtent = e;
+        if(e != null){
+	        pts = new Vector();
+	        pts.add(proj.createPoint(e.minX(), e.minY()));
+	        pts.add(proj.createPoint(e.maxX(), e.minY()));
+	        pts.add(proj.createPoint(e.maxX(), e.maxY()));
+	        pts.add(proj.createPoint(e.minX(), e.maxY()));
+        }
+    }
+
+    /**
+     * Cambia la vista (viewport) sobre el raster.
+     *
+     * @param v extent
+     * @param vName nombre
+     */
+    public void setView(Extent v, String vName) {
+        if (geoFile != null) {
+            for (int i = 0; i < geoFile.length; i++) {
+                geoFile[i].setView(v);
+            }
+        } else {
+            System.err.println("PxRaster.setView(): Imagen no cargada.");
+
+            return;
+        }
+
+        this.vName = vName;
+    }
+
+    /**
+     * Obtiene la escala.
+     *
+     * @param width
+     * @param height
+     * @return
+     */
+    public double[] getScale(int width, int height) {
+        double[] scale = new double[2];
+
+        if (geoFile != null) {
+            scale[0] = ((double) width) / geoFile[0].getView().width();
+            scale[1] = ((double) height) / geoFile[0].getView().height();
+
+            return scale;
+        } else {
+            System.err.println("PxRaster.getScale(): Imagen no cargada.");
+
+            return null;
+        }
+    }
+
+    /**
+     * Transforma la petición que está en coordenadas de la imagen sin rotar a coordenadas de la imagen rotada
+     * para que sea posible el calculo de la caja mínima de inclusión. La coordenada superior izquierda de esta
+     * será la que se use para posicionar la imagen sobre el graphics aplicandole la transformación de la la vista.
+     * @param v
+     * @return
+     */
+    private Point2D coordULRotateRaster(double[] v){
+        double vx = v[0];
+        double vy = v[1];
+        double vx2 = v[2];
+        double vy2 = v[3];
+    	if (geoFile != null) {
+        	double[] transf = geoFile[0].getTransform();
+        	        	
+           	if(transf != null && (transf[2] != 0 || transf[4] != 0)){
+           		//La transformación se hace en base a una esquina que varia con el signo del 
+           		//pixel size. 
+           		double ptoDesplX = (transf[1] > 0)?requestExtent.minX():requestExtent.maxX();
+            	double ptoDesplY = (transf[5] < 0)?requestExtent.maxY():requestExtent.minY();
+            
+            	Point2D ul = new Point2D.Double(vx - ptoDesplX, vy2 - ptoDesplY);
+            	Point2D ur = new Point2D.Double(vx2 - ptoDesplX, vy2 - ptoDesplY);
+            	Point2D ll = new Point2D.Double(vx - ptoDesplX, vy - ptoDesplY);
+            	Point2D lr = new Point2D.Double(vx2 - ptoDesplX, vy - ptoDesplY);
+            	
+           		double shearX = 0;
+                double shearY = 0;
+              
+                if(transf[5] != 0)
+                	shearX = transf[2] / transf[5];
+                else
+                	shearX = transf[2];
+                if(transf[1] != 0)
+                	shearY = transf[4] / transf[1];
+                else
+                	shearY = transf[4];
+                
+                
+        		AffineTransform at = new AffineTransform();
+        		at.setToShear(shearX, shearY);
+
+        		at.transform(ul, ul);
+        		at.transform(ur, ur);
+        		at.transform(ll, ll);
+        		at.transform(lr, lr);
+        			
+	        	ul = new Point2D.Double(ul.getX() + ptoDesplX, ul.getY() + ptoDesplY);
+	        	ur = new Point2D.Double(ur.getX() + ptoDesplX, ur.getY() + ptoDesplY);
+	        	ll = new Point2D.Double(ll.getX() + ptoDesplX, ll.getY() + ptoDesplY);
+	        	lr = new Point2D.Double(lr.getX() + ptoDesplX, lr.getY() + ptoDesplY);
+	        	
+        		vx2 = Math.max(Math.max(ul.getX(), ur.getX()), Math.max(ll.getX(), lr.getX()));
+        		vy2 = Math.max(Math.max(ul.getY(), ur.getY()), Math.max(ll.getY(), lr.getY()));
+        		vx = Math.min(Math.min(ul.getX(), ur.getX()), Math.min(ll.getX(), lr.getX()));
+        		vy = Math.min(Math.min(ul.getY(), ur.getY()), Math.min(ll.getY(), lr.getY()));
+        		adjustedRotedExtent = new double[4];
+        		adjustedRotedExtent[0] = vx;
+        		adjustedRotedExtent[1] = vy;
+        		adjustedRotedExtent[2] = vx2;
+        		adjustedRotedExtent[3] = vy2;
+        		return ul;
+        	}
+           	
+        }
+    	return null;
+        
+    }
+    
+    /**
+     * Ajusta la extensión pasada por parámetro y que corresponde al extent de la vista donde
+     * se va a dibujar a los valores máximos y mínimos de la imagen. Esto sirve para que la
+     * petición al driver nunca sobrepase los límites de la imagen tratada aunque la vista
+     * donde se dibuje sea de mayor tamaño.
+     * 
+     * Antes de realizar este ajuste hay que transformar la petición que puede corresponder a 
+     * una imagen rotada a las coordenadas de la imagen sin rotar ya que las peticiones al 
+     * driver hay que hacerlas con estas coordenadas. Para esto trasladamos la petición al origen
+     * de la imagen (esquina superior izquierda), aplicamos la transformación inversa a las cuatro 
+     * esquinas obtenidas y volvemos a trasladar a su posición original. 
+     * 
+     * Se usa la transformación inversa para trasladar un punto del raster rotado al mismo sin 
+     * rotar y la transformación afín normal para trasladar un punto sin rotar a uno rotado.
+     * 
+     * @param sz Extent completo de la vista donde se va a dibujar.
+     */
+    protected double[] calculateNewView(ViewPortData vp) {
+    	Extent sz = vp.getExtent();
+        double vx = sz.minX();
+        double vy = sz.minY();
+        double vx2 = sz.maxX();
+        double vy2 = sz.maxY();
+        
+        //Trasladamos la petición si está rotada a su posición sin rotar
+        
+        if (geoFile != null) {
+        	double[] transf = geoFile[0].getTransform();
+        	        	
+           	if(transf != null && (transf[2] != 0 || transf[4] != 0)){
+           		
+           		//La transformación se hace en base a una esquina que varia con el signo del 
+           		//pixel size. 
+           		double ptoDesplX = (transf[1] > 0)?requestExtent.minX():requestExtent.maxX();
+            	double ptoDesplY = (transf[5] < 0)?requestExtent.maxY():requestExtent.minY();
+            	
+            	Point2D ul = new Point2D.Double(vx - ptoDesplX, vy2 - ptoDesplY);
+            	Point2D ur = new Point2D.Double(vx2 - ptoDesplX, vy2 - ptoDesplY);
+            	Point2D ll = new Point2D.Double(vx - ptoDesplX, vy - ptoDesplY);
+            	Point2D lr = new Point2D.Double(vx2 - ptoDesplX, vy - ptoDesplY);
+            	
+           		double shearX = 0;
+                double shearY = 0;
+                if(transf[5] != 0)
+                	shearX = transf[2] / transf[5];
+                else
+                	shearX = transf[2];
+                if(transf[1] != 0)
+                	shearY = transf[4] / transf[1];
+                else
+                	shearY = transf[4];
+                
+        		AffineTransform at = new AffineTransform();
+        		at.setToShear(shearX, shearY);
+        		
+        		try {
+        			at.inverseTransform(ul, ul);
+        			at.inverseTransform(ur, ur);
+        			at.inverseTransform(ll, ll);
+        			at.inverseTransform(lr, lr);
+				} catch (NoninvertibleTransformException e) {
+					e.printStackTrace();
+				}
+				
+	        	ul = new Point2D.Double(ul.getX() + ptoDesplX, ul.getY() + ptoDesplY);
+	        	ur = new Point2D.Double(ur.getX() + ptoDesplX, ur.getY() + ptoDesplY);
+	        	ll = new Point2D.Double(ll.getX() + ptoDesplX, ll.getY() + ptoDesplY);
+	        	lr = new Point2D.Double(lr.getX() + ptoDesplX, lr.getY() + ptoDesplY);
+	        	
+        		vx2 = Math.max(Math.max(ul.getX(), ur.getX()), Math.max(ll.getX(), lr.getX()));
+        		vy2 = Math.max(Math.max(ul.getY(), ur.getY()), Math.max(ll.getY(), lr.getY()));
+        		vx = Math.min(Math.min(ul.getX(), ur.getX()), Math.min(ll.getX(), lr.getX()));
+        		vy = Math.min(Math.min(ul.getY(), ur.getY()), Math.min(ll.getY(), lr.getY()));
+        	}
+        }
+
+        if (vx < requestExtent.minX())
+            vx = requestExtent.minX();
+        
+        if (vy < requestExtent.minY()) 
+            vy = requestExtent.minY();
+        
+        if (vx2 > requestExtent.maxX()) 
+            vx2 = requestExtent.maxX();
+        
+        if (vy2 > requestExtent.maxY())
+            vy2 = requestExtent.maxY();
+                
+        if (geoFile != null) {
+            for (int i = 0; i < geoFile.length; i++)
+            	geoFile[i].setView(new Extent(vx, vy, vx2, vy2));
+        } else {
+            System.err.println("PxRaster.calculateNewView(): Imagen no cargada.");
+        }
+        double[] adjustedExtent = {vx, vy, vx2, vy2};
+        return adjustedExtent;
+    }
+    
+    /**
+     * Aplica transparencia leyendo los metadatos
+     */
+    private void setTransparencyByPixel(){
+    	if(geoFile[0].getMetadata() != null){
+    		if (stackManager == null){
+	        	TransparencyRange[] noData = geoFile[0].getMetadata().parserNodataInMetadata();
+	        	if(noData != null){
+	                ArrayList entries = new ArrayList();
+	                for(int i = 0; i < noData.length; i++)
+	                  	entries.add(noData[i]);
+	                stackManager = new RasterFilterStackManager(filterStack);
+	                stackManager.addTransparencyFilter(	entries, 0x0, 0xff, 0xff, 0xff);
+	        	}
+	        	TransparencyRange noDataValue = geoFile[0].getMetadata().parserNodataByBand();
+	        	if(noData == null  && noDataValue != null){
+	                ArrayList entries = new ArrayList();
+	                entries.add(noDataValue);
+	                stackManager = new RasterFilterStackManager(filterStack);
+	                stackManager.addTransparencyFilter(	entries, 0x0, 0xff, 0xff, 0xff);
+	        	}
+	        	
+    		}
+        }
+    }
+    
+    /** Dibuja el raster sobre el Graphics. Para ello debemos de pasar el viewPort que corresponde a la
+     * vista. Este viewPort es ajustado a los tamaños máximos y mínimos de la imagen por la función  
+     * calculateNewView. Esta función también asignará la vista a los drivers. Posteriormente se calcula 
+     * el alto y ancho de la imagen a dibujar (wImg, hImg), así como el punto donde se va a pintar dentro 
+     * del graphics (pt). Finalmente se llama a updateImage del driver para que pinte y una vez dibujado
+     * se pasa a través de la función renderizeRaster que es la encargada de aplicar la pila de filtros
+     * sobre el Image que ha devuelto el driver.
+     * 
+     * Para calcular en que coordenada pixel (pt) se empezará a pintar el BufferedImage con el raster leído
+     * se aplica sobre la esquina superior izquierda de esta la matriz de transformación del ViewPortData
+     * pasado vp.mat.transform(pt, pt). Si el raster no está rotado este punto es el resultante de la
+     * función calculateNewView que devuelve la petición ajustada al extent de la imagen (sin rotar). Si
+     * el raster está rotado necesitaremos para la transformación el resultado de la función coordULRotateRaster. 
+     * Lo que hace esta última es colocar la petición que ha sido puesta en coordenadas de la imagen sin rotar
+     * (para pedir al driver de forma correcta) otra vez en coordenadas de la imagen rotada (para calcular su 
+     * posición de dibujado).
+     * 
+     * Para dibujar sobre el Graphics2D el raster rotado aplicaremos la matriz de transformación con los 
+     * parámetros de Shear sobre este Graphics de forma inversa. Como hemos movido el fondo tendremos que
+     * recalcular ahora el punto donde se comienza a dibujar aplicandole la transformación sobre este
+     * at.inverseTransform(pt, pt);. Finalmente volcamos el BufferedImage sobre el Graphics volviendo a dejar
+     * el Graphics en su posición original al acabar. 
+     * 
+     * @param g Graphics sobre el que se pinta
+     * @param vp ViewPort de la extensión a dibujar
+     */
+    public synchronized void draw(Graphics2D g, ViewPortData vp) {
+        geoImage = null;
+    	double shearX = 0;
+        double shearY = 0;
+        
+        long t2;
+        long t1 = new Date().getTime();
+        lastViewPort = vp;
+            
+        if ((vp.getExtent().minX() > extent.maxX()) ||
+                (vp.getExtent().minY() > extent.maxY()) ||
+                (vp.getExtent().maxX() < extent.minX()) ||
+                (vp.getExtent().maxY() < extent.minY())) {
+            return;
+        }
+
+        double[] adjustedExtent = calculateNewView(vp);
+        Point2D p2d = coordULRotateRaster(adjustedExtent);
+
+        Extent v = geoFile[0].getView();
+        double x = v.minX();
+        double y = v.minY();
+        double w = v.width();
+        double h = v.height();
+
+        double scalex = vp.mat.getScaleX();
+        double scaley = vp.mat.getScaleY();
+        
+        /*int wImg = (int) Math.round(Math.abs(w * scalex));
+        int hImg = (int) Math.round(Math.abs(h * scaley));*/
+        int wImg = (int) Math.round(Math.abs((adjustedExtent[2] - adjustedExtent[0]) * scalex));
+        int hImg = (int) Math.round(Math.abs((adjustedExtent[3] - adjustedExtent[1]) * scaley));
+
+        if ((wImg <= 0) || (hImg <= 0))
+            return;
+        
+        //Para la transformación usamos el extent que ha ajustado la función calculateNewView y no usamos 
+        //el getView porque el getView puede haber  sufrido una transformación en caso de que exista 
+        //fichero .rmf. En caso de no existir este fichero sería lo mismo aplicar la función:
+        //Point2D.Double pt = new Point2D.Double(x, y + h);
+        int wI = wImg, hI = hImg;
+        double[] transf = bandSwitch.getBandR().getGeoRasterFile().getTransform();
+        Point2D.Double pt = null;
+       	if(transf != null && (transf[2] != 0 || transf[4] != 0)){ //Esta rotada
+       		pt =  new Point2D.Double(p2d.getX(), p2d.getY());
+       		wImg = (int) Math.round(Math.abs((adjustedRotedExtent[2] - adjustedRotedExtent[0]) * scalex));
+            hImg = (int) Math.round(Math.abs((adjustedRotedExtent[3] - adjustedRotedExtent[1]) * scaley));
+       	}else{	//No está rotada
+       			pt = new Point2D.Double(adjustedExtent[0], adjustedExtent[3]);
+       	}
+        
+        try {
+            vp.mat.transform(pt, pt);
+            
+            setTransparencyByPixel();
+                        
+            if ((geoFile != null) && geoFile[0] instanceof GdalFile &&
+                    (geoFile[0].getDataType() != DataBuffer.TYPE_BYTE)) {
+                RasterBuf raster = ((GdalFile) geoFile[0]).getRaster(wImg, hImg, rp);
+                t2 = new Date().getTime();
+
+                System.out.println("Dibujando PxRaster: " + ((t2 - t1) / 1000D) + ", secs. Filtrando/Renderizando");
+                t1 = t2;
+
+                filterStack.setInitRasterBuf(raster);
+
+                //Si la imagen es de 16 bits lleva un filtro de realce por defecto
+                if (stackManager == null){
+                    stackManager = new RasterFilterStackManager(filterStack);
+                    stackManager.addEnhancedFilter(false, geoFile[0].getName());
+                    stackManager.removeFilter(stackManager.getTypeFilter("computeminmax"));
+                    stackManager.addTailFilter(this.percentFilterInit, 0D, true);
+                }
+                
+                //Para imagenes de una banda replicamos esta en el resto del rasterBuf
+                if(raster.getBandCount() == 1){
+                	raster.replicateBand(0, 1);
+                	raster.replicateBand(0, 2);
+                }
+                
+                geoImage = renderizeRaster(raster, vp, v);
+                g.drawImage(geoImage, (int)(pt.getX()), (int)(pt.getY()), component);
+            } else if((geoFile != null) && (geoFile.length > 1) && 
+            		(!bandSwitch.getBandR().getGeoRasterFile().getName().equals(bandSwitch.getBandG().getGeoRasterFile().getName()) || 
+            		!bandSwitch.getBandR().getGeoRasterFile().getName().equals(bandSwitch.getBandB().getGeoRasterFile().getName()) ||
+            		!bandSwitch.getBandG().getGeoRasterFile().getName().equals(bandSwitch.getBandB().getGeoRasterFile().getName()))
+            		) { // multiFiles
+                System.out.println("Dibujando PxRaster (Multifile) ... Bands " +
+                                   geoFile.length);
+
+                if (bandSwitch.getBandR().getGeoRasterFile() instanceof EcwFile) {
+                    ((EcwFile) bandSwitch.getBandR().getGeoRasterFile()).setMultifile(true);
+                }
+
+                if (bandSwitch.getBandG().getGeoRasterFile() instanceof EcwFile) {
+                    ((EcwFile) bandSwitch.getBandG().getGeoRasterFile()).setMultifile(true);
+                }
+
+                if (bandSwitch.getBandB().getGeoRasterFile() instanceof EcwFile) {
+                    ((EcwFile) bandSwitch.getBandB().getGeoRasterFile()).setMultifile(true);
+                }
+                
+                //TODO:Solución para que no se pinte si hay sharpening. Esto hay que pensarlo mejor
+                if (stackManager == null) 
+                    stackManager = new RasterFilterStackManager(filterStack);
+                if(!filterStack.isActive(stackManager.getTypeFilter("sharpening"))){
+	                geoImage = bandSwitch.getBandR().getGeoRasterFile().updateImage(wImg, hImg, rp, null, 0, 0);
+	                geoImage = bandSwitch.getBandG().getGeoRasterFile().updateImage(wImg, hImg, rp, geoImage, 
+	                						bandSwitch.getBandG().getBand(), GeoRasterFile.GREEN_BAND);
+	                geoImage = bandSwitch.getBandB().getGeoRasterFile().updateImage(wImg, hImg, rp, geoImage, 
+	                						bandSwitch.getBandB().getBand(), GeoRasterFile.BLUE_BAND);
+                }else{
+                	geoImage = new BufferedImage(wImg, hImg, BufferedImage.TYPE_INT_RGB);
+                }
+                
+                filterStack.setInitRasterBuf(geoImage);
+                
+                geoImage = renderizeRaster(geoImage, vp, v);
+
+                g.drawImage(geoImage, (int)(pt.getX()), (int)(pt.getY()), component);
+            } else if ((geoFile != null) ) { // Una solo fichero
+
+            	geoImage = bandSwitch.getBandR().getGeoRasterFile().updateImage(wImg, hImg, rp, null, 0, 0);
+            	
+            	if(bandSwitch.getBandR().getGeoRasterFile().getPalette() != null){
+            		PaletteFilter pf = (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+            		if(pf == null){
+            			if (stackManager == null)
+                            stackManager = new RasterFilterStackManager(filterStack);
+                        PaletteStackManager psm = (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+                        stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+                        
+                        // -----------------------------------------PENDIENTE DE REVSION--------------------------------------------------             
+                        psm.addPaletteFilter(bandSwitch.getBandR().getGeoRasterFile().getPalette(),false);
+                        /*
+                        * A la función addPaletteFilter se le pasa el valor false al parámetro interpolate, lo cual no será válido
+                        * si se leen rasters con paletas asociadas que puedan especdifidar si se interpola o no, por ejemplo un rmf 
+                        * cuando se dote a estos de la posibilidad de almacenar paletas. Para este casó hay que buscar la forma de saber
+                        * en este punto si la paleta asociada al GeoRasterFile se visualiza con o sin interpolación. 
+                        * ----------------------------------------------------------------------------------------------------------------
+                        */
+            		}
+            	}
+            	
+                filterStack.setInitRasterBuf(geoImage);
+
+                geoImage = renderizeRaster(geoImage, vp, v);
+                
+                AffineTransform at = new AffineTransform();
+
+                if(transf != null && (transf[2] != 0 || transf[4] != 0)){
+                	                	
+                	//Obtenemos los parámetros de shearing
+	                if(transf[5] != 0)
+	                	shearX = transf[2] / transf[5];
+	                else
+	                	shearX = transf[2];
+	                if(transf[1] != 0)
+	                	shearY = transf[4] / transf[1];
+	                else
+	                	shearY = transf[4];
+	                
+	                //Aplicamos el shear a la vista
+	        		at.setToShear(-shearX, -shearY);
+	        		
+	        		//Escalamos en pixeles la misma cantidad que hemos leído de más.  
+	        		at.scale(((double)wI/(double)wImg), ((double)hI/(double)hImg));
+	        			        		      			        		
+	        		g.transform(at);
+	        		
+	        		//Aplicamos el shear inverso al punto donde se comienza a dibujar
+	        		at.inverseTransform(pt, pt);
+	        		
+	        		g.drawImage(geoImage, (int) (pt.getX()), (int) (pt.getY()), component);
+	        		g.transform(at.createInverse());
+                }else
+                	g.drawImage(geoImage, (int) (pt.getX()), (int) (pt.getY()), component);
+               
+            } else { // no cargada
+                System.err.println("Dibujando PxRaster: Foto no cargada.");
+            }
+            
+            t2 = new Date().getTime();
+            System.out.println("Dibujando PxRaster: " + ((t2 - t1) / 1000D) + ", secs.");
+        }catch (SupersamplingNotSupportedException e) {
+            System.err.println("Supersampling not supported");
+            return;
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        
+        if (pintaMarco) {
+            drawMarco(g, vp);
+        }
+    }
+
+    /**
+     * Aplica la pila de fitros sobre el RasterBuf pasado como parámetro
+     * y lo devuelve en Image
+     * @param raster        RasterBuf con la imagen sobre la que se aplicaran filtros
+     * @return        Image con la imagen con los filtros puestos
+     */
+    public Image renderizeRaster(RasterBuf raster, ViewPortData vp, Extent e) {
+        if (filterStack != null) {
+        	filterStack.setViewPortData(vp);
+        	filterStack.setExtent(e);
+        	filterStack.setStep(geoFile[0].getStepX(), geoFile[0].getStepY());
+            raster = filterStack.execute(raster);
+        }
+        System.out.println("Image renderizeRaster(RasterBuf raster, ViewPortData vp) ");
+        //Aplicamos el filtro para convertir a Image
+        
+        RasterToImageFilter rti = null;
+        if(getDataType() == RasterBuf.TYPE_BYTE){
+        	rti = new RasterByteToImageFilter();	
+        }else if(getDataType() == RasterBuf.TYPE_SHORT){
+        	rti = new RasterShortToImageFilter();
+        }else if(getDataType() == RasterBuf.TYPE_INT){
+        	rti = new RasterIntToImageFilter();
+        }else if(getDataType() == RasterBuf.TYPE_FLOAT){
+        	rti = new RasterFloatToImageFilter();
+        }else if(getDataType() == RasterBuf.TYPE_DOUBLE){
+        	rti = new RasterDoubleToImageFilter();
+        }
+        
+        
+        //rti.addParam("raster", raster);
+        if (filterStack.getOutDataType()!= RasterBuf.TYPE_IMAGE){
+	        rti.addParam("raster", filterStack.getResult());
+	        rti.addParam("alpha", new Integer(this.getAlpha()));
+	        rti.execute();
+	        raster = null;
+	        return (Image) rti.getResult("raster");
+        }
+        else
+        	return (Image)filterStack.getResult();
+    }
+
+    /**
+     * Aplica la pila de filtros sobre el Image pasado como parámetro y lo devuelve.
+     * Si la salida del último filtro es un RasterBuf lo convertirá a Image
+     * @param image Image con la imagen sobre la que se aplicaran filtros
+     * @return        Image con la imagen con los filtros puestos
+     */
+    public Image renderizeRaster(Image image, ViewPortData vp, Extent e) {
+        if (filterStack != null) {
+        	filterStack.setViewPortData(vp);
+        	filterStack.setExtent(e);
+        	filterStack.setStep(geoFile[0].getStepX(), geoFile[0].getStepY());
+            filterStack.execute(image);
+        }
+      
+        if (filterStack.getOutDataType() != RasterBuf.TYPE_IMAGE) {
+            //Aplicamos el filtro para convertir a Image
+        	
+	    	 RasterToImageFilter rti = null;
+	         if(getDataType() == RasterBuf.TYPE_BYTE){
+	         	rti = new RasterByteToImageFilter();	
+	         }else if(getDataType() == RasterBuf.TYPE_SHORT){
+	         	rti = new RasterShortToImageFilter();
+	         }else if(getDataType() == RasterBuf.TYPE_INT){
+	         	rti = new RasterIntToImageFilter();
+	         }else if(getDataType() == RasterBuf.TYPE_FLOAT){
+	         	rti = new RasterFloatToImageFilter();
+	         }else if(getDataType() == RasterBuf.TYPE_DOUBLE){
+	         	rti = new RasterDoubleToImageFilter();
+	         }
+          
+            //RasterIntToImageFilter rti = new RasterIntToImageFilter();
+            
+	         rti.addParam("raster", (RasterBuf) filterStack.getResult());
+	         rti.addParam("alpha", new Integer(this.getAlpha()));
+	         rti.execute();
+         
+	         return (Image) rti.getResult("raster");
+        }	
+        return (Image) filterStack.getResult();
+       // return image;
+    }
+
+    /**
+     *
+     * @param g
+     * @param vp
+     */
+    public void drawMarco(Graphics2D g, ViewPortData vp) {
+        //		Color color = new Color(255,222,165,128), fillColor = new Color(255,214,132,128);
+        Color color = new Color(128, 128, 128);
+
+        //		Color color = new Color(255,222,165,128), fillColor = new Color(255,214,132,128);
+        Color fillColor = new Color(255, 220, 220, 0x20);
+        GeneralPath gp = newGP(vp);
+        g.setColor(fillColor);
+        g.fill(gp);
+        g.setColor(color);
+        g.draw(gp);
+    }
+
+    private GeneralPath newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        GeneralPath gp = new GeneralPath();
+        Point2D.Double pt0 = new Point2D.Double(0.0, 0.0);
+        Point2D.Double pt1 = new Point2D.Double(0.0, 0.0);
+        Point2D.Double pt2 = new Point2D.Double(0.0, 0.0);
+        Point2D.Double pt3 = new Point2D.Double(0.0, 0.0);
+        vp.mat.transform((Point2D) pts.get(0), pt0);
+        vp.mat.transform((Point2D) pts.get(1), pt1);
+        vp.mat.transform((Point2D) pts.get(2), pt2);
+        vp.mat.transform((Point2D) pts.get(3), pt3);
+
+        // Aspa desde el extent
+        gp.moveTo((float) pt0.getX(), (float) pt0.getY());
+        gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+        gp.moveTo((float) pt1.getX(), (float) pt1.getY());
+        gp.lineTo((float) pt3.getX(), (float) pt3.getY());
+
+        // Extent
+        gp.moveTo((float) pt0.getX(), (float) pt0.getY());
+        gp.lineTo((float) pt1.getX(), (float) pt1.getY());
+        gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+        gp.lineTo((float) pt3.getX(), (float) pt3.getY());
+
+        if (extentOrig != extent) {
+            gp.lineTo((float) pt0.getX(), (float) pt0.getY());
+
+            Vector pts = new Vector();
+            pts.add(proj.createPoint(extentOrig.minX(), extentOrig.minY()));
+            pts.add(proj.createPoint(extentOrig.maxX(), extentOrig.minY()));
+            pts.add(proj.createPoint(extentOrig.maxX(), extentOrig.maxY()));
+            pts.add(proj.createPoint(extentOrig.minX(), extentOrig.maxY()));
+
+            vp.mat.transform((Point2D) pts.get(0), pt0);
+            vp.mat.transform((Point2D) pts.get(1), pt1);
+            vp.mat.transform((Point2D) pts.get(2), pt2);
+            vp.mat.transform((Point2D) pts.get(3), pt3);
+            gp.moveTo((float) pt0.getX(), (float) pt0.getY());
+            gp.lineTo((float) pt1.getX(), (float) pt1.getY());
+            gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+            gp.lineTo((float) pt3.getX(), (float) pt3.getY());
+        }
+
+        gp.closePath();
+
+        return gp;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        this.rp = rp.getInverted();
+        System.out.println("PxRaster: reProject()");
+
+        //geoFile.reProject(rp);
+        Vector savePts = pts;
+
+        pts = new Vector();
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.size(); i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts.get(i), ptDest);
+            pts.add(ptDest);
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    /**
+     * Obtiene el Stack Manager
+     * @return
+     */
+    public RasterFilterStackManager getStackManager() {
+        return this.stackManager;
+    }
+
+    /**
+     * Asigna el Stack Manager
+     * @return
+     */
+    public void setStackManager(RasterFilterStackManager sm) {
+        this.stackManager = sm;
+    }
+
+    /**
+     * Estructura que representa la relación entre un fichero y la banda que se
+     * utiliza de este.
+     * @author Nacho Brodin <brodin_ign@gva.es>
+     */
+    class FileBands {
+        GeoRasterFile grf; //Fichero
+        int band; //Banda asinada
+        int filePos; //posición del fichero
+
+        /**
+         * @return Returns the band.
+         */
+        public int getBand() {
+            return band;
+        }
+
+        /**
+         * @param band The band to set.
+         */
+        public void setBand(int band) {
+            this.band = band;
+        }
+
+        /**
+         * @return Returns the band.
+         */
+        public int getPos() {
+            return filePos;
+        }
+
+        /**
+         * @param band The band to set.
+         */
+        public void setPos(int pos) {
+            this.filePos = pos;
+        }
+
+        /**
+         * @return Returns the grf.
+         */
+        public GeoRasterFile getGeoRasterFile() {
+            return grf;
+        }
+
+        /**
+         * @param grf The grf to set.
+         */
+        public void setGeoRasterFile(GeoRasterFile grf) {
+            this.grf = grf;
+        }
+    }
+
+    /**
+     * Clase que lleva la gestión entre la relación de ficheros representados
+     * por un GeoRasterFile y el número de bandas que contienen. Esto es necesario
+     * para la actualización de la vista ya que para un Image dado podemos tener
+     * multiples bandas que pueden ser leidas desde diferentes ficheros.
+     *
+     * @author Nacho Brodin <brodin_ign@gva.es>
+     */
+    class BandSwitch {
+        private ArrayList geoFiles = new ArrayList(); //Lista de GeoRasterFile con los ficheros raster cargados
+        private FileBands[] listBands = new FileBands[3];
+        private boolean debug = false;
+
+        BandSwitch() {
+            for (int i = 0; i < listBands.length; i++)
+                listBands[i] = new FileBands();
+        }
+
+        /**
+         * Añade un fichero
+         * @param grf
+         */
+        public void addFile(GeoRasterFile grf) {
+            geoFiles.add(grf);
+
+            if (debug) {
+                this.show("addFile");
+            }
+        }
+
+        /**
+         * Elimina un fichero
+         * @param grf
+         */
+        public void removeFile(GeoRasterFile grf) {
+            for (int iFile = 0; iFile < geoFiles.size(); iFile++) {
+                if (grf.equals(geoFiles.get(iFile))) {
+                    geoFiles.remove(iFile);
+                    iFile--;
+                }
+            }
+
+            if (debug) {
+                this.show("removeFile");
+            }
+        }
+
+        /**
+         *
+         * @param flag
+         * @param grf
+         * @param nBand
+         */
+        public void setBand(int flag, GeoRasterFile grf, int nBand) {
+            if ((flag & GeoRasterFile.RED_BAND) == GeoRasterFile.RED_BAND) {
+                listBands[0].setBand(nBand);
+                listBands[0].setGeoRasterFile(grf);
+            } else if ((flag & GeoRasterFile.GREEN_BAND) == GeoRasterFile.GREEN_BAND) {
+                listBands[1].setBand(nBand);
+                listBands[1].setGeoRasterFile(grf);
+            } else if ((flag & GeoRasterFile.BLUE_BAND) == GeoRasterFile.BLUE_BAND) {
+                listBands[2].setBand(nBand);
+                listBands[2].setGeoRasterFile(grf);
+            } else {
+                return;
+            }
+
+            grf.setBand(flag, nBand);
+        }
+
+        /**
+         * Asigna las bandas
+         * @param flag
+         * @param nBand
+         */
+        public void setBand(int flag, int nBand) {
+            int cont = 0;
+
+            for (int iGrf = 0; iGrf < geoFiles.size(); iGrf++) {
+                for (int iBand = 0;
+                         iBand < ((GeoRasterFile) geoFiles.get(iGrf)).getBandCount();
+                         iBand++) {
+                    if (((flag & GeoRasterFile.RED_BAND) == GeoRasterFile.RED_BAND) &&
+                            (cont == nBand)) {
+                        listBands[0].setGeoRasterFile(((GeoRasterFile) geoFiles.get(iGrf)));
+                        listBands[0].setBand(iBand);
+                        listBands[0].setPos(iGrf);
+                        ((GeoRasterFile) geoFiles.get(iGrf)).setBand(flag, iBand);
+
+                        //System.out.println("==>Asignando banda R FILE="+iGrf+" BANDA="+iBand);
+                    } else if (((flag & GeoRasterFile.GREEN_BAND) == GeoRasterFile.GREEN_BAND) &&
+                                   (cont == nBand)) {
+                        listBands[1].setGeoRasterFile(((GeoRasterFile) geoFiles.get(iGrf)));
+                        listBands[1].setBand(iBand);
+                        listBands[1].setPos(iGrf);
+                        ((GeoRasterFile) geoFiles.get(iGrf)).setBand(flag, iBand);
+
+                        //System.out.println("==>Asignando banda G FILE="+iGrf+" BANDA="+iBand);
+                    } else if (((flag & GeoRasterFile.BLUE_BAND) == GeoRasterFile.BLUE_BAND) &&
+                                   (cont == nBand)) {
+                        listBands[2].setGeoRasterFile(((GeoRasterFile) geoFiles.get(iGrf)));
+                        listBands[2].setBand(iBand);
+                        listBands[2].setPos(iGrf);
+                        ((GeoRasterFile) geoFiles.get(iGrf)).setBand(flag, iBand);
+
+                        //System.out.println("==>Asignando banda B FILE="+iGrf+" BANDA="+iBand);
+                    }
+
+                    cont++;
+                }
+            }
+
+            if (debug) {
+                this.show("setBand");
+            }
+        }
+
+        /**
+         * Obtiene el número de bandas
+         * @return
+         */
+        public int getBandCount() {
+            int nbandas = 0;
+
+            for (int iGrf = 0; iGrf < geoFiles.size(); iGrf++)
+                nbandas += ((GeoRasterFile) geoFiles.get(iGrf)).getBandCount();
+
+            return nbandas;
+        }
+
+        /**
+         * Obtiene el GeoRasterFile que hay que leer para cargar la banda del rojo
+         * y la banda de este fichero que se utiliza para esta asignación.
+         * @return        Estructura FileBand con la relación fichero-banda
+         */
+        public FileBands getBandR() {
+            return listBands[0];
+        }
+
+        /**
+         * Obtiene el GeoRasterFile que hay que leer para cargar la banda del verde
+         * y la banda de este fichero que se utiliza para esta asignación.
+         * @return        Estructura FileBand con la relación fichero-banda
+         */
+        public FileBands getBandG() {
+            return listBands[1];
+        }
+
+        /**
+         * Obtiene el GeoRasterFile que hay que leer para cargar la banda del azul
+         * y la banda de este fichero que se utiliza para esta asignación.
+         * @return        Estructura FileBand con la relación fichero-banda
+         */
+        public FileBands getBandB() {
+            return listBands[2];
+        }
+
+        public void show(String op) {
+            String banda = null;
+            System.out.println("** " + op + " **");
+
+            for (int i = 0; i < 3; i++) {
+                if (i == 0) {
+                    banda = new String("Rojo");
+                } else if (i == 1) {
+                    banda = new String("Verde");
+                } else if (i == 2) {
+                    banda = new String("Azul");
+                }
+
+                System.out.println("** BANDA IMAGE=" + banda + " FILEPOS=" +
+                                   listBands[i].getBand() +
+                                   " BANDA DEL FICHERO=" +
+                                   listBands[i].getBand());
+            }
+        }
+    }
+	/**
+	 * @return Returns the vName.
+	 */
+	public String getVName() {
+		return vName;
+	}
+	/**
+	 * @param name The vName to set.
+	 */
+	public void setVName(String name) {
+		vName = name;
+	}
+
+	/**
+	 * Obtiene el último Image volcado en pantalla 
+	 * @return
+	 */
+	public Image getGeoImage() {
+		return geoImage;
+	}
+
+	/**
+	 * Obtiene el último viewPort de la vista
+	 * @return ViewPortData
+	 */
+	public ViewPortData getLastViewPort() {
+		return lastViewPort;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxRaster.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Pixel: Clases para dibujar.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObjList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObjList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObjList.java	(revision 10281)
@@ -0,0 +1,204 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+import org.cresques.geo.Projection;
+import org.cresques.geo.ReProjection;
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+public class PxObjList implements Colored, Drawable, IObjList {
+    IProjection proj = null;
+    private Color pc = null;
+    private Color fColor = null;
+    protected Extent extent = null;
+    Vector data = null;
+
+    public PxObjList() {
+        data = new Vector();
+        extent = new Extent();
+    }
+
+    public PxObjList(IProjection proj) {
+        data = new Vector();
+        this.proj = proj;
+        extent = new Extent();
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        extent = new Extent();
+
+        Iterator iter = data.iterator();
+        Projected obj = null;
+
+        while (iter.hasNext()) {
+            obj = (Projected) iter.next();
+            obj.reProject(rp);
+            extent.add(((Extent.Has) obj).getExtent());
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    public Extent getExtent() {
+        return extent;
+    }
+
+    public Color c() {
+        return pc;
+    }
+
+    public Color c(Color color) {
+        pc = color;
+
+        return pc;
+    }
+
+    public void setColor(Color color) {
+        pc = color;
+    }
+
+    public Color getColor() {
+        return pc;
+    }
+
+    public void setFillColor(Color color) {
+        fColor = color;
+    }
+
+    public Color getFillColor() {
+        return fColor;
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        System.err.println("draw :" + this + ": " + size() + "objetos.");
+
+        if (pc != null) {
+            g.setColor(pc);
+        }
+
+        Iterator iter = data.iterator();
+        Drawable dwObj = null;
+
+        while (iter.hasNext()) {
+            dwObj = (Drawable) iter.next();
+
+            //if (dwObj.getClass() == PxContour.class)
+            //	drawPxContour(g, vp, (PxContour) dwObj);
+            //else
+
+            /*extent = ((Extent.Has) dwObj).getExtent();
+            if (vp.getExtent().minX()> extent.maxX()) continue;
+            if (vp.getExtent().minY()> extent.maxY()) continue;
+            if (vp.getExtent().maxX()< extent.minX()) continue;
+            if (vp.getExtent().maxY()< extent.minY()) continue;*/
+            dwObj.draw(g, vp);
+        }
+    }
+
+    public IObjList getAt(Point2D pt) {
+        PxObjList oList = new PxObjList();
+        Iterator iter = data.iterator();
+
+        while (iter.hasNext()) {
+            PxObj o = (PxObj) iter.next();
+
+            if (o.getExtent().isAt(pt)) {
+                oList.add(o);
+            }
+        }
+
+        return oList;
+    }
+
+    public Iterator iterator() {
+        return data.iterator();
+    }
+
+    public int size() {
+        return data.size();
+    }
+
+    public void add(Extent.Has obj) {
+        if (obj != null) {
+            extent.add(obj.getExtent());
+            data.add(obj);
+        }
+    }
+
+    public void remove(Object obj) {
+        data.remove(obj);
+    }
+
+    public void clear() {
+        extent = new Extent();
+        data.clear();
+    }
+
+    /**
+     * Prueba de reproyección.
+     *
+     */
+    public void drawPxContour(Graphics2D g, ViewPortData vp, PxContour obj) {
+        IProjection prj = obj.getProjection();
+        obj.setColor(pc);
+        obj.setFillColor(fColor);
+
+        if (prj != null) {
+            if (prj != vp.getProjection()) {
+                ICoordTrans rp = null;
+
+                if (proj instanceof Projection) {
+                    rp = new ReProjection(((Projection) proj),
+                                          ((Projection) vp.getProjection()));
+                }
+
+                obj.draw(g, vp, rp);
+            } else {
+                obj.draw(g, vp);
+            }
+        } else {
+            System.err.println("Proyección nula o inadecuada.");
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObjList.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IObjList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IObjList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IObjList.java	(revision 10281)
@@ -0,0 +1,75 @@
+/*
+ * Created on 21-jun-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.cresques.px;
+
+import org.cresques.geo.Projected;
+
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public interface IObjList extends Extent.Has, Projected {
+    public Iterator iterator();
+
+    public int size();
+
+    public void add(Extent.Has obj);
+
+    public void remove(Object obj);
+
+    public void clear();
+
+    public IObjList getAt(Point2D pt);
+
+    interface vector extends IObjList {
+        public Extent.Has get(int i);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IObjList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayerList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayerList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayerList.java	(revision 10281)
@@ -0,0 +1,88 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import java.util.Iterator;
+
+
+public class PxLayerList extends PxObjList {
+    PxLayer current = null;
+
+    public PxLayerList() {
+        super();
+    }
+
+    public void add(PxLayer layer) {
+        extent.add(layer.extent);
+        super.add(layer);
+        current = layer;
+    }
+
+    public PxLayer getByName(String lName) {
+        Iterator iter = iterator();
+        PxLayer layer;
+
+        while (iter.hasNext()) {
+            layer = (PxLayer) iter.next();
+
+            if (layer.getName().compareTo(lName) == 0) {
+                return layer;
+            }
+        }
+
+        return null;
+    }
+
+    public boolean isCurrent(PxLayer layer) {
+        return current.getId() == layer.getId();
+    }
+
+    public PxLayer getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(PxLayer layer) {
+        current = layer;
+
+        if (!current.isVisible()) {
+            current.setVisible(true);
+        }
+    }
+
+    public Extent getExtent() {
+        Extent ext = new Extent();
+        PxLayer layer;
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            layer = (PxLayer) iter.next();
+
+            if (layer.isVisible()) {
+                ext.add(layer.extent);
+            }
+        }
+
+        return ext;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayerList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Minuteo.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Minuteo.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Minuteo.java	(revision 10281)
@@ -0,0 +1,38 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.geo.Projection;
+
+
+/**
+ * Contiene las hojas (PxContour) de una cobertura espacial
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Minuteo extends PxObjList {
+    public Minuteo(Projection proj) {
+        super(proj);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Minuteo.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Drawable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Drawable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Drawable.java	(revision 10281)
@@ -0,0 +1,35 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+
+//import java.awt.geom.AffineTransform;
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Graphics2D;
+
+
+public interface Drawable {
+    public void draw(Graphics2D g, ViewPortData vp);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Drawable.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObj.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObj.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObj.java	(revision 10281)
@@ -0,0 +1,50 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import java.awt.Stroke;
+
+
+public abstract class PxObj implements Drawable, Extent.Has {
+    public Stroke stroke = null;
+    /**
+     * Extent completo del raster. Este contiene las coordenadas reales tanto
+     * para un raster rotado como sin rotar. Este extent coincide con requestExtent
+     * cuando el raster no tiene rotación. 
+     */
+    protected Extent extent = null;
+    /**
+     * Este es el extent sobre el que se ajusta una petición para que esta no exceda el 
+     * extent máximo del raster. Para un raster sin rotar será igual al extent
+     * pero para un raster rotado será igual al extent del raster como si no 
+     * tuviera rotación. Esto ha de ser así ya que la rotación solo se hace sobre la
+     * vista y las peticiones han de hacerse en coordenadas de la imagen sin shearing
+     * aplicado.
+     */
+    protected Extent requestExtent = null;
+ 
+    public Extent getExtent() {
+        return extent;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxObj.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxSize.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxSize.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxSize.java	(revision 10281)
@@ -0,0 +1,54 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+public class PxSize implements ISize {
+    private int pw = 0;
+    private int ph = 0;
+
+    public PxSize(int w, int h) {
+        this.pw = w;
+        this.ph = h;
+    }
+
+    public int w() {
+        return pw;
+    }
+
+    public int w(int w) {
+        pw = w;
+
+        return pw;
+    }
+
+    public int h() {
+        return ph;
+    }
+
+    public int h(int h) {
+        ph = h;
+
+        return ph;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxSize.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/ISize.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/ISize.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/ISize.java	(revision 10281)
@@ -0,0 +1,34 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+public interface ISize {
+    public int w();
+
+    public int w(int w);
+
+    public int h();
+
+    public int h(int h);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/ISize.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayer.java	(revision 10281)
@@ -0,0 +1,71 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Graphics2D;
+
+
+public class PxLayer extends PxObjList {
+    private static int layerSeed = 0x00;
+    protected boolean visible = true;
+    protected String name = "Capa";
+    protected int id = 0;
+
+    public PxLayer(String name, IProjection proj) {
+        super(proj);
+        id = PxLayer.layerSeed++;
+        this.name = name;
+    }
+
+    public boolean isVisible() {
+        return visible;
+    }
+
+    public void setVisible(boolean v) {
+        visible = v;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    //	public void draw(Graphics2D g, AffineTransform mat, Extent sz) {
+    public void draw(Graphics2D g, ViewPortData vp) {
+        if (isVisible()) {
+            super.draw(g, vp);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLayer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Colored.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Colored.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Colored.java	(revision 10281)
@@ -0,0 +1,33 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import java.awt.Color;
+
+
+public interface Colored {
+    public Color c();
+
+    public Color c(Color c);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/Colored.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point.java	(revision 10281)
@@ -0,0 +1,114 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Geometria de tipo Point
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Point extends Geometry {
+    public static int pointNr = 0;
+    public String text = null;
+    private boolean textPoint;
+    private Color fColor = null; //new Color(255,222,165,64);
+    private Color color = new Color(255, 0, 0); //Color(255,214,132,255);
+
+    public Point() {
+        super();
+    }
+
+    public void add(Point2D pt) {
+        pointNr++;
+        super.add(pt);
+    }
+
+    public Color c() {
+        return color;
+    }
+
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+
+    public Color fillColor() {
+        return fColor;
+    }
+
+    public Color fillColor(Color c) {
+        fColor = c;
+
+        return fColor;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        g.setColor(c());
+
+        Point2D pt = new Point2D.Double(0D, 0D);
+        vp.mat.transform((Point2D) data.get(0), pt);
+        g.draw(new Line2D.Double(pt, pt));
+
+        if (text != null) {
+            g.drawString(text, (int) pt.getX(), (int) pt.getY());
+        }
+    }
+
+    /**
+     * @return Returns the textPoint.
+     */
+    public boolean isTextPoint() {
+        return textPoint;
+    }
+
+    /**
+     * @param textPoint The textPoint to set.
+     */
+    public void setTextPoint(boolean textPoint) {
+        this.textPoint = textPoint;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint3D.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint3D.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint3D.java	(revision 10281)
@@ -0,0 +1,59 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.geo.Point3D;
+
+
+/**
+ * Extensión 3D de InsPoint.
+ * @author jmorell
+ */
+public class InsPoint3D extends InsPoint {
+    
+    /**
+     * Constructor de InsPoint3D.
+     */
+    public InsPoint3D() {
+        super();
+    }
+    
+    /**
+     * Permite añadir un punto en 3D.
+     * @param pt, punto en 3D.
+     */
+    public void add(Point3D pt) {
+        pointNr++;
+        super.add(pt);
+    }
+    
+    /**
+     * Devuelve un punto 3D dado por un índice.
+     * @param i, Índice.
+     * @return Point3D, punto 3D.
+     */
+    public Point3D getPoint3D(int i) {
+        return (Point3D) data.get(i);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint3D.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Feature.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Feature.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Feature.java	(revision 10281)
@@ -0,0 +1,113 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Drawable;
+import org.cresques.px.Extent;
+import org.cresques.px.PxObj;
+
+import java.awt.Graphics2D;
+
+import java.util.Hashtable;
+
+
+/**
+ * Feature de .gml y .shp
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Feature extends PxObj {
+    Hashtable property = null;
+    Geometry geometry = null;
+    
+    /**
+     * Constructor de la clase Feature.
+     */
+    public Feature() {
+        property = new Hashtable();
+    }
+    
+    /**
+     * Establece los atributos de las Features.
+     * @param prop, Nombre del atributo.
+     * @param value, Valor que toma este atributo para esta Feature.
+     */
+    public void setProp(String prop, String value) {
+        property.put(prop, value);
+    }
+    
+    /**
+     * Devuelve el valor de un determinado atributo del Feature.
+     * @param prop, Nombre del atributo del cual queremos conocer el valor.
+     * @return String, Valor del atributo para esta Feature.
+     */
+    public String getProp(String prop) {
+        return (String) property.get(prop);
+    }
+    
+    /**
+     * Establece la geometría a la que está asociada este Feature.
+     * @param geom, la geometría que caracteriza a este Feature.
+     */
+    public void setGeometry(Geometry geom) {
+        geometry = geom;
+    }
+    
+    /**
+     * Devuelve la geometría asociada a este Feature.
+     * @return Geometry, la geometría que caracteriza a este Feature.
+     */
+    public Geometry getGeometry() {
+        return geometry;
+    }
+    
+    /**
+     * Devuelve el extent de la geometría que caracteriza al Feature.
+     * @return Extent, rectángulo en el que está ubicado la geometría característica
+     * del Feature.
+     */
+    public Extent getExtent() {
+        if (geometry != null) {
+            return geometry.getExtent();
+        }
+
+        return null;
+    }
+    
+    /**
+     * Permite dibujar le geometría característica del Feature.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Geometry geo = getGeometry();
+
+        if (geo != null) {
+            if (geo instanceof Point) {
+                ((Point) geo).text = getProp("NOMBRE");
+            }
+
+            geo.draw(g, vp);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Feature.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Geometry.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Geometry.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Geometry.java	(revision 10281)
@@ -0,0 +1,120 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+import org.cresques.px.PxObj;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+/**
+ * Clase base para geometrías.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+abstract public class Geometry extends PxObj implements Projected {
+    protected IProjection proj;
+
+    //	protected Extent extent = null;
+    Vector data = null;
+    
+    /**
+     * Constructor de Geometry.
+     */
+    public Geometry() {
+        extent = new Extent();
+        data = new Vector();
+    }
+    
+    /**
+     * Permite añadir un punto a la Geometry.
+     * @param pt
+     */
+    public void add(Point2D pt) {
+        extent.add(pt);
+        data.add(pt);
+    }
+    
+    /**
+     * Devuelve un punto de la Geometry dado por su índice.
+     * @param i, Índice.
+     * @return Point2D.
+     */
+    public Point2D get(int i) {
+        return (Point2D) data.get(i);
+    }
+    
+    /**
+     * Devuelve el número de puntos que componen la Geometry.
+     * @return int
+     */
+    public int pointNr() {
+        return data.size();
+    }
+    
+    /**
+     * Devuelve el conjunto de objetos que conforman la Geometry en forma de Vector.
+     * @return Vector de objetos.
+     */
+    public Vector getData() {
+        return data;
+    }
+    
+    /**
+     * Devuelve el extent de la Geometry.
+     * @return Extent, el rectángulo que contiene la Geometry.
+     */
+    public Extent getExtent() {
+        return extent;
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentra la Geometry.
+     * @return IProjection, la proyección cartográfica.
+     */
+    abstract public IProjection getProjection();
+    
+    /**
+     * Permite reproyectar la Geometry en función de unas coordenadas de transformación.
+     * @param rp, Coordenadas de transformación.
+     */
+    abstract public void reProject(ICoordTrans rp);
+    
+    /**
+     * Permite dibujar la Geometry.
+     * @param g, Graphics2D.
+     * @param vp, ViewPortData.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Geometry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString.java	(revision 10281)
@@ -0,0 +1,143 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+/**
+ * Geometria de tipo Polygon
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class LineString extends Geometry {
+    public static int pointNr = 0;
+    private Color fColor = null; //new Color(255,222,165,64);
+    private Color color = new Color(255, 0, 0); //Color(255,214,132,255);
+
+    public LineString() {
+        super();
+    }
+
+    public void add(Point2D pt) {
+        pointNr++;
+        super.add(pt);
+    }
+
+    public void remove(int i) {
+        getData().remove(i);
+    }
+
+    public Color c() {
+        return color;
+    }
+
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+
+    public Color fillColor() {
+        return fColor;
+    }
+
+    public Color fillColor(Color c) {
+        fColor = c;
+
+        return fColor;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        Vector saveLine = data;
+
+        data = new Vector();
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < saveLine.size(); i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) saveLine.get(i), ptDest);
+            data.add(ptDest);
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        AffineTransform msave = g.getTransform();
+        g.setTransform(vp.mat);
+
+        // relleno el marco si es preciso
+        if (fillColor() != null) {
+            g.setColor(fillColor());
+
+            //			outPol.fill(g);
+        }
+
+        // pinto el marco si es preciso
+        g.setColor(c());
+        drawLine2D(g, data);
+        g.setTransform(msave);
+    }
+
+    void drawLine2D(Graphics2D g, Vector v) {
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Iterator iter = v.iterator();
+
+        while (iter.hasNext()) {
+            pt1 = (Point2D) iter.next();
+
+            if (pt != null) {
+                g.draw(new Line2D.Double(pt, pt1));
+            }
+
+            pt = pt1;
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon3D.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon3D.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon3D.java	(revision 10281)
@@ -0,0 +1,56 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.geo.Point3D;
+
+
+/**
+ * @author jmorell
+ */
+public class Polygon3D extends Polygon {
+    public Polygon3D() {
+        super();
+    }
+
+    public void add(Point3D pt) {
+        pointNr++;
+
+        if (outer) {
+            outPol.addPoint(pt);
+        } else {
+            inPol.addPoint(pt);
+        }
+
+        extent.add(pt);
+    }
+
+    public Point3D getPoint3D(int i) {
+        if (outer) {
+            return (Point3D) outPol.get(i);
+        }
+
+        return (Point3D) inPol.get(i);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon3D.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Dxf: Clases para el acceso al formato gml.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point3D.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point3D.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point3D.java	(revision 10281)
@@ -0,0 +1,43 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+
+/**
+ * @author jmorell
+ */
+public class Point3D extends Point {
+    public Point3D() {
+        super();
+    }
+
+    public void add(org.cresques.geo.Point3D pt) {
+        pointNr++;
+        super.add(pt);
+    }
+
+    public org.cresques.geo.Point3D getPoint3D(int i) {
+        return (org.cresques.geo.Point3D) data.get(i);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Point3D.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiPolygon.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiPolygon.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiPolygon.java	(revision 10281)
@@ -0,0 +1,36 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+
+/**
+ * Geometría de tipo MultiPolygon.
+ * Permite guardar un conjunto de poligonos en unas sola geometría.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class MultiPolygon extends MultiGeometry {
+    public MultiPolygon() {
+        super();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiPolygon.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint.java	(revision 10281)
@@ -0,0 +1,275 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Point3D;
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+/**
+ * Punto de inserción. Se trata de un Point al que se le han añadido los atributos
+ * necesarios para hacer referencia a un conjunto de objetos gráficos o bloque.
+ * Las funciones de gestión de bloques estan basadas en la clase DxfInsert.
+ * @author jmorell
+ */
+public class InsPoint extends Geometry {
+    public static int pointNr = 0;
+    public String text = null;
+    String blockName;
+    Point3D scaleFactor;
+    double rotAngle;
+    private FeatureCollection block = new FeatureCollection(proj);
+    Vector blkList;
+    boolean blockFound = false;
+    private Color fColor = null; //new Color(255,222,165,64);
+    private Color color = new Color(255, 0, 0); //Color(255,214,132,255);
+    
+    /**
+     * Constructor de la clase.
+     */
+    public InsPoint() {
+        super();
+    }
+    
+    /**
+     * Permite añadir un punto.
+     * @param pt, Punto.
+     */
+    public void add(Point2D pt) {
+        pointNr++;
+        super.add(pt);
+    }
+    
+    /**
+     * Devuelve el ángulo de rotación que se aplica al bloque.
+     * @return double. Ángulo de rotación.
+     */
+    public double getRotAngle() {
+        return rotAngle;
+    }
+    
+    /**
+     * Devuelve el factor de escala que se aplica al bloque.
+     * @return Point3D. Contiene el factor de escala en X, en Y y en Z.
+     */
+    public Point3D getScaleFactor() {
+        return scaleFactor;
+    }
+    
+    /**
+     * Devuelve la lista de bloques.
+     * @return Vector, la lista de bloques.
+     */
+    public Vector getBlkList() {
+        return blkList;
+    }
+    
+    /**
+     * Informa sobre si el bloque ya ha sido encontrado.
+     * @return boolean, true si el bloque ya ha sido encontrado.
+     */
+    public boolean getBlockFound() {
+        return blockFound;
+    }
+    
+    /**
+     * Establece el bloque al que hace referencia este punto de inserción.
+     * @param block, bloque.
+     */
+    public void setBlock(FeatureCollection block) {
+        this.block = block;
+    }
+    
+    /**
+     * Establece si el bloque ya ha sido encontrado.
+     * @param found, true si el bloque ya ha sido encontrado.
+     */
+    public void setBlockFound(boolean found) {
+        blockFound = found;
+    }
+    
+    /**
+     * Establece la lista de bloques.
+     * @param blkList, Vector con la lista de bloques.
+     */
+    public void setBlkList(Vector blkList) {
+        this.blkList = blkList;
+    }
+    
+    /**
+     * Devuelve el bloque al que hace referencia el punto de inserción.
+     * @return FeatureCollection, el bloque.
+     */
+    public FeatureCollection getBlock() {
+        return block;
+    }
+    
+    /**
+     * Establece el nombre del bloque.
+     * @param blockName, nombre del bloque.
+     */
+    public void setBlockName(String blockName) {
+        this.blockName = blockName;
+    }
+    
+    /**
+     * Devuelve el nombre del bloque al que hace referencia el punto de inserción.
+     * @return String, nombre del bloque.
+     */
+    public String getBlockName() {
+        return blockName;
+    }
+    
+    /**
+     * Establece el factor de escala para el bloque.
+     * @param scaleFactor, factor de escala en X, en Y y en Z.
+     */
+    public void setScaleFactor(Point3D scaleFactor) {
+        this.scaleFactor = scaleFactor;
+    }
+    
+    /**
+     * Establece el ángulo de rotación para el bloque.
+     * @param rotAngle, ángulo de rotación.
+     */
+    public void setRotAngle(double rotAngle) {
+        this.rotAngle = rotAngle;
+    }
+    
+    /**
+     * Método para cargar el bloque al que hace referencia el punto de inserción, en el
+     * propio InsPoint.
+     * @param blockName, nombre del bloque que estamos buscando.
+     * @return boolean, true si hemos encontrado el bloque que buscabamos y ha sido
+     * cargado.
+     */
+    public boolean encuentraBloque(String blockName) {
+        int i = 0;
+
+        while ((i < blkList.size()) && (blockFound == false)) {
+            //System.out.println("encuentraBloque: ((DxfBlock)blkList.get(i)).getBlkName() = " + ((FeatureCollection)blkList.get(i)).getProp("blockName"));
+            //System.out.println("encuentraBloque: blockName = " + blockName);
+            if (((FeatureCollection) blkList.get(i)).getProp("blockName")
+                     .equals(blockName)) {
+                //System.out.println("encuentraBloque: Bloque " + i + " encontrado.");
+                block = (FeatureCollection) blkList.get(i);
+                blockFound = true;
+            } else {
+                //System.out.println("encuentraBloque: Bloque " + blockName + " no encontrado");
+                blockFound = false;
+            }
+
+            i++;
+        }
+
+        return blockFound;
+    }
+    
+    /**
+     * Devuelve el color del punto de inserción.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+    
+    /**
+     * Establece el color del punto de inserción.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+    
+    /**
+     * Devuelve el color del relleno.
+     * @return Color
+     */
+    public Color fillColor() {
+        return fColor;
+    }
+    
+    /**
+     * Establece el color de relleno.
+     * @param c, color.
+     * @return Color
+     */
+    public Color fillColor(Color c) {
+        fColor = c;
+
+        return fColor;
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentra el InsPoint.
+     * @return IProjection, proyección cartográfica.
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+    
+    /**
+     * Establece la proyección cartográfica en la que se encuentra el InsPoint.
+     * @param p, proyección cartográfica.
+     */
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+    
+    /**
+     * Permite cambiar la proyección cartográfica del InsPoint a través de unas
+     * coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+    
+    /**
+     * Permite dibujar el InsPoint.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        g.setColor(c());
+
+        Point2D pt = new Point2D.Double(0D, 0D);
+        vp.mat.transform((Point2D) data.get(0), pt);
+        g.draw(new Line2D.Double(pt, pt));
+
+        if (text != null) {
+            g.drawString(text, (int) pt.getX(), (int) pt.getY());
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/InsPoint.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString3D.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString3D.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString3D.java	(revision 10281)
@@ -0,0 +1,45 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.geo.Point3D;
+
+
+/**
+ * @author jmorell
+ */
+public class LineString3D extends LineString {
+    public LineString3D() {
+        super();
+    }
+
+    public void add(Point3D pt) {
+        pointNr++;
+        super.add(pt);
+    }
+
+    public Point3D getPoint3D(int i) {
+        return (Point3D) data.get(i);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/LineString3D.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiGeometry.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiGeometry.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiGeometry.java	(revision 10281)
@@ -0,0 +1,88 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+/**
+ * Clase base para geometrias múltiples.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class MultiGeometry extends Geometry {
+    Vector data = null;
+
+    public MultiGeometry() {
+        super();
+        data = new Vector();
+    }
+
+    public void add(Geometry geometry) {
+        extent.add(geometry.getExtent());
+        data.add(geometry);
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        extent = new Extent();
+
+        Geometry geometry;
+        Iterator iter = data.iterator();
+
+        while (iter.hasNext()) {
+            geometry = (Geometry) iter.next();
+            geometry.reProject(rp);
+            extent.add(geometry.getExtent());
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Geometry geometry;
+        Iterator iter = data.iterator();
+
+        while (iter.hasNext()) {
+            geometry = (Geometry) iter.next();
+            geometry.draw(g, vp);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/MultiGeometry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/FeatureCollection.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/FeatureCollection.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/FeatureCollection.java	(revision 10281)
@@ -0,0 +1,197 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.PxObj;
+import org.cresques.px.dxf.DxfEntityList;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+
+
+/**
+ * FeatureCollection de .gml y .shp
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * jmorell: Añadidas a FeatureCollection las capacidades de almacenamiento propias de
+ * Feature mediante herencia.
+ */
+public class FeatureCollection extends Feature implements IObjList.vector {
+    IProjection proj = null;
+    public Vector data = null;
+    
+    /**
+     * Constructor de FeatureCollection.
+     * @param proj, Proyección cartográfica en la que se encuentra la FeatureCollection.
+     */
+    public FeatureCollection(IProjection proj) {
+        extent = new Extent();
+        data = new Vector();
+        property = new Hashtable();
+    }
+    
+    /**
+     * Permite añadir un objeto gráfico a la lista.
+     * @param obj, Objeto gráfico que implemente el interface Extent.Has
+     */
+    public void add(Extent.Has feature) {
+        Extent ext = feature.getExtent();
+
+        if (extent != null) {
+            extent.add(ext);
+            data.add(feature);
+        }
+    }
+    
+    /**
+     * Devuelve los obhjetos gráficos de la lista cuyos extents contengan al
+     * punto que se le pasa como argumento.
+     * @param pt, punto para localizar los objetos gráficos.
+     * @return IObjList, Conjunto de objetos gráficos que contienen a pt.
+     */
+    public IObjList getAt(Point2D pt) {
+        IObjList oList = new DxfEntityList(proj);
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            Extent.Has o = (Extent.Has) iter.next();
+
+            if (o.getExtent().isAt(pt)) {
+                oList.add(o);
+            }
+        }
+
+        return oList;
+    }
+    
+    /**
+     * Devuelve un iterador para recorrer los elementos de la lista de objetos gráficos.
+     * @return Iterator, iterador.
+     */
+    public Iterator iterator() {
+        return data.iterator();
+    }
+    
+    /**
+     * Devuelve la cantidad de elementos que contiene la lista de objetos gráficos.
+     * @return int
+     */
+    public int size() {
+        return data.size();
+    }
+    
+    /**
+     * Permite eliminar un elemento de la lista de objetos gráficos.
+     * @param obj, Objeto que queremos eliminar.
+     */
+    public void remove(Object obj) {
+        data.remove(obj);
+    }
+    
+    /**
+     * Permite vacíar la lista de objetos gráficos.
+     */
+    public void clear() {
+        extent = new Extent();
+        data.clear();
+    }
+    
+    /**
+     * Devuelve uno de los elementos de la lista de objetos gráficos.
+     * @param i, Índice del elemento de la lista que queremos obtener.
+     * @return Extent.Has, elemento gráfico que queremos obtener.
+     */
+    public Extent.Has get(int i) {
+        return (Extent.Has) data.get(i);
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentra la FeatureCollection.
+     * @return IProjection, proyección cartográfica.
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+    
+    /**
+     * Establece la proyección cartográfica en la que se encuentra la FeatureCollection.
+     * @param p, Proyección cartográfica.
+     */
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+    
+    /**
+     * Permite cambiar la proyección en la que se encuentra la FeatureCollection a
+     * través de un conjunto de coordenadas de transformación.
+     * @param rp, Coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        extent = new Extent();
+
+        Feature f;
+        Geometry g;
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            f = (Feature) iter.next();
+            g = f.getGeometry();
+            g.reProject(rp);
+            extent.add(g.getExtent());
+        }
+
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar las Features que conforman la FeatureCollection.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            Feature f = (Feature) iter.next();
+            f.draw(g, vp);
+        }
+    }
+    
+    /**
+     * Permite obtener el extent de la FeatureCollection.
+     * @return Extent, rectángulo en donde se ubican las Features que conforman la
+     * FeatureCollection.
+     */
+    public Extent getExtent() {
+        return extent;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/FeatureCollection.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon.java	(revision 10281)
@@ -0,0 +1,160 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.gml;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Polygon2D;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Geometria de tipo Polygon
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Polygon extends Geometry {
+    final static Color colorBase = new Color(192, 64, 64);
+    final static Color fColorBase = new Color(192, 64, 64, 0x10); // new Color(255,192,192,64);
+    public static int pointNr = 0;
+    Polygon2D outPol = null;
+    Polygon2D inPol = null;
+    boolean outer = true;
+    private Color fillColor = fColorBase; //new Color(255,222,165,64);
+    private Color color = colorBase; //Color(255,214,132,255);
+
+    public Polygon() {
+        super();
+        outPol = new Polygon2D();
+        inPol = new Polygon2D();
+    }
+
+    public void add(Point2D pt) {
+        pointNr++;
+
+        if (outer) {
+            outPol.addPoint(pt);
+        } else {
+            inPol.addPoint(pt);
+        }
+
+        extent.add(pt);
+    }
+
+    public Point2D get(int i) {
+        if (outer) {
+            return (Point2D) outPol.get(i);
+        }
+
+        return (Point2D) inPol.get(i);
+    }
+
+    public void remove(int i) {
+        if (outer) {
+            outPol.remove(i);
+        } else {
+            inPol.remove(i);
+        }
+    }
+
+    public int pointNr() {
+        if (outer) {
+            return outPol.size();
+        }
+
+        return inPol.size();
+    }
+
+    public void setOuterBoundary() {
+        outer = true;
+    }
+
+    public void setInnerBoundary() {
+        outer = false;
+    }
+
+    public Color c() {
+        return color;
+    }
+
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+
+    public Color fillColor() {
+        return fillColor;
+    }
+
+    public Color fillColor(Color c) {
+        fillColor = c;
+
+        return fillColor;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        Polygon2D savePol = outPol;
+
+        outPol = new Polygon2D();
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePol.size(); i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePol.get(i), ptDest);
+            outPol.addPoint(ptDest);
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        // relleno el poligono si es preciso
+        if (fillColor() != null) {
+            g.setColor(fillColor());
+            outPol.fill(g, vp);
+        }
+
+        // pinto el poligono si es preciso
+        g.setColor(c());
+        outPol.draw(g, vp);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml/Polygon.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/gml
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLine.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLine.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLine.java	(revision 10281)
@@ -0,0 +1,140 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
+
+
+public class PxLine extends PxObj implements IPoint, Colored {
+    private int px = 0;
+    private int py = 0;
+    private int px2 = 0;
+    private int py2 = 0;
+    private Color pc;
+
+    public PxLine(IPoint p, IPoint p2, Color color) {
+        x(p.x());
+        y(p.y());
+        x2(p2.x());
+        y2(p2.y());
+        c(color);
+        extent = new Extent(Math.min(x(), x2()), Math.min(y(), y2()),
+                            Math.max(x(), x2()), Math.max(y(), y2()));
+    }
+
+    public PxLine(int x, int y, int x2, int y2, Color color) {
+        x(x);
+        y(y);
+        x2(x2);
+        y2(y2);
+        c(color);
+        extent = new Extent(Math.min(x(), x2()), Math.min(y(), y2()),
+                            Math.max(x(), x2()), Math.max(y(), y2()));
+    }
+
+    public int x() {
+        return px;
+    }
+
+    public int x(int x) {
+        px = x;
+
+        return px;
+    }
+
+    public int y() {
+        return py;
+    }
+
+    public int y(int y) {
+        py = y;
+
+        return py;
+    }
+
+    public int x2() {
+        return px2;
+    }
+
+    public int x2(int x) {
+        px2 = x;
+
+        return px2;
+    }
+
+    public int y2() {
+        return py2;
+    }
+
+    public int y2(int y) {
+        py2 = y;
+
+        return py2;
+    }
+
+    public Color c() {
+        return pc;
+    }
+
+    public Color c(Color color) {
+        pc = color;
+
+        return pc;
+    }
+
+    public void setStroke(Stroke stroke) {
+        this.stroke = stroke;
+    }
+
+    /*        public void draw(Graphics2D g) {
+                    draw(g, g.getTransform(), null);
+            }
+
+            public void draw(Graphics2D g, AffineTransform mat, Extent sz) {
+    */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Stroke strkSave = null;
+
+        if (stroke != null) {
+            strkSave = g.getStroke();
+            g.setStroke(stroke);
+        }
+
+        AffineTransform msave = g.getTransform();
+        g.setTransform(vp.mat);
+        g.setColor(c());
+        g.drawLine(x(), y(), x2(), y2());
+
+        if (strkSave != null) {
+            g.setStroke(strkSave);
+        }
+
+        g.setTransform(msave);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxLine.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCircle.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCircle.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCircle.java	(revision 10281)
@@ -0,0 +1,238 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad CIRCLE de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfCircle extends DxfEntity {
+    final static Color baseColor = new Color(69, 106, 121);
+
+    //Vector points = null;
+    Point2D[] pts;
+    GeneralPath gp = null;
+    boolean closed = true;
+    private Point2D center;
+    private double radius;
+    private Color color = baseColor; //Color(255,214,132,255);
+    
+    /**
+     * Constructor de DxfCircle.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfCircle.
+     * @param layer, capa del DXF en la que se encuentra el DxfCircle.
+     * @param pts, puntos 2D que componen el DxfCircle.
+     */
+    public DxfCircle(IProjection proj, DxfLayer layer, Point2D[] pts) {
+        super(proj, layer);
+        this.pts = pts;
+        extent = new Extent();
+
+        for (int i = 0; i < pts.length; i++) {
+            extent.add(pts[i]);
+        }
+    }
+    
+    /**
+     * Devuelve el color del DxfCircle.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+    
+    /**
+     * Establece el color del DxfCircle.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+    
+    /**
+     * Permite reproyectar un DxfCircle dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D[] savePts = pts;
+
+        pts = new Point2D[savePts.length];
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.length; i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts[i], ptDest);
+            this.pts[i] = ptDest;
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar un DxfCircle.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //System.out.println("Va a pintar un circle");
+        Color color = null;
+
+        if (dxfColor == AcadColor.BYLAYER) {
+            //g.setColor(layer.getColor());
+            color = layer.getColor();
+        } else {
+            //g.setColor(AcadColor.getColor(dxfColor));
+            color = AcadColor.getColor(dxfColor);
+        }
+
+        newGP(vp);
+
+        if (closed) {
+            g.setColor(new Color(color.getRed(), color.getBlue(),
+                                 color.getGreen(), 0x80));
+            g.fill(gp);
+        }
+
+        g.setColor(color);
+        g.draw(gp);
+    }
+    
+    /**
+     * Permite generar un GeneralPath partiendo del array de Point2D que conforma el
+     * DxfCircle.
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+
+        //System.out.println("pts.length = " + pts.length);
+        for (int i = 0; i < pts.length; i++) {
+            pt1 = (Point2D) pts[i];
+            vp.mat.transform(pt1, ptTmp);
+
+            if (pt0 == null) {
+                pt0 = ptTmp;
+                gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            } else {
+                gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            }
+        }
+
+        if (closed) {
+            gp.closePath();
+        }
+    }
+
+    /**
+     * Permite la escritura de entidades DxfCircle en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfCircle.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "CIRCLE"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbCircle"));
+        sb.append(DxfGroup.toString(10, getCenter().getX(), 6));
+        sb.append(DxfGroup.toString(20, getCenter().getY(), 6));
+        // sb.append(DxfGroup.toString(30, 0.0, 1));
+        sb.append(DxfGroup.toString(40, getRadius(), 6));
+
+        return sb.toString();
+    }
+
+    /**
+     * Devuelve el array de puntos que conforman el DxfCircle.
+     * @return Point2D[], puntos del DxfCircle.
+     */
+    public Point2D[] getPts() {
+        return pts;
+    }
+
+    /**
+     * Devuelve el GeneralPath qie conforma el DxfCircle.
+     * @return GeneralPath del DxfCircle.
+     */
+    /*public GeneralPath getGeneralPath(ViewPort vp) {
+            newGP(vp);
+            return (GeneralPath) gp.clone();
+    }*/
+
+    /**
+     * @return Returns the radius.
+     */
+    public double getRadius() {
+        return radius;
+    }
+
+    /**
+     * @param radius The radius to set.
+     */
+    public void setRadius(double radius) {
+        this.radius = radius;
+    }
+
+    /**
+     * @return Returns the center.
+     */
+    public Point2D getCenter() {
+        return center;
+    }
+
+    /**
+     * @param center The center to set.
+     */
+    public void setCenter(Point2D center) {
+        this.center = center;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCircle.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfInsert.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfInsert.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfInsert.java	(revision 10281)
@@ -0,0 +1,215 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+/**
+ * Entidad INSERT de un fichero DXF.
+ * @author jmorell
+ */
+public class DxfInsert extends DxfEntity {
+    Point2D pt;
+    String blockName;
+    Point2D scaleFactor;
+    double rotAngle;
+    DxfBlock block = new DxfBlock(proj);
+    Vector blkList;
+    boolean blockFound = false;
+
+    /**
+     * Constructor de DxfInsert.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfInsert.
+     * @param layer, capa del DXF en la que se encuentra el DxfInsert.
+     */
+    public DxfInsert(IProjection proj, DxfLayer layer) {
+        super(proj, layer);
+        extent = new Extent();
+    }
+
+    /**
+     * @return Returns the pt.
+     */
+    public Point2D getPt() {
+        return pt;
+    }
+
+    /**
+     * Devuelve el ángulo de rotación que se aplica al bloque.
+     * @return double. Ángulo de rotación.
+     */
+    public double getRotAngle() {
+        return rotAngle;
+    }
+
+    /**
+     * Devuelve el factor de escala que se aplica al bloque.
+     * @return Point3D. Contiene el factor de escala en X, en Y y en Z.
+     */
+    public Point2D getScaleFactor() {
+        return scaleFactor;
+    }
+
+    /**
+     * Informa sobre si el bloque ya ha sido encontrado.
+     * @return boolean, true si el bloque ya ha sido encontrado.
+     */
+    public boolean getBlockFound() {
+        return blockFound;
+    }
+
+    /**
+     * Establece si el bloque ya ha sido encontrado.
+     * @param found, true si el bloque ya ha sido encontrado.
+     */
+    public void setBlockFound(boolean found) {
+        blockFound = found;
+    }
+
+    /**
+     * Método para cargar el bloque al que hace referencia el punto de inserción, en el
+     * propio DxfInsert.
+     * @param blockName, nombre del bloque que estamos buscando.
+     * @return boolean, true si hemos encontrado el bloque que buscabamos y ha sido
+     * cargado.
+     */
+    public boolean encuentraBloque(String blockName) {
+        int i = 0;
+
+        while ((i < blkList.size()) && (blockFound == false)) {
+            //System.out.println("encuentraBloque: ((DxfBlock)blkList.get(i)).getBlkName() = " + ((DxfBlock)blkList.get(i)).getBlkName());
+            //System.out.println("encuentraBloque: blockName = " + blockName);
+            if (((DxfBlock) blkList.get(i)).getBlkName().equals(blockName)) {
+                //System.out.println("encuentraBloque: Bloque " + i + " encontrado.");
+                block = (DxfBlock) blkList.get(i);
+                blockFound = true;
+            } else {
+                //System.out.println("encuentraBloque: Bloque " + blockName + " no encontrado");
+                blockFound = false;
+            }
+
+            i++;
+        }
+
+        return blockFound;
+    }
+
+    /**
+     * Devuelve la capa en la que se encuentra el DxfInsert.
+     * @return DxfLayer, la capa.
+     */
+    public DxfLayer getDxfLayer() {
+        return layer;
+    }
+
+    /**
+     * Establece la lista de bloques.
+     * @param blkList, Vector con la lista de bloques.
+     */
+    public void setBlkList(Vector blkList) {
+        this.blkList = blkList;
+    }
+
+    /**
+     * Devuelve el bloque al que hace referencia el punto de inserción.
+     * @return DxfBlock, el bloque.
+     */
+    public DxfBlock getDxfBlock() {
+        return block;
+    }
+
+    /**
+     * Establece el punto de inserción del DxfInsert.
+     * @param pt, punto de inserción.
+     */
+    public void setPt(Point2D pt) {
+        this.pt = pt;
+        extent.add(pt);
+    }
+
+    /**
+     * Establece el nombre del bloque.
+     * @param blockName, nombre del bloque.
+     */
+    public void setBlockName(String blockName) {
+        this.blockName = blockName;
+    }
+
+    /**
+     * Devuelve el nombre del bloque al que hace referencia el punto de inserción.
+     * @return String, nombre del bloque.
+     */
+    public String getBlockName() {
+        return blockName;
+    }
+
+    /**
+     * Establece el factor de escala para el bloque.
+     * @param scaleFactor, factor de escala en X, en Y y en Z.
+     */
+    public void setScaleFactor(Point2D scaleFactor) {
+        this.scaleFactor = scaleFactor;
+    }
+
+    /**
+     * Establece el ángulo de rotación para el bloque.
+     * @param rotAngle, ángulo de rotación.
+     */
+    public void setRotAngle(double rotAngle) {
+        this.rotAngle = rotAngle;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.dxf.DxfEntity#toDxfFileString()
+     */
+    public String toDxfString() {
+        // TODO Auto-generated method stub
+        return "";
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.dxf.DxfEntity#reProject(org.cresques.geo.ReProjection)
+     */
+    public void reProject(ICoordTrans rp) {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.Drawable#draw(java.awt.Graphics2D, org.cresques.geo.ViewPort)
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        // TODO Auto-generated method stub
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfInsert.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfArc.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfArc.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfArc.java	(revision 10281)
@@ -0,0 +1,315 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad ARC de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfArc extends DxfEntity {
+    final static Color baseColor = new Color(69, 106, 121);
+
+    //Vector points = null;
+    Point2D[] pts;
+    GeneralPath gp = null;
+    boolean closed = false;
+    private Point2D centralPoint;
+    private Point2D init;
+    private Point2D end;
+    private Point2D center;
+    private double radius;
+    private double initAngle;
+    private double endAngle;
+    private Color color = baseColor; //Color(255,214,132,255);
+    
+    /**
+     * Constructor de DxfArc.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfArc.
+     * @param layer, capa del DXF en la que se encuentra el DxfArc.
+     * @param pts, puntos 2D que componen el DxfArc.
+     */
+    public DxfArc(IProjection proj, DxfLayer layer, Point2D[] pts) {
+        super(proj, layer);
+        this.pts = pts;
+        extent = new Extent();
+
+        for (int i = 0; i < pts.length; i++) {
+            extent.add(pts[i]);
+        }
+    }
+    
+    /**
+     * Devuelve el color del DxfArc.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+    
+    /**
+     * Establece el color del DxfArc.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+    
+    /**
+     * Permite reproyectar un DxfArc dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D[] savePts = pts;
+
+        pts = new Point2D[savePts.length];
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.length; i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts[i], ptDest);
+            this.pts[i] = ptDest;
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar un DxfArc.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //System.out.println("Va a pintar un arc");
+        Color color = null;
+
+        if (dxfColor == AcadColor.BYLAYER) {
+            //g.setColor(layer.getColor());
+            color = layer.getColor();
+        } else {
+            color = AcadColor.getColor(dxfColor);
+        }
+
+        //g.setColor(AcadColor.getColor(dxfColor));
+        newGP(vp);
+
+        if (closed) {
+            g.setColor(new Color(color.getRed(), color.getBlue(),
+                                 color.getGreen(), 0x80));
+            g.fill(gp);
+        }
+
+        g.setColor(color);
+        g.draw(gp);
+    }
+    
+    /**
+     * Permite generar un GeneralPath partiendo del array de Point2D que conforma el
+     * DxfArc.
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+
+        //System.out.println("pts.length = " + pts.length);
+        for (int i = 0; i < pts.length; i++) {
+            pt1 = (Point2D) pts[i];
+            vp.mat.transform(pt1, ptTmp);
+
+            if (pt0 == null) {
+                pt0 = ptTmp;
+                gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            } else {
+                gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            }
+        }
+
+        if (closed) {
+            gp.closePath();
+        }
+    }
+
+    /**
+     * Permite la escritura de entidades DxfArc en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfArc.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "ARC"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbCircle"));
+        sb.append(DxfGroup.toString(10, getCenter().getX(), 6));
+        sb.append(DxfGroup.toString(20, getCenter().getY(), 6));
+        sb.append(DxfGroup.toString(40, getRadius(), 6));
+        sb.append(DxfGroup.toString(100, "AcDbArc"));
+        sb.append(DxfGroup.toString(50, getInitAngle(), 6));
+        sb.append(DxfGroup.toString(51, getEndAngle(), 6));
+
+        return sb.toString();
+    }
+
+    /**
+     * Devuelve el array de puntos que conforman el DxfArc.
+     * @return Point2D[], puntos del DxfArc.
+     */
+    public Point2D[] getPts() {
+        return pts;
+    }
+
+    /**
+     * Devuelve el GeneralPath qie conforma el DxfArc.
+     * @return GeneralPath del DxfArc.
+     */
+    /*public GeneralPath getGeneralPath(ViewPort vp) {
+            newGP(vp);
+            return (GeneralPath) gp.clone();
+    }*/
+
+    /**
+     * @return Returns the center.
+     */
+    public Point2D getCenter() {
+        return center;
+    }
+
+    /**
+     * @param center The center to set.
+     */
+    public void setCenter(Point2D center) {
+        this.center = center;
+    }
+
+    /**
+     * @return Returns the end.
+     */
+    public Point2D getEnd() {
+        return end;
+    }
+
+    /**
+     * @param end The end to set.
+     */
+    public void setEnd(Point2D end) {
+        this.end = end;
+    }
+
+    /**
+     * @return Returns the init.
+     */
+    public Point2D getInit() {
+        return init;
+    }
+
+    /**
+     * @param init The init to set.
+     */
+    public void setInit(Point2D init) {
+        this.init = init;
+    }
+
+    /**
+     * @return Returns the centralPoint.
+     */
+    public Point2D getCentralPoint() {
+        return centralPoint;
+    }
+
+    /**
+     * @param centralPoint The centralPoint to set.
+     */
+    public void setCentralPoint(Point2D centralPoint) {
+        this.centralPoint = centralPoint;
+    }
+
+    /**
+     * @return Returns the endAngle.
+     */
+    public double getEndAngle() {
+        return endAngle;
+    }
+
+    /**
+     * @param endAngle The endAngle to set.
+     */
+    public void setEndAngle(double endAngle) {
+        this.endAngle = endAngle;
+    }
+
+    /**
+     * @return Returns the initAngle.
+     */
+    public double getInitAngle() {
+        return initAngle;
+    }
+
+    /**
+     * @param initAngle The initAngle to set.
+     */
+    public void setInitAngle(double initAngle) {
+        this.initAngle = initAngle;
+    }
+
+    /**
+     * @return Returns the radius.
+     */
+    public double getRadius() {
+        return radius;
+    }
+
+    /**
+     * @param radius The radius to set.
+     */
+    public void setRadius(double radius) {
+        this.radius = radius;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfArc.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTableItem.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTableItem.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTableItem.java	(revision 10281)
@@ -0,0 +1,162 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.io.DxfGroup;
+
+
+/**
+ * La clase DxfTableItem representa una entrada de una tabla en un fichero DXF. 
+ * Classe représentant une table fichier DXF.
+ * @author Michael Michaud
+ * @documentation jmorell
+ */
+public class DxfTableItem {
+    public final static DxfGroup ENDTAB = new DxfGroup(0, "ENDTAB");
+    public final static DxfGroup APPID = new DxfGroup(0, "APPID");
+    public final static DxfGroup DIMSTYLE = new DxfGroup(0, "DIMSTYLE");
+    public final static DxfGroup LAYER = new DxfGroup(0, "LAYER");
+    public final static DxfGroup LTYPE = new DxfGroup(0, "LTYPE");
+    public final static DxfGroup STYLE = new DxfGroup(0, "STYLE");
+    public final static DxfGroup UCS = new DxfGroup(0, "UCS");
+    public final static DxfGroup VIEW = new DxfGroup(0, "VIEW");
+    public final static DxfGroup VPORT = new DxfGroup(0, "VPORT");
+    private String name;
+    public int flags = 0;
+
+    /**
+     * Constructor de DxfTableItem.
+     * @param name, nombre de la entrada de la tabla.
+     * @param flags, estado.
+     */
+    public DxfTableItem(String name, int flags) {
+        this.name = name;
+        this.flags = flags;
+    }
+
+    /**
+     * Devuelve el nombre de la entrada de la tabla.
+     * @return String
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Establece el nombre de la entrada de la tabla.
+     * @param name, nombre.
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Devuelve el estado.
+     * @return int
+     */
+    public int getFlags() {
+        return flags;
+    }
+
+    /**
+     * Establece el estado.
+     * @param flags
+     */
+    public void setFlags(int flags) {
+        this.flags = flags;
+    }
+
+    /**
+     * Devuelve true si el estado es 1.
+     * @return boolean
+     */
+    public boolean getFlag1() {
+        return ((flags & 1) == 1);
+    }
+
+    /**
+     * Devuelve true si el estado es 2.
+     * @return boolean
+     */
+    public boolean getFlag2() {
+        return ((flags & 2) == 2);
+    }
+
+    /**
+     * Devuelve true si el estado es 4.
+     * @return boolean
+     */
+    public boolean getFlag4() {
+        return ((flags & 4) == 4);
+    }
+
+    /**
+     * Devuelve true si el estado es 8.
+     * @return boolean
+     */
+    public boolean getFlag8() {
+        return ((flags & 8) == 8);
+    }
+
+    /**
+     * Devuelve true si el estado es 16.
+     * @return boolean
+     */
+    public boolean getFlag16() {
+        return ((flags & 16) == 16);
+    }
+
+    /**
+     * Devuelve true si el estado es 32.
+     * @return boolean
+     */
+    public boolean getFlag32() {
+        return ((flags & 32) == 32);
+    }
+
+    /**
+     * Devuelve true si el estado es 64.
+     * @return boolean
+     */
+    public boolean getFlag64() {
+        return ((flags & 64) == 64);
+    }
+
+    /**
+     * Devuelve true si el estado es 128.
+     * @return boolean
+     */
+    public boolean getFlag128() {
+        return ((flags & 128) == 128);
+    }
+
+    /**
+     * Permite la escritura de entidades DxfTableItem en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfTableItem.
+     */
+    public String toDxfString() {
+        return DxfGroup.toString(2, name) + DxfGroup.toString(70, flags);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTableItem.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityList.java	(revision 10281)
@@ -0,0 +1,220 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.PxObj;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+/**
+ * La clase DxfEntityList almacena un conjunto de objetos gráficos. Esta basada en
+ * FeatureCollection de .gml y .shp
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class DxfEntityList extends PxObj implements IObjList.vector {
+    IProjection proj = null;
+    private Vector data = null;
+    
+    /**
+     * Constructor de DxfEntityList.
+     * @param proj, Proyección cartográfica en la que se encuentra la DxfEntityList.
+     */
+    public DxfEntityList(IProjection proj) {
+        extent = new Extent();
+        data = new Vector();
+    }
+    
+    /**
+     * Permite añadir un objeto gráfico a la lista.
+     * @param obj, Objeto gráfico que implemente el interface Extent.Has
+     */
+    public void add(Extent.Has obj) {
+        if (obj != null) {
+            extent.add(obj.getExtent());
+            data.add(obj);
+        }
+    }
+    
+    /**
+     * Devuelve uno de los elementos de la lista de objetos gráficos.
+     * @param cnt, Índice del elemento de la lista que queremos obtener.
+     * @return Extent.Has, elemento gráfico que queremos obtener.
+     */
+    public Extent.Has get(int cnt) {
+        return (Extent.Has) data.get(cnt);
+    }
+    
+    /**
+     * Devuelve los obhjetos gráficos de la lista cuyos extents contengan al
+     * punto que se le pasa como argumento.
+     * @param pt, punto para localizar los objetos gráficos.
+     * @return IObjList, Conjunto de objetos gráficos que contienen a pt.
+     */
+    public IObjList getAt(Point2D pt) {
+        IObjList oList = new DxfEntityList(proj);
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            Extent.Has o = (Extent.Has) iter.next();
+
+            if (o.getExtent().isAt(pt)) {
+                oList.add(o);
+            }
+        }
+
+        return oList;
+    }
+    
+    /**
+     * Devuelve un iterador para recorrer los elementos de la lista de objetos gráficos.
+     * @return Iterator, iterador.
+     */
+    public Iterator iterator() {
+        return data.iterator();
+    }
+    
+    /**
+     * Devuelve la cantidad de elementos que contiene la lista de objetos gráficos.
+     * @return int
+     */
+    public int size() {
+        return data.size();
+    }
+    
+    /**
+     * Permite eliminar un elemento de la lista de objetos gráficos.
+     * @param obj, Objeto que queremos eliminar.
+     */
+    public void remove(Object obj) {
+        data.remove(obj);
+    }
+    
+    /**
+     * Permite vacíar la lista de objetos gráficos.
+     */
+    public void clear() {
+        extent = new Extent();
+        data.clear();
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentra la DxfEntityList.
+     * @return IProjection, proyección cartográfica.
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+    
+    /**
+     * Establece la proyección cartográfica en la que se encuentra la DxfEntityList.
+     * @param p, Proyección cartográfica.
+     */
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+    
+    /**
+     * Permite cambiar la proyección en la que se encuentra la DxfEntityList a
+     * través de un conjunto de coordenadas de transformación.
+     * @param rp, Coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        extent = new Extent();
+
+        PxObj o;
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            o = (PxObj) iter.next();
+            ((Projected) o).reProject(rp);
+            extent.add(o.getExtent());
+        }
+
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar las entidades que conforman la DxfEntityList.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Iterator iter = iterator();
+        Extent extent;
+
+        while (iter.hasNext()) {
+            DxfEntity entity = (DxfEntity) iter.next();
+            extent = entity.getExtent();
+
+            if (vp.getExtent().minX() > extent.maxX()) {
+                continue;
+            }
+
+            if (vp.getExtent().minY() > extent.maxY()) {
+                continue;
+            }
+
+            if (vp.getExtent().maxX() < extent.minX()) {
+                continue;
+            }
+
+            if (vp.getExtent().maxY() < extent.minY()) {
+                continue;
+            }
+
+            if (!entity.layer.frozen && !entity.layer.isOff) {
+                entity.draw(g, vp);
+            }
+        }
+    }
+    
+    /**
+     * Permite la escritura de entidades en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * de la correspondiente entidad.
+     */
+    public String toDxfString() {
+        StringBuffer sb = new StringBuffer("");
+
+        Iterator iter = iterator();
+        Extent extent;
+
+        while (iter.hasNext()) {
+            sb.append(((DxfEntity) iter.next()).toDxfString());
+        }
+
+        return sb.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalArcs.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalArcs.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalArcs.java	(revision 10281)
@@ -0,0 +1,247 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+/**
+ * Calcula puntos sobre un arco. Originalmente implementada para calcular los puntos
+ * con un espaciamiento de un grado sexagesimal. Para el cálculo de los puntos del arco
+ * utiliza el primer y el útlimo punto del arco y un parámetro de curvatura.
+ * @author jmorell
+ *
+ */
+public class DxfCalArcs {
+    final boolean debug = true;
+    Point2D coord1;
+    Point2D coord2;
+    Point2D center;
+    double radio;
+    double empieza;
+    double acaba;
+    double bulge;
+    double d;
+    double dd;
+    double aci;
+    Point2D coordAux;
+
+    //private Point2D centralPoint;
+    
+    /**
+     * Constructor de DxfCalArcs.
+     * @param p1, punto inicial del arco.
+     * @param p2, punto final del arco.
+     * @param bulge, parámetro de curvatura.
+     */
+    public DxfCalArcs(Point2D p1, Point2D p2, double bulge) {
+        this.bulge = bulge;
+
+        /*System.out.println("DxfCalArcs: p1 = " + p1);
+        System.out.println("DxfCalArcs: p2 = " + p2);
+        System.out.println("DxfCalArcs: bulge = " + bulge);*/
+        if (bulge < 0.0) {
+            coord1 = p2;
+            coord2 = p1;
+
+            //System.out.println("DxfCalArcs: Bulge negativo; coord1 = " + coord1 + ", coord2 = " + coord2);
+        } else {
+            coord1 = p1;
+            coord2 = p2;
+        }
+
+        calculate();
+    }
+    
+    /**
+     * Calcula puntos sobre un arco.
+     * @return DxfCalArcs
+     */
+    DxfCalArcs calculate() {
+        d = Math.sqrt(((coord2.getX() - coord1.getX()) * (coord2.getX() -
+                      coord1.getX())) +
+                      ((coord2.getY() - coord1.getY()) * (coord2.getY() -
+                      coord1.getY())));
+
+        //System.out.println("DxfCalArcs: distancia reducida = " + d);
+        coordAux = new Point2D.Double((coord1.getX() + coord2.getX()) / 2.0,
+                                      (coord1.getY() + coord2.getY()) / 2.0);
+
+        //System.out.println("DxfCalArcs: punto medio = " + coordAux);			
+        double b = Math.abs(bulge);
+
+        //System.out.println("DxfCalArcs: Bulge(valor absoluto) = " + b);
+        double beta = Math.atan(b);
+
+        //System.out.println("DxfCalArcs: Angulo beta(rad) = " + beta);
+        //double beta = Math.atan(bulge);
+        double alfa = beta * 4.0;
+
+        //System.out.println("DxfCalArcs: Angulo alfa(rad)(angulo que define el arco) = " + alfa);
+        double landa = alfa / 2.0;
+
+        //System.out.println("DxfCalArcs: Angulo landa(rad) = " + landa);
+        dd = (d / 2.0) / (Math.tan(landa));
+        radio = (d / 2.0) / (Math.sin(landa));
+
+        //System.out.println("DxfCalArcs: radio del arco = " + radio);
+        aci = Math.atan((coord2.getX() - coord1.getX()) / (coord2.getY() -
+                        coord1.getY()));
+
+        //System.out.println("DxfCalArcs: Acimut de coord1(pto origen) a coord2(pto final) = " + aci);
+        double aciDegree = (aci * 180.0) / Math.PI;
+
+        //System.out.println("DxfCalArcs: Acimut en grados = " + aciDegree);
+        if (coord2.getY() > coord1.getY()) {
+            aci += Math.PI;
+
+            //System.out.println("DxfCalArcs: La coord Y de coord2 es mayor que la");
+            //System.out.println("DxfCalArcs: coord Y de coord1, acimut = acimut + PI, nuevo acimut = " + aci);
+            aciDegree = (aci * 180.0) / Math.PI;
+
+            //System.out.println("DxfCalArcs: Nuevo acimut en grados = " + aciDegree);
+        }
+
+        center = new Point2D.Double(coordAux.getX() +
+                                    (dd * Math.sin(aci + (Math.PI / 2.0))),
+                                    coordAux.getY() +
+                                    (dd * Math.cos(aci + (Math.PI / 2.0))));
+
+        //System.out.println("DxfCalArcs: El centro del arco es: centro = " + center);
+        calculateEA(alfa);
+
+        return this;
+    }
+    
+    /**
+     * Calcula el ángulo de comienzo y el de finalización del arco.
+     * @param alfa, ángulo del arco. 
+     */
+    void calculateEA(double alfa) {
+        empieza = Math.atan2(coord1.getY() - center.getY(),
+                             coord1.getX() - center.getX());
+        acaba = (empieza + alfa);
+        empieza = (empieza * 180.0) / Math.PI;
+        acaba = (acaba * 180.0) / Math.PI;
+
+        //System.out.println("DxfCalArcs: Acimut de inicio = " + empieza + ", Acimut de finalizacion = " + acaba);
+        //System.out.println("Tener en cuenta que los angulos se miden en sentido antihorario.");
+    }
+    
+    /**
+     * Devuelve un Vector con los puntos que conforman el arco.
+     * @param inc, es el espaciamiento entre puntos (un grado sexagesimal por defecto).
+     * @return Vector de puntos.
+     */
+    public Vector getPoints(double inc) {
+        //System.out.println("Se incia el metodo que construye el arco.");
+        //System.out.println("Todo el proceso anterior define los parametros para esta construccion.");
+        Vector arc = new Vector();
+        double angulo;
+
+        int iempieza = (int) empieza + 1; // ojo aqui !!
+        int iacaba = (int) acaba;
+
+        //System.out.println("DxfCalArcs: Angulo entero de inicio: iempieza = " + iempieza + ", Angulo entero de finalizacion: iacaba = " + iacaba);
+        if (empieza <= acaba) {
+            //System.out.println("El angulo de inicio es menor que el angulo de finalizacion.");
+            addNode(arc, empieza);
+
+            for (angulo = iempieza; angulo <= iacaba; angulo += inc) {
+                addNode(arc, angulo);
+            }
+
+            addNode(arc, acaba);
+        } else {
+            //System.out.println("El angulo de inicio es mayor que el angulo de finalizacion.");
+            addNode(arc, empieza);
+
+            for (angulo = iempieza; angulo <= 360; angulo += inc) {
+                addNode(arc, angulo);
+            }
+
+            for (angulo = 1; angulo <= iacaba; angulo += inc) {
+                addNode(arc, angulo);
+            }
+
+            addNode(arc, angulo);
+        }
+
+        Point2D aux = (Point2D) arc.get(arc.size() - 1);
+        double aux1 = Math.abs(aux.getX() - coord2.getX());
+        double aux2 = Math.abs(aux.getY() - coord2.getY());
+
+        /*if (aux1<=0.000005 && aux2<=0.000005) {
+                arc.remove(arc.size()-1);
+                arc.remove(arc.size()-1);
+                arc.add(coord2);
+        }*/
+        return arc;
+    }
+
+    /**
+     * Devuelve un Vector con puntos pertenecientes al arco y situados cerca de su
+     * punto central.
+     * @return Vector
+     */
+    public Vector getCentralPoint() {
+        Vector arc = new Vector();
+
+        if (empieza <= acaba) {
+            addNode(arc, (empieza + acaba) / 2.0);
+        } else {
+            addNode(arc, empieza);
+
+            double alfa = 360 - empieza;
+            double beta = acaba;
+            double an = alfa + beta;
+            double mid = an / 2.0;
+
+            if (mid <= alfa) {
+                addNode(arc, empieza + mid);
+            } else {
+                addNode(arc, mid - alfa);
+            }
+        }
+
+        return arc;
+    }
+    
+    /**
+     * Añade un punto al arco basandose en un ángulo dado.
+     * @param arc, arco al que se añade el punto.
+     * @param angulo, ángulo donde se localiza el punto.
+     */
+    private void addNode(Vector arc, double angulo) {
+        double yy = center.getY() +
+                    (radio * Math.sin((angulo * Math.PI) / 180.0));
+        double xx = center.getX() +
+                    (radio * Math.cos((angulo * Math.PI) / 180.0));
+        arc.add(new Point2D.Double(xx, yy));
+
+        //System.out.println("DxfCalArcs: Añade el punto " + new Point2D.Double(xx,yy) + ", correspondiente al angulo " + angulo);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalArcs.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSolid.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSolid.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSolid.java	(revision 10281)
@@ -0,0 +1,188 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad SOLID de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfSolid extends DxfEntity {
+    final static Color baseColor = new Color(69, 106, 121);
+
+    //Vector points = null;
+    Point2D[] pts;
+    GeneralPath gp = null;
+    boolean closed = true;
+    private Color color = baseColor; //Color(255,214,132,255);
+
+    /**
+     * Constructor de DxfSolid.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfSolid.
+     * @param layer, capa del DXF en la que se encuentra el DxfSolid.
+     * @param pts, puntos 2D que componen el DxfSolid.
+     */
+    public DxfSolid(IProjection proj, DxfLayer layer, Point2D[] pts) {
+        super(proj, layer);
+
+        Point2D aux = pts[2];
+        pts[2] = pts[3];
+        pts[3] = aux;
+        this.pts = pts;
+        extent = new Extent();
+
+        for (int i = 0; i < pts.length; i++) {
+            extent.add(pts[i]);
+        }
+    }
+
+    /**
+     * Devuelve el color del DxfSolid.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+
+    /**
+     * Establece el color del DxfSolid.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+
+    /**
+     * Permite reproyectar un DxfSolid dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D[] savePts = pts;
+
+        pts = new Point2D[savePts.length];
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.length; i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts[i], ptDest);
+            pts[i] = ptDest;
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    /**
+     * Permite dibujar un DxfSolid.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //System.out.println("Va a pintar un solid");
+        Color color = null;
+
+        if (dxfColor == AcadColor.BYLAYER) {
+            //g.setColor(layer.getColor());
+            color = layer.getColor();
+        } else {
+            //g.setColor(AcadColor.getColor(dxfColor));
+            color = AcadColor.getColor(dxfColor);
+        }
+
+        newGP(vp);
+
+        if (closed) {
+            g.setColor(new Color(color.getRed(), color.getBlue(),
+                                 color.getGreen(), 0x20));
+            g.fill(gp);
+        }
+
+        g.setColor(color);
+        g.draw(gp);
+    }
+
+    /**
+     * Permite generar un GeneralPath partiendo del array de Point2D que conforma el
+     * DxfSolid.
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+
+        //System.out.println("pts.length = " + pts.length);
+        for (int i = 0; i < pts.length; i++) {
+            pt1 = (Point2D) pts[i];
+            vp.mat.transform(pt1, ptTmp);
+
+            if (pt0 == null) {
+                pt0 = ptTmp;
+                gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            } else {
+                gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            }
+        }
+
+        if (closed) {
+            gp.closePath();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.dxf.DxfEntity#toDxfFileString()
+     */
+    public String toDxfString() {
+        // TODO Auto-generated method stub
+        return "";
+    }
+
+    /**
+     * Devuelve el array de puntos que conforman el DxfSolid.
+     * @return Point2D[], puntos del DxfSolid.
+     */
+    public Point2D[] getPts() {
+        return pts;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSolid.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfFeatureMaker.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfFeatureMaker.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfFeatureMaker.java	(revision 10281)
@@ -0,0 +1,3625 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.geo.Point3D;
+import org.cresques.geo.Projected;
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.DxfFile;
+import org.cresques.io.DxfGroup;
+import org.cresques.io.DxfGroupVector;
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.gml.Feature;
+import org.cresques.px.gml.FeatureCollection;
+import org.cresques.px.gml.InsPoint3D;
+import org.cresques.px.gml.LineString;
+import org.cresques.px.gml.LineString3D;
+import org.cresques.px.gml.Polygon;
+import org.cresques.px.gml.Polygon3D;
+
+
+/**
+ * La clase DxfFeatureMaker facilita la creación de entidades en un modelo de datos
+ * GIS. La creación se realiza partiendo de las entidades obtenidas de un fichero DXF.
+ * @author jmorell
+ */
+public class DxfFeatureMaker implements DxfFile.EntityFactory, Projected {
+    IProjection proj = null;
+
+    //Feature lastFeature = null;
+    Feature lastFeaBordes = null;
+    Feature lastFeaFondos = null;
+    boolean isDoubleFeatured = false;
+    FeatureCollection features = null;
+    double bulge = 0.0;
+    double xtruX = 0.0;
+    double xtruY = 0.0;
+    double xtruZ = 1.0;
+    int polylineFlag = 0;
+    Point3D firstPt = new Point3D();
+    Point3D ptAnterior = null;
+    boolean addingToBlock = false;
+    int iterator = 0;
+    FeatureCollection blk = null;
+    Vector blkList = null;
+    DxfTable layers = null;
+    private Vector faces = null;
+    private boolean hasFaces = false;
+    private int facesIterador = 1;
+    private Point2D facesFirstPoint = null;
+    private Vector attributes = null;
+    private boolean constantPolylineElevation;
+    private double lastVertexElevation;
+    private boolean dxf3DFile;
+    
+    /**
+     * Constructor de DxfFeatureMaker.
+     * @param proj, proyección cartográfica en la que se encontrarán las entidades
+     * que creemos.
+     */
+    public DxfFeatureMaker(IProjection proj) {
+        this.proj = proj;
+        layers = new DxfTable();
+        features = new FeatureCollection(proj);
+        blkList = new Vector();
+        attributes = new Vector();
+        dxf3DFile = false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#setAddingToBlock(boolean)
+     */
+    public void setAddingToBlock(boolean a) {
+        addingToBlock = a;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createLayer(org.cresques.io.DxfGroupVector)
+     */
+    public void createLayer(DxfGroupVector v) throws Exception {
+        int color = v.getDataAsInt(62);
+        DxfLayer layer = new DxfLayer(v.getDataAsString(2),
+                                      Math.abs(v.getDataAsInt(62)));
+
+        if (color < 0) {
+            layer.isOff = true;
+        }
+
+        layer.lType = v.getDataAsString(6);
+        layer.setFlags(v.getDataAsInt(70));
+
+        // compruebo flags
+        if ((layer.flags & 0x01) == 0x01) {
+            layer.frozen = true;
+        }
+
+        if ((layer.flags & 0x02) == 0x02) {
+            layer.frozen = true;
+        }
+
+        System.out.println("LAYER color=" + layer.getColor());
+
+        layers.add(layer);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createPolyline(org.cresques.io.DxfGroupVector)
+     */
+    public void createPolyline(DxfGroupVector grp) throws Exception {
+        LineString3D lineString3D = new LineString3D();
+        Polygon3D polygon3D = new Polygon3D();
+
+        //Feature feature= new Feature();
+        Feature feaBordes = new Feature();
+        Feature feaFondos = new Feature();
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        int flags = 0;
+        constantPolylineElevation = true;
+
+        // 041122: Cada polyline tiene asociado un objeto faces distinto.
+        faces = new Vector();
+
+        //feature.setProp("dxfEntity", "Polyline");
+        feaBordes.setProp("dxfEntity", "Polyline");
+        feaFondos.setProp("dxfEntity", "Polyline");
+
+        if (grp.hasCode(8)) {
+            //feature.setProp("layer", grp.getDataAsString(8));         
+            feaBordes.setProp("layer", grp.getDataAsString(8));
+            feaFondos.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+
+            //feature.setProp("thickness", string);
+            feaBordes.setProp("thickness", string);
+            feaFondos.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+
+            //feature.setProp("thickness", doub.toString());
+            feaBordes.setProp("thickness", doub.toString());
+            feaFondos.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+
+            //feature.setProp("color", string);
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "false");
+            feaFondos.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+
+            //feature.setProp("color", string);
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "true");
+            feaFondos.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(10)) {
+            x = grp.getDataAsDouble(10);
+        }
+
+        if (grp.hasCode(20)) {
+            y = grp.getDataAsDouble(20);
+        }
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+
+            if (z != 0.0) {
+                dxf3DFile = true;
+            }
+
+            Double doub = new Double(z);
+            String string = doub.toString();
+
+            //feature.setProp("elevation", string);
+            feaBordes.setProp("elevation", string);
+            feaFondos.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+
+            //feature.setProp("elevation", doub.toString());
+            feaBordes.setProp("elevation", doub.toString());
+            feaFondos.setProp("elevation", doub.toString());
+        }
+
+        if (grp.hasCode(70)) {
+            flags = grp.getDataAsInt(70);
+        }
+
+        if (grp.hasCode(210)) {
+            xtruX = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            xtruY = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            xtruZ = grp.getDataAsDouble(230);
+        }
+
+        if (((flags & 0x01) == 0x01) || ((flags & 0x40) == 0x40)) {
+            feaBordes.setGeometry(lineString3D);
+            feaFondos.setGeometry(polygon3D);
+            lastFeaBordes = feaBordes;
+            lastFeaFondos = feaFondos;
+            isDoubleFeatured = true;
+        } else if ((flags & 0x01) == 0x00) {
+            feaBordes.setGeometry(lineString3D);
+            lastFeaBordes = feaBordes;
+            isDoubleFeatured = false;
+        } else {
+            System.out.println("Detectada una Polyline Flag que no corresponde");
+            System.out.println("a una Polyline corriente, ni a una Closed Polyline");
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#endSeq(org.cresques.io.DxfGroupVector)
+     */
+    public void endSeq() throws Exception {
+        if (isDoubleFeatured) {
+            if (lastFeaBordes.getGeometry() instanceof LineString3D) {
+                Feature feaBordes = lastFeaBordes;
+                Feature feaFondos = lastFeaFondos;
+                LineString3D lineString3D = (LineString3D) feaBordes.getGeometry();
+                Polygon3D polygon3D = (Polygon3D) feaFondos.getGeometry();
+                lineString3D.add(firstPt);
+
+                if ((bulge != 0) &&
+                        !((lineString3D.get(lineString3D.pointNr() - 2).getX() == lineString3D.get(lineString3D.pointNr() -
+                                                                                                       1)
+                                                                                                  .getX()) &&
+                        (lineString3D.get(lineString3D.pointNr() - 2).getY() == lineString3D.get(lineString3D.pointNr() -
+                                                                                                     1)
+                                                                                                .getY()))) {
+                    // 041122: Corrección del bug en los bulges de FIXT3.DXF
+                    Vector arc = createArc(new Point2D.Double(lineString3D.get(lineString3D.pointNr() -
+                                                                               2)
+                                                                          .getX(),
+                                                              lineString3D.get(lineString3D.pointNr() -
+                                                                               2)
+                                                                          .getY()),
+                                           new Point2D.Double(lineString3D.get(lineString3D.pointNr() -
+                                                                               1)
+                                                                          .getX(),
+                                                              lineString3D.get(lineString3D.pointNr() -
+                                                                               1)
+                                                                          .getY()),
+                                           bulge);
+                    lineString3D.remove(lineString3D.pointNr() - 1);
+                    lineString3D.remove(lineString3D.pointNr() - 1);
+                    polygon3D.remove(lineString3D.pointNr() - 1);
+                    polygon3D.remove(lineString3D.pointNr() - 1);
+
+                    if (bulge > 0) {
+                        for (int i = 0; i < arc.size(); i++) {
+                            Point2D ptAux = new Point2D.Double();
+                            double z = ((Point3D) lineString3D.get(lineString3D.pointNr() -
+                                                                   2)).getZ();
+                            ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                     ((Point2D) arc.get(i)).getY());
+
+                            Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                          ptAux.getY(), z);
+                            lineString3D.add(ptAux3D);
+                            polygon3D.add(ptAux3D);
+
+                            if (lineString3D.pointNr() == 1) {
+                                firstPt = ptAux3D;
+                            }
+                        }
+                    } else {
+                        for (int i = arc.size() - 1; i >= 0; i--) {
+                            Point2D ptAux = new Point2D.Double();
+                            double z = ((Point3D) lineString3D.get(lineString3D.pointNr() -
+                                                                   2)).getZ();
+                            ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                     ((Point2D) arc.get(i)).getY());
+
+                            Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                          ptAux.getY(), z);
+                            lineString3D.add(ptAux3D);
+                            polygon3D.add(ptAux3D);
+
+                            if ((lineString3D.pointNr() == 1) ||
+                                    (polygon3D.pointNr() == 1)) {
+                                firstPt = ptAux3D;
+                            }
+                        }
+                    }
+
+                    // 041122
+                    bulge = 0.0;
+                }
+
+                if (hasFaces) {
+                    //System.out.println("Sabe que es un poligono.");
+                    //System.out.println("POLYLINE: caras=" +faces.size()+", puntos="+ lineString.pointNr());
+                    LineString ls1 = new LineString();
+                    Polygon pl1 = new Polygon();
+                    LineString ls2 = new LineString();
+                    Polygon pl2 = new Polygon();
+                    LineString ls = new LineString();
+                    Polygon pl = new Polygon();
+                    int[] face;
+                    int i0;
+                    int i1;
+                    Iterator iter = faces.iterator();
+
+                    while (iter.hasNext()) {
+                        face = (int[]) iter.next();
+                        i0 = face[3];
+
+                        for (int i = 0; i < 4; i++) {
+                            i1 = face[i];
+
+                            if (i0 > 0) {
+                                if ((facesIterador % 2) != 0) {
+                                    ls1.add((Point2D) lineString3D.get(i0 - 1));
+                                    pl1.add((Point2D) polygon3D.get(i0 - 1));
+                                } else {
+                                    ls2.add((Point2D) lineString3D.get(i0 - 1));
+                                    pl2.add((Point2D) polygon3D.get(i0 - 1));
+                                }
+
+                                facesIterador = facesIterador + 1;
+                            }
+
+                            i0 = i1;
+                        }
+                    }
+
+                    facesFirstPoint = new Point2D.Double(ls1.get(0).getX(),
+                                                         ls1.get(0).getY());
+
+                    for (int i = 0; i < ls1.pointNr(); i++) {
+                        ls.add(ls1.get(i));
+                        pl.add(pl1.get(i));
+                    }
+
+                    for (int i = ls2.pointNr() - 1; i > 0; i--) {
+                        ls.add(ls2.get(i));
+                        pl.add(pl2.get(i));
+                    }
+
+                    ls.add(facesFirstPoint);
+                    pl.add(facesFirstPoint);
+                    lastFeaBordes.setGeometry(ls);
+                    lastFeaFondos.setGeometry(pl);
+                } else {
+                    lastFeaBordes.setGeometry(lineString3D);
+                    lastFeaFondos.setGeometry(polygon3D);
+                }
+
+                // 041130: Rellena las props con los atributos.
+                completeAttributes(lastFeaBordes);
+                completeAttributes(lastFeaFondos);
+
+                setPolylineElevation(lastFeaBordes, lastFeaFondos);
+
+                if (addingToBlock == false) {
+                    //features.add(lastFeaBordes);
+                    features.add(lastFeaFondos);
+                } else {
+                    //blk.add(lastFeaBordes);
+                    blk.add(lastFeaFondos);
+                }
+
+                lastFeaBordes = null;
+                lastFeaFondos = null;
+            } else if (lastFeaBordes.getGeometry() instanceof InsPoint3D) {
+                // Se trata de un SEQEND despues de un ATTRIB
+                copyAttributes(lastFeaBordes);
+
+                gestionaInsert(lastFeaBordes);
+
+                if (addingToBlock == false) {
+                    features.add(lastFeaFondos);
+                } else {
+                    blk.add(lastFeaBordes);
+                }
+
+                lastFeaBordes = null;
+                lastFeaFondos = null;
+            } else {
+                // Caso no contemplado.
+            }
+        } else {
+            if (lastFeaBordes.getGeometry() instanceof LineString3D) {
+                Feature feaBordes = lastFeaBordes;
+                LineString3D lineString3D = (LineString3D) feaBordes.getGeometry();
+
+                if ((bulge != 0) &&
+                        !((lineString3D.get(lineString3D.pointNr() - 2).getX() == lineString3D.get(lineString3D.pointNr() -
+                                                                                                       1)
+                                                                                                  .getX()) &&
+                        (lineString3D.get(lineString3D.pointNr() - 2).getY() == lineString3D.get(lineString3D.pointNr() -
+                                                                                                     1)
+                                                                                                .getY()))) {
+                    // 041122: Corrección del bug en los bulges de FIXT3.DXF
+                    Vector arc = createArc(new Point2D.Double(lineString3D.get(lineString3D.pointNr() -
+                                                                               2)
+                                                                          .getX(),
+                                                              lineString3D.get(lineString3D.pointNr() -
+                                                                               2)
+                                                                          .getY()),
+                                           new Point2D.Double(lineString3D.get(lineString3D.pointNr() -
+                                                                               1)
+                                                                          .getX(),
+                                                              lineString3D.get(lineString3D.pointNr() -
+                                                                               1)
+                                                                          .getY()),
+                                           bulge);
+                    lineString3D.remove(lineString3D.pointNr() - 1);
+                    lineString3D.remove(lineString3D.pointNr() - 1);
+
+                    if (bulge > 0) {
+                        for (int i = 0; i < arc.size(); i++) {
+                            Point2D ptAux = new Point2D.Double();
+                            double z = ((Point3D) lineString3D.get(lineString3D.pointNr() -
+                                                                   2)).getZ();
+                            ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                     ((Point2D) arc.get(i)).getY());
+
+                            Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                          ptAux.getY(), z);
+                            lineString3D.add(ptAux3D);
+
+                            if (lineString3D.pointNr() == 1) {
+                                firstPt = ptAux3D;
+                            }
+                        }
+                    } else {
+                        for (int i = arc.size() - 1; i >= 0; i--) {
+                            Point2D ptAux = new Point2D.Double();
+                            double z = ((Point3D) lineString3D.get(lineString3D.pointNr() -
+                                                                   2)).getZ();
+                            ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                     ((Point2D) arc.get(i)).getY());
+
+                            Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                          ptAux.getY(), z);
+                            lineString3D.add(ptAux3D);
+
+                            if (lineString3D.pointNr() == 1) {
+                                firstPt = ptAux3D;
+                            }
+                        }
+                    }
+
+                    // 041122
+                    bulge = 0.0;
+                }
+
+                if (hasFaces) {
+                    //System.out.println("POLYLINE: caras=" +faces.size()+", puntos="+ lineString.pointNr());
+                    LineString ls1 = new LineString();
+                    LineString ls2 = new LineString();
+                    LineString ls = new LineString();
+                    int[] face;
+                    int i0;
+                    int i1;
+                    Iterator iter = faces.iterator();
+
+                    while (iter.hasNext()) {
+                        face = (int[]) iter.next();
+                        i0 = face[3];
+
+                        for (int i = 0; i < 4; i++) {
+                            i1 = face[i];
+
+                            if (i0 > 0) {
+                                if ((facesIterador % 2) != 0) {
+                                    ls1.add((Point2D) lineString3D.get(i0 - 1));
+
+                                    //ls.add((Point2D)lineString.get(Math.abs(i1)-1));
+                                } else {
+                                    ls2.add((Point2D) lineString3D.get(i0 - 1));
+
+                                    //ls.add((Point2D)lineString.get(Math.abs(i1)-1));
+                                }
+
+                                facesIterador = facesIterador + 1;
+                            }
+
+                            i0 = i1;
+                        }
+                    }
+
+                    facesFirstPoint = new Point2D.Double(ls1.get(0).getX(),
+                                                         ls1.get(0).getY());
+
+                    for (int i = 0; i < ls1.pointNr(); i++) {
+                        ls.add(ls1.get(i));
+                    }
+
+                    for (int i = ls2.pointNr() - 1; i > 0; i--) {
+                        ls.add(ls2.get(i));
+                    }
+
+                    ls.add(facesFirstPoint);
+                    lastFeaBordes.setGeometry(ls);
+                } else {
+                    lastFeaBordes.setGeometry(lineString3D);
+                }
+
+                // 041130: Rellena las props con los atributos.
+                completeAttributes(lastFeaBordes);
+
+                setPolylineElevation(lastFeaBordes);
+
+                if (addingToBlock == false) {
+                    features.add(lastFeaBordes);
+                } else {
+                    blk.add(lastFeaBordes);
+                }
+
+                lastFeaBordes = null;
+            } else {
+                // Se trata de un SEQEND despues de un ATTRIB
+            }
+        }
+
+        xtruX = 0.0;
+        xtruY = 0.0;
+        xtruZ = 1.0;
+        bulge = 0.0;
+        isDoubleFeatured = false;
+        hasFaces = false;
+        facesIterador = 1;
+    }
+    
+    /**
+     * Establece un valor constante para la elevación de una polilínea.
+     * @param feaBordes, la polilínea.
+     */
+    private void setPolylineElevation(Feature feaBordes) {
+        if (constantPolylineElevation) {
+            Double doub = new Double(lastVertexElevation);
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+        }
+    }
+    
+    /**
+     * Establece un valor constante para la elevación de un polígono.
+     * @param feaBordes, borde del polígono.
+     * @param feaFondos, fondo del polígono.
+     */
+    private void setPolylineElevation(Feature feaBordes, Feature feaFondos) {
+        if (constantPolylineElevation) {
+            Double doub = new Double(lastVertexElevation);
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+            feaFondos.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+            feaFondos.setProp("elevation", string);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#addVertex(org.cresques.io.DxfGroupVector)
+     */
+    public void addVertex(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        int vFlags = 0;
+
+        if (isDoubleFeatured) {
+            Feature feaBordes = lastFeaBordes;
+            Feature feaFondos = lastFeaFondos;
+            LineString3D lineString3D = (LineString3D) feaBordes.getGeometry();
+            Polygon3D polygon3D = (Polygon3D) feaFondos.getGeometry();
+
+            if (grp.hasCode(8)) {
+                feaBordes.setProp("layer", grp.getDataAsString(8));
+                feaFondos.setProp("layer", grp.getDataAsString(8));
+            }
+
+            if (grp.hasCode(70)) {
+                vFlags = grp.getDataAsInt(70);
+            }
+
+            x = grp.getDataAsDouble(10);
+            y = grp.getDataAsDouble(20);
+            z = grp.getDataAsDouble(30);
+
+            Point3D point_in = new Point3D(x, y, z);
+            Point3D xtru = new Point3D(xtruX, xtruY, xtruZ);
+            Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+            x = point_out.getX();
+            y = point_out.getY();
+            z = point_out.getZ();
+
+            if (z != 0.0) {
+                dxf3DFile = true;
+            }
+
+            if ((z != lastVertexElevation) && (lineString3D.pointNr() > 0)) {
+                constantPolylineElevation = false;
+            }
+
+            lastVertexElevation = z;
+
+            //System.out.println("addVertex(): vFlags = " + vFlags);
+            if (((vFlags & 0x80) == 0x80) && ((vFlags & 0x40) == 0)) {
+                int[] face = { 0, 0, 0, 0 };
+                face[0] = grp.getDataAsInt(71);
+                face[1] = grp.getDataAsInt(72);
+                face[2] = grp.getDataAsInt(73);
+                face[3] = grp.getDataAsInt(74);
+                addFace(face);
+            } else if ((vFlags & 0x10) == 0x10) {
+                // Son vertices que se trataran cuando se implementen
+                // los splines. En principio no se hace nada con ellos.
+            } else {
+                Point3D pt = new Point3D(proj.createPoint(x, y).getX(),
+                                         proj.createPoint(x, y).getY(), z);
+                lineString3D.add(pt);
+                polygon3D.add(pt);
+
+                if (lineString3D.pointNr() == 1) {
+                    firstPt = pt;
+                }
+
+                if (bulge == 0.0) {
+                    if (grp.hasCode(42)) {
+                        bulge = grp.getDataAsDouble(42);
+                    } else {
+                        bulge = 0.0;
+                    }
+                } else {
+                    double bulge_aux = 0.0;
+
+                    if (grp.hasCode(42)) {
+                        bulge_aux = grp.getDataAsDouble(42);
+                    } else {
+                        bulge_aux = 0.0;
+                    }
+
+                    //int cnt = lineString.pointNr();
+                    if ((ptAnterior.getX() == pt.getX()) &&
+                            (ptAnterior.getY() == pt.getY())) {
+                        // no se construye el arco
+                    } else {
+                        lineString3D.remove(lineString3D.pointNr() - 1);
+                        lineString3D.remove(lineString3D.pointNr() - 1);
+                        polygon3D.remove(polygon3D.pointNr() - 1);
+                        polygon3D.remove(polygon3D.pointNr() - 1);
+
+                        Vector arc = createArc(ptAnterior, pt, bulge);
+
+                        if (bulge > 0) {
+                            for (int i = 0; i < arc.size(); i++) {
+                                Point2D ptAux = new Point2D.Double();
+                                ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                         ((Point2D) arc.get(i)).getY());
+
+                                Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                              ptAux.getY(), z);
+                                lineString3D.add(ptAux3D);
+                                polygon3D.add(ptAux3D);
+
+                                if (lineString3D.pointNr() == 1) {
+                                    firstPt = ptAux3D;
+                                }
+                            }
+                        } else {
+                            for (int i = arc.size() - 1; i >= 0; i--) {
+                                Point2D ptAux = new Point2D.Double();
+                                ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                         ((Point2D) arc.get(i)).getY());
+
+                                Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                              ptAux.getY(), z);
+                                lineString3D.add(ptAux3D);
+                                polygon3D.add(ptAux3D);
+
+                                if ((lineString3D.pointNr() == 1) ||
+                                        (polygon3D.pointNr() == 1)) {
+                                    firstPt = ptAux3D;
+                                }
+                            }
+                        }
+                    }
+
+                    bulge = bulge_aux;
+                }
+
+                ptAnterior = pt;
+            }
+        } else {
+            Feature feaBordes = lastFeaBordes;
+            LineString3D lineString3D = (LineString3D) feaBordes.getGeometry();
+
+            if (grp.hasCode(8)) {
+                feaBordes.setProp("layer", grp.getDataAsString(8));
+            }
+
+            if (grp.hasCode(70)) {
+                vFlags = grp.getDataAsInt(70);
+            }
+
+            x = grp.getDataAsDouble(10);
+            y = grp.getDataAsDouble(20);
+            z = grp.getDataAsDouble(30);
+
+            Point3D point_in = new Point3D(x, y, z);
+            Point3D xtru = new Point3D(xtruX, xtruY, xtruZ);
+            Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+            x = point_out.getX();
+            y = point_out.getY();
+            z = point_out.getZ();
+
+            if (z != 0.0) {
+                dxf3DFile = true;
+            }
+
+            if ((z != lastVertexElevation) && (lineString3D.pointNr() > 0)) {
+                constantPolylineElevation = false;
+            }
+
+            lastVertexElevation = z;
+
+            if (((vFlags & 0x80) == 0x80) && ((vFlags & 0x40) == 0)) {
+                int[] face = { 0, 0, 0, 0 };
+                face[0] = grp.getDataAsInt(71);
+                face[1] = grp.getDataAsInt(72);
+                face[2] = grp.getDataAsInt(73);
+                face[3] = grp.getDataAsInt(74);
+                addFace(face);
+            } else if ((vFlags & 16) == 16) {
+                // no se hace nada.
+            } else {
+                Point3D pt = new Point3D(proj.createPoint(x, y).getX(),
+                                         proj.createPoint(x, y).getY(), z);
+                lineString3D.add(pt);
+
+                //System.out.println("addVertex: pt = " + pt);
+                if (lineString3D.pointNr() == 1) {
+                    firstPt = pt;
+
+                    //System.out.println("addVertex(Primer pto de la lineString, firstPt=pt): firstPt = " + firstPt);
+                }
+
+                if (bulge == 0.0) {
+                    if (grp.hasCode(42)) {
+                        bulge = grp.getDataAsDouble(42);
+                    } else {
+                        bulge = 0.0;
+                    }
+
+                    //System.out.println("addVertex: El vertice anterior tenia bulge=0.0");
+                } else {
+                    //System.out.println("addVertex: El vertice anterior tiene bulge = " + bulge);
+                    double bulge_aux = 0.0;
+
+                    if (grp.hasCode(42)) {
+                        bulge_aux = grp.getDataAsDouble(42);
+                    } else {
+                        bulge_aux = 0.0;
+                    }
+
+                    if ((ptAnterior.getX() == pt.getX()) &&
+                            (ptAnterior.getY() == pt.getY())) {
+                        // no se construye el arco
+                    } else {
+                        // Borro los puntos inicio y final del arco.
+                        lineString3D.remove(lineString3D.pointNr() - 1);
+                        lineString3D.remove(lineString3D.pointNr() - 1);
+
+                        Vector arc = createArc(ptAnterior, pt, bulge);
+
+                        if (bulge > 0) {
+                            for (int i = 0; i < arc.size(); i++) {
+                                Point2D ptAux = new Point2D.Double();
+                                ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                         ((Point2D) arc.get(i)).getY());
+
+                                Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                              ptAux.getY(), z);
+                                lineString3D.add(ptAux3D);
+
+                                if (lineString3D.pointNr() == 1) {
+                                    firstPt = ptAux3D;
+                                }
+                            }
+                        } else {
+                            for (int i = arc.size() - 1; i >= 0; i--) {
+                                Point2D ptAux = new Point2D.Double();
+                                ptAux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                         ((Point2D) arc.get(i)).getY());
+
+                                Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                              ptAux.getY(), z);
+                                lineString3D.add(ptAux3D);
+
+                                if (lineString3D.pointNr() == 1) {
+                                    firstPt = ptAux3D;
+                                }
+                            }
+                        }
+                    }
+
+                    bulge = bulge_aux;
+                }
+
+                ptAnterior = pt;
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createLwPolyline(org.cresques.io.DxfGroupVector)
+     */
+    public void createLwPolyline(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double elev = 0.0;
+        DxfGroup g = null;
+        LineString3D lineString3D = new LineString3D();
+        Polygon3D polygon3D = new Polygon3D();
+
+        //Geometry geometria;
+        //Feature feature= new Feature();
+        Feature feaBordes = new Feature();
+        Feature feaFondos = new Feature();
+        int flags = 0;
+        //int NumberOfVertices = 0;
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        //feature.setProp("dxfEntity", "LwPolyline");
+        feaBordes.setProp("dxfEntity", "LwPolyline");
+        feaFondos.setProp("dxfEntity", "LwPolyline");
+
+        //if (grp.hasCode(8)) {
+            //feature.setProp("layer", grp.getDataAsString(8));
+        //    feaBordes.setProp("layer", grp.getDataAsString(8));
+        //}
+
+        feaBordes.setProp("layer", grp.getDataAsString(8));
+        feaFondos.setProp("layer", grp.getDataAsString(8));
+
+        if (grp.hasCode(38)) {
+            elev = grp.getDataAsDouble(38);
+
+            if (elev != 0.0) {
+                dxf3DFile = true;
+            }
+
+            Double doub = new Double(elev);
+            String string = doub.toString();
+
+            //feature.setProp("elevation", string);
+            feaBordes.setProp("elevation", string);
+            feaFondos.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+
+            //feature.setProp("elevation", doub.toString());
+            feaBordes.setProp("elevation", doub.toString());
+            feaFondos.setProp("elevation", doub.toString());
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+
+            //feature.setProp("thickness", string);
+            feaBordes.setProp("thickness", string);
+            feaFondos.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+
+            //feature.setProp("thickness", doub.toString());
+            feaBordes.setProp("thickness", doub.toString());
+            feaFondos.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+
+            //feature.setProp("color", string);
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "false");
+            feaFondos.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+
+            //feature.setProp("color", string);
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "true");
+            feaFondos.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(70)) {
+            flags = grp.getDataAsInt(70);
+        }
+
+        if ((flags & 0x01) == 0x01) {
+            //geometria = new Polygon();
+            feaBordes.setGeometry(lineString3D);
+            feaFondos.setGeometry(polygon3D);
+            isDoubleFeatured = true;
+        } else {
+            //geometria = new LineString();
+            feaBordes.setGeometry(lineString3D);
+            isDoubleFeatured = false;
+        }
+
+        //if (grp.hasCode(90)) {
+        //    NumberOfVertices = grp.getDataAsInt(90);
+        //}
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        int j = 0;
+        double firstX = 0.0;
+        double firstY = 0.0;
+        boolean hasBulge = false;
+        double bulgeLwp = 0.0;
+
+        for (int i = 0; i < grp.size(); i++) {
+            g = (DxfGroup) grp.get(i);
+
+            if (g.getCode() == 10) {
+                j++;
+                x = ((Double) g.getData()).doubleValue();
+            } else if (g.getCode() == 20) {
+                y = ((Double) g.getData()).doubleValue();
+
+                // Añadiendo extrusion a LwPolyline ...
+                Point3D point_in1 = new Point3D(x, y, elev);
+                Point3D xtru = new Point3D(extx, exty, extz);
+                Point3D point_out1 = DxfCalXtru.CalculateXtru(point_in1, xtru);
+                x = point_out1.getX();
+                y = point_out1.getY();
+                elev = point_out1.getZ();
+
+                //
+                if (hasBulge) {
+                    Point2D finalPoint = new Point2D.Double(x, y);
+
+                    if ((((LineString3D) lineString3D).get(lineString3D.pointNr() -
+                                                               1).getX() == finalPoint.getX()) &&
+                            (((LineString3D) lineString3D).get(lineString3D.pointNr() -
+                                                                   1).getY() == finalPoint.getY())) {
+                        // no se construye el arco
+                    } else {
+                        Vector arc = createArc(((LineString3D) lineString3D).get(lineString3D.pointNr() -
+                                                                                 1),
+                                               finalPoint, bulgeLwp);
+                        lineString3D.remove(lineString3D.pointNr() - 1);
+
+                        if (isDoubleFeatured) {
+                            polygon3D.remove(polygon3D.pointNr() - 1);
+                        }
+
+                        if (bulgeLwp > 0) {
+                            for (int k = 0; k < arc.size(); k++) {
+                                Point2D ptAux = new Point2D.Double();
+                                ptAux = proj.createPoint(((Point2D) arc.get(k)).getX(),
+                                                         ((Point2D) arc.get(k)).getY());
+
+                                //System.out.println("createLwPolyline: ptAux = " + ptAux);
+                                Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                              ptAux.getY(), elev);
+                                lineString3D.add(ptAux3D);
+
+                                //if (lineString.pointNr() == 1) firstPt = ptAux;
+                                if (isDoubleFeatured) {
+                                    polygon3D.add(ptAux3D);
+                                }
+
+                                if ((lineString3D.pointNr() == 1) ||
+                                        (polygon3D.pointNr() == 1)) {
+                                    firstPt = ptAux3D;
+                                }
+                            }
+                        } else {
+                            for (int k = arc.size() - 1; k >= 0; k--) {
+                                Point2D ptAux = new Point2D.Double();
+                                ptAux = proj.createPoint(((Point2D) arc.get(k)).getX(),
+                                                         ((Point2D) arc.get(k)).getY());
+
+                                Point3D ptAux3D = new Point3D(ptAux.getX(),
+                                                              ptAux.getY(), elev);
+                                lineString3D.add(ptAux3D);
+
+                                if (isDoubleFeatured) {
+                                    polygon3D.add(ptAux3D);
+                                }
+
+                                if ((lineString3D.pointNr() == 1) ||
+                                        (polygon3D.pointNr() == 1)) {
+                                    firstPt = ptAux3D;
+                                }
+                            }
+                        }
+                    }
+
+                    hasBulge = false;
+                    bulgeLwp = 0.0;
+                } else {
+                    //System.out.println("createLwPolyline: hasBulge siempre es false");
+                    Point3D ptAux3D = new Point3D(proj.createPoint(x, y).getX(),
+                                                  proj.createPoint(x, y).getY(),
+                                                  elev);
+                    lineString3D.add(ptAux3D);
+
+                    if (isDoubleFeatured) {
+                        polygon3D.add(ptAux3D);
+                    }
+                }
+
+                if (j == 1) {
+                    firstX = x;
+                    firstY = y;
+                }
+
+                x = 0.0;
+                y = 0.0;
+            } else if (g.getCode() == 42 && ((Double)g.getData()).doubleValue()!=0.0) { // Cuando los bulges eran 0.000 se provocaban errores
+                //System.out.println("createLwPolyline: Lee el bulgeLwp");
+                hasBulge = true;
+                bulgeLwp = ((Double) g.getData()).doubleValue();
+            }
+        }
+
+        if (isDoubleFeatured) {
+            //geometria.add(proj.createPoint(firstX, firstY));          
+            Point3D ptAux3D = new Point3D(proj.createPoint(firstX, firstY).getX(),
+                                          proj.createPoint(firstX, firstY).getY(),
+                                          elev);
+            lineString3D.add(ptAux3D);
+            polygon3D.add(ptAux3D);
+        }
+
+        lastFeaBordes = feaBordes;
+
+        if (isDoubleFeatured) {
+            lastFeaFondos = feaFondos;
+        }
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(lastFeaBordes);
+        completeAttributes(lastFeaFondos);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            if (isDoubleFeatured) {
+                features.add(feaFondos);
+            } else {
+                features.add(feaBordes);
+            }
+        } else {
+            //System.out.println("createLwPolyline(): Añadimos una lwpolilinea al bloque " + iterator);
+            if (isDoubleFeatured) {
+                blk.add(feaFondos);
+            } else {
+                blk.add(feaBordes);
+            }
+        }
+
+        isDoubleFeatured = false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createLine(org.cresques.io.DxfGroupVector)
+     */
+    public void createLine(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z1 = 0.0;
+        double z2 = 0.0;
+        double elev = 0.0;
+        DxfGroup g = null;
+        Point2D pt1 = null;
+        Point2D pt2 = null;
+        LineString3D lineString3D = new LineString3D();
+        Feature feature = new Feature();
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        feature.setProp("dxfEntity", "Line");
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feature.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z1 = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)) {
+            z1 = grp.getDataAsDouble(30);
+            elev = z1;
+            Double doub = new Double(elev);
+            String string = doub.toString();
+            //feature.setProp("elevation", string);
+        }*/
+        pt1 = proj.createPoint(x, y);
+        x = grp.getDataAsDouble(11);
+        y = grp.getDataAsDouble(21);
+        z2 = grp.getDataAsDouble(31);
+
+        /*if (grp.hasCode(31)) {
+            z2 = grp.getDataAsDouble(31);
+        } else {
+            // Cuando no se especifican z para las lineas se asume que la
+            // z es cero.
+            Double doub = new Double(0.0);
+            //feature.setProp("elevation", doub.toString());
+        }*/
+        pt2 = proj.createPoint(x, y);
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in1 = new Point3D(pt1.getX(), pt1.getY(), z1);
+        Point3D point_in2 = new Point3D(pt2.getX(), pt2.getY(), z2);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out1 = DxfCalXtru.CalculateXtru(point_in1, xtru);
+        Point3D point_out2 = DxfCalXtru.CalculateXtru(point_in2, xtru);
+
+        if (point_out1.getZ() != 0.0) {
+            dxf3DFile = true;
+        }
+
+        if (point_out2.getZ() != 0.0) {
+            dxf3DFile = true;
+        }
+
+        if (point_out1.getZ() == point_out2.getZ()) {
+            elev = z1;
+
+            Double doub = new Double(elev);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        } else {
+            elev = 0.0;
+
+            Double doub = new Double(elev);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        }
+
+        //pt1.setLocation(point_out1);
+        //pt2.setLocation(point_out2);
+        lineString3D.add(point_out1);
+        lineString3D.add(point_out2);
+
+        feature.setGeometry(lineString3D);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            //System.out.println("createLine(): Añadimos una linea a la lista de entidades");
+            features.add(feature);
+        } else {
+            //System.out.println("createLine(): Añadimos una linea al bloque " + iterator);
+            blk.add(feature);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createText(org.cresques.io.DxfGroupVector)
+     */
+    public void createText(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double h = 0.0;
+        double rot = 0.0;
+        DxfGroup g = null;
+
+        //Point3D pt1 = null, pt2 = null;
+        Point3D pt = null;
+        org.cresques.px.gml.Point3D point = new org.cresques.px.gml.Point3D();
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        point.setTextPoint(true);
+
+        Feature feature = new Feature();
+
+        feature.setProp("dxfEntity", "Text");
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feature.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(1)) {
+            String strAux1 = grp.getDataAsString(1);
+            strAux1 = DxfConvTexts.ConvertText(strAux1);
+            feature.setProp("text", strAux1);
+        } else {
+            feature.setProp("text", "No Text Code");
+        }
+
+        if (grp.hasCode(40)) {
+            Double heightD = new Double(grp.getDataAsDouble(40));
+            String heightS = heightD.toString();
+            feature.setProp("textHeight", heightS);
+        } else {
+            feature.setProp("textHeight", "20.0");
+        }
+
+        if (grp.hasCode(50)) {
+            Double rotD = new Double(grp.getDataAsDouble(50));
+            String rotS = rotD.toString();
+            feature.setProp("textRotation", rotS);
+
+            //System.out.println("rotS = " + rotS);
+        } else {
+            feature.setProp("textRotation", "0.0");
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)){
+            Double doub = new Double(z);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("elevation", doub.toString());
+        }*/
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doub = new Double(z);
+        feature.setProp("elevation", doub.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        point.add(new Point3D(x, y, z));
+        feature.setGeometry(point);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            features.add(feature);
+        } else {
+            //System.out.println("createText(): Añadimos un text al bloque " + iterator);
+            blk.add(feature);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createMText(org.cresques.io.DxfGroupVector)
+     */
+    public void createMText(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double h = 0.0;
+        double rot = 0.0;
+        DxfGroup g = null;
+
+        //Point2D pt1 = null, pt2 = null;
+        Point3D pt = null;
+        org.cresques.px.gml.Point3D point = new org.cresques.px.gml.Point3D();
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        point.setTextPoint(true);
+
+        Feature feature = new Feature();
+
+        feature.setProp("dxfEntity", "Text");
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feature.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(1)) {
+            String strAux1 = grp.getDataAsString(1);
+            strAux1 = DxfConvTexts.ConvertText(strAux1);
+            feature.setProp("text", strAux1);
+        } else {
+            feature.setProp("text", "No Text Code");
+        }
+
+        if (grp.hasCode(40)) {
+            Double heightD = new Double(grp.getDataAsDouble(40));
+            String heightS = heightD.toString();
+            feature.setProp("textHeight", heightS);
+        } else {
+            feature.setProp("textHeight", "20.0");
+        }
+
+        if (grp.hasCode(50)) {
+            Double rotD = new Double(grp.getDataAsDouble(50));
+            String rotS = rotD.toString();
+            feature.setProp("textRotation", rotS);
+
+            //System.out.println("rotS = " + rotS);
+        } else {
+            feature.setProp("textRotation", "0.0");
+        }
+
+        if (grp.hasCode(71)) {
+            int attachPoint = grp.getDataAsInt(71);
+
+            if (attachPoint == 1) {
+            } else if (attachPoint == 2) {
+            } else if (attachPoint == 3) {
+            } else if (attachPoint == 4) {
+            } else if (attachPoint == 5) {
+            } else if (attachPoint == 6) {
+            } else if (attachPoint == 7) {
+            } else if (attachPoint == 8) {
+            } else if (attachPoint == 9) {
+            }
+        }
+
+        if (grp.hasCode(72)) {
+            int drawDirection = grp.getDataAsInt(71);
+
+            if (drawDirection == 1) {
+            } else if (drawDirection == 3) {
+            } else if (drawDirection == 5) {
+            }
+        }
+
+        if (grp.hasCode(73)) {
+            int spacingStyle = grp.getDataAsInt(71);
+
+            if (spacingStyle == 1) {
+            } else if (spacingStyle == 2) {
+            }
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)){
+            z = grp.getDataAsDouble(30);
+            Double doub = new Double(z);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("elevation", doub.toString());
+        }*/
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doub = new Double(z);
+        feature.setProp("elevation", doub.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        point.add(new Point3D(x, y, z));
+        feature.setGeometry(point);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            features.add(feature);
+        } else {
+            //System.out.println("createText(): Añadimos un text al bloque " + iterator);
+            blk.add(feature);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createPoint(org.cresques.io.DxfGroupVector)
+     */
+    public void createPoint(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        DxfGroup g = null;
+        Point3D pt = null;
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+        org.cresques.px.gml.Point3D point = new org.cresques.px.gml.Point3D();
+        Feature feature = new Feature();
+
+        feature.setProp("dxfEntity", "Point");
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feature.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+            Double doub = new Double(z);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("elevation", doub.toString());
+        }*/
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doub = new Double(z);
+        feature.setProp("elevation", doub.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        point.add(new Point3D(x, y, z));
+        feature.setGeometry(point);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+
+        /*for (int i=0;i<attributes.size();i++) {
+            String[] att = new String[2];
+            att = (String[])attributes.get(i);
+            feature.setProp(att[0],att[1]);
+        }*/
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            features.add(feature);
+        } else {
+            //System.out.println("createPoint(): Añadimos un punto al bloque " + iterator);
+            blk.add(feature);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createCircle(org.cresques.io.DxfGroupVector)
+     */
+    public void createCircle(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double r = 0.0;
+        Point3D firstPt = new Point3D();
+        DxfGroup g = null;
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+        LineString3D lineString3D = new LineString3D();
+        Polygon3D polygon3D = new Polygon3D();
+        Feature feaBordes = new Feature();
+        Feature feaFondos = new Feature();
+
+        feaBordes.setProp("dxfEntity", "Circle");
+        feaFondos.setProp("dxfEntity", "Circle");
+
+        if (grp.hasCode(8)) {
+            feaBordes.setProp("layer", grp.getDataAsString(8));
+        }
+
+        feaFondos.setProp("layer", grp.getDataAsString(8));
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feaBordes.setProp("thickness", string);
+            feaFondos.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feaBordes.setProp("thickness", doub.toString());
+            feaFondos.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "false");
+            feaFondos.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "true");
+            feaFondos.setProp("colorByLayer", "true");
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+        }
+        
+
+        /*if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+            Double doub = new Double(z);
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+            feaFondos.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            feaBordes.setProp("elevation", doub.toString());
+            feaFondos.setProp("elevation", doub.toString());
+        }*/
+        if (grp.hasCode(40)) {
+            r = grp.getDataAsDouble(40);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doub = new Double(z);
+        feaBordes.setProp("elevation", doub.toString());
+        feaFondos.setProp("elevation", doub.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        Point2D c = proj.createPoint(x, y);
+        Point3D center = new Point3D(c.getX(), c.getY(), z);
+        Point3D[] pts = new Point3D[360];
+        int angulo = 0;
+
+        for (angulo = 0; angulo < 360; angulo++) {
+            pts[angulo] = new Point3D(center.getX(), center.getY(),
+                                      center.getZ());
+            pts[angulo] = new Point3D(pts[angulo].getX() +
+                                      (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                      pts[angulo].getY() +
+                                      (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                      center.getZ());
+
+            if (pts.length == 1) {
+                firstPt = pts[angulo];
+            }
+        }
+
+        for (int i = 0; i < pts.length; i++) {
+            lineString3D.add(pts[i]);
+            polygon3D.add(pts[i]);
+        }
+
+        feaBordes.setGeometry(lineString3D);
+        feaFondos.setGeometry(polygon3D);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feaBordes);
+        completeAttributes(feaFondos);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            //System.out.println("createCircle(): Añade un circulo a la lista de entidades");
+            //features.add(feaBordes);
+            features.add(feaFondos);
+        } else {
+            //System.out.println("createCircle(): Añadimos un circulo al bloque " + iterator);
+            //blk.add(feaBordes);
+            blk.add(feaFondos);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createArc(org.cresques.io.DxfGroupVector)
+     */
+    public void createArc(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double r = 0.0;
+        double empieza = 0.0;
+        double acaba = 0.0;
+        DxfGroup g = null;
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+        LineString3D lineString3D = new LineString3D();
+        Feature feature = new Feature();
+
+        feature.setProp("dxfEntity", "Arc");
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feature.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        if (grp.hasCode(30))
+        {
+        	z = grp.getDataAsDouble(30);
+        }
+
+        /*if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+            Double doub = new Double(z);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("elevation", doub.toString());
+        }*/
+        if (grp.hasCode(40)) {
+            r = grp.getDataAsDouble(40);
+        }
+
+        if (grp.hasCode(50)) {
+            empieza = grp.getDataAsDouble(50);
+        }
+
+        if (grp.hasCode(51)) {
+            acaba = grp.getDataAsDouble(51);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doub = new Double(z);
+        feature.setProp("elevation", doub.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        Point2D c = proj.createPoint(x, y);
+        Point3D center = new Point3D(c.getX(), c.getY(), z);
+
+        //System.out.println("empieza = " + empieza + ", acaba = " + acaba);
+        int iempieza = (int) empieza;
+        int iacaba = (int) acaba;
+
+        //System.out.println("iempieza = " + iempieza + ", iacaba = " + iacaba);
+        double angulo = 0;
+        Point3D[] pts = null;
+
+        if (empieza <= acaba) {
+            pts = new Point3D[(iacaba - iempieza) + 2];
+            angulo = empieza;
+            pts[0] = new Point3D(center.getX() +
+                                 (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                 center.getY() +
+                                 (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                 center.getZ());
+
+            for (int i = 1; i <= ((iacaba - iempieza) + 1); i++) {
+                angulo = (double) (iempieza + i);
+                pts[i] = new Point3D(center.getX() +
+                                     (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                     center.getY() +
+                                     (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                     center.getZ());
+            }
+
+            angulo = acaba;
+            pts[(iacaba - iempieza) + 1] = new Point3D(center.getX() +
+                                                       (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                                       center.getY() +
+                                                       (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                                       center.getZ());
+        } else {
+            pts = new Point3D[(360 - iempieza) + iacaba + 2];
+            angulo = empieza;
+
+            //System.out.println("pts[0] = " + pts[0] + ", center = " + center + ", angulo = " + angulo);
+            pts[0] = new Point3D(center.getX() +
+                                 (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                 center.getY() +
+                                 (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                 center.getZ());
+
+            for (int i = 1; i <= (360 - iempieza); i++) {
+                angulo = (double) (iempieza + i);
+                pts[i] = new Point3D(center.getX() +
+                                     (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                     center.getY() +
+                                     (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                     center.getZ());
+            }
+
+            for (int i = (360 - iempieza) + 1;
+                     i <= ((360 - iempieza) + iacaba); i++) {
+                angulo = (double) (i - (360 - iempieza));
+                pts[i] = new Point3D(center.getX() +
+                                     (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                     center.getY() +
+                                     (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                     center.getZ());
+            }
+
+            angulo = acaba;
+            pts[(360 - iempieza) + iacaba + 1] = new Point3D(center.getX() +
+                                                             (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                                             center.getY() +
+                                                             (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                                             center.getZ());
+        }
+
+        for (int i = 0; i < pts.length; i++) {
+            lineString3D.add(pts[i]);
+        }
+
+        feature.setGeometry(lineString3D);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            features.add(feature);
+        } else {
+            //System.out.println("createArc(): Añadimos un arco al bloque " + iterator);
+            blk.add(feature);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createInsert(org.cresques.io.DxfGroupVector)
+     */
+    public void createInsert(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        DxfGroup g = null;
+        Point3D pt = new Point3D(0.0, 0.0, 0.0);
+        Point3D scaleFactor = new Point3D(1.0, 1.0, 1.0);
+        double rotAngle = 0.0;
+        String blockName = "";
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        InsPoint3D insert = new InsPoint3D();
+        Feature feature = new Feature();
+        org.cresques.px.gml.Point3D secondGeom = new org.cresques.px.gml.Point3D();
+        Feature secondFeat = new Feature();
+        int attributesFollowFlag = 0;
+
+        feature.setProp("dxfEntity", "Insert");
+        secondFeat.setProp("dxfEntity", "Insert");
+
+        if (grp.hasCode(2)) {
+            blockName = grp.getDataAsString(2);
+
+            //feature.setProp("blockName", blockName);
+            insert.setBlockName(blockName);
+        }
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+            secondFeat.setProp("layer", grp.getDataAsString(8));
+        }
+
+        Double doub = new Double(0.0);
+        secondFeat.setProp("thickness", doub.toString());
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            secondFeat.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+            secondFeat.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            secondFeat.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+            secondFeat.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(66)) {
+            attributesFollowFlag = grp.getDataAsInt(66);
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+            Double doubz = new Double(z);
+            String string = doubz.toString();
+            feature.setProp("elevation", string);
+            secondFeat.setProp("elevation", string);
+        } else {
+            Double elev = new Double(z);
+            //feature.setProp("elevation", doub.toString());
+            feature.setProp("elevation", elev.toString());
+            secondFeat.setProp("elevation", elev.toString());
+        }*/
+        if (grp.hasCode(41)) {
+            scaleFactor.setLocation(grp.getDataAsDouble(41), scaleFactor.getY());
+            insert.setScaleFactor(scaleFactor);
+        } else {
+            insert.setScaleFactor(scaleFactor);
+        }
+
+        if (grp.hasCode(42)) {
+            scaleFactor.setLocation(scaleFactor.getX(), grp.getDataAsDouble(42));
+            insert.setScaleFactor(scaleFactor);
+        } else {
+            insert.setScaleFactor(scaleFactor);
+        }
+
+        if (grp.hasCode(43)) {
+            scaleFactor = new Point3D(scaleFactor.getX(), scaleFactor.getY(),
+                                      grp.getDataAsDouble(43));
+            insert.setScaleFactor(scaleFactor);
+        } else {
+            insert.setScaleFactor(scaleFactor);
+        }
+
+        if (grp.hasCode(50)) {
+            rotAngle = grp.getDataAsDouble(50);
+            insert.setRotAngle(rotAngle);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doubz = new Double(z);
+        feature.setProp("elevation", doubz.toString());
+        secondFeat.setProp("elevation", doubz.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        insert.setBlkList(blkList);
+
+        insert.encuentraBloque(blockName);
+
+        insert.add(new Point3D(x, y, z));
+        secondGeom.add(new Point3D(x, y, z));
+
+        feature.setGeometry(insert);
+        secondFeat.setGeometry(secondGeom);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+        completeAttributes(secondFeat);
+
+        /*for (int i=0;i<attributes.size();i++) {
+            String[] att = new String[2];
+            att = (String[])attributes.get(i);
+            secondFeat.setProp(att[0],att[1]);
+        }*/
+        if ((insert.getBlockFound() == true) && (attributesFollowFlag != 1)) {
+            gestionaInsert(feature);
+        }
+
+        //if (addingToBlock == false) {
+        //features.add(secondFeat);
+        //}
+        //if (addingToBlock == true/* && insert.getBlockFound() == true*/) {
+        //System.out.println("createInsert(): Añadimos un insert al bloque " + iterator);
+        //blk.add(feature);
+        //}
+        // 041129: Añadido para implementar los ATTRIBS.
+        if (attributesFollowFlag == 1) {
+            isDoubleFeatured = true;
+            lastFeaBordes = feature;
+            lastFeaFondos = secondFeat;
+        } else {
+            if (addingToBlock == false) {
+                features.add(secondFeat);
+            }
+
+            if (addingToBlock == true /* && insert.getBlockFound() == true*/) {
+                //System.out.println("createInsert(): Añadimos un insert al bloque " + iterator);
+                blk.add(feature);
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createSolid(org.cresques.io.DxfGroupVector)
+     */
+    public void createSolid(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z1 = 0.0;
+        double z2 = 0.0;
+        double z3 = 0.0;
+        double z4 = 0.0;
+        DxfGroup g = null;
+
+        //Point2D pt1 = null, pt2 = null, pt3 = null, pt4 = null;
+        Point3D[] pts = new Point3D[4];
+
+        //DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        LineString3D lineString3D = new LineString3D();
+        Polygon3D polygon3D = new Polygon3D();
+        Feature feaBordes = new Feature();
+        Feature feaFondos = new Feature();
+
+        //double elev = 0;
+        feaBordes.setProp("dxfEntity", "Solid");
+        feaFondos.setProp("dxfEntity", "Solid");
+
+        if (grp.hasCode(8)) {
+            feaBordes.setProp("layer", grp.getDataAsString(8));
+        }
+
+        feaFondos.setProp("layer", grp.getDataAsString(8));
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z1 = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)) {
+            z1 = grp.getDataAsDouble(30);
+        } else {
+            Double doub = new Double(0.0);
+            feaBordes.setProp("elevation", doub.toString());
+            feaFondos.setProp("elevation", doub.toString());
+        }*/
+        Point2D pto = proj.createPoint(x, y);
+        Point3D pto3D = new Point3D(pto.getX(), pto.getY(), z1);
+        pts[0] = pto3D;
+        x = grp.getDataAsDouble(11);
+        y = grp.getDataAsDouble(21);
+        z2 = grp.getDataAsDouble(31);
+        pto = proj.createPoint(x, y);
+        pto3D = new Point3D(pto.getX(), pto.getY(), z2);
+        pts[1] = pto3D;
+        x = grp.getDataAsDouble(12);
+        y = grp.getDataAsDouble(22);
+        z3 = grp.getDataAsDouble(32);
+        pto = proj.createPoint(x, y);
+        pto3D = new Point3D(pto.getX(), pto.getY(), z3);
+        pts[2] = pto3D;
+
+        if (grp.hasCode(13)) {
+            x = grp.getDataAsDouble(13);
+        }
+
+        if (grp.hasCode(23)) {
+            y = grp.getDataAsDouble(23);
+        }
+
+        if (grp.hasCode(33)) {
+            z4 = grp.getDataAsDouble(33);
+        }
+
+        pto = proj.createPoint(x, y);
+        pto3D = new Point3D(pto.getX(), pto.getY(), z4);
+        pts[3] = pto3D;
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feaBordes.setProp("thickness", string);
+            feaFondos.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feaBordes.setProp("thickness", doub.toString());
+            feaFondos.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "false");
+            feaFondos.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "true");
+            feaFondos.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in1 = new Point3D(pts[0].getX(), pts[0].getY(), z1);
+        Point3D point_in2 = new Point3D(pts[1].getX(), pts[1].getY(), z2);
+        Point3D point_in3 = new Point3D(pts[2].getX(), pts[2].getY(), z3);
+        Point3D point_in4 = new Point3D(pts[3].getX(), pts[3].getY(), z4);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out1 = DxfCalXtru.CalculateXtru(point_in1, xtru);
+        Point3D point_out2 = DxfCalXtru.CalculateXtru(point_in2, xtru);
+        Point3D point_out3 = DxfCalXtru.CalculateXtru(point_in3, xtru);
+        Point3D point_out4 = DxfCalXtru.CalculateXtru(point_in4, xtru);
+        pts[0] = new Point3D(point_out1);
+        pts[1] = new Point3D(point_out2);
+        pts[2] = new Point3D(point_out3);
+        pts[3] = new Point3D(point_out4);
+
+        if ((pts[0].getZ() != 0.0) || (pts[1].getZ() != 0.0) ||
+                (pts[2].getZ() != 0.0) || (pts[3].getZ() != 0.0)) {
+            dxf3DFile = true;
+        }
+
+        Point3D aux = new Point3D(pts[2]);
+        pts[2] = new Point3D(pts[3]);
+        pts[3] = aux;
+
+        Double doub = new Double(0.0);
+        if ((pts[0].getZ() == pts[1].getZ()) &&
+                (pts[1].getZ() == pts[2].getZ()) &&
+                (pts[2].getZ() == pts[3].getZ())) {
+            doub = new Double(pts[0].getZ());
+        }
+        String string = doub.toString();
+        feaBordes.setProp("elevation", string);
+        feaFondos.setProp("elevation", string);
+
+        for (int i = 0; i < pts.length; i++) {
+            lineString3D.add(pts[i]);
+            polygon3D.add(pts[i]);
+        }
+
+        // Para cerrarlos.
+        lineString3D.add(pts[0]);
+        polygon3D.add(pts[0]);
+
+        feaBordes.setGeometry(lineString3D);
+        feaFondos.setGeometry(polygon3D);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feaBordes);
+        completeAttributes(feaFondos);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            //System.out.println("createSolid(): Añade un solid a la lista de entidades");
+            //features.add(feaBordes);
+            features.add(feaFondos);
+        } else {
+            //System.out.println("createSolid(): Añadimos un circulo al bloque " + iterator);
+            //blk.add(feaBordes);
+            blk.add(feaFondos);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createSpline(org.cresques.io.DxfGroupVector)
+     */
+    public void createSpline(DxfGroupVector grp) throws Exception {
+        double x = 0.0; //elev = 0.0;
+        double y = 0.0; //elev = 0.0;
+        double z = 0.0; //elev = 0.0;
+
+        //double elev = 0.0;
+        DxfGroup g = null;
+        LineString3D lineString3D = new LineString3D();
+        Polygon3D polygon3D = new Polygon3D();
+
+        //Geometry geometria;
+        //Feature feature= new Feature();
+        Feature feaBordes = new Feature();
+        Feature feaFondos = new Feature();
+        int flags = 0;
+
+        //feature.setProp("dxfEntity", "LwPolyline");
+        feaBordes.setProp("dxfEntity", "Spline");
+        feaFondos.setProp("dxfEntity", "Spline");
+
+        if (grp.hasCode(8)) {
+            //feature.setProp("layer", grp.getDataAsString(8));
+            feaBordes.setProp("layer", grp.getDataAsString(8));
+            feaFondos.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+
+            //feature.setProp("thickness", string);
+            feaBordes.setProp("thickness", string);
+            feaFondos.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+
+            //feature.setProp("thickness", doub.toString());
+            feaBordes.setProp("thickness", doub.toString());
+            feaFondos.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+
+            //feature.setProp("color", string);
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "false");
+            feaFondos.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+
+            //feature.setProp("color", string);
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "true");
+            feaFondos.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(70)) {
+            flags = grp.getDataAsInt(70);
+        }
+
+        if ((flags & 0x01) == 0x01) {
+            //geometria = new Polygon();
+            feaBordes.setGeometry(lineString3D);
+            feaFondos.setGeometry(polygon3D);
+            isDoubleFeatured = true;
+        } else {
+            //geometria = new LineString();
+            feaBordes.setGeometry(lineString3D);
+            isDoubleFeatured = false;
+        }
+
+        int j = 0;
+        double firstX = 0.0;
+        double firstY = 0.0;
+        double firstZ = 0.0;
+
+        for (int i = 0; i < grp.size(); i++) {
+            g = (DxfGroup) grp.get(i);
+
+            if (g.getCode() == 10) {
+                j++;
+                x = ((Double) g.getData()).doubleValue();
+            } else if (g.getCode() == 20) {
+                y = ((Double) g.getData()).doubleValue();
+            } else if (g.getCode() == 30) {
+                z = ((Double) g.getData()).doubleValue();
+
+                Point2D p = proj.createPoint(x, y);
+                Point3D p3d = new Point3D(p.getX(), p.getY(), z);
+                lineString3D.add(p3d);
+
+                if (isDoubleFeatured) {
+                    polygon3D.add(p3d);
+                }
+
+                if (j == 1) {
+                    firstX = x;
+                    firstY = y;
+                    firstZ = z;
+                }
+
+                //elev = z;
+                x = 0.0;
+                y = 0.0;
+                z = 0.0;
+            }
+        }
+
+        //Double doub = new Double(elev);
+        //String string = doub.toString();
+        //feature.setProp("elevation", string);
+        //feaBordes.setProp("elevation", string);
+        //feaFondos.setProp("elevation", string);
+        if (isDoubleFeatured) {
+            Point2D p = proj.createPoint(firstX, firstY);
+            Point3D p3d = new Point3D(p.getX(), p.getY(), z);
+            lineString3D.add(p3d);
+            polygon3D.add(p3d);
+        }
+
+        double zprev = 0;
+        boolean constSplineElev = true;
+
+        for (int i = 0; i < lineString3D.pointNr(); i++) {
+            z = lineString3D.getPoint3D(i).getZ();
+
+            if (z != 0.0) {
+                dxf3DFile = true;
+            }
+
+            if ((i > 0) && (z != zprev)) {
+                constSplineElev = false;
+            }
+
+            zprev = z;
+        }
+
+        if (constSplineElev) {
+            Double doub = new Double(lineString3D.getPoint3D(0).getZ());
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+
+            if (isDoubleFeatured) {
+                feaFondos.setProp("elevation", string);
+            }
+        } else {
+            Double doub = new Double(0.0);
+            String string = doub.toString();
+            feaBordes.setProp("elevation", string);
+
+            if (isDoubleFeatured) {
+                feaFondos.setProp("elevation", string);
+            }
+        }
+
+        lastFeaBordes = feaBordes;
+
+        if (isDoubleFeatured) {
+            lastFeaFondos = feaFondos;
+        }
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feaBordes);
+        completeAttributes(feaFondos);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            if (isDoubleFeatured) {
+                features.add(feaFondos);
+            } else {
+                features.add(feaBordes);
+            }
+        } else {
+            //System.out.println("createLwPolyline(): Añadimos una lwpolilinea al bloque " + iterator);
+            if (isDoubleFeatured) {
+                blk.add(feaFondos);
+            } else {
+                blk.add(feaBordes);
+            }
+        }
+
+        isDoubleFeatured = false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createAttdef(org.cresques.io.DxfGroupVector)
+     */
+    public void createAttdef(DxfGroupVector grp) throws Exception {
+        DxfGroup g = null;
+
+        String defaultValue = "";
+        String tagString = "";
+        String textStyleName = "";
+        String[] attribute = new String[2];
+        boolean tagDefined = false;
+        boolean defValDefined = false;
+
+        if (grp.hasCode(1)) {
+            defaultValue = grp.getDataAsString(1);
+            attribute[1] = DxfConvTexts.ConvertText(defaultValue);
+            defValDefined = true;
+
+            if (tagDefined) {
+                attributes.add(attribute);
+            }
+        }
+
+        if (grp.hasCode(2)) {
+            tagString = grp.getDataAsString(2);
+            attribute[0] = DxfConvTexts.ConvertText(tagString);
+            tagDefined = true;
+
+            if (defValDefined) {
+                attributes.add(attribute);
+            }
+        }
+
+        if (grp.hasCode(7)) {
+            textStyleName = grp.getDataAsString(7);
+            textStyleName = DxfConvTexts.ConvertText(textStyleName);
+        }
+
+        setNewAttributes();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createAttrib(org.cresques.io.DxfGroupVector)
+     */
+    public void createAttrib(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double h = 0.0;
+        double rot = 0.0;
+        DxfGroup g = null;
+
+        //Point2D pt1 = null, pt2 = null;
+        Point3D pt = null;
+        org.cresques.px.gml.Point3D point = new org.cresques.px.gml.Point3D();
+
+        point.setTextPoint(true);
+
+        String defaultValue = "";
+        String tagString = "";
+        String textStyleName = "";
+        String[] att = new String[2];
+        boolean tagDefined = false;
+        boolean defValDefined = false;
+        int attributeFlags = 0;
+
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        Feature insFea = lastFeaBordes;
+        Feature ptFea = lastFeaFondos;
+
+        Feature feature = new Feature();
+
+        feature.setProp("dxfEntity", "Attrib"); // <-- Es un INSERT con attributes.
+
+        if (grp.hasCode(8)) {
+            feature.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feature.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feature.setProp("color", string);
+            feature.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(1)) {
+            String strAux1 = grp.getDataAsString(1);
+            strAux1 = DxfConvTexts.ConvertText(strAux1);
+            defaultValue = strAux1;
+            att[1] = DxfConvTexts.ConvertText(defaultValue);
+            defValDefined = true;
+
+            if (tagDefined) {
+                insFea.setProp(att[0], att[1]);
+                ptFea.setProp(att[0], att[1]);
+            }
+
+            feature.setProp("text", strAux1);
+        }
+
+        if (grp.hasCode(2)) {
+            String strAux2 = grp.getDataAsString(2);
+            strAux2 = DxfConvTexts.ConvertText(strAux2);
+            tagString = strAux2;
+            att[0] = DxfConvTexts.ConvertText(tagString);
+            tagDefined = true;
+
+            if (defValDefined) {
+                insFea.setProp(att[0], att[1]);
+                ptFea.setProp(att[0], att[1]);
+            }
+        }
+
+        if (grp.hasCode(7)) {
+            textStyleName = grp.getDataAsString(7);
+            textStyleName = DxfConvTexts.ConvertText(textStyleName);
+        }
+
+        if (grp.hasCode(70)) {
+            attributeFlags = grp.getDataAsInt(70);
+        }
+
+        if (grp.hasCode(40)) {
+            Double heightD = new Double(grp.getDataAsDouble(40));
+            String heightS = heightD.toString();
+            feature.setProp("textHeight", heightS);
+        } else {
+            feature.setProp("textHeight", "20.0");
+        }
+
+        if (grp.hasCode(50)) {
+            Double rotD = new Double(grp.getDataAsDouble(50));
+            String rotS = rotD.toString();
+            feature.setProp("textRotation", rotS);
+        } else {
+            feature.setProp("textRotation", "0.0");
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        /*if (grp.hasCode(30)){
+            z = grp.getDataAsDouble(30);
+            Double doub = new Double(z);
+            String string = doub.toString();
+            feature.setProp("elevation", string);
+        } else {
+            Double doub = new Double(0.0);
+            feature.setProp("elevation", doub.toString());
+        }*/
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        Double doub = new Double(z);
+        feature.setProp("elevation", doub.toString());
+
+        if (z != 0.0) {
+            dxf3DFile = true;
+        }
+
+        point.add(new Point3D(x, y, z));
+        feature.setGeometry(point);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feature);
+
+        if (attributeFlags == 8) {
+            if (addingToBlock == false) {
+                features.add(feature);
+            } else {
+                blk.add(feature);
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createBlock(org.cresques.io.DxfGroupVector)
+     */
+    public void createBlock(DxfGroupVector grp) throws Exception {
+        //DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        blk = new FeatureCollection(proj);
+
+        Point3D basePoint = new Point3D();
+        String blockName = "";
+
+        //System.out.println("createBlock(): Creamos nuevo bloque, el bloque " + iterator);
+        addingToBlock = true;
+
+        //System.out.println("createBlock(): Añadimos el bloque " + iterator + " a la lista de bloques");
+        blkList.add(iterator, blk);
+
+        //System.out.println("createBlock(): Rellenamos la informacion del bloque " + iterator);
+        if (grp.hasCode(8)) {
+            blk.setProp("layer", grp.getDataAsString(8));
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            blk.setProp("color", string);
+            blk.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            blk.setProp("color", string);
+            blk.setProp("colorByLayer", "true");
+        }
+
+        if (grp.hasCode(1)) {
+            blockName = grp.getDataAsString(1);
+
+            //blk.setBlkName(blockName);
+            blk.setProp("blockName", blockName);
+        }
+
+        if (grp.hasCode(2)) {
+            blockName = grp.getDataAsString(2);
+
+            //blk.setBlkName(blockName);
+            blk.setProp("blockName", blockName);
+        }
+
+        if (grp.hasCode(10)) {
+            Double basePointX = new Double(grp.getDataAsDouble(10));
+            basePoint.X = grp.getDataAsDouble(10);
+            blk.setProp("basePointX", basePointX.toString());
+        }
+
+        if (grp.hasCode(20)) {
+            Double basePointY = new Double(grp.getDataAsDouble(20));
+            basePoint.Y = grp.getDataAsDouble(20);
+            blk.setProp("basePointY", basePointY.toString());
+        }
+
+        if (grp.hasCode(30)) {
+            Double basePointZ = new Double(grp.getDataAsDouble(30));
+            basePoint.Z = grp.getDataAsDouble(30);
+
+            if (basePoint.getZ() != 0.0) {
+                dxf3DFile = true;
+            }
+
+            blk.setProp("basePointZ", basePointZ.toString());
+        }
+
+        if (grp.hasCode(70)) {
+            //blk.flags = grp.getDataAsInt(70);
+            Integer blockFlags = new Integer(grp.getDataAsInt(70));
+            blk.setProp("blockFlags", blockFlags.toString());
+
+            // 041103: Hoy por hoy esto no lo utilizamos.
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#endBlk(org.cresques.io.DxfGroupVector)
+     */
+    public void endBlk(DxfGroupVector grp) throws Exception {
+        //DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        setAddingToBlock(false);
+        iterator = iterator + 1;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#testBlocks()
+     */
+    public void testBlocks() {
+        //System.out.println("getBlkList() = " + getBlkList());
+        Vector blkList = getBlkList();
+        FeatureCollection block = null;
+        Feature feature = null;
+        InsPoint3D insert = null;
+
+        for (int i = 0; i < blkList.size(); i++) {
+            //System.out.println("compruebaBloques(): Bloque " + i +" de " + blkList.size());
+            block = (FeatureCollection) blkList.get(i);
+
+            int aux = block.size();
+
+            for (int j = 0; j < aux; j++) {
+                feature = (Feature) block.get(j);
+
+                //if (feature.getGeometry() instanceof InsPoint && feature.getProp("isAnInsert") == "true") {
+                if (feature.getGeometry() instanceof InsPoint3D) {
+                    insert = (InsPoint3D) feature.getGeometry();
+
+                    String nomBlock = insert.getBlockName();
+
+                    if (insert.getBlockFound() == false) {
+                        //System.out.println("compruebaBloques(): Ahora se ocupa del DxfInsert " + nomBlock);
+                        insert.encuentraBloque(nomBlock);
+
+                        //gestionaInsert(feature);
+                        //block.add(feature);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Método que permite incluir en la lista general de objetos los objetos que se
+     * encuentran dentro del bloque referenciado por cada InsPoint3D.
+     * @param feature, el punto de inserción.
+     */
+    private void gestionaInsert(Feature feature) {
+        Feature feature2 = null;
+        org.cresques.px.gml.Point3D point = null;
+        LineString3D lineString3D = null;
+        Polygon3D polygon3D = null;
+        InsPoint3D insert = new InsPoint3D();
+        insert = (InsPoint3D) feature.getGeometry();
+
+        double bPointX = 0.0;
+        double bPointY = 0.0;
+        double bPointZ = 0.0;
+
+        //if (insert.getBlockFound() == true) {
+        bPointX = Double.parseDouble(insert.getBlock().getProp("basePointX"));
+        bPointY = Double.parseDouble(insert.getBlock().getProp("basePointY"));
+        bPointZ = Double.parseDouble(insert.getBlock().getProp("basePointZ"));
+
+        //}
+        double sFactorX = insert.getScaleFactor().getX();
+        double sFactorY = insert.getScaleFactor().getY();
+        double sFactorZ = insert.getScaleFactor().getZ();
+        double rAngleGra = insert.getRotAngle();
+        double rAngleRad = (rAngleGra * Math.PI) / 180.0;
+        InsPoint3D insert2 = null;
+
+        for (int i = 0; i < insert.getBlock().size(); i++) {
+            //System.out.println("gestionaInserts: insert.getBlock().features.size() = " + insert.getBlock().size());
+            feature2 = (Feature) insert.getBlock().get(i);
+
+            // Para que los elementos dentro del bloque tengan la misma layer
+            // y color que el insert al que corresponden.
+            // Segun la especificacion del formato DXF de Autodesk, la layer
+            // de las entities dentro de un bloque es la del bloque. La
+            // layer especifica para estos elementos en la defincion del
+            // bloque se ignora.
+            //System.out.println("gestionaInsert(): layer = " + feature2.getProp("layer"));
+            if ((feature2.getProp("colorByLayer").equals("false") ||
+                    feature2.getProp("layer").equals("0")) &&
+                    !feature.getProp("layer").equals("0")) {
+                feature2.setProp("color", feature.getProp("color"));
+            }
+
+            feature2.setProp("layer", feature.getProp("layer"));
+
+            Point3D point1 = new Point3D();
+            Point3D point11 = new Point3D();
+            Point3D pointAux = null;
+
+            if (feature2.getGeometry() instanceof InsPoint3D) {
+                //System.out.println("gestionaInsert(): Encuentra bloques dentro de bloques");
+                insert2 = (InsPoint3D) feature2.getGeometry();
+                point1 = insert2.getPoint3D(0);
+
+                pointAux = new Point3D(point1.getX() - bPointX,
+                                       point1.getY() - bPointY,
+                                       point1.getZ() - bPointZ);
+
+                double laX = insert.getPoint3D(0).getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = insert.getPoint3D(0).getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                double laZ = insert.getPoint3D(0).getZ() +
+                             (pointAux.getZ() * sFactorZ);
+                point11 = new Point3D(laX, laY, laZ);
+
+                InsPoint3D insert3 = new InsPoint3D();
+
+                insert3.add(point11);
+
+                insert3.setBlkList(insert2.getBlkList());
+                insert3.setBlock(insert2.getBlock());
+                insert3.setBlockName(insert2.getBlockName());
+                insert3.setRotAngle(insert2.getRotAngle());
+
+                Point3D newScale = new Point3D(insert2.getScaleFactor().getX() * sFactorX,
+                                               insert2.getScaleFactor().getY() * sFactorY,
+                                               insert2.getScaleFactor().getZ() * sFactorZ);
+                insert3.setScaleFactor(newScale);
+
+                Feature feature3 = new Feature();
+                feature3.setProp("layer", feature2.getProp("layer"));
+                feature3.setProp("color", feature2.getProp("color"));
+                feature3.setProp("dxfEntity", feature2.getProp("dxfEntity"));
+                feature3.setProp("elevation", feature2.getProp("elevation"));
+
+                //041130
+                for (int j = 0; j < attributes.size(); j++) {
+                    String[] att = new String[2];
+                    att = (String[]) attributes.get(j);
+                    feature3.setProp(att[0], feature2.getProp(att[0]));
+                }
+
+                feature3.setGeometry(insert3);
+
+                gestionaInsert(feature3);
+            } else if (feature2.getGeometry() instanceof LineString3D) {
+                lineString3D = (LineString3D) feature2.getGeometry();
+
+                LineString3D lineString2 = new LineString3D();
+                Point3D[] points = new Point3D[lineString3D.pointNr()];
+                Point3D[] pointss = new Point3D[lineString3D.pointNr()];
+
+                for (int j = 0; j < lineString3D.pointNr(); j++) {
+                    points[j] = (Point3D) lineString3D.get(j);
+                    pointss[j] = new Point3D();
+
+                    pointAux = new Point3D(points[j].getX() - bPointX,
+                                           points[j].getY() - bPointY,
+                                           points[j].getZ() - bPointZ);
+
+                    double laX = insert.getPoint3D(0).getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = insert.getPoint3D(0).getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    double laZ = insert.getPoint3D(0).getZ() +
+                                 (pointAux.getZ() * sFactorZ);
+                    pointss[j] = new Point3D(laX, laY, laZ);
+                    lineString2.add(pointss[j]);
+                }
+
+                Feature feature3 = new Feature();
+                feature3.setProp("layer", feature2.getProp("layer"));
+                feature3.setProp("color", feature2.getProp("color"));
+                feature3.setProp("dxfEntity", feature2.getProp("dxfEntity"));
+
+                if (feature2.getProp("elevation") != null) {
+                    feature3.setProp("elevation", feature2.getProp("elevation"));
+                }
+
+                feature3.setProp("thickness", feature2.getProp("thickness"));
+
+                //041130
+                for (int j = 0; j < attributes.size(); j++) {
+                    String[] att = new String[2];
+                    att = (String[]) attributes.get(j);
+
+                    String str = att[0];
+                    feature3.setProp(str, feature2.getProp(str));
+                }
+
+                feature3.setGeometry(lineString2);
+
+                if (addingToBlock == false) {
+                    features.add(feature3);
+                }
+            } else if (feature2.getGeometry() instanceof Polygon3D) {
+                polygon3D = (Polygon3D) feature2.getGeometry();
+
+                Polygon3D polygon2 = new Polygon3D();
+                Point3D[] points = new Point3D[polygon3D.pointNr()];
+                Point3D[] pointss = new Point3D[polygon3D.pointNr()];
+
+                for (int j = 0; j < polygon3D.pointNr(); j++) {
+                    points[j] = (Point3D) polygon3D.get(j);
+                    pointss[j] = new Point3D();
+
+                    pointAux = new Point3D(points[j].getX() - bPointX,
+                                           points[j].getY() - bPointY,
+                                           points[j].getZ() - bPointZ);
+
+                    double laX = insert.getPoint3D(0).getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = insert.getPoint3D(0).getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    double laZ = insert.getPoint3D(0).getZ() +
+                                 (pointAux.getZ() * sFactorZ);
+                    pointss[j] = new Point3D(laX, laY, laZ);
+                    polygon2.add(pointss[j]);
+                }
+
+                Feature feature3 = new Feature();
+                feature3.setProp("layer", feature2.getProp("layer"));
+                feature3.setProp("color", feature2.getProp("color"));
+                feature3.setProp("dxfEntity", feature2.getProp("dxfEntity"));
+
+                if (feature2.getProp("elevation") != null) {
+                    feature3.setProp("elevation", feature2.getProp("elevation"));
+                }
+
+                feature3.setProp("thickness", feature2.getProp("thickness"));
+
+                //041130
+                for (int j = 0; j < attributes.size(); j++) {
+                    String[] att = new String[2];
+                    att = (String[]) attributes.get(j);
+                    feature3.setProp(att[0], feature2.getProp(att[0]));
+                }
+
+                feature3.setGeometry(polygon2);
+
+                if (addingToBlock == false) {
+                    features.add(feature3);
+                }
+            } else if (feature2.getGeometry() instanceof org.cresques.px.gml.Point3D) {
+                point = (org.cresques.px.gml.Point3D) feature2.getGeometry();
+                point1 = point.getPoint3D(0);
+
+                pointAux = new Point3D(point1.getX() - bPointX,
+                                       point1.getY() - bPointY,
+                                       point1.getZ() - bPointZ);
+
+                double laX = insert.getPoint3D(0).getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = insert.getPoint3D(0).getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                double laZ = insert.getPoint3D(0).getZ() +
+                             (pointAux.getZ() * sFactorZ);
+                point11 = new Point3D(laX, laY, laZ);
+
+                org.cresques.px.gml.Point3D pointt = new org.cresques.px.gml.Point3D();
+                pointt.add(point11);
+
+                Feature feature3 = new Feature();
+                feature3.setProp("layer", feature2.getProp("layer"));
+                feature3.setProp("color", feature2.getProp("color"));
+                feature3.setProp("dxfEntity", feature2.getProp("dxfEntity"));
+                feature3.setProp("elevation", feature2.getProp("elevation"));
+                feature3.setProp("thickness", feature2.getProp("thickness"));
+
+                if (point.isTextPoint()) {
+                    feature3.setProp("text", feature2.getProp("text"));
+                    feature3.setProp("textHeight",
+                                     feature2.getProp("textHeight"));
+
+                    double auxR = Double.parseDouble(feature2.getProp("textRotation"));
+
+                    //System.out.println("auxR = " + auxR);
+                    auxR = auxR + rAngleGra;
+                    feature3.setProp("textRotation", Double.toString(auxR));
+
+                    //System.out.println("gestionaInsert(): feature3.getProp(textRotation) = " + feature3.getProp("textRotation"));
+                    pointt.setTextPoint(true);
+                }
+
+                //041130
+                for (int j = 0; j < attributes.size(); j++) {
+                    String[] att = new String[2];
+                    att = (String[]) attributes.get(j);
+                    feature3.setProp(att[0], feature2.getProp(att[0]));
+                }
+
+                feature3.setGeometry(pointt);
+
+                //if (addingToBlock == false) {
+                features.add(feature3);
+
+                //}
+            } else {
+                System.out.println("gestionaInsert(): Encontrado elemento desconocido");
+            }
+        }
+    }
+
+    /**
+     * Gestiona la característica faces en las polilíneas.
+     * @param face
+     */
+    private void addFace(int[] face) {
+        hasFaces = true;
+
+        if (faces == null) {
+            faces = new Vector();
+        }
+
+        faces.add(face);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#depureAttributes()
+     */
+    public void depureAttributes() {
+        //String[] att = null;
+
+        /*Set conjunto = new HashSet();
+        for (int i=0;i<attributes.size();i++) {
+            att = (String[])attributes.get(i);
+            String str = att[0];
+            conjunto.add(str);
+        }
+        //conjunto.addAll(attributes);
+        Vector atts = new Vector();
+        Vector atts2 = new Vector();
+        atts.addAll(conjunto);
+        for (int i=0;i<atts.size();i++) {
+            if (((String[])(attributes.get(i)))[0] == atts.get(i)) {
+                atts2.add(i, attributes.get(i));
+            }
+        }*/
+        String[] lastAtt = new String[2];
+
+        for (int i = 0; i < attributes.size(); i++) {
+            String[] att = (String[]) attributes.get(i);
+
+            for (int j = i + 1; j < attributes.size(); j++) {
+                //System.out.println("depureAttributes(): j = " + j);
+                String[] st = (String[]) attributes.get(j);
+                String st1 = att[0];
+                String st2 = st[0];
+
+                //System.out.println("depureAttributes(): st1 = " + st1);
+                //System.out.println("depureAttributes(): st2 = " + st2);
+                if (st2.equals(st1)) {
+                    //System.out.println("depureAttributes(): Borra el st2");
+                    attributes.remove(j);
+                }
+
+                if (i == (attributes.size() - 1)) {
+                    lastAtt = att;
+                }
+            }
+        }
+
+        for (int i = attributes.size() - 2; i >= 0; i--) {
+            String[] att = (String[]) attributes.get(i);
+            String st1 = lastAtt[0];
+            String st2 = att[0];
+
+            if (st2.equals(st1)) {
+                attributes.remove(i);
+            }
+        }
+
+        /*String[] attStrs = new String[attributes.size()];
+        Vector attribs = new Vector();
+        for (int i=0;i<attributes.size();i++) {
+            att = (String[])attributes.get(i);
+            attStrs[i] = att[0];
+        }
+        Set attStrsNR = new HashSet();
+        for (int i=0;i<attStrs.length;i++) {
+            attStrsNR.add(attStrs[i]);
+        }
+        String[] attStrsNRA = new String[attStrsNR.size()];
+        attStrsNR.toArray(attStrsNRA);
+        for (int i=0;i<attStrsNR.size();i++) {
+            att[0] = attStrsNRA[i];
+            attribs.add(att);
+        }
+        for (int i=0;i<attributes.size();i++) {
+            att = (String[])attributes.get(i);
+            String[] att2 = new String[2];
+            for (int j=0;j<attribs.size();j++) {
+                att2 = (String[])attribs.get(j);
+                if (att[0].equals(att2[0])) {
+                    att2[1] = att[1];
+                }
+                attribs.set(j, att2);
+            }
+        }
+        attributes = attribs;*/
+    }
+
+    /**
+     * Hace los setProp para los atributos extra de las entidades.
+     * @param feature
+     */
+    private void completeAttributes(Feature feature) {
+        // 041130: Rellena las props con los atributos.
+        for (int i = 0; i < attributes.size(); i++) {
+            String[] att = new String[2];
+            att = (String[]) attributes.get(i);
+            feature.setProp(att[0], att[1]);
+        }
+    }
+
+    /**
+     * Copia los atributos extra cargados en InsPoint y ya perfectamente definidos a los
+     * elementos del bloque al que referencia el punto de insercion.
+     * @param feaInsert, punto de inserción.
+     */
+    private void copyAttributes(Feature feaInsert) {
+        Feature feature = null;
+        InsPoint3D insert = new InsPoint3D();
+        insert = (InsPoint3D) feaInsert.getGeometry();
+
+        for (int i = 0; i < insert.getBlock().size(); i++) {
+            feature = (Feature) insert.getBlock().get(i);
+
+            for (int j = 0; j < attributes.size(); j++) {
+                String[] att = new String[2];
+                att = (String[]) attributes.get(j);
+                feature.setProp(att[0], feaInsert.getProp(att[0]));
+            }
+        }
+    }
+
+    /**
+     * Se ejecuta cuando se declaran nuevos atributos, es decir, tras cada ATTDEF.
+     * Añade estos atributos a las features existentes.
+     */
+    private void setNewAttributes() {
+        for (int i = 0; i < features.size(); i++) {
+            Feature fea = new Feature();
+            fea = (Feature) features.get(i);
+            completeAttributes(fea);
+        }
+
+        for (int i = 0; i < blkList.size(); i++) {
+            FeatureCollection bloque = new FeatureCollection(proj);
+            bloque = (FeatureCollection) blkList.get(i);
+
+            for (int j = 0; j < bloque.size(); j++) {
+                Feature fea = new Feature();
+                fea = (Feature) bloque.get(j);
+                completeAttributes(fea);
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getAttributes()
+     */
+    public Vector getAttributes() {
+        return attributes;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getExtent()
+     */
+    public Extent getExtent() {
+        Feature feature = new Feature();
+        Extent extent = new Extent();
+        Iterator iter = features.iterator();
+
+        while (iter.hasNext()) {
+            feature = (Feature) iter.next();
+            extent.add(feature.getExtent());
+        }
+
+        return extent;
+    }
+
+    /**
+     * Establece la proyección cartográfica en la que se van a crear las features.
+     * @param p, Proyección cartográfica.
+     */
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#reProject(org.cresques.geo.ReProjection)
+     */
+    public void reProject(ICoordTrans rp) {
+        Feature feature = new Feature();
+        Extent extent = new Extent();
+        Iterator iter = features.iterator();
+
+        while (iter.hasNext()) {
+            feature = (Feature) iter.next();
+            ((Projected) feature).reProject(rp);
+            extent.add(feature.getExtent());
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.geo.Projected#getProjection()
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    /**
+     * Devuelve las features creadas.
+     * @return IObjList
+     */
+    public IObjList getObjects() {
+        return features;
+    }
+
+    /**
+     * Permite dibujar las features creadas.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Iterator iter = features.iterator();
+        Extent extent;
+
+        while (iter.hasNext()) {
+            Feature feature = new Feature();
+            feature = (Feature) iter.next();
+            extent = feature.getExtent();
+
+            if (vp.getExtent().minX() > extent.maxX()) {
+                continue;
+            }
+
+            if (vp.getExtent().minY() > extent.maxY()) {
+                continue;
+            }
+
+            if (vp.getExtent().maxX() < extent.minX()) {
+                continue;
+            }
+
+            if (vp.getExtent().maxY() < extent.minY()) {
+                continue;
+            }
+
+            //if (!feature.layer.frozen)
+            feature.draw(g, vp);
+        }
+    }
+
+    /**
+     * Invoca el método de creación de arcos para polilíneas con parámetros de
+     * curvatura.
+     * @param coord1, punto inicial del arco.
+     * @param coord2, punto final del arco.
+     * @param bulge, parámetro de curvatura.
+     * @return Vector con los puntos del arco.
+     */
+    public static Vector createArc(Point2D coord1, Point2D coord2, double bulge) {
+        return new DxfCalArcs(coord1, coord2, bulge).getPoints(1);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getBlkList()
+     */
+    public Vector getBlkList() {
+        return blkList;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getDxfEntityList()
+     */
+    public DxfEntityList getDxfEntityList() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getBlk()
+     */
+    public DxfBlock getBlk() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createEllipse(org.cresques.io.DxfGroupVector)
+     */
+    public void createEllipse(DxfGroupVector grp) throws Exception {
+        double cx = 0.0;
+        double cy = 0.0;
+        double cz = 0.0;
+
+        double x_end_point_major_axis = 0.0;
+        double y_end_point_major_axis = 0.0;
+        double z_end_point_major_axis = 0.0;
+
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+        double ratio_minor_to_major_axis = 1.0;
+        double start = 0.0;
+        double end = 2* Math.PI;
+        LineString3D lineString3D = new LineString3D();
+        Polygon3D polygon3D = new Polygon3D();
+        Feature feaBordes = new Feature();
+        Feature feaFondos = new Feature();
+
+        feaBordes.setProp("dxfEntity", "Ellipse");
+        feaFondos.setProp("dxfEntity", "Ellipse");
+
+        if (grp.hasCode(8)) {
+            feaBordes.setProp("layer", grp.getDataAsString(8));
+        }
+
+        feaFondos.setProp("layer", grp.getDataAsString(8));
+
+        if (grp.hasCode(39)) {
+            Double doub = new Double(grp.getDataAsDouble(39));
+            String string = doub.toString();
+            feaBordes.setProp("thickness", string);
+            feaFondos.setProp("thickness", string);
+        } else {
+            Double doub = new Double(0.0);
+            feaBordes.setProp("thickness", doub.toString());
+            feaFondos.setProp("thickness", doub.toString());
+        }
+
+        if (grp.hasCode(62)) {
+            Integer integer = new Integer(grp.getDataAsInt(62));
+            String string = integer.toString();
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "false");
+            feaFondos.setProp("colorByLayer", "false");
+        } else {
+            DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+            int clr = layer.colorNumber;
+            Integer integer = new Integer(clr);
+            String string = integer.toString();
+            feaBordes.setProp("color", string);
+            feaFondos.setProp("color", string);
+            feaBordes.setProp("colorByLayer", "true");
+            feaFondos.setProp("colorByLayer", "true");
+        }
+
+        // Center point
+        cx = grp.getDataAsDouble(10);
+        cy = grp.getDataAsDouble(20);
+        if (grp.hasCode(30)) {
+            cz = grp.getDataAsDouble(30);
+        }
+     
+        // end_point_major_axis  (RELATIVE to the center)      
+        x_end_point_major_axis = grp.getDataAsDouble(11);
+        y_end_point_major_axis = grp.getDataAsDouble(21);
+        if (grp.hasCode(31)) {
+            z_end_point_major_axis = grp.getDataAsDouble(31);
+        }
+
+        // ratio minor axis to major axis
+        if (grp.hasCode(40)) {
+        	ratio_minor_to_major_axis = grp.getDataAsDouble(40);
+        }
+        Point2D c = proj.createPoint(cx, cy);
+        // Point2D end_major = proj.createPoint(x_end_point_major_axis, y_end_point_major_axis);
+        // double r_major_axis_2D = c.distance(end_major)/2.0;
+        double r_major_axis_2D = Math.sqrt(x_end_point_major_axis*
+        		x_end_point_major_axis + 
+        		y_end_point_major_axis * y_end_point_major_axis);
+        double r_minor_axis_2D = r_major_axis_2D * ratio_minor_to_major_axis;
+        double rotation_angle = Math.atan2(y_end_point_major_axis , x_end_point_major_axis);
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(cx, cy, cz);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        cx = point_out.getX();
+        cy = point_out.getY();
+        cz = point_out.getZ();
+
+        Double doub = new Double(cz);
+        feaBordes.setProp("elevation", doub.toString());
+        feaFondos.setProp("elevation", doub.toString());
+
+        if (cz != 0.0) {
+            dxf3DFile = true;
+        }
+
+        
+        Point3D center = new Point3D(c.getX(), c.getY(), cz);
+        Point3D[] pts = new Point3D[360];
+        int angulo = 0;
+
+        for (angulo = 0; angulo < 360; angulo++) {
+            pts[angulo] = new Point3D(center.getX() +
+                                      r_major_axis_2D * Math.cos(Math.toRadians(angulo)),
+                                      center.getY() +
+                                      r_minor_axis_2D * Math.sin(Math.toRadians(angulo)),
+                                      center.getZ());
+
+            if (pts.length == 1) {
+                firstPt = pts[angulo];
+            }
+        }
+
+        AffineTransform at = new AffineTransform();
+        at.rotate(rotation_angle, cx, cy);
+        for (int i = 0; i < pts.length; i++) {
+        	Point2D pAux = pts[i];
+        	Point2D pRot = at.transform(pAux, null);
+            lineString3D.add(pRot);
+            polygon3D.add(pRot);
+        }
+
+        feaBordes.setGeometry(lineString3D);
+        feaFondos.setGeometry(polygon3D);
+
+        // 041130: Rellena las props con los atributos.
+        completeAttributes(feaBordes);
+        completeAttributes(feaFondos);
+
+        //features.add(feature);
+        if (addingToBlock == false) {
+            //System.out.println("createCircle(): Añade un circulo a la lista de entidades");
+            //features.add(feaBordes);
+            features.add(feaFondos);
+        } else {
+            //System.out.println("createCircle(): Añadimos un circulo al bloque " + iterator);
+            //blk.add(feaBordes);
+            blk.add(feaFondos);
+        }
+
+    }
+
+    /**
+     * @return Returns the dxf3DFile.
+     */
+    public boolean isDxf3DFile() {
+        return dxf3DFile;
+    }
+
+    /**
+     * @param dxf3DFile The dxf3DFile to set.
+     */
+    public void setDxf3DFile(boolean dxf3DFile) {
+        this.dxf3DFile = dxf3DFile;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfFeatureMaker.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntity.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntity.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntity.java	(revision 10281)
@@ -0,0 +1,125 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+
+import org.cresques.px.PxObj;
+
+
+/**
+ * Clase ancestro para las entidades de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public abstract class DxfEntity extends PxObj implements Projected {
+    IProjection proj = null;
+    DxfLayer layer = null;
+
+    //int dxfColor = 256;
+    int dxfColor = 0;
+    int entitiesFollow = 0;
+    boolean space = false; // false --> model space, true paper space;
+    private int handle;
+    
+    /**
+     * Constructor genérico de entidades procedentes de un fichero DXF.
+     * @param proj, proyección cartográfica en la que se encuentra la entidad.
+     * @param layer, capa del DXF en la que se encuentra la entidad.
+     */
+    public DxfEntity(IProjection proj, DxfLayer layer) {
+        setProjection(proj);
+        this.layer = layer;
+    }
+    
+    /**
+     * Establece la proyección cartográfica en la que se encuentra la entidad.
+     * @param p, Proyección cartográfica.
+     */
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentra la entidad.
+     * @return IProjection, proyección cartográfica.
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+    
+    /**
+     * Permite reproyectar una entidad dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    abstract public void reProject(ICoordTrans ct);
+    
+    /**
+     * Devuelve el nombre de la capa en la que se encuentra la entidad.
+     * @return String
+     */
+    public String getLayerName() {
+        return layer.getName();
+    }
+    
+    /**
+     * Devuelve el color de la entidad según AutoCAD en forma de texto.
+     * @return String con el color de la entidad según AutoCAD.
+     */
+    public String getColor() {
+        return "" + dxfColor;
+    }
+    
+    /**
+     * Permite la escritura de entidades en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * de la correspondiente entidad.
+     */
+    abstract public String toDxfString();
+
+    /**
+     * @return Returns the handle.
+     */
+    public int getHandle() {
+        return handle;
+    }
+
+    /**
+     * @param handle The handle to set.
+     */
+    public void setHandle(int handle) {
+        this.handle = handle;
+    }
+
+    /**
+     * Devuelve la capa en la que se encuentra la entidad.
+     * @return DxfLayer, la capa.
+     */
+    public DxfLayer getLayer() {
+        return layer;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntity.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLayer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLayer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLayer.java	(revision 10281)
@@ -0,0 +1,124 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.io.DxfGroup;
+
+import java.awt.Color;
+
+
+/**
+ * La clase DxfLayer representa las capas de AutoCAD que aparecen en un fichero
+ * DXF. 
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfLayer extends DxfTableItem {
+    public int colorNumber = 9;
+    public String lType = "CONTINUOUS";
+    public boolean frozen = false;
+    public boolean isOff = false;
+
+    /**
+     * Constructor de DxfLayer.
+     * @param name, nombre de la capa.
+     */
+    public DxfLayer(String name) {
+        super(name, 0);
+        System.out.println("Dxf: Capa '" + name + "'.");
+        colorNumber = 255;
+        lType = "CONTINUOUS";
+    }
+
+    /**
+     * Sobrecarga del constructor de DxfLayer. Mediante este constructor también es
+     * posible especificar el color de la capa.
+     * @param name, nombre de la capa.
+     * @param clr, color de la capa.
+     */
+    public DxfLayer(String name, int clr) {
+        super(name, 0);
+        colorNumber = clr;
+        lType = "CONTINUOUS";
+        System.out.println("DxfLayer name=" + name + ", color=" + colorNumber);
+    }
+
+    /**
+     * Sobrecarga del constructor de DxfLayer. Mediante este constructor es
+     * posible especificar el nombre, el color y el tipo de línea asociado a la capa.
+     * @param name, nombre de la capa.
+     * @param clr, color de la capa.
+     * @param lType, tipo de línea asociado a la capa.
+     */
+    public DxfLayer(String name, int clr, String lType) {
+        super(name, 0);
+        colorNumber = clr;
+        this.lType = lType;
+    }
+
+    /**
+     * Devuelve el color asociado a la capa.
+     * @return Color
+     */
+    public Color getColor() {
+        return AcadColor.getColor(colorNumber);
+    }
+
+    /**
+     * Permite la escritura de capas en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * de la capa.
+     */
+    public String toDxfString() {
+        /*5
+        10
+        330
+        2
+        100
+        AcDbSymbolTableRecord
+        100
+        AcDbLayerTableRecord
+          2
+        0
+         70
+             0
+         62
+             7
+          6
+        Continuous
+        370
+            -3
+        390
+        F*/
+        StringBuffer sb = new StringBuffer(LAYER.toString() +
+                                           super.toDxfString());
+        sb.append(DxfGroup.toString(5, 10));
+        sb.append(DxfGroup.toString(100, "AcDbSymbolTableRecord"));
+        sb.append(DxfGroup.toString(100, "AcDbLayerTableRecord"));
+        sb.append(DxfGroup.toString(62, colorNumber));
+        sb.append(DxfGroup.toString(6, lType));
+
+        return sb.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLayer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Dxf: Clases para el acceso al formato dxf.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderVariables.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderVariables.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderVariables.java	(revision 10281)
@@ -0,0 +1,105 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.io.DxfGroupVector;
+
+
+/**
+ * Definición de las variables que definen un DXF. Estas variables están
+ * establecidas en la sección HEADER del propio fichero DXF.
+ * @author jmorell (jose.morell@gmail.com)
+ * @version 15-dic-2004
+ */
+public class DxfHeaderVariables {
+    private String acadVersion;
+    private String acadMaintVer;
+    private boolean writedDxf3D;
+    private double minZFromHeader;
+    private double maxZFromHeader;
+
+    /**
+     * Constructor de DxfHeaderVariables.
+     */
+    public DxfHeaderVariables() {
+    }
+
+    /**
+     * Devuelve la versión del fichero DXF.
+     * @return String
+     */
+    public String getAcadVersion() {
+        return acadVersion;
+    }
+
+    /**
+     * Establece la versión del fichero DXF.
+     * @param acadVersion
+     */
+    public void setAcadVersion(String acadVersion) {
+        //System.out.println(acadVersion);
+        this.acadVersion = acadVersion;
+    }
+
+    /**
+     * Transforma la nomenclatura interna de versiones de ficheros DXF en la
+     * nomenclatura habitual de versiones de AutoCAD.
+     * @param codedVersion, versión según la nomenclatura interna.
+     * @return String con la versión en la nomenclatura más habitual.
+     */
+    public String decodeAcadVersion(String codedVersion) {
+        if (codedVersion.equals("AC1006")) {
+            return new String("R10");
+        } else if (codedVersion.equals("AC1009")) {
+            return new String("R11&R12");
+        } else if (codedVersion.equals("AC1012")) {
+            return new String("R13");
+        } else if (codedVersion.equals("AC1014")) {
+            return new String("R14");
+        } else if (codedVersion.equals("AC1015")) {
+            return new String("ACAD2000");
+        } else if (codedVersion.equals("AC1018")) {
+            return new String("ACAD2004");
+        } else {
+            return new String("Unknown codedVersion");
+        }
+    }
+    
+    public boolean isWritedDxf3D() {
+        // si los ext son como los escribimos devolver true
+        writedDxf3D = false;
+        double z1 = minZFromHeader;
+        double z2 = maxZFromHeader;
+        if (z1==999999999.0 && z2==-999999999.0) writedDxf3D = true;
+        return writedDxf3D;
+    }
+    
+    public void loadMinZFromHeader(double d) {
+        minZFromHeader = d;
+    }
+    
+    public void loadMaxZFromHeader(double d) {
+        maxZFromHeader = d;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderVariables.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalXtru.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalXtru.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalXtru.java	(revision 10281)
@@ -0,0 +1,133 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.geo.Point3D;
+
+import java.lang.Math;
+
+/**
+ * La clase DxfCalXtru se emplea para aplicar los parámetros de extrusión de las
+ * entidades de un DXF. Esta transformación provoca alteraciones en las coordenadas de
+ * estos elementos.
+ * @author jmorell
+ */
+public class DxfCalXtru {
+    
+    /**
+     * Aplica a un punto en 3D sus correspondientes parámetros de extrusión.
+     * @param coord_in, punto antes de aplicar la extrusión.
+     * @param xtru, parámetros de extrusión en X, en Y y en Z.
+     * @return Point3D, punto 3D afectado de extrusión.
+     */
+    public static Point3D CalculateXtru(Point3D coord_in, Point3D xtru) {
+        Point3D coord_out = new Point3D();
+
+        double dxt0 = 0D;
+        double dyt0 = 0D;
+        double dzt0 = 0D;
+        double dvx1;
+        double dvx2;
+        double dvx3;
+        double dvy1;
+        double dvy2;
+        double dvy3;
+        double dmod;
+        double dxt;
+        double dyt;
+        double dzt;
+
+        double aux = 1D / 64D; //LWS
+        double aux1 = Math.abs(xtru.getX());
+        double aux2 = Math.abs(xtru.getY());
+
+        dxt0 = coord_in.getX();
+        dyt0 = coord_in.getY();
+        dzt0 = coord_in.getZ();
+
+        double xtruX;
+        double xtruY;
+        double xtruZ;
+        xtruX = xtru.getX();
+        xtruY = xtru.getY();
+        xtruZ = xtru.getZ();
+
+        if ((aux1 < aux) && (aux2 < aux)) {
+            dmod = Math.sqrt((xtruZ * xtruZ) + (xtruX * xtruX));
+            dvx1 = xtruZ / dmod;
+            dvx2 = 0;
+            dvx3 = -xtruX / dmod;
+        } else {
+            dmod = Math.sqrt((xtruY * xtruY) + (xtruX * xtruX));
+            dvx1 = -xtruY / dmod;
+            dvx2 = xtruX / dmod;
+            dvx3 = 0;
+        }
+
+        dvy1 = (xtruY * dvx3) - (xtruZ * dvx2);
+        dvy2 = (xtruZ * dvx1) - (xtruX * dvx3);
+        dvy3 = (xtruX * dvx2) - (xtruY * dvx1);
+
+        dmod = Math.sqrt((dvy1 * dvy1) + (dvy2 * dvy2) + (dvy3 * dvy3));
+
+        dvy1 = dvy1 / dmod;
+        dvy2 = dvy2 / dmod;
+        dvy3 = dvy3 / dmod;
+
+        dxt = (dvx1 * dxt0) + (dvy1 * dyt0) + (xtruX * dzt0);
+        dyt = (dvx2 * dxt0) + (dvy2 * dyt0) + (xtruY * dzt0);
+        dzt = (dvx3 * dxt0) + (dvy3 * dyt0) + (xtruZ * dzt0);
+
+        coord_out.setLocation(dxt, dyt, dzt);
+
+        //coord_out.z = dzt;
+        dxt0 = 0;
+        dyt0 = 0;
+        dzt0 = 0;
+
+        return coord_out;
+    }
+    
+    /**
+     * Devuelve el coseno de un ángulo introducido en grados sexagesimales.
+     * @param alfa, ángulo.
+     * @return double, valor del coseno.
+     */
+    public static double cosDeg(double alfa) {
+        final double toRad = Math.PI / (double) 180.0;
+
+        return Math.cos(alfa * toRad);
+    }
+    
+    /**
+     * Devuelve el seno de un ángulo introducido en grados sexagesimales.
+     * @param alfa, ángulo.
+     * @return double, valor del seno.
+     */
+    public static double sinDeg(double alfa) {
+        final double toRad = Math.PI / (double) 180.0;
+
+        return Math.sin(alfa * toRad);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfCalXtru.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderManager.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderManager.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderManager.java	(revision 10281)
@@ -0,0 +1,82 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.io.DxfFile;
+import org.cresques.io.DxfGroupVector;
+
+
+/**
+ * La clase DxfHeaderManager gestiona las variables definidas en la sección HEADER de
+ * un fichero DXF.
+ * @author jmorell (jose.morell@gmail.com)
+ * @version 15-dic-2004
+ */
+public class DxfHeaderManager implements DxfFile.VarSettings {
+    private DxfHeaderVariables dxfHeadVars;
+
+    /**
+     * Constructor sin parámetros. Inicializa el vector de variables que
+     * caracterizan un DXF.
+     */
+    public DxfHeaderManager() {
+        dxfHeadVars = new DxfHeaderVariables();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.VarSettings#getDxfHeaderVars()
+     */
+    public DxfHeaderVariables getDxfHeaderVars() {
+        return dxfHeadVars;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.VarSettings#setAcadVersion(org.cresques.io.DxfGroupVector)
+     */
+    public void setAcadVersion(DxfGroupVector v) throws Exception {
+        if (v.hasCode(1)) {
+            String codedVersion = new String(v.getDataAsString(1));
+            dxfHeadVars.setAcadVersion(dxfHeadVars.decodeAcadVersion(codedVersion));
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.VarSettings#getAcadVersion()
+     */
+    public String getAcadVersion() {
+        return dxfHeadVars.getAcadVersion();
+    }
+
+    public boolean isWritedDxf3D() {
+        return dxfHeadVars.isWritedDxf3D();
+    }
+
+    public void loadMinZFromHeader(double d) {
+        dxfHeadVars.loadMinZFromHeader(d);
+    }
+
+    public void loadMaxZFromHeader(double d) {
+        dxfHeadVars.loadMaxZFromHeader(d);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfHeaderManager.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/Unicode.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/Unicode.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/Unicode.java	(revision 10281)
@@ -0,0 +1,452 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ * 
+ * Copyright (C) 2004-5. 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ * 
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+/**
+ * La clase Unicode permite convertir textos Unicode en textos codificados según la
+ * especificación DOS437.
+ * @author jmorell
+ */
+class Unicode {
+    static final char UCNONE = 65535;
+    static final char unicode[][] = {
+        {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\177', '\200', '\201', 
+            '\202', '\203', '\204', '\205', '\206', '\207', '\210', '\211', '\212', '\213', 
+            '\214', '\215', '\216', '\217', '\220', '\221', '\222', '\223', '\224', '\225', 
+            '\226', '\227', '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', 
+            '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', '\250', '\251', 
+            '\252', '\253', '\254', '\255', '\256', '\257', '\260', '\261', '\262', '\263', 
+            '\264', '\265', '\266', '\267', '\270', '\271', '\272', '\273', '\274', '\275', 
+            '\276', '\277', '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', 
+            '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', '\320', '\321', 
+            '\322', '\323', '\324', '\325', '\326', '\327', '\330', '\331', '\332', '\333', 
+            '\334', '\335', '\336', '\337', '\340', '\341', '\342', '\343', '\344', '\345', 
+            '\346', '\347', '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', 
+            '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', '\370', '\371', 
+            '\372', '\373', '\374', '\375', '\376', '\377'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\177', '\200', '\201', 
+            '\202', '\203', '\204', '\205', '\206', '\207', '\210', '\211', '\212', '\213', 
+            '\214', '\215', '\216', '\217', '\220', '\221', '\222', '\223', '\224', '\225', 
+            '\226', '\227', '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', 
+            '\240', '\u0104', '\u02D8', '\u0141', '\244', '\u013D', '\u015A', '\247', '\250', '\u0160', 
+            '\u015E', '\u0164', '\u0179', '\255', '\u017D', '\u017B', '\260', '\u0105', '\u02DB', '\u0142', 
+            '\264', '\u013E', '\u015B', '\u02C7', '\270', '\u0161', '\u015F', '\u0165', '\u017A', '\u02DD', 
+            '\u017E', '\u017C', '\u0154', '\301', '\302', '\u0102', '\304', '\u0139', '\u0106', '\307', 
+            '\u010C', '\311', '\u0118', '\313', '\u011A', '\315', '\316', '\u010E', '\u0110', '\u0143', 
+            '\u0147', '\323', '\324', '\u0150', '\326', '\327', '\u0158', '\u016E', '\332', '\u0170', 
+            '\334', '\335', '\u0162', '\337', '\u0155', '\341', '\342', '\u0103', '\344', '\u013A', 
+            '\u0107', '\347', '\u010D', '\351', '\u0119', '\353', '\u011B', '\355', '\356', '\u010F', 
+            '\u0111', '\u0144', '\u0148', '\363', '\364', '\u0151', '\366', '\367', '\u0159', '\u016F', 
+            '\372', '\u0171', '\374', '\375', '\u0163', '\u02D9'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\344', '\340', '\345', '\347', '\352', '\353', '\350', '\357', 
+            '\356', '\354', '\304', '\305', '\311', '\346', '\306', '\364', '\366', '\362', 
+            '\373', '\371', '\377', '\326', '\334', '\242', '\243', '\245', '\u20A7', '\u0192', 
+            '\341', '\355', '\363', '\372', '\361', '\321', '\252', '\272', '\277', '\u2310', 
+            '\254', '\275', '\274', '\241', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563', '\u2551', '\u2557', '\u255D', '\u255C', 
+            '\u255B', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u255E', '\u255F', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564', 
+            '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B', '\u256A', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u258C', '\u2590', '\u2580', '\u03B1', '\337', '\u0393', '\u03C0', '\u03A3', '\u03C3', 
+            '\265', '\u03C4', '\u03A6', '\u0398', '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229', 
+            '\u2261', '\261', '\u2265', '\u2264', '\u2320', '\u2321', '\367', '\u2248', '\260', '\u2219', 
+            '\267', '\u221A', '\u207F', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\344', '\340', '\345', '\347', '\352', '\353', '\350', '\357', 
+            '\356', '\354', '\304', '\305', '\311', '\346', '\306', '\364', '\366', '\362', 
+            '\373', '\371', '\377', '\326', '\334', '\370', '\243', '\330', '\327', '\u0192', 
+            '\341', '\355', '\363', '\372', '\361', '\321', '\252', '\272', '\277', '\256', 
+            '\254', '\275', '\274', '\241', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\301', '\302', '\300', '\251', '\u2563', '\u2551', '\u2557', '\u255D', '\242', 
+            '\245', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\343', '\303', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\244', '\360', '\320', 
+            '\312', '\313', '\310', '\u0131', '\315', '\316', '\317', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\246', '\314', '\u2580', '\323', '\337', '\324', '\322', '\365', '\325', 
+            '\265', '\376', '\336', '\332', '\333', '\331', '\375', '\335', '\257', '\264', 
+            '\255', '\261', '\u2017', '\276', '\266', '\247', '\367', '\270', '\260', '\250', 
+            '\267', '\271', '\263', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\344', '\u016F', '\u0107', '\347', '\u0142', '\353', '\u0150', '\u0151', 
+            '\356', '\u0179', '\304', '\u0106', '\311', '\u0139', '\u013A', '\364', '\366', '\u013D', 
+            '\u013E', '\u015A', '\u015B', '\326', '\334', '\u0164', '\u0165', '\u0141', '\327', '\u010D', 
+            '\341', '\355', '\363', '\372', '\u0104', '\u0105', '\u017D', '\u017E', '\u0118', '\u0119', 
+            '\254', '\u017A', '\u010C', '\u015F', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\301', '\302', '\u011A', '\u015E', '\u2563', '\u2551', '\u2557', '\u255D', '\u017B', 
+            '\u017C', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u0102', '\u0103', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\244', '\u0111', '\u0110', 
+            '\u010E', '\313', '\u010F', '\u0147', '\315', '\316', '\u011B', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u0162', '\u016E', '\u2580', '\323', '\337', '\324', '\u0143', '\u0144', '\u0148', 
+            '\u0160', '\u0161', '\u0154', '\332', '\u0155', '\u0170', '\375', '\335', '\u0163', '\264', 
+            '\255', '\u02DD', '\u02DB', '\u02C7', '\u02D8', '\247', '\367', '\270', '\260', '\250', 
+            '\u02D9', '\u0171', '\u0158', '\u0159', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\u0452', '\u0402', 
+            '\u0453', '\u0403', '\u0451', '\u0401', '\u0454', '\u0404', '\u0455', '\u0405', '\u0456', '\u0406', 
+            '\u0457', '\u0407', '\u0456', '\u0408', '\u0459', '\u0409', '\u045A', '\u040A', '\u045B', '\u040B', 
+            '\u045C', '\u040C', '\u045E', '\u040E', '\u045F', '\u040F', '\u044E', '\u042E', '\u044A', '\u042A', 
+            '\u0430', '\u0410', '\u0431', '\u0411', '\u0446', '\u0426', '\u0434', '\u0414', '\u0435', '\u0415', 
+            '\u0444', '\u0424', '\u0433', '\u0413', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u0445', '\u0425', '\u0438', '\u0418', '\u2563', '\u2551', '\u2557', '\u255D', '\u0439', 
+            '\u0419', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u043A', '\u041A', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\244', '\u043B', '\u041B', 
+            '\u043C', '\u041C', '\u043D', '\u041D', '\u043E', '\u041E', '\u043F', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u041F', '\u044F', '\u2580', '\u042F', '\u0440', '\u0420', '\u0441', '\u0421', '\u0442', 
+            '\u0422', '\u0443', '\u0423', '\u0436', '\u0416', '\u0432', '\u0412', '\u044C', '\u042C', '\u2116', 
+            '\255', '\u044B', '\u042B', '\u0437', '\u0417', '\u0448', '\u0428', '\u044D', '\u042D', '\u0449', 
+            '\u0429', '\u0447', '\u0427', '\uFFFF', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\344', '\340', '\345', '\347', '\352', '\353', '\350', '\357', 
+            '\356', '\u0131', '\304', '\305', '\311', '\346', '\306', '\364', '\366', '\362', 
+            '\373', '\371', '\u0130', '\326', '\334', '\370', '\243', '\330', '\u015E', '\u015F', 
+            '\341', '\355', '\363', '\372', '\361', '\321', '\u011E', '\u011F', '\277', '\256', 
+            '\254', '\275', '\274', '\241', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\301', '\302', '\300', '\251', '\u2563', '\u2551', '\u2557', '\u255D', '\242', 
+            '\245', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\343', '\303', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\244', '\272', '\252', 
+            '\312', '\313', '\310', '\uFFFF', '\315', '\316', '\317', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\246', '\314', '\u2580', '\323', '\337', '\324', '\322', '\365', '\325', 
+            '\265', '\uFFFF', '\327', '\332', '\333', '\331', '\354', '\377', '\257', '\264', 
+            '\255', '\261', '\uFFFF', '\276', '\266', '\247', '\367', '\270', '\260', '\250', 
+            '\267', '\271', '\263', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\343', '\340', '\301', '\347', '\352', '\312', '\350', '\315', 
+            '\324', '\354', '\303', '\302', '\311', '\300', '\310', '\364', '\365', '\362', 
+            '\332', '\371', '\314', '\325', '\334', '\242', '\243', '\331', '\u20A7', '\323', 
+            '\341', '\355', '\363', '\372', '\361', '\321', '\252', '\272', '\277', '\322', 
+            '\254', '\275', '\274', '\241', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563', '\u2551', '\u2557', '\u255D', '\u255C', 
+            '\u255B', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u255E', '\u255F', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564', 
+            '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B', '\u256A', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u258C', '\u2590', '\u2580', '\u03B1', '\337', '\u0393', '\u03C0', '\u03A3', '\u03C3', 
+            '\265', '\u03C4', '\u03A6', '\u0398', '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229', 
+            '\u2261', '\261', '\u2265', '\u2264', '\u2320', '\u2321', '\367', '\u2248', '\260', '\u2219', 
+            '\267', '\u221A', '\u207F', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\343', '\340', '\345', '\347', '\352', '\353', '\350', '\320', 
+            '\360', '\336', '\304', '\305', '\311', '\346', '\306', '\364', '\366', '\376', 
+            '\373', '\335', '\375', '\326', '\334', '\370', '\243', '\330', '\u20A7', '\u0192', 
+            '\341', '\355', '\363', '\372', '\301', '\315', '\323', '\332', '\277', '\u2310', 
+            '\254', '\275', '\274', '\241', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563', '\u2551', '\u2557', '\u255D', '\u255C', 
+            '\u255B', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u255E', '\u255F', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564', 
+            '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B', '\u256A', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u258C', '\u2590', '\u2580', '\u03B1', '\337', '\u0393', '\u03C0', '\u03A3', '\u03C3', 
+            '\265', '\u03C4', '\u03A6', '\u0398', '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229', 
+            '\u2261', '\261', '\u2265', '\u2264', '\u2320', '\u2321', '\367', '\u2248', '\260', '\u2219', 
+            '\267', '\u221A', '\u207F', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\343', '\340', '\266', '\347', '\352', '\353', '\350', '\357', 
+            '\356', '\u2017', '\300', '\247', '\311', '\310', '\312', '\364', '\313', '\317', 
+            '\373', '\371', '\244', '\324', '\334', '\242', '\243', '\331', '\333', '\u0192', 
+            '\246', '\264', '\363', '\372', '\250', '\270', '\263', '\257', '\316', '\u2310', 
+            '\254', '\275', '\274', '\276', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563', '\u2551', '\u2557', '\u255D', '\u255C', 
+            '\u255B', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u255E', '\u255F', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564', 
+            '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B', '\u256A', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u258C', '\u2590', '\u2580', '\u03B1', '\337', '\u0393', '\u03C0', '\u03A3', '\u03C3', 
+            '\265', '\u03C4', '\u03A6', '\u0398', '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229', 
+            '\u2261', '\261', '\u2265', '\u2264', '\u2320', '\u2321', '\367', '\u2248', '\260', '\u2219', 
+            '\267', '\u221A', '\u207F', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\260', '\267', 
+            '\u2219', '\u221A', '\u2592', '\u2500', '\u2502', '\u253C', '\u2524', '\u252C', '\u251C', '\u2534', 
+            '\u2510', '\u250C', '\u2514', '\u2518', '\u03B2', '\u221E', '\u03C6', '\261', '\275', '\274', 
+            '\u2248', '\253', '\273', '\uFEF7', '\uFEF8', '\uFFFF', '\uFFFF', '\uFEFB', '\uFEFC', '\uFFFF', 
+            '\240', '\255', '\uFE82', '\243', '\244', '\uFE84', '\uFFFF', '\uFFFF', '\uFE8E', '\uFE8F', 
+            '\uFE95', '\uFE99', '\u060C', '\uFE9D', '\uFEA1', '\uFEA5', '\u0660', '\u0661', '\u0662', '\u0663', 
+            '\u0664', '\u0665', '\u0666', '\u0667', '\u0668', '\u0669', '\uFED1', '\u061B', '\uFEB1', '\uFEB5', 
+            '\uFEB9', '\u061F', '\242', '\uFE80', '\uFE81', '\uFE83', '\uFE85', '\uFECC', '\uFE8A', '\uFE8D', 
+            '\uFE90', '\uFE93', '\uFE96', '\uFE9A', '\uFE9E', '\uFEA2', '\uFEA6', '\uFEA9', '\uFEAB', '\uFEAD', 
+            '\uFEAF', '\uFEB2', '\uFEB6', '\uFEBA', '\uFEBE', '\uFEC1', '\uFEC5', '\uFECA', '\uFECE', '\246', 
+            '\254', '\367', '\327', '\uFEC9', '\u0640', '\uFED2', '\uFED6', '\uFEDA', '\uFEDE', '\uFEE2', 
+            '\uFEE6', '\uFEEA', '\uFEED', '\uFEEF', '\uFEF2', '\uFEBD', '\uFECB', '\uFED0', '\uFECD', '\uFEE1', 
+            '\uFE7D', '\u0651', '\uFEE5', '\uFEE9', '\uFEEB', '\uFEF0', '\uFEF4', '\uFECF', '\uFED5', '\uFEF5', 
+            '\uFEF6', '\uFEDD', '\uFED9', '\uFEF1', '\u25A0', '\uFFFF'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\307', '\374', 
+            '\351', '\342', '\344', '\340', '\265', '\347', '\352', '\353', '\350', '\357', 
+            '\356', '\354', '\304', '\305', '\311', '\346', '\306', '\364', '\366', '\362', 
+            '\373', '\371', '\377', '\326', '\334', '\370', '\243', '\330', '\u20A7', '\u0192', 
+            '\341', '\355', '\363', '\372', '\361', '\321', '\252', '\272', '\277', '\u2310', 
+            '\254', '\275', '\274', '\241', '\253', '\244', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563', '\u2551', '\u2557', '\u255D', '\u255C', 
+            '\u255B', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u255E', '\u255F', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564', 
+            '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B', '\u256A', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u258C', '\u2590', '\u2580', '\u03B1', '\337', '\u0393', '\u03C0', '\u03A3', '\u03C3', 
+            '\265', '\u03C4', '\u03A6', '\u0398', '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229', 
+            '\u2261', '\261', '\u2265', '\u2264', '\u2320', '\u2321', '\367', '\u2248', '\260', '\u2219', 
+            '\267', '\u221A', '\u207F', '\262', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\u2302', '\uFFFF', '\uFFFF', 
+            '\uFFFF', '\uFFFF', '\uFFFF', '\uFFFF', '\u0386', '\uFFFF', '\267', '\254', '\246', '\u2018', 
+            '\u2019', '\u0388', '\u2015', '\u0389', '\u038A', '\u03AA', '\u038C', '\uFFFF', '\uFFFF', '\u038E', 
+            '\u03AB', '\251', '\u038F', '\262', '\263', '\u03AC', '\243', '\u03AD', '\u03AE', '\u03AF', 
+            '\u03CA', '\u0390', '\u03CC', '\u03CD', '\u0391', '\u0392', '\u0393', '\u0394', '\u0395', '\u0396', 
+            '\u0397', '\275', '\u0398', '\u0399', '\253', '\273', '\u2591', '\u2592', '\u2593', '\u2502', 
+            '\u2524', '\u039A', '\u039B', '\u039C', '\u039D', '\u2563', '\u2551', '\u2557', '\u255D', '\u039E', 
+            '\u039F', '\u2510', '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C', '\u03A0', '\u03A1', 
+            '\u255A', '\u2554', '\u2569', '\u2566', '\u2560', '\u2550', '\u256C', '\u03A3', '\u03A4', '\u03A5', 
+            '\u03A6', '\u03A7', '\u03A8', '\u03A9', '\u03B1', '\u03B2', '\u03B3', '\u2518', '\u250C', '\u2588', 
+            '\u2584', '\u03B4', '\u03B5', '\u2580', '\u03B6', '\u03B7', '\u03B8', '\u03B9', '\u03BA', '\u03BB', 
+            '\u03BC', '\u03BD', '\u03BE', '\u03BF', '\u03C0', '\u03C1', '\u03C3', '\u03C2', '\u03C4', '\264', 
+            '\255', '\261', '\u03C5', '\u03C6', '\u03C7', '\247', '\u03C8', '\u03F4', '\260', '\250', 
+            '\u03C9', '\u03CB', '\u03B0', '\u03CE', '\u25A0', '\240'
+        }, {
+            '\0', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\b', '\t', 
+            '\n', '\013', '\f', '\r', '\016', '\017', '\020', '\021', '\022', '\023', 
+            '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', 
+            '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', 
+            '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', 
+            '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', 
+            '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 
+            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
+            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
+            'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 
+            'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
+            'x', 'y', 'z', '{', '|', '}', '~', '\177', '\304', '\305', 
+            '\307', '\311', '\321', '\326', '\334', '\341', '\340', '\342', '\344', '\343', 
+            '\345', '\347', '\351', '\350', '\352', '\353', '\355', '\354', '\356', '\357', 
+            '\361', '\363', '\362', '\364', '\366', '\365', '\372', '\371', '\373', '\374', 
+            '\u2020', '\260', '\242', '\243', '\247', '\u2022', '\266', '\337', '\256', '\251', 
+            '\u2122', '\264', '\250', '\u2260', '\306', '\330', '\u221E', '\261', '\u2264', '\u2265', 
+            '\245', '\265', '\u2202', '\u2211', '\u220F', '\u03C0', '\u222B', '\252', '\272', '\u2126', 
+            '\346', '\370', '\277', '\241', '\254', '\u221A', '\u0192', '\u2248', '\u2206', '\253', 
+            '\273', '\u2026', '\240', '\300', '\303', '\325', '\u0152', '\u0153', '\u2010', '\u2014', 
+            '\u201C', '\u201D', '\u2018', '\u2019', '\367', '\u25CA', '\377', '\u0178', '\u2044', '\244', 
+            '\u2039', '\u203A', 'f', 'f', '\u2021', '\267', '\u201A', '\u201E', '\u2030', '\302', 
+            '\312', '\301', '\313', '\310', '\315', '\316', '\317', '\314', '\323', '\324', 
+            '\uFDFF', '\322', '\332', '\333', '\331', '\u0131', '\u02C6', '\u02DC', '\257', '\u02D8', 
+            '\u02D9', '\u02DA', '\270', '\u02DD', '\u02DB', '\u02C7'
+        }
+    };
+    static char unicode2DOS437[];
+    
+    /**
+     * Método que permite convertir textos Unicode en textos codificados según la
+     * especificación DOS437.
+     * @param stringbuffer, la cadena a transformar.
+     * @param i, 2 por defecto.
+     * @param c, '?' por defecto.
+     * @return
+     */
+    static String char2DOS437(StringBuffer stringbuffer, int i, char c)
+    {
+        if(unicode2DOS437 == null)
+        {
+            unicode2DOS437 = new char[0x10000];
+            for(int j = 0; j < 256; j++)
+            {
+                char c1;
+                if((c1 = unicode[2][j]) != '\uFFFF')
+                    unicode2DOS437[c1] = (char)j;
+            }
+
+        }
+        if(i != 2)
+        {
+            StringBuffer stringbuffer1 = new StringBuffer(stringbuffer.length());
+            for(int k = 0; k < stringbuffer.length(); k++)
+            {
+                char c2 = unicode2DOS437[stringbuffer.charAt(k)];
+                stringbuffer1.append(c2 == 0 ? c : c2);
+            }
+
+            return new String(stringbuffer1);
+        } else
+        {
+            return new String(stringbuffer);
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/Unicode.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfText.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfText.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfText.java	(revision 10281)
@@ -0,0 +1,260 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad TEXT de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ * jmorell, 050406: El segundo punto es opcional.
+ */
+public class DxfText extends DxfEntity {
+    public final static int ALIGN_LEFT = 0;
+    public final static int ALIGN_CENTER = 1;
+    public final static int ALIGN_RIGHT = 2;
+    public final static int ALIGN_ALIGNED = 3;
+    public final static int ALIGN_MIDDLE = 4;
+    public final static int ALIGN_FIT = 5;
+    private String text = null;
+    Point2D[] pts;
+    private Point2D pt;
+    private double rot = 0.0;
+    private double h = 1.0;
+    int align = ALIGN_LEFT;
+    private boolean twoPointsFlag;
+
+    /**
+     * Constructor de DxfText.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfText.
+     * @param layer, capa del DXF en la que se encuentra el DxfText.
+     * @param txt, texto.
+     */
+    public DxfText(IProjection proj, DxfLayer layer, String txt) {
+        super(proj, layer);
+
+        //System.out.println("Dxf: TEXT '"+txt+"'.");
+        extent = new Extent();
+        text = txt;
+        pts = new Point2D[2];
+        pt = new Point2D.Double();
+        twoPointsFlag = false;
+    }
+
+    /**
+     * Establece el punto de inserción del DxfText.
+     * @param pt, punto de inserción.
+     */
+    public void setPt(Point2D pt) {
+        this.pt = pt;
+    }
+
+    /**
+     * @return Returns the pt.
+     */
+    public Point2D getPt() {
+        return pt;
+    }
+
+    /**
+     * Establece si el texto se situa a través de dos puntos de inserción. Estos dos
+     * puntos definirán su orientación. 
+     * @param f
+     */
+    public void setTwoPointsFlag(boolean f) {
+        twoPointsFlag = f;
+    }
+
+    /**
+     * Informa sobre si el texto se situa a través de dos puntos de inserción. Estos dos
+     * puntos definirán su orientación.
+     * @return boolean
+     */
+    public boolean getTwoPointsFlag() {
+        return twoPointsFlag;
+    }
+
+    /**
+     * Establece el primer punto de inserción del texto cuando este se inserta a través
+     * de dos puntos de inserción.
+     * @param pt
+     */
+    public void setPt1(Point2D pt) {
+        pts[0] = pt;
+        extent.add(pt);
+    }
+
+    /**
+     * Obtiene el primer punto de inserción del texto cuando este se inserta a través
+     * de dos puntos de inserción.
+     * @return Point2D
+     */
+    public Point2D getPt1() {
+        return pts[0];
+    }
+
+    /**
+     * Establece el segundo punto de inserción del texto cuando este se inserta a través
+     * de dos puntos de inserción.
+     * @param pt
+     */
+    public void setPt2(Point2D pt) {
+        pts[1] = pt;
+        extent.add(pt);
+    }
+
+    /**
+     * Obtiene el segundo punto de inserción del texto cuando este se inserta a través
+     * de dos puntos de inserción.
+     * @return Point2D
+     */
+    public Point2D getPt2() {
+        return pts[1];
+    }
+
+    /**
+     * Establece la altura del texto.
+     * @param h, altura del texto.
+     */
+    public void setHeight(double h) {
+        this.h = h;
+    }
+
+    /**
+     * Establece la inclinación del texto.
+     * @param r, ángulo de inclinación del texto.
+     */
+    public void setRotation(double r) {
+        rot = r;
+    }
+
+    /**
+     * Devuelve la inclinación del texto.
+     * @return double
+     */
+    public double getRotation() {
+        return rot;
+    }
+
+    /**
+     * Devuelve el texto.
+     * @return String
+     */
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * Permite reproyectar un DxfText dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D[] savePts = pts;
+
+        pts = new Point2D[2];
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.length; i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+
+            if (savePts[i] == null) {
+                ptDest = null;
+            } else {
+                ptDest = rp.convert((Point2D) savePts[i], ptDest);
+                extent.add(ptDest);
+            }
+
+            pts[i] = ptDest;
+        }
+
+        // Reproyecto la altura del texto
+        Point2D ptOrig = rp.getPOrig().createPoint(savePts[0].getX(),
+                                                   savePts[0].getY() + h);
+        ptDest = rp.getPDest().createPoint(0D, 0D);
+        ptDest = rp.convert(ptOrig, ptDest);
+        h = ptDest.getY() - pts[0].getY();
+        setProjection(rp.getPDest());
+    }
+
+    /**
+     * Permite dibujar un DxfText.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        if (dxfColor == AcadColor.BYLAYER) {
+            g.setColor(layer.getColor());
+        } else {
+            g.setColor(AcadColor.getColor(dxfColor));
+        }
+
+        Font fntSave = g.getFont();
+        Font fnt;
+        Point2D ptT0 = new Point2D.Double(pts[0].getX(), pts[0].getY());
+        Point2D ptT1 = new Point2D.Double(pts[0].getX() + h, pts[0].getY() + h);
+        vp.mat.transform(ptT0, ptT0);
+        vp.mat.transform(ptT1, ptT1);
+        fnt = new Font(fntSave.getName(), fntSave.getStyle(),
+                       (int) (ptT1.getX() - ptT0.getX()));
+        g.setFont(fnt);
+        ptT0.setLocation(pts[0].getX(), pts[0].getY());
+        vp.mat.transform(ptT0, ptT0);
+
+        // Codigo para implementar rotacion de textos.
+        // Falta depurar.
+        /*System.out.println("040906: rot = " + rot);
+        //angle = pathLen.angleAtLength(midDistance);
+        rot = Math.toRadians(rot);
+        if (rot < 0) rot = rot + 2.0*Math.PI;
+        if ((rot > (Math.PI/2)) && (rot < (3 * Math.PI /2))) rot = rot - (Math.PI/2.0);
+        rot = Math.toDegrees(rot);
+        //theLabel.setRotation(Math.toDegrees(angle));
+        AffineTransform transfRot = AffineTransform.getRotateInstance(rot, ptT0.getX(), ptT0.getY());
+        AffineTransform ant = g.getTransform();
+        g.setTransform(transfRot);*/
+        g.drawString(text, (int) ptT0.getX(), (int) ptT0.getY());
+        g.setFont(fntSave);
+
+        //g.setTransform(ant);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.dxf.DxfEntity#toDxfFileString()
+     */
+    public String toDxfString() {
+        // TODO Auto-generated method stub
+        return "";
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfText.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/AcadColor.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/AcadColor.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/AcadColor.java	(revision 10281)
@@ -0,0 +1,350 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import java.awt.Color;
+
+
+/**
+ * Colores RGB a partir de códigos de color de AutoCAD
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class AcadColor {
+    public final static int BYLAYER = 256;
+    public final static int BYBLOCK = 0;
+    private static AcadColor[] colores = initTable();
+    int code;
+    float r0;
+    float g0;
+    float b0;
+    int r;
+    int g;
+    int b;
+    Color color = null;
+    
+    /**
+     * Constructor de AcadColor.
+     * @param code, código de color de AutoCAD.
+     * @param r0, componente de color rojo (0-1).
+     * @param g0, componente de color verde (0-1).
+     * @param b0, componente de color azul (0-1).
+     * @param r, componente de color rojo (0-255).
+     * @param g, componente de color verde (0-255).
+     * @param b, compponente de color azul (0-255).
+     */
+    public AcadColor(int code, double r0, double g0, double b0, double r,
+                     double g, double b) {
+        this.code = code;
+        this.r0 = (float) r0;
+        this.g0 = (float) g0;
+        this.b0 = (float) b0;
+        this.r = (int) r;
+        this.g = (int) g;
+        this.b = (int) b;
+        this.color = new Color(this.r, this.g, this.b);
+        colores[code] = this;
+    }
+    
+    /**
+     * Devuelve el color de java correspondiente a un código de color de AutoCAD que
+     * se le pasa como argumento.
+     * @param code, código de color de AutoCAD.
+     * @return Color
+     */
+    public static Color getColor(int code) {
+        return colores[code].color;
+    }
+    
+    /**
+     * Devuelve un array de objetos AcadColor que sirven de base para establecer
+     * la relación entre colores de AutoCAD y colores de java.
+     * @return AcadColor[], array de objetos AcadColor con las correspondencias entre
+     * los colores de AutoCAD y los colores java.
+     */
+    public static AcadColor[] initTable() {
+        colores = new AcadColor[256];
+
+        new AcadColor(0, 0, 0, 0, 0, 0, 0);
+
+        new AcadColor(1, 1, 0, 0, 255, 0, 0);
+        new AcadColor(2, 1, 1, 0, 255, 255, 0);
+        new AcadColor(3, 0, 1, 0, 0, 255, 0);
+        new AcadColor(4, 0, 1, 1, 0, 255, 255);
+        new AcadColor(5, 0, 0, 1, 0, 0, 255);
+        new AcadColor(6, 1, 0, 1, 255, 0, 255);
+        new AcadColor(7, 0, 0, 0, 0, 0, 0);
+        new AcadColor(8, 0, 0, 0, 0, 0, 0);
+        new AcadColor(9, 0, 0, 0, 0, 0, 0);
+        new AcadColor(10, 1, 0, 0, 255, 0, 0);
+        new AcadColor(11, 1.0, 0.5, 0.5, 255.0, 127.5, 127.5);
+        new AcadColor(12, 0.65, 0, 0, 165.75, 0, 0);
+        new AcadColor(13, 0.65, 0.325, 0.325, 165.75, 82.875, 82.875);
+        new AcadColor(14, 0.5, 0, 0, 127.5, 0, 0);
+        new AcadColor(15, 0.5, 0.25, 0.25, 127.5, 63.75, 63.75);
+        new AcadColor(16, 0.3, 0, 0, 76.5, 0, 0);
+        new AcadColor(17, 0.3, 0.15, 0.15, 76.5, 38.25, 38.25);
+        new AcadColor(18, 0.15, 0, 0, 38.25, 0, 0);
+        new AcadColor(19, 0.15, 0.075, 0.075, 38.25, 19.125, 19.125);
+        new AcadColor(20, 1, 0.25, 0, 255, 63.75, 0);
+        new AcadColor(21, 1, 0.625, 0.5, 255, 159.375, 127.5);
+        new AcadColor(22, 0.65, 0.1625, 0, 165.75, 41.4375, 0);
+        new AcadColor(23, 0.65, 0.4063, 0.325, 165.75, 103.6065, 82.875);
+        new AcadColor(24, 0.5, 0.125, 0, 127.5, 31.875, 0);
+        new AcadColor(25, 0.5, 0.3125, 0.25, 127.5, 79.6875, 63.75);
+        new AcadColor(26, 0.3, 0.075, 0, 76.5, 19.125, 0);
+        new AcadColor(27, 0.3, 0.1875, 0.15, 76.5, 47.8125, 38.25);
+        new AcadColor(28, 0.15, 0.0375, 0, 38.25, 9.5625, 0);
+        new AcadColor(29, 0.15, 0.0938, 0.075, 38.25, 23.919, 19.125);
+        new AcadColor(30, 1, 0.5, 0, 255, 127.5, 0);
+        new AcadColor(31, 1, 0.75, 0.5, 255, 191.25, 127.5);
+        new AcadColor(32, 0.65, 0.325, 0, 165.75, 82.875, 0);
+        new AcadColor(33, 0.65, 0.4875, 0.325, 165.75, 124.3125, 82.875);
+        new AcadColor(34, 0.5, 0.25, 0, 127.5, 63.75, 0);
+        new AcadColor(35, 0.5, 0.375, 0.25, 127.5, 95.625, 63.75);
+        new AcadColor(36, 0.3, 0.15, 0, 76.5, 38.25, 0);
+        new AcadColor(37, 0.3, 0.225, 0.15, 76.5, 57.375, 38.25);
+        new AcadColor(38, 0.15, 0.075, 0, 38.25, 19.125, 0);
+        new AcadColor(39, 0.15, 0.1125, 0.075, 38.25, 28.6875, 19.125);
+        new AcadColor(40, 1, 0.75, 0, 255, 191.25, 0);
+        new AcadColor(41, 1, 0.875, 0.5, 255, 223.125, 127.5);
+        new AcadColor(42, 0.65, 0.4875, 0, 165.75, 124.3125, 0);
+        new AcadColor(43, 0.65, 0.5688, 0.325, 165.75, 145.044, 82.875);
+        new AcadColor(44, 0.5, 0.375, 0, 127.5, 95.625, 0);
+        new AcadColor(45, 0.5, 0.4375, 0.25, 127.5, 111.5625, 63.75);
+        new AcadColor(46, 0.3, 0.225, 0, 76.5, 57.375, 0);
+        new AcadColor(47, 0.3, 0.2625, 0.15, 76.5, 66.9375, 38.25);
+        new AcadColor(48, 0.15, 0.1125, 0, 38.25, 28.6875, 0);
+        new AcadColor(49, 0.15, 0.1313, 0.075, 38.25, 33.4815, 19.125);
+        new AcadColor(50, 1, 1, 0, 255, 255, 0);
+        new AcadColor(51, 1, 1, 0.5, 255, 255, 127.5);
+        new AcadColor(52, 0.65, 0.65, 0, 165.75, 165.75, 0);
+        new AcadColor(53, 0.65, 0.65, 0.325, 165.75, 165.75, 82.875);
+        new AcadColor(54, 0.5, 0.5, 0, 127.5, 127.5, 0);
+        new AcadColor(55, 0.5, 0.5, 0.25, 127.5, 127.5, 63.75);
+        new AcadColor(56, 0.3, 0.3, 0, 76.5, 76.5, 0);
+        new AcadColor(57, 0.3, 0.3, 0.15, 76.5, 76.5, 38.25);
+        new AcadColor(58, 0.15, 0.15, 0, 38.25, 38.25, 0);
+        new AcadColor(59, 0.15, 0.15, 0.075, 38.25, 38.25, 19.125);
+        new AcadColor(60, 0.75, 1, 0, 191.25, 255, 0);
+        new AcadColor(61, 0.875, 1, 0.5, 223.125, 255, 127.5);
+        new AcadColor(62, 0.4875, 0.65, 0, 124.3125, 165.75, 0);
+        new AcadColor(63, 0.5688, 0.65, 0.325, 145.044, 165.75, 82.875);
+        new AcadColor(64, 0.375, 0.5, 0, 95.625, 127.5, 0);
+        new AcadColor(65, 0.4375, 0.5, 0.25, 111.5625, 127.5, 63.75);
+        new AcadColor(66, 0.225, 0.3, 0, 57.375, 76.5, 0);
+        new AcadColor(67, 0.2625, 0.3, 0.15, 66.9375, 76.5, 38.25);
+        new AcadColor(68, 0.1125, 0.15, 0, 28.6875, 38.25, 0);
+        new AcadColor(69, 0.1313, 0.15, 0.075, 33.4815, 38.25, 19.125);
+        new AcadColor(70, 0.5, 1, 0, 127.5, 255, 0);
+        new AcadColor(71, 0.75, 1, 0.5, 191.25, 255, 127.5);
+        new AcadColor(72, 0.325, 0.65, 0, 82.875, 165.75, 0);
+        new AcadColor(73, 0.4875, 0.65, 0.325, 124.3125, 165.75, 82.875);
+        new AcadColor(74, 0.25, 0.5, 0, 63.75, 127.5, 0);
+        new AcadColor(75, 0.375, 0.5, 0.25, 95.625, 127.5, 63.75);
+        new AcadColor(76, 0.15, 0.3, 0, 38.25, 76.5, 0);
+        new AcadColor(77, 0.225, 0.3, 0.15, 57.375, 76.5, 38.25);
+        new AcadColor(78, 0.075, 0.15, 0, 19.125, 38.25, 0);
+        new AcadColor(79, 0.1125, 0.15, 0.075, 28.6875, 38.25, 19.125);
+        new AcadColor(80, 0.25, 1, 0, 63.75, 255, 0);
+        new AcadColor(81, 0.625, 1, 0.5, 159.375, 255, 127.5);
+        new AcadColor(82, 0.1625, 0.65, 0, 41.4375, 165.75, 0);
+        new AcadColor(83, 0.4063, 0.65, 0.325, 103.6065, 165.75, 82.875);
+        new AcadColor(84, 0.125, 0.5, 0, 31.875, 127.5, 0);
+        new AcadColor(85, 0.3125, 0.5, 0.25, 79.6875, 127.5, 63.75);
+        new AcadColor(86, 0.075, 0.3, 0, 19.125, 76.5, 0);
+        new AcadColor(87, 0.1875, 0.3, 0.15, 47.8125, 76.5, 38.25);
+        new AcadColor(88, 0.0375, 0.15, 0, 9.5625, 38.25, 0);
+        new AcadColor(89, 0.0938, 0.15, 0.075, 23.919, 38.25, 19.125);
+        new AcadColor(90, 0, 1, 0, 0, 255, 0);
+        new AcadColor(91, 0.5, 1, 0.5, 127.5, 255, 127.5);
+        new AcadColor(92, 0, 0.65, 0, 0, 165.75, 0);
+        new AcadColor(93, 0.325, 0.65, 0.325, 82.875, 165.75, 82.875);
+        new AcadColor(94, 0, 0.5, 0, 0, 127.5, 0);
+        new AcadColor(95, 0.25, 0.5, 0.25, 63.75, 127.5, 63.75);
+        new AcadColor(96, 0, 0.3, 0, 0, 76.5, 0);
+        new AcadColor(97, 0.15, 0.3, 0.15, 38.25, 76.5, 38.25);
+        new AcadColor(98, 0, 0.15, 0, 0, 38.25, 0);
+        new AcadColor(99, 0.075, 0.15, 0.075, 19.125, 38.25, 19.125);
+        new AcadColor(100, 0, 1, 0.25, 0, 255, 63.75);
+        new AcadColor(101, 0.5, 1, 0.625, 127.5, 255, 159.375);
+        new AcadColor(102, 0, 0.65, 0.1625, 0, 165.75, 41.4375);
+        new AcadColor(103, 0.325, 0.65, 0.4063, 82.875, 165.75, 103.6065);
+        new AcadColor(104, 0, 0.5, 0.125, 0, 127.5, 31.875);
+        new AcadColor(105, 0.25, 0.5, 0.3125, 63.75, 127.5, 79.6875);
+        new AcadColor(106, 0, 0.3, 0.075, 0, 76.5, 19.125);
+        new AcadColor(107, 0.15, 0.3, 0.1875, 38.25, 76.5, 47.8125);
+        new AcadColor(108, 0, 0.15, 0.0375, 0, 38.25, 9.5625);
+        new AcadColor(109, 0.075, 0.15, 0.0938, 19.125, 38.25, 23.919);
+        new AcadColor(110, 0, 1, 0.5, 0, 255, 127.5);
+        new AcadColor(111, 0.5, 1, 0.75, 127.5, 255, 191.25);
+        new AcadColor(112, 0, 0.65, 0.325, 0, 165.75, 82.875);
+        new AcadColor(113, 0.325, 0.65, 0.4875, 82.875, 165.75, 124.3125);
+        new AcadColor(114, 0, 0.5, 0.25, 0, 127.5, 63.75);
+        new AcadColor(115, 0.25, 0.5, 0.375, 63.75, 127.5, 95.625);
+        new AcadColor(116, 0, 0.3, 0.15, 0, 76.5, 38.25);
+        new AcadColor(117, 0.15, 0.3, 0.225, 38.25, 76.5, 57.375);
+        new AcadColor(118, 0, 0.15, 0.075, 0, 38.25, 19.125);
+        new AcadColor(119, 0.075, 0.15, 0.1125, 19.125, 38.25, 28.6875);
+        new AcadColor(120, 0, 1, 0.75, 0, 255, 191.25);
+        new AcadColor(121, 0.5, 1, 0.875, 127.5, 255, 223.125);
+        new AcadColor(122, 0, 0.65, 0.4875, 0, 165.75, 124.3125);
+        new AcadColor(123, 0.325, 0.65, 0.5688, 82.875, 165.75, 145.044);
+        new AcadColor(124, 0, 0.5, 0.375, 0, 127.5, 95.625);
+        new AcadColor(125, 0.25, 0.5, 0.4375, 63.75, 127.5, 111.5625);
+        new AcadColor(126, 0, 0.3, 0.225, 0, 76.5, 57.375);
+        new AcadColor(127, 0.15, 0.3, 0.2625, 38.25, 76.5, 66.9375);
+        new AcadColor(128, 0, 0.15, 0.1125, 0, 38.25, 28.6875);
+        new AcadColor(129, 0.075, 0.15, 0.1313, 19.125, 38.25, 33.4815);
+        new AcadColor(130, 0, 1, 1, 0, 255, 255);
+        new AcadColor(131, 0.5, 1, 1, 127.5, 255, 255);
+        new AcadColor(132, 0, 0.65, 0.65, 0, 165.75, 165.75);
+        new AcadColor(133, 0.325, 0.65, 0.65, 82.875, 165.75, 165.75);
+        new AcadColor(134, 0, 0.5, 0.5, 0, 127.5, 127.5);
+        new AcadColor(135, 0.25, 0.5, 0.5, 63.75, 127.5, 127.5);
+        new AcadColor(136, 0, 0.3, 0.3, 0, 76.5, 76.5);
+        new AcadColor(137, 0.15, 0.3, 0.3, 38.25, 76.5, 76.5);
+        new AcadColor(138, 0, 0.15, 0.15, 0, 38.25, 38.25);
+        new AcadColor(139, 0.075, 0.15, 0.15, 19.125, 38.25, 38.25);
+        new AcadColor(140, 0, 0.75, 1, 0, 191.25, 255);
+        new AcadColor(141, 0.5, 0.875, 1, 127.5, 223.125, 255);
+        new AcadColor(142, 0, 0.4875, 0.65, 0, 124.3125, 165.75);
+        new AcadColor(143, 0.325, 0.5688, 0.65, 82.875, 145.044, 165.75);
+        new AcadColor(144, 0, 0.375, 0.5, 0, 95.625, 127.5);
+        new AcadColor(145, 0.25, 0.4375, 0.5, 63.75, 111.5625, 127.5);
+        new AcadColor(146, 0, 0.225, 0.3, 0, 57.375, 76.5);
+        new AcadColor(147, 0.15, 0.2625, 0.3, 38.25, 66.9375, 76.5);
+        new AcadColor(148, 0, 0.1125, 0.15, 0, 28.6875, 38.25);
+        new AcadColor(149, 0.075, 0.1313, 0.15, 19.125, 33.4815, 38.25);
+        new AcadColor(150, 0, 0.5, 1, 0, 127.5, 255);
+        new AcadColor(151, 0.5, 0.75, 1, 127.5, 191.25, 255);
+        new AcadColor(152, 0, 0.325, 0.65, 0, 82.875, 165.75);
+        new AcadColor(153, 0.325, 0.4875, 0.65, 82.875, 124.3125, 165.75);
+        new AcadColor(154, 0, 0.25, 0.5, 0, 63.75, 127.5);
+        new AcadColor(155, 0.25, 0.375, 0.5, 63.75, 95.625, 127.5);
+        new AcadColor(156, 0, 0.15, 0.3, 0, 38.25, 76.5);
+        new AcadColor(157, 0.15, 0.225, 0.3, 38.25, 57.375, 76.5);
+        new AcadColor(158, 0, 0.075, 0.15, 0, 19.125, 38.25);
+        new AcadColor(159, 0.075, 0.1125, 0.15, 19.125, 28.6875, 38.25);
+        new AcadColor(160, 0, 0.25, 1, 0, 63.75, 255);
+        new AcadColor(161, 0.5, 0.625, 1, 127.5, 159.375, 255);
+        new AcadColor(162, 0, 0.1625, 0.65, 0, 41.4375, 165.75);
+        new AcadColor(163, 0.325, 0.4063, 0.65, 82.875, 103.6065, 165.75);
+        new AcadColor(164, 0, 0.125, 0.5, 0, 31.875, 127.5);
+        new AcadColor(165, 0.25, 0.3125, 0.5, 63.75, 79.6875, 127.5);
+        new AcadColor(166, 0, 0.075, 0.3, 0, 19.125, 76.5);
+        new AcadColor(167, 0.15, 0.1875, 0.3, 38.25, 47.8125, 76.5);
+        new AcadColor(168, 0, 0.0375, 0.15, 0, 9.5625, 38.25);
+        new AcadColor(169, 0.075, 0.0938, 0.15, 19.125, 23.919, 38.25);
+        new AcadColor(170, 0, 0, 1, 0, 0, 255);
+        new AcadColor(171, 0.5, 0.5, 1, 127.5, 127.5, 255);
+        new AcadColor(172, 0, 0, 0.65, 0, 0, 165.75);
+        new AcadColor(173, 0.325, 0.325, 0.65, 82.875, 82.875, 165.75);
+        new AcadColor(174, 0, 0, 0.5, 0, 0, 127.5);
+        new AcadColor(175, 0.25, 0.25, 0.5, 63.75, 63.75, 127.5);
+        new AcadColor(176, 0, 0, 0.3, 0, 0, 76.5);
+        new AcadColor(177, 0.15, 0.15, 0.3, 38.25, 38.25, 76.5);
+        new AcadColor(178, 0, 0, 0.15, 0, 0, 38.25);
+        new AcadColor(179, 0.075, 0.075, 0.15, 19.125, 19.125, 38.25);
+        new AcadColor(180, 0.25, 0, 1, 63.75, 0, 255);
+        new AcadColor(181, 0.625, 0.5, 1, 159.375, 127.5, 255);
+        new AcadColor(182, 0.1625, 0, 0.65, 41.4375, 0, 165.75);
+        new AcadColor(183, 0.4063, 0.325, 0.65, 103.6065, 82.875, 165.75);
+        new AcadColor(184, 0.125, 0, 0.5, 31.875, 0, 127.5);
+        new AcadColor(185, 0.3125, 0.25, 0.5, 79.6875, 63.75, 127.5);
+        new AcadColor(186, 0.075, 0, 0.3, 19.125, 0, 76.5);
+        new AcadColor(187, 0.1875, 0.15, 0.3, 47.8125, 38.25, 76.5);
+        new AcadColor(188, 0.0375, 0, 0.15, 9.5625, 0, 38.25);
+        new AcadColor(189, 0.0938, 0.075, 0.15, 23.919, 19.125, 38.25);
+        new AcadColor(190, 0.5, 0, 1, 127.5, 0, 255);
+        new AcadColor(191, 0.75, 0.5, 1, 191.25, 127.5, 255);
+        new AcadColor(192, 0.325, 0, 0.65, 82.875, 0, 165.75);
+        new AcadColor(193, 0.4875, 0.325, 0.65, 124.3125, 82.875, 165.75);
+        new AcadColor(194, 0.25, 0, 0.5, 63.75, 0, 127.5);
+        new AcadColor(195, 0.375, 0.25, 0.5, 95.625, 63.75, 127.5);
+        new AcadColor(196, 0.15, 0, 0.3, 38.25, 0, 76.5);
+        new AcadColor(197, 0.225, 0.15, 0.3, 57.375, 38.25, 76.5);
+        new AcadColor(198, 0.075, 0, 0.15, 19.125, 0, 38.25);
+        new AcadColor(199, 0.1125, 0.075, 0.15, 28.6875, 19.125, 38.25);
+        new AcadColor(200, 0.75, 0, 1, 191.25, 0, 255);
+        new AcadColor(201, 0.875, 0.5, 1, 223.125, 127.5, 255);
+        new AcadColor(202, 0.4875, 0, 0.65, 124.3125, 0, 165.75);
+        new AcadColor(203, 0.5688, 0.325, 0.65, 145.044, 82.875, 165.75);
+        new AcadColor(204, 0.375, 0, 0.5, 95.625, 0, 127.5);
+        new AcadColor(205, 0.4375, 0.25, 0.5, 111.5625, 63.75, 127.5);
+        new AcadColor(206, 0.225, 0, 0.3, 57.375, 0, 76.5);
+        new AcadColor(207, 0.2625, 0.15, 0.3, 66.9375, 38.25, 76.5);
+        new AcadColor(208, 0.1125, 0, 0.15, 28.6875, 0, 38.25);
+        new AcadColor(209, 0.1313, 0.075, 0.15, 33.4815, 19.125, 38.25);
+        new AcadColor(210, 1, 0, 1, 255, 0, 255);
+        new AcadColor(211, 1, 0.5, 1, 255, 127.5, 255);
+        new AcadColor(212, 0.65, 0, 0.65, 165.75, 0, 165.75);
+        new AcadColor(213, 0.65, 0.325, 0.65, 165.75, 82.875, 165.75);
+        new AcadColor(214, 0.5, 0, 0.5, 127.5, 0, 127.5);
+        new AcadColor(215, 0.5, 0.25, 0.5, 127.5, 63.75, 127.5);
+        new AcadColor(216, 0.3, 0, 0.3, 76.5, 0, 76.5);
+        new AcadColor(217, 0.3, 0.15, 0.3, 76.5, 38.25, 76.5);
+        new AcadColor(218, 0.15, 0, 0.15, 38.25, 0, 38.25);
+        new AcadColor(219, 0.15, 0.075, 0.15, 38.25, 19.125, 38.25);
+        new AcadColor(220, 1, 0, 0.75, 255, 0, 191.25);
+        new AcadColor(221, 1, 0.5, 0.875, 255, 127.5, 223.125);
+        new AcadColor(222, 0.65, 0, 0.4875, 165.75, 0, 124.3125);
+        new AcadColor(223, 0.65, 0.325, 0.5688, 165.75, 82.875, 145.044);
+        new AcadColor(224, 0.5, 0, 0.375, 127.5, 0, 95.625);
+        new AcadColor(225, 0.5, 0.25, 0.4375, 127.5, 63.75, 111.5625);
+        new AcadColor(226, 0.3, 0, 0.225, 76.5, 0, 57.375);
+        new AcadColor(227, 0.3, 0.15, 0.2625, 76.5, 38.25, 66.9375);
+        new AcadColor(228, 0.15, 0, 0.1125, 38.25, 0, 28.6875);
+        new AcadColor(229, 0.15, 0.075, 0.1313, 38.25, 19.125, 33.4815);
+        new AcadColor(230, 1, 0, 0.5, 255, 0, 127.5);
+        new AcadColor(231, 1, 0.5, 0.75, 255, 127.5, 191.25);
+        new AcadColor(232, 0.65, 0, 0.325, 165.75, 0, 82.875);
+        new AcadColor(233, 0.65, 0.325, 0.4875, 165.75, 82.875, 124.3125);
+        new AcadColor(234, 0.5, 0, 0.25, 127.5, 0, 63.75);
+        new AcadColor(235, 0.5, 0.25, 0.375, 127.5, 63.75, 95.625);
+        new AcadColor(236, 0.3, 0, 0.15, 76.5, 0, 38.25);
+        new AcadColor(237, 0.3, 0.15, 0.225, 76.5, 38.25, 57.375);
+        new AcadColor(238, 0.15, 0, 0.075, 38.25, 0, 19.125);
+        new AcadColor(239, 0.15, 0.075, 0.1125, 38.25, 19.125, 28.6875);
+        new AcadColor(240, 1, 0, 0.25, 255, 0, 63.75);
+        new AcadColor(241, 1, 0.5, 0.625, 255, 127.5, 159.375);
+        new AcadColor(242, 0.65, 0, 0.1625, 165.75, 0, 41.4375);
+        new AcadColor(243, 0.65, 0.325, 0.4063, 165.75, 82.875, 103.6065);
+        new AcadColor(244, 0.5, 0, 0.125, 127.5, 0, 31.875);
+        new AcadColor(245, 0.5, 0.25, 0.3125, 127.5, 63.75, 79.6875);
+        new AcadColor(246, 0.3, 0, 0.075, 76.5, 0, 19.125);
+        new AcadColor(247, 0.3, 0.15, 0.1875, 76.5, 38.25, 47.8125);
+        new AcadColor(248, 0.15, 0, 0.0375, 38.25, 0, 9.5625);
+        new AcadColor(249, 0.15, 0.075, 0.0938, 38.25, 19.125, 23.919);
+        new AcadColor(250, 0.33, 0.33, 0.33, 84.15, 84.15, 84.15);
+        new AcadColor(251, 0.464, 0.464, 0.464, 118.32, 118.32, 118.32);
+        new AcadColor(252, 0.598, 0.598, 0.598, 152.49, 152.49, 152.49);
+        new AcadColor(253, 0.732, 0.732, 0.732, 186.66, 186.66, 186.66);
+        new AcadColor(254, 0.866, 0.866, 0.866, 220.83, 220.83, 220.83);
+        new AcadColor(255, 1.0, 1.0, 1.0, 255.0, 255.0, 255.0);
+
+        return AcadColor.colores;
+    }
+}
+;

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/AcadColor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfAttrib.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfAttrib.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfAttrib.java	(revision 10281)
@@ -0,0 +1,136 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad ATTRIB de un fichero DXF.
+ * @author jmorell
+ */
+public class DxfAttrib extends DxfEntity {
+    private Point2D pt;
+    
+    /**
+     * Constructor de DxfAttrib.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfAttrib.
+     * @param layer, capa del DXF en la que se encuentra el DxfAttrib.
+     */
+    public DxfAttrib(IProjection proj, DxfLayer layer) {
+        super(proj, layer);
+        extent = new Extent();
+        pt = new Point2D.Double();
+    }
+    
+    /**
+     * Establece el punto de inserción del DxfAttrib.
+     * @param pt, punto de inserción.
+     */
+    public void setPt(Point2D pt) {
+        this.pt = pt;
+        extent.add(pt);
+    }
+    
+    /**
+     * Permite reproyectar un DxfAttrib dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D savePt = pt;
+
+        pt = new Point2D.Double();
+        extent = new Extent();
+
+        Point2D ptDest = rp.getPDest().createPoint(0.0, 0.0);
+
+        if (savePt == null) {
+            ptDest = null;
+        } else {
+            ptDest = rp.convert((Point2D) savePt, ptDest);
+            extent.add(ptDest);
+        }
+
+        pt = ptDest;
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar un DxfAttrib.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //AffineTransform msave=g.getTransform();
+        //g.setTransform(vp.mat);
+        if (dxfColor == AcadColor.BYLAYER) {
+            g.setColor(layer.getColor());
+        } else {
+            g.setColor(AcadColor.getColor(dxfColor));
+        }
+
+        Point2D ptT = new Point2D.Double(0, 0);
+        vp.mat.transform(ptT, ptT);
+        ptT.setLocation(pt.getX(), pt.getY());
+        vp.mat.transform(ptT, ptT);
+        g.drawLine((int) ptT.getX(), (int) ptT.getY(), (int) ptT.getX(),
+                   (int) ptT.getY());
+
+        //g.setTransform(msave);
+    }
+
+    /**
+     * 050406, jmorell: Implementación parcial. Está para DxfPoint. Falta hacerlo
+     * para un DxfAttrib ...
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "POINT"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbPoint"));
+        sb.append(DxfGroup.toString(10, pt.getX(), 6));
+        sb.append(DxfGroup.toString(20, pt.getY(), 6));
+        sb.append(DxfGroup.toString(30, 0.0, 6));
+
+        return sb.toString();
+    }
+
+    /**
+     * @return Returns the pt.
+     */
+    public Point2D getPt() {
+        return pt;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfAttrib.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTable.java	(revision 10281)
@@ -0,0 +1,91 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import java.util.Vector;
+
+
+/**
+ * Lista (Tabla) de capas del fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class DxfTable {
+    public Vector items = null;
+    public boolean createNotFoundLayers = true;
+
+    /**
+     * Constructor de DxfTable.
+     */
+    public DxfTable() {
+        items = new Vector();
+    }
+
+    /**
+     * Añade un elemento a la tabla. En la actualidad esta table solo está implementada
+     * para soportar capas.
+     * @param layer, la capa que añadimos.
+     */
+    public void add(DxfTableItem layer) {
+        items.add(layer);
+    }
+
+    /**
+     * Devuelve una de las capas de la tabla de capas dada por su nombre.
+     * @param name, nombre de la capa que queremos obtener.
+     * @return DxfTableItem, la capa que buscamos.
+     */
+    public DxfTableItem getByName(String name) {
+        DxfTableItem capa = null;
+
+        for (int i = 0; i < items.size(); i++) {
+            capa = (DxfTableItem) items.get(i);
+
+            if (capa.getName().compareToIgnoreCase(name) == 0) {
+                return capa;
+            }
+        }
+
+        if (createNotFoundLayers) {
+            capa = new DxfLayer(name);
+            add(capa);
+        }
+
+        return capa;
+    }
+
+    /**
+     * Permite la escritura de entidades DxfTable en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * de la DxfTable.
+     */
+    public String toDxfString() {
+        String txt = "";
+
+        for (int i = 0; i < items.size(); i++) {
+            txt += ((DxfLayer) items.get(i)).toDxfString();
+        }
+
+        return txt;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfTable.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLine.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLine.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLine.java	(revision 10281)
@@ -0,0 +1,166 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad LINE de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ * @author jmorell
+ */
+public class DxfLine extends DxfEntity {
+    final static Color baseColor = new Color(255, 106, 121);
+    Point2D[] pts;
+    GeneralPath gp = null;
+    private Color color = baseColor; //Color(255,214,132,255);
+
+    /**
+     * Constructor de DxfLine.
+     * @param proj, proyección cartográfica en la que se encuentra la DxfLine.
+     * @param layer, capa del DXF en la que se encuentra la DxfLine.
+     * @param p1, punto inicial de la línea.
+     * @param p2, punto final de la línea.
+     */
+    public DxfLine(IProjection proj, DxfLayer layer, Point2D p1, Point2D p2) {
+        super(proj, layer);
+        extent = new Extent(p1, p2);
+        pts = new Point2D[2];
+        pts[0] = p1;
+        pts[1] = p2;
+    }
+
+    /**
+     * Devuelve el color de la DxfLine.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+
+    /**
+     * Establece el color de la DxfLine.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+
+    /**
+     * Permite reproyectar una DxfLine dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D[] savePts = pts;
+
+        pts = new Point2D[2];
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.length; i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts[i], ptDest);
+            pts[i] = ptDest;
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    /**
+     * Permite dibujar una DxfLine.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        if (dxfColor == AcadColor.BYLAYER) {
+            g.setColor(layer.getColor());
+        } else {
+            g.setColor(AcadColor.getColor(dxfColor));
+        }
+
+        newGP(vp);
+        g.draw(gp);
+    }
+
+    /**
+     * Permite generar un GeneralPath partiendo del array de Point2D que conforma el
+     * DxfLine.
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        Point2D.Double pt0 = new Point2D.Double(0.0, 0.0);
+        Point2D.Double pt1 = new Point2D.Double(0.0, 0.0);
+        vp.mat.transform((Point2D) pts[0], pt0);
+        vp.mat.transform((Point2D) pts[1], pt1);
+        gp = new GeneralPath();
+        gp.moveTo((float) pt0.getX(), (float) pt0.getY());
+        gp.lineTo((float) pt1.getX(), (float) pt1.getY());
+    }
+
+    /**
+     * Permite la escritura de entidades DxfLine en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * de la DxfLine.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "LINE"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbLine"));
+        sb.append(DxfGroup.toString(10, pts[0].getX(), 6));
+        sb.append(DxfGroup.toString(20, pts[0].getY(), 6));
+        sb.append(DxfGroup.toString(11, pts[1].getX(), 6));
+        sb.append(DxfGroup.toString(21, pts[1].getY(), 6));
+
+        return sb.toString();
+    }
+
+    /**
+     * Devuelve el array de puntos que conforman el DxfLine.
+     * @return Point2D[], puntos del DxfLine.
+     */
+    public Point2D[] getPts() {
+        return pts;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLine.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPoint.java	(revision 10281)
@@ -0,0 +1,138 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad POINT de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfPoint extends DxfEntity {
+    private Point2D pt;
+
+    /**
+     * Constructor de DxfPoint.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfPoint.
+     * @param layer, capa del DXF en la que se encuentra el DxfPoint.
+     */
+    public DxfPoint(IProjection proj, DxfLayer layer) {
+        super(proj, layer);
+        extent = new Extent();
+        pt = new Point2D.Double();
+    }
+
+    /**
+     * Establece el punto de inserción del DxfPoint.
+     * @param pt, punto de inserción.
+     */
+    public void setPt(Point2D pt) {
+        this.pt = pt;
+        extent.add(pt);
+    }
+
+    /**
+     * Permite reproyectar un DxfPoint dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D savePt = pt;
+
+        pt = new Point2D.Double();
+        extent = new Extent();
+
+        Point2D ptDest = rp.getPDest().createPoint(0.0, 0.0);
+
+        if (savePt == null) {
+            ptDest = null;
+        } else {
+            ptDest = rp.convert((Point2D) savePt, ptDest);
+            extent.add(ptDest);
+        }
+
+        pt = ptDest;
+        setProjection(rp.getPDest());
+    }
+
+    /**
+     * Permite dibujar un DxfPoint.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //AffineTransform msave=g.getTransform();
+        //g.setTransform(vp.mat);
+        if (dxfColor == AcadColor.BYLAYER) {
+            g.setColor(layer.getColor());
+        } else {
+            g.setColor(AcadColor.getColor(dxfColor));
+        }
+
+        Point2D ptT = new Point2D.Double(0, 0);
+        vp.mat.transform(ptT, ptT);
+        ptT.setLocation(pt.getX(), pt.getY());
+        vp.mat.transform(ptT, ptT);
+        g.drawLine((int) ptT.getX(), (int) ptT.getY(), (int) ptT.getX(),
+                   (int) ptT.getY());
+
+        //g.setTransform(msave);
+    }
+
+    /**
+     * Permite la escritura de entidades DxfPoint en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfPoint.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "POINT"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbPoint"));
+        sb.append(DxfGroup.toString(10, pt.getX(), 6));
+        sb.append(DxfGroup.toString(20, pt.getY(), 6));
+        sb.append(DxfGroup.toString(30, 0.0, 6));
+
+        return sb.toString();
+    }
+
+    /**
+     * @return Returns the pt.
+     */
+    public Point2D getPt() {
+        return pt;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPoint.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSpline.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSpline.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSpline.java	(revision 10281)
@@ -0,0 +1,76 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.geo.Projection;
+
+import org.cresques.io.DxfGroup;
+
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+
+
+/**
+ * Entidad SPLINE de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class DxfSpline extends DxfPolyline {
+    
+    /**
+     * Constructor de DxfSpline.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfSpline.
+     * @param layer, capa del DXF en la que se encuentra el DxfSpline.
+     */
+    public DxfSpline(Projection proj, DxfLayer layer) {
+        super(proj, layer);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.px.dxf.DxfEntity#toDxfFileString()
+     */
+    /**
+     * Actualmente en desarrollo. Hay que terminarlo para que de verdad escriba un
+     * DxfSpline.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "LWPOLYLINE"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbPolyline"));
+        sb.append(DxfGroup.toString(90, pts.size()));
+
+        Point2D pt = null;
+        Iterator iter = pts.iterator();
+
+        while (iter.hasNext()) {
+            pt = (Point2D) iter.next();
+            sb.append(DxfGroup.toString(10, pt.getX(), 6));
+            sb.append(DxfGroup.toString(20, pt.getY(), 6));
+        }
+
+        return sb.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfSpline.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfBlock.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfBlock.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfBlock.java	(revision 10281)
@@ -0,0 +1,286 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.PxObj;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+/**
+ * Entidad BLOCK de un fichero DXF.
+ * @author jmorell
+ */
+public class DxfBlock extends PxObj implements IObjList {
+    IProjection proj = null;
+    Vector data = null;
+    int flags = 0;
+    String blkName = "";
+    Point2D bPoint = new Point2D.Double();
+    
+    /**
+     * Constructor de DxfBlock.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfBlock.
+     */
+    public DxfBlock(IProjection proj) {
+        extent = new Extent();
+        data = new Vector();
+    }
+    
+    /**
+     * Devuelve los obhjetos gráficos de la lista cuyos extents contengan al
+     * punto que se le pasa como argumento.
+     * @param pt, punto para localizar los objetos gráficos.
+     * @return IObjList, Conjunto de objetos gráficos que contienen a pt.
+     */
+    public IObjList getAt(Point2D pt) {
+        IObjList oList = new DxfEntityList(proj);
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            Extent.Has o = (Extent.Has) iter.next();
+
+            if (o.getExtent().isAt(pt)) {
+                oList.add(o);
+            }
+        }
+
+        return oList;
+    }
+    
+    /**
+     * Devuelve un iterador para recorrer los elementos de la lista de objetos gráficos.
+     * @return Iterator, iterador.
+     */
+    public Iterator iterator() {
+        return data.iterator();
+    }
+    
+    /**
+     * Devuelve la cantidad de elementos que contiene la lista de objetos gráficos.
+     * @return int
+     */
+    public int size() {
+        return data.size();
+    }
+    
+    /**
+     * Permite añadir un objeto gráfico a la lista.
+     * @param obj, Objeto gráfico que implemente el interface Extent.Has
+     */
+    public void add(Extent.Has obj) {
+        if (obj != null) {
+            extent.add(obj.getExtent());
+            data.add(obj);
+        }
+    }
+    
+    /**
+     * Permite eliminar un elemento de la lista de objetos gráficos.
+     * @param obj, Objeto que queremos eliminar.
+     */
+    public void remove(Object obj) {
+        data.remove(obj);
+    }
+    
+    /**
+     * Permite vacíar la lista de objetos gráficos.
+     */
+    public void clear() {
+        extent = new Extent();
+        data.clear();
+    }
+    
+    /**
+     * Devuelve uno de los elementos de la lista de objetos gráficos.
+     * @param i, Índice del elemento de la lista que queremos obtener.
+     * @return Extent.Has, elemento gráfico que queremos obtener.
+     */
+    public Extent.Has get(int i) {
+        return (Extent.Has) data.get(i);
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentra el DxfBlock.
+     * @return IProjection, proyección cartográfica.
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+    
+    /**
+     * Establece la proyección cartográfica en la que se encuentra el DxfBlock.
+     * @param p, Proyección cartográfica.
+     */
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+    
+    /**
+     * Permite reproyectar un DxfBlock dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        extent = new Extent();
+
+        PxObj o;
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            o = (PxObj) iter.next();
+            ((Projected) o).reProject(rp);
+            extent.add(o.getExtent());
+        }
+
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar un DxfBlock.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        Iterator iter = iterator();
+        Extent extent;
+
+        while (iter.hasNext()) {
+            DxfEntity entity = (DxfEntity) iter.next();
+            extent = entity.getExtent();
+
+            if (vp.getExtent().minX() > extent.maxX()) {
+                continue;
+            }
+
+            if (vp.getExtent().minY() > extent.maxY()) {
+                continue;
+            }
+
+            if (vp.getExtent().maxX() < extent.minX()) {
+                continue;
+            }
+
+            if (vp.getExtent().maxY() < extent.minY()) {
+                continue;
+            }
+
+            if (!entity.layer.frozen) {
+                entity.draw(g, vp);
+            }
+        }
+    }
+    
+    /**
+     * Permite la escritura de entidades DxfBlock en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfBlock.
+     */
+    public String toDxfString() {
+        StringBuffer sb = new StringBuffer("");
+
+        Iterator iter = iterator();
+        Extent extent;
+
+        while (iter.hasNext()) {
+            sb.append(((DxfEntity) iter.next()).toDxfString());
+        }
+
+        return sb.toString();
+    }
+    
+    /**
+     * Devuelve el estado de flags.
+     * @return int
+     */
+    public int getFlags() {
+        return flags;
+    }
+    
+    /**
+     * Devuelve el nombre del bloque.
+     * @return String
+     */
+    public String getBlkName() {
+        return blkName;
+    }
+    
+    /**
+     * Devuelve un Vector con los elementos que conforman el bloque.
+     * @return Vector
+     */
+    public Vector getBlkElements() {
+        return data;
+    }
+    
+    /**
+     * Establece los elementos que conforman el bloque.
+     * @param blkElements
+     */
+    public void setBlkElements(Vector blkElements) {
+        data = blkElements;
+    }
+    
+    /**
+     * Establece el nombre del bloque.
+     * @param blkName
+     */
+    public void setBlkName(String blkName) {
+        this.blkName = blkName;
+        System.out.println("setBlkName: this.blkName = " + this.blkName);
+    }
+    
+    /**
+     * Establece el punto base del bloque.
+     * @param basePoint
+     */
+    public void setBPoint(Point2D basePoint) {
+        this.bPoint = basePoint;
+        System.out.println("setBPoint: this.bPoint = " + this.bPoint);
+    }
+    
+    /**
+     * Devuelve el punto base del bloque.
+     * @return
+     */
+    public Point2D getBPoint() {
+        return bPoint;
+    }
+    
+    /**
+     * Establece el estado de la variable flags.
+     * @param flags
+     */
+    public void setFlags(int flags) {
+        this.flags = flags;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfBlock.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPolyline.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPolyline.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPolyline.java	(revision 10281)
@@ -0,0 +1,375 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Point3D;
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+/**
+ * Entidad POLYLINE de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfPolyline extends DxfEntity {
+    final static Color baseColor = new Color(69, 106, 121);
+    Vector pts = null;
+    Vector faces = null;
+    GeneralPath gp = null;
+    int flags = 0;
+    boolean closed = false;
+    boolean hasFaces = false;
+    private Vector bulges;
+    private Color color = baseColor; //Color(255,214,132,255);
+    private double elevation;
+    private String subclassMarker;
+
+    /**
+     * Constructor de DxfPolyline.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfPolyline.
+     * @param layer, capa del DXF en la que se encuentra el DxfPolyline.
+     */
+    public DxfPolyline(IProjection proj, DxfLayer layer) {
+        super(proj, layer);
+        extent = new Extent();
+        pts = new Vector();
+        bulges = new Vector();
+    }
+
+    /**
+     * Añade un punto a la polilínea.
+     * @param pt
+     */
+    public void add(Point2D pt) {
+        pts.add(pt);
+        extent.add(pt);
+    }
+
+    /**
+     * Añade un bulge o parámetro de curvatura a la lista. Estos parámetros se
+     * corresponden con los vértices.
+     * @param bulge, parámetro de curvatura.
+     */
+    /**
+     * 050301, jmorell: Solución para implementar la lectura de polilíneas
+     * con arcos.
+     */
+    public void addBulge(Double bulge) {
+        bulges.add(bulge);
+    }
+
+    /**
+     * Añade una face a la polilínea.
+     * @param face
+     */
+    public void addFace(int[] face) {
+        hasFaces = true;
+
+        if (faces == null) {
+            faces = new Vector();
+        }
+
+        faces.add(face);
+    }
+
+    /**
+     * Devuelve el color de la DxfPolyline.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+
+    /**
+     * Establece el color de la DxfPolyline.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+
+    /**
+     * Permite reproyectar una DxfPolyline dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Vector savePts = pts;
+
+        pts = new Vector();
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.size(); i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts.get(i), ptDest);
+            pts.add(ptDest);
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    /**
+     * Permite dibujar una DxfPolyline.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //AffineTransform msave=g.getTransform();
+        //g.setTransform(vp.mat);
+        Color color = null;
+
+        // pinto el poligono si es preciso
+        if (dxfColor == AcadColor.BYLAYER) {
+            color = layer.getColor();
+        } else {
+            color = AcadColor.getColor(dxfColor);
+        }
+
+        System.out.println("PLINE color=" + color);
+        newGP(vp);
+
+        if (closed) {
+            g.setColor(new Color(color.getRed(), color.getBlue(),
+                                 color.getGreen(), 0x20));
+            g.fill(gp);
+        }
+
+        g.setColor(color);
+        g.draw(gp);
+
+        //g.setTransform(msave);
+    }
+
+    /**
+     * Permite generar un GeneralPath partiendo del Vector de puntos que conforma la
+     * DxfPolyline.
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+
+        if (!hasFaces) {
+            Iterator iter = pts.iterator();
+
+            while (iter.hasNext()) {
+                pt1 = (Point2D) iter.next();
+                vp.mat.transform(pt1, ptTmp);
+
+                if (pt0 == null) {
+                    pt0 = ptTmp;
+                    gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+                } else {
+                    gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+                }
+            }
+
+            if (closed) {
+                gp.closePath();
+            }
+        } else {
+            System.out.println("POLYLINE: caras=" + faces.size() + ", puntos=" +
+                               pts.size());
+
+            int[] face;
+            int i0;
+            int i1;
+            Iterator iter = faces.iterator();
+
+            while (iter.hasNext()) {
+                face = (int[]) iter.next();
+
+                i0 = face[3];
+
+                for (int i = 0; i < 4; i++) {
+                    i1 = face[i];
+
+                    if (i0 > 0) {
+                        pt0 = (Point2D) pts.get(i0 - 1);
+                        vp.mat.transform(pt0, ptTmp);
+                        gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+                        pt1 = (Point2D) pts.get(Math.abs(i1) - 1);
+                        vp.mat.transform(pt1, ptTmp);
+                        gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+                    }
+
+                    i0 = i1;
+                }
+            }
+        }
+    }
+
+    /**
+     * Permite la escritura de entidades DxfPolyline en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfPolyline.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "POLYLINE"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(100, getSubclassMarker()));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(70, flags));
+        sb.append(DxfGroup.toString(66, 1));
+
+        Point3D pt = null;
+        Iterator iter = pts.iterator();
+        System.out.println("pts.size() = " + pts.size());
+
+        int i=1;
+        while (iter.hasNext()) {
+            pt = (Point3D) iter.next();
+            sb.append(DxfGroup.toString(0, "VERTEX"));
+            sb.append(DxfGroup.toString(5, getHandle()+i));
+            sb.append(DxfGroup.toString(100, "AcDbEntity"));
+            sb.append(DxfGroup.toString(8, layer.getName()));
+            sb.append(DxfGroup.toString(100, "AcDbVertex"));
+            sb.append(DxfGroup.toString(100, "AcDb3dPolylineVertex"));
+            sb.append(DxfGroup.toString(70, 32));
+            sb.append(DxfGroup.toString(10, pt.getX(), 6));
+            sb.append(DxfGroup.toString(20, pt.getY(), 6));
+            sb.append(DxfGroup.toString(30, pt.getZ(), 6));
+            i++;
+        }
+
+        sb.append(DxfGroup.toString(0, "SEQEND"));
+        sb.append(DxfGroup.toString(5, getHandle()+i));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+
+        return sb.toString();
+    }
+
+    /**
+     * Devuelve el GeneralPath.
+     * @return GeneralPath
+     */
+    public GeneralPath getGeneralPath(ViewPortData vp) {
+        newGP(vp);
+
+        return (GeneralPath) gp.clone();
+    }
+
+    /**
+     * Devuelve la variable flags de una polilínea.
+     * @return int
+     */
+    public int getFlags() {
+        return flags;
+    }
+
+    /**
+     * Invoca el método de creación de arcos para polilíneas con parámetros de
+     * curvatura.
+     * @param coord1, punto inicial del arco.
+     * @param coord2, punto final del arco.
+     * @param bulge, parámetro de curvatura.
+     * @return Vector con los puntos del arco.
+     */
+    public static Vector createArc(Point2D coord1, Point2D coord2, double bulge) {
+        return new DxfCalArcs(coord1, coord2, bulge).getPoints(1);
+    }
+
+    /**
+     * @return Returns the pts.
+     */
+    public Vector getPts() {
+        return pts;
+    }
+
+    /**
+     * @param pts The pts to set.
+     */
+    public void setPts(Vector pts) {
+        this.pts = pts;
+    }
+
+    /**
+     * @return Returns the bulges.
+     */
+    public Vector getBulges() {
+        return bulges;
+    }
+
+    /**
+     * @param bulges The bulges to set.
+     */
+    public void setBulges(Vector bulges) {
+        this.bulges = bulges;
+    }
+
+    /**
+     * @return Returns the elevation.
+     */
+    public double getElevation() {
+        return elevation;
+    }
+
+    /**
+     * @param elevation The elevation to set.
+     */
+    public void setElevation(double elevation) {
+        this.elevation = elevation;
+    }
+
+    /**
+     * @return Returns the subclassMarker.
+     */
+    public String getSubclassMarker() {
+        return subclassMarker;
+    }
+
+    /**
+     * @param subclassMarker The subclassMarker to set.
+     */
+    public void setSubclassMarker(String subclassMarker) {
+        this.subclassMarker = subclassMarker;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfPolyline.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityMaker.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityMaker.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityMaker.java	(revision 10281)
@@ -0,0 +1,2231 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Point3D;
+import org.cresques.geo.Projected;
+
+import org.cresques.io.DxfFile;
+import org.cresques.io.DxfGroup;
+import org.cresques.io.DxfGroupVector;
+
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+/**
+ * La clase DxfEntityMaker facilita la creación de entidades en un modelo de datos
+ * CAD. La creación se realiza partiendo de las entidades obtenidas de un fichero DXF.
+ * @author jmorell
+ */
+public class DxfEntityMaker implements DxfFile.EntityFactory, Projected {
+    IProjection proj = null;
+    DxfEntity lastEntity = null;
+    DxfEntityList entities = null;
+    Vector blkList = null;
+    DxfBlock blk = null;
+    DxfTable layers = null;
+    double bulge = 0.0;
+    double xtruX = 0.0;
+    double xtruY = 0.0;
+    double xtruZ = 1.0;
+    int polylineFlag = 0;
+    Point2D firstPt = new Point2D.Double();
+    boolean addingToBlock = false;
+    int iterator = 0;
+
+    // jmorell, 050406: implementación inicial de los ATTRIBS para el piloto ...
+    private Vector attributes = null;
+    
+    /**
+     * Constructor de DxfEntityMaker.
+     * @param proj, proyección cartográfica en la que se encontrarán las entidades
+     * que creemos.
+     */
+    public DxfEntityMaker(IProjection proj) {
+        this.proj = proj;
+        layers = new DxfTable();
+        entities = new DxfEntityList(proj);
+        blkList = new Vector();
+
+        // jmorell, 050406: implementación inicial de los ATTRIBS para el piloto ...
+        attributes = new Vector();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getBlkList()
+     */
+    public Vector getBlkList() {
+        return blkList;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getObjects()
+     */
+    public IObjList getObjects() {
+        return entities;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getExtent()
+     */
+    public Extent getExtent() {
+        return entities.getExtent();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#setAddingToBlock(boolean)
+     */
+    public void setAddingToBlock(boolean a) {
+        addingToBlock = a;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createLayer(org.cresques.io.DxfGroupVector)
+     */
+    public void createLayer(DxfGroupVector grp) throws Exception {
+        int color = grp.getDataAsInt(62);
+        DxfLayer layer = new DxfLayer(grp.getDataAsString(2),
+                                      Math.abs(grp.getDataAsInt(62)));
+
+        if (color < 0) {
+            layer.isOff = true;
+        }
+
+        layer.lType = grp.getDataAsString(6);
+        layer.setFlags(grp.getDataAsInt(70));
+
+        // compruebo flags
+        if ((layer.flags & 0x01) == 0x01) {
+            layer.frozen = true;
+        }
+
+        if ((layer.flags & 0x02) == 0x02) {
+            layer.frozen = true;
+        }
+
+        System.out.println("LAYER color=" + layer.getColor());
+
+        layers.add(layer);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createPolyline(org.cresques.io.DxfGroupVector)
+     */
+    public void createPolyline(DxfGroupVector grp) throws Exception {
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        DxfPolyline entity = new DxfPolyline(proj, layer);
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        if (grp.hasCode(100)) {
+            entity.setSubclassMarker(grp.getDataAsString(100));
+        }
+
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double thickness = 0;
+
+        if (grp.hasCode(10)) {
+            x = grp.getDataAsDouble(10);
+        }
+
+        if (grp.hasCode(20)) {
+            y = grp.getDataAsDouble(20);
+        }
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+            entity.setElevation(z);
+        }
+
+        /*if (grp.hasCode(39))
+                System.out.println("Leer el thickness provoca un error");
+                thickness = grp.getDataAsDouble(39);*/
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(66)) {
+            entity.entitiesFollow = grp.getDataAsInt(66);
+        }
+
+        if (grp.hasCode(70)) {
+            entity.flags = grp.getDataAsInt(70);
+        }
+
+        if (grp.hasCode(210)) {
+            xtruX = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            xtruY = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            xtruZ = grp.getDataAsDouble(230);
+        }
+
+        if ((entity.flags & 0x01) == 0x01) {
+            entity.closed = true;
+        }
+
+        lastEntity = entity;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#endSeq(org.cresques.io.DxfGroupVector)
+     */
+    public void endSeq() throws Exception {
+        if (lastEntity instanceof DxfPolyline) {
+            DxfPolyline polyline = (DxfPolyline) lastEntity;
+
+            if (polyline.closed) {
+                ((DxfPolyline) lastEntity).add(firstPt);
+
+                if (bulge > 0) {
+                    int cnt = ((DxfPolyline) lastEntity).pts.size();
+
+                    if ((((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                            2))).getX() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                              1))).getX()) &&
+                            (((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                2))).getY() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                                  1))).getY())) {
+                        // no se construye el arco
+                    } else {
+                        Vector arc = DxfPolyline.createArc((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                         2)),
+                                                           (Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                         1)),
+                                                           bulge);
+                        ((DxfPolyline) lastEntity).pts.remove(cnt - 1);
+
+                        for (int i = 0; i < arc.size(); i++) {
+                            Point2D pt = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                          ((Point2D) arc.get(i)).getY());
+                            ((DxfPolyline) lastEntity).add(pt);
+
+                            if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                                firstPt = pt;
+                            }
+                        }
+                    }
+
+                    bulge = 0.0;
+                } else if (bulge < 0) {
+                    int cnt = ((DxfPolyline) lastEntity).pts.size();
+
+                    if ((((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                            2))).getX() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                              1))).getX()) &&
+                            (((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                2))).getY() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                                  1))).getY())) {
+                        // no se construye el arco
+                    } else {
+                        Vector arc = DxfPolyline.createArc((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                         2)),
+                                                           (Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                         1)),
+                                                           bulge);
+                        ((DxfPolyline) lastEntity).pts.remove(cnt - 1);
+
+                        for (int i = arc.size() - 1; i >= 0; i--) {
+                            Point2D pt = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                                          ((Point2D) arc.get(i)).getY());
+                            ((DxfPolyline) lastEntity).add(pt);
+
+                            if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                                firstPt = pt;
+                            }
+                        }
+                    }
+
+                    bulge = 0.0;
+                }
+            }
+
+            // 050315, jmorell: Para leer Polylines estas tb deben tener vector de bulges.
+            for (int i = 0; i < ((DxfPolyline) lastEntity).pts.size(); i++) {
+                // jmorell, 050405: intentando leer DxfPolylines con bulges para el
+                // piloto ...
+                //polyline.addBulge(new Double(0));
+                ((DxfPolyline) lastEntity).addBulge(new Double(0));
+            }
+
+            //System.out.println("DxfEntityMaker.endSeq(): ((DxfPolyline)lastEntity).getBulges().size() = " + ((DxfPolyline)lastEntity).getBulges().size());
+            //((DxfPolyline)lastEntity).addBulge(new Double(bulge));
+            //lastEntity.setHandle(entities.size()+40);
+            if (addingToBlock == false) {
+                //System.out.println("createPolyline: Añadimos una polilinea a la lista de entidades");
+                entities.add(lastEntity);
+            } else {
+                //System.out.println("createPolyline: Añadimos una polilinea al bloque " + iterator);
+                blk.add(lastEntity);
+
+                //System.out.println("PLINE color="+polyline.getColor());
+            }
+
+            lastEntity = null;
+        } else if (lastEntity instanceof DxfInsert) {
+            // Se trata de un SEQEND despues de un ATTRIB
+            gestionaInsert((DxfInsert) lastEntity, lastEntity.getLayer());
+
+            if (addingToBlock == false) {
+                entities.add(lastEntity);
+            } else {
+                blk.add(lastEntity);
+            }
+
+            lastEntity = null;
+        } else {
+            // Caso no contemplado
+        }
+
+        xtruX = 0.0;
+        xtruY = 0.0;
+        xtruZ = 1.0;
+        bulge = 0.0;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#addVertex(org.cresques.io.DxfGroupVector)
+     */
+    public void addVertex(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        int flags = 0;
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+        }
+
+        if (grp.hasCode(70)) {
+            flags = grp.getDataAsInt(70);
+        }
+
+        //bulge = 0.0;
+        if (bulge == 0.0) {
+            if (grp.hasCode(42)) {
+                bulge = grp.getDataAsDouble(42);
+
+                //bulge = 0.0;
+            } else {
+                bulge = 0.0;
+            }
+
+            Point3D point_in = new Point3D(x, y, z);
+            Point3D xtru = new Point3D(xtruX, xtruY, xtruZ);
+            Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+
+            if (((flags & 0x80) == 0x80) && ((flags & 0x40) == 0)) {
+                int[] face = { 0, 0, 0, 0 };
+                face[0] = grp.getDataAsInt(71);
+                face[1] = grp.getDataAsInt(72);
+                face[2] = grp.getDataAsInt(73);
+                face[3] = grp.getDataAsInt(74);
+                ((DxfPolyline) lastEntity).addFace(face);
+            } else {
+                x = point_out.getX();
+                y = point_out.getY();
+                z = point_out.getZ();
+
+                Point2D ptaux = proj.createPoint(x, y);
+                Point3D pt = new Point3D(ptaux.getX(), ptaux.getY(), z);
+                ((DxfPolyline) lastEntity).add(pt);
+
+                if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                    firstPt = pt;
+                }
+            }
+        } else if (bulge > 0.0) {
+            double bulge_aux = 0.0;
+
+            if (grp.hasCode(42)) {
+                bulge_aux = grp.getDataAsDouble(42);
+            } else {
+                bulge_aux = 0.0;
+            }
+
+            Point3D point_in = new Point3D(x, y, z);
+            Point3D xtru = new Point3D(xtruX, xtruY, xtruZ);
+            Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+            x = point_out.getX();
+            y = point_out.getY();
+            z = point_out.getZ();
+
+            Point2D ptaux = proj.createPoint(x, y);
+            Point3D pt = new Point3D(ptaux.getX(), ptaux.getY(), z);
+            ((DxfPolyline) lastEntity).add(pt);
+
+            if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                firstPt = pt;
+            }
+
+            int cnt = ((DxfPolyline) lastEntity).pts.size();
+
+            if ((((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt - 2))).getX() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                        1))).getX()) &&
+                    (((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt - 2))).getY() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                            1))).getY())) {
+                // no se construye el arco
+            } else {
+                Vector arc = DxfPolyline.createArc((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                 2)),
+                                                   (Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                 1)),
+                                                   bulge);
+                ((DxfPolyline) lastEntity).pts.remove(cnt - 1);
+
+                for (int i = 0; i < arc.size(); i++) {
+                    ptaux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                          ((Point2D) arc.get(i)).getY());
+                    pt = new Point3D(ptaux.getX(), ptaux.getY(), z);
+                    ((DxfPolyline) lastEntity).add(pt);
+
+                    if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                        firstPt = pt;
+                    }
+                }
+            }
+
+            bulge = bulge_aux;
+        } else { //si el bulge es menor que cero.
+
+            double bulge_aux = 0.0;
+
+            if (grp.hasCode(42)) {
+                bulge_aux = grp.getDataAsDouble(42); // * (-1.0);
+            } else {
+                bulge_aux = 0.0;
+            }
+
+            Point3D point_in = new Point3D(x, y, z);
+            Point3D xtru = new Point3D(xtruX, xtruY, xtruZ);
+            Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+            x = point_out.getX();
+            y = point_out.getY();
+            z = point_out.getZ();
+
+            Point2D ptaux = proj.createPoint(x, y);
+            Point3D pt = new Point3D(ptaux.getX(), ptaux.getY(), z);
+            ((DxfPolyline) lastEntity).add(pt);
+
+            if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                firstPt = pt;
+            }
+
+            int cnt = ((DxfPolyline) lastEntity).pts.size();
+
+            if ((((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt - 2))).getX() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                        1))).getX()) &&
+                    (((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt - 2))).getY() == ((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                                                            1))).getY())) {
+                // no se construye el arco
+            } else {
+                Vector arc = DxfPolyline.createArc((Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                 2)),
+                                                   (Point2D) (((DxfPolyline) lastEntity).pts.get(cnt -
+                                                                                                 1)),
+                                                   bulge);
+                ((DxfPolyline) lastEntity).pts.remove(cnt - 1);
+
+                for (int i = arc.size() - 1; i >= 0; i--) {
+                    ptaux = proj.createPoint(((Point2D) arc.get(i)).getX(),
+                                          ((Point2D) arc.get(i)).getY());
+                    pt = new Point3D(ptaux.getX(), ptaux.getY(), z);
+                    ((DxfPolyline) lastEntity).add(pt);
+
+                    if (((DxfPolyline) lastEntity).pts.size() == 1) {
+                        firstPt = pt;
+                    }
+                }
+            }
+
+            bulge = bulge_aux;
+        }
+
+        /*if (grp.hasCode(5)) {
+                String hexS = grp.getDataAsString(5);
+                Integer hexI = Integer.decode("0x" + hexS);
+                int hexi = hexI.intValue();
+                lastEntity.setHandle(hexi);
+        } else {
+                lastEntity.setHandle(entities.size()+40);
+        }*/
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createLwPolyline(org.cresques.io.DxfGroupVector)
+     */
+    public void createLwPolyline(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double elev = 0.0;
+        DxfGroup g = null;
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        DxfLwPolyline entity = new DxfLwPolyline(proj, layer);
+        
+        if (grp.hasCode(38)) {
+            entity.setElevation(grp.getDataAsDouble(38));
+        }
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        double bulge = 0;
+        boolean isNewCoord = false;
+
+        for (int i = 0; i < grp.size(); i++) {
+            bulge = 0;
+            isNewCoord = false;
+            g = (DxfGroup) grp.get(i);
+
+            if (g.getCode() == 10) {
+                x = ((Double) g.getData()).doubleValue();
+            } else if (g.getCode() == 20) {
+                y = ((Double) g.getData()).doubleValue();
+
+                // Añadiendo extrusion a LwPolyline ...
+                Point3D point_in1 = new Point3D(x, y, elev);
+                Point3D xtru = new Point3D(extx, exty, extz);
+                Point3D point_out1 = DxfCalXtru.CalculateXtru(point_in1, xtru);
+                x = point_out1.getX();
+                y = point_out1.getY();
+                elev = point_out1.getZ();
+
+                //
+                //if (y <= 1.0) throw new Exception("Y == "+y);
+                entity.add(proj.createPoint(x, y));
+                entity.addBulge(new Double(0));
+                x = 0.0;
+                y = 0.0;
+                isNewCoord = true;
+            } else if (g.getCode() == 42) {
+                //entity.addBulge((Double)g.getData());
+                entity.getBulges().remove(entity.getBulges().size() - 1);
+                entity.getBulges().add((Double) g.getData());
+                bulge = ((Double) g.getData()).doubleValue();
+            }
+
+            /*if (bulge == 0 && isNewCoord) {
+                    entity.addBulge(new Double(0));
+            }*/
+        }
+
+        //System.out.println("entity.getPts().size() = " + entity.getPts().size());
+        //System.out.println("entity.getBulges().size() = " + entity.getBulges().size());
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(70)) {
+            entity.flags = grp.getDataAsInt(70);
+
+            //System.out.println("entity.flags = " + entity.flags);
+        }
+
+        if ((entity.flags & 0x01) == 0x01) {
+            entity.closed = true;
+        }
+
+        if (addingToBlock == false) {
+            entities.add(entity);
+        } else {
+            //System.out.println("createLwPolyline(): Añadimos una lwpolilinea al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createLine(org.cresques.io.DxfGroupVector)
+     */
+    public void createLine(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z1 = 0.0;
+        double z2 = 0.0;
+        DxfGroup g = null;
+        Point2D pt1 = null;
+        Point2D pt2 = null;
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            z1 = grp.getDataAsDouble(30);
+        }
+
+        pt1 = proj.createPoint(x, y);
+        x = grp.getDataAsDouble(11);
+        y = grp.getDataAsDouble(21);
+
+        if (grp.hasCode(31)) {
+            z2 = grp.getDataAsDouble(31);
+        }
+
+        pt2 = proj.createPoint(x, y);
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsInt(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsInt(230);
+        }
+
+        Point3D point_in1 = new Point3D(pt1.getX(), pt1.getY(), z1);
+        Point3D point_in2 = new Point3D(pt2.getX(), pt2.getY(), z2);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point2D point_out1 = DxfCalXtru.CalculateXtru(point_in1, xtru);
+        Point2D point_out2 = DxfCalXtru.CalculateXtru(point_in2, xtru);
+        pt1.setLocation(point_out1);
+        pt2.setLocation(point_out2);
+
+        DxfLine entity = new DxfLine(proj, layer, pt1, pt2);
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (addingToBlock == false) {
+            //System.out.println("createLine(): Añadimos una linea a la lista de entidades");
+            entities.add(entity);
+        } else {
+            //System.out.println("createLine(): Añadimos una linea al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createText(org.cresques.io.DxfGroupVector)
+     */
+    public void createText(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double h = 0.0;
+        double rot = 0.0;
+        DxfGroup g = null;
+
+        //OJO! El segundo punto es opcional ...
+        Point2D pt1 = null;
+
+        //OJO! El segundo punto es opcional ...
+        Point2D pt2 = null;
+        String txt = null;
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+
+        txt = grp.getDataAsString(1);
+
+        DxfText entity = new DxfText(proj, layer, txt);
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+
+        entity.setPt(proj.createPoint(x, y));
+
+        //entity.setPt1(proj.createPoint(x, y));
+        if (grp.hasCode(11)) {
+            entity.setTwoPointsFlag(true);
+            entity.setPt1(proj.createPoint(entity.getPt().getX(),
+                                           entity.getPt().getY()));
+            x = grp.getDataAsDouble(11);
+            y = grp.getDataAsDouble(21);
+            z = grp.getDataAsDouble(31);
+
+            point_in = new Point3D(x, y, z);
+            point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+            x = point_out.getX();
+            y = point_out.getY();
+            z = point_out.getZ();
+
+            entity.setPt2(proj.createPoint(x, y));
+        }
+
+        entity.setHeight(grp.getDataAsDouble(40));
+
+        if (grp.hasCode(50)) {
+            entity.setRotation(grp.getDataAsDouble(50));
+
+            //System.out.println("AAAAAA: entity.getRotation = " + entity.getRotation());
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(72)) {
+            entity.align = grp.getDataAsInt(72);
+        }
+
+        if (addingToBlock == false) {
+            entities.add(entity);
+        } else {
+            //System.out.println("createText(): Añadimos un text al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createMText(org.cresques.io.DxfGroupVector)
+     */
+    public void createMText(DxfGroupVector v) throws Exception {
+        // TODO Auto-generated method stub
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createPoint(org.cresques.io.DxfGroupVector)
+     */
+    public void createPoint(DxfGroupVector grp) throws Exception {
+        double x = 0.0; //, h= 0.0, rot= 0.0;
+        double y = 0.0; //, h= 0.0, rot= 0.0;
+        double z = 0.0; //, h= 0.0, rot= 0.0;
+        DxfGroup g = null;
+        Point2D pt = null;
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        DxfPoint entity = new DxfPoint(proj, layer);
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsInt(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsInt(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point2D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        entity.setPt(proj.createPoint(x, y));
+
+        if (addingToBlock == false) {
+            entities.add(entity);
+        } else {
+            //System.out.println("createPoint(): Añadimos un punto al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createCircle(org.cresques.io.DxfGroupVector)
+     */
+    public void createCircle(DxfGroupVector grp) throws Exception {
+        //System.out.println("Encontramos un Circle.");
+        double x = 0.0;
+
+        //System.out.println("Encontramos un Circle.");
+        double y = 0.0;
+
+        //System.out.println("Encontramos un Circle.");
+        double z = 0.0;
+        double r = 0.0;
+        DxfGroup g = null;
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+        }
+
+        if (grp.hasCode(40)) {
+            r = grp.getDataAsDouble(40);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point2D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+
+        Point2D center = proj.createPoint(x, y);
+        Point2D[] pts = new Point2D[360];
+        int angulo = 0;
+
+        for (angulo = 0; angulo < 360; angulo++) {
+            pts[angulo] = new Point2D.Double(center.getX(), center.getY());
+            pts[angulo].setLocation(pts[angulo].getX() +
+                                    (r * Math.sin((angulo * Math.PI) / (double) 180.0)),
+                                    pts[angulo].getY() +
+                                    (r * Math.cos((angulo * Math.PI) / (double) 180.0)));
+
+            if (pts.length == 1) {
+                firstPt = pts[angulo];
+            }
+        }
+
+        DxfCircle entity = new DxfCircle(proj, layer, pts);
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        entity.setCenter(new Point2D.Double(x, y));
+
+        //System.out.println("Y le metemos el centro.");
+        entity.setRadius(r);
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (addingToBlock == false) {
+            //System.out.println("createCircle(): Añade un circulo a la lista de entidades");
+            entities.add(entity);
+        } else {
+            //System.out.println("createCircle(): Añadimos un circulo al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createEllipse(org.cresques.io.DxfGroupVector)
+     */
+    public void createEllipse(DxfGroupVector grp) throws Exception {
+        double incX = 0.0;
+        double incY = 0.0;
+        double incZ = 0.0;
+        double xc = 0.0;
+        double yc = 0.0;
+        double zc = 0.0;
+        double mMAxisRatio = 0.0;
+        DxfGroup g = null;
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        xc = grp.getDataAsDouble(10);
+        yc = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            zc = grp.getDataAsDouble(30);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(xc, yc, zc);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        xc = point_out.getX();
+        yc = point_out.getY();
+        zc = point_out.getZ();
+
+        incX = grp.getDataAsDouble(11);
+        incY = grp.getDataAsDouble(21);
+
+        if (grp.hasCode(31)) {
+            incZ = grp.getDataAsDouble(31);
+        }
+
+        if (grp.hasCode(40)) {
+            mMAxisRatio = grp.getDataAsDouble(40);
+        }
+
+        Point2D pt2 = new Point2D.Double(xc + incX, yc + incY);
+        Point2D pt1 = new Point2D.Double(xc - incX, yc - incY);
+        double majorAxisLength = pt1.distance(pt2);
+        double minorAxisLength = majorAxisLength * mMAxisRatio;
+
+        DxfEllipse entity = new DxfEllipse(proj, layer, pt1, pt2,
+                                           minorAxisLength);
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (addingToBlock == false) {
+            //System.out.println("createCircle(): Añade un circulo a la lista de entidades");
+            entities.add(entity);
+        } else {
+            //System.out.println("createCircle(): Añadimos un circulo al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createArc(org.cresques.io.DxfGroupVector)
+     */
+    public void createArc(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double r = 0.0;
+        double empieza = 0.0;
+        double acaba = 0.0;
+        DxfGroup g = null;
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+        }
+
+        if (grp.hasCode(40)) {
+            r = grp.getDataAsDouble(40);
+        }
+
+        if (grp.hasCode(50)) {
+            empieza = grp.getDataAsDouble(50);
+        }
+
+        if (grp.hasCode(51)) {
+            acaba = grp.getDataAsDouble(51);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point2D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+
+        Point2D center = proj.createPoint(x, y);
+
+        //System.out.println("empieza = " + empieza + ", acaba = " + acaba);
+        int iempieza = (int) empieza;
+        int iacaba = (int) acaba;
+
+        //System.out.println("iempieza = " + iempieza + ", iacaba = " + iacaba);
+        double angulo = 0;
+        Point2D[] pts = null;
+
+        if (empieza <= acaba) {
+            pts = new Point2D[(iacaba - iempieza) + 2];
+            angulo = empieza;
+            pts[0] = new Point2D.Double(center.getX() +
+                                        (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                        center.getY() +
+                                        (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+
+            for (int i = 1; i <= ((iacaba - iempieza) + 1); i++) {
+                angulo = (double) (iempieza + i);
+                pts[i] = new Point2D.Double(center.getX() +
+                                            (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                            center.getY() +
+                                            (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+            }
+
+            angulo = acaba;
+            pts[(iacaba - iempieza) + 1] = new Point2D.Double(center.getX() +
+                                                              (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                                              center.getY() +
+                                                              (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+        } else {
+            pts = new Point2D[(360 - iempieza) + iacaba + 2];
+            angulo = empieza;
+
+            //System.out.println("pts[0] = " + pts[0] + ", center = " + center + ", angulo = " + angulo);
+            pts[0] = new Point2D.Double(center.getX() +
+                                        (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                        center.getY() +
+                                        (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+
+            for (int i = 1; i <= (360 - iempieza); i++) {
+                angulo = (double) (iempieza + i);
+                pts[i] = new Point2D.Double(center.getX() +
+                                            (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                            center.getY() +
+                                            (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+            }
+
+            for (int i = (360 - iempieza) + 1;
+                     i <= ((360 - iempieza) + iacaba); i++) {
+                angulo = (double) (i - (360 - iempieza));
+                pts[i] = new Point2D.Double(center.getX() +
+                                            (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                            center.getY() +
+                                            (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+            }
+
+            angulo = acaba;
+            pts[(360 - iempieza) + iacaba + 1] = new Point2D.Double(center.getX() +
+                                                                    (r * Math.cos((angulo * Math.PI) / (double) 180.0)),
+                                                                    center.getY() +
+                                                                    (r * Math.sin((angulo * Math.PI) / (double) 180.0)));
+        }
+
+        DxfArc entity = new DxfArc(proj, layer, pts);
+
+        if (grp.hasCode(5)) {
+            String hexS = grp.getDataAsString(5);
+            Integer hexI = Integer.decode("0x" + hexS);
+            int hexi = hexI.intValue();
+            entity.setHandle(hexi);
+        } else {
+            entity.setHandle(entities.size() + 40);
+        }
+
+        // 050223, jmorell: Establecimiento de los parámetros del arco.
+        //System.out.println("DxfEntityMaker.createArc(): pts.length = " + pts.length);
+        entity.setCentralPoint(pts[(pts.length) / 2]);
+
+        //System.out.println("DxfEntityMaker.createArc(): (pts.length)/2 = " + (pts.length/2));
+        entity.setInit(pts[0]);
+        entity.setEnd(pts[pts.length - 1]);
+
+        //System.out.println("DxfEntityMaker.createArc(): (pts.length)-1 = " + (pts.length-1));
+        entity.setCenter(center);
+        entity.setRadius(r);
+        entity.setInitAngle(empieza);
+
+        //System.out.println("DxfEntityMaker.createArc(): empieza = " + empieza);
+        entity.setEndAngle(acaba);
+
+        //System.out.println("DxfEntityMaker.createArc(): acaba = " + acaba);
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        //System.out.println("createArc(): Añadimos un arco al bloque");
+        if (addingToBlock == false) {
+            entities.add(entity);
+        } else {
+            //System.out.println("createArc(): Añadimos un arco al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createInsert(org.cresques.io.DxfGroupVector)
+     */
+    public void createInsert(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        DxfGroup g = null;
+        Point2D pt = new Point2D.Double(0.0, 0.0);
+        Point2D scaleFactor = new Point2D.Double(1.0, 1.0);
+        double rotAngle = 0.0;
+        String blockName = "";
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+
+        DxfInsert entity = new DxfInsert(proj, layer);
+        DxfPoint secondEntity = new DxfPoint(proj, layer);
+
+        // jmorell, 050406: implementación inicial de los ATTRIBS para el piloto ...
+        int attributesFollowFlag = 0;
+
+        if (grp.hasCode(2)) {
+            blockName = grp.getDataAsString(2);
+            entity.setBlockName(blockName);
+        }
+
+        if (grp.hasCode(10)) {
+            x = grp.getDataAsDouble(10);
+        }
+
+        if (grp.hasCode(20)) {
+            y = grp.getDataAsDouble(20);
+        }
+
+        if (grp.hasCode(30)) {
+            z = grp.getDataAsDouble(30);
+        }
+
+        if (grp.hasCode(41)) {
+            scaleFactor.setLocation(grp.getDataAsDouble(41), scaleFactor.getY());
+            entity.setScaleFactor(scaleFactor);
+        } else {
+            entity.setScaleFactor(scaleFactor);
+        }
+
+        if (grp.hasCode(42)) {
+            scaleFactor.setLocation(scaleFactor.getX(), grp.getDataAsDouble(42));
+            entity.setScaleFactor(scaleFactor);
+        } else {
+            entity.setScaleFactor(scaleFactor);
+        }
+
+        if (grp.hasCode(43)) {
+            // TODO La coordenada z
+        }
+
+        if (grp.hasCode(50)) {
+            rotAngle = grp.getDataAsDouble(50);
+            entity.setRotAngle(rotAngle);
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(66)) {
+            attributesFollowFlag = grp.getDataAsInt(66);
+
+            //System.out.println("createInsert: attributesFollowFlag = " + attributesFollowFlag);
+        }
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point2D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+
+        entity.setBlkList(blkList);
+
+        entity.encuentraBloque(blockName);
+
+        entity.setPt(proj.createPoint(x, y));
+        secondEntity.setPt(proj.createPoint(x, y));
+
+        if ((entity.getBlockFound() == true) && (attributesFollowFlag != 1)) {
+            gestionaInsert(entity, layer);
+        }
+
+        //System.out.println("createInsert: entity.getBlockName = " + entity.getBlockName());
+        //System.out.println("createInsert: entity.getRotAngle = " + entity.getRotAngle());
+        if (attributesFollowFlag == 1) {
+            //System.out.println("createInsert: Coloca como lastEntity el insert");
+            lastEntity = entity;
+        } else {
+            if (addingToBlock == false) {
+                entities.add(secondEntity);
+            } else if ((addingToBlock == true) && (entity.blockFound == true)) {
+                //System.out.println("createArc(): Añadimos un insert al bloque " + iterator);
+                blk.add(entity);
+            }
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createSolid(org.cresques.io.DxfGroupVector)
+     */
+    public void createSolid(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z1 = 0.0;
+        double z2 = 0.0;
+        double z3 = 0.0;
+        double z4 = 0.0;
+        DxfGroup g = null;
+
+        //Point2D pt1 = null, pt2 = null, pt3 = null, pt4 = null;
+        Point2D[] pts = new Point2D[4];
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+
+        if (grp.hasCode(30)) {
+            z1 = grp.getDataAsDouble(30);
+        }
+
+        pts[0] = proj.createPoint(x, y);
+        x = grp.getDataAsDouble(11);
+        y = grp.getDataAsDouble(21);
+
+        if (grp.hasCode(31)) {
+            z2 = grp.getDataAsDouble(31);
+        }
+
+        pts[1] = proj.createPoint(x, y);
+        x = grp.getDataAsDouble(12);
+        y = grp.getDataAsDouble(22);
+
+        if (grp.hasCode(32)) {
+            z3 = grp.getDataAsDouble(32);
+        }
+
+        pts[2] = proj.createPoint(x, y);
+        x = grp.getDataAsDouble(13);
+        y = grp.getDataAsDouble(23);
+
+        if (grp.hasCode(33)) {
+            z2 = grp.getDataAsDouble(33);
+        }
+
+        pts[3] = proj.createPoint(x, y);
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in1 = new Point3D(pts[0].getX(), pts[0].getY(), z1);
+        Point3D point_in2 = new Point3D(pts[1].getX(), pts[1].getY(), z2);
+        Point3D point_in3 = new Point3D(pts[2].getX(), pts[2].getY(), z3);
+        Point3D point_in4 = new Point3D(pts[3].getX(), pts[3].getY(), z4);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point2D point_out1 = DxfCalXtru.CalculateXtru(point_in1, xtru);
+        Point2D point_out2 = DxfCalXtru.CalculateXtru(point_in2, xtru);
+        Point2D point_out3 = DxfCalXtru.CalculateXtru(point_in3, xtru);
+        Point2D point_out4 = DxfCalXtru.CalculateXtru(point_in4, xtru);
+        pts[0].setLocation(point_out1);
+        pts[1].setLocation(point_out2);
+        pts[2].setLocation(point_out3);
+        pts[3].setLocation(point_out4);
+
+        DxfSolid entity = new DxfSolid(proj, layer, pts);
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (addingToBlock == false) {
+            //System.out.println("createLine(): Añadimos una linea a la lista de entidades");
+            entities.add(entity);
+        } else {
+            //System.out.println("createLine(): Añadimos una linea al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createSpline(org.cresques.io.DxfGroupVector)
+     */
+    /**
+     * Los Splines estan implementados como LwPolylines. Se pintan las lineas
+     * entre los vertices pero no se aplica la curvatura Spline.
+     * TODO: Contemplar la curvatura spline para Splines.
+     */
+    public void createSpline(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double elev = 0.0;
+        DxfGroup g = null;
+
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        DxfLwPolyline entity = new DxfLwPolyline(proj, layer);
+
+        for (int i = 0; i < grp.size(); i++) {
+            g = (DxfGroup) grp.get(i);
+
+            if (g.getCode() == 10) {
+                x = ((Double) g.getData()).doubleValue();
+            } else if (g.getCode() == 20) {
+                y = ((Double) g.getData()).doubleValue();
+
+                //if (y <= 1.0) throw new Exception("Y == "+y);
+                entity.add(proj.createPoint(x, y));
+                x = 0.0;
+                y = 0.0;
+            }
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(70)) {
+            entity.flags = grp.getDataAsInt(70);
+        }
+
+        if ((entity.flags & 0x01) == 0x01) {
+            entity.closed = true;
+        }
+
+        if (addingToBlock == false) {
+            entities.add(entity);
+        } else {
+            //System.out.println("createLwPolyline(): Añadimos una lwpolilinea al bloque " + iterator);
+            blk.add(entity);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createBlock(org.cresques.io.DxfGroupVector)
+     */
+    public void createBlock(DxfGroupVector grp) throws Exception {
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        blk = new DxfBlock(proj);
+
+        Point2D basePoint = new Point2D.Double();
+        String blockName = "";
+
+        //System.out.println("createBlock(): Creamos nuevo bloque, el bloque " + iterator);
+        addingToBlock = true;
+
+        //System.out.println("createBlock(): Añadimos el bloque " + iterator + " a la lista de bloques");
+        blkList.add(iterator, blk);
+
+        //System.out.println("createBlock(): Rellenamos la informacion del bloque " + iterator);
+        if (grp.hasCode(1)) {
+            blockName = grp.getDataAsString(1);
+            blk.setBlkName(blockName);
+        }
+
+        if (grp.hasCode(2)) {
+            blockName = grp.getDataAsString(2);
+            blk.setBlkName(blockName);
+        }
+
+        if (grp.hasCode(3)) {
+            blockName = grp.getDataAsString(3);
+            blk.setBlkName(blockName);
+        }
+
+        if (grp.hasCode(10)) {
+            basePoint = new Point2D.Double(grp.getDataAsDouble(10),
+                                           basePoint.getY());
+            blk.setBPoint(basePoint);
+        }
+
+        if (grp.hasCode(20)) {
+            basePoint = new Point2D.Double(basePoint.getX(),
+                                           grp.getDataAsDouble(20));
+            blk.setBPoint(basePoint);
+        }
+
+        if (grp.hasCode(30)) {
+            // TODO Contemplar la coordenada z
+        }
+
+        if (grp.hasCode(70)) {
+            blk.flags = grp.getDataAsInt(70);
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#endBlk(org.cresques.io.DxfGroupVector)
+     */
+    public void endBlk(DxfGroupVector grp) throws Exception {
+        //DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        setAddingToBlock(false);
+        iterator = iterator + 1;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#testBlocks()
+     */
+    public void testBlocks() {
+        Vector blkList = getBlkList();
+        DxfBlock dxfBlock = null;
+        DxfEntity dxfEntity = null;
+        DxfLine dxfLine = null;
+        DxfInsert dxfInsert = null;
+        Point2D point1 = new Point2D.Double();
+        Point2D point2 = new Point2D.Double();
+
+        for (int i = 0; i < blkList.size(); i++) {
+            dxfBlock = (DxfBlock) blkList.get(i);
+
+            int aux = dxfBlock.getBlkElements().size();
+
+            for (int j = 0; j < aux; j++) {
+                dxfEntity = (DxfEntity) dxfBlock.getBlkElements().get(j);
+
+                if (dxfEntity instanceof DxfLine) {
+                    dxfLine = (DxfLine) dxfEntity;
+                    point1 = dxfLine.getPts()[0];
+                    point2 = dxfLine.getPts()[1];
+
+                    //System.out.println("compruebaBloques(): Bloque = " + i + ", elemento = " + j + ", vertice1 = " + point1 + ", vertice2 = " + point2);
+                } else if (dxfEntity instanceof DxfInsert) {
+                    dxfInsert = (DxfInsert) dxfEntity;
+
+                    String nomBlock = dxfInsert.getBlockName();
+
+                    //System.out.println("compruebaBloques(): Bloque = " + i + ", elemento = " + j + ", inserta el bloque = " + nomBlock);
+                    //System.out.println("compruebaBloques(): dxfInsert.pt = " + dxfInsert.getPt());
+                    //System.out.println("compruebaBloques(): dxfInsert.rotAngle = " + dxfInsert.getRotAngle());
+                    //System.out.println("compruebaBloques(): dxfInsert.scaleFactor = " + dxfInsert.getScaleFactor());
+                    if (dxfInsert.getBlockFound() == false) {
+                        //System.out.println("compruebaBloques(): Ahora se ocupa del DxfInsert " + nomBlock);
+                        boolean aux_bool = dxfInsert.encuentraBloque(nomBlock);
+                        gestionaInsert(dxfInsert, dxfInsert.getDxfLayer());
+                        dxfBlock.add(dxfInsert);
+                    }
+                }
+            }
+        }
+    }
+    
+    /**
+     * Establece la proyección cartográfica en la que se van a crear las entidades.
+     * @param p, Proyección cartográfica.
+     */
+    public void setProjection(IProjection proj) {
+        this.proj = proj;
+    }
+    
+    /**
+     * Devuelve la proyección cartográfica en la que se encuentran las entidades.
+     * @return IProjection, proyección cartográfica.
+     */
+    public IProjection getProjection() {
+        return proj;
+    }
+    
+    /**
+     * Permite reproyectar las entidades creadas dado un conjunto de coordenadas de
+     * transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        entities.reProject(rp);
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Devuelve las entidades creadas.
+     * @return DxfEntityList
+     */
+    public DxfEntityList getEntities() {
+        return entities;
+    }
+    
+    /**
+     * Devuelve las capas del DXF en forma de DxfTable.
+     * @return DxfTable
+     */
+    public DxfTable getLayers() {
+        return layers;
+    }
+    
+    /**
+     * Devuelve el bloque activo.
+     * @return DxfBlock
+     */
+    public DxfBlock getBlk() {
+        return blk;
+    }
+    
+    /**
+     * Método que permite incluir en la lista general de objetos los objetos que se
+     * encuentran dentro del bloque referenciado por cada DxfInsert.
+     * @param entity, el punto de inserción.
+     * @param layer, la capa en la que se encuentra.
+     */
+    public void gestionaInsert(DxfInsert entity, DxfLayer layer) {
+        DxfEntity dxfEntity = null;
+        DxfLine dxfLine = null;
+        DxfInsert dxfInsert = null;
+        DxfPolyline dxfPolyline = null;
+        DxfArc dxfArc = null;
+        DxfCircle dxfCircle = null;
+        DxfLwPolyline dxfLwPolyline = null;
+        DxfPoint dxfPoint = null;
+        DxfText dxfText = null;
+        DxfSolid dxfSolid = null;
+
+        // jmorell, 050406: intentando corregir cosas que salen fuera de sitio ...
+        double bPointX = 0.0;
+        double bPointY = 0.0;
+
+        //if (entity.getBlockFound() == true) {
+        bPointX = entity.block.bPoint.getX();
+        bPointY = entity.block.bPoint.getY();
+
+        //}
+        double sFactorX = entity.getScaleFactor().getX();
+        double sFactorY = entity.getScaleFactor().getY();
+        double rAngleGra = entity.getRotAngle();
+        double rAngleRad = (rAngleGra * Math.PI) / 180.0;
+
+        for (int i = 0; i < entity.block.size(); i++) {
+            //System.out.println("gestionaInserts: entity.block.blkElements.size() = " + entity.block.blkElements.size());
+            dxfEntity = (DxfEntity) entity.block.get(i);
+
+            Point2D point1 = new Point2D.Double();
+            Point2D point2 = new Point2D.Double();
+            Point2D point11 = new Point2D.Double();
+            Point2D point22 = new Point2D.Double();
+            Point2D pointAux = null;
+
+            if (dxfEntity instanceof DxfLine) {
+                dxfLine = (DxfLine) dxfEntity;
+                point1 = dxfLine.getPts()[0];
+
+                //double laX = entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((point1.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point1.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX());
+                //double laY = entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((point1.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point1.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY());
+                pointAux = new Point2D.Double(point1.getX() - bPointX,
+                                              point1.getY() - bPointY);
+
+                double laX = entity.pt.getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = entity.pt.getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                point11.setLocation(laX, laY);
+                point2 = dxfLine.getPts()[1];
+                pointAux = new Point2D.Double(point2.getX() - bPointX,
+                                              point2.getY() - bPointY);
+                laX = entity.pt.getX() +
+                      (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                laY = entity.pt.getY() +
+                      (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                point22.setLocation(laX, laY);
+
+                DxfLine dxfLinee = new DxfLine(proj, layer, point11, point22);
+
+                if (addingToBlock == false) {
+                    entities.add(dxfLinee);
+                }
+            } else if (dxfEntity instanceof DxfInsert) {
+                dxfInsert = (DxfInsert) dxfEntity;
+                point1 = dxfInsert.pt;
+                pointAux = new Point2D.Double(point1.getX() - bPointX,
+                                              point1.getY() - bPointY);
+
+                //point11.setLocation(entity.pt.getX() - entity.block.bPoint.getX() + ((point1.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point1.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - entity.block.bPoint.getY() + ((point1.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point1.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                //point11.setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((point1.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point1.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((point1.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point1.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                double laX = entity.pt.getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = entity.pt.getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                point11.setLocation(laX, laY);
+
+                DxfInsert dxfInsertt = new DxfInsert(proj, layer);
+
+                dxfInsertt.pt = point11;
+
+                dxfInsertt.blkList = dxfInsert.blkList;
+                dxfInsertt.block = dxfInsert.block;
+                dxfInsertt.blockName = dxfInsert.blockName;
+                dxfInsertt.rotAngle = dxfInsert.rotAngle;
+                dxfInsertt.layer = dxfInsert.layer;
+                dxfInsertt.proj = dxfInsert.proj;
+
+                Point2D newScale = new Point2D.Double(dxfInsert.getScaleFactor()
+                                                               .getX() * sFactorX,
+                                                      dxfInsert.getScaleFactor()
+                                                               .getY() * sFactorY);
+                dxfInsertt.setScaleFactor(newScale);
+
+                //dxfInsertt.scaleFactor = new Point2D.Double(dxfInsert.scaleFactor.getX() * entity.scaleFactor.getX(), dxfInsert.scaleFactor.getY() * entity.scaleFactor.getY());
+                gestionaInsert(dxfInsertt, layer);
+            } else if (dxfEntity instanceof DxfPolyline) {
+                dxfPolyline = (DxfPolyline) dxfEntity;
+
+                DxfPolyline dxfPolylinee = new DxfPolyline(proj, layer);
+
+                if (dxfPolyline.closed) {
+                    dxfPolylinee.closed = true;
+                }
+
+                Point2D[] points = new Point2D[dxfPolyline.pts.size()];
+                Point2D[] pointss = new Point2D[dxfPolyline.pts.size()];
+
+                for (int j = 0; j < dxfPolyline.pts.size(); j++) {
+                    points[j] = (Point2D) dxfPolyline.pts.get(j);
+                    pointss[j] = new Point2D.Double();
+
+                    //pointss[j].setLocation(entity.pt.getX() - entity.block.bPoint.getX() + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - entity.block.bPoint.getY() + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    //pointss[j].setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    pointAux = new Point2D.Double(points[j].getX() - bPointX,
+                                                  points[j].getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    pointss[j].setLocation(laX, laY);
+
+                    //pointss[j].setLocation(entity.pt.getX() + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    dxfPolylinee.add(pointss[j]);
+
+                    // jmorell, 050405: Bulges en Dxfpolyline para el piloto
+                    dxfPolylinee.addBulge((Double) dxfPolyline.getBulges().get(j));
+                }
+
+                if (addingToBlock == false) {
+                    entities.add(dxfPolylinee);
+                }
+            } else if (dxfEntity instanceof DxfArc) {
+                dxfArc = (DxfArc) dxfEntity;
+
+                Point2D[] points = new Point2D[dxfArc.pts.length];
+                Point2D[] pointss = new Point2D[dxfArc.pts.length];
+
+                for (int j = 0; j < dxfArc.pts.length; j++) {
+                    points[j] = (Point2D) dxfArc.pts[j];
+                    pointss[j] = new Point2D.Double();
+                    pointAux = new Point2D.Double(points[j].getX() - bPointX,
+                                                  points[j].getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    pointss[j].setLocation(laX, laY);
+
+                    //pointss[j].setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                }
+
+                DxfArc dxfArcc = new DxfArc(proj, layer, pointss);
+
+                // 050315, jmorell: Para que no se pierdan las propiedades en el
+                //					caso de objetos dentro de bloques.
+                pointAux = new Point2D.Double(dxfArc.getCentralPoint().getX() -
+                                              bPointX,
+                                              dxfArc.getCentralPoint().getY() -
+                                              bPointY);
+
+                double laX = entity.pt.getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = entity.pt.getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                pointAux.setLocation(laX, laY);
+                dxfArcc.setCentralPoint(pointAux);
+                pointAux = new Point2D.Double(dxfArc.getInit().getX() -
+                                              bPointX,
+                                              dxfArc.getInit().getY() -
+                                              bPointY);
+                laX = entity.pt.getX() +
+                      (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                laY = entity.pt.getY() +
+                      (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                pointAux.setLocation(laX, laY);
+                dxfArcc.setInit(pointAux);
+                pointAux = new Point2D.Double(dxfArc.getEnd().getX() - bPointX,
+                                              dxfArc.getEnd().getY() - bPointY);
+                laX = entity.pt.getX() +
+                      (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                laY = entity.pt.getY() +
+                      (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                pointAux.setLocation(laX, laY);
+                dxfArcc.setEnd(pointAux);
+                pointAux = new Point2D.Double(dxfArc.getCenter().getX() -
+                                              bPointX,
+                                              dxfArc.getCenter().getY() -
+                                              bPointY);
+                laX = entity.pt.getX() +
+                      (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                laY = entity.pt.getY() +
+                      (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                      ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                pointAux.setLocation(laX, laY);
+                dxfArcc.setCenter(pointAux);
+                dxfArcc.setRadius(dxfArc.getRadius() * sFactorX);
+
+                // TODO ¿Como afectan las rotaciones del insert al init y el end angle?
+                dxfArcc.setInitAngle(dxfArc.getInitAngle());
+                dxfArcc.setEndAngle(dxfArc.getEndAngle());
+
+                if (addingToBlock == false) {
+                    entities.add(dxfArcc);
+                }
+            } else if (dxfEntity instanceof DxfCircle) {
+                dxfCircle = (DxfCircle) dxfEntity;
+
+                Point2D[] points = new Point2D[dxfCircle.pts.length];
+                Point2D[] pointss = new Point2D[dxfCircle.pts.length];
+
+                for (int j = 0; j < dxfCircle.pts.length; j++) {
+                    points[j] = (Point2D) dxfCircle.pts[j];
+                    pointss[j] = new Point2D.Double();
+                    pointAux = new Point2D.Double(points[j].getX() - bPointX,
+                                                  points[j].getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    pointss[j].setLocation(laX, laY);
+
+                    //pointss[j].setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                }
+
+                DxfCircle dxfCirclee = new DxfCircle(proj, layer, pointss);
+
+                // 050315, jmorell: Para que no se pierdan las propiedades en el
+                //					caso de objetos dentro de bloques.
+                pointAux = new Point2D.Double(dxfCircle.getCenter().getX() -
+                                              bPointX,
+                                              dxfCircle.getCenter().getY() -
+                                              bPointY);
+
+                double laX = entity.pt.getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = entity.pt.getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                pointAux.setLocation(laX, laY);
+                dxfCirclee.setCenter(pointAux);
+
+                // Escala en X = escala en Y ...
+                dxfCirclee.setRadius(dxfCircle.getRadius() * sFactorX);
+
+                if (addingToBlock == false) {
+                    entities.add(dxfCirclee);
+                }
+            } else if (dxfEntity instanceof DxfLwPolyline) {
+                dxfLwPolyline = (DxfLwPolyline) dxfEntity;
+
+                DxfLwPolyline dxfLwPolylinee = new DxfLwPolyline(proj, layer);
+                Point2D[] points = new Point2D[dxfLwPolyline.pts.size()];
+                Point2D[] pointss = new Point2D[dxfLwPolyline.pts.size()];
+
+                for (int j = 0; j < dxfLwPolyline.pts.size(); j++) {
+                    points[j] = (Point2D) dxfLwPolyline.pts.get(j);
+                    pointss[j] = new Point2D.Double();
+                    pointAux = new Point2D.Double(points[j].getX() - bPointX,
+                                                  points[j].getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    pointss[j].setLocation(laX, laY);
+
+                    //pointss[j].setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    dxfLwPolylinee.add(pointss[j]);
+
+                    // jmorell, 050405: Bulges en Dxfpolyline para el piloto
+                    dxfLwPolylinee.addBulge((Double) dxfPolyline.getBulges()
+                                                                .get(j));
+                }
+
+                if (addingToBlock == false) {
+                    entities.add(dxfLwPolylinee);
+                }
+            } else if (dxfEntity instanceof DxfPoint) {
+                dxfPoint = (DxfPoint) dxfEntity;
+                point1 = dxfPoint.getPt();
+                pointAux = new Point2D.Double(point1.getX() - bPointX,
+                                              point1.getY() - bPointY);
+
+                double laX = entity.pt.getX() +
+                             (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                double laY = entity.pt.getY() +
+                             (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                             ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                point11.setLocation(laX, laY);
+
+                //point11.setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((point1.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point1.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((point1.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point1.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                DxfPoint dxfPointt = new DxfPoint(proj, layer);
+
+                //dxfPointt.pt = point11;
+                dxfPointt.setPt(point11);
+
+                if (addingToBlock == false) {
+                    entities.add(dxfPointt);
+                }
+            } else if (dxfEntity instanceof DxfText) {
+                dxfText = (DxfText) dxfEntity;
+
+                if (dxfText.getTwoPointsFlag()) {
+                    point1 = dxfText.pts[0];
+                    pointAux = new Point2D.Double(point1.getX() - bPointX,
+                                                  point1.getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    point11.setLocation(laX, laY);
+
+                    //point11.setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((point1.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point1.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((point1.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point1.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    point2 = dxfText.pts[1];
+                    pointAux = new Point2D.Double(point2.getX() - bPointX,
+                                                  point2.getY() - bPointY);
+                    laX = entity.pt.getX() +
+                          (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                          ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    laY = entity.pt.getY() +
+                          (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                          ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    point22.setLocation(laX, laY);
+
+                    //point22.setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((point2.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point2.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((point2.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point2.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    DxfText dxfTextt = new DxfText(proj, layer,
+                                                   dxfText.getText());
+                    dxfTextt.pts[0] = point11;
+                    dxfTextt.pts[1] = point22;
+
+                    if (addingToBlock == false) {
+                        entities.add(dxfTextt);
+                    }
+                } else {
+                    point1 = dxfText.getPt();
+                    pointAux = new Point2D.Double(point1.getX() - bPointX,
+                                                  point1.getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    point11.setLocation(laX, laY);
+
+                    //point11.setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((point1.getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + point1.getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((point1.getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + point1.getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                    DxfText dxfTextt = new DxfText(proj, layer,
+                                                   dxfText.getText());
+                    dxfTextt.setPt(point11);
+
+                    if (addingToBlock == false) {
+                        entities.add(dxfTextt);
+                    }
+                }
+            } else if (dxfEntity instanceof DxfSolid) {
+                dxfSolid = (DxfSolid) dxfEntity;
+
+                Point2D[] points = new Point2D[dxfSolid.pts.length];
+                Point2D[] pointss = new Point2D[dxfSolid.pts.length];
+
+                for (int j = 0; j < dxfSolid.pts.length; j++) {
+                    points[j] = (Point2D) dxfSolid.pts[j];
+                    pointss[j] = new Point2D.Double();
+                    pointAux = new Point2D.Double(points[j].getX() - bPointX,
+                                                  points[j].getY() - bPointY);
+
+                    double laX = entity.pt.getX() +
+                                 (((pointAux.getX() * sFactorX) * Math.cos(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * (-1) * Math.sin(rAngleRad)));
+                    double laY = entity.pt.getY() +
+                                 (((pointAux.getX() * sFactorX) * Math.sin(rAngleRad)) +
+                                 ((pointAux.getY() * sFactorY) * Math.cos(rAngleRad)));
+                    pointss[j].setLocation(laX, laY);
+
+                    //pointss[j].setLocation(entity.pt.getX() - (entity.block.bPoint.getX() * entity.getScaleFactor().getX()) + ((points[j].getX()*Math.cos((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*(-1)*Math.sin((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getX()), entity.pt.getY() - (entity.block.bPoint.getY() * entity.getScaleFactor().getY()) + ((points[j].getX()*Math.sin((entity.rotAngle*Math.PI)/180.0) + points[j].getY()*Math.cos((entity.rotAngle*Math.PI)/180.0)) * entity.scaleFactor.getY()));
+                }
+
+                DxfSolid dxfSolidd = new DxfSolid(proj, layer, pointss);
+                Point2D aux = dxfSolidd.pts[2];
+                dxfSolidd.pts[2] = dxfSolidd.pts[3];
+                dxfSolidd.pts[3] = aux;
+
+                if (addingToBlock == false) {
+                    entities.add(dxfSolidd);
+                }
+            } else {
+                System.out.println("gestionaInserts: Encontrado elemento desconocido");
+            }
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createAttdef(org.cresques.io.DxfGroupVector)
+     */
+    public void createAttdef(DxfGroupVector grp) throws Exception {
+        DxfGroup g = null;
+
+        String defaultValue = "";
+        String tagString = "";
+        String textStyleName = "";
+        String[] attribute = new String[2];
+        boolean tagDefined = false;
+        boolean defValDefined = false;
+
+        if (grp.hasCode(1)) {
+            defaultValue = grp.getDataAsString(1);
+            attribute[1] = DxfConvTexts.ConvertText(defaultValue);
+            defValDefined = true;
+
+            if (tagDefined) {
+                attributes.add(attribute);
+            }
+        }
+
+        if (grp.hasCode(2)) {
+            tagString = grp.getDataAsString(2);
+            attribute[0] = DxfConvTexts.ConvertText(tagString);
+            tagDefined = true;
+
+            if (defValDefined) {
+                attributes.add(attribute);
+            }
+        }
+
+        if (grp.hasCode(7)) {
+            textStyleName = grp.getDataAsString(7);
+            textStyleName = DxfConvTexts.ConvertText(textStyleName);
+        }
+
+        // TODO setNewAttributes();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#createAttrib(org.cresques.io.DxfGroupVector)
+     */
+    public void createAttrib(DxfGroupVector grp) throws Exception {
+        double x = 0.0;
+        double y = 0.0;
+        double z = 0.0;
+        double h = 0.0;
+        double rot = 0.0;
+        DxfGroup g = null;
+        Point2D pt = null;
+
+        String defaultValue = "";
+        String tagString = "";
+        String textStyleName = "";
+        String[] att = new String[2];
+        boolean tagDefined = false;
+        boolean defValDefined = false;
+        int attributeFlags = 0;
+        double extx = 0.0;
+        double exty = 0.0;
+        double extz = 1.0;
+
+        DxfLayer layer = (DxfLayer) layers.getByName(grp.getDataAsString(8));
+        DxfAttrib entity = new DxfAttrib(proj, layer);
+
+        if (grp.hasCode(1)) {
+            String strAux1 = grp.getDataAsString(1);
+            strAux1 = DxfConvTexts.ConvertText(strAux1);
+            defaultValue = strAux1;
+            att[1] = DxfConvTexts.ConvertText(defaultValue);
+            defValDefined = true;
+
+            /*if (tagDefined) {
+                    insFea.setProp(att[0], att[1]);
+                    ptFea.setProp(att[0], att[1]);
+            }
+            feature.setProp("text", strAux1);*/
+        }
+
+        if (grp.hasCode(2)) {
+            String strAux2 = grp.getDataAsString(2);
+            strAux2 = DxfConvTexts.ConvertText(strAux2);
+            tagString = strAux2;
+            att[0] = DxfConvTexts.ConvertText(tagString);
+            tagDefined = true;
+
+            /*if (defValDefined) {
+                    insFea.setProp(att[0], att[1]);
+                    ptFea.setProp(att[0], att[1]);
+            }*/
+        }
+
+        if (grp.hasCode(7)) {
+            textStyleName = grp.getDataAsString(7);
+            textStyleName = DxfConvTexts.ConvertText(textStyleName);
+        }
+
+        x = grp.getDataAsDouble(10);
+        y = grp.getDataAsDouble(20);
+        z = grp.getDataAsDouble(30);
+
+        if (grp.hasCode(210)) {
+            extx = grp.getDataAsDouble(210);
+        }
+
+        if (grp.hasCode(220)) {
+            exty = grp.getDataAsDouble(220);
+        }
+
+        if (grp.hasCode(230)) {
+            extz = grp.getDataAsDouble(230);
+        }
+
+        Point3D point_in = new Point3D(x, y, z);
+        Point3D xtru = new Point3D(extx, exty, extz);
+        Point3D point_out = DxfCalXtru.CalculateXtru(point_in, xtru);
+        x = point_out.getX();
+        y = point_out.getY();
+        z = point_out.getZ();
+        entity.setPt(proj.createPoint(x, y));
+
+        if (grp.hasCode(40)) {
+            Double heightD = new Double(grp.getDataAsDouble(40));
+            String heightS = heightD.toString();
+
+            //feature.setProp("textHeight", heightS);
+        } else {
+            //feature.setProp("textHeight", "20.0");
+        }
+
+        if (grp.hasCode(50)) {
+            Double rotD = new Double(grp.getDataAsDouble(50));
+            String rotS = rotD.toString();
+
+            //feature.setProp("textRotation", rotS);
+        } else {
+            //feature.setProp("textRotation", "0.0");
+        }
+
+        if (grp.hasCode(62)) {
+            entity.dxfColor = grp.getDataAsInt(62);
+        } else {
+            //entity.dxfColor = 0;
+        }
+
+        if (grp.hasCode(70)) {
+            attributeFlags = grp.getDataAsInt(70);
+        }
+
+        if (attributeFlags == 8) {
+            if (addingToBlock == false) {
+                entities.add(entity);
+            } else {
+                blk.add(entity);
+            }
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#getAttributes()
+     */
+    public Vector getAttributes() {
+        return attributes;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#depureAttributes()
+     */
+    public void depureAttributes() {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.io.DxfFile.EntityFactory#isDxf3DFile()
+     */
+    public boolean isDxf3DFile() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEntityMaker.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEllipse.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEllipse.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEllipse.java	(revision 10281)
@@ -0,0 +1,279 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.ViewPortData;
+
+import org.cresques.io.DxfGroup;
+
+import org.cresques.px.Extent;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Entidad ELLIPSE de un fichero DXF.
+ * @author jmorell
+ */
+public class DxfEllipse extends DxfEntity {
+    final static Color baseColor = new Color(69, 106, 121);
+
+    //Vector points = null;
+    GeneralPath gp = null;
+    boolean closed = true;
+    Point2D[] pts;
+    private double minorAxisLength;
+    private Point2D center;
+    private double minorToMajorAxisRatio;
+    private Color color = baseColor; //Color(255,214,132,255);
+    
+    /**
+     * Constructor de DxfEllipse.
+     * @param proj, proyección cartográfica en la que se encuentra el DxfEllipse.
+     * @param layer, capa del DXF en la que se encuentra el DxfEllipse.
+     * @param pt1, primer punto del semieje mayor.
+     * @param pt2, segundo punto del semieje mayor.
+     * @param minorAxisLength, longitud del semieje menor.
+     */
+    public DxfEllipse(IProjection proj, DxfLayer layer, Point2D pt1,
+                      Point2D pt2, double minorAxisLength) {
+        super(proj, layer);
+        pts = new Point2D[2];
+        pts[0] = pt1;
+        pts[1] = pt2;
+        this.minorAxisLength = minorAxisLength;
+        extent = new Extent();
+
+        for (int i = 0; i < pts.length; i++) {
+            extent.add(pts[i]);
+        }
+
+        center = new Point2D.Double((pts[0].getX() + pts[1].getX()) / 2.0,
+                                    (pts[0].getY() + pts[1].getY()) / 2.0);
+
+        double majorAxisLength = pt1.distance(pt2);
+
+        //System.out.println("minorAxisLength = " + minorAxisLength);
+        //System.out.println("majorAxisLength = " + majorAxisLength);
+        minorToMajorAxisRatio = minorAxisLength / majorAxisLength;
+    }
+    
+    /**
+     * Devuelve el color del DxfEllipse.
+     * @return Color
+     */
+    public Color c() {
+        return color;
+    }
+    
+    /**
+     * Establece el color del DxfEllipse.
+     * @param color
+     * @return Color
+     */
+    public Color c(Color color) {
+        this.color = color;
+
+        return color;
+    }
+    
+    /**
+     * Permite reproyectar un DxfEllipse dado un conjunto de coordenadas de transformación.
+     * @param rp, coordenadas de transformación.
+     */
+    public void reProject(ICoordTrans rp) {
+        Point2D[] savePts = pts;
+
+        pts = new Point2D[savePts.length];
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePts.length; i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePts[i], ptDest);
+            this.pts[i] = ptDest;
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+    
+    /**
+     * Permite dibujar un DxfEllipse.
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //System.out.println("Va a pintar un circle");
+        Color color = null;
+
+        if (dxfColor == AcadColor.BYLAYER) {
+            //g.setColor(layer.getColor());
+            color = layer.getColor();
+        } else {
+            //g.setColor(AcadColor.getColor(dxfColor));
+            color = AcadColor.getColor(dxfColor);
+        }
+
+        newGP(vp);
+
+        if (closed) {
+            g.setColor(new Color(color.getRed(), color.getBlue(),
+                                 color.getGreen(), 0x80));
+            g.fill(gp);
+        }
+
+        g.setColor(color);
+        g.draw(gp);
+    }
+    
+    /**
+     * Permite generar un GeneralPath partiendo del array de Point2D que conforma el
+     * DxfEllipse.
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+
+        //System.out.println("pts.length = " + pts.length);
+        for (int i = 0; i < pts.length; i++) {
+            pt1 = (Point2D) pts[i];
+            vp.mat.transform(pt1, ptTmp);
+
+            if (pt0 == null) {
+                pt0 = ptTmp;
+                gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            } else {
+                gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            }
+        }
+
+        if (closed) {
+            gp.closePath();
+        }
+    }
+    
+    /**
+     * Permite la escritura de entidades DxfEllipse en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * del DxfEllipse.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "ELLIPSE"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbEllipse"));
+        sb.append(DxfGroup.toString(10, getCenter().getX(), 6));
+        sb.append(DxfGroup.toString(20, getCenter().getY(), 6));
+        sb.append(DxfGroup.toString(30, 0.0, 6));
+        sb.append(DxfGroup.toString(11, pts[1].getX() - getCenter().getX(), 6));
+        sb.append(DxfGroup.toString(21, pts[1].getY() - getCenter().getY(), 6));
+        sb.append(DxfGroup.toString(31, 0.0, 6));
+        sb.append(DxfGroup.toString(40, getMinorToMajorAxisRatio(), 6));
+        sb.append(DxfGroup.toString(41, 0.0, 6));
+        sb.append(DxfGroup.toString(42, 2 * Math.PI, 6));
+
+        return sb.toString();
+    }
+    
+    /**
+     * Devuelve el array de puntos que conforman el DxfEllipse.
+     * @return Point2D[], puntos del DxfEllipse.
+     */
+    public Point2D[] getPts() {
+        return pts;
+    }
+
+    /**
+     * Devuelve el GeneralPath qie conforma el DxfEllipse.
+     * @return GeneralPath del DxfEllipse.
+     */
+    /*public GeneralPath getGeneralPath(ViewPort vp) {
+            newGP(vp);
+            return (GeneralPath) gp.clone();
+    }*/
+
+    /**
+     * @return Returns the minorAxisLength.
+     */
+    public double getMinorAxisLength() {
+        return minorAxisLength;
+    }
+
+    /**
+     * @param minorAxisLength The minorAxisLength to set.
+     */
+    public void setMinorAxisLength(double minorAxisLength) {
+        this.minorAxisLength = minorAxisLength;
+    }
+
+    /**
+     * @param pts The pts to set.
+     */
+    public void setPts(Point2D[] pts) {
+        this.pts = pts;
+    }
+
+    /**
+     * @return Returns the center.
+     */
+    public Point2D getCenter() {
+        return center;
+    }
+
+    /**
+     * @param center The center to set.
+     */
+    public void setCenter(Point2D center) {
+        this.center = center;
+    }
+
+    /**
+     * @return Returns the majorToMinorAxisRatio.
+     */
+    public double getMinorToMajorAxisRatio() {
+        return minorToMajorAxisRatio;
+    }
+
+    /**
+     * @param majorToMinorAxisRatio The majorToMinorAxisRatio to set.
+     */
+    public void setMinorToMajorAxisRatio(double majorToMinorAxisRatio) {
+        this.minorToMajorAxisRatio = majorToMinorAxisRatio;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfEllipse.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfConvTexts.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfConvTexts.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfConvTexts.java	(revision 10281)
@@ -0,0 +1,133 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import java.text.StringCharacterIterator;
+
+
+/**
+ * La clase DxfConvTexts se emplea para convertir los textos asociados a las entidades
+ * TEXT de un fichero DXF al alfabeto tradicional.
+ * @author jmorell
+ */
+public class DxfConvTexts {
+    
+    /**
+     * Método que permite transformar los textos asociados a entidades TEXT en un
+     * fichero DXF al alfabeto tradicional.
+     * @param s, texto extraido de un DXF.
+     * @return String, el mismo texto en alfabeto tradicional.
+     */
+    public static String ConvertText(String s) {
+        StringCharacterIterator stringcharacteriterator = new StringCharacterIterator(s);
+        StringBuffer stringbuffer = new StringBuffer();
+        int[] ai = new int[s.length()];
+        int i = 0;
+        int j = 0;
+
+        for (char c = stringcharacteriterator.first(); c != '\uFFFF';
+                 c = stringcharacteriterator.next())
+            if (c == '%') {
+                c = stringcharacteriterator.next();
+
+                if (c != '%') {
+                    stringbuffer.append('%');
+                    c = stringcharacteriterator.previous();
+                } else {
+                    c = stringcharacteriterator.next();
+
+                    switch (c) {
+                    case 37: // '%'
+                        stringbuffer.append('%');
+
+                        break;
+
+                    case 80: // 'P'
+                    case 112: // 'p'
+                        stringbuffer.append('\361');
+
+                        break;
+
+                    case 67: // 'C'
+                    case 99: // 'c'
+                        stringbuffer.append('\355');
+
+                        break;
+
+                    case 68: // 'D'
+                    case 100: // 'd'
+                        stringbuffer.append('\u00b0');
+
+                        break;
+
+                    case 85: // 'U'
+                    case 117: // 'u'
+                        ai[stringbuffer.length()] ^= 1;
+                        i++;
+
+                        break;
+
+                    case 79: // 'O'
+                    case 111: // 'o'
+                        ai[stringbuffer.length()] ^= 2;
+                        j++;
+
+                        break;
+
+                    default:
+
+                        if ((c >= '0') && (c <= '9')) {
+                            int k = 3;
+                            char c1 = (char) (c - 48);
+
+                            for (c = stringcharacteriterator.next();
+                                     (c >= '0') && (c <= '9') && (--k > 0);
+                                     c = stringcharacteriterator.next())
+                                c1 = (char) ((10 * c1) + (c - 48));
+
+                            stringbuffer.append(c1);
+                        }
+
+                        c = stringcharacteriterator.previous();
+
+                        break;
+                    }
+                }
+            } else if (c == '^') {
+                c = stringcharacteriterator.next();
+
+                if (c == ' ') {
+                    stringbuffer.append('^');
+                }
+            } else {
+                stringbuffer.append(c);
+            }
+
+        s = Unicode.char2DOS437(stringbuffer, 2, '?');
+
+        String ss = s;
+
+        return ss;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfConvTexts.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLwPolyline.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLwPolyline.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLwPolyline.java	(revision 10281)
@@ -0,0 +1,92 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px.dxf;
+
+import org.cresques.cts.IProjection;
+
+import org.cresques.io.DxfGroup;
+
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+/**
+ * Entidad LWPOLYLINE de un fichero DXF.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ * @author jmorell
+ */
+public class DxfLwPolyline extends DxfPolyline {
+    
+    /**
+     * Constructor de DxfLwPolyline.
+     * @param proj, proyección cartográfica en la que se encuentra la DxfLwPolyline.
+     * @param layer, capa del DXF en la que se encuentra la DxfLwPolyline.
+     */
+    public DxfLwPolyline(IProjection proj, DxfLayer layer) {
+        super(proj, layer);
+    }
+
+    /**
+     * Permite la escritura de entidades DxfLwPolyline en un fichero DXF2000.
+     * @return String, la cadena que se escribirá en el fichero con la información
+     * de la DxfLwPolyline.
+     */
+    /**
+     * 050302, jmorell: Si el 90 no está antes que el 70, Autocad 2004 no cierra
+     * las polilíneas.
+     */
+    public String toDxfString() {
+        StringBuffer sb = null;
+        sb = new StringBuffer(DxfGroup.toString(0, "LWPOLYLINE"));
+        sb.append(DxfGroup.toString(5, getHandle()));
+        sb.append(DxfGroup.toString(100, "AcDbEntity"));
+        sb.append(DxfGroup.toString(8, layer.getName()));
+        sb.append(DxfGroup.toString(62, dxfColor));
+        sb.append(DxfGroup.toString(100, "AcDbPolyline"));
+        sb.append(DxfGroup.toString(90, pts.size()));
+        sb.append(DxfGroup.toString(70, flags));
+        sb.append(DxfGroup.toString(38, new Double(getElevation())));
+
+        Point2D pt = null;
+        double bulge;
+        Vector bulges = getBulges();
+
+        /*Iterator iter = pts.iterator();
+        while (iter.hasNext()) {
+                pt = (Point2D) iter.next();
+                sb.append( DxfGroup.toString(10, pt.getX(), 6) );
+                sb.append( DxfGroup.toString(20, pt.getY(), 6) );
+        }*/
+        for (int i = 0; i < pts.size(); i++) {
+            pt = (Point2D) pts.get(i);
+            bulge = ((Double) bulges.get(i)).doubleValue();
+            sb.append(DxfGroup.toString(10, pt.getX(), 6));
+            sb.append(DxfGroup.toString(20, pt.getY(), 6));
+            sb.append(DxfGroup.toString(42, bulge, 6));
+        }
+
+        return sb.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf/DxfLwPolyline.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/dxf
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxContour.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxContour.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxContour.java	(revision 10281)
@@ -0,0 +1,249 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Polygon2D;
+import org.cresques.geo.Projected;
+import org.cresques.geo.ViewPortData;
+import org.cresques.geo.cover.Hoja;
+
+import java.awt.Color;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import java.util.Vector;
+
+
+public class PxContour extends PxObj implements Projected {
+    final static Color colorBase = new Color(0, 64, 128, 255); //Color(255,214,132,255);
+    final static Color fColorBase = new Color(64, 128, 192, 255); //Color(255,222,165,64);
+    IProjection proj = null;
+    protected String name;
+    protected String fName;
+    private Color fColor = fColorBase;
+    private Color pc = colorBase;
+    private Polygon2D polygon = null;
+
+    public PxContour(Extent e, String fName, String name, IProjection proj) {
+        this.fName = fName;
+        this.name = name;
+        this.proj = proj;
+
+        Point2D[] v = new Point2D[4];
+        v[0] = proj.createPoint(e.minX(), e.minY());
+        v[1] = proj.createPoint(e.maxX(), e.minY());
+        v[2] = proj.createPoint(e.maxX(), e.maxY());
+        v[3] = proj.createPoint(e.minX(), e.maxY());
+        setContour(v);
+    }
+
+    public PxContour(Hoja h) {
+        name = h.getCode();
+        setContour(h.getVertex());
+    }
+
+    public PxContour(Point2D[] v, String name) {
+        this.name = name;
+        setContour(v);
+    }
+
+    public void _PxContour(Point2D pt1, Point2D pt2, String fName, String name) {
+        this.fName = fName;
+        this.name = name;
+        extent = new Extent(pt1, pt2);
+    }
+
+    public void _PxContour(Point2D[] v, String fName, String name) {
+        this.fName = fName;
+        this.name = name;
+        setContour(v);
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    private void setContour(Point2D[] v) {
+        extent = new Extent();
+        polygon = new Polygon2D();
+
+        for (int i = 0; i < v.length; i++) {
+            polygon.addPoint(v[i]);
+            extent.add(v[i]);
+        }
+    }
+
+    /**
+     * Vertices de un contorno.
+     * @return
+     */
+    public Vector getVertex() {
+        return polygon;
+    }
+
+    public Point2D[] getPtList() {
+        Point2D[] v = new Point2D[polygon.size()];
+
+        for (int i = 0; i < polygon.size(); i++)
+            v[i] = (Point2D) polygon.get(i);
+
+        return v;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Color c() {
+        return pc;
+    }
+
+    public Color c(Color color) {
+        this.pc = color;
+
+        return pc;
+    }
+
+    public Color fillColor() {
+        return fColor;
+    }
+
+    public Color fillColor(Color c) {
+        fColor = c;
+
+        return fColor;
+    }
+
+    public void setColor(Color color) {
+        pc = color;
+    }
+
+    public Color getColor() {
+        return pc;
+    }
+
+    public void setFillColor(Color color) {
+        fColor = color;
+    }
+
+    public Color getFillColor() {
+        return fColor;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        Polygon2D savePol = polygon;
+
+        polygon = new Polygon2D();
+        extent = new Extent();
+
+        Point2D ptDest = null;
+
+        for (int i = 0; i < savePol.size(); i++) {
+            ptDest = rp.getPDest().createPoint(0.0, 0.0);
+            ptDest = rp.convert((Point2D) savePol.get(i), ptDest);
+            polygon.addPoint(ptDest);
+            extent.add(ptDest);
+        }
+
+        setProjection(rp.getPDest());
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp, ICoordTrans rp) {
+        IProjection saveProj = proj;
+        Polygon2D savePol = polygon;
+        Extent saveExt = extent;
+
+        reProject(rp);
+        draw(g, vp);
+
+        polygon = savePol;
+        extent = saveExt;
+        proj = saveProj;
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        //AffineTransform msave=g.getTransform();
+        //g.setTransform(vp.mat);
+        // relleno el marco si es preciso
+        if (fColor != null) {
+            g.setColor(fColor);
+
+            if (polygon == null) {
+                g.fillRect((int) extent.minX(), (int) extent.minY(),
+                           (int) extent.width(), (int) extent.height());
+            } else {
+                polygon.fill(g, vp);
+            }
+        }
+
+        // pinto el marco si es preciso
+        if (pc != null) {
+            g.setColor(pc);
+        }
+
+        if (polygon != null) {
+            polygon.draw(g, vp);
+        } else {
+            g.drawRect((int) extent.minX(), (int) extent.minY(),
+                       (int) extent.width(), (int) extent.height());
+        }
+
+        //g.setTransform(msave);
+        // Pinto el name
+        FontMetrics fm = g.getFontMetrics();
+        int w = fm.stringWidth(name);
+        int h = fm.getAscent();
+        Point2D.Double pt = new Point2D.Double((extent.minX() +
+                                               (extent.width() / 2.0)),
+                                               (extent.minY() +
+                                               (extent.height() / 2.0)));
+
+        try {
+            Point2D.Double min = new Point2D.Double(extent.minX(), extent.minY());
+            Point2D.Double max = new Point2D.Double(extent.maxX(), extent.minY());
+            vp.mat.transform(min, min);
+            vp.mat.transform(max, max);
+
+            if ((max.getX() - min.getX()) < w) {
+                return;
+            }
+
+            vp.mat.transform(pt, pt);
+
+            //if ((int)(pt2.getY()-pt1.getY()) >= g.getFontMetrics().getAscent())
+            g.drawString(name, (int) pt.getX() - (w / 2),
+                         (int) pt.getY() + (h / 2));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxContour.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxPoint.java	(revision 10281)
@@ -0,0 +1,54 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+public class PxPoint implements IPoint {
+    private int px = 0;
+    private int py = 0;
+
+    public PxPoint(int x, int y) {
+        this.px = x;
+        this.py = y;
+    }
+
+    public int x() {
+        return px;
+    }
+
+    public int x(int x) {
+        px = x;
+
+        return px;
+    }
+
+    public int y() {
+        return py;
+    }
+
+    public int y(int y) {
+        py = y;
+
+        return py;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/PxPoint.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IPoint.java	(revision 10281)
@@ -0,0 +1,34 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.px;
+
+public interface IPoint {
+    public int x();
+
+    public int x(int x);
+
+    public int y();
+
+    public int y(int y);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px/IPoint.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/px
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IDatum.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IDatum.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IDatum.java	(revision 10281)
@@ -0,0 +1,42 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts;
+
+
+/**
+ * @author "Luis W. Sevilla" (sevilla_lui@gva.es)
+ */
+public interface IDatum {
+    /**
+     * Semieje Mayor del elipsoide.
+     * @return
+     */
+    public double getESemiMajorAxis();
+
+    /**
+     * Aplanamiento del elipsoide.
+     * @return
+     */
+    public double getEIFlattening();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IDatum.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IProjection.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IProjection.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IProjection.java	(revision 10281)
@@ -0,0 +1,68 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts;
+
+import org.cresques.geo.ViewPortData;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+/**
+ *
+ * @author "Luis W. Sevilla" (sevilla_lui@gva.es)
+ */
+public interface IProjection {
+	
+    public IDatum getDatum();
+
+    public Point2D createPoint(double x, double y);
+
+    // TODO Quitar si no son necesarias.
+    public String getAbrev();
+
+    public void drawGrid(Graphics2D g, ViewPortData vp);
+
+    public void setGridColor(Color c);
+
+    public Color getGridColor();
+    
+    /**
+     * Crea un ICoordTrans para transformar coordenadas
+     * desde el IProjection actual al dest.
+     * @param dest
+     * @return
+     */
+    
+    public ICoordTrans getCT(IProjection dest);
+
+    public Point2D toGeo(Point2D pt);
+
+    public Point2D fromGeo(Point2D gPt, Point2D mPt);
+    
+    public boolean isProjected();
+
+    public double getScale(double minX, double maxX, double width, double dpi);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/IProjection.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ProjectionPool.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ProjectionPool.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ProjectionPool.java	(revision 10281)
@@ -0,0 +1,239 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts;
+
+import org.cresques.cts.gt2.CSDatum;
+import org.cresques.cts.gt2.CSGaussPt;
+import org.cresques.cts.gt2.CSLambertCC;
+import org.cresques.cts.gt2.CSUTM;
+import org.cresques.cts.gt2.CoordSys;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+
+/**
+ * Pool de proyeccions (cs+datum) conocidas.
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class ProjectionPool {
+    static TreeMap data = null;
+
+    static {
+        CoordSys cs = null;
+        data = new TreeMap();
+
+        cs = (new CSUTM(CSDatum.wgs84, 30)).toGeo();
+        cs.setAbrev("EPSG:4326"); // WGS84 (World Geodesic Datum)
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.ed50, 30)).toGeo();
+        cs.setAbrev("EPSG:4230"); // Datum Europeu Internacional ED50
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.d73, 30)).toGeo();
+        cs.setAbrev("EPSG:4274"); // Datum 73 de Lisboa
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.nad27, 30)).toGeo();
+        cs.setAbrev("EPSG:4267"); // NAD 27
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.nad83, 30)).toGeo();
+        cs.setAbrev("EPSG:4269"); // NAD 83
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.lomaQuintana, 30)).toGeo();
+        cs.setAbrev("EPSG:4288"); // PSAD 56 'Loma Quintana'
+        data.put(cs.getAbrev(), cs);
+
+        cs = (new CSUTM(CSDatum.laCanoa, 30)).toGeo();
+        cs.setAbrev("EPSG:4247"); // PSAD 56 'Loma Quintana'
+        data.put(cs.getAbrev(), cs);
+
+        for (int i = 1; i <= 60; i++) {
+            String huso = Integer.toString(i);
+
+            if (i < 10) {
+                huso = "0" + huso;
+            }
+
+            cs = new CSUTM(CSDatum.wgs84, i);
+            cs.setAbrev("EPSG:326" + huso);
+            data.put(cs.getAbrev(), cs);
+
+            cs = new CSUTM(CSDatum.ed50, i);
+            cs.setAbrev("EPSG:230" + huso);
+            data.put(cs.getAbrev(), cs);
+        }
+
+        for (int i = 3; i <= 23; i++) {
+            String huso = Integer.toString(i);
+
+            if (i < 10) {
+                huso = "0" + huso;
+            }
+
+            cs = new CSUTM(CSDatum.nad27, i);
+            cs.setAbrev("EPSG:267" + huso);
+            data.put(cs.getAbrev(), cs);
+
+            cs = new CSUTM(CSDatum.nad83, i);
+            cs.setAbrev("EPSG:269" + huso);
+            data.put(cs.getAbrev(), cs);
+        }
+
+        cs = CSGaussPt.hgd73;
+        cs.setAbrev("EPSG:27492"); // Projecção Gauss do Datum 73 de Lisboa (no EPSG found) 
+        data.put(cs.getAbrev(), cs);
+
+        cs = new CSUTM(CSDatum.d73, 29);
+        cs.setAbrev("EPSG:27429"); // Projecção Gauss do Datum 73 de Lisboa (no EPSG found) 
+        data.put(cs.getAbrev(), cs);
+
+        for (int i = 18; i <= 21; i++) {
+            String huso = Integer.toString(i);
+
+            if (i < 10) {
+                huso = "0" + huso;
+            }
+
+            cs = new CSUTM(CSDatum.lomaQuintana, i);
+            cs.setAbrev("EPSG:288" + huso);
+            data.put(cs.getAbrev(), cs);
+
+            cs = new CSUTM(CSDatum.laCanoa, i);
+            cs.setAbrev("EPSG:247" + huso);
+            data.put(cs.getAbrev(), cs);
+        }
+
+        //		cs = new CSLambertCC(CSDatum.nad27, -105D, 49D, 49D, 77D, 0, 0);
+        //		cs.setAbrev("LCCCan");
+        //		data.put(cs.getAbrev(), cs);
+        /* Para el server WMS de canadá:
+         * EPSG:42101
+         * EPSG:42304
+         * EPSG:4269
+         */
+        /*
+         * 42101,PROJCS["WGS 84 / LCC Canada",
+         * GEOGCS["WGS 84",DATUM["WGS_1984",
+         * SPHEROID["WGS_1984",6378137,298.257223563]],
+         * PRIMEM["Greenwich",0],UNIT["Decimal_Degree",0.0174532925199433]],
+         *
+         * PROJECTION["Lambert_Conformal_Conic_2SP"],
+         * PARAMETER["central_meridian",-95.0],
+         * PARAMETER["latitude_of_origin",0],
+         * PARAMETER["standard_parallel_1",49.0],
+         * PARAMETER["standard_parallel_2",77.0],
+         * PARAMETER["false_easting",0.0],
+         * PARAMETER["false_northing",-8000000.0],
+         * UNIT["Meter",1],AUTHORITY["EPSG","42101"]]
+         */
+        cs = new CSLambertCC(CSDatum.wgs84, -95, 0, 49, 77, 0, -8000000.0);
+        cs.setAbrev("EPSG:42101");
+        data.put(cs.getAbrev(), cs);
+
+        /* 42304,PROJCS["NAD83 / NRCan LCC Canada",
+         * GEOGCS["NAD83",DATUM["North_American_Datum_1983",
+         * SPHEROID["GRS_1980",6378137,298.257222101]],
+         * PRIMEM["Greenwich",0],
+         * UNIT["Decimal_Degree",0.0174532925199433]],
+         *
+         * PROJECTION["Lambert_Conformal_Conic_2SP"],
+         * PARAMETER["central_meridian",-95.0],
+         * PARAMETER["latitude_of_origin",49.0],
+         * PARAMETER["standard_parallel_1",49.0],
+         * PARAMETER["standard_parallel_2",77.0],
+         * PARAMETER["false_easting",0.0],
+         * PARAMETER["false_northing",0.0],
+         * UNIT["Meter",1],AUTHORITY["EPSG","42304"]]
+         */
+        cs = new CSLambertCC(CSDatum.nad83, -95, 49, 49, 77, 0, 0);
+        cs.setAbrev("EPSG:42304");
+        data.put(cs.getAbrev(), cs);
+
+        /*
+         * EPSG:26915 - NAD83 / UTM zone 15N
+         * EPSG:31466 - Gauß-Krüger band 2
+         * EPSG:31467 - Gauß-Krüger band 3
+         * EPSG:4314  - DHDN
+         */
+    }
+
+    /**
+     * Mete una nueva proyeccion en la Pool.
+     * @param name abreviatura de la proyecccion (i.e. EPSG:23030)
+     * @param proj Proyeccion
+     */
+    public static void add(String name, IProjection proj) {
+        data.put(name, proj);
+    }
+
+    /**
+     * Devuelve una proyeccion a partir de una cadena.
+     * @param name abreviatura de la proyecccion (i.e. EPSG:23030)
+     * @return Proyeccion si existe
+     */
+    public static IProjection get(String name) {
+        IProjection proj = null;
+
+        if (ProjectionPool.data.containsKey(name)) {
+            proj = (IProjection) ProjectionPool.data.get(name);
+        } else {
+        	// Consultation to remote EPSG database
+        	// if (right)
+        	//    buil new IProjection from GML
+        	// else
+            System.err.println("ProjectionPool: Key '" + name + "' not set.");
+        }
+
+        return proj;
+    }
+
+    public static Iterator iterator() {
+        ArrayList projs = new ArrayList();
+
+        Iterator iter = data.entrySet().iterator();
+
+        while (iter.hasNext()) {
+            projs.add(((Map.Entry) iter.next()).getValue());
+        }
+
+        return projs.iterator();
+    }
+
+    /**
+     * Devuelve una proyeccion a partir de un codig epsg.
+     * @param name codigo de la proyecccion (i.e. 23030)
+     * @return Proyeccion si existe
+     */
+    private static IProjection getByEpsg(String code) {
+        IProjection proj = get("EPSG:" + code);
+
+        return proj;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ProjectionPool.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ICoordTrans.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ICoordTrans.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ICoordTrans.java	(revision 10281)
@@ -0,0 +1,43 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * @author "Luis W. Sevilla" (sevilla_lui@gva.es)
+ */
+public interface ICoordTrans {
+    public IProjection getPOrig();
+
+    public IProjection getPDest();
+
+    public Point2D convert(Point2D ptOrig, Point2D ptDest);
+
+    public Rectangle2D convert(Rectangle2D rect);
+
+    public ICoordTrans getInverted();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/ICoordTrans.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSLambertCC.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSLambertCC.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSLambertCC.java	(revision 10281)
@@ -0,0 +1,81 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts.gt2;
+
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.Projection;
+
+import org.geotools.units.Unit;
+
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ *
+ */
+public class CSLambertCC extends CoordSys {
+    public CSLambertCC(CSDatum datum, double meridian, double origin,
+                       double sp1, double sp2, double est, double nort) {
+        super(datum);
+
+        geogCS = new GeographicCoordinateSystem(datum.getName(null),
+                                                datum.getDatum());
+
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Lambert_Conformal_Conic_2SP");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian", meridian);
+        params.setParameter("latitude_of_origin", origin);
+        params.setParameter("standard_parallel_1", sp1);
+        params.setParameter("standard_parallel_2", sp2);
+        params.setParameter("false_easting", 0.0);
+        params.setParameter("false_northing", 0.0);
+
+        try {
+            Projection projection = csFactory.createProjection("Lambert",
+                                                               "Lambert_Conformal_Conic_2SP",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+    }
+
+    public String toString() {
+        return projCS.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSLambertCC.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordSys.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordSys.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordSys.java	(revision 10281)
@@ -0,0 +1,176 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts.gt2;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+import org.cresques.cts.ProjectionPool;
+import org.cresques.geo.ViewPortData;
+import org.geotools.cs.CoordinateSystem;
+import org.geotools.cs.CoordinateSystemFactory;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.ProjectedCoordinateSystem;
+
+
+/**
+ * Sistema de Coordenadas (Proyección).
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CoordSys implements IProjection {
+    private static final Color basicGridColor = new Color(64, 64, 64, 128);
+    protected CoordinateSystemFactory csFactory = CoordinateSystemFactory.getDefault();
+    protected CSDatum datum = null;
+    protected GeographicCoordinateSystem geogCS = null;
+    protected ProjectedCoordinateSystem projCS = null;
+    protected String abrev = "";
+    Color gridColor = basicGridColor;
+
+    public CoordSys(CSDatum datum) {
+        this.datum = datum;
+    }
+
+    /**
+     * Crea un nuevo CoordSys geográfico a partir de uno proyectado.
+     * Si el actual es geográfico retorna el mismo.
+     * @return
+     */
+    public CoordSys toGeo() {
+        CoordSys coordSys = new CoordSys((CSDatum) getDatum());
+
+        if (geogCS != null) {
+            coordSys.geogCS = this.geogCS;
+        } else {
+            coordSys.geogCS = projCS.getGeographicCoordinateSystem();
+        }
+
+        return coordSys;
+    }
+
+    public IDatum getDatum() {
+        return datum;
+    }
+
+    public CoordinateSystem getCS() {
+        if (projCS != null) {
+            return projCS;
+        }
+
+        return geogCS;
+    }
+
+    public CoordinateSystem getGeogCS() {
+        if (geogCS != null) {
+            return geogCS;
+        }
+
+        return projCS.getGeographicCoordinateSystem();
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#createPoint(double, double)
+     */
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    public String toString() {
+        if (projCS != null) {
+            return projCS.toString();
+        }
+
+        return geogCS.toString();
+    }
+
+    public void setAbrev(String abrev) {
+        this.abrev = abrev;
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#drawGrid(java.awt.Graphics2D, org.cresques.geo.ViewPortData)
+     */
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        // TODO Apéndice de método generado automáticamente
+    }
+
+    public void setGridColor(Color c) {
+        gridColor = c;
+    }
+
+    public Color getGridColor() {
+        return gridColor;
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#toGeo(java.awt.geom.Point2D)
+     */
+    public Point2D toGeo(Point2D pt) {
+        if (getGeogCS() == geogCS) {
+            return pt;
+        } else {
+            CoordTrans ct = new CoordTrans(this, toGeo());
+
+            return ct.convert(pt, null);
+        }
+    }
+
+    /* (no Javadoc)
+     * @see org.cresques.cts.IProjection#fromGeo(java.awt.geom.Point2D, java.awt.geom.Point2D)
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D mPt) {
+        // TODO Apéndice de método generado automáticamente
+        return null;
+    }
+
+    public double getScale(double minX, double maxX, double w, double dpi) {
+        double scale = 0D;
+
+        if (projCS == null) { // Es geográfico; calcula la escala.
+            scale = ((maxX - minX) * // grados
+                    
+            // 1852.0 metros x minuto de meridiano
+            (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / // px / metro
+                    w; // pixels
+        }
+
+        return scale;
+    }
+    
+    public boolean isProjected() {
+    	return projCS != null;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return new CoordTrans(this, (CoordSys) dest);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordSys.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSUTM.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSUTM.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSUTM.java	(revision 10281)
@@ -0,0 +1,89 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts.gt2;
+
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.Projection;
+
+import org.geotools.units.Unit;
+
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSUTM extends CoordSys {
+    public CSUTM(CSDatum datum, int zone) {
+        super(datum);
+        geogCS = new GeographicCoordinateSystem(datum.getName(null),
+                                                datum.getDatum());
+
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Transverse_Mercator");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian", (double) ((zone * 6) - 183));
+        params.setParameter("latitude_of_origin", 0.0);
+        params.setParameter("scale_factor", 0.9996);
+        params.setParameter("false_easting", 500000.0);
+        params.setParameter("false_northing", 0.0);
+
+        try {
+            Projection projection = csFactory.createProjection("UTM" + zone,
+                                                               "Transverse_Mercator",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+    }
+
+    public double getScale(double minX, double maxX, double w, double dpi) {
+        double scale = super.getScale(minX, maxX, w, dpi);
+
+        if (projCS != null) { // Es geográfico; calcula la escala.
+            scale = ((maxX - minX) * // metros
+                    (dpi / 2.54 * 100.0)) / // px / metro
+                    w; // pixels
+        }
+
+        return scale;
+    }
+
+    public String toString() {
+        return projCS.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSUTM.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSGaussPt.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSGaussPt.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSGaussPt.java	(revision 10281)
@@ -0,0 +1,86 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts.gt2;
+
+import org.geotools.cs.AxisInfo;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.Projection;
+
+import org.geotools.measure.Angle;
+
+import org.geotools.units.Unit;
+
+import org.opengis.referencing.FactoryException;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ *
+ */
+public class CSGaussPt extends CoordSys {
+    public static CSGaussPt hgd73 = new CSGaussPt(CSDatum.d73);
+
+    public CSGaussPt(CSDatum datum) {
+        super(datum);
+        geogCS = new GeographicCoordinateSystem(datum.getName(null),
+                                                datum.getDatum());
+
+        Unit linearUnit = Unit.METRE;
+
+        javax.media.jai.ParameterList params = csFactory.createProjectionParameterList("Oblique_Stereographic");
+        params.setParameter("semi_major",
+                            datum.getDatum().getEllipsoid().getSemiMajorAxis());
+        params.setParameter("semi_minor",
+                            datum.getDatum().getEllipsoid().getSemiMinorAxis());
+        params.setParameter("central_meridian",
+                            (new Angle("8°07'54.862\"W")).degrees());
+
+        //params.setParameter("longitude_of_origin", (new Angle("8º07'54.862\"")).degrees());
+        params.setParameter("latitude_of_origin",
+                            (new Angle("39°40'N")).degrees());
+        params.setParameter("scale_factor", 1.0);
+        params.setParameter("false_easting", 0D); //180598D);
+        params.setParameter("false_northing", 0D); //-86990D);
+
+        try {
+            Projection projection = csFactory.createProjection("GAUSS",
+                                                               "Oblique_Stereographic",
+                                                               params);
+            projCS = csFactory.createProjectedCoordinateSystem(projection.getName()
+                                                                         .toString(),
+                                                               geogCS,
+                                                               projection,
+                                                               linearUnit,
+                                                               AxisInfo.X,
+                                                               AxisInfo.Y);
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+    }
+
+    public String toString() {
+        return projCS.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSGaussPt.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordTrans.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordTrans.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordTrans.java	(revision 10281)
@@ -0,0 +1,179 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts.gt2;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.geotools.ct.*;
+
+//Geotools dependencies
+import org.geotools.pt.*;
+
+//OpenGIS dependencies
+import org.opengis.referencing.operation.TransformException;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+//import org.geotools.pt.MismatchedDimensionException;
+
+/**
+ * Transforma coordenadas entre dos sistemas
+ * @see org.creques.cts.CoordSys
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+class CoordTrans implements ICoordTrans {
+    private CoordinateTransformationFactory trFactory = CoordinateTransformationFactory.getDefault();
+    private CoordinateTransformation tr = null;
+    private MathTransform mt = null;
+    private MathTransform mt2 = null;
+    private MathTransform mt3 = null;
+    private MathTransform mtDatum = null;
+    private CoordSys from = null;
+    private CoordSys to = null;
+    
+    private ICoordTrans invertedCT = null;
+
+    public CoordTrans(CoordSys from, CoordSys to) {
+        this.from = from;
+        this.to = to;
+
+        // Si los dos CoordSys son proyectados, entonces hay
+        // que hacer dos transformaciones (pasar por geográficas)
+        // Si hay cambio de datum son 3 las transformaciones
+        try {
+            if (from.getDatum() != to.getDatum()) {
+                tr = trFactory.createFromCoordinateSystems(from.toGeo().getCS(),
+                                                           to.toGeo().getCS());
+                mtDatum = tr.getMathTransform();
+            }
+
+            if ((from.projCS != null) && (to.projCS != null)) {
+                CoordSys geogcs = from.toGeo();
+                tr = trFactory.createFromCoordinateSystems(from.getCS(),
+                                                           geogcs.getCS());
+                mt = tr.getMathTransform();
+
+                if (mtDatum != null) {
+                    mt2 = mtDatum;
+                }
+
+                geogcs = to.toGeo();
+                tr = trFactory.createFromCoordinateSystems(geogcs.getCS(),
+                                                           to.getCS());
+
+                if (mt2 == null) {
+                    mt2 = tr.getMathTransform();
+                } else {
+                    mt3 = tr.getMathTransform();
+                }
+            } else {
+                if (from.projCS == null) {
+                    mt = mtDatum;
+                }
+
+                tr = trFactory.createFromCoordinateSystems(from.getCS(),
+                                                           to.getCS());
+
+                if (mt == null) {
+                    mt = tr.getMathTransform();
+
+                    if (mtDatum != null) {
+                        mt2 = mtDatum;
+                    }
+                } else {
+                    mt2 = tr.getMathTransform();
+                }
+            }
+        } catch (CannotCreateTransformException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+    }
+
+    public IProjection getPOrig() {
+        return from;
+    }
+
+    public IProjection getPDest() {
+        return to;
+    }
+
+    public ICoordTrans getInverted() {
+        if (invertedCT == null)
+            invertedCT = new CoordTrans(to, from);
+        return invertedCT;
+    }
+
+    public Point2D convert(Point2D ptOrig, Point2D ptDest) {
+        CoordinatePoint pt1 = new CoordinatePoint(ptOrig);
+        CoordinatePoint pt2 = new CoordinatePoint(0D, 0D);
+        ptDest = null;
+
+        try {
+            mt.transform(pt1, pt2);
+            ptDest = pt2.toPoint2D();
+
+            if (mt2 != null) {
+                mt2.transform(pt2, pt1);
+                ptDest = pt1.toPoint2D();
+
+                if (mt3 != null) {
+                    mt3.transform(pt1, pt2);
+                    ptDest = pt2.toPoint2D();
+                }
+            }
+
+            /*} catch (MismatchedDimensionException e) {
+                    // TODO Bloque catch generado automáticamente
+                    e.printStackTrace();
+            */
+        } catch (TransformException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+
+        return ptDest;
+    }
+
+    public String toString() {
+        return tr.toString();
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.ICoordTrans#convert(java.awt.geom.Rectangle2D)
+     */
+    public Rectangle2D convert(Rectangle2D rect) {
+        Point2D pt1 = new Point2D.Double(rect.getMinX(), rect.getMinY());
+        Point2D pt2 = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
+        pt1 = convert(pt1, null);
+        pt2 = convert(pt2, null);
+        rect = new Rectangle2D.Double();
+        rect.setFrameFromDiagonal(pt1, pt2);
+
+        return rect;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CoordTrans.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSDatum.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSDatum.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSDatum.java	(revision 10281)
@@ -0,0 +1,139 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts.gt2;
+
+import org.cresques.cts.IDatum;
+
+import org.geotools.cs.CoordinateSystemFactory;
+import org.geotools.cs.GeographicCoordinateSystem;
+import org.geotools.cs.HorizontalDatum;
+
+import org.opengis.referencing.FactoryException;
+
+import java.util.Locale;
+
+
+/**
+ * Datum (y Ellipsoid) de GeoTools2.
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class CSDatum implements IDatum {
+    private static String line1 = "DATUM[\"WGS_1984\"," +
+                                  "SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]," +
+                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]]";
+    private static String line2 = "DATUM[\"European_Datum_1950\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[-84,-107,-120,0,0,0,0],AUTHORITY[\"EPSG\",\"6230\"]]";
+    private static String line3 = "DATUM[\"Nouvelle_Triangulation_Francaise\"," +
+                                  "SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627, AUTHORITY[\"EPSG\",\"7011\"]]," +
+                                  "TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6275\"]]";
+    private static String line4 = "DATUM[\"Datum 73\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY[\"EPSG\",\"4274\"]]";
+    private static String line5 = "DATUM[\"North_American_Datum_1927\"," +
+                                  "SPHEROID[\"Clarke 1866\",6378206.4,294.978698213901,AUTHORITY[\"EPSG\",\"7008\"]]," +
+                                  "TOWGS84[-3,142,183,0,0,0,0],AUTHORITY[\"EPSG\",\"6267\"]]";
+    private static String line6 = "DATUM[\"North_American_Datum_1983\"," +
+                                  "SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," +
+                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]]";
+
+    /*
+     * INSERT INTO epsg_coordinatereferencesystem VALUES (
+     * 4288, 'Loma Quintana', 1313, 'geographic 2D', 6422, 6288,
+     * Null, Null, Null, Null, 'Geodetic survey.',
+     * 'Superseded by La Canoa (code 4247).', '',
+     * 'EPSG', '2004/01/06', '2003.37', 1, 0 );
+     *
+     *  DX (m) = -270.933
+            DY (m) =  115.599
+            DZ (m) = -360.226
+
+            EX (") = -5.266
+            EY (") = -1.238
+              EZ (")  =  2.381
+            FE (ppm) = -5.109
+     */
+    private static String line7 = "DATUM[\"Loma Quintana\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6288\"]]";
+
+    /*
+    # La Canoa
+    <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0
+    no_defs <>
+    # PSAD56
+    <4248> +proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 no_defs <>
+     */
+    private static String line8 = "DATUM[\"La Canoa\"," +
+                                  "SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]]," +
+                                  "TOWGS84[-270.933,115.599,-360.226,-5.266,-1.238,2.381,-5.109],AUTHORITY[\"EPSG\",\"6288\"]]";
+    public final static CSDatum wgs84 = new CSDatum(line1);
+    public final static CSDatum ed50 = new CSDatum(line2);
+    public final static CSDatum ntf = new CSDatum(line3);
+    public final static CSDatum d73 = new CSDatum(line4);
+    public final static CSDatum nad27 = new CSDatum(line5);
+    public final static CSDatum nad83 = new CSDatum(line6);
+    public final static CSDatum lomaQuintana = new CSDatum(line7);
+    public final static CSDatum laCanoa = new CSDatum(line8);
+    private String sGeo1 = "GEOGCS[\"WGS 84\",";
+    private String sGeo2 =
+        ",PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," +
+        "UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," +
+        "AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST]," +
+        "AUTHORITY[\"EPSG\",\"4326\"]]";
+    private HorizontalDatum datum = null;
+
+    public CSDatum(String sDatum) {
+        try {
+            datum = ((GeographicCoordinateSystem) CoordinateSystemFactory.getDefault()
+                                                                         .createFromWKT(sGeo1 +
+                                                                                        sDatum +
+                                                                                        sGeo2)).getHorizontalDatum();
+        } catch (FactoryException e) {
+            // TODO Bloque catch generado automáticamente
+            e.printStackTrace();
+        }
+    }
+
+    public String getName(Locale loc) {
+        return datum.getName().toString();
+    }
+
+    HorizontalDatum getDatum() {
+        return datum;
+    }
+
+    public double getESemiMajorAxis() {
+        return datum.getEllipsoid().getSemiMajorAxis();
+    }
+
+    public double getEIFlattening() {
+        return datum.getEllipsoid().getInverseFlattening();
+    }
+
+    public String toString() {
+        return datum.toString();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/CSDatum.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/gt2.dfPackage
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/gt2.dfPackage	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/gt2.dfPackage	(revision 10281)
@@ -0,0 +1,68 @@
+package id453jodxljqzpfdxljry0t;
+
+/**
+@version 2.0
+@physicalPackage
+@__modelType diagram 
+*/
+class diagram {
+/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CoordTrans:oiref><oihard>
+@__modelType reference 
+*/
+class reference {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CoordSys:oiref><oihard>
+@__modelType reference 
+*/
+class reference4 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSUTM:oiref><oihard>
+@__modelType reference 
+*/
+class reference5 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSDatum:oiref><oihard>
+@__modelType reference 
+*/
+class reference6 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSLambertCC:oiref><oihard>
+@__modelType reference 
+*/
+class reference7 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.gt2.CSGaussPt:oiref><oihard>
+@__modelType reference 
+*/
+class reference8 {
+}}/**
+@__tags
+@shapeType ClassDiagram 
+*/
+class __tags {
+}/**
+@__options 
+*/
+class __options {
+}/**
+@__positions <oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#wgs84:oiref>=560,360,560,530,876,530,876,200,713,200:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#d73:oiref>=649,360,649,434,787,434,787,296,713,296:oigroup>
+<oigroup:<oiref:java#Extends#org.cresques.cts.gt2.CSLambertCC#org.cresques.cts.gt2.CoordSys:oiref>=440,630,440,392:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CoordSys:oiref>=270,10,200,382,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CoordSys#datum:oiref>=470,185,550,185:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#nad27:oiref>=681,360,681,402,755,402,755,328,713,328:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSUTM:oiref>=548,630,110,117,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#ntf:oiref>=617,360,617,466,819,466,819,264,713,264:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSDatum:oiref>=550,10,163,350,1:oigroup>
+<oigroup:<oiref:java#Extends#org.cresques.cts.gt2.CSUTM#org.cresques.cts.gt2.CoordSys:oiref>=603,630,455,392:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSLambertCC:oiref>=426,630,102,101,1:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CSGaussPt:oiref>=230,630,124,110,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSDatum#ed50:oiref>=585,360,585,498,851,498,851,232,713,232:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CSGaussPt#hgd73:oiref>=332,740,332,772,386,772,386,718,354,718:oigroup>
+<oigroup:<oiref:java#Extends#org.cresques.cts.gt2.CSGaussPt#org.cresques.cts.gt2.CoordSys:oiref>=321,630,321,392:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.gt2.CoordTrans:oiref>=10,630,200,318,1:oigroup>
+<oigroup:MemberLink#<oiref:java#Member#org.cresques.cts.gt2.CoordTrans#from:oiref>=110,630,295,392:oigroup> 
+*/
+class __positions {
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/gt2/gt2.dfPackage
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/GeoCalc.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/GeoCalc.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/GeoCalc.java	(revision 10281)
@@ -0,0 +1,463 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.cts;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * Operaciones relacionadas con las proyecciones y sistemas
+ * de coordenadas.
+ * @author Luis W. Sevilla (sevilla_lui@gva.es)
+ */
+public class GeoCalc {
+    IProjection proj;
+
+    /**
+     *
+     * @param proj
+     */
+    public GeoCalc(IProjection proj) {
+        this.proj = proj;
+    }
+
+    /**
+     * Distancia entre dos puntos en la esfera.
+     * Los puntos deben estar en coordenadas geográficas
+     * @param pt1
+     * @param pt2
+     * @return distancia en km.
+     */
+    public double distanceGeo(Point2D pt1, Point2D pt2) {
+        double R2 = Math.pow(proj.getDatum().getESemiMajorAxis(), 2);
+        double dLat = Math.toRadians(pt2.getY() - pt1.getY());
+        double dLong = Math.toRadians(pt2.getX() - pt1.getX());
+
+        double alfa = Math.toRadians(pt1.getY());
+        double alfa2 = Math.toRadians(pt2.getY());
+
+        if (Math.abs(alfa2) < Math.abs(alfa)) {
+            alfa = alfa2;
+        }
+
+        double ds2 = (R2 * dLat * dLat) +
+                     (R2 * Math.cos(alfa) * Math.cos(alfa) * dLong * dLong);
+
+        return Math.sqrt(ds2);
+    }
+
+    /**
+     * Distancia entre dos puntos en el elipsoide.
+     * Los puntos deben estar en coordenadas geográficas
+     * ver http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/
+     * @param lat1
+     * @param lon1
+     * @param lat2
+     * @param lon2
+     * @return
+     */
+    public double distanceEli(Point2D pt1, Point2D pt2) {
+        double lat1 = Math.toRadians(pt1.getY());
+        double lon1 = -Math.toRadians(pt1.getX());
+        double lat2 = Math.toRadians(pt2.getY());
+        double lon2 = -Math.toRadians(pt2.getX());
+
+        double F = (lat1 + lat2) / 2D;
+        double G = (lat1 - lat2) / 2D;
+        double L = (lon1 - lon2) / 2D;
+
+        double sing = Math.sin(G);
+        double cosl = Math.cos(L);
+        double cosf = Math.cos(F);
+        double sinl = Math.sin(L);
+        double sinf = Math.sin(F);
+        double cosg = Math.cos(G);
+
+        double flat = 1D / proj.getDatum().getEIFlattening();
+
+        double S = (sing * sing * cosl * cosl) + (cosf * cosf * sinl * sinl);
+        double C = (cosg * cosg * cosl * cosl) + (sinf * sinf * sinl * sinl);
+        double W = Math.atan2(Math.sqrt(S), Math.sqrt(C));
+        double R = Math.sqrt((S * C)) / W;
+        double H1 = ((3D * R) - 1D) / (2D * C);
+        double H2 = ((3D * R) + 1D) / (2D * S);
+        double D = 2D * W * proj.getDatum().getESemiMajorAxis();
+
+        return (D * ((1D + (flat * H1 * sinf * sinf * cosg * cosg)) -
+               (flat * H2 * cosf * cosf * sing * sing)));
+    }
+
+    /**
+     * Algrothims from Geocentric Datum of Australia Technical Manual
+     *
+     * http://www.anzlic.org.au/icsm/gdatum/chapter4.html
+     *
+     * This page last updated 11 May 1999
+     *
+     * Computations on the Ellipsoid
+     *
+     * There are a number of formulae that are available
+     * to calculate accurate geodetic positions,
+     * azimuths and distances on the ellipsoid.
+     *
+     * Vincenty's formulae (Vincenty, 1975) may be used
+     * for lines ranging from a few cm to nearly 20,000 km,
+     * with millimetre accuracy.
+     * The formulae have been extensively tested
+     * for the Australian region, by comparison with results
+     * from other formulae (Rainsford, 1955 & Sodano, 1965).
+     *
+     * * Inverse problem: azimuth and distance from known
+     *                 latitudes and longitudes
+     * * Direct problem: Latitude and longitude from known
+     *                 position, azimuth and distance.
+     * * Sample data
+     * * Excel spreadsheet
+     *
+     * Vincenty's Inverse formulae
+     * Given: latitude and longitude of two points
+     *                 (phi1, lembda1 and phi2, lembda2),
+     * Calculate: the ellipsoidal distance (s) and
+     * forward and reverse azimuths between the points (alpha12, alpha21).
+     */
+    /**
+     * Devuelve la distancia entre dos puntos usando las formulas
+     * de vincenty.
+     * @param pt1
+     * @param pt2
+     * @return
+     */
+    public double distanceVincenty(Point2D pt1, Point2D pt2) {
+        return distanceAzimutVincenty(pt1, pt2).dist;
+    }
+
+    /**
+     * Returns the distance between two geographic points on the ellipsoid
+     *        and the forward and reverse azimuths between these points.
+     *       lats, longs and azimuths are in decimal degrees, distance in metres
+     *        Returns ( s, alpha12,  alpha21 ) as a tuple
+     * @param pt1
+     * @param pt2
+     * @return
+     */
+    public GeoData distanceAzimutVincenty(Point2D pt1, Point2D pt2) {
+        GeoData gd = new GeoData(0, 0);
+        double f = 1D / proj.getDatum().getEIFlattening();
+        double a = proj.getDatum().getESemiMajorAxis();
+        double phi1 = pt1.getY();
+        double lembda1 = pt1.getX();
+        double phi2 = pt2.getY();
+        double lembda2 = pt2.getX();
+
+        if ((Math.abs(phi2 - phi1) < 1e-8) &&
+                (Math.abs(lembda2 - lembda1) < 1e-8)) {
+            return gd;
+        }
+
+        double piD4 = Math.atan(1.0);
+        double two_pi = piD4 * 8.0;
+
+        phi1 = (phi1 * piD4) / 45.0;
+        lembda1 = (lembda1 * piD4) / 45.0; // unfortunately lambda is a key word!
+        phi2 = (phi2 * piD4) / 45.0;
+        lembda2 = (lembda2 * piD4) / 45.0;
+
+        double b = a * (1.0 - f);
+
+        double TanU1 = (1 - f) * Math.tan(phi1);
+        double TanU2 = (1 - f) * Math.tan(phi2);
+
+        double U1 = Math.atan(TanU1);
+        double U2 = Math.atan(TanU2);
+
+        double lembda = lembda2 - lembda1;
+        double last_lembda = -4000000.0; // an impossibe value
+        double omega = lembda;
+
+        // Iterate the following equations, 
+        //  until there is no significant change in lembda 
+        double Sin_sigma = 0;
+
+        // Iterate the following equations, 
+        //  until there is no significant change in lembda 
+        double Cos_sigma = 0;
+        double Cos2sigma_m = 0;
+        double alpha = 0;
+        double sigma = 0;
+        double sqr_sin_sigma = 0;
+
+        while ((last_lembda < -3000000.0) ||
+                   ((lembda != 0) &&
+                   (Math.abs((last_lembda - lembda) / lembda) > 1.0e-9))) {
+            sqr_sin_sigma = Math.pow(Math.cos(U2) * Math.sin(lembda), 2) +
+                            Math.pow(((Math.cos(U1) * Math.sin(U2)) -
+                                     (Math.sin(U1) * Math.cos(U2) * Math.cos(lembda))),
+                                     2);
+
+            Sin_sigma = Math.sqrt(sqr_sin_sigma);
+
+            Cos_sigma = (Math.sin(U1) * Math.sin(U2)) +
+                        (Math.cos(U1) * Math.cos(U2) * Math.cos(lembda));
+
+            sigma = Math.atan2(Sin_sigma, Cos_sigma);
+
+            double Sin_alpha = (Math.cos(U1) * Math.cos(U2) * Math.sin(lembda)) / Math.sin(sigma);
+            alpha = Math.asin(Sin_alpha);
+
+            Cos2sigma_m = Math.cos(sigma) -
+                          ((2 * Math.sin(U1) * Math.sin(U2)) / Math.pow(Math.cos(alpha),
+                                                                        2));
+
+            double C = (f / 16) * Math.pow(Math.cos(alpha), 2) * (4 +
+                       (f * (4 - (3 * Math.pow(Math.cos(alpha), 2)))));
+
+            last_lembda = lembda;
+
+            lembda = omega +
+                     ((1 - C) * f * Math.sin(alpha) * (sigma +
+                     (C * Math.sin(sigma) * (Cos2sigma_m +
+                     (C * Math.cos(sigma) * (-1 +
+                     (2 * Math.pow(Cos2sigma_m, 2))))))));
+        }
+
+        double u2 = (Math.pow(Math.cos(alpha), 2) * ((a * a) - (b * b))) / (b * b);
+
+        double A = 1 +
+                   ((u2 / 16384) * (4096 +
+                   (u2 * (-768 + (u2 * (320 - (175 * u2)))))));
+
+        double B = (u2 / 1024) * (256 +
+                   (u2 * (-128 + (u2 * (74 - (47 * u2))))));
+
+        double delta_sigma = B * Sin_sigma * (Cos2sigma_m +
+                             ((B / 4) * ((Cos_sigma * (-1 +
+                             (2 * Math.pow(Cos2sigma_m, 2)))) -
+                             ((B / 6) * Cos2sigma_m * (-3 +
+                             (4 * sqr_sin_sigma)) * (-3 +
+                             (4 * Math.pow(Cos2sigma_m, 2)))))));
+
+        double s = b * A * (sigma - delta_sigma);
+
+        double alpha12 = Math.atan2((Math.cos(U2) * Math.sin(lembda)),
+                                    ((Math.cos(U1) * Math.sin(U2)) -
+                                    (Math.sin(U1) * Math.cos(U2) * Math.cos(lembda))));
+
+        double alpha21 = Math.atan2((Math.cos(U1) * Math.sin(lembda)),
+                                    ((-Math.sin(U1) * Math.cos(U2)) +
+                                    (Math.cos(U1) * Math.sin(U2) * Math.cos(lembda))));
+
+        if (alpha12 < 0.0) {
+            alpha12 = alpha12 + two_pi;
+        }
+
+        if (alpha12 > two_pi) {
+            alpha12 = alpha12 - two_pi;
+        }
+
+        alpha21 = alpha21 + (two_pi / 2.0);
+
+        if (alpha21 < 0.0) {
+            alpha21 = alpha21 + two_pi;
+        }
+
+        if (alpha21 > two_pi) {
+            alpha21 = alpha21 - two_pi;
+        }
+
+        alpha12 = (alpha12 * 45.0) / piD4;
+        alpha21 = (alpha21 * 45.0) / piD4;
+
+        return new GeoData(0, 0, s, alpha12, alpha21);
+    }
+
+    /**
+     * Vincenty's Direct formulae
+     * Given: latitude and longitude of a point (phi1, lembda1) and
+     * the geodetic azimuth (alpha12)
+     * and ellipsoidal distance in metres (s) to a second point,
+     *
+     * Calculate: the latitude and longitude of the second point (phi2, lembda2)
+     * and the reverse azimuth (alpha21).
+     */
+    /**
+     * Returns the lat and long of projected point and reverse azimuth
+     *        given a reference point and a distance and azimuth to project.
+     *  lats, longs and azimuths are passed in decimal degrees.
+     * Returns ( phi2,  lambda2,  alpha21 ) as a tuple
+     * @param pt
+     * @param azimut
+     * @param dist
+     * @return
+     */
+    public GeoData getPointVincenty(Point2D pt, double azimut, double dist) {
+        GeoData ret = new GeoData(0, 0);
+        double f = 1D / proj.getDatum().getEIFlattening();
+        double a = proj.getDatum().getESemiMajorAxis();
+        double phi1 = pt.getY();
+        double lembda1 = pt.getX();
+        double alpha12 = azimut;
+        double s = dist;
+
+        double piD4 = Math.atan(1.0);
+        double two_pi = piD4 * 8.0;
+
+        phi1 = (phi1 * piD4) / 45.0;
+        lembda1 = (lembda1 * piD4) / 45.0;
+        alpha12 = (alpha12 * piD4) / 45.0;
+
+        if (alpha12 < 0.0) {
+            alpha12 = alpha12 + two_pi;
+        }
+
+        if (alpha12 > two_pi) {
+            alpha12 = alpha12 - two_pi;
+        }
+
+        double b = a * (1.0 - f);
+
+        double TanU1 = (1 - f) * Math.tan(phi1);
+        double U1 = Math.atan(TanU1);
+        double sigma1 = Math.atan2(TanU1, Math.cos(alpha12));
+        double Sinalpha = Math.cos(U1) * Math.sin(alpha12);
+        double cosalpha_sq = 1.0 - (Sinalpha * Sinalpha);
+
+        double u2 = (cosalpha_sq * ((a * a) - (b * b))) / (b * b);
+        double A = 1.0 +
+                   ((u2 / 16384) * (4096 +
+                   (u2 * (-768 + (u2 * (320 - (175 * u2)))))));
+        double B = (u2 / 1024) * (256 +
+                   (u2 * (-128 + (u2 * (74 - (47 * u2))))));
+
+        // Starting with the approximation
+        double sigma = (s / (b * A));
+
+        double last_sigma = (2.0 * sigma) + 2.0; // something impossible
+
+        // Iterate the following three equations 
+        //  until there is no significant change in sigma 
+        // two_sigma_m , delta_sigma
+        double two_sigma_m = 0;
+
+        while (Math.abs((last_sigma - sigma) / sigma) > 1.0e-9) {
+            two_sigma_m = (2 * sigma1) + sigma;
+
+            double delta_sigma = B * Math.sin(sigma) * (Math.cos(two_sigma_m) +
+                                 ((B / 4) * (Math.cos(sigma) * ((-1 +
+                                 (2 * Math.pow(Math.cos(two_sigma_m), 2))) -
+                                 ((B / 6) * Math.cos(two_sigma_m) * (-3 +
+                                 (4 * Math.pow(Math.sin(sigma), 2))) * (-3 +
+                                 (4 * Math.pow(Math.cos(two_sigma_m), 2))))))));
+
+            last_sigma = sigma;
+            sigma = (s / (b * A)) + delta_sigma;
+        }
+
+        double phi2 = Math.atan2(((Math.sin(U1) * Math.cos(sigma)) +
+                                 (Math.cos(U1) * Math.sin(sigma) * Math.cos(alpha12))),
+                                 ((1 - f) * Math.sqrt(Math.pow(Sinalpha, 2) +
+                                                      Math.pow((Math.sin(U1) * Math.sin(sigma)) -
+                                                               (Math.cos(U1) * Math.cos(sigma) * Math.cos(alpha12)),
+                                                               2))));
+
+        double lembda = Math.atan2((Math.sin(sigma) * Math.sin(alpha12)),
+                                   ((Math.cos(U1) * Math.cos(sigma)) -
+                                   (Math.sin(U1) * Math.sin(sigma) * Math.cos(alpha12))));
+
+        double C = (f / 16) * cosalpha_sq * (4 + (f * (4 - (3 * cosalpha_sq))));
+
+        double omega = lembda -
+                       ((1 - C) * f * Sinalpha * (sigma +
+                       (C * Math.sin(sigma) * (Math.cos(two_sigma_m) +
+                       (C * Math.cos(sigma) * (-1 +
+                       (2 * Math.pow(Math.cos(two_sigma_m), 2))))))));
+
+        double lembda2 = lembda1 + omega;
+
+        double alpha21 = Math.atan2(Sinalpha,
+                                    ((-Math.sin(U1) * Math.sin(sigma)) +
+                                    (Math.cos(U1) * Math.cos(sigma) * Math.cos(alpha12))));
+
+        alpha21 = alpha21 + (two_pi / 2.0);
+
+        if (alpha21 < 0.0) {
+            alpha21 = alpha21 + two_pi;
+        }
+
+        if (alpha21 > two_pi) {
+            alpha21 = alpha21 - two_pi;
+        }
+
+        phi2 = (phi2 * 45.0) / piD4;
+        lembda2 = (lembda2 * 45.0) / piD4;
+        alpha21 = (alpha21 * 45.0) / piD4;
+
+        ret.pt = new Point2D.Double(lembda2, phi2);
+        ret.azimut = alpha21;
+
+        return ret;
+    }
+
+    /**
+     * Superficie de un triangulo (esférico). Los puntos deben de estar
+     * en coordenadas geográficas.
+     * @param pt1
+     * @param pt2
+     * @param pt3
+     * @return
+     */
+    public double surfaceSphere(Point2D pt1, Point2D pt2, Point2D pt3) {
+        double sup = -1;
+        double A = distanceGeo(pt1, pt2);
+        double B = distanceGeo(pt2, pt3);
+        double C = distanceGeo(pt3, pt1);
+        sup = (((A + B + C) - Math.toRadians(180D)) * Math.PI * proj.getDatum()
+                                                                    .getESemiMajorAxis()) / Math.toRadians(180D);
+
+        return sup;
+    }
+
+    /*
+     * Fórmulas de Vincenty's.
+     * (pasadas de http://wegener.mechanik.tu-darmstadt.de/GMT-Help/Archiv/att-8710/Geodetic_py
+     * http://www.icsm.gov.au/icsm/gda/gdatm/index.html
+     */
+    class GeoData {
+        Point2D pt;
+        double azimut;
+        double revAzimut;
+        double dist;
+
+        public GeoData(double x, double y) {
+            pt = new Point2D.Double(x, y);
+            azimut = revAzimut = dist = 0;
+        }
+
+        public GeoData(double x, double y, double dist, double azi, double rAzi) {
+            pt = new Point2D.Double(x, y);
+            azimut = azi;
+            revAzimut = rAzi;
+            this.dist = dist;
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/GeoCalc.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/cts.dfPackage
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/cts.dfPackage	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/cts.dfPackage	(revision 10281)
@@ -0,0 +1,52 @@
+package id3efajdxljqzpfdxljrqze;
+
+/**
+@version 2.0
+@physicalPackage
+@__modelType diagram 
+*/
+class diagram {
+/**
+@__ref <oiref:java#Class#org.cresques.cts.IProjection:oiref><oihard>
+@__modelType reference 
+*/
+class reference {
+}/**
+@__ref <oiref:design#Class#id453jodxljqzpfdxljry0t.diagram:oiref><oihard>
+@__modelType reference
+@__fqn <oiref:#Package#cms.org.cresques.cts.gt2:oiref> 
+*/
+class reference8 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.ProjectionPool:oiref><oihard>
+@__modelType reference 
+*/
+class reference1 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.ICoordTrans:oiref><oihard>
+@__modelType reference 
+*/
+class reference2 {
+}/**
+@__ref <oiref:java#Class#org.cresques.cts.IDatum:oiref><oihard>
+@__modelType reference 
+*/
+class reference3 {
+}}/**
+@__tags
+@shapeType ClassDiagram 
+*/
+class __tags {
+}/**
+@__options 
+*/
+class __options {
+}/**
+@__positions <oigroup:<oiref:java#Class#org.cresques.cts.ICoordTrans:oiref>=10,270,148,165,1:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.ProjectionPool:oiref>=176,10,138,126,1:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.IProjection:oiref>=10,10,146,229,1:oigroup>
+<oigroup:<oiref:java#Class#org.cresques.cts.IDatum:oiref>=178,170,83,98,1:oigroup>
+<oigroup:<oiref:design#Class#id453jodxljqzpfdxljry0t.diagram:oiref>=334,10,102,184,1:oigroup> 
+*/
+class __positions {
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/cts.dfPackage
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Clases relacionadas con el manejo de proyecciones.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/cts/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Pixel: Clases base relacionadas con geometria.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmPoint.java	(revision 10281)
@@ -0,0 +1,92 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import java.awt.geom.Point2D;
+
+
+public class UtmPoint extends ProjPoint {
+    public UtmPoint() {
+        proj = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        setLocation(0.0, 0.0);
+    }
+
+    public UtmPoint(double x, double y) {
+        proj = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        setLocation(x, y);
+    }
+
+    public UtmPoint(Point2D pt) {
+        proj = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public UtmPoint(UtmZone zone) {
+        setLocation(0.0, 0.0);
+        proj = zone;
+    }
+
+    public UtmPoint(UtmZone zone, double x, double y) {
+        setLocation(x, y);
+        proj = zone;
+    }
+
+    public UtmPoint(UtmZone zone, Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        proj = zone;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public double getX() {
+        return X;
+    }
+
+    public double getY() {
+        return Y;
+    }
+
+    public void setLocation(double x, double y) {
+        X = x;
+        Y = y;
+    }
+
+    public String toString() {
+        return "(" + ((UtmZone) proj).Zone + ": " + getX() + "," + getY() +
+               ")";
+    }
+
+    public Point2D toGeo() {
+        return ((Projection) proj).toGeo(this);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmPoint.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Graticule.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Graticule.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Graticule.java	(revision 10281)
@@ -0,0 +1,126 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+class Text2D extends Point2D {
+    private double x;
+    private double y;
+    private String txt;
+
+    public Text2D(String txt, Point2D pt) {
+        this.txt = txt;
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public double getX() {
+        return x;
+    }
+
+    public double getY() {
+        return y;
+    }
+
+    public void setLocation(double x, double y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        g.drawString(txt, (int) x, (int) y);
+    }
+}
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ *
+ * TODO Añadir soporte para hasta 3 niveles de grid (3 colores y 3 GeneralPath
+ */
+public class Graticule {
+    static final Color color = new Color(128, 128, 128, 192);
+    Color pc = null;
+    Color tColor = null;
+    GeneralPath gp = null;
+    GeneralPath gp1 = null;
+    Vector vText = null;
+    Projection proj;
+
+    public Graticule(Projection proj) {
+        this.proj = proj;
+        gp = new GeneralPath();
+        gp1 = new GeneralPath();
+        vText = new Vector();
+        setColor(color);
+    }
+
+    public Color getColor() {
+        return pc;
+    }
+
+    public void setColor(Color color) {
+        pc = color;
+        tColor = new Color(pc.getRed(), pc.getGreen(), pc.getBlue(), 255);
+    }
+
+    public void addLine(Point2D pt1, Point2D pt2) {
+        gp.moveTo((float) pt1.getX(), (float) pt1.getY());
+        gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+    }
+
+    public void addLine(Point2D pt1, Point2D pt2, int num) {
+        if (num == 0) {
+            gp.moveTo((float) pt1.getX(), (float) pt1.getY());
+            gp.lineTo((float) pt2.getX(), (float) pt2.getY());
+        } else if (num == 1) {
+            gp1.moveTo((float) pt1.getX(), (float) pt1.getY());
+            gp1.lineTo((float) pt2.getX(), (float) pt2.getY());
+        }
+    }
+
+    public void addText(String txt, Point2D pt) {
+        vText.add(new Text2D(txt, pt));
+    }
+
+    public void draw(Graphics2D g, ViewPortData vp) {
+        g.setColor(pc);
+        g.draw(gp);
+
+        g.setColor(tColor);
+        g.draw(gp1);
+
+        Iterator iter = vText.iterator();
+
+        while (iter.hasNext())
+            ((Text2D) iter.next()).draw(g, vp);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Graticule.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projected.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projected.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projected.java	(revision 10281)
@@ -0,0 +1,38 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+
+/**
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>*
+ */
+public interface Projected {
+    public IProjection getProjection();
+
+    public void reProject(ICoordTrans ct);
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projected.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Point3D.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Point3D.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Point3D.java	(revision 10281)
@@ -0,0 +1,84 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Point3D extends Point2D {
+    public double X;
+    public double Y;
+    public double Z;
+
+    public Point3D() {
+        setLocation(0.0, 0.0);
+    }
+
+    public Point3D(double x, double y) {
+        setLocation(x, y);
+    }
+
+    public Point3D(double x, double y, double z) {
+        setLocation(x, y, z);
+    }
+
+    public Point3D(Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public Point3D(Point3D pt) {
+        setLocation(pt.getX(), pt.getY(), pt.getZ());
+    }
+
+    public double getX() {
+        return X;
+    }
+
+    public double getY() {
+        return Y;
+    }
+
+    public double getZ() {
+        return Z;
+    }
+
+    public void setLocation(double x, double y) {
+        X = x;
+        Y = y;
+        Z = 0D;
+    }
+
+    public void setLocation(double x, double y, double z) {
+        X = x;
+        Y = y;
+        Z = z;
+    }
+
+    public String toString() {
+        return "(" + getX() + "," + getY() + ")";
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Point3D.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/PointFactory.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/PointFactory.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/PointFactory.java	(revision 10281)
@@ -0,0 +1,30 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+public class PointFactory {
+    public static UtmPoint newUtmPoint(UtmZone zona, double x, double y) {
+        return new UtmPoint(zona, x, y);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/PointFactory.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Gauss.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Gauss.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Gauss.java	(revision 10281)
@@ -0,0 +1,129 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Proyeccion de Gauss (Mapa de Portugal)
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class Gauss extends Projection {
+    static String name = "Gauss";
+    static String abrev = "Gau";
+
+    public Gauss(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    public static Gauss getProjection(Ellipsoid eli) {
+        return new Gauss(eli);
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("Ga") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D gaPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo(gaPt, gPt);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(Point2D gaPt, GeoPoint gPt) {
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D gaPt) {
+        return gaPt;
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        grid = new Graticule(this);
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        // TODO Auto-generated method stub
+        return -1D;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Gauss.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Geodetic.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Geodetic.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Geodetic.java	(revision 10281)
@@ -0,0 +1,294 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.Extent;
+
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+
+import java.util.TreeMap;
+
+
+public class Geodetic extends Projection {
+    private static TreeMap projList = new TreeMap();
+    static String name = "Geodesica";
+    static String abrev = "Geo";
+    public static Geodetic hayford = new Geodetic(Ellipsoid.hayford);
+
+    public Geodetic() {
+        super();
+        grid = new Graticule(this);
+    }
+
+    public Geodetic(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("GEO") < 0) {
+            return null;
+        }
+
+        if (name.indexOf("WGS84") >= 0) {
+            return getProjection(Ellipsoid.wgs84);
+        }
+
+        if (name.indexOf("ED50") >= 0) {
+            return getProjection(Ellipsoid.wgs84);
+        }
+
+        return null;
+    }
+
+    public static Geodetic getProjection(Ellipsoid eli) {
+        Geodetic ret = null;
+        String key = eli.toString();
+
+        if (Geodetic.projList.containsKey(key)) {
+            ret = (Geodetic) Geodetic.projList.get(key);
+        } else {
+            if (eli == Ellipsoid.hayford) {
+                ret = hayford;
+            } else {
+                ret = new Geodetic(eli);
+            }
+
+            Geodetic.projList.put(key, ret);
+        }
+
+        return ret;
+    }
+
+    public Point2D createPoint(double x, double y) {
+        return new GeoPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param gPt Punto para pasar a GeoPoint
+     * @return
+     */
+    public Point2D toGeo(Point2D gPt) {
+        return (GeoPoint) gPt;
+    }
+
+    public Point2D fromGeo(Point2D gPt, Point2D pPt) {
+        return gPt;
+    }
+
+    // Calcula el step en función del zoom
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        // calculo del step en función del zoom
+        Point2D pt1 = extent.getMin();
+
+        double step = 1.0;
+        double x = (int) pt1.getX();
+        double dist = 0.0;
+        GeoPoint gp1;
+        GeoPoint gp2;
+        gp1 = (GeoPoint) createPoint(x, (int) pt1.getY());
+        mat.transform(gp1, gp1);
+        gp2 = (GeoPoint) createPoint(gp1.getX() + 100, gp1.getY() - 100);
+
+        try {
+            mat.inverseTransform(gp2, gp2);
+        } catch (NoninvertibleTransformException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        dist = (gp2.getX() - x);
+        System.err.println("distX = " + dist);
+
+        if (dist > 30.0) {
+            step = 30.0;
+        } else if (dist > 15.0) {
+            step = 15.0;
+        } else if (dist > 10.0) {
+            step = 10.0;
+        } else if (dist > 5.0) {
+            step = 5.0;
+        } else if (dist > 3.0) {
+            step = 3.0;
+        } else if (dist > 2.0) {
+            step = 2.0;
+        } else if (dist > 1.0) {
+            step = 1.0;
+        } else if (dist > .5) {
+            step = .5;
+        } else if (dist > .25) {
+            step = .25;
+        } else if (dist > (1.0 / 60 * 5.0)) {
+            step = 1.0 / 60 * 5.0;
+        } else {
+            step = 1.0 / 60 * 2.0;
+        }
+
+        //step = 1.0;
+        generateGrid(g, extent, mat, step);
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat,
+                              double step) {
+        grid = new Graticule(this);
+
+        GeoPoint gp1;
+        GeoPoint gp2;
+        Point2D.Double ptx = new Point2D.Double(0.0, 0.0);
+
+        Point2D pt1 = extent.getMin();
+        Point2D pt2 = extent.getMax();
+        System.err.println(name + ": ViewPort Extent = (" + pt1 + "," + pt2 +
+                           ")");
+
+        // Calculos para el texto
+        FontMetrics fm = g.getFontMetrics();
+        int fmWidth = 0;
+        int fmHeight = fm.getAscent();
+        String tit = "";
+        String fmt = "%Gº%N";
+
+        if (step < 1.0) {
+            fmt = "%Gº%M'%N";
+        }
+
+        // Lineas Verticales
+        double y1 = pt1.getY();
+
+        // Lineas Verticales
+        double y2 = pt2.getY();
+        double xIni = (int) pt1.getX() - 1;
+        xIni -= (xIni % step);
+
+        double xFin = ((int) pt2.getX()) + 1;
+
+        if (y1 < -90.0) {
+            y1 = -90.0;
+        }
+
+        if (y2 > 90.0) {
+            y2 = 90.0;
+        }
+
+        if (xIni < -180.0) {
+            xIni = -180.0;
+        }
+
+        if (xFin > 180.0) {
+            xFin = 180.0;
+        }
+
+        for (double x = xIni; x <= xFin; x += step) {
+            gp1 = (GeoPoint) createPoint(x, y1);
+            gp2 = (GeoPoint) createPoint(x, y2);
+            mat.transform(gp1, gp1);
+            mat.transform(gp2, gp2);
+            grid.addLine(gp1, gp2);
+            tit = coordToString(x, fmt, false);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(gp2.getX() + 3, gp2.getY() + fmHeight);
+            grid.addText(tit, ptx);
+        }
+
+        // Lineas Horizontales
+        double x1 = pt1.getX();
+
+        // Lineas Horizontales
+        double x2 = pt2.getX();
+        double yIni = (int) pt1.getY() - 1;
+        yIni -= (yIni % step);
+
+        double yFin = ((int) pt2.getY()) + 1;
+
+        if (x1 < -180.0) {
+            x1 = -180.0;
+        }
+
+        if (x2 > 180.0) {
+            x2 = 180.0;
+        }
+
+        if (yIni < -90.0) {
+            yIni = -90.0;
+        }
+
+        if (yFin > 90.0) {
+            yFin = 90.0;
+        }
+
+        for (double y = yIni; y <= yFin; y += step) {
+            gp1 = (GeoPoint) createPoint(x1, y);
+            gp2 = (GeoPoint) createPoint(x2, y);
+            mat.transform(gp1, gp1);
+            mat.transform(gp2, gp2);
+            grid.addLine(gp1, gp2);
+            tit = coordToString(y, fmt, true);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(gp1.getX() + 3, gp1.getY() - 2);
+            grid.addText(tit, ptx);
+        }
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        double scale = ((maxX - minX) * // grados
+                       
+        // 1852.0 metros x minuto de meridiano
+        (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / // px / metro
+                       width; // pixels
+
+        return scale;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Geodetic.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ProjPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ProjPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ProjPoint.java	(revision 10281)
@@ -0,0 +1,96 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import java.awt.geom.Point2D;
+
+
+/**
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>*
+ */
+public class ProjPoint extends Point2D implements Projected {
+    IProjection proj = Mercator.getProjection(Ellipsoid.ed50);
+    public double X;
+    public double Y;
+
+    public ProjPoint() {
+        setLocation(0.0, 0.0);
+    }
+
+    public ProjPoint(Projection proj) {
+        setLocation(0.0, 0.0);
+        this.proj = proj;
+    }
+
+    public ProjPoint(double x, double y) {
+        setLocation(x, y);
+    }
+
+    public ProjPoint(Projection proj, double x, double y) {
+        setLocation(x, y);
+        this.proj = proj;
+    }
+
+    public ProjPoint(Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+    }
+
+    public ProjPoint(Projection proj, Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        this.proj = proj;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public double getX() {
+        return X;
+    }
+
+    public double getY() {
+        return Y;
+    }
+
+    public void setLocation(double x, double y) {
+        X = x;
+        Y = y;
+    }
+
+    public String toString() {
+        return "(" + proj + ": " + getX() + "," + getY() + ")";
+    }
+
+    public Point2D toGeo() {
+        return ((Projection) proj).toGeo(this);
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ProjPoint.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/GeoPoint.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/GeoPoint.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/GeoPoint.java	(revision 10281)
@@ -0,0 +1,121 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import geojava.Mutil;
+import geojava.SexaAngle;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import java.awt.geom.Point2D;
+
+
+public class GeoPoint extends Point2D implements Projected {
+    public static int decimales = 4;
+    IProjection proj = null;
+    public SexaAngle Longitude;
+    public SexaAngle Latitude;
+    public double h;
+
+    public GeoPoint(SexaAngle sexaangle, SexaAngle sexaangle1, double d) {
+        Longitude = sexaangle;
+        Latitude = sexaangle1;
+        h = d;
+    }
+
+    public GeoPoint() {
+        Longitude = new SexaAngle();
+        Latitude = new SexaAngle();
+        h = 0.0D;
+    }
+
+    public GeoPoint(double x, double y) {
+        setLocation(x, y);
+        h = 0.0D;
+    }
+
+    public GeoPoint(Projection proj, double x, double y) {
+        setLocation(x, y);
+        h = 0.0D;
+        ;
+        this.proj = proj;
+    }
+
+    public GeoPoint(Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        h = 0.0D;
+    }
+
+    public GeoPoint(Projection proj, Point2D pt) {
+        setLocation(pt.getX(), pt.getY());
+        h = 0.0D;
+        ;
+        this.proj = proj;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public double getX() {
+        return Longitude.ToDecimal();
+    }
+
+    public double getY() {
+        return Latitude.ToDecimal();
+    }
+
+    public void setLocation(double x, double y) {
+        Longitude = SexaAngle.fromDecimal(x);
+        Latitude = SexaAngle.fromDecimal(y);
+    }
+
+    public String toString() {
+        String str = "";
+        String s = String.valueOf(Longitude.Deg);
+        String s1 = String.valueOf(Longitude.Min);
+        String s2 = String.valueOf(Mutil.double2String(Longitude.Sec, decimales));
+        SexaAngle sexaangle = new SexaAngle(s, s1, s2);
+        sexaangle.Normalize();
+        str += (String.valueOf(sexaangle.Deg) + "º");
+        str += (String.valueOf(sexaangle.Min) + "'");
+        str += (Mutil.double2String(sexaangle.Sec, decimales) + "\"");
+        str += " ";
+        s = String.valueOf(Latitude.Deg);
+        s1 = String.valueOf(Latitude.Min);
+        s2 = String.valueOf(Mutil.double2String(Latitude.Sec, decimales));
+        sexaangle = new SexaAngle(s, s1, s2);
+        sexaangle.Normalize();
+        str += (String.valueOf(sexaangle.Deg) + "º");
+        str += (String.valueOf(sexaangle.Min) + "'");
+        str += (Mutil.double2String(sexaangle.Sec, decimales) + "\"");
+
+        return str;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/GeoPoint.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Ellipsoid.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Ellipsoid.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Ellipsoid.java	(revision 10281)
@@ -0,0 +1,129 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.IDatum;
+
+
+public class Ellipsoid implements IDatum {
+    //'WGS72':	(6378135.0, 298.26, 1972),
+    public static final Ellipsoid wgs72 = new Ellipsoid("WGS72", 6378135.0,
+                                                        298.26);
+
+    //'WGS84':	(6378137.0, 298.257223563, 1984),
+    public static final Ellipsoid wgs84 = new Ellipsoid("WGS84", 6378137.0,
+                                                        298.257223563);
+
+    //'GRS80':	(6378137.0, 298.257222101, 1980), // , 6356752.314
+    public static final Ellipsoid grs80 = new Ellipsoid("GRS80", 6378137.0,
+                                                        298.257222101);
+
+    //'Hayford':	(6378388.0, 297.0, 1909),
+    public static final Ellipsoid hayford = new Ellipsoid("Hayford", 6378388.0,
+                                                          297.0);
+
+    //'Struve':	(6378298.0, 299.73, 1860),
+    public static final Ellipsoid struve = new Ellipsoid("Struve", 6378298.0,
+                                                         299.73);
+
+    // ed50 ... ¿hayford?
+    public static final Ellipsoid ed50 = new Ellipsoid("ED50", 6378388.0, 297.0);
+
+    // Clarcke 1866	a = 6378206.4;	f = 294.9786982;
+    public static final Ellipsoid clarke66 = new Ellipsoid("CLARKE 1866",
+                                                           6378206.4,
+                                                           294.9786982);
+    private String pName = null;
+    private double pMajor = 0.0;
+    private double pFlat = 0.0;
+    public double a;
+    public double b;
+    public double f;
+    public double e;
+    public double e2;
+    public double ep;
+    public double ep2;
+
+    public Ellipsoid(String name, double major, double flat) {
+        pName = name;
+        pMajor = major;
+        pFlat = flat;
+        a = pMajor;
+        f = pFlat;
+        ainvto();
+    }
+
+    public String getName() {
+        return pName;
+    }
+
+    private void ainvto() {
+        b = (a * (pFlat - 1.0D)) / pFlat;
+        e2 = ((2D * pFlat) - 1.0D) / (pFlat * pFlat);
+        e = Math.sqrt(e2);
+        ep2 = e2 / (1.0D - e2);
+        ep = Math.sqrt(ep2);
+    }
+
+    private void abto() {
+        if (Math.abs(a - b) < 9.9999999999999995E-021D) {
+            pFlat = 0.0D;
+            e2 = 0.0D;
+        } else {
+            pFlat = a / (a - b);
+            e2 = ((2D * pFlat) - 1.0D) / (pFlat * pFlat);
+        }
+
+        e = Math.sqrt(e2);
+        ep2 = e2 / (1.0D - e2);
+        ep = Math.sqrt(ep2);
+    }
+
+    public double[] getParam() {
+        double[] elipar = new double[8];
+        elipar[1] = pMajor;
+        elipar[2] = pFlat;
+        elipar[3] = b;
+        elipar[4] = e;
+        elipar[5] = e2;
+        elipar[6] = ep;
+        elipar[7] = ep2;
+
+        return elipar;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IDatum#getSemiMajorAxis()
+     */
+    public double getESemiMajorAxis() {
+        return pMajor;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IDatum#getEIFlattening()
+     */
+    public double getEIFlattening() {
+        return pFlat;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Ellipsoid.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Orthographic.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Orthographic.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Orthographic.java	(revision 10281)
@@ -0,0 +1,244 @@
+/*
+ * OrthographicMapProjection.java
+ *
+ * Copyright (c) 2002, 2003, Raben Systems, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *    Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ *    Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ *    Neither the name of Raben Systems, Inc. nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on June 7, 2002, 4:31 PM
+*/
+package org.cresques.geo;
+
+import java.awt.geom.GeneralPath;
+
+//package com.raben.projection.map;
+import java.awt.geom.Point2D;
+
+
+/***
+ * Orthographic Map projection computation
+ * @author  Vern Raben
+ * @version $Revision$ $Date$
+ * Copyright (c) Raben Systems, Inc., 2002
+ * All rights reserved
+ */
+public final class Orthographic { //extends AbstractMapProjection { 
+
+    /*** Creates new OrthographicMapProjection */
+    public Orthographic() {
+    }
+
+    /***
+     * Get Screen location for specified coordinate in radians
+     * @param coordinate Point2D Longitude and latitude of coordinate in radians
+     * @return Point2D Screen location of the coordinate
+     */
+    public Point2D getLocationForCoordinate(Point2D coordinate) {
+        Point2D.Double loc = new Point2D.Double(Double.NaN, Double.NaN);
+
+        /*                Point2D centerPoint = getCenterPoint();
+                        Point2D centerCoordinate = getCenterCoordinate();
+                        double radius = getRadius();
+                        double cosLatCenter = getCosLatCenter();
+                        double sinLatCenter = getSinLatCenter();
+
+                        if ((!Double.isNaN(coordinate.getX()))
+                                && (!Double.isNaN(coordinate.getY()))) {
+                                double latitude = coordinate.getY();
+                                double longitude = coordinate.getX();
+
+                                double sinLat = Math.sin(normalizeLatitude(latitude));
+                                double cosLat = Math.cos(latitude);
+                                double lonDiff = normalizeLongitude(longitude
+                                        - centerCoordinate.getX());
+                                double cosLonDiff = Math.cos(lonDiff);
+                                double cosC = (sinLatCenter * sinLat)
+                                        + (cosLatCenter * cosLat * cosLonDiff);
+
+                                if (cosC >= 0.0) {
+                                        double sinLonDiff = Math.sin(lonDiff);
+                                        double x = (radius * cosLat * sinLonDiff) + centerPoint.getX();
+                                        double y = (radius * ((cosLatCenter * sinLat)
+                                                - (sinLatCenter * cosLat * cosLonDiff)))
+                                                + centerPoint.getY();
+                                        loc.setLocation(x, y);
+                                }
+                        }
+        */
+        return loc;
+    }
+
+    /***
+     * Get coordinate for a given point on the screen
+     * @param loc Point2D Screen location of the point
+     * @return Point2D Coordinate of the point in radians
+     */
+    public Point2D getCoordinateForLocation(Point2D loc) {
+        Point2D.Double coordinate = new Point2D.Double(Double.NaN, Double.NaN);
+
+        /*                Point2D centerPoint = getCenterPoint();
+                        Point2D centerCoordinate = getCenterCoordinate();
+                        double sinLatCenter = getSinLatCenter();
+                        double cosLatCenter = getCosLatCenter();
+                        double radius = getRadius();
+
+                        if ((!Double.isNaN(loc.getX()))
+                                && (!Double.isNaN(loc.getY()))) {
+                                double x = loc.getX() - centerPoint.getX();
+                                double y = loc.getY() - centerPoint.getY();
+                                double rho = Math.sqrt((x * x) + (y * y));
+
+                                if ((rho > 0.0) & (rho <= radius)) {
+                                        double sinC = rho / radius;
+                                        double cosC = Math.sqrt(1.0 - (sinC * sinC));
+                                        double latitude = Math.asin(cosC * sinLatCenter)
+                                                + (y * sinC * cosLatCenter / rho);
+                                        double longitude = Double.NaN;
+
+                                        if (centerCoordinate.getY()
+                                                        == MapProjectionConstants.PI_OVER_2) {
+                                                longitude = centerCoordinate.getX()
+                                                        + Math.atan2(x, -y);
+                                        } else if (centerCoordinate.getY()
+                                                        == -MapProjectionConstants.PI_OVER_2) {
+                                                longitude = centerCoordinate.getX() + Math.atan2(x, y);
+                                        } else {
+                                                longitude = centerCoordinate.getX()
+                                                        + Math.atan2((x * sinC), (rho * cosLatCenter * cosC)
+                                                        - (y * sinLatCenter * sinC));
+                                        }
+
+                                        longitude = normalizeLongitude(longitude);
+                                        latitude = normalizeLatitude(latitude);
+                                        coordinate.setLocation(longitude, latitude);
+                                } else if (rho == 0.0) {
+                                        coordinate.setLocation(centerCoordinate.getX(),
+                                                centerCoordinate.getY());
+                                }
+
+                        }
+        */
+        return coordinate;
+    }
+
+    /***
+     * Get overlay grid for map as a path
+     * @return GeneralPath to draw mapOverlay.
+     */
+    public GeneralPath getOverlayGridPath() {
+        GeneralPath overlayGridPath = new GeneralPath();
+
+        /*                double sinLat = 0.0;
+                        double cosLat = 0.0;
+                        double cosLonDiff = 0.0;
+                        double sinLonDiff = 0.0;
+                        double lonDiff = 0.0;
+                        double cosC = 0.0;
+                        float x, y;
+                        float mark = (float) getRadius() / 360.0F;
+                        Point2D centerPoint = getCenterPoint();
+                        Point2D centerCoordinate = getCenterCoordinate();
+                        double radius = getRadius();
+                        double cosLatCenter = getCosLatCenter();
+                        double sinLatCenter = getSinLatCenter();
+                        double overlayGridIncrement = getOverlayGridIncrement();
+                        double overlayGridLongitudeIncrement
+                                = getOverlayGridLongitudeIncrement();
+                        double overlayGridLatitudeIncrement = getOverlayGridLatitudeIncrement();
+
+                        // Create latitude lines
+                        for (double lat = -MapProjectionConstants.PI_OVER_2;
+                                        lat <= MapProjectionConstants.PI_OVER_2;
+                                        lat += overlayGridLatitudeIncrement) {
+                                sinLat = Math.sin(lat);
+                                cosLat = Math.cos(lat);
+
+
+                                for (double lon = -Math.PI; lon <= Math.PI;
+                                                lon += overlayGridIncrement) {
+                                        lonDiff = lon - centerCoordinate.getX();
+                                        cosLonDiff = Math.cos(lonDiff);
+                                        cosC = (sinLatCenter * sinLat)
+                                                + (cosLatCenter * cosLat * cosLonDiff);
+
+                                        if (cosC >= 0.0) {
+                                                sinLonDiff = Math.sin(lonDiff);
+                                                x = (float) ((radius * cosLat * sinLonDiff)
+                                                        + centerPoint.getX());
+                                                y = (float) ((radius * ((cosLatCenter * sinLat)
+                                                        - (sinLatCenter * cosLat * cosLonDiff)))
+                                                        + centerPoint.getY());
+                                                overlayGridPath.moveTo(x - mark, y);
+                                                overlayGridPath.lineTo(x + mark, y);
+                                                overlayGridPath.moveTo(x, y - mark);
+                                                overlayGridPath.lineTo(x, y + mark);
+                                        }
+                                }
+                        }
+
+                        // Create longitude lines
+                        for (double lon = -Math.PI; lon <= Math.PI;
+                                        lon += overlayGridLongitudeIncrement) {
+                                lonDiff = lon - centerCoordinate.getX();
+                                cosLonDiff = Math.cos(lonDiff);
+
+                                for (double lat = -MapProjectionConstants.PI_OVER_2;
+                                                lat <= MapProjectionConstants.PI_OVER_2;
+                                                lat += overlayGridIncrement) {
+                                        sinLat = Math.sin(lat);
+                                        cosLat = Math.cos(lat);
+                                        cosC = (sinLatCenter * sinLat)
+                                                + (cosLatCenter * cosLat * cosLonDiff);
+
+                                        if (cosC >= 0.0) {
+                                                sinLonDiff = Math.sin(lonDiff);
+                                                x = (float) ((radius * cosLat * sinLonDiff)
+                                                        + centerPoint.getX());
+                                                y = (float) ((radius * ((cosLatCenter * sinLat)
+                                                        - (sinLatCenter * cosLat * cosLonDiff)))
+                                                        + centerPoint.getY());
+                                                overlayGridPath.moveTo(x - mark, y);
+                                                overlayGridPath.lineTo(x + mark, y);
+                                                overlayGridPath.moveTo(x, y - mark);
+                                                overlayGridPath.lineTo(x, y + mark);
+                                        }
+                                }
+                        }
+        */
+        return overlayGridPath;
+    }
+
+    /***
+     * Get projection name
+     * @return ProjectionName
+     */
+
+    //public ProjectionName getProjectionName() {
+    //	return ProjectionName.ORTHOGRAPHIC;
+    //}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Orthographic.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/CCLambert.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/CCLambert.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/CCLambert.java	(revision 10281)
@@ -0,0 +1,129 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+
+/**
+ * Proyeccion de Conica Comforme Lambert
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class CCLambert extends Projection {
+    static String name = "Conica Comforme Lambert";
+    static String abrev = "CCLam";
+
+    public CCLambert(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+    }
+
+    public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getAbrev() {
+        return abrev;
+    }
+
+    public static CCLambert getProjection(Ellipsoid eli) {
+        return new CCLambert(eli);
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("CCL") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new Point2D.Double(x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D lPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo(lPt, gPt);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(Point2D lPt, GeoPoint gPt) {
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D lPt) {
+        return lPt;
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        grid = new Graticule(this);
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        // TODO Auto-generated method stub
+        return -1D;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/CCLambert.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Coverage.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Coverage.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Coverage.java	(revision 10281)
@@ -0,0 +1,653 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo.cover;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.cts.ProjectionPool;
+import org.cresques.cts.gt2.CoordSys;
+//import org.cresques.cts.gt2.CoordTrans;
+
+import org.cresques.geo.Projected;
+import org.cresques.geo.Projection;
+import org.cresques.geo.ReProjection;
+
+import org.cresques.io.GeoRasterFile;
+
+import org.cresques.px.*;
+
+import org.cresques.ui.CQApp;
+
+import java.awt.Color;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+
+/**
+ * Cobertura espacial
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Coverage implements Projected {
+    boolean debug = true;
+
+    /*        protected FileSupport [] fSupport = {
+                    new FileSupport("ecw", EcwFile.class)
+            };*/
+
+    // Nombre de la cobertura
+    protected String name = "Orto ICV 1:5.000";
+    protected String fName = "cover";
+
+    // Dirección raiz de los datos
+    protected String dName = null; //"//sercart/cartografia/ortofotos/Orto_ICV/00009";
+    protected int nLevels = 1;
+    protected String hojaPrefix = "";
+    protected Hashtable hojas = null;
+    private Hashtable files = null;
+    protected PxObjList marcos;
+    public Color color = null;
+    public Color fillColor = null;
+    protected boolean loadable = true;
+    private String fType = "";
+    protected IProjection proj = null;
+    private boolean available = true;
+
+    public Coverage() {
+        hojas = new Hashtable();
+        files = new Hashtable();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Hashtable getHojas() {
+        return hojas;
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    /**
+     * Asigna el estado de disponibilidad.
+     * Cuando una cobertura no esta disponible (la unidad está
+     * inactiva, no tiene ficheros, etc...) deberá ponerse a false.
+     * Es true por defecto
+     * @param av Disponibilidad.
+     */
+    public void setAvailable(boolean av) {
+        available = av;
+    }
+
+    /**
+     * Devuelve el estado de disponibilidad.
+     * @return Disponibilidad.
+     */
+    public boolean getAvailable() {
+        return available;
+    }
+
+    /**
+     * Especifica el tipo de los ficheros que forman la cobertura.
+     * Es un string que será procesado por la aplicación. La clase
+     * Coverage no hace ningún tratamiento de este valor.
+     * @param fType Tipo de ficheros.
+     */
+    public void setFileType(String fType) {
+        this.fType = fType;
+    }
+
+    /**
+     * Devuelve el tipo de fichero.
+     * @return Tipo de fichero.
+     */
+    public String getFileType() {
+        return fType;
+    }
+
+    public void catalogue(String[] files) {
+        String hName = null;
+
+        for (int i = 0; i < files.length; i++) {
+            hName = hojaPrefix + files[i];
+            hojas.put(hName, files[i]);
+
+            if (debug) {
+                System.out.println("Coverage: hojas.put('" + hName + "'");
+            }
+        }
+    }
+
+    public void catalogue() {
+        catalogue(dName);
+    }
+
+    /**
+     * Hace el catálogo a partir de la lista de ficheros.
+     * @param files
+     */
+    public void catalogueList(String[][] files) {
+        IProjection prj = proj;
+        String hName = null;
+
+        for (int i = 0; i < files.length; i++) {
+            if (files[i][2] != null) {
+                if (proj instanceof Projection) {
+                    prj = (Projection) Projection.getProjectionByName(proj.getDatum(),
+                                                                      files[i][2]);
+                } else if (proj instanceof CoordSys) {
+                    prj = ProjectionPool.get(files[i][2]);
+                }
+            }
+
+            hName = files[i][0];
+            hojas.put(hName, new Hoja(prj, files[i][1], files[i][0]));
+
+            if (debug) {
+                System.out.println("Coverage: hojas.put('" + hName + "'");
+            }
+        }
+    }
+
+    /**
+     * Hace el catálogo recorriendo un directorio.
+     * @param dName
+     */
+    public void catalogue(String dName) {
+        System.out.println("Catalogando '" + dName + "' ...");
+
+        File dir = new File(dName);
+
+        if (!dir.exists()) {
+            System.err.println("Que dice que '" + dName + "'no existe");
+
+            return;
+        }
+
+        String[] files = dir.list();
+
+        if (files != null) {
+            catalogue(files);
+        }
+    }
+
+    public IObjList[] loadMinuteo() {
+        IObjList[] minuteo = null;
+
+        return minuteo;
+    }
+
+    public void saveMinuteo(IObjList[] minuteo) {
+        for (int i = 0; i < minuteo.length; i++) {
+        }
+    }
+
+    /**
+     * Genera el minuteo, reproyectado.
+     * @param targetProj proyeccion de destino
+     * @return array de minuteos
+     */
+    public IObjList[] generateMinuteo(IProjection targetProj) {
+        IObjList[] minuteo = loadMinuteo();
+
+        if (minuteo != null) {
+            return minuteo;
+        }
+
+        minuteo = new IObjList[nLevels];
+
+        for (int i = 0; i < minuteo.length; i++)
+            minuteo[i] = new PxObjList();
+
+        if (hojas.size() == 0) {
+            catalogue(this.dName);
+        }
+
+        marcos = new PxObjList();
+
+        IObjList layer = minuteo[0];
+        IObjList layer1 = null;
+
+        if (nLevels > 1) {
+            layer1 = minuteo[1];
+        }
+
+        Enumeration enum = hojas.keys();
+        String hName;
+        String hCode;
+        Hoja h;
+        Object obj = null;
+
+        while (enum.hasMoreElements()) {
+            hName = (String) enum.nextElement();
+
+            try {
+                obj = hojas.get(hName);
+
+                if (obj instanceof String) {
+                    hCode = (String) obj;
+                    generateMinuteoHoja(dName + "/" + hCode, hName, layer,
+                                        layer1);
+                } else if (obj instanceof Hoja) {
+                    h = (Hoja) obj;
+                    generateMinuteoHoja(dName + "/" + h.getCode(), h, layer,
+                                        layer1);
+                }
+            } catch (Exception e) {
+                // TODO Tengo que tratar los errores de una forma mejor.
+                System.err.println("Error al cargar la hoja " + hName);
+                e.printStackTrace();
+            }
+        }
+
+        saveMinuteo(minuteo);
+
+        //app.setCurrentMinuteo(layer);
+        if (proj != targetProj) {
+            ICoordTrans rp = null;
+
+            if (proj instanceof Projection) {
+                rp = new ReProjection(((Projection) proj),
+                                      ((Projection) targetProj));
+            } else if (proj instanceof CoordSys) {
+                //rp = new CoordTrans((CoordSys) proj, (CoordSys) targetProj);
+            }
+
+            layer.reProject(rp);
+
+            if (layer1 != null) {
+                layer1.reProject(rp);
+            }
+        }
+
+        return minuteo;
+    }
+
+    public void generateMinuteo(CQApp app, String lName, String lName1) {
+        PxLayer layer1 = null;
+
+        if (color == null) {
+            color = new Color(64, 220, 64, 255);
+        }
+
+        if (fillColor == null) {
+            fillColor = new Color(128, 220, 128, 32);
+        }
+
+        if (hojas.size() == 0) {
+            catalogue(this.dName);
+        }
+
+        marcos = new PxObjList();
+
+        if (nLevels > 0) {
+            layer1 = app.createLayer(name + lName1, proj);
+            layer1.setColor(color);
+            layer1.setFillColor(fillColor);
+        }
+
+        PxLayer layer = app.createLayer(name + lName, proj);
+        layer.setColor(color);
+        layer.setFillColor(fillColor);
+
+        Enumeration enum = hojas.keys();
+        String hName;
+        String hCode;
+        Hoja h;
+        Object obj = null;
+
+        while (enum.hasMoreElements()) {
+            hName = (String) enum.nextElement();
+            obj = hojas.get(hName);
+
+            if (obj.getClass() == String.class) {
+                hCode = (String) obj;
+                generateMinuteoHoja(dName + "/" + hCode, hName, layer, layer1);
+            } else if (obj.getClass() == Hoja.class) {
+                h = (Hoja) obj;
+                generateMinuteoHoja(dName + "/" + h.getCode(), h, layer, layer1);
+            }
+        }
+
+        app.setCurrentMinuteo(layer);
+
+        if (proj != app.getCurrentProjection()) {
+            ICoordTrans rp = null;
+
+            if (proj instanceof Projection) {
+                rp = new ReProjection(((Projection) proj),
+                                      ((Projection) app.getCurrentProjection()));
+            }
+
+            layer.reProject(rp);
+
+            if (layer1 != null) {
+                layer1.reProject(rp);
+            }
+        }
+    }
+
+    public void generateMinuteoHoja(String hFName, Hoja h, IObjList layer,
+                                    IObjList layer1) {
+        GeoRasterFile eFile = null;
+        PxContour contour = null;
+        String fName = null;
+        File dir = new File(hFName);
+
+        if (!hFName.startsWith("ecwp:") && !dir.exists()) {
+            System.err.println("Hoja '" + hFName + "' Inexistente");
+
+            return;
+        }
+
+        if (dir.isDirectory()) {
+        } else {
+            if (!GeoRasterFile.fileIsSupported(hFName)) {
+                return;
+            }
+
+            fName = hFName;
+            System.out.println("Analizo '" + h.getName() + "' ...");
+            eFile = GeoRasterFile.openFile(null, fName);
+            contour = new PxContour(eFile.getExtent(), fName, h.getName(),
+                                    h.getProjection());
+
+            if (proj != h.getProjection()) {
+                ICoordTrans rp = null;
+
+                if (proj instanceof Projection) {
+                    rp = new ReProjection(((Projection) h.getProjection()),
+                                          ((Projection) proj));
+                } else if (proj instanceof CoordSys) {
+                   /* rp = new CoordTrans((CoordSys) h.getProjection(),
+                                        (CoordSys) proj);*/
+                }
+
+                contour.reProject(rp);
+            }
+
+            eFile.close();
+            contour.c(color);
+            contour.fillColor(fillColor);
+            layer.add(contour);
+        }
+    }
+
+    public void generateMinuteoHoja(String hName, String name, IObjList layer,
+                                    IObjList layer1) {
+        GeoRasterFile eFile = null;
+        PxContour contour = null;
+        String fName = null;
+        File dir = new File(hName);
+
+        if (!hName.startsWith("ecwp:") && !dir.exists()) {
+            System.err.println("Hoja '" + hName + "' Inexistente");
+
+            return;
+        }
+
+        if (dir.isDirectory()) {
+            FilenameFilter filter = new FilenameFilter() {
+                public boolean accept(File dir, String fName) {
+                    return GeoRasterFile.fileIsSupported(fName);
+                }
+            };
+
+            String[] files = dir.list(filter);
+            System.out.print(files.length + " ficheros.");
+
+            if (files.length > 0) {
+                Extent extent = new Extent();
+
+                for (int i = 0; i < files.length; i++) {
+                    fName = hName + "/" + files[i];
+                    System.out.println("Analizo '" + fName + "' ...");
+                    eFile = GeoRasterFile.openFile(null, fName);
+                    contour = new PxContour(eFile.getExtent(), fName, files[i],
+                                            proj);
+                    eFile.close();
+
+                    //contour = EcwFile.getContour(fName, files[i], proj);
+                    layer1.add(contour);
+
+                    //					mapview.loadECW(hName+"/"+fName);
+                    extent.add(contour.getExtent());
+                }
+
+                if (contour != null) {
+                    contour = new PxContour(extent, hName, name, proj);
+                    contour.c(color);
+                    contour.fillColor(fillColor);
+                    layer.add(contour);
+                }
+            }
+        } else {
+            if (!GeoRasterFile.fileIsSupported(hName)) {
+                return;
+            }
+
+            fName = hName;
+            System.out.println("Analizo '" + name + "' ...");
+
+            //contour = EcwFile.getContour(fName, name, proj);
+            eFile = GeoRasterFile.openFile(null, fName);
+            contour = new PxContour(eFile.getExtent(), fName, name, proj);
+            eFile.close();
+            contour.c(color);
+            contour.fillColor(fillColor);
+            layer.add(contour);
+
+            //			mapview.loadECW(hName+"/"+fName);
+        }
+    }
+
+    /**
+     * Devuelve los ficheros que incluye la hoja.
+     * @param hoja hoja que se busca.
+     * @return nombre(s) de fichero(s).
+     */
+    public ArrayList getFileNames(String hoja) {
+        ArrayList fNames = new ArrayList();
+
+        if (!loadable) {
+            return null;
+        }
+
+        String fName = null;
+        Object obj = hojas.get(hoja);
+        String hCode = null;
+        String hDName = null;
+        File dir = null;
+
+        if (obj != null) {
+            if (obj instanceof String) {
+                hCode = (String) obj;
+            } else if (obj instanceof Hoja) {
+                hCode = ((Hoja) obj).getCode();
+            }
+
+            hDName = dName + "/" + hCode;
+            System.out.print("Explorando '" + hDName + "' (" + hoja + ") ... ");
+            dir = new File(hDName);
+        }
+
+        if ((obj == null) || (!hDName.startsWith("ecwp:") && !dir.exists())) {
+            System.err.println("Que dice que no existe");
+
+            return null;
+        }
+
+        String[] files; /* = dir.list();
+        /*                if (children == null) {
+        // Either dir does not exist or is not a directory
+        } else {
+        for (int i=0; i<children.length; i++) {
+         // Get filename of file or directory
+         String filename = children[i];
+        }
+        } */
+
+        // It is also possible to filter the list of returned files.
+        // This example does not return any files that start with `.'.
+        if (dir.isDirectory()) {
+            FilenameFilter filter = new FilenameFilter() {
+                public boolean accept(File dir, String fName) {
+                    return GeoRasterFile.fileIsSupported(fName);
+                }
+            };
+
+            files = dir.list(filter);
+            System.out.print(files.length + " ficheros.");
+
+            if (files.length > 0) {
+                //PxLayer layer = app.createLayer(name+hoja, proj);
+                for (int i = 0; i < files.length; i++) {
+                    fName = files[i];
+                    System.out.println("Cargo ...'" + fName + "'");
+                    fNames.add(hDName + "/" + fName);
+
+                    //mapview.canvas.zoomExtents();
+                    //app.getCanvas().repaint();
+                }
+            }
+        } else {
+            //PxLayer layer = app.getLayerByName(name);
+            //if (layer == null) {
+            //	layer = app.createLayer(name, proj);
+            //}
+            //app.setCurrentLayer(layer);
+            fName = hDName;
+
+            if (!GeoRasterFile.fileIsSupported(fName)) {
+                return null;
+            }
+
+            System.out.println("Cargo ...'" + fName + "'");
+            fNames.add(fName);
+
+            //mapview.canvas.zoomExtents();
+            //app.getCanvas().repaint();
+        }
+
+        return fNames;
+    }
+
+    public void loadHoja(CQApp app, String hoja) {
+        if (!loadable) {
+            return;
+        }
+
+        String fName = null;
+        Object obj = hojas.get(hoja);
+        String hCode = null;
+
+        if (obj.getClass() == String.class) {
+            hCode = (String) obj;
+        } else if (obj.getClass() == Hoja.class) {
+            hCode = ((Hoja) obj).getCode();
+        }
+
+        String hDName = dName + "/" + hCode;
+        System.out.print("Explorando '" + hDName + "' (" + hoja + ") ... ");
+
+        File dir = new File(hDName);
+
+        if ((!hDName.startsWith("ecwp:") && !dir.exists()) ||
+                (hojas.get(hoja) == null)) {
+            System.err.println("Que dice que no existe");
+
+            return;
+        }
+
+        String[] files; /* = dir.list();
+        /*                if (children == null) {
+        // Either dir does not exist or is not a directory
+        } else {
+        for (int i=0; i<children.length; i++) {
+         // Get filename of file or directory
+         String filename = children[i];
+        }
+        } */
+
+        // It is also possible to filter the list of returned files.
+        // This example does not return any files that start with `.'.
+        if (dir.isDirectory()) {
+            FilenameFilter filter = new FilenameFilter() {
+                public boolean accept(File dir, String fName) {
+                    return GeoRasterFile.fileIsSupported(fName);
+                }
+            };
+
+            files = dir.list(filter);
+            System.out.print(files.length + " ficheros.");
+
+            if (files.length > 0) {
+                PxLayer layer = app.createLayer(name + hoja, proj);
+
+                for (int i = 0; i < files.length; i++) {
+                    fName = files[i];
+                    System.out.println("Cargo ...'" + fName + "'");
+                    app.loadFile(hDName + "/" + fName, proj);
+
+                    //mapview.canvas.zoomExtents();
+                    app.getCanvas().repaint();
+                }
+            }
+        } else {
+            PxLayer layer = app.getLayerByName(name);
+
+            if (layer == null) {
+                layer = app.createLayer(name, proj);
+            }
+
+            app.setCurrentLayer(layer);
+            fName = hDName;
+
+            if (!GeoRasterFile.fileIsSupported(fName)) {
+                return;
+            }
+
+            System.out.println("Cargo ...'" + fName + "'");
+            app.loadFile(fName, proj);
+
+            //mapview.canvas.zoomExtents();
+            app.getCanvas().repaint();
+        }
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Coverage.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/.cvsignore	(revision 10281)
@@ -0,0 +1,2 @@
+*.dfPackage
+*.wmf

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Mtn.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Mtn.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Mtn.java	(revision 10281)
@@ -0,0 +1,322 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo.cover;
+
+import org.cresques.geo.Ellipsoid;
+import org.cresques.geo.UtmZone;
+
+import org.cresques.px.Extent;
+import org.cresques.px.IObjList;
+import org.cresques.px.Minuteo;
+import org.cresques.px.PxContour;
+import org.cresques.px.PxObj;
+import org.cresques.px.PxObjList;
+import org.cresques.px.dxf.DxfSolid;
+import org.cresques.px.dxf.DxfText;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+import java.lang.Character;
+
+import java.util.Iterator;
+import java.util.TreeMap;
+import java.util.Vector;
+
+
+/**
+ * Calculos de hojas del Instituto Geográfico Nacional de España.
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+class Ign {
+    /* MTN50: En coordenadas geográficas: ancho =
+     *
+     */
+}
+
+
+/**
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Mtn {
+    public static Mtn25 mtn25 = new Mtn25();
+    static Mtn50 mtn50 = Mtn.mtn25.getMtn50();
+    public static TreeMap hoja25 = Mtn.mtn25.hoja;
+    public static TreeMap hoja50 = Mtn.mtn50.hoja;
+    UtmZone zone = null;
+    String name = null;
+    TreeMap hoja = null;
+    private Minuteo min = null;
+
+    public Minuteo getMinuteo() {
+        return min;
+    }
+
+    protected void calcMinuteo() {
+        System.out.println(name + ": genero Minuteo");
+        min = new Minuteo(zone);
+
+        String hName;
+        PxContour contour;
+        Iterator keys;
+        Hoja h = null;
+
+        keys = hoja.keySet().iterator();
+
+        while (keys.hasNext()) {
+            hName = (String) keys.next();
+            h = (Hoja) hoja.get(hName);
+            contour = new PxContour(h.getVertex(), hName);
+            contour.setColor(null);
+            min.add(contour);
+        }
+    }
+
+    public static void parseLayer(PxObjList layer) {
+        Mtn25.mtn25.parseLyr(layer);
+    }
+
+    public static Minuteo getMinuteo25() {
+        return mtn25.getMinuteo();
+    }
+
+    public static Minuteo getMinuteo50() {
+        return mtn50.getMinuteo();
+    }
+}
+
+
+class Mtn50 extends Mtn {
+    public Mtn50() {
+        name = "MTN50";
+        zone = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        hoja = new TreeMap();
+    }
+}
+
+
+class Mtn25 extends Mtn {
+    String buf;
+
+    //private TreeMap hojas25 = new TreeMap();
+    BufferedReader fi;
+    long l = 0;
+
+    public Mtn25() {
+        name = "MTN25";
+        zone = UtmZone.getProjection(Ellipsoid.hayford, 30, UtmZone.NORTH);
+        hoja = new TreeMap();
+
+        /*String fname = "data/mtn25.txt";
+        load(fname);
+        calcMinuteo();*/
+    }
+
+    public Mtn50 getMtn50() {
+        Mtn50 mtn50 = new Mtn50();
+
+        Iterator keys = hoja.keySet().iterator();
+        Hoja h = null;
+        Hoja h50 = null;
+        String code50;
+
+        while (keys.hasNext()) {
+            h = (Hoja) hoja.get(keys.next());
+
+            //System.err.println("Hoja 25"+h.code);
+            code50 = h.code.split("-")[0];
+
+            if (mtn50.hoja.containsKey(code50)) {
+                h50 = (Hoja) mtn50.hoja.get(code50);
+
+                switch (Integer.parseInt(h.code.split("-")[1])) {
+                case 1:
+                    h50.setTL(h.tl);
+
+                    break;
+
+                case 2:
+                    h50.setTR(h.tr);
+
+                    break;
+
+                case 3:
+                    h50.setBL(h.bl);
+
+                    break;
+
+                case 4:
+                    h50.setBR(h.br);
+
+                    break;
+                }
+            } else {
+                h50 = new Hoja(code50, h, null);
+            }
+
+            mtn50.hoja.put(code50, h50);
+        }
+
+        mtn50.calcMinuteo();
+
+        return mtn50;
+    }
+
+    public void load(String name) {
+        try {
+            System.out.println("Cargando '" + name + "' ...");
+            fi = new BufferedReader(new FileReader(name));
+
+            while ((buf = fi.readLine()) != null) {
+                //System.out.println(buf);
+                l++;
+                parseLine(buf);
+            }
+
+            fi.close();
+            System.out.println("'" + name + "' cargado. (" + l + " líneas).");
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException ie) {
+            System.err.println("ERROR." + l + "lineas leidas");
+            ie.printStackTrace();
+        }
+    }
+
+    void parseLine(String l) {
+        //756-1,[(311114.0, 4337768.0), (325515.0, 4337434.0), (325309.0, 4328185.0), (310891.0, 4328519.0)]
+        String[] field = l.split(",");
+        field[1] = field[1].substring(1);
+        field[8] = field[8].substring(0, field[8].length() - 1);
+
+        String name = field[0];
+        String aux;
+        double x;
+        double y;
+        Vector pt = new Vector();
+
+        for (int i = 1; i < 8; i += 2) {
+            x = Double.parseDouble(field[i].trim().substring(1));
+            aux = field[i + 1].trim();
+            y = Double.parseDouble(aux.substring(0, aux.length() - 1));
+            pt.add(zone.createPoint(x, y));
+        }
+
+        hoja.put(name, new Hoja(name, pt, ""));
+        System.out.println(name);
+    }
+
+    /*
+     * Genera las hojas del MTN25 a partir de una capa dxf.
+     * Llena un TreeMap con las hojas, de manera que se pueden
+     * obtener por su código.
+     */
+    private void fillSolids(IObjList marcos, IObjList oList) {
+        Iterator iter = oList.iterator();
+        ;
+
+        while (iter.hasNext()) {
+            Object o = iter.next();
+
+            if (o instanceof IObjList) {
+                fillSolids(marcos, (IObjList) o);
+            } else if (o instanceof DxfSolid) {
+                marcos.add((PxObj) o);
+            }
+        }
+    }
+
+    private void fillTexts(IObjList textos, IObjList oList) {
+        Iterator iter = oList.iterator();
+        ;
+
+        while (iter.hasNext()) {
+            Object o = iter.next();
+
+            if (o instanceof IObjList) {
+                fillTexts(textos, (IObjList) o);
+            } else if (o instanceof DxfText) {
+                //if (Character.isDigit(((DxfText) o).getText().charAt(1)))
+                textos.add((Extent.Has) o);
+            }
+        }
+    }
+
+    public void parseLyr(IObjList layer) {
+        hoja = new TreeMap();
+
+        PxObjList marcos = new PxObjList();
+        PxObjList textos = new PxObjList();
+        Iterator iter = null;
+
+        // Lleno una lista con solids, otra con texts.
+        System.out.println("layer: " + layer.size() + " objetos (" +
+                           layer.iterator().next() + ")");
+        fillSolids(marcos, layer);
+        System.out.println("fillSolids: " + marcos.size() + " marcos");
+        fillTexts(textos, layer);
+        System.out.println("fillTexts: " + textos.size() + " textos");
+
+        // Para cada text busco un solid. Si lo encuentro creo
+        // una hoja con el solid y el text como name, la mento en
+        // el TreeMap y saco el solid de marcos
+        Hoja h = null;
+        DxfText text = null;
+        DxfSolid marco = null;
+        IObjList select = null;
+        iter = textos.iterator();
+
+        while (iter.hasNext()) {
+            text = (DxfText) iter.next();
+
+            if (hoja.containsKey(text.getText())) {
+                continue;
+            }
+
+            if (!Character.isDigit(text.getText().split("-")[1].charAt(0))) {
+                continue;
+            }
+
+            select = marcos.getAt(text.getPt1());
+
+            if (select.size() >= 1) {
+                marco = (DxfSolid) select.iterator().next();
+                h = new Hoja(text.getText(), marco.getPts(), null);
+                h.setProjection(layer.getProjection());
+                hoja.put(text.getText(), h);
+                marcos.remove(marco);
+            } else {
+                // ERROR. No puede haber más de un marco por texto 
+            }
+        }
+
+        calcMinuteo();
+        Mtn.mtn50 = Mtn.mtn25.getMtn50();
+        Mtn.hoja25 = Mtn.mtn25.hoja;
+        Mtn.hoja50 = Mtn.mtn50.hoja;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Mtn.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/package.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/package.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/package.html	(revision 10281)
@@ -0,0 +1,4 @@
+<html>
+	<body>Clases relacionadas con coverturas espaciales.
+</body>
+</html>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/package.html
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Hoja.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Hoja.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Hoja.java	(revision 10281)
@@ -0,0 +1,195 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo.cover;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.geo.Projected;
+
+import org.cresques.px.Extent;
+
+import java.awt.geom.Point2D;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import java.util.Vector;
+
+
+/**
+ * @author Luis W. Sevilla <sevilla_lui@gva.es>
+ */
+public class Hoja implements Projected {
+    IProjection proj;
+    String code = null;
+    String name = null;
+    Extent extent = null;
+    Point2D tl;
+    Point2D tr;
+    Point2D bl;
+    Point2D br;
+
+    public Hoja(IProjection proj, String code, String name) {
+        this.proj = proj;
+        this.code = code;
+        this.name = name;
+        tl = tr = bl = br = null;
+    }
+
+    public Hoja(String cod, Point2D p1, Point2D p2, Point2D p3, Point2D p4,
+                String name) {
+        code = cod;
+        tl = p1;
+        tr = p2;
+        bl = p3;
+        br = p4;
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public Hoja(String cod, Point2D[] pt, String name) {
+        code = cod;
+        tl = pt[0];
+        tr = pt[1];
+        br = pt[2];
+        bl = pt[3];
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public Hoja(String cod, Vector pt, String name) {
+        code = cod;
+        tl = (Point2D) pt.get(0);
+        tr = (Point2D) pt.get(1);
+        br = (Point2D) pt.get(2);
+        bl = (Point2D) pt.get(3);
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public Hoja(String cod, Hoja h, String name) {
+        code = cod;
+        tl = h.tl;
+        tr = h.tr;
+        br = h.br;
+        bl = h.bl;
+
+        if (name != null) {
+            this.name = name;
+        }
+
+        setExtent();
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection p) {
+        proj = p;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public Point2D getTL() {
+        return tl;
+    }
+
+    public void setTL(Point2D pt) {
+        tl = pt;
+        extent.add(pt);
+    }
+
+    public Point2D getTR() {
+        return tr;
+    }
+
+    public void setTR(Point2D pt) {
+        tr = pt;
+        extent.add(pt);
+    }
+
+    public Point2D getBL() {
+        return bl;
+    }
+
+    public void setBL(Point2D pt) {
+        bl = pt;
+        extent.add(pt);
+    }
+
+    public Point2D getBR() {
+        return br;
+    }
+
+    public void setBR(Point2D pt) {
+        br = pt;
+        extent.add(pt);
+    }
+
+    public Extent getExtent() {
+        return extent;
+    }
+
+    private void setExtent() {
+        extent = new Extent(tl, br);
+        extent.add(tr);
+        extent.add(bl);
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Point2D[] getVertex() {
+        Point2D[] v = { tl, tr, br, bl };
+
+        return v;
+    }
+
+    public void toXml(OutputStream os) {
+    }
+
+    public void fromXml(InputStream is) {
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover/Hoja.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/cover
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmZone.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmZone.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmZone.java	(revision 10281)
@@ -0,0 +1,380 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import geojava.GeoUtm;
+import geojava.Ra2De;
+import geojava.UtmGeo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.Extent;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+
+public class UtmZone extends Projection {
+    static String name = "UTM";
+    static String abrev = "UTM";
+    private final static UtmZone ed5028N = new UtmZone(Ellipsoid.ed50, 28, 0,
+                                                       0.0);
+    private final static UtmZone ed5029N = new UtmZone(Ellipsoid.ed50, 29, 0,
+                                                       0.0);
+    private final static UtmZone ed5030N = new UtmZone(Ellipsoid.ed50, 30, 0,
+                                                       0.0);
+    private final static UtmZone ed5031N = new UtmZone(Ellipsoid.ed50, 31, 0,
+                                                       0.0);
+    private final static UtmZone hayford28N = new UtmZone(Ellipsoid.hayford,
+                                                          28, 0, 0.0);
+    private final static UtmZone hayford29N = new UtmZone(Ellipsoid.hayford,
+                                                          29, 0, 0.0);
+    private final static UtmZone hayford30N = new UtmZone(Ellipsoid.hayford,
+                                                          30, 0, 0.0);
+    private final static UtmZone hayford31N = new UtmZone(Ellipsoid.hayford,
+                                                          31, 0, 0.0);
+    static GeoUtm geoutm = new GeoUtm();
+    static UtmGeo utmgeo = new UtmGeo();
+    public int Zone = 30;
+    public int Hemisphere = 0;
+    public double H = 0.0;
+
+    public UtmZone(Ellipsoid eli, int zone, int hemisphere, double h) {
+        super(eli);
+        Zone = zone;
+        Hemisphere = hemisphere;
+        H = h;
+        grid = new Graticule(this);
+    }
+
+    public String getAbrev() {
+        return abrev + Zone;
+    }
+
+    public static UtmZone getProjection(Ellipsoid eli, int zone, int hemisphere) {
+        if ((eli == Ellipsoid.hayford) && (hemisphere == 0)) {
+            switch (zone) {
+            case 28:
+                return hayford28N;
+
+            case 29:
+                return hayford29N;
+
+            case 30:
+                return hayford30N;
+
+            case 31:
+                return hayford31N;
+            }
+        } else if ((eli == Ellipsoid.ed50) && (hemisphere == 0)) {
+            switch (zone) {
+            case 28:
+                return ed5028N;
+
+            case 29:
+                return ed5029N;
+
+            case 30:
+                return ed5030N;
+
+            case 31:
+                return ed5031N;
+            }
+        }
+
+        System.err.println("UtmZone.getProjection(): new " + zone);
+
+        return new UtmZone(eli, zone, hemisphere, 0.0);
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        int zone;
+        int hemisphere = NORTH;
+
+        if (name.indexOf("UTM") < 0) {
+            return null;
+        }
+
+        if (name.substring(0, 1).compareTo("S") == 0) {
+            hemisphere = SOUTH;
+        }
+
+        zone = Integer.parseInt(name.substring(name.length() - 2));
+
+        return getProjection((Ellipsoid) eli, zone, hemisphere);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new UtmPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D uPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo((UtmPoint) uPt, gPt);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(UtmPoint uPt, GeoPoint gPt) {
+        int[] ai = new int[3];
+        double[] ad = new double[3];
+        ai[1] = ((UtmZone) uPt.proj).Zone;
+        ai[2] = ((UtmZone) uPt.proj).Hemisphere;
+        ad[1] = uPt.X;
+        ad[2] = uPt.Y;
+
+        utmgeo.set(((Projection) uPt.proj).getElliPar(), ai, ad);
+        utmgeo.go();
+
+        gPt.Longitude = Ra2De.go(utmgeo.Ge[1]);
+        gPt.Latitude = Ra2De.go(utmgeo.Ge[2]);
+        gPt.proj = Geodetic.getProjection(((Projection) uPt.proj).eli);
+
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D uPt) {
+        int[] ai = { 0, 0, 2 };
+
+        return fromGeo((GeoPoint) gPt, (UtmPoint) uPt, ai);
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @param proj
+     * @return
+     */
+    public UtmPoint fromGeo(GeoPoint gPt, UtmPoint uPt, UtmZone proj) {
+        int[] ai = { 0, proj.Zone, proj.Hemisphere };
+
+        return fromGeo(gPt, uPt, ai);
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @param ai
+     * @return
+     */
+    public UtmPoint fromGeo(GeoPoint gPt, UtmPoint uPt, int[] ai) {
+        double[] ad = new double[4];
+        ad[1] = gPt.Longitude.ToRadians();
+        ad[2] = gPt.Latitude.ToRadians();
+        geoutm.set(((Projection) gPt.proj).getElliPar(), ai, ad);
+        geoutm.go();
+
+        if (geoutm.Ier != 0) {
+            return null;
+        }
+
+        uPt.setLocation(geoutm.Pr[1], geoutm.Pr[2]);
+
+        if ((((UtmZone) uPt.proj).Zone != geoutm.Iopar[1]) ||
+                (((UtmZone) uPt.proj).Hemisphere != geoutm.Iopar[2])) {
+            uPt.proj = UtmZone.getProjection(((Projection) uPt.proj).eli,
+                                             geoutm.Iopar[1], geoutm.Iopar[2]);
+        }
+
+        return uPt;
+    }
+
+    // Calcula el step en función del zoom
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        // calculo del step en función del zoom
+        Point2D pt1 = extent.getMin();
+
+        double step = 1.0;
+        double x = (int) pt1.getX();
+        double dist = 0.0;
+
+        /*        GeoPoint gp1, gp2;
+                gp1 = (GeoPoint) createPoint( x, (int) pt1.getY());
+                mat.transform(gp1, gp1);
+                gp2 = (GeoPoint) createPoint(gp1.getX()+100, gp1.getY()-100);
+                try {
+                        mat.inverseTransform(gp2, gp2);
+                } catch (NoninvertibleTransformException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                }
+                dist = (gp2.getX()-x);
+                System.err.println("distX = " + dist);
+
+                if (dist > 30.0) {                         step = 30.0;
+                } else if (dist > 18.0) {         step = 18.0;
+                } else if (dist > 12.0) {        step = 12.0;
+                } else if (dist > 6.0) {        step = 6.0;
+                } else if (dist > 3.0) {        step = 3.0;
+                } else if (dist > 2.0) {        step = 2.0;
+                } else if (dist > 1.0) {        step = 1.0;
+                } else if (dist > .5) {                step =.5;
+                } else if (dist > .25) {        step =.25;
+                } else if (dist > 1.0/60*5.0) { step = 1.0/60*5.0;
+                } else {                                        step = 1.0/60*2.0;
+                }
+                        //step = 1.0;
+                */
+        generateGrid(g, extent, mat, step);
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat,
+                              double step) {
+        grid = new Graticule(this);
+
+        Point2D pt1 = extent.getMin();
+        Point2D pt2 = extent.getMax();
+        GeoPoint gp1;
+        GeoPoint gp2;
+        UtmPoint up1 = (UtmPoint) createPoint(0, 0);
+        UtmPoint up2 = (UtmPoint) createPoint(0, 0);
+        Point2D.Double mp1 = new Point2D.Double(0.0, 0.0);
+        Point2D.Double mp2 = new Point2D.Double(0.0, 0.0);
+        Geodetic geoProj = Geodetic.getProjection((Ellipsoid) getDatum());
+        boolean esUso = false;
+
+        System.err.println(name + ": ViewPort Extent = (" + pt1 + "," + pt2 +
+                           ")");
+        gp1 = (GeoPoint) toGeo(new UtmPoint(pt1.getX(), pt2.getY()));
+        gp2 = (GeoPoint) toGeo(new UtmPoint(pt2));
+
+        double xMin = (int) gp1.getX() - 1.0;
+        double xMax = (int) gp2.getX() + 1.0;
+        gp1 = (GeoPoint) toGeo(new UtmPoint(pt1.getX() +
+                                            ((pt2.getX() - pt1.getX()) / 2.0),
+                                            pt2.getY()));
+
+        double yMax = (int) gp1.getY() + 2.0;
+        gp1 = (GeoPoint) toGeo(new UtmPoint(pt1));
+
+        double yMin = (int) gp1.getY() - 1.0;
+        xMin = -30.0;
+        xMax = 30.0;
+        yMin = 20.0;
+        yMax = 60.0;
+
+        for (double x = xMin; x <= xMax; x += step) {
+            up1 = null;
+
+            if (Math.abs((x) % 6) < .001) {
+                esUso = true;
+            }
+
+            for (double y = yMin; y <= yMax; y += step) {
+                gp2 = (GeoPoint) geoProj.createPoint(x, y);
+                fromGeo(gp2, up2, this);
+
+                if ((up1 != null) && (extent.isAt(up1) || extent.isAt(up2))) {
+                    mat.transform(up2, mp2);
+
+                    if (up1 != null) {
+                        if (esUso) {
+                            grid.addLine(mp1, mp2, 1);
+                        } else {
+                            grid.addLine(mp1, mp2);
+                        }
+                    }
+                } else {
+                    mat.transform(up2, mp2);
+                }
+
+                up1 = (UtmPoint) up2.clone();
+                mp1 = (Point2D.Double) mp2.clone();
+            }
+
+            esUso = false;
+        }
+
+        for (double y = yMin; y <= yMax; y += step) {
+            up1 = null;
+
+            for (double x = xMin; x <= xMax; x += step) {
+                gp2 = (GeoPoint) geoProj.createPoint(x, y);
+                fromGeo(gp2, up2, this);
+
+                if ((up1 != null) && (extent.isAt(up1) || extent.isAt(up2))) {
+                    mat.transform(up2, mp2);
+
+                    if (up1 != null) {
+                        grid.addLine(mp1, mp2);
+                    }
+                } else {
+                    mat.transform(up2, mp2);
+                }
+
+                up1 = (UtmPoint) up2.clone();
+                mp1 = (Point2D.Double) mp2.clone();
+            }
+        }
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        double scale = ((maxX - minX) * // metros
+                       (dpi / 2.54 * 100.0)) / // px / metro
+                       width; // pixels
+
+        return scale;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/UtmZone.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Calc.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Calc.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Calc.java	(revision 10281)
@@ -0,0 +1,71 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import geojava.EGeoUtmCom;
+
+import java.awt.Frame;
+import java.awt.geom.Point2D;
+
+
+public class Calc {
+    static int CATALA = 1;
+    static int CASTELLANO = 2;
+    static int ENGLISH = 3;
+
+    public static void ICCCalculator() {
+        Frame frame = new Frame("EGeoUtmCom");
+        int idioma = CASTELLANO;
+        EGeoUtmCom calcula = new EGeoUtmCom(false, idioma);
+        frame.add("Center", calcula);
+        frame.pack();
+        frame.show();
+    }
+
+    public static void prbUtmToGeo() {
+        UtmZone utmZone = UtmZone.getProjection(Ellipsoid.hayford, 30,
+                                                UtmZone.NORTH);
+
+        //		UtmPoint uPt = new UtmPoint(utmZone, 739027.0, 4468771.0); // 593 tl
+        UtmPoint uPt = new UtmPoint(utmZone, 773177.0, 4303195.0); // 823 tl
+        GeoPoint gPt = (GeoPoint) ((Projection) uPt.proj).toGeo(uPt);
+        GeoPoint.decimales = 1;
+        System.out.println("UTM to Geo : " + uPt.toString() + " == [" +
+                           gPt.toString() + "] (" + gPt.getX() + "," +
+                           gPt.getY() + ")");
+
+        UtmPoint uPt2 = utmZone.fromGeo(gPt, new UtmPoint(utmZone),
+                                        UtmZone.getProjection(Ellipsoid.hayford,
+                                                              29, UtmZone.NORTH));
+        System.out.println("Geo to Utm : " + uPt2.toString() + " == [" +
+                           gPt.toString() + "] (" + gPt.getX() + "," +
+                           gPt.getY() + ")");
+    }
+
+    public Point2D pointFactory(Projection proj, double x, double y) {
+        Point2D.Double pt = new Point2D.Double(x, y);
+
+        return pt;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Calc.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ReProjection.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ReProjection.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ReProjection.java	(revision 10281)
@@ -0,0 +1,109 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+
+/**
+ * Transformada para cambios de proyección
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class ReProjection implements ICoordTrans {
+    Projection pOrig;
+    Projection pDest;
+
+    public ReProjection(Projection pOrig, Projection pDest) {
+        this.pOrig = pOrig;
+        this.pDest = pDest;
+    }
+
+    public ICoordTrans getInverted() {
+        return new ReProjection(pDest, pOrig);
+    }
+
+    public IProjection getPOrig() {
+        return pOrig;
+    }
+
+    public IProjection getPDest() {
+        return pDest;
+    }
+
+    public Point2D convert(Point2D ptOrig, Point2D ptDest) {
+        if (pOrig.getClass() == UtmZone.class) {
+            GeoPoint pt1 = null;
+            pt1 = (GeoPoint) ((UtmZone) pOrig).toGeo((UtmPoint) ptOrig);
+
+            if (pDest.getClass() == UtmZone.class) {
+                ((UtmZone) pDest).fromGeo(pt1, (UtmPoint) ptDest,
+                                          (UtmZone) pDest);
+            } else if (pDest.getClass() == Geodetic.class) {
+                ptDest.setLocation(pt1.getX(), pt1.getY());
+                ((GeoPoint) ptDest).proj = pt1.proj;
+            } else if (pDest.getClass() == Mercator.class) {
+                ((Mercator) pDest).fromGeo(pt1, (ProjPoint) ptDest);
+            }
+        } else if (pOrig.getClass() == Geodetic.class) {
+            if (pDest.getClass() == UtmZone.class) {
+                ((UtmZone) pDest).fromGeo((GeoPoint) ptOrig, (UtmPoint) ptDest,
+                                          (UtmZone) pDest);
+            } else if (pDest.getClass() == Mercator.class) {
+                ((Mercator) pDest).fromGeo((GeoPoint) ptOrig, (ProjPoint) ptDest);
+            }
+        } else if (pOrig.getClass() == Mercator.class) {
+            GeoPoint pt1 = null;
+            pt1 = (GeoPoint) ((Mercator) pOrig).toGeo((ProjPoint) ptOrig);
+
+            if (pDest.getClass() == UtmZone.class) {
+                ((UtmZone) pDest).fromGeo(pt1, (UtmPoint) ptDest,
+                                          (UtmZone) pDest);
+            } else if (pDest.getClass() == Geodetic.class) {
+                ptDest.setLocation(pt1.getX(), pt1.getY());
+                ((ProjPoint) ptDest).proj = pt1.proj;
+            }
+        }
+
+        return ptDest;
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.ICoordTrans#convert(java.awt.geom.Rectangle2D)
+     */
+    public Rectangle2D convert(Rectangle2D rect) {
+        Point2D pt1 = new Point2D.Double(rect.getMinX(), rect.getMinY());
+        Point2D pt2 = new Point2D.Double(rect.getMaxX(), rect.getMaxY());
+        pt1 = convert(pt1, null);
+        pt2 = convert(pt2, null);
+        rect = new Rectangle2D.Double();
+        rect.setFrameFromDiagonal(pt1, pt2);
+
+        return rect;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ReProjection.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/EquidistantCylindrical.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/EquidistantCylindrical.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/EquidistantCylindrical.java	(revision 10281)
@@ -0,0 +1,161 @@
+/*
+ * EquidistantCylindricalMapProjection.java
+ *
+ * Copyright (c) 2002, 2003, Raben Systems, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *    Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ *    Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ *    Neither the name of Raben Systems, Inc. nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Created on July 2, 2002, 3:45 PM
+ */
+package org.cresques.geo;
+
+
+//package com.raben.projection.map;
+//import java.awt.geom.Point2D;  
+//import java.awt.geom.GeneralPath;
+
+/***
+ * Implementation ProjectionInterface for Equidistant Cylindrical map projection
+ * @author  Vern Raben
+ * @version $Revision$ $Date$
+ */
+public class EquidistantCylindrical { //extends AbstractMapProjection {
+
+    /*47
+    48      /*** Creates new CylindricalEquidistantMapProjection * /
+    49      public EquidistantCylindricalMapProjection() {
+    50          setCenterCoordinate(new Point2D.Double(Math.PI, 0.0));
+    51      }
+    52
+    53      /***
+    54       * Get coordinate for a given location in radians
+    55       * @param loc Point2D Screen location
+    56       * @return Point2D Coordinate of the point in radians
+    57       * /
+    58      public Point2D getCoordinateForLocation(Point2D loc) {
+    59          Point2D.Double coordinate = new Point2D.Double(Double.NaN,
+    60              Double.NaN);
+    61          Point2D centerCoordinate = getCenterCoordinate();
+    62          Point2D centerPoint = getCenterPoint();
+    63          double radius = getRadius();
+    64
+    65          if (!Double.isNaN(loc.getX())) {
+    66              double x = loc.getX() - centerPoint.getX();
+    67              double y = loc.getY() - centerPoint.getY();
+    68              double latitude = y / radius;
+    69              double longitude = centerCoordinate.getX() + (x / radius);
+    70              coordinate.setLocation(longitude, latitude);
+    71              normalizeCoordinate(coordinate);
+    72          }
+    73
+    74          return coordinate;
+    75      }
+    76
+    77      /***
+    78       * Get location for specified coordinate in radians
+    79       * @param coordinate Point2D longitude and latitude of coordinate in radians
+    80       * @return Point2D Screen location of the coordinate
+    81       * /
+    82      public Point2D getLocationForCoordinate(Point2D coordinate) {
+    83          Point2D.Double location = new Point2D.Double(Double.NaN, Double.NaN);
+    84          Point2D centerPoint = getCenterPoint();
+    85          Point2D centerCoordinate = getCenterCoordinate();
+    86          double radius = getRadius();
+    87
+    88          if (!Double.isNaN(coordinate.getX())) {
+    89              double lonDiff = normalizeLongitude(coordinate.getX()
+    90                  - centerCoordinate.getX());
+    91              double x = centerPoint.getX() + (radius * lonDiff);
+    92              double y = radius * coordinate.getY();
+    93              location.setLocation(x, y);
+    94          }
+    95
+    96          return location;
+    97      }
+    98
+    99      /***
+    100      * Get overlay grid for map
+    101      * @return mapOverlay GeneneralPath
+    102      * /
+    103     public GeneralPath getOverlayGridPath() {
+    104         GeneralPath overlayGridPath = new GeneralPath();
+    105         double radius = getRadius();
+    106         Point2D centerCoordinate = getCenterCoordinate();
+    107         Point2D centerPoint = getCenterPoint();
+    108         float mark = (float) (radius / 360.0);
+    109         double latLim = getLatitudeRange() / 2.0;
+    110         double overlayGridLatitudeIncrement = getOverlayGridLatitudeIncrement();
+    111         double overlayGridIncrement = getOverlayGridIncrement();
+    112         double overlayGridLongitudeIncrement
+    113             = getOverlayGridLongitudeIncrement();
+    114
+    115         // Create latitude lines
+    116         for (double lat = -latLim; lat <= latLim;
+    117                 lat += overlayGridLatitudeIncrement) {
+    118             float y = (float) (radius * lat);
+    119
+    120             for (double lon = -Math.PI; lon <= Math.PI;
+    121                     lon += overlayGridIncrement) {
+    122                 double lonDiff = normalizeLongitude(lon
+    123                     - centerCoordinate.getX());
+    124                 float x = (float) (centerPoint.getX() + (radius * lonDiff));
+    125                 overlayGridPath.moveTo(x - mark, y);
+    126                 overlayGridPath.lineTo(x + mark, y);
+    127                 overlayGridPath.moveTo(x, y - mark);
+    128                 overlayGridPath.lineTo(x, y + mark);
+    129             }
+    130         }
+    131
+    132         // Create longitude lines
+    133         for (double lon = -Math.PI; lon <= Math.PI;
+    134                 lon += overlayGridLongitudeIncrement) {
+    135             double lonDiff = normalizeLongitude(lon - centerCoordinate.getX());
+    136             float x = (float) (centerPoint.getX() + (radius * lonDiff));
+    137
+    138             for (double lat = -latLim; lat <= latLim;
+    139                     lat += overlayGridIncrement) {
+    140                 float y = (float) (radius * lat);
+    141                 overlayGridPath.moveTo(x - mark, y);
+    142                 overlayGridPath.lineTo(x + mark, y);
+    143                 overlayGridPath.moveTo(x, y - mark);
+    144                 overlayGridPath.lineTo(x, y + mark);
+    145             }
+    146         }
+    147
+    148         return overlayGridPath;
+    149     }
+    150
+    151     /***
+    152      * Get name of the projection
+    153      * @return ProjectionName
+    154      * /
+    155     public ProjectionName getProjectionName() {
+    156         return ProjectionName.EQUIDISTANT_CYLINDRICAL;
+    157     }
+    */
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/EquidistantCylindrical.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ViewPortData.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ViewPortData.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ViewPortData.java	(revision 10281)
@@ -0,0 +1,330 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.Extent;
+
+import java.awt.Dimension;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Dimension2D;
+import java.awt.geom.Point2D;
+
+import java.text.DecimalFormat;
+
+
+/**
+ * Datos de vista sobre las capas.
+ *
+ * Mantiene un conjunto de datos necesarios, que describen el modo de
+ * ver las capas actual.
+ *
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class ViewPortData implements Projected {
+    /**
+     * Tipo de proyección de la vista.
+     */
+    IProjection proj = null;
+
+    /**
+     * Sistema de coordenadas de la vista.
+     */
+    IProjection cs = null;
+
+    /**
+     * Amplitud de la vista, en coordenadas proyectadas.
+     */
+    Extent extent = null;
+
+    /**
+     * Tamaño de la vista, en coordenadas de dispositivo.
+     */
+    Dimension2D size = null;
+
+    /**
+     * Transformación afín usada en la vista actual.
+     */
+    public AffineTransform mat = null;
+
+    /**
+     * Resolución (Puntos por pulgada) de la vista actual.
+     * Se necesita para los cálculos de escala geográfica.
+     */
+    int dpi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution();
+
+    public ViewPortData() {
+    }
+
+    public ViewPortData(IProjection proj, Extent extent, Dimension2D size) {
+        this.proj = proj;
+        this.extent = extent;
+        this.size = size;
+        mat = new AffineTransform();
+        mat.scale(1.0, -1.0);
+    }
+
+    public IProjection getProjection() {
+        return proj;
+    }
+
+    public void setProjection(IProjection proj) {
+        this.proj = proj;
+    }
+
+    public void reProject(ICoordTrans rp) {
+        // TODO metodo reProject pendiente de implementar
+    }
+
+    public void setCoordSys(IProjection cs) {
+        this.cs = cs;
+    }
+
+    //public void setCoordTrans(ICoordTrans ct) { this.ct = ct; }
+    public AffineTransform getMat() {
+        return mat;
+    }
+
+    public void setMat(AffineTransform mat) {
+        this.mat = mat;
+    }
+
+    public Object clone() {
+        ViewPortData vp = new ViewPortData();
+
+        if (mat != null) {
+            vp.mat = new AffineTransform(mat);
+        }
+
+        if (extent != null) {
+            vp.extent = new Extent(extent);
+        }
+
+        vp.proj = proj;
+        vp.size = size;
+        vp.dpi = dpi;
+
+        return vp;
+    }
+
+    public double getWidth() {
+        return size.getWidth();
+    }
+
+    public double getHeight() {
+        return size.getHeight();
+    }
+
+    /**
+     *
+     */
+    public Dimension2D getSize() {
+        return size;
+    }
+
+    public void setSize(double w, double h) {
+        setSize(new Dimension((int) w, (int) h));
+    }
+
+    public void setSize(Dimension2D sz) {
+        size = sz;
+        reExtent();
+    }
+
+    public Extent getExtent() {
+        return extent;
+    }
+
+    public void setExtent(Dimension2D sz) {
+        Point2D.Double pt0 = new Point2D.Double(0, 0);
+        Point2D.Double ptSz = new Point2D.Double(sz.getWidth(), sz.getHeight());
+
+        try {
+            mat.inverseTransform(pt0, pt0);
+            mat.inverseTransform(ptSz, ptSz);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        extent = new Extent(pt0, ptSz);
+    }
+
+    public void reExtent() {
+        setExtent(size);
+    }
+
+    public void setDPI(int dpi) {
+        this.dpi = dpi;
+    }
+
+    public int getDPI() {
+        return this.dpi;
+    }
+
+    /**
+     * zoom a un marco.
+     *
+     * @param extent
+     */
+    public void zoom(Extent extent) {
+        double[] scale = extent.getScale(getWidth(), getHeight());
+        double escala = Math.min(scale[0], scale[1]);
+
+        mat.setToIdentity();
+        mat.scale(escala, -escala);
+        mat.translate(-extent.minX(), -extent.maxY());
+        this.extent = extent;
+        reExtent();
+    }
+
+    /**
+     * zoom centrado en un punto.
+     *
+     * @param zoom
+     * @param pt
+     */
+    public void zoom(double zoom, Point2D pt) {
+        zoom(zoom, zoom, pt);
+    }
+
+    public void zoom(double zx, double zy, Point2D pt) {
+        centerAt(pt);
+        mat.scale(zx, zy);
+        centerAt(pt);
+        reExtent();
+    }
+
+    /**
+     * Zoom a una escala (geográfica);
+     *
+     * @param scale
+     */
+    public void zoomToGeoScale(double scale) {
+        double actual = getGeoScale();
+        double f = actual / scale;
+        zoomToCenter(f);
+    }
+
+    /**
+     * Zoom a una escala (geográfica);
+     *
+     * @param scale
+     */
+    public void zoomToCenter(double f) {
+        Point2D.Double ptCenter = new Point2D.Double(getWidth() / 2.0,
+                                                     getHeight() / 2.0);
+
+        try {
+            mat.inverseTransform(ptCenter, ptCenter);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        zoom(f, ptCenter);
+    }
+
+    /**
+     * Centrar en un punto.
+     *
+     * @param pt
+     */
+    public void centerAt(Point2D pt) {
+        Point2D.Double ptCenter = new Point2D.Double(getWidth() / 2.0,
+                                                     getHeight() / 2.0);
+
+        try {
+            mat.inverseTransform(ptCenter, ptCenter);
+            mat.translate(ptCenter.x - pt.getX(), ptCenter.y - pt.getY());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        reExtent();
+    }
+
+    /**
+     * Desplaza la vista actual.
+     *
+     * @param pt
+     */
+    public void pan(Point2D ptIni, Point2D ptFin) {
+        mat.translate(ptFin.getX() - ptIni.getX(), ptFin.getY() - ptIni.getY());
+        reExtent();
+    }
+
+    public Point2D getCenter() {
+        Point2D.Double ptCenter = new Point2D.Double(getWidth() / 2.0,
+                                                     getHeight() / 2.0);
+
+        try {
+            mat.inverseTransform(ptCenter, ptCenter);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return ptCenter;
+    }
+
+    /**
+     * Escala Geográfica.
+     *
+     * @param dpi resolucion en puntos por pulgada
+     */
+    public double getGeoScale() {
+        /* // TODO Actulizarlo para Geotools2
+        double scale = 0.0;
+        if (proj.getClass() == UtmZone.class) { // UTM;
+                scale = (extent.maxX()-extent.minX())*        // metros
+                        (dpi / 2.54 * 100.0)/                                // px / metro
+                        getWidth();                                                        // pixels
+        } else if (proj.getClass() == Geodetic.class) { // Geodetic
+                scale = (extent.maxX()-extent.minX())*                // grados
+                        // 1852.0 metros x minuto de meridiano
+                        (dpi / 2.54 * 100.0 * 1852.0 * 60.0)/        // px / metro
+                        getWidth();                                                                // pixels
+        } else if (proj.getClass() == Mercator.class) { // Mercator
+                Projection prj = Geodetic.getProjection((Ellipsoid) proj.getDatum());
+                GeoPoint pt1 = (GeoPoint) prj.createPoint(1.0,0.0);
+                GeoPoint pt2 = (GeoPoint) prj.createPoint(2.0,0.0);
+                ProjPoint ppt1 = (ProjPoint) proj.createPoint(0.0, 0.0);
+                ProjPoint ppt2 = (ProjPoint) proj.createPoint(0.0, 0.0);
+                ((Mercator) proj).fromGeo(pt1, ppt1);
+                ((Mercator) proj).fromGeo(pt2, ppt2);
+                //scale = ppt2.getX()-ppt1.getX();
+                scale =  ((extent.maxX()-extent.minX())/ (ppt2.getX()-ppt1.getX()) ) *
+                //scale = ((extent.maxX()-extent.minX())/ getWidth());// *
+                        (dpi / 2.54 * 100.0 * 1852.0 * 60.0) /
+                        getWidth();
+        } */
+        return proj.getScale(extent.minX(), extent.maxX(), getWidth(), dpi);
+    }
+
+    public String getGeoScaleAsString(String fmt) {
+        DecimalFormat format = new DecimalFormat(fmt);
+
+        return "1:" + format.format(getGeoScale());
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/ViewPortData.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projection.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projection.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projection.java	(revision 10281)
@@ -0,0 +1,167 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
+
+
+abstract public class Projection implements IProjection {
+    public static int NORTH = 0;
+    public static int SOUTH = 1;
+    static String name = "Sin Proyeccion";
+    static String abrev = "None";
+    private static final Color basicGridColor = new Color(64, 64, 64, 128);
+    Color gridColor = basicGridColor;
+    Ellipsoid eli = Ellipsoid.hayford;
+    Graticule grid;
+
+    public Projection() {
+        eli = Ellipsoid.hayford;
+    }
+
+    public Projection(Ellipsoid e) {
+        eli = e;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    abstract public String getAbrev();
+
+    public IDatum getDatum() {
+        return eli;
+    }
+
+    public double[] getElliPar() {
+        return eli.getParam();
+    }
+
+    abstract public Point2D createPoint(double x, double y);
+
+    public Point2D createPoint(Point2D pt) {
+        return createPoint(pt.getX(), pt.getY());
+    }
+
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("UTM") >= 0) {
+            return UtmZone.getProjectionByName(eli, name);
+        }
+
+        if (name.indexOf("GEO") >= 0) {
+            return Geodetic.getProjectionByName(eli, name);
+        }
+
+        if (name.indexOf("MERC") >= 0) {
+            return Mercator.getProjectionByName(eli, name);
+        }
+
+        return null;
+    }
+
+    public ReProjection getReproyectionTo(Projection proj) {
+        ReProjection rp = new ReProjection(this, proj);
+
+        return rp;
+    }
+
+    abstract public Point2D toGeo(Point2D pt);
+
+    abstract public Point2D fromGeo(Point2D gPt, Point2D mPt);
+
+    public void setGridColor(Color c) {
+        gridColor = c;
+    }
+
+    public Color getGridColor() {
+        return gridColor;
+    }
+
+    public static String coordToString(double coord, String fmt, boolean isLat) {
+        String txt = fmt;
+        int donde;
+        donde = txt.indexOf("%G");
+
+        if (donde >= 0) {
+            int deg = (int) coord;
+
+            if ((fmt.indexOf("%N") >= 0) && (deg < 0)) {
+                deg = -deg;
+            }
+
+            txt = txt.substring(0, donde) + Integer.toString(deg) +
+                  txt.substring(donde + 2);
+        }
+
+        donde = txt.indexOf("%M");
+
+        if (donde >= 0) {
+            int min = (int) ((coord - (int) coord) * 60.0) % 60;
+
+            if ((fmt.indexOf("%N") >= 0) && (min < 0)) {
+                min = -min;
+            }
+
+            txt = txt.substring(0, donde) + Integer.toString(min) +
+                  txt.substring(donde + 2);
+            ;
+        }
+
+        donde = txt.indexOf("%N");
+
+        if (donde >= 0) {
+            String t = "";
+
+            if (isLat) {
+                if (coord > 0) {
+                    t = "N";
+                } else if (coord < 0) {
+                    t = "S";
+                }
+            } else {
+                if (coord > 0) {
+                    t = "E";
+                } else if (coord < 0) {
+                    t = "W";
+                }
+            }
+
+            txt = txt.substring(0, donde) + t + txt.substring(donde + 2);
+            ;
+        }
+
+        return txt;
+    }
+
+    abstract public void drawGrid(Graphics2D g, ViewPortData vp);
+    
+    public boolean isProjected() {
+    	return false;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Projection.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Mercator.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Mercator.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Mercator.java	(revision 10281)
@@ -0,0 +1,362 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IDatum;
+import org.cresques.cts.IProjection;
+
+import org.cresques.px.Extent;
+
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+
+import java.util.TreeMap;
+
+
+/**
+ * Proyeccion Mercator
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
+ */
+public class Mercator extends Projection {
+    static String name = "Mercator";
+    static String abrev = "Mer";
+    private static TreeMap projPool = new TreeMap();
+    public static final Mercator hayford = new Mercator(Ellipsoid.hayford);
+    public static final Mercator wgs84 = new Mercator(Ellipsoid.wgs84);
+    private double a;
+    private double f;
+    private double b;
+    private double Eps2;
+    private double EE2;
+    private double EE3;
+    private double Epps2;
+
+    public Mercator(Ellipsoid eli) {
+        super(eli);
+        grid = new Graticule(this);
+
+        double[] p = eli.getParam();
+        a = p[1];
+        f = 1 / p[2];
+        b = p[3];
+
+        Eps2 = p[5];
+        EE2 = Eps2 * Eps2;
+        EE3 = EE2 * Eps2;
+        Epps2 = p[7];
+    }
+
+    public String getAbrev() {
+        return abrev;
+    }
+
+    public static Mercator getProjection(Ellipsoid eli) {
+        Mercator ret = null;
+
+        if (projPool.containsKey(eli.getName())) {
+            ret = (Mercator) Mercator.projPool.get(eli.getName());
+        } else {
+            if (eli == Ellipsoid.hayford) {
+                ret = hayford;
+            } else if (eli == Ellipsoid.wgs84) {
+                ret = wgs84;
+            } else {
+                ret = new Mercator(eli);
+            }
+
+            projPool.put(eli.getName(), ret);
+        }
+
+        return ret;
+    }
+
+    /**
+     *
+     */
+    public static IProjection getProjectionByName(IDatum eli, String name) {
+        if (name.indexOf("ME") < 0) {
+            return null;
+        }
+
+        return getProjection((Ellipsoid) eli);
+    }
+
+    /**
+     *
+     */
+    public Point2D createPoint(double x, double y) {
+        return new ProjPoint(this, x, y);
+    }
+
+    /**
+     *
+     * @param uPt
+     * @return
+     */
+    public Point2D toGeo(Point2D mPt) {
+        GeoPoint gPt = new GeoPoint();
+
+        return toGeo((ProjPoint) mPt, gPt);
+    }
+
+    /**
+     *
+     * @param mPt
+     * @param gPt
+     * @return
+     */
+    public GeoPoint toGeo(ProjPoint mPt, GeoPoint gPt) {
+        double t = Math.pow(Math.E, (-mPt.getY() / a));
+
+        double x1;
+        double x = ((Math.PI / 2) - (2 * Math.atan(t)));
+
+        do {
+            x1 = x;
+            x = (Math.PI / 2) -
+                (2 * Math.atan(t * (Math.pow((1 -
+                                             (Math.sqrt(Eps2) * Math.sin(x))) / (1 +
+                                             (Math.sqrt(Eps2) * Math.sin(x))),
+                                             (Math.sqrt(Eps2) / 2)))));
+        } while ((x - x1) > 0.0000000001);
+
+        double lat = (Math.PI / 2) -
+                     (2 * Math.atan(t * (Math.pow((1 -
+                                                  (Math.sqrt(Eps2) * Math.sin(x))) / (1 +
+                                                  (Math.sqrt(Eps2) * Math.sin(x))),
+                                                  (Math.sqrt(Eps2) / 2)))));
+
+        double lng = mPt.getX() / a;
+        gPt.setLocation((lng * 180.0) / Math.PI, (lat * 180.0) / Math.PI);
+        gPt.proj = Geodetic.getProjection(((Projection) mPt.proj).eli);
+
+        return gPt;
+    }
+
+    /**
+     *
+     * @param gPt
+     * @param uPt
+     * @return
+     */
+    public Point2D fromGeo(Point2D gPt, Point2D mPt) {
+        double sl = Math.sin(((GeoPoint) gPt).Latitude.ToRadians());
+        double cl = Math.cos(((GeoPoint) gPt).Latitude.ToRadians());
+        double tl = (1 + sl) / (1 - sl);
+
+        // Calcula Easting
+        double x = a * ((GeoPoint) gPt).Longitude.ToRadians();
+
+        // Calcula Northing
+        double y = Math.pow(((1 - (Math.sqrt(Eps2) * sl)) / (1 +
+                            (Math.sqrt(Eps2) * sl))), (Math.sqrt(Eps2)));
+        y = a / 2 * (Math.log(tl * y));
+        ((ProjPoint) mPt).setLocation(x, y);
+        ((ProjPoint) mPt).proj = this;
+
+        return mPt;
+    }
+
+    // Calcula el step en función del zoom
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat) {
+        // calculo del step en función del zoom
+        Point2D pt1 = extent.getMin();
+
+        double step = 3.0;
+        double x = pt1.getX();
+        double dist = 0.0;
+        ProjPoint ppt1;
+        ProjPoint ppt2;
+        GeoPoint gp1;
+        GeoPoint gp2;
+        ppt1 = (ProjPoint) createPoint(x, pt1.getY());
+        ppt2 = (ProjPoint) createPoint(x + 100, pt1.getY() - 100);
+        gp1 = (GeoPoint) ppt1.toGeo();
+        gp2 = (GeoPoint) ppt2.toGeo();
+
+        /*        GeoPoint gp1, gp2;
+                gp1 = (GeoPoint) createPoint( x, (int) pt1.getY());
+                mat.transform(gp1, gp1);
+                gp2 = (GeoPoint) createPoint(gp1.getX()+100, gp1.getY()-100);
+                try {
+                        mat.inverseTransform(gp2, gp2);
+                } catch (NoninvertibleTransformException e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                }
+                dist = (gp2.getX()-x);
+                System.err.println("distX = " + dist);
+
+                if (dist > 30.0) {                         step = 30.0;
+                } else if (dist > 18.0) {         step = 18.0;
+                } else if (dist > 12.0) {        step = 12.0;
+                } else if (dist > 6.0) {        step = 6.0;
+                } else if (dist > 3.0) {        step = 3.0;
+                } else if (dist > 2.0) {        step = 2.0;
+                } else if (dist > 1.0) {        step = 1.0;
+                } else if (dist > .5) {                step =.5;
+                } else if (dist > .25) {        step =.25;
+                } else if (dist > 1.0/60*5.0) { step = 1.0/60*5.0;
+                } else {                                        step = 1.0/60*2.0;
+                }
+                        //step = 1.0;
+                */
+        generateGrid(g, extent, mat, step);
+    }
+
+    private void generateGrid(Graphics2D g, Extent extent, AffineTransform mat,
+                              double step) {
+        grid = new Graticule(this);
+
+        Point2D pt1 = extent.getMin();
+        Point2D pt2 = extent.getMax();
+        Point2D.Double ptx = new Point2D.Double(0.0, 0.0);
+        GeoPoint gp1;
+        GeoPoint gp2;
+        ProjPoint up1 = (ProjPoint) createPoint(0, 0);
+        ProjPoint up2 = (ProjPoint) createPoint(0, 0);
+        Geodetic geoProj = Geodetic.getProjection((Ellipsoid) getDatum());
+        double xAxis;
+        double yAxis;
+
+        // Calculos para el texto
+        FontMetrics fm = g.getFontMetrics();
+        int fmWidth = 0;
+        int fmHeight = fm.getAscent();
+        String tit = "";
+        String fmt = "%Gº%N";
+
+        if (step < 1.0) {
+            fmt = "%Gº%M'%N";
+        }
+
+        // Lineas Horzontales
+        gp1 = (GeoPoint) toGeo(new ProjPoint(pt1));
+        gp2 = (GeoPoint) toGeo(new ProjPoint(pt2));
+        xAxis = gp1.getX();
+        yAxis = gp2.getY();
+        System.err.println(name + ": ViewPort Extent = (" + gp1 + "," + gp2 +
+                           ")");
+
+        double xMin = (int) gp1.getX() - 1.0;
+        xMin -= (xMin % step);
+
+        double xMax = (int) gp2.getX() + 1.0;
+        double yMin = (int) gp1.getY() - 1.0;
+        yMin -= (yMin % step);
+
+        double yMax = (int) gp2.getY() + 1.0;
+
+        if (xMin < -180.0) {
+            xMin = -180.0;
+        }
+
+        if (xMax > 180.0) {
+            xMax = 180.0;
+        }
+
+        if (yMin < -80.0) {
+            yMin = -80.0;
+        }
+
+        if (yMax > 80.0) {
+            yMax = 80.0;
+        }
+
+        if (xAxis < -180.0) {
+            xAxis = -180.0;
+        }
+
+        if (yAxis > 80.0) {
+            yAxis = 80.0;
+        }
+
+        for (double y = yMin; y <= yMax; y += step) {
+            gp1 = (GeoPoint) geoProj.createPoint(xAxis, y);
+            gp2 = (GeoPoint) geoProj.createPoint(xMax, y);
+            fromGeo(gp1, up1);
+            fromGeo(gp2, up2);
+            mat.transform(up1, up1);
+            mat.transform(up2, up2);
+            grid.addLine(up1, up2);
+
+            tit = coordToString(y, fmt, true);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(up1.getX() + 3, up1.getY() - 2);
+            grid.addText(tit, ptx);
+        }
+
+        // Lineas Verticales
+        for (double x = xMin; x <= xMax; x += step) {
+            gp1 = (GeoPoint) geoProj.createPoint(x, yMin);
+            gp2 = (GeoPoint) geoProj.createPoint(x, yAxis);
+            fromGeo(gp1, up1);
+            fromGeo(gp2, up2);
+            mat.transform(up1, up1);
+            mat.transform(up2, up2);
+            grid.addLine(up1, up2);
+
+            tit = coordToString(x, fmt, false);
+
+            //fmWidth = fm.stringWidth(tit);
+            ptx.setLocation(up2.getX() + 3, up2.getY() + fmHeight);
+            grid.addText(tit, ptx);
+        }
+    }
+
+    public void drawGrid(Graphics2D g, ViewPortData vp) {
+        generateGrid(g, vp.getExtent(), vp.getMat());
+        grid.setColor(gridColor);
+        grid.draw(g, vp);
+    }
+
+    /* (non-Javadoc)
+     * @see org.cresques.cts.IProjection#getScale(double, double, double, double)
+     */
+    public double getScale(double minX, double maxX, double width, double dpi) {
+        Projection prj = Geodetic.getProjection((Ellipsoid) getDatum());
+        GeoPoint pt1 = (GeoPoint) prj.createPoint(1.0, 0.0);
+        GeoPoint pt2 = (GeoPoint) prj.createPoint(2.0, 0.0);
+        ProjPoint ppt1 = (ProjPoint) createPoint(0.0, 0.0);
+        ProjPoint ppt2 = (ProjPoint) createPoint(0.0, 0.0);
+        fromGeo(pt1, ppt1);
+        fromGeo(pt2, ppt2);
+
+        //scale = ppt2.getX()-ppt1.getX();
+        double scale = (((maxX - minX) / (ppt2.getX() - ppt1.getX())) * 
+        //scale = ((extent.maxX()-extent.minX())/ getWidth());// *
+        (dpi / 2.54 * 100.0 * 1852.0 * 60.0)) / width;
+
+        return scale;
+    }
+
+	public ICoordTrans getCT(IProjection dest) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Mercator.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Polygon2D.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Polygon2D.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Polygon2D.java	(revision 10281)
@@ -0,0 +1,104 @@
+/*
+ * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
+ *
+ * Copyright (C) 2004-5.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ * cresques@gmail.com
+ */
+package org.cresques.geo;
+
+import java.awt.Graphics2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+
+/**
+ * Clase que representa un polígono 2D
+ * @author "Luis W. Sevilla" <sevilla_lui@gva.es>
+ */
+public class Polygon2D extends Vector {
+    GeneralPath gp = null;
+
+    public Polygon2D() {
+        super();
+        gp = null;
+    }
+
+    /**
+     * Añade un vertice al po?ígono
+     * @param pt        punto 2D que representa el vertice añadido
+     */
+    public void addPoint(Point2D pt) {
+        super.add(pt);
+    }
+
+    /**
+     * Dibuja el polígono
+     * @param g        Graphics sobre el que dibuja
+     * @param vp        ViewPort con la vista
+     */
+    public void draw(Graphics2D g, ViewPortData vp) {
+        newGP(vp);
+        g.draw(gp);
+
+        //g.draw(new Line2D.Double(pt,pt0));
+    }
+
+    /**
+     *
+     * @param g
+     * @param vp
+     */
+    public void fill(Graphics2D g, ViewPortData vp) {
+        newGP(vp);
+        g.fill(gp);
+    }
+
+    /**
+     *
+     * @param vp
+     */
+    private void newGP(ViewPortData vp) {
+        //if (gp != null) return;
+        gp = new GeneralPath();
+
+        Point2D pt0 = null;
+        Point2D pt = null;
+        Point2D pt1 = null;
+        Point2D.Double ptTmp = new Point2D.Double(0.0, 0.0);
+        Iterator iter = iterator();
+
+        while (iter.hasNext()) {
+            pt1 = (Point2D) iter.next();
+            vp.mat.transform(pt1, ptTmp);
+
+            if (pt0 == null) {
+                pt0 = ptTmp;
+                gp.moveTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            } else {
+                gp.lineTo((float) ptTmp.getX(), (float) ptTmp.getY());
+            }
+        }
+
+        gp.closePath();
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo/Polygon2D.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques/geo
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf



Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org/cresques
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf



Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src/org
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf



Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src
___________________________________________________________________
Added: svn:ignore
   + *.dfPackage
*.wmf


Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cvsignore	(revision 10281)
@@ -0,0 +1,3 @@
+doc-files
+cms.jar
+Thumbs.db

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/build.xml
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/build.xml	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/build.xml	(revision 10281)
@@ -0,0 +1,82 @@
+<project name="CMS for Java" default="dist" basedir=".">
+    <description>
+        Genera el jar con CMS y sus dependencias
+    </description>
+  <!-- set global properties for this build -->
+	<property name="src" location="src"/>
+	<property name="lib" location="lib"/>
+	<property name="build" location="bin"/>
+	<property name="dist"  location="dist"/>
+	<property name="jar" value="cms"/>
+	<property name="targetDir" location="../libFMap/lib"/>
+	<property name="compile-classpath" value="${lib}/geoapi-2.0.jar:${lib}/geojava.jar:${lib}/geotiff-jai.jar:${lib}/gt2-legacy.jar:${lib}/gt2-main.jar:${lib}/jecw-0.0.1.jar:${lib}/jecwcompress-0.1.0.jar:${lib}/jgdal-0.1.0.jar:${lib}/jmgeoraster.jar:${lib}/jmrsid-0.0.2.jar:${lib}/jogr.jar:${lib}/kxml2.jar:${lib}/tar.jar" />
+
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${build}"/>
+  </target>
+
+  <target name="dist" depends="init"
+        description="generate the distribution" >
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+
+    <!-- Put everything in ${build} into the cms-${DSTAMP}.jar file --> 
+    <jar jarfile="${dist}/${jar}.jar" basedir="${build}"/>
+    <jar jarfile="${dist}/${jar}.jar" basedir="." includes = "images/*.gif" update="true" />
+    <copy todir="${dist}">
+    	<fileset dir="./lib" includes="*.jar"/>
+    </copy>
+    <!--<copy todir="${targetDir1}/">
+    	<fileset dir="${dist}" includes="**/**"/>
+    </copy>
+    <copy todir="${targetDir2}/">
+    	<fileset dir="${dist}" includes="${jar}.jar"/>
+    </copy> -->
+    <move todir="${targetDir}/">
+    	<fileset dir="${dist}" includes="**/**"/>
+    </move>
+  </target>
+
+	<target name="batch-build"
+			description="compile the sources, create the jar file"
+			depends="compile,create-jar,move-to-fmap">
+	</target>
+	
+	<target name="compile" description="compile the source" >
+		<!-- Compile the Java code from ${src} to ${build} -->
+		<mkdir dir="${build}" />
+		<javac 	srcdir="${src}"
+				destdir="${build}"
+				classpath="${compile-classpath}"/>
+	</target>
+	
+	<target name="move-to-fmap" description="Move jars and required libraries to fmap">
+	    <copy todir="${dist}">
+	    	<fileset dir="./lib" includes="*.jar"/>
+	    </copy>
+	    <copy todir=".">
+	    	<fileset dir="${dist}" includes="${jar}.jar"/>
+	    </copy>
+	    <move todir="${targetDir}/">
+	    	<fileset dir="${dist}" includes="**/**"/>
+	    </move>
+	</target>
+	
+	<target name="create-jar" description="Crea el jar de la aplicacion">
+		<mkdir dir="${dist}"/>
+	    <jar jarfile="${dist}/${jar}.jar" basedir="${build}"/>
+	    <jar jarfile="${dist}/${jar}.jar" basedir="." includes = "images/*" update="true" />
+	</target>
+
+	<target name="clean"
+			description="clean up" >
+		<!-- Delete the ${build} and ${dist} directory trees -->
+		<delete dir="${build}"/>
+		<delete dir="${dist}"/>
+		<delete file="${jar}.jar"/>
+	</target>
+</project>
+

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/build.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cdtproject
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cdtproject	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cdtproject	(revision 10281)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject>
+<data/>
+</cdtproject>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.cdtproject
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.classpath
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.classpath	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.classpath	(revision 10281)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="lib" path="lib/geojava.jar"/>
+	<classpathentry kind="lib" path="lib/jmgeoraster.jar"/>
+	<classpathentry kind="lib" path="lib/geotiff-jai.jar"/>
+	<classpathentry sourcepath="C:/downloads/java/tar/javatar-2.5/source" kind="lib" path="lib/tar.jar"/>
+	<classpathentry kind="lib" path="lib/gt2-legacy.jar"/>
+	<classpathentry kind="lib" path="lib/gt2-main.jar"/>
+	<classpathentry kind="lib" path="lib/jogr.jar"/>
+	<classpathentry kind="lib" path="lib/geoapi-2.0.jar"/>
+	<classpathentry kind="lib" path="lib/jecw-0.0.1.jar"/>
+	<classpathentry kind="lib" path="lib/jmrsid-0.0.2.jar"/>
+	<classpathentry kind="lib" path="lib/jecwcompress-0.1.0.jar"/>
+	<classpathentry kind="lib" path="lib/kxml2.jar"/>
+	<classpathentry kind="src" path="src-test"/>
+	<classpathentry kind="lib" path="lib/junit.jar"/>
+	<classpathentry kind="lib" path="lib/jfreechart-1.0.1.jar"/>
+	<classpathentry kind="lib" path="lib/jcommon-1.0.0.jar"/>
+	<classpathentry sourcepath="/libInternationalization" kind="lib" path="lib/gvsig-i18n.jar"/>
+	<classpathentry kind="lib" path="lib/jfreechart-1.0.1-demo.jar"/>
+	<classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
+	<classpathentry kind="lib" path="lib/gvsig-ui.jar"/>
+	<classpathentry kind="lib" path="lib/jgdal-0.6.0.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.classpath
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.project
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.project	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.project	(revision 10281)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Cq CMS for Java</name>
+	<comment></comment>
+	<projects>
+		<project>CIT MapView</project>
+		<project>CqMDT</project>
+		<project>jmGRasterLib</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/.project
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestDataGrid.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestDataGrid.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestDataGrid.java	(revision 10281)
@@ -0,0 +1,116 @@
+/*
+ * Created on 9-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import junit.framework.TestCase;
+
+import org.cresques.cts.IProjection;
+import org.cresques.cts.ProjectionPool;
+import org.cresques.cts.gt2.CSDatum;
+import org.cresques.cts.gt2.CSUTM;
+import org.cresques.cts.gt2.CoordSys;
+import org.cresques.io.GeoRasterFile;
+
+/**
+ * Este test prueba el acceso a datos a traves de un grid
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TestDataGrid extends TestCase{
+
+	private String path1 = "/home/imagenes/p198r033_7t20010601_z31_nn10.tif";
+	private String path2 = "/home/imagenes/p198r033_7t20010601_z31_nn20.tif";
+	private String path3 = "/home/imagenes/p198r033_7t20010601_z31_nn30.tif";
+	private String path4 = "/home/imagenes/03AUG23153350-M2AS-000000122423_01_P001-BROWSE.jpg";
+	private String path5 = "/home/imagenes/q101866.sid";
+	private String path6 = "/home/imagenes/CastilloEcwETRS89.ecw";
+	
+	
+	private GeoRasterFile f1 = null;
+	private GeoRasterFile f2 = null;
+	private GeoRasterFile f3 = null;
+	private GeoRasterFile f4 = null;
+	private GeoRasterFile f5 = null;
+	private GeoRasterFile f6 = null;
+	
+	private Grid grid = null;
+	
+	public void setUp() {
+		System.out.println("TestGridMultiFile running...");
+		//CoordSys cs  = new CoordSys(CSDatum.ed50);
+		//f1 = GeoRasterFile.openFile(null, path1);
+		//f2 = GeoRasterFile.openFile(null, path2);
+		//f3 = GeoRasterFile.openFile(null, path3);
+		//f4 = GeoRasterFile.openFile(null, path4);
+		//f5 = GeoRasterFile.openFile(null, path5);
+		f6 = GeoRasterFile.openFile(null, path6);
+		
+		/*grid = new Grid(f1);
+		grid.addFile(f2);
+		grid.addFile(f3);*/
+		//grid = new Grid(f4);
+		//grid = new Grid(f5);
+		grid = new Grid(f6);
+	}
+	
+	public void testStack(){
+		int[] drawableBands = {0, 1, 2};
+		int line = 40;
+		int x = 0;
+		int y = 0;
+		int w = 350;
+		int h = 350;
+		
+		grid.addDrawableBands(drawableBands);
+		//f1, f2, f3
+		//grid.setAreaOfInterest(142671, 4423513.5, 85072, 76294.5);
+		
+		//f4
+		//grid.setAreaOfInterest(644850.0, 4925250.0, 2088.0, 2088.0);
+		//grid.setAreaOfInterest(x, y, w, h);
+		
+		//f5
+		//w = 1571;
+		//h = 1571;
+		//grid.setAreaOfInterest(0.0, 0.0, 1571.0, 1571.0);
+		//grid.setAreaOfInterest(x, y, w, h);
+		
+		//f6
+		x = 400;
+		y = 300;
+		w = 400;
+		h = 300;
+		//grid.setAreaOfInterest(517000.0, 4743000.0, 7990.0, 5990.0);
+		grid.setAreaOfInterest(x, y, w, h);
+		
+		RasterBuf raster = grid.getRasterBuf();
+		for(int col = 0; col < h; col++){
+			System.out.print("("+raster.getElemByte(line, col, 0)+" "+raster.getElemByte(line, col, 1)+" "+raster.getElemByte(line, col, 2)+")");
+			if(col%100 == 0)
+				System.out.println();
+		}
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestDataGrid.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestGridMultiFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestGridMultiFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestGridMultiFile.java	(revision 10281)
@@ -0,0 +1,157 @@
+/*
+ * Created on 19-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.data;
+
+import junit.framework.TestCase;
+
+import org.cresques.io.GeoRasterFile;
+
+/**
+ * Este test prueba la gestión de multifichero de la clase GeoRasterMultiFile
+ * y que incorpora un Grid, así como la gestión de bandas que tiene BandList
+ * y que incorpora GeoRasterMultiFile.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TestGridMultiFile extends TestCase{
+
+	private String path1 = "/home/imagenes/p198r033_7t20010601_z31_nn10.tif";
+	private String path2 = "/home/imagenes/p198r033_7t20010601_z31_nn20.tif";
+	private String path3 = "/home/imagenes/p198r033_7t20010601_z31_nn30.tif";
+	private String path4 = "/home/imagenes/043_269_mer_orto.img";
+	
+	private GeoRasterFile f1 = null;
+	private GeoRasterFile f2 = null;
+	private GeoRasterFile f3 = null;
+	private GeoRasterFile f4 = null;
+	
+	private Grid grid = null;
+	
+	public void setUp() {
+		System.out.println("TestGridMultiFile running...");
+		f1 = GeoRasterFile.openFile(null, path1);
+		f2 = GeoRasterFile.openFile(null, path2);
+		f3 = GeoRasterFile.openFile(null, path3);
+		f4 = GeoRasterFile.openFile(null, path4);
+	}
+	
+	public void testStack(){
+	
+		//EL CONSTRUCTOR AÑADE FICHERO 1
+		grid = new Grid(f1);
+		//Comprobación de número y nombre de ficheros
+		String[] fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		assertEquals(fileList.length, 1);
+		assertEquals(fileList[0], path1);
+		//Comprobación de bandas
+		String[] bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 1);
+		assertEquals(bandList[0], path1);
+		
+		//AÑADIMOS FICHERO 2
+		grid.addFile(f2);
+		fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		//Comprobación de número y nombre de ficheros
+		assertEquals(fileList.length, 2);
+		assertEquals(fileList[0], path1);
+		assertEquals(fileList[1], path2);
+		//Comprobación de bandas
+		bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 2);
+		assertEquals(bandList[0], path1);
+		assertEquals(bandList[1], path2);
+		
+		//AÑADIMOS FICHERO 3
+		grid.addFile(f3);
+		fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		//Comprobación de número y nombre de ficheros
+		assertEquals(fileList.length, 3);
+		assertEquals(fileList[0], path1);
+		assertEquals(fileList[1], path2);
+		assertEquals(fileList[2], path3);
+		//Comprobación de bandas
+		bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 3);
+		assertEquals(bandList[0], path1);
+		assertEquals(bandList[1], path2);
+		assertEquals(bandList[2], path3);
+		//Posicion dentro del fichero
+		int[] bandPos = grid.getGeoRasterMultiFile().getBands().getBandPositionList();
+		for(int i = 0; i < bandPos.length; i++)
+			assertEquals(bandPos[i], 0);
+		
+		//ELIMINAMOS FICHERO 2
+		grid.removeFile(f2);
+		fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		//Comprobación de número y nombre de ficheros
+		assertEquals(fileList.length, 2);
+		assertEquals(fileList[0], path1);
+		assertEquals(fileList[1], path3);
+		//Comprobación de bandas
+		bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 2);
+		assertEquals(bandList[0], path1);
+		assertEquals(bandList[1], path3);
+		
+		//ELIMINAMOS FICHERO 1
+		grid.removeFile(f1);
+		fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		//Comprobación de número y nombre de ficheros
+		assertEquals(fileList.length, 1);
+		assertEquals(fileList[0], path3);
+		//Comprobación de bandas
+		bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 1);
+		assertEquals(bandList[0], path3);
+		
+		//ELIMINAMOS FICHERO 3
+		grid.removeFile(f3);
+		fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		//Comprobación de número y nombre de ficheros
+		assertEquals(fileList.length, 0);
+		//Comprobación de bandas
+		bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 0);
+
+		//AÑADIMOS FICHERO 4
+		grid.addFile(f4);
+		fileList = grid.getGeoRasterMultiFile().getNameFileStringList();
+		//Comprobación de número y nombre de ficheros
+		assertEquals(fileList.length, 1);
+		assertEquals(fileList[0], path4);
+		//Comprobación de bandas
+		bandList = grid.getGeoRasterMultiFile().getBands().getBandStringList();
+		assertEquals(bandList.length, 4);
+		assertEquals(bandList[0], path4);
+		assertEquals(bandList[1], path4);
+		assertEquals(bandList[2], path4);
+		assertEquals(bandList[3], path4);
+		//Posicion dentro del fichero
+		bandPos = grid.getGeoRasterMultiFile().getBands().getBandPositionList();
+		for(int i = 0; i < bandPos.length; i++)
+			assertEquals(bandPos[i], i);
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/data/TestGridMultiFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestXMLParser.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestXMLParser.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestXMLParser.java	(revision 10281)
@@ -0,0 +1,78 @@
+/*
+ * Created on 18-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.datastruct;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+public class TestXMLParser {
+
+	public TestXMLParser(){
+		boolean end = false;
+		try{
+			KXmlParser parser = new KXmlParser();
+			parser.setInput(new FileInputStream("/home/maquerol/prueba.rmf"), null);
+			
+			int tag = parser.nextTag();
+			
+			parser.require(KXmlParser.START_TAG, null, "RasterMetaFile");
+			while(!end){
+				tag = parser.next();
+				if (tag == parser.START_TAG){
+					if(tag == parser.TEXT) parser.next();
+					if((parser.getName().equals("Band"))){
+						parser.require(KXmlParser.START_TAG, null, "Band");
+						tag = parser.nextTag();
+						parser.require(KXmlParser.START_TAG, null, "Values");
+						System.out.println(parser.nextText() + "\n");
+						parser.require(KXmlParser.END_TAG, null, "Values");
+						tag = parser.nextTag();
+						parser.require(KXmlParser.END_TAG, null, "Band");
+					}
+					if((tag == parser.END_TAG) && (parser.getName().equals("RasterMetaFile")))
+					end = true;
+				}
+			}
+			//String cadena = parser.nextText();
+			//System.out.println(cadena);
+		}catch(XmlPullParserException e){
+			System.err.println("Exception pull parser");
+		}catch(FileNotFoundException ex){
+			System.err.println("Exception no file");
+		}catch(IOException exc){
+			System.err.println("Exception can't read");
+		}
+	}
+	
+	public static void main(String[] args){
+		TestXMLParser test = new TestXMLParser();
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestXMLParser.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestCreatePaletteFromTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestCreatePaletteFromTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestCreatePaletteFromTable.java	(revision 10281)
@@ -0,0 +1,92 @@
+/*
+ * Created on 17-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.datastruct;
+
+import junit.framework.TestCase;
+
+import org.cresques.io.data.RasterBuf;
+import org.cresques.util.Utilities;
+
+/**
+ * Este test prueba la creación de paletas a partir de una tabla
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TestCreatePaletteFromTable extends TestCase{
+	
+	private Palette palette = new Palette();
+	public Object [][] table = {
+			{new String("clase19"), new Integer(245), new Integer(243), new Integer(239), new Double(9000), new Integer(255)},
+			{new String("clase18"), new Integer(221), new Integer(216), new Integer(207), new Double(7000), new Integer(255)},
+			{new String("clase17"), new Integer(181), new Integer(171), new Integer(155), new Double(4000), new Integer(255)},
+			{new String("clase16"), new Integer(169), new Integer(157), new Integer(139), new Double(3000), new Integer(255)},
+			{new String("clase15"), new Integer(168), new Integer(149), new Integer(120), new Double(2000), new Integer(255)},
+			{new String("clase14"), new Integer(181), new Integer(162), new Integer(133), new Double(1000), new Integer(255)},
+			{new String("clase13"), new Integer(227), new Integer(228), new Integer(135), new Double(500), new Integer(255)},
+			{new String("clase12"), new Integer(157), new Integer(209), new Integer(119), new Double(250), new Integer(255)},
+			{new String("clase11"), new Integer(145), new Integer(191), new Integer(154), new Double(100), new Integer(255)},
+			{new String("clase10"), new Integer(130), new Integer(182), new Integer(140), new Double(1), new Integer(255)},
+			{new String("clase9"), new Integer(201), new Integer(223), new Integer(223), new Double(0), new Integer(255)},
+			{new String("clase8"), new Integer(175), new Integer(209), new Integer(209), new Double(-250), new Integer(255)},
+			{new String("clase7"), new Integer(149), new Integer(195), new Integer(194), new Double(-500), new Integer(255)},
+			{new String("clase6"), new Integer(133), new Integer(180), new Integer(223), new Double(-1000), new Integer(255)},
+			{new String("clase5"), new Integer(106), new Integer(164), new Integer(218), new Double(-2000), new Integer(255)},
+			{new String("clase4"),  new Integer(76), new Integer(146), new Integer(212), new Double(-3000), new Integer(255)},
+			{new String("clase3"),  new Integer(52), new Integer(117), new Integer(184), new Double(-4000), new Integer(255)},
+			{new String("clase2"),  new Integer(36),  new Integer(83), new Integer(126), new Double(-6000), new Integer(255)},
+			{new String("clase1"),  new Integer(24),  new Integer(53),  new Integer(80), new Double(-8000), new Integer(255)},		
+		};
+	
+	public void setUp() {
+		palette.createPaletteFromTable(table, RasterBuf.TYPE_INT);
+	}
+	
+	public void testStack(){
+		int[] argb = Utilities.getARGBFromIntToIntArray(palette.getRGB(-7000));
+		System.out.println(argb[0]+" - "+argb[1]+" - "+argb[2]+" - "+argb[3]);
+		assertEquals(argb[0], 36);
+		assertEquals(argb[1], 83);
+		assertEquals(argb[2], 126);
+		assertEquals(argb[3], 255);
+		argb = Utilities.getARGBFromIntToIntArray(palette.getRGB(-4000));
+		System.out.println(argb[0]+" - "+argb[1]+" - "+argb[2]+" - "+argb[3]);
+		assertEquals(argb[0], 52);
+		assertEquals(argb[1], 117);
+		assertEquals(argb[2], 184);
+		assertEquals(argb[3], 255);
+		argb = Utilities.getARGBFromIntToIntArray(palette.getRGB(-3999));
+		System.out.println(argb[0]+" - "+argb[1]+" - "+argb[2]+" - "+argb[3]);
+		assertEquals(argb[0], 76);
+		assertEquals(argb[1], 146);
+		assertEquals(argb[2], 212);
+		assertEquals(argb[3], 255);
+		argb = Utilities.getARGBFromIntToIntArray(palette.getRGB(2005));
+		System.out.println(argb[0]+" - "+argb[1]+" - "+argb[2]+" - "+argb[3]);
+		assertEquals(argb[0], 169);
+		assertEquals(argb[1], 157);
+		assertEquals(argb[2], 139);
+		assertEquals(argb[3], 255);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestCreatePaletteFromTable.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogramTools.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogramTools.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogramTools.java	(revision 10281)
@@ -0,0 +1,51 @@
+/*
+ * Created on 19-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.datastruct;
+
+import java.io.IOException;
+
+import org.cresques.io.GeoRasterFile;
+
+public class TestHistogramTools {
+
+
+	public static void main (String[] args){
+		int[][]							histogram = new int[3][256];
+		String							grf = "/home/maquerol/prueba.jpg";	
+		HistogramPersistence					tools = new HistogramPersistence();
+		
+		for (int i = 0 ; i < 3 ; i++)
+			for (int j = 0 ; j <= 255 ; j++)
+				histogram[i][j] = (int)(Math.random() * 100);
+		
+		try{
+			tools.makeRMFHistogram(histogram, grf,3);
+		}catch(IOException ex){
+			System.err.println("Error");
+		}
+		System.out.println("Hecho!");
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogramTools.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogram3bandByte.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogram3bandByte.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogram3bandByte.java	(revision 10281)
@@ -0,0 +1,92 @@
+/*
+ * Created on 27-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.io.datastruct;
+
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.Grid;
+
+/**
+ * Este test prueba el acceso a datos a traves de un grid
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TestHistogram3bandByte extends Thread{
+
+	private static boolean	FULL_HISTOGRAM = true;
+	
+	//private String 			path = "/home/imagenes/03AUG23153350-M2AS-000000122423_01_P001-BROWSE.jpg";
+	//private String 			path = "/home/imagenes/wcs16bits.tif";
+	private String 			path = "/home/imagenes/q101866.sid";
+	private GeoRasterFile 	f1 = null;
+	private Grid 			grid = null;
+	private	Histogram 		hist = null;
+	private int[][] 		histArray = null;
+	private int				nPixels = 0;
+	
+	public TestHistogram3bandByte() {
+		System.out.println("TestHistogram3bandByte running...");
+		f1 = GeoRasterFile.openFile(null, path);
+		grid = new Grid(f1);
+		hist = new Histogram(grid);	
+		boolean[] bands = {true, true, true};
+		if(!FULL_HISTOGRAM){
+			hist.setAreaOfInterest(100, 100, 10, 10);
+			hist.calcHistogramFromLimetedArea(bands);
+		}else 
+			//Esto es igual a calcular el histograma de un area de interes de tamaño de toda la imagen
+			hist.calcFullHistogram(bands); 
+		start();
+	}
+	
+	public void run(){
+		System.out.print("Calculando histograma ...");
+		while(hist.getPercent() < 100){
+			System.out.print(" "+hist.getPercent());
+			try {
+				sleep(10);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+		histArray = hist.getFullHistogram();
+		System.out.println();
+		System.out.println("Total pixeles:" + (grid.getHeight() * grid.getWidth()));
+		System.out.println("HISTOGRAMA:");
+		for(int iBand = 0; iBand < histArray.length; iBand ++)
+			for(int i = 0; i < histArray[iBand].length; i ++){
+				if(i < 1500)
+					System.out.println("Band:"+iBand+" "+i+"="+histArray[iBand][i]);
+				if(iBand == 0 && histArray[iBand][i] != 0)
+					nPixels += histArray[iBand][i];
+			}
+		
+		System.out.println("Número de pixeles por banda:"+nPixels);
+
+	}
+
+	public static void main(String[] args){
+		TestHistogram3bandByte test = new TestHistogram3bandByte();
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/io/datastruct/TestHistogram3bandByte.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/NameChooserDialogTest.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/NameChooserDialogTest.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/NameChooserDialogTest.java	(revision 10281)
@@ -0,0 +1,33 @@
+/*
+ * Created on 19-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui;
+
+import org.cresques.ui.raster.NameChooserDialog;
+
+public class NameChooserDialogTest {
+	public static void main(String[] args){
+		NameChooserDialog nameChooser = new NameChooserDialog(null, null);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/NameChooserDialogTest.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestResolutionPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestResolutionPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestResolutionPanel.java	(revision 10281)
@@ -0,0 +1,71 @@
+/*
+ * Created on 02-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.cresques.ui.raster.ResolutionPanel;
+
+public class TestResolutionPanel implements ComponentListener{
+	
+	public JFrame frame = new JFrame();
+	public ResolutionPanel panel = null;
+	
+	public TestResolutionPanel(){
+		frame.setSize(380, 200);
+		panel = new ResolutionPanel();
+		frame.getContentPane().add(panel);
+		frame.addComponentListener(this);
+		frame.show();
+	}
+
+	public static void main(String[] args){
+		TestResolutionPanel test = new TestResolutionPanel();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		this.panel.setComponentSize(this.frame.getWidth()-10, this.frame.getHeight()-20);
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestResolutionPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestTransparencyByPixelPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestTransparencyByPixelPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestTransparencyByPixelPanel.java	(revision 10281)
@@ -0,0 +1,47 @@
+/*
+ * Created on 31-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui;
+
+import javax.swing.JFrame;
+
+import org.cresques.ui.filter.TransparencyByPixelPanel;
+
+public class TestTransparencyByPixelPanel extends JFrame{
+
+	public TestTransparencyByPixelPanel(){
+		this.setSize(353,158);
+		TransparencyByPixelPanel tbp = new TransparencyByPixelPanel();
+		this.getContentPane().add(tbp);
+		tbp.setControlEnabled(true);
+		this.show();
+	}
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		TestTransparencyByPixelPanel f = new TestTransparencyByPixelPanel();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestTransparencyByPixelPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestCutRasterPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestCutRasterPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestCutRasterPanel.java	(revision 10281)
@@ -0,0 +1,82 @@
+/*
+ * Created on 23-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import org.cresques.ui.raster.CutRasterPanel;
+
+public class TestCutRasterPanel implements ComponentListener{
+
+	private JFrame frame = new JFrame();
+	private CutRasterPanel panel = null;
+	
+	public TestCutRasterPanel(){
+		frame.setSize(438, 617);
+		        
+		panel = new CutRasterPanel(null, 0, 0, null);
+		//panel.setComponentSize(frame.getWidth() - 20, frame.getHeight() - 40);
+		frame.getContentPane().add(panel);
+		frame.show();
+		panel.addComponentListener(this);
+	}
+	
+	public static void main(String[] args){
+		try {
+			  UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+			  //UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
+			  //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+	    } catch( Exception e ) {
+	          System.err.println( "No se puede cambiar al LookAndFeel");
+	    }
+		TestCutRasterPanel test = new TestCutRasterPanel(); 
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		//panel.setComponentSize(frame.getWidth() - 20, frame.getHeight() - 40);
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/TestCutRasterPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/HistogramPanelTest.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/HistogramPanelTest.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/HistogramPanelTest.java	(revision 10281)
@@ -0,0 +1,150 @@
+/*
+ * Created on 19-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.Locale;
+
+import javax.swing.JFrame;
+import javax.swing.UIManager;
+
+import org.cresques.ui.raster.HistogramPanel;
+import org.gvsig.gui.beans.graphic.GraphicChartPanel;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Código de prueba para la interfaz de usuario de representación de
+ * histogramas.
+ * 
+ * @author Diego Guerrero (diego.guerrero@uclm.es)
+ *
+ */
+
+public class HistogramPanelTest implements ComponentListener, WindowListener {
+	
+	private int 			w = 700, h = 500;
+	private JFrame 			frame=new JFrame();
+	private HistogramPanel	hp = null;
+	
+	public HistogramPanelTest(){
+		hp = new HistogramPanel(w - 12, h - 45);
+		//hp = new HistogramPanel(histogramas);
+		int[][] g = new int[3][256]; 
+		for (int i = 0; i < 256; i++){ 
+            g[0][i] = 329;
+            g[1][i] = 280;
+            g[2][i] = 401;
+		}
+		
+		GraphicChartPanel cp = hp.getPHistogram().getPGraphic();
+		cp.replaceValuesChart(g);
+		
+		frame.addComponentListener(this);
+		frame.addWindowListener(this);
+		frame.getContentPane().add(hp);
+		frame.setSize(w,h);
+		frame.setResizable(true);
+		frame.setTitle("Histogramas");
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args){
+		try {
+			Messages.addLocale(new Locale("es"));
+			Messages.addResourceFamily("text", new File("bin/org/cresques/translations"));
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+		try {
+			  UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+			  //UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
+			  //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+	    } catch( Exception e ) {
+	          System.err.println( "No se puede cambiar al LookAndFeel");
+	    }
+		HistogramPanelTest hpt = new HistogramPanelTest();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void componentResized(ComponentEvent e) {
+		hp.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 45);
+
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowActivated(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowClosed(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowClosing(WindowEvent e) {
+		System.exit(0);
+		
+	}
+
+	public void windowDeactivated(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowDeiconified(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowIconified(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowOpened(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/HistogramPanelTest.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/PalettePanelTest.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/PalettePanelTest.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/PalettePanelTest.java	(revision 10281)
@@ -0,0 +1,133 @@
+/*
+ * Created on 03-ago-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.cresques.ui;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.Locale;
+
+import javax.swing.JFrame;
+
+import org.cresques.ui.raster.HistogramPanel;
+import org.cresques.ui.raster.PalettePanel;
+import org.gvsig.gui.beans.graphic.GraphicChartPanel;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Código de prueba para la interfaz de usuario de representación de
+ * histogramas.
+ * 
+ * @author Diego Guerrero (diego.guerrero@uclm.es)
+ *
+ */
+
+public class PalettePanelTest implements ComponentListener, WindowListener {
+	
+	private int 			w = 400, h = 500;
+	private JFrame 			frame=new JFrame();
+	private PalettePanel	hp = null;
+	
+	public PalettePanelTest(){
+		hp = new PalettePanel(w - 12, h - 45, frame);
+				
+		frame.addComponentListener(this);
+		frame.addWindowListener(this);
+		frame.getContentPane().add(hp);
+		frame.setSize(w,h);
+		frame.setResizable(true);
+		frame.setTitle("Histogramas");
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args){
+		try {
+			Messages.addLocale(new Locale("es"));
+			Messages.addResourceFamily("text", new File("bin/org/cresques/translations"));
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+		PalettePanelTest hpt = new PalettePanelTest();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void componentResized(ComponentEvent e) {
+		hp.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 45);
+
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void windowActivated(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowClosed(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowClosing(WindowEvent e) {
+		System.exit(0);
+		
+	}
+
+	public void windowDeactivated(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowDeiconified(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowIconified(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowOpened(WindowEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/src-test/org/cresques/ui/PalettePanelTest.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/notAvailable.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/notAvailable.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/notAvailable.gif	(revision 10281)
@@ -0,0 +1,2 @@
+GIF89a‡€€€€€€€€€ÀÀÀÀÜÀ¦ÊðØBOÝ[fãw€çˆ�è�—ì §ÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ùÿ,((�Áƒ|Á„8t° âÄŠ
+:„¨À Â	;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/notAvailable.gif
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zo_cur.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zo_cur.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zo_cur.gif	(revision 10281)
@@ -0,0 +1,2 @@
+GIF89a  ÷„„„„ÄÄÄúúúÿÿÿ!ùÿ,  @fÿ	üW `��*\x�áÂ‡#JœH±"Áˆ
+-N<hP£Ç� )fL8ÒcI’!$¹2%DŽ']ÊœI³fÊ–*cjÔ©SdÎŽ*Cö¼(ôáP‹Wµ	óèGœ6£J�JµªÕ«6!þLView Pro Evaluation Version!ÿLViewPro200;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zo_cur.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folderXP.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folderXP.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folderXP.gif	(revision 10281)
@@ -0,0 +1,8 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦ÊðKKKlllmmmÿÿ˜f™g›i�kŸm¢p
+¤r§uªx­{¯}²€³€´�¶ƒ·„¹†!»ˆ#¼‰$¾‹&¿Œ'ÁŽ)Ä‘,Æ“.È•0Ê—2Ë˜3ÒŸ:Û¨Cå²Mî»V÷Ä_þËfþÓnþßz‚‚‚‹‹‹þå€þê„þó�þö�þþ˜ÇÇÇÕÕÕÝÝÝÞÞÞõõõþþþÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù
+,¾H°`A'L”Øað`�‡=Fàh(E�oôá�Ã†
+<a£†I“^�¡C 	3HÈœ)âC
+20,ƒDÊŸ3zL�Ñ€Ä“blqCƒ#\œ¸a£ªÕª,nDXÐ@„7hˆ+vÅ
+\A¸q†Û·nUÜxÀÕƒ‹7^èÝ«7Å
+Ow|ÄpÁB
+$D€ðÀ�‚qÄX@¹²å1&6à±#‡çÏ sˆ¤Hº´Á€;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folderXP.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/info_cur.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/info_cur.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/info_cur.gif	(revision 10281)
@@ -0,0 +1 @@
+GIF89a  ³BBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ù,  DPÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ï$`ß‚mBÐ÷¸Z€ç+êF¼äÏw†ÃÜ/R>“ºæ§y­ðN_šx<‹;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/info_cur.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/lineal.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/lineal.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/lineal.gif	(revision 10281)
@@ -0,0 +1,2 @@
+GIF89a  ãÄÄÄƒƒƒXXXAAA™™™¼¼¼,,,ÑÑÑÙÙÙÐÐÐÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿ,  rÈI«¥!ëp»›ö�SFž˜‰žâÊr.©Æ_K{ó}åze÷>08´üŠ !2¹,ñŠÏax„*‘Ó^•šÕuo[nG0 Ê¡P¸¦<NÀ8H²a@„PßÝ€{	
+~{I!‚{†Ž�H;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/lineal.gif
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPecw.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPecw.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPecw.gif	(revision 10281)
@@ -0,0 +1,10 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð**pQQWUUU€€��‚€ƒ
+…‚ƒ		„		…	
+„
+
+„…†
+†	‡†
+
+†‡‡‡ˆˆ‰‹‹‚ŒŒ%“,•.—3™!!Š!!�##‘((”,,•..—00˜11˜33™55š99œ;;�==Ÿ??Ÿ@ EEƒ@@ AA II¥NN§WW«nn…†``°bb±cc±iiµrr¹yy¼ÑèÞïßïòùôúÿÿ†††™™™��ÁƒƒÁ††Ã‰‰Ä––Ê——Ë££Ñ¤¤Ñ²²Ø¶¶ÛËËËÌÌÌÑÑèÓÓéÕÕê××ëÞÞïßßïççÖããñññøòòùôôúûûýþþÿÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ùR,Õ¥H™B° A*<Ã°aC*tC±bE*n"&œb±#D'vìø%â“&EÂ�YSFL7fÌ¤#f�“4€PÁ#Æ‰ ]hô@"„(]AÀ
+BB| ¡T‚”–€ eË�$3”Š%€µÂ†Â YÂ¥†R”v ðËÖ+Gè°¡tH¹.€�á€ƒ…LˆŒÐ�E‰ˆ>\À¨±£
+$VÔ`ÁdŒ—/¢@1¢fMG6¥Ý´YEà0°cË†¤íÛ¸%êÞ;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPecw.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXP.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXP.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXP.gif	(revision 10281)
@@ -0,0 +1,2 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦ÊðUUUÿÿ†††™™™ËËËÌÌÌççÖÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,U,`@° Á„À°aÃ
+Œ@±bÅ"&d`±#D'vìè $Ç‘M¢L¹q¥E•.)ÂŒ9ÓeÍ•7Qæiò�ÏŸ@}†I´¨Q‰H“;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXP.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPgml.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPgml.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPgml.gif	(revision 10281)
@@ -0,0 +1,11 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦ÊðJJZQQWUUU€€‚‚ƒ„†ƒ
+
+ƒ		„
+
+„
+†
+
+†‹ˆ‰ŠŠ‹ƒ„‰�'“.—<ž!!Š''“''”))•**•,,•..—//˜33™77œ<<žEE„]]„@@ DD¢PP¨UUªee…nn…†–ËªÕ½ÞÑè×ëßïòùôúüþÿÿ†††™™™‰‰Ä««Õ··Û½½ÞËËËÌÌÌÀÀàÃÃáÈÈäÎÎçÑÑèÝÝîÞÞïßßïççÖòòùôôú÷÷ûÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ùD,Ñ‰)B° A#¬Â°aC#ÌB±bE#Y"&,b±#D'vì¸$â�9¢P¡H%Ê”)*³PQ@d‡†R(¡Â¢ÃˆX8aˆ">ˆñdƒ,l@’¡‚pypJ¨P3PµŠÃŒP$ù
+VlÕ«dp à–t©RàA‚@j4ù
+CEÞ¯z˜8ÑÂ†*4Z¼pÑ‚†!J¢Ã
+ŠW¬ˆ¶r%Ë•AaÂºµkÖ!AÊžM[¢íÛ;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPgml.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/pan_cur.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/pan_cur.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/pan_cur.gif	(revision 10281)
@@ -0,0 +1 @@
+GIF89a  ³ÆÆÆÿÿÿ!ù,  @S0ÈI«½ôþ €�dižhåuÛˆéä�alßxÚ½ížK«–�c›Ñj9ãök:ŸÐhÉç\‰¿««)‡ÌÓì»Ä‘‘·37yKßð¸|N¯K#;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/pan_cur.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/select_cur.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/select_cur.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/select_cur.gif	(revision 10281)
@@ -0,0 +1 @@
+GIF89a  ³ÆÆÆÿÿÿ!ù,  `0ÈI«½X�{‚Ày$Šeœ£ê±.ÉnqÆ†[[kx/ê±›¨|Ñ„HÕ,ÄdÂR§asŠRú¨Î ‹Ór›EÙ7ëý†KQìYlÞñÔî7u�ÎÙiñ¼~Ïïûÿ€�‚1;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/select_cur.gif
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPdxf.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPdxf.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPdxf.gif	(revision 10281)
@@ -0,0 +1,9 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦ÊðJJZHH\UUU€€��‚ƒ„		„
+
+„…†
+†
+
+†‡€‚‚Œ��,•!!Š##‘&&“''“++•--–..—11˜88œ99œ::�??Ÿ?? @ @@ BB¡II¤II¥PP¨VV«[[­nn…†``°bb±cc±oo·zz½}}¿Ñè×ëßïôúüþÿÿ†††™™™��Ç¢¢Ñ££Ñ¤¤ÒªªÕ««Õ¯¯×µµÚ½½ÞËËËÌÌÌÉÉäÊÊäÐÐèÑÑèÒÒéÓÓé××ëßßïççÖããñòòùôôúõõú÷÷ûüüþþþÿÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ùE,Ó‹1B° Á#ÜÂ°aÃ#
+C±bÅ#c"&4b±#Ä'vìE£V´ŒÑ’%Ì,\´X±Â€ˆ4˜pÒÄ$fœÐ ¡C L Pâ!$üÐ@€!H+ø  á	Šª6¦l�@ÀÖ”­ÒCé+c/(8[�G
+I>TeE&Š %�@V”x°ƒ¨•ˆB`ŒHQƒ
+�Wš¨Ðá"†�Crt3Æ‹—1bF›Î¸QŠë×°]‡I»¶m‰¸s;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPdxf.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPtif.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPtif.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPtif.gif	(revision 10281)
@@ -0,0 +1,10 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦ÊðUUU€‚„
+
+„…††
+
+†
+
+‡‡ˆ��%“  �  �%%’&&“((”))”,,–88œ::�@ @@ hh…nn…uu…ÙìÞïßïôúþÿÿÿ†††™™™ªªÕ··ÛËËËÌÌÌÑÑè××ëÜÜîßßïççÖôôúüüþÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,,«Y°hA° A¼Á°aC
+ÔA±bE:"&la±#D'vì#â
+%f¨¤QÃ†�•92²8�Á
+,tààA‚„4d¦Q¡ƒ"<ˆ@€€2Y¨ !ÂL`@ Ô�%|ªÌºõÁ‡¯	ÃJ»Ô*Ô¨,Ô²�°¶bH#F¸"„^»qà (X°Å�-d(^ÌXqH��#K–H¹r@;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/fileXPtif.gif
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folder.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folder.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folder.gif	(revision 10281)
@@ -0,0 +1,3 @@
+GIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¦ÊðœœÎÎcÿÎœÿÿœØÐÈÿÿÎ÷÷÷ÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ùþ,hý	H°`Á0HpÁ@,d¸€�Å‹&è�áCBIÒA�E–4É¥?•+˜t	¢Ì›hú‹ÉòdÈ�6{šô™ÒÎ£
+ˆ¾ÄÈãD¢J�:Õ£Õ«X³
+;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/folder.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zi_cur.gif
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zi_cur.gif	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zi_cur.gif	(revision 10281)
@@ -0,0 +1,3 @@
+GIF89a  Àÿÿÿ!ù,  @CŒ	Çí¿à›´Ú‹3jÑtm-
+H–&ö1)˜~+Û&gˆ¼ó�çº.ýìò}ŠˆíÒR
+%¹¢è·{OÐ�õŠÍj·Ün!þLView Pro Evaluation Version!ÿLViewPro200;
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/images/zi_cur.gif
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/javadoc.xml
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/javadoc.xml	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/javadoc.xml	(revision 10281)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="javadoc">
+    <target name="javadoc">
+        <javadoc destdir="doc" access="package" source="1.4" use="true" notree="false" nonavbar="false" noindex="false" splitindex="true" author="true" version="true" nodeprecatedlist="false" nodeprecated="false" packagenames="org.cresques.cts.gt2,org.cresques.io,org.cresques.geo.cover,org.cresques.ui,org.cresques.geo,org.cresques.cts,org.cresques.ui.cmd,org.cresques.px.gml,org.cresques.px.dxf,org.cresques.px" sourcepath="src" classpath="lib/jmgeoraster.jar;lib/geojava.jar;bin;C:\java\lib\ermapper.jar;lib/gt2cts.jar" overview="C:\eclipse\workspace\Cq CMS for Java\doc-files\overview.html" doctitle="Cresques Mapping Suite for Java v0.1">
+            <link href="file:/C:/j2sdk1.4.2_03/docs/api/"/>
+            <link href="jar:file:/C:/java/lib/ermapperdoc.jar!/Javadoc"/>
+        </javadoc>
+    </target>
+</project>

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/javadoc.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jfreechart-1.0.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jfreechart-1.0.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/geojava.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/geojava.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/units-0.01.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/units-0.01.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gt2-main.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gt2-main.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jbsb.jar
===================================================================
--- tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jbsb.jar	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jbsb.jar	(revision 10281)
@@ -0,0 +1,18 @@
+PKRO5	META-INF/þÊPKPKRO5META-INF/MANIFEST.MFóMÌËLK-.Ñ
+K-*ÎÌÏ³R0Ô3àår.JM,IMÑuª	˜èÅ*h—æ)øf&åW—¤æ+xæ%ëiòrñrPKû›GGPK
+QO5es/gva/cit/jbsb/PKPO5es/gva/cit/jbsb/BsbInfo.class]‘]OA†ßiK—–Å"¨U¡(‚Pö‚�×.lb\Ó´$%|¤ff™6Ó”ÙfwÀÈoòÆÄÆÄ ?Àe<³càæ<çÌùxÏÙýýçç-€=UxØ¬ Œ-¯-·­ÙñÐô°ËPÖ§=u-Xdƒ³Y0¯[G3×›pñ…"†B¿Ç°0á“ìúƒäç2eXé·GüŠ‡c®‡aÏ¤J÷'\·•–ÝÁ “Æ6Òìªn%ã$ý7ÿX¦™J4CItºoèEtäç÷jLÉ%Ýæ™±NReŒ´Eñ¡!9ö‘v|«´2Åæî1eZÉ9õÔlyçòBÈôˆ;ÅKe&Ó+NÍ(Šlmm,õ§;ûÓ»Z/¹Lc9S÷ße"ÒƒdÏæãžûð±HkÝ¿ÔÇÔ|,á!C]fá�Ò±2áHd"tSî´uÅHÆôý=ú9>èlTÈ£I1')ä$‘œË.¿âøÈñ±ãÇ:ž‹äÑdW)jq.øö-/[#[ÎÈ6°îJ÷Q@‰XVo*S‚µ_(NQ
+7Õ)æþ7/çe'tÏ)mzFú}Ê¼ÀK7hÝi–ƒï(Ý~½'“Ý ðê/PKùúÙ‡½±PKPO5"es/gva/cit/jbsb/BsbException.class;õo×>=.ÁËÎÀÇÎÀÏÈÀf“™—YbÇÈ ªá“•X–¨Ÿ“˜—®\R”™—n­ÆÈÀâœŸ’ÊÈÀï“™—êWš›”Z’˜”aÖIsç—%§ºe‚„�Š“\+’SJ2óóô@Æñ0°2°�NF™Ôbýt 
+É™%úYIÅIúÈª„ÖÃE˜�®& šÅÀÈÀd)ù 6-ííŒ�,F Éµª´«ç„ª—ÒŒ ­íLål`Ak É¶‚PKm>Ü+PKQO5es/gva/cit/jbsb/BsbBuffer.classE�ÍJÃ@…ÏMÓ$�±­ºq!¸¨]t^@ºHED7®fâ´L¨©L~ �Õ…">@J¼D8sçÜïž™Ù}|˜à(†�AC„8$^¥ÚÌ3YÜšB§õ‚à=¥„àÒ¦š:£‹G‚?[?k†[è®~QÚ>Hµb'´ºÔ¶‘ŒŒnZ2ž¯k›ékÓvûi©8s¡í$—�L"JÐE@8Ö¥X6Rd¦¹*•øC	Ã+Y,Å½ÊuVáŒŸìóˆ�såqÅi¬=>�ºÐ¿ƒ¶ŒYgNY÷�ü¢ç<êñ�O>£7xÿtìüÇ^±³ï.éÿPKÜLø<PKQO5es/gva/cit/jbsb/Bsb.class�UmSU~nxÙeÙ†–¶€º_B D«•J¡µAÐD
+ØT,õ¥Ý$Kº¸ì2›À”þuôCëÔàè8Ó±§ŒE¿8Ž?Êñ9Þ”´ã‡œ»÷Üç<ç¹çœÝüõ÷ÃG†áèÇÅôá
+1—4¤
+4bBÌ›&5LÐqQÇ[²¾­##kÖ€V½£cÚ`äåÌ`VÃœŽw
+tbBÃ]Â=ƒœ<]Õñžä˜øû‚!ë5Ù,è¸nà|¨á#
++è¥+åŒ¿(œœvÊ©Òš�*¸•ÔR¾œO¥Ëy9:Áò«‹‹N¨ÐS–Ž	l,ÌURY…˜[TˆO/ÙÄz¶_Jå*¡ë—js}·rA¡!10Ï˜‰ è(´O»¾3³ºœwÂ«vÞ£Ç ûìŠãÏØ…Ó‰ÃTO�ÜÆíÇ.F¬Bp&‘}‚ôLöŒB+Q^P®Q4&²"XÛÑ¥p¬ž("ŒÉÛg¥â~¹Æ±«D82‚Ðw‰ù8Vðv
+bä‚Õ°àL¹r}�ê†…ÞÄN›xÏ›x/*˜QR7H	PNGLÜÀM…ÎÝƒÌìž…®ÿjLïô²uÒ³ì°pË],6òT`ù�åÜvËP4áq÷$+«NÑ±<Ç	Ë„½„—5,šH`@¡·N�h9:†Ah9¾%´È’Î¥9|�íŒ‰n™p1ªpn/˜A»%M[Ó¶åyö²]´å$b¦ÊÊêZt—J`"‰AgðŠÂÙƒ$QþÃ«8«Ð´T*Úž†%Ÿ`„¯£[¡c¿à³ù%§ÀÑiŽjZŽfþ:·ö
+Sðª;Öõ&/b%¨yXÉÄaZÁö¥4
+Çór0»-çÞáˆ)Ž¸:e'\³ÿ%;·ÎXæ„x�T9Úá:NñÒÏ�Y#”#Ÿ”Ìc´²÷\cRg®:=œYÚaîRô+®íÉ*TRýŒ˜˜†ûQ`Š¶
+
+´igÐ‚9“‘âaL:­,~„~
+#$Ò‡DKÔ�-4.VÑtyhÍèß‚¶°}¡Š–¸±‰ÖAþâ&Í&ŽTÑ¶MXûŽ,Þ!Žd’áO‰ªˆ=@¼åî·rÜ¹?ZÅ±íäºHvœŠ	h¨�Nlâä¾þa´Ò~JíŸ¡ŸSýÔù%.á.²¸‡y|…›ØàÈ|�u|ƒsD7ó�ü¶+¼ŽÑ�;-Ò+wm?¤¥;Ò²ã!=4=UôŽ÷n U U<½½¯©›\Àwdþžõý'ð#rŸÙ~ŠòK;ù;Oo-ûTäúå~æ`î*žÝÏgð+L<âÏo‘ß°ëÛ‚¾ˆ›÷Ž[¿àÔ>ƒÁìÀhÂŸôŒGCtáPKv>Þ�î6PKRO5	META-INF/þÊPKRO5û›GG=META-INF/MANIFEST.MFPK
+
+QO5Æes/gva/cit/jbsb/PKPO5ùúÙ‡½±ôes/gva/cit/jbsb/BsbInfo.classPKPO5m>Ü+"ües/gva/cit/jbsb/BsbException.classPKQO5ÜLø<(es/gva/cit/jbsb/BsbBuffer.classPKQO5v>Þ�î6mes/gva/cit/jbsb/Bsb.classPKê¢	
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jbsb.jar
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jgdal-0.6.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jgdal-0.6.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jmgeoraster.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jmgeoraster.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jecw-0.0.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jecw-0.0.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jmrsid-0.0.2.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jmrsid-0.0.2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/log4j-1.2.8.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/log4j-1.2.8.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/geotiff-jai.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/geotiff-jai.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/tar.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/tar.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/junit.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/junit.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gvsig-ui.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gvsig-ui.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jfreechart-1.0.1-demo.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jfreechart-1.0.1-demo.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gvsig-i18n.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gvsig-i18n.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jcommon-1.0.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jcommon-1.0.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/kxml2.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/kxml2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gt2-legacy.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/gt2-legacy.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jecwcompress-0.1.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jecwcompress-0.1.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jogr.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/jogr.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/geoapi-2.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster/lib/geoapi-2.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/Root_v10+Piloto/libraries/libCq_CMS_praster
___________________________________________________________________
Added: svn:ignore
   + doc-files
cms.jar
Thumbs.db


Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/.project
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/.project	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/.project	(revision 10281)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>libUIComponents</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>de.loskutov.FileSync.FSBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/.project
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java	(revision 10281)
@@ -0,0 +1,51 @@
+package org.gvsig.gui.beans.slidertext;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestSliderTextTable implements ComponentListener{
+	private int 				w = 350, h = 150;
+	private JFrame 				frame=new JFrame();
+	private SliderTextContainer	slider = null;
+	
+	public TestSliderTextTable() throws NotInitializeException{
+		slider = new SliderTextContainer(w - 12, h - 45, 0, 255, 255);
+				
+		frame.addComponentListener(this);
+		
+		frame.getContentPane().add(slider);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			TestSliderTextTable slider = new TestSliderTextTable();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		slider.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 45);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/slidertext/TestSliderTextTable.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java	(revision 10281)
@@ -0,0 +1,63 @@
+package org.gvsig.gui.beans.table;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestTreeRadioButtonModelTable implements ComponentListener{
+	private int 			w = 400, h = 200;
+	private JFrame 			frame=new JFrame();
+	private TableContainer	table = null;
+	
+	public TestTreeRadioButtonModelTable() throws NotInitializeException{
+		String[] columnNames = {"R", "G", "B", "columna 4"};
+		int[] columnWidths = {22, 22, 22, 334};
+		table = new TableContainer(w - 12, h - 45, columnNames, columnWidths);
+		table.setModel("TreeRadioButtonModel");
+		table.initialize();
+		
+		Object[] row = {new Boolean(true), new Boolean(false), new Boolean(false), "texto 0"}; 
+		Object[] row1 = {new Boolean(false), new Boolean(true), new Boolean(false), "texto 1"};
+		Object[] row2 = {new Boolean(false), new Boolean(false), new Boolean(true), "texto 2"};
+		table.addRow(row);
+		table.addRow(row1);
+		table.addRow(row2);
+		table.delRow(1);
+		
+		frame.addComponentListener(this);
+		
+		frame.getContentPane().add(table);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			TestTreeRadioButtonModelTable tabla = new TestTreeRadioButtonModelTable();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		table.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 45);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTable.java	(revision 10281)
@@ -0,0 +1,72 @@
+package org.gvsig.gui.beans.table;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.UIManager;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestTable extends JFrame implements ComponentListener{
+	private int 			w = 400, h = 200;
+	
+	private TableContainer	table = null;
+	
+	public TestTable() throws NotInitializeException{
+		String[] columnNames = {"columna 1", "columna 2", "columna 3", "columna 4"};
+		int[] columnWidths = {70, 90, 110, 130};
+		table = new TableContainer(w - 12, h - 45, columnNames, columnWidths);
+		table.initialize();
+		table.setControlVisible(true);
+		table.setEditable(false);
+		
+		String[] row = {"uno 0", "dos 0", "tres 0", "cuatro 0"}; 
+		String[] row1 = {"uno 1", "dos 1", "tres 1", "cuatro 1"};
+		String[] row2 = {"uno 2", "dos 2", "tres 2", "cuatro 2"};
+		table.addRow(row);
+		table.addRow(row1);
+		table.addRow(row2);
+		table.delRow(1);
+		
+		addComponentListener(this);
+		
+		getContentPane().add(table);
+		setSize(w, h);
+		setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try {
+			  //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+			  UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
+			  //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+	    } catch( Exception e ) {
+	          System.err.println( "No se puede cambiar al LookAndFeel");
+	    }
+		try{
+			TestTable tabla = new TestTable();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		table.setComponentSize(getWidth() - 12, getHeight() - 45);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTable.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTableButtonModelTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTableButtonModelTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTableButtonModelTable.java	(revision 10281)
@@ -0,0 +1,77 @@
+package org.gvsig.gui.beans.table;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.models.TableButtonModel;
+
+public class TestTableButtonModelTable implements ComponentListener, ActionListener{
+	private int 			w = 460, h = 200;
+	private JFrame 			frame = new JFrame();
+	private TableContainer	table = null;
+	
+	public TestTableButtonModelTable() throws NotInitializeException{
+		String[] columnNames = {"Botón", "columna2", "columna3", "columna 4", "col5"};
+		int[] columnWidths = {54, 114, 94, 114, 60};
+		table = new TableContainer(w - 12, h - 45, columnNames, columnWidths);
+		table.setModel("TableButtonModel");
+		table.initialize();
+						
+		Object[] row = {Color.GREEN, "texto 0", "texto 0", "texto 0", "125"}; 
+		Object[] row1 = {Color.BLUE, "texto 1", "texto 1", "texto 1", "255"};
+		Object[] row2 = {Color.RED, "texto 2", "texto 2", "texto 2", "80"};
+		table.addRow(row);
+
+		/*JButton b7 = new JButton();
+		b7.setBackground(Color.RED);
+		b7.addActionListener(this);
+		((TableButtonModel)table.getModel()).setValueAt(b7, 0, 0);*/
+		table.addRow(row1);
+		table.addRow(row2);
+				
+		frame.addComponentListener(this);
+		
+		frame.getContentPane().add(table);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			TestTableButtonModelTable tabla = new TestTableButtonModelTable();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		table.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 45);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		System.out.println("Evento de botón!!");
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/TestTableButtonModelTable.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/CheckBoxModelTable.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/CheckBoxModelTable.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/CheckBoxModelTable.java	(revision 10281)
@@ -0,0 +1,63 @@
+package org.gvsig.gui.beans.table;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class CheckBoxModelTable implements ComponentListener{
+	private int 			w = 400, h = 200;
+	private JFrame 			frame=new JFrame();
+	private TableContainer	table = null;
+	
+	public CheckBoxModelTable() throws NotInitializeException{
+		String[] columnNames = {"Cb", "columna"};
+		int[] columnWidths = {22, 334};
+		table = new TableContainer(w - 12, h - 45, columnNames, columnWidths);
+		table.setModel("CheckBoxModel");
+		table.initialize();
+		
+		Object[] row = {new Boolean(true), "texto 0"}; 
+		Object[] row1 = {new Boolean(false), "texto 1"};
+		Object[] row2 = {new Boolean(false), "texto 2"};
+		table.addRow(row);
+		table.addRow(row1);
+		table.addRow(row2);
+		table.delRow(1);
+		
+		frame.addComponentListener(this);
+		
+		frame.getContentPane().add(table);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			CheckBoxModelTable tabla = new CheckBoxModelTable();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		table.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 45);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/table/CheckBoxModelTable.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/dataInput/TestDataInput.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/dataInput/TestDataInput.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/dataInput/TestDataInput.java	(revision 10281)
@@ -0,0 +1,59 @@
+package org.gvsig.gui.beans.dataInput;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
+
+public class TestDataInput implements ComponentListener {
+	private int						w = 150, h = 50;
+	private JFrame					frame = new JFrame();
+	private DataInputContainer		data = null;
+	
+	public TestDataInput(){
+		JPanel p = new JPanel();
+		p.setSize(w, h);
+				
+		data = new DataInputContainer(50);
+		frame.addComponentListener(this);
+		p.add(data, null);
+		
+		frame.getContentPane().add(p);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		
+	}
+	
+	public static void main(String[] args){
+		try {
+			  UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+			  //UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
+			  //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+	    } catch( Exception e ) {
+	          System.err.println( "No se puede cambiar al LookAndFeel");
+	    }
+		TestDataInput tof = new TestDataInput();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		data.setComponentSize(frame.getWidth() - 10, frame.getHeight() - 30);
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/dataInput/TestDataInput.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/treelist/TestTreeList.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/treelist/TestTreeList.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/treelist/TestTreeList.java	(revision 10281)
@@ -0,0 +1,69 @@
+package org.gvsig.gui.beans.treelist;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestTreeList implements ComponentListener{
+	private int 					w = 200, h = 380;
+	private JFrame 					frame = new JFrame();
+	private TreeListContainer		tlist;
+	
+	public TestTreeList() throws NotInitializeException{
+		tlist = new TreeListContainer();
+	
+		tlist.addClass("uno", 0);
+		tlist.addClass("dos", 1);
+		tlist.addClass("tres", 2);
+		tlist.addClass("cuatro", 3);
+		tlist.addEntry("uno-uno","uno","");
+		tlist.addEntry("uno-dos","uno","");
+		tlist.addEntry("uno-tres","uno","");
+		tlist.addEntry("tres-uno","tres","");
+		tlist.addEntry("tres-dos","tres","");
+		tlist.addEntry("cuatro-uno","cuatro","");
+		tlist.addEntry("cuatro-dos","cuatro","");
+		tlist.addEntry("cuatro-tres","cuatro","");
+		tlist.addEntry("cuatro-cuatro","cuatro","");
+		tlist.addEntry("cuatro-cinco","cuatro","");
+		tlist.addEntry("cuatro-seis","cuatro","");
+		
+		tlist.getTree().expandRow(0);
+		
+		frame.getContentPane().add(tlist);
+		frame.setSize(w, h);
+		frame.addComponentListener(this);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			TestTreeList tl = new TestTreeList();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializado");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		tlist.setComponentSize(frame.getWidth() - 10, frame.getHeight() - 20);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/treelist/TestTreeList.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/graphic/TestGraphic.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/graphic/TestGraphic.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/graphic/TestGraphic.java	(revision 10281)
@@ -0,0 +1,54 @@
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestGraphic implements ComponentListener{
+	private int 				w = 500, h = 300;
+	private JFrame 				frame=new JFrame();
+	private GraphicContainer	graphic = null;
+	
+	public TestGraphic() throws NotInitializeException{
+		graphic = new GraphicContainer(w - 12, h - 30, false);
+							
+		frame.addComponentListener(this);
+				
+		frame.getContentPane().add(graphic);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			TestGraphic tabla = new TestGraphic();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializada");
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		graphic.setComponentSize(frame.getWidth() - 12, frame.getHeight() - 30);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/graphic/TestGraphic.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/buttonBar/TestButtonBar.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/buttonBar/TestButtonBar.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/buttonBar/TestButtonBar.java	(revision 10281)
@@ -0,0 +1,32 @@
+package org.gvsig.gui.beans.buttonBar;
+
+import javax.swing.JFrame;
+
+public class TestButtonBar {
+
+	private JFrame frame = new JFrame();
+	
+	public TestButtonBar(){
+		ButtonBarContainer cont = new ButtonBarContainer();
+		frame.setSize(410, 45);
+		cont.setButtonAlignment("right");
+		cont.addButton("down.png", "hola",0);
+		cont.addButton(null, "que",1);
+		cont.addButton(null, "tal",2);
+		cont.addButton(null, "estas?",3);
+		cont.addButton(null, "adios", 4);
+		cont.getButton(2).setEnabled(false);
+		cont.disableAllControls();
+		cont.restoreControlsValue();
+		cont.setComponentBorder(true);
+		//cont.delButton(0);
+		cont.delButton(3);
+		frame.getContentPane().add(cont);
+		frame.show();
+	}
+	
+	public static void main(String[] args){
+		TestButtonBar test = new TestButtonBar();
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/buttonBar/TestButtonBar.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/coordDataInput/TestCoordDataInput.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/coordDataInput/TestCoordDataInput.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/coordDataInput/TestCoordDataInput.java	(revision 10281)
@@ -0,0 +1,59 @@
+package org.gvsig.gui.beans.coordDataInput;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+import javax.swing.UIManager;
+
+import org.gvsig.gui.beans.openFile.TestOpenFile;
+
+public class TestCoordDataInput implements ComponentListener{
+	private int							w = 438, h = 130;
+	private JFrame						frame = new JFrame();
+	private CoordDataInputContainer		coord = null;
+	
+	public TestCoordDataInput(){
+		coord = new CoordDataInputContainer(w - 10, h - 30);
+		coord.addComponentListener(this);
+		//coord.setComponentSize(w - 10, h - 30);
+		coord.setParameters("Coordenadas pixel", "Sup.Izq", "X","Y","Inf.Der","X","Y");
+		coord.setDecimalValues(true);
+		coord.setCaracterValues(false);
+		frame.getContentPane().add(coord);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		
+	}
+	
+	public static void main(String[] args){
+		try {
+			  UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+			  //UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
+			  //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+	    } catch( Exception e ) {
+	          System.err.println( "No se puede cambiar al LookAndFeel");
+	    }
+		TestCoordDataInput tof = new TestCoordDataInput();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		coord.setComponentSize(frame.getWidth() - 10, frame.getWidth() - 30);
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/coordDataInput/TestCoordDataInput.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java	(revision 10281)
@@ -0,0 +1,31 @@
+package org.gvsig.gui.beans.textincreaser;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+public class TestTextIncreaser{
+	private int 					w = 200, h = 200;
+	private JFrame 					frame=new JFrame();
+	private TextIncreaserContainer	tic1;
+	
+	public TestTextIncreaser() throws NotInitializeException{
+		tic1 = new TextIncreaserContainer(70, 0, 10, 0, true);
+	
+		frame.getContentPane().add(tic1);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+	}
+	
+	public static void main(String[] args) {
+		try{
+			TestTextIncreaser tti = new TestTextIncreaser();
+		}catch(NotInitializeException ex){
+			System.out.println("Tabla no inicializado");
+		}
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/textincreaser/TestTextIncreaser.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/openFile/TestOpenFile.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/openFile/TestOpenFile.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/openFile/TestOpenFile.java	(revision 10281)
@@ -0,0 +1,49 @@
+package org.gvsig.gui.beans.openFile;
+
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JFrame;
+
+import org.gvsig.gui.beans.coordDataInput.CoordDataInputContainer;
+import org.gvsig.gui.beans.dataInput.DataInputContainer;
+
+public class TestOpenFile implements ComponentListener{
+	private int						w = 510, h = 90;
+	private JFrame					frame = new JFrame();
+	private OpenFileContainer		open = null;
+	
+	public TestOpenFile(){
+		open = new OpenFileContainer();
+		open.setComponentSize(w,h);
+		open.addComponentListener(this);
+		frame.getContentPane().add(open);
+		frame.setSize(w, h);
+		frame.setVisible(true);
+		
+	}
+	
+	public static void main(String[] args){
+		TestOpenFile tof = new TestOpenFile();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		this.open.setComponentSize(this.frame.getWidth() - 10, this.frame.getHeight() -50);
+		
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src-test/org/gvsig/gui/beans/openFile/TestOpenFile.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/doc/contents.html
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/doc/contents.html	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/doc/contents.html	(revision 10281)
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-15">
+	<TITLE></TITLE>
+	<META NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.3  (Linux)">
+	<META NAME="CREATED" CONTENT="20060322;9174300">
+	<META NAME="CHANGED" CONTENT="20060322;10202100">
+	<STYLE>
+	<!--
+		@page { size: 21cm 29.7cm; margin: 2cm }
+		P { margin-bottom: 0.21cm }
+		A:link { color: #000080; text-decoration: underline }
+		A:visited { color: #800000; text-decoration: underline }
+	-->
+	</STYLE>
+</HEAD>
+<BODY LANG="en-US" LINK="#000080" VLINK="#800000" DIR="LTR">
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Monospace"><FONT SIZE=3 STYLE="font-size: 13pt"><B>PRESENT
+BEANS.</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><FONT SIZE=2><B>DefaultBean.java
+(extends JPanel (standard in Swing)):</B><SPAN STYLE="font-weight: medium">
+Just a JPanel with addListener(BeanListener l),
+removeListener(BeanListener l), and callValueChange(Object value)
+methods for adding listeners, removing listeners, and firing
+BeanValueChange events.</SPAN></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><FONT SIZE=2><B>Pager.java
+(extends DefaultBean.java)</B>: this is an
+AcrobatReader-page-browser-like bean that allows you to easy browse a
+list of values. Each time you drag the slider, click a button or type
+a number an Integer value is produced and a BeanValueChanged event is
+fired returning an Object value. Catch this event and cast the value
+produced to a Integer (or even an int) and use it to move your list
+pointer to this position. An example of use can be found in
+<B>SamplePanel.java</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Monospace"><FONT SIZE=3 STYLE="font-size: 13pt"><B>PRESENT
+CONTROLS.</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Monospace"><FONT SIZE=2><B>package
+org.gvsig.gui.beans.controls</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><FONT SIZE=2><B>MultilineTooltip.java
+(extends JToolTip (standard in Swing)): </B><SPAN STYLE="font-weight: medium">Allows
+using more than one line length tooltips. It also automatically
+calculates the size of the screen rectangle used and the preferred
+sized up on the contained text. It does NOT format the text to fit
+within a given size. The user must provide the text as she/he wishes
+to show it. It means that new line characters must be placed in the
+string as well as it was a System.out.println statement.</SPAN></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Monospace"><FONT SIZE=2><B>package
+org.gvsig.gui.beans.controls.dnd</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><FONT SIZE=2><B>JDnDList
+(extends JList (standard in Swing)): </B><SPAN STYLE="font-weight: medium">A
+JList that allows drag'n'drop elements. It accepts changing position
+of one or more elements within the list, adding other from other
+JDnDList's,  removing sets of selected items, and other features. In
+order to use this features you have to use a JDnDListModel as the
+list's model.</SPAN></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><FONT SIZE=2><B>JDnDListModel
+(extends AbstractListModel (standard in Swing)): </B><SPAN STYLE="font-weight: medium">List
+model to use in junction the JDnDList. Contains some useful tools.</SPAN></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Monospace"><FONT SIZE=2><B>package
+org.gvsig.gui.geans.listeners</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><FONT SIZE=2><B>BeanListener.java:
+</B><SPAN STYLE="font-weight: medium">Defines an object which listens
+for changes in the value produced by a bean. It is used, for example,
+in</SPAN><B> DefaultBean.java.</B></FONT></FONT></P>
+<P STYLE="margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-weight: medium"><BR>
+</P>
+<P STYLE="margin-bottom: 0cm; font-weight: medium"><FONT FACE="Courier, monospace"><FONT SIZE=2>by
+Jaume Dom&iacute;nguez Faus (:S)</FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/doc/contents.html
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/jfreechart-1.0.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/jfreechart-1.0.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/jfreechart-1.0.1-demo.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/jfreechart-1.0.1-demo.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/gvsig-i18n.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/gvsig-i18n.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/jcommon-1.0.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/jcommon-1.0.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/JWizardComponent.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/JWizardComponent.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/log4j-1.2.8.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/lib/log4j-1.2.8.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/ButtonBarContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/ButtonBarContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/ButtonBarContainer.java	(revision 10281)
@@ -0,0 +1,178 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.buttonBar;
+
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+
+import org.gvsig.gui.beans.BaseComponent;
+
+public class ButtonBarContainer extends BaseComponent {
+
+	
+	private int							wComp = 400, hComp = 26;
+	private String 						pathToImages = "images/";
+	private ArrayList 					buttons = new ArrayList();
+	private boolean 					disableAllControls = false;
+	private boolean[] 					buttonsState = null;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public ButtonBarContainer() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.setSize(wComp, hComp);
+		}
+
+	
+	/**
+	 * Añade un boton al ArrayList de los botones.
+	 * 
+	 * @param iconName: nombre del icono asignado al boton. La imagen tendrña que
+	 * 					estar dentro de la carpeta "images/"
+	 * @param tip: tip del boton;
+	 * @param order: orden que ocupará el boton dentro del control
+	 */
+	public void addButton(String iconName, String tip, int order){
+		JButton bt = new JButton();
+		
+		bt.setPreferredSize(new java.awt.Dimension(22, 22));
+		try{
+			if (iconName != null)
+				bt.setIcon(new ImageIcon(getClass().getResource(pathToImages + iconName)));
+		}catch(NullPointerException exc){
+			//El icono no existe -> No se añade ninguno
+		}
+		
+		if(tip != null)
+			bt.setToolTipText(tip);
+		
+		buttons.add(order, bt);
+		addList();
+		
+	}
+		
+	/**
+	 * Elimina el botón correspondiente al indice que le pasamos.
+	 * @param index
+	 */
+	public void delButton(int index){
+		buttons.remove(index);
+		this.removeAll();
+		addList();
+	}
+	
+	/**
+	 * Añade en el panel los botones que tenemos en el ArrayList.
+	 *
+	 */
+	public void addList(){
+		for(int i = 0 ; i < buttons.size() ; i++){
+			this.add((JButton)buttons.get(i));
+		}
+	}
+	
+	
+	/**
+	 * Esta función deshabilita todos los controles y guarda sus valores
+	 * de habilitado o deshabilitado para que cuando se ejecute restoreControlsValue
+	 * se vuelvan a quedar como estaba
+	 */
+	public void disableAllControls(){
+		if(!disableAllControls){
+			disableAllControls = true;
+			
+			buttonsState = new boolean[buttons.size()];
+			
+			
+			
+			for (int i = 0 ; i < buttons.size() ; i++){
+				
+				//Salvamos los estados
+				buttonsState[i] = ((JButton)buttons.get(i)).isEnabled();
+				//Desactivamos controles
+				((JButton)buttons.get(i)).setEnabled(false);
+			}
+		}
+	}
+	
+	/**
+	 * Esta función deja los controles como estaban al ejecutar la función 
+	 * disableAllControls
+	 */
+	public void restoreControlsValue(){
+		if(disableAllControls){
+			disableAllControls = false;
+			
+			for(int i = 0 ; i < buttons.size() ; i++){
+				((JButton)buttons.get(i)).setEnabled(buttonsState[i]);
+			}
+		}
+	}
+	
+	/**
+	 * Método para acceder a los botones del control;
+	 * @param index
+	 * @return
+	 */
+	public JButton getButton(int index){
+		return (JButton)buttons.get(index);
+	}
+
+	/**
+	 * Método para establecer la posición de los botones dentro del control.
+	 * @param align: "left" o "right"
+	 */
+	public void setButtonAlignment(String align){
+		FlowLayout layout = new FlowLayout();
+		layout.setHgap(2);
+		layout.setVgap(0);
+		
+		if (align.equals("right"))
+			layout.setAlignment(FlowLayout.RIGHT);
+		else
+			layout.setAlignment(FlowLayout.LEFT);
+		
+		this.setLayout(layout);
+	}
+	
+	public void setComponentBorder(boolean br){
+		if(br)
+			this.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		if(!br)
+			this.setBorder(javax.swing.BorderFactory.createEmptyBorder());		
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/ButtonBarContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/fullExtent.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/fullExtent.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/fullExtent.png	(revision 10281)
@@ -0,0 +1,6 @@
+‰PNG
+
+
+IHDRóÿabKGDÿÿÿ ½§“	pHYsšœtIMEÔ		:å1k¦IDATxÚ¥“¿nÂ0ÆH7wèC02°vÅQxb¤(++#Ñ�nu“ëPÙ=ÛDHå$/÷÷ûî>Ã“&S¬_Þøþú`Õ¶Øxi1ÎBJqˆ8TUÍŠ¦²¸nwúø›ËY°
+ìÄ8Åû>¡‰>—jšÚoCï{T?ÇÞ÷4ÍkšcÉ®Û�Æxßg“ÊÑTVmËãxZä¼ß¿W¾Ô@Ä¥3ÞK†cu•¦Lªø™é]wXF0Ï·„¤¤
+Ã±j°þ£ ¨j¶íy¾Ñu‡»…™”Ÿ’•§ˆK‚²â±>û?.1î&R‘ìsÉ¼ò\vWÖ~úõŒß°ptIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/fullExtent.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/selectTool.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/selectTool.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/selectTool.png	(revision 10281)
@@ -0,0 +1,5 @@
+‰PNG
+
+
+IHDRóÿaRIDATxÚÅÑÑÐÛÿt˜±XVjã>5é`ã>$®ñO=ÚÆÓº@oæ€		I²ý˜ˆë•z½�u”õoX›y
+¨HRuF	²õIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/selectTool.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/up.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/up.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/up.png	(revision 10281)
@@ -0,0 +1,5 @@
+‰PNG
+
+
+IHDR(-SúPLTE€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ›‘.tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	(þ@ù&IDATÓµÈ±
+Ã0Fÿ1s;"‘-ž9§ŸþRH!…ZZÖ"=IEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/up.png
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/down.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/down.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/down.png	(revision 10281)
@@ -0,0 +1,4 @@
+‰PNG
+
+
+IHDR(-SúPLTE€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ›‘.tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	(í,—¯ IDATÓc` 	à@è"èjÐu¡›ƒn2º]è¶“ïp¿®ÁˆŽIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/buttonBar/images/down.png
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/coordDataInput/CoordDataInputContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/coordDataInput/CoordDataInputContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/coordDataInput/CoordDataInputContainer.java	(revision 10281)
@@ -0,0 +1,301 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.coordDataInput;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.dataInput.DataInputContainer;
+
+public class CoordDataInputContainer extends BaseComponent{
+	private int					MARGIN = 12;
+	private int					wComp = 350, hComp = 80;
+	private int					hPanel = 24;
+	private int					wLabels = 60, hLabels = 22;
+	private int					wData = 152, hData = 24;
+	
+	private JPanel pCoord = null;
+	private JPanel pData1 = null;
+	private JPanel pData2 = null;
+	private JLabel lTitulo1 = null;
+	private JLabel lTitulo2 = null;
+	private DataInputContainer pDataInput11 = null;
+	private DataInputContainer pDataInput12 = null;
+	private DataInputContainer pDataInput21 = null;
+	private DataInputContainer pDataInput22 = null;
+	
+	private String				tituloPanel = "Title";
+
+	/**
+	 * This is the default constructor
+	 */
+	public CoordDataInputContainer(int w, int h) {
+		super();
+		this.wComp = w;
+		setComponentSize(wComp, hComp);
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		this.setLayout(flowLayout);
+		this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		this.add(getPCoord(), null);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPCoord() {
+		if (pCoord == null) {
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 1;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+			pCoord = new JPanel();
+			pCoord.setLayout(new GridBagLayout());
+			pCoord.setBorder(javax.swing.BorderFactory.createTitledBorder(null, tituloPanel, javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10), null));
+			pCoord.add(getPData1(), gridBagConstraints);
+			pCoord.add(getPData2(), gridBagConstraints2);
+		}
+		return pCoord;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPData1() {
+		if (pData1 == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setHgap(0);
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout1.setVgap(0);
+			pData1 = new JPanel();
+			pData1.setLayout(flowLayout1);
+			pData1.add(getLTitulo1(), null);
+			pData1.add(getPDataInput11(), null);
+			pData1.add(getPDataInput12(), null);
+			//pData1.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+		}
+		return pData1;
+	}
+
+	private JLabel getLTitulo1(){
+		if (lTitulo1 == null){
+			lTitulo1 = new JLabel();
+			lTitulo1.setText("JLabel");
+		}
+		return lTitulo1;
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPData2() {
+		if (pData2 == null) {
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setHgap(0);
+			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout2.setVgap(0);
+			pData2 = new JPanel();
+			pData2.setLayout(flowLayout2);
+			pData2.add(getLTitulo2(), null);
+			pData2.add(getPDataInput21(), null);
+			pData2.add(getPDataInput22(), null);
+			//pData2.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+		}
+		return pData2;
+	}
+
+	private JLabel getLTitulo2(){
+		if (lTitulo2 == null){
+			lTitulo2 = new JLabel();
+			lTitulo2.setText("JLabel");
+		}
+		return lTitulo2;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getPDataInput11() {
+		if (pDataInput11 == null) {
+			pDataInput11 = new DataInputContainer(0);
+		}
+		return pDataInput11;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getPDataInput12() {
+		if (pDataInput12 == null) {
+			pDataInput12 = new DataInputContainer(0);
+		}
+		return pDataInput12;
+	}
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getPDataInput21() {
+		if (pDataInput21 == null) {
+			pDataInput21 = new DataInputContainer(0);
+		}
+		return pDataInput21;
+	}
+
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public DataInputContainer getPDataInput22() {
+		if (pDataInput22 == null) {
+			pDataInput22 = new DataInputContainer(0);
+		}
+		return pDataInput22;
+	}
+	
+	/**
+	 * Método para introducir los campos del componente. Por orden de
+	 * arriba a abajo se introducen las cadenas que tienen que ir en el panel.
+	 * @param tPanel
+	 * @param titulo1
+	 * @param celda11
+	 * @param celda12
+	 * @param titulo2
+	 * @param celda21
+	 * @param celda22
+	 */
+	public void setParameters(String tPanel, String titulo1, String celda11, String celda12, String titulo2, String celda21, String celda22){
+		this.tituloPanel = tPanel;
+		this.lTitulo1.setText(titulo1);
+		this.pDataInput11.setLabelText(celda11);
+		this.pDataInput12.setLabelText(celda12);
+		this.lTitulo2.setText(titulo2);
+		this.pDataInput21.setLabelText(celda21);
+		this.pDataInput22.setLabelText(celda22);
+		pCoord.setBorder(javax.swing.BorderFactory.createTitledBorder(null, tituloPanel, javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.PLAIN, 10), null));
+		
+	}
+	
+	/**
+	 * Modifica el tamaño del componente.
+	 * @param w
+	 * @param h
+	 */
+	public void setComponentSize(int w, int h){
+		wComp = w;
+		this.getPCoord().setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		this.getLTitulo1().setPreferredSize(new java.awt.Dimension(wLabels,hLabels));
+		this.getLTitulo2().setPreferredSize(new java.awt.Dimension(wLabels,hLabels));
+		this.getPData1().setPreferredSize(new java.awt.Dimension(wComp - MARGIN, hPanel));
+		this.getPData2().setPreferredSize(new java.awt.Dimension(wComp - MARGIN, hPanel));
+		
+		wData = (int)Math.floor((wComp - wLabels - 10) >> 1);
+		int MARG = 2;
+		this.getPDataInput11().setPreferredSize(new java.awt.Dimension(wData,hData));
+		this.pDataInput11.setComponentSize(wData - MARG, hData - MARG);
+		this.getPDataInput12().setPreferredSize(new java.awt.Dimension(wData,hData));
+		this.pDataInput12.setComponentSize(wData - MARG, hData - MARG);
+		this.getPDataInput21().setPreferredSize(new java.awt.Dimension(wData,hData));
+		this.pDataInput21.setComponentSize(wData - MARG, hData - MARG);
+		this.getPDataInput22().setPreferredSize(new java.awt.Dimension(wData,hData));
+		this.pDataInput22.setComponentSize(wData - MARG, hData - MARG);
+	}
+	
+	/**
+	 * Indica si los campos de texto admiten valores
+	 * decimales o no.
+	 * @param dec
+	 */
+	public void setDecimalValues(boolean dec){
+		this.pDataInput11.setDecimal(dec);
+		this.pDataInput12.setDecimal(dec);
+		this.pDataInput21.setDecimal(dec);
+		this.pDataInput22.setDecimal(dec);
+	}
+	
+	
+	/**
+	 * Indica si los campos de texto admiten cadenas de
+	 * de caracteres.
+	 * @param car
+	 */
+	public void setCaracterValues(boolean car){
+		this.pDataInput11.setCaracter(car);
+		this.pDataInput12.setCaracter(car);
+		this.pDataInput21.setCaracter(car);
+		this.pDataInput22.setCaracter(car);
+	}
+	
+	
+	/**
+	 * Devuelve los valores del panel por orden de izquierda a derecha
+	 * y de arriba a bajo.
+	 * @return
+	 */
+	public String[] getValues(){
+		String[] values = {this.pDataInput11.getValue(),
+					this.pDataInput12.getValue(),
+					this.pDataInput21.getValue(),
+					this.pDataInput22.getValue()
+		};
+		return values;
+	}
+	
+	/**
+	 * Asigna los valores del panel por orden de izquierda a derecha
+	 * y de arriba a bajo.
+	 * @return
+	 */
+	public void setValues(String[] values){
+		this.pDataInput11.setValue(values[0]);
+		this.pDataInput12.setValue(values[1]);
+		this.pDataInput21.setValue(values[2]);
+		this.pDataInput22.setValue(values[3]);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/coordDataInput/CoordDataInputContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java	(revision 10281)
@@ -0,0 +1,228 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.textincreaser;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.BaseComponent;
+
+/**
+ * 
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class TextIncreaserContainer extends BaseComponent implements ActionListener{
+	
+	private int 				width = 70, height = 25;
+	private JTextField 			tText = null;
+	private JPanel				pButtons = null;
+	private JButton 			bmas = null;
+	private JButton 			bmenos = null;
+	private JPanel				pGeneral = null;
+	private	double 				minValue = 0;
+	private	double 				maxValue = 100;
+	private	double 				init = 0;
+	private String				pathToImages = "images/";//"/com/iver/cit/gvsig/gui/panels/images/";
+	/**
+	 * Variable que está a true si los controles están a la derecha
+	 */
+	private boolean isRight = true;
+	
+	/**
+	 * Creación de un componente TextIncrearserContainer
+	 * @param width Ancho del componente
+	 * @param minValue Mínimo valor que puede tomar el texto del control
+	 * @param maxValue Máximo valor que puede tomar el texto del control
+	 * @param right	a true si queremos que los controles se muestren a la derecha del TextBox
+	 * y false si los queremos a la izquierda
+	 */
+	public TextIncreaserContainer(int width, double minValue, double maxValue, double init, boolean right) {
+		super();
+		this.width = width;
+		this.minValue = minValue;
+		this.maxValue = maxValue;
+		this.isRight = right;
+		this.init = init;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setHgap(0);
+        flowLayout.setVgap(0);
+        FlowLayout flowLayout5 = new FlowLayout();
+        flowLayout5.setHgap(0);
+        flowLayout5.setVgap(0);
+        this.setLayout(flowLayout5);
+        //this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+        this.setSize(new java.awt.Dimension(width, width));
+        this.setPreferredSize(new java.awt.Dimension(width, width));
+        this.add(getPGeneral(), null);
+			
+	}
+
+	/**
+	 * Asigna un valor al textBox
+	 * @param value
+	 */
+	public void setValue(double value){
+		getTText().setText(Double.toString(value));
+	}
+	
+	/**
+	 * Obtiene el valor del textBox
+	 * @return value
+	 */
+	public double getValue(){
+		try{
+			Double.valueOf(getTText().getText()).doubleValue();	
+		}catch(NumberFormatException exc){
+			getTText().setText("0.0");
+			return 0;
+		}
+		return Double.valueOf(getTText().getText()).doubleValue();
+	}
+	
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getTText() {
+		if (tText == null) {
+			tText = new JTextField();
+			tText.setText(Double.toString(init));
+			tText.setPreferredSize(new java.awt.Dimension(width - 25,25));
+		}
+		return tText;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints3.gridy = 1;
+			gridBagConstraints3.gridx = 0;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints2.gridy = 0;
+			gridBagConstraints2.gridx = 0;
+			pButtons = new JPanel();
+			pButtons.setLayout(new GridBagLayout());
+			pButtons.setPreferredSize(new java.awt.Dimension(25,25));
+			pButtons.add(getBmas(), gridBagConstraints2);
+			pButtons.add(getBmenos(), gridBagConstraints3);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBmas() {
+		if (bmas == null) {
+			bmas = new JButton();
+			bmas.setPreferredSize(new java.awt.Dimension(25,12));
+			bmas.addActionListener(this);
+			bmas.setIcon(new ImageIcon(getClass().getResource(pathToImages + "mas.png")));
+		}
+		return bmas;
+	}
+
+	/**
+	 * This method initializes jButton1	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBmenos() {
+		if (bmenos == null) {
+			bmenos = new JButton();
+			bmenos.setPreferredSize(new java.awt.Dimension(25,12));
+			bmenos.addActionListener(this);
+			bmenos.setIcon(new ImageIcon(getClass().getResource(pathToImages + "menos.png")));
+		}
+		return bmenos;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+			if(isRight){
+				gridBagConstraints1.gridx = 1;
+				gridBagConstraints.gridx = 0;
+			}else{
+				gridBagConstraints1.gridx = 0;
+				gridBagConstraints.gridx = 1;
+			}
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints1.gridy = 0;
+			gridBagConstraints.weightx = 1.0;
+			pGeneral = new JPanel();
+			pGeneral.setLayout(new GridBagLayout());
+			pGeneral.setPreferredSize(new java.awt.Dimension(width, 25));
+			pGeneral.add(getTText(), gridBagConstraints);
+			pGeneral.add(getPButtons(), gridBagConstraints1);
+		}
+		return pGeneral;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		double value = Double.parseDouble(getTText().getText());
+		if(e.getSource() == bmas){
+			value ++;
+			if(value <= maxValue)
+				tText.setText(Double.toString(value));
+		}
+		
+		if(e.getSource() == bmenos){
+			value --;
+			if(value >= minValue)
+				tText.setText(Double.toString(value));
+		}
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/mas.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/mas.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/mas.png	(revision 10281)
@@ -0,0 +1,4 @@
+‰PNG
+
+
+IHDR		×Oö"ñPLTE€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿž‘ÆStRNS@æØf	pHYsšœtIMEÖ‘íñIDAT×c`@¬¬8Y¬P€ÌÂ«€�©ƒauIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/mas.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/menos.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/menos.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/menos.png	(revision 10281)
@@ -0,0 +1,5 @@
+‰PNG
+
+
+IHDR		×Oö"ñPLTE€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿž‘ÆStRNS@æØf	pHYsšœtIMEÖ–C4yIDAT×c` °B2/
+QÝ«h–IEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/textincreaser/images/menos.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/listeners/OpenFileListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/listeners/OpenFileListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/listeners/OpenFileListener.java	(revision 10281)
@@ -0,0 +1,83 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.openFile.listeners;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+
+import org.gvsig.gui.beans.openFile.OpenFileContainer;
+
+public class OpenFileListener implements ActionListener{
+
+	private JButton button = null;
+	private String fName = null;
+	private OpenFileContainer controlPanel= null;
+	
+	public OpenFileListener(OpenFileContainer panel){
+		this.controlPanel = panel;
+	}
+	
+	public void setButton(JButton but){
+		this.button = but;
+	}
+	
+	
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == this.button){
+			JFileChooser file = new JFileChooser();
+			file.setDialogTitle("Select File");
+			file.addChoosableFileFilter(new ReadFilter(file, "raw"));
+			int returnVal = file.showOpenDialog(controlPanel);
+			if(returnVal == JFileChooser.APPROVE_OPTION){
+				fName = file.getSelectedFile().toString();
+				controlPanel.getTOpen().setText(fName);
+			}
+		}
+		
+	}
+
+	public String getFileName(){
+		return fName;
+	}
+	
+}
+
+class ReadFilter extends javax.swing.filechooser.FileFilter{
+
+	JFileChooser chooser = null;
+	String filter = null;
+	
+	public ReadFilter(JFileChooser cho,String fil){
+		this.chooser = cho;
+		this.filter = fil;
+	}
+	
+	public boolean accept(File f) {
+		 return f.isDirectory() || f.getName().toLowerCase().endsWith("."+filter);
+	}
+
+	public String getDescription() {
+		return "."+filter;
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/listeners/OpenFileListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/OpenFileContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/OpenFileContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/OpenFileContainer.java	(revision 10281)
@@ -0,0 +1,171 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.openFile;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.File;
+
+import javax.swing.JButton;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.openFile.listeners.OpenFileListener;
+import org.gvsig.i18n.Messages;
+
+public class OpenFileContainer extends BaseComponent{
+
+	
+	private int 					wComp = 500, hComp = 55;
+	private int						wButton = 165;
+	private int						wText = (int)Math.floor(0.63 * wComp);
+	private int						hButton = 22;
+	
+	private JButton jButton = null;
+	private JTextField tOpen = null;
+	private OpenFileListener listener = null;
+	
+	private String borderText = "Open";
+	private boolean isButtonVisible = true;
+	
+	public OpenFileContainer() {
+		super();
+		listener = new OpenFileListener(this);
+		initialize();
+		listener.setButton(this.getJButton());
+	}
+	
+	/**
+	 * Constructor
+	 * @param WIDTH
+	 * Window width
+	 * @param HEIGHT
+	 * Window height
+	 * @param isButtonVisible
+	 * If the open button is visible
+	 */
+	public OpenFileContainer(int WIDTH,int HEIGHT,boolean isButtonVisible){
+		super();
+		this.isButtonVisible = isButtonVisible;
+		this.wComp = WIDTH;
+		this.hComp = HEIGHT;
+		listener = new OpenFileListener(this);
+		initialize();
+		listener.setButton(this.getJButton());	
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints1.gridx = 1;
+        gridBagConstraints1.gridy = 0;
+        gridBagConstraints1.weightx = 10.0;
+        gridBagConstraints1.insets = new java.awt.Insets(0,2,0,0);
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,2);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.weightx = 1.0;
+        this.setLayout(new GridBagLayout());
+        this.setSize(new java.awt.Dimension(500,50));
+        this.setBorder(javax.swing.BorderFactory.createTitledBorder(null, Messages.getText("open_file"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        this.add(getJButton(), gridBagConstraints);
+        this.add(getTOpen(), gridBagConstraints1);
+			
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			jButton.setPreferredSize(new java.awt.Dimension(wButton,hButton));
+			jButton.addActionListener(listener);
+			jButton.setSize(wButton, hButton);
+			jButton.setText(Messages.getText("abrir..."));
+			jButton.setVisible(isButtonVisible);
+			getTOpen().setEnabled(isButtonVisible);
+		}
+		return jButton;
+	}
+
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getTOpen() {
+		if (tOpen == null) {
+			tOpen = new JTextField();
+			if (isButtonVisible){
+				tOpen.setPreferredSize(new java.awt.Dimension(wText,hButton));
+			}else{
+				tOpen.setPreferredSize(new java.awt.Dimension((int)Math.floor(wComp * 0.95),hButton));
+			}
+		}
+		return tOpen;
+	}
+	
+	/**
+	 * Pone el texto que le pasamos como texto del borde del panel.
+	 * @param text
+	 */
+	public void setBorderText(String text){
+		this.borderText = text;
+	}
+	
+	
+	public void setComponentSize(int w, int h){
+		wComp = w;
+		hComp = 55;
+		wText = (int)Math.floor(0.63 * wComp);
+		
+		this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		if (isButtonVisible){
+			this.getTOpen().setPreferredSize(new java.awt.Dimension(wText, hButton));
+		}else{
+			this.getTOpen().setPreferredSize(new java.awt.Dimension((int)Math.floor(wComp * 0.95), hButton));
+		}
+	}
+	
+
+	/**
+	 * Devuelve el file cuya ruta corresponde con el campo de texto.
+	 * @return
+	 */
+	public File getFile(){
+		File fil = null;
+		if(this.getTOpen().getText() != ""){
+			try{
+				fil = new File(this.getTOpen().getText());
+			}catch(Exception exc){
+				System.err.println("Ruta o archivo no válido");
+			}
+		}
+		return fil;
+	}
+	
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/openFile/OpenFileContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_pt_br.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_pt_br.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_pt_br.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_pt_br.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_pt_br.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_fr.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_fr.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_fr.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_fr.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_fr.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_de.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_de.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_de.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_de.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_de.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_eu.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_eu.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_eu.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_eu.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_eu.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_it.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_it.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_it.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_it.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_it.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text.properties	(revision 10281)
@@ -0,0 +1,26 @@
+#text.properties
+abrir...=Abrir...
+abrir_archivo=Abrir Archivo
+acumulado=Acumulado
+añadir_banda=Añadir banda
+banda=Banda
+bandas=Bandas
+crear_tabla=Crear Tabla
+datos_visualizados=Datos visualizados
+extraer=Extraer
+filtros=Filtros
+formato_no_numerico=Formato no numérico
+limpiar=Limpiar
+maximo=Máximo
+media=Media
+mediana=Mediana
+minimo=Mínimo
+npixeles=Número de pixeles
+no_acumulado=No acumulado
+open_file=Abrir Archivo
+origen=Origen
+seleccion_color=Selección de Color
+seleccion_alpha=Selección de Transparencia
+tipo=Tipo
+todas=Todas
+vista=Vista

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_en.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_en.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_en.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_en.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_en.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_ca.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_ca.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_ca.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_ca.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_ca.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_cs.properties
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_cs.properties	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_cs.properties	(revision 10281)
@@ -0,0 +1 @@
+#text_cs.properties

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/translations/text_cs.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/listeners/SliderTextListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/listeners/SliderTextListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/listeners/SliderTextListener.java	(revision 10281)
@@ -0,0 +1,101 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.slidertext.listeners;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gvsig.gui.beans.slidertext.SliderTextContainer;
+
+/**
+ * 
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class SliderTextListener implements ChangeListener, ActionListener, KeyListener, FocusListener{
+
+	private SliderTextContainer		sliderTextContainer = null;
+	private String 					lastText = "";
+		
+	public SliderTextListener(SliderTextContainer panel){
+		this.sliderTextContainer = panel;
+	}
+	
+	private void initialize(){
+		
+	}
+	
+	public void actionPerformed(ActionEvent e) {
+		
+	}
+
+	public void stateChanged(ChangeEvent e) {
+		//Modificamos la caja de texto con el valor de la posición del slider
+		sliderTextContainer.getText().setText(sliderTextContainer.getSlider().getValue()+"");
+	}
+
+	public void keyPressed(KeyEvent e) {
+		lastText = sliderTextContainer.getText().getText();
+	}
+
+	public void keyReleased(KeyEvent e) {
+		validateTextField();
+		
+		//Asignamos la nueva posición de la barra cuando se modifica el texto
+		if(e.getKeyCode() == 10){
+			sliderTextContainer.getSlider().setValue(Double.valueOf(sliderTextContainer.getText().getText()).intValue());
+		}
+	}
+
+	public void keyTyped(KeyEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void focusGained(FocusEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void focusLost(FocusEvent e) {
+		validateTextField();
+	}
+
+	/**
+	 * Comprobamos que los datos introducidos por el texto sean correctos sino 
+	 * borramos el último caracter
+	 */
+	private void validateTextField(){
+		try{
+			Double.valueOf(sliderTextContainer.getText().getText());
+		}catch(NumberFormatException exc){
+			if(!sliderTextContainer.getText().getText().equals(""))
+				sliderTextContainer.getText().setText(lastText);
+			else
+				sliderTextContainer.getText().setText("0");
+		}
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/listeners/SliderTextListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/SliderTextContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/SliderTextContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/SliderTextContainer.java	(revision 10281)
@@ -0,0 +1,179 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.slidertext;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.slidertext.listeners.SliderTextListener;
+
+/**
+ * Barra de deslizamiento con una ventana de texto que tiene el valor de la posición de
+ * la barra. En este control podrá controlarse mediante la entrada de datos por la caja de
+ * texto la posibilidad de introducir valores decimales.
+ *  
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class SliderTextContainer extends BaseComponent{
+
+	private int 	MARGIN = 8;
+	private int 	WTEXT = 50;
+	private JPanel pSlider = null;
+	private JPanel pText = null;
+	private JSlider slider = null;
+	private JTextField text = null;
+	private int	width = 260;
+	private int	height = 35;
+	private int min = 0;
+	private int max = 255;
+	private int defaultPos = 0;
+	private SliderTextListener listener = null;
+	
+	/**
+	 * Contructor
+	 * @param width Ancho del componente
+	 * @param height Alto del componente
+	 * @param min Valor mínimo de la barra
+	 * @param max Valor máximo de la barra
+	 * @param defaultPos Posición por defecto 
+	 */
+	public SliderTextContainer(int width, int height, int min, int max, int defaultPos) {
+		super();
+		this.width = width;
+		this.height = height;
+		this.min = min;
+		this.max = max;
+		this.defaultPos = defaultPos;
+	
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		listener = new SliderTextListener(this);
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.gridx = 1;
+        gridBagConstraints1.gridy = 0;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getPSlider(), gridBagConstraints);
+        this.add(getPText(), gridBagConstraints1);
+        this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+        setComponentSize(width, height);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPSlider() {
+		if (pSlider == null) {
+			pSlider = new JPanel();
+			pSlider.add(getSlider(), null);
+		}
+		return pSlider;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPText() {
+		if (pText == null) {
+			pText = new JPanel();
+			pText.setPreferredSize(new java.awt.Dimension(WTEXT,35));
+			pText.add(getText(), null);
+		}
+		return pText;
+	}
+
+	/**
+	 * This method initializes jSlider	
+	 * 	
+	 * @return javax.swing.JSlider	
+	 */
+	public JSlider getSlider() {
+		if (slider == null) {
+			slider = new JSlider();
+			slider.setMajorTickSpacing(50);
+			slider.setPaintTicks(true);
+			slider.setMinorTickSpacing(10);
+			slider.setMinimum(min);
+			slider.setMaximum(max);
+			slider.setValue(defaultPos);
+			slider.addChangeListener(listener);
+		}
+		return slider;
+	}
+
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getText() {
+		if (text == null) {
+			text = new JTextField();
+			text.setText(defaultPos+"");
+			text.addFocusListener(listener);
+			text.addKeyListener(listener);
+		}
+		return text;
+	}
+	
+	public void setComponentSize(int w, int h){
+		this.width = w;
+		this.height = h;
+        this.setPreferredSize(new java.awt.Dimension(width, height));
+		pSlider.setPreferredSize(new java.awt.Dimension(width - MARGIN - WTEXT, 27));
+		pText.setPreferredSize(new java.awt.Dimension(WTEXT,35));
+		slider.setPreferredSize(new java.awt.Dimension(width - WTEXT - MARGIN,27));
+		text.setPreferredSize(new java.awt.Dimension(WTEXT - 10, 19));
+	}
+	
+	/**
+	 * Obtiene el valor del control.
+	 * @return Valor del control en formato double.
+	 */
+	public double getValue(){
+		return Double.valueOf(getText().getText()).doubleValue();
+	}
+
+	/**
+	 * Asigna el valor del control.
+	 * @return Valor del control en formato double.
+	 */
+	public void setValue(double value){
+		getText().setText(String.valueOf(value));
+		getSlider().setValue((int)value);
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/slidertext/SliderTextContainer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableContainer.java	(revision 10281)
@@ -0,0 +1,353 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JPanel;
+import javax.swing.table.DefaultTableModel;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.listeners.TableListener;
+
+/**
+ * Contenedor para los componentes de la tabla. Incluye la tabla  y el panel
+ * de control.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableContainer extends BaseComponent{
+
+	private static final int		INTERNAL_MARGIN = 10;
+	private  int					HEIGHT_CONTROL = 24;
+			
+	private Table 					pTable = null;
+	private JPanel	 				pControl = null;
+	private int 					width = 400, height = 200;
+	private TableControlerPanel 	pTableControl = null;
+	private JPanel 					pGeneral = null;
+    private String[]				columnNames = null;
+    private int[]					columnWidths = null;
+    private TableListener			tableListener = null;
+    //Variable que indica si la tabla ha sido inicializada
+    private boolean					initTable = false;
+    private String					tableModelClass = "ListModel";
+    private int						lastAssignW, lastAssignH;
+	
+    /**
+     * 
+     * @param width Ancho de la tabla en pixeles
+     * @param height Alto de la tabla en pixeles
+     * @param columnNames Vector de nombres de columna
+     * @param columnsWidth	Vector de anchos para cada columna. Ha de tener el mismo número de elementos que columnNames. 
+     * Si vale null las columnas se pondrán equidistantes. 
+     */
+	public TableContainer(int width, int height, String[] columnNames, int[] columnWidths) {
+		this.width = width;
+		this.height = height;
+		this.columnNames = columnNames;
+		this.columnWidths = columnWidths;
+	}
+		
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	public void initialize() {
+        initTable = true;
+		this.tableListener = new TableListener(this);
+        this.add(getPGeneral(), new GridBagLayout());
+	}
+	
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		lastAssignW = w;
+		lastAssignH = h;
+		//getPControl().setSize(w - INTERNAL_MARGIN, HEIGHT_CONTROL);
+		getPControl().setPreferredSize(new java.awt.Dimension(w - INTERNAL_MARGIN, HEIGHT_CONTROL));
+		getPGeneral().setPreferredSize(new java.awt.Dimension(w, h));
+		getPTable().setComponentSize(w - INTERNAL_MARGIN, h - INTERNAL_MARGIN - HEIGHT_CONTROL - (INTERNAL_MARGIN / 2));
+	}
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public Table getPTable() {
+		if (pTable == null) {
+			pTable = new Table(	width - INTERNAL_MARGIN , 
+								height - INTERNAL_MARGIN - HEIGHT_CONTROL - (INTERNAL_MARGIN / 2),
+								columnNames,
+								columnWidths,
+								tableListener,
+								tableModelClass);
+			pTable.setTableContainer(this);
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setVgap(0);
+			pTable.setLayout(flowLayout);
+		}
+		return pTable;
+	}
+
+	/**
+	 * This method initializes jPanel1
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPControl() {
+		if (pControl == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(0);
+			flowLayout.setHgap(0);
+			pControl = new JPanel();
+			pControl.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pControl.setLayout(flowLayout);
+			pControl.setSize(width - INTERNAL_MARGIN, HEIGHT_CONTROL);
+			pControl.setPreferredSize(new java.awt.Dimension(width - INTERNAL_MARGIN, HEIGHT_CONTROL));
+			pControl.add(getPTableControl(), null);
+		}
+		return pControl;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TableControlerPanel getPTableControl() {
+		if (pTableControl == null) {
+			pTableControl = new TableControlerPanel(tableListener);
+		}
+		return pTableControl;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+	        gridBagConstraints.insets = new java.awt.Insets(0,0,(INTERNAL_MARGIN / 2),0);
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.gridy = 1;
+	        gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
+			pGeneral = new JPanel();
+			pGeneral.setPreferredSize(new java.awt.Dimension(width, height));
+			pGeneral.setLayout(new GridBagLayout());
+			pGeneral.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pGeneral.add(getPTable(), gridBagConstraints);
+			pGeneral.add(getPControl(), gridBagConstraints1);
+		}
+		return pGeneral;
+	}
+	
+	//********************Métodos de Tabla*****************************//
+	
+	/**
+	 * Añade una fila a la tabla.
+	 * @param list Lista de cadenas
+	 */
+	public void addRow(Object[] list)throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		TableListener.comboEventEnable = false;
+		((Table)pTable).addRow(list);
+		pTableControl.addPointToTable(((Table)pTable).getTable().getRowCount());
+		setSelectedIndex(getRowCount() - 1);
+		TableListener.comboEventEnable = true;
+	}
+	
+	/**
+	 * Elimina una fila de la tabla.
+	 * @param i Fila a eliminar
+	 */
+	public void delRow(int i)throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		TableListener.comboEventEnable = false;
+		try{
+			setSelectedIndex(getSelectedIndex() - 1);
+		}catch(ArrayIndexOutOfBoundsException ex){
+			try{
+				setSelectedIndex(getSelectedIndex() + 1);
+			}catch(ArrayIndexOutOfBoundsException exc){}
+		}
+		((Table)pTable).delRow(i);
+		pTableControl.setNItems(getRowCount());
+		TableListener.comboEventEnable = true;
+	}
+
+	/**
+	 * Elimina todas las filas de la tabla.
+	 */
+	public void removeAllRows()throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		TableListener.comboEventEnable = false;
+		((Table)pTable).removeAllRows();
+		pTableControl.setNItems(0);
+		TableListener.comboEventEnable = true;
+	}
+	
+	/**
+	 * Obtiene el número de filas en la tabla
+	 * @return Número de filas de la tabla
+	 */
+	public int getRowCount()throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		return ((Table)pTable).getTable().getRowCount();
+	}
+	
+	/**
+	 * Selecciona un punto de la lista
+	 * @param i punto a seleccionar
+	 */
+	public void setSelectedIndex(int i)throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		TableListener.comboEventEnable = false;
+		try{
+			pTableControl.setSelectedIndex(i);
+			((Table)pTable).getTable().setRowSelectionInterval(i, i);
+		}catch(IllegalArgumentException ex){
+			
+		}
+		TableListener.comboEventEnable = true;
+	}
+	
+	/**
+	 * Obtiene el punto seleccionado de la lista
+	 * @return Posición del punto seleccionado de la tabla
+	 */
+	public int getSelectedIndex()throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		return ((Table)pTable).getTable().getSelectedRow();
+	}
+
+	/**
+	 * Asigna un valor a una posición de la tabla
+	 * @param value Valor
+	 * @param row Fila
+	 * @param col Columna
+	 */
+	public void setValueAt(Object value, int row, int col)throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		((Table)pTable).getTable().setValueAt(value, row, col);
+	}
+	
+	/**
+	 * Dice si una tabla es editable o no. 
+	 * Este flag hay que asignarlo antes de la inicialización de tabla.
+	 * @param editable
+	 */
+	public void setEditable(boolean editable)throws NotInitializeException{
+		if(!initTable)
+			throw new NotInitializeException();
+		
+		if(!editable)
+			((Table)pTable).getTable().setBackground(getPGeneral().getBackground());
+		else
+			((Table)pTable).getTable().setBackground(Color.white);
+		
+		((Table)pTable).getTable().setEnabled(editable);
+	}
+	
+	/**
+	 * Asigna el modelo de la tabla
+	 * @param model cadena con el nombre del modelo
+	 */
+	public void setModel(String model){
+		tableModelClass = model;
+	}
+	
+	/**
+	 * Obtiene el model de la tabla
+	 * @return
+	 */
+	public DefaultTableModel getModel(){
+		return (DefaultTableModel)((Table)pTable).getTable().getModel();
+	}
+
+	/**
+	 * Asigna al panel de control de tabla la propiedad de visible/invisible a true o false
+	 * @param visible
+	 */
+	public void setControlVisible(boolean visible){
+		getPTableControl().setVisible(visible);
+		if(!visible)
+			HEIGHT_CONTROL = 0;
+		else
+			HEIGHT_CONTROL = 24;
+	}
+	
+	/**
+	 * Obtiene el control de tabla
+	 * @return TableControlerPanel
+	 */
+	public TableControlerPanel getControl(){
+		return this.pTableControl;
+	}
+	
+	/**
+	 * Desactiva o activa el evento de nueva linea. Si se desactiva tendrá que ser
+	 * gestionado por el cliente
+	 * @param enabled true para activar y false para desactivar
+	 */
+	public void setEnableControlsListener(boolean enabled){
+		tableListener.enableNewLineListener = enabled;
+	}
+	
+	/**
+	 * Activar o desactivar los componentes del panel
+	 */
+	public void setEnabled(boolean enabled){
+		getPTable().getTable().setEnabled(enabled);
+		if(!enabled)
+			getPTableControl().disableAllControls();
+		else
+			getPTableControl().restoreControlsValue();
+	}
+ }

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableContainer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableControlerPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableControlerPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableControlerPanel.java	(revision 10281)
@@ -0,0 +1,456 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.FlowLayout;
+import java.awt.event.ActionListener;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.i18n.Messages;
+
+/**
+ * Control para el manejo de tablas. No contiene eventos, estos deben 
+ * ser manejados desde la clase que lo llame.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableControlerPanel extends JPanel{
+		
+	//**********************Vars**********************************
+	private JButton 					bPrev = null;
+	private JComboBox 					cPoint = null;
+	private JButton 					bNext = null;
+	private JButton 					bFirst = null;
+	private JButton 					bLast = null;
+	private JPanel 						pTableControl = null;
+	private JLabel 						lPoints = null;
+	private JLabel 						lNumberOfPoints = null;
+	private JButton 					bNew = null;
+	private JButton 					bDelPoint = null;
+	private JButton 					bClear = null;
+	private String						pathToImages = "images/";//"/com/iver/cit/gvsig/gui/panels/images/";
+	/**
+	 * Estado de los botones cuando se ejecuta disableAllControls
+	 */
+	private boolean[] 					buttonsState = new boolean[8];
+	/**
+	 * DisableAllControls ha sido ejecutada si está a true esta variabled
+	 */
+	private boolean 					disableAllControls = false;
+	//**********************End Vars******************************
+	
+	//**********************Methods*******************************
+	/**
+	 * This is the default constructor
+	 */
+	public TableControlerPanel(ActionListener buttonsListener) {
+		super();
+		initialize(buttonsListener);
+
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize(ActionListener buttonsListener) {                
+		this.setPreferredSize(new java.awt.Dimension(295,22));
+		this.setSize(new java.awt.Dimension(295,22));
+		FlowLayout flowLayout5 = new FlowLayout();
+		flowLayout5.setHgap(0);
+		flowLayout5.setVgap(0);
+        
+		this.setLayout(flowLayout5);
+		
+		lPoints = new JLabel();
+		lPoints.setText(Messages.getText("puntos"));
+		lPoints.setPreferredSize(new java.awt.Dimension(46,15));
+		this.add(lPoints, null);
+		
+		this.add(getBFirst(), null);
+		this.add(getBPrev(), null);
+		this.add(getCPoint(), null);
+		this.add(getBNext(), null);
+		this.add(getBLast(), null);
+		this.add(getBNew(), null);
+		this.add(getLNumberOfPoints(), null);
+		this.add(getBDelPoint(), null);
+		this.add(getBClear(), null);
+		
+		getBFirst().addActionListener(buttonsListener);
+		getBPrev().addActionListener(buttonsListener);
+		getCPoint().addActionListener(buttonsListener);
+		getBNext().addActionListener(buttonsListener);
+		getBLast().addActionListener(buttonsListener);
+		getBNew().addActionListener(buttonsListener);
+		getBDelPoint().addActionListener(buttonsListener);
+		getBClear().addActionListener(buttonsListener);
+	}
+	
+	/**
+	 * Esta función deshabilita todos los controles y guarda sus valores
+	 * de habilitado o deshabilitado para que cuando se ejecute restoreControlsValue
+	 * se vuelvan a quedar como estaba
+	 */
+	public void disableAllControls(){
+		if(!disableAllControls){
+			disableAllControls = true;
+			//Salvamos los estados
+			
+			buttonsState[0] = getBFirst().isEnabled();
+			buttonsState[1] = getBPrev().isEnabled();
+			buttonsState[2] = getCPoint().isEnabled();
+			buttonsState[3] = getBNext().isEnabled();
+			buttonsState[4] = getBLast().isEnabled();
+			buttonsState[5] = getBDelPoint().isEnabled();
+			buttonsState[6] = getBClear().isEnabled();
+			buttonsState[7] = getBNew().isEnabled();
+						
+			//Desactivamos controles
+			getBFirst().setEnabled(false);
+			getBPrev().setEnabled(false);
+			getCPoint().setEnabled(false);
+			getBNext().setEnabled(false);
+			getBLast().setEnabled(false);
+			getBDelPoint().setEnabled(false);
+			getBClear().setEnabled(false);
+			getBNew().setEnabled(false);
+		}
+	}
+	
+	/**
+	 * Esta función deja los controles como estaban al ejecutar la función 
+	 * disableAllControls
+	 */
+	public void restoreControlsValue(){
+		if(disableAllControls){
+			disableAllControls = false;
+			getBFirst().setEnabled(buttonsState[0]);
+			getBPrev().setEnabled(buttonsState[1]);
+			getCPoint().setEnabled(buttonsState[2]);
+			getBNext().setEnabled(buttonsState[3]);
+			getBLast().setEnabled(buttonsState[4]);
+			getBDelPoint().setEnabled(buttonsState[5]);
+			getBClear().setEnabled(buttonsState[6]);
+			getBNew().setEnabled(buttonsState[6]);
+		}
+	}
+	//**********************Methods*******************************
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */    
+	public JButton getBFirst() {
+		if (bFirst == null) {
+			bFirst = new JButton();
+			bFirst.setPreferredSize(new java.awt.Dimension(22,22));
+			bFirst.setEnabled(false);
+			bFirst.setIcon(new ImageIcon(getClass().getResource(pathToImages + "first.png")));
+			bFirst.setToolTipText(Messages.getText("primero"));
+		}
+		return bFirst;
+	}
+	
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */    
+	public JButton getBLast() {
+		if (bLast == null) {
+			bLast = new JButton();
+			bLast.setPreferredSize(new java.awt.Dimension(22,22));
+			bLast.setEnabled(false);
+			bLast.setIcon(new ImageIcon(getClass().getResource(pathToImages + "last.png")));
+			bLast.setToolTipText(Messages.getText("ultimo"));
+		}
+		return bLast;
+	}
+	
+	/**
+	 * This method initializes bBefore	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBPrev() {
+		if (bPrev == null) {
+			bPrev = new JButton();
+			bPrev.setText("");
+			bPrev.setEnabled(false);
+			bPrev.setPreferredSize(new java.awt.Dimension(22,22));
+			bPrev.setIcon(new ImageIcon(getClass().getResource(pathToImages + "prev.png")));
+			bPrev.setActionCommand("");
+			bPrev.setToolTipText(Messages.getText("anterior"));
+		}
+		return bPrev;
+	}
+
+	/**
+	 * This method initializes bNext	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBNext() {
+		if (bNext == null) {
+			bNext = new JButton();
+			bNext.setText("");
+			bNext.setEnabled(false);
+			bNext.setPreferredSize(new java.awt.Dimension(22,22));
+			bNext.setIcon(new ImageIcon(getClass().getResource(pathToImages + "next.png")));
+			bNext.setActionCommand("");
+			bNext.setToolTipText(Messages.getText("siguiente"));
+		}
+		return bNext;
+	}
+	
+	/**
+	 * Este método inicializa el combo que contiene el número de puntos.	
+	 * 	
+	 * @return javax.swing.JComboBox	
+	 */
+	public JComboBox getCPoint() {
+		if (cPoint == null) {
+			cPoint = new JComboBox();
+			cPoint.setPreferredSize(new java.awt.Dimension(50,22));
+			
+		}
+		return cPoint;
+	}
+
+	/**
+	 * @return Returns the lNumberOfPoints.
+	 */
+	public JLabel getLNumberOfPoints() {
+		if(lNumberOfPoints == null){
+			lNumberOfPoints = new JLabel();
+			lNumberOfPoints.setText(Messages.getText("de")+" 0");
+			lNumberOfPoints.setPreferredSize(new java.awt.Dimension(35,15));
+		}
+		return lNumberOfPoints;
+	}
+	
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */    
+	public JButton getBNew() {
+		if (bNew == null) {
+			bNew = new JButton();
+			bNew.setPreferredSize(new java.awt.Dimension(22,22));
+			bNew.setIcon(new ImageIcon(getClass().getResource(pathToImages + "newpoint.png")));
+			bNew.setToolTipText(Messages.getText("nuevo"));
+		}
+		return bNew;
+	}
+	
+	/**
+	 * Este método inicializa el botón del eliminar punto que hará que se elimine
+	 * el punto seleccionado.	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBDelPoint() {
+		if (bDelPoint == null) {
+			bDelPoint = new JButton();
+			bDelPoint.setText("");
+			bDelPoint.setEnabled(false);
+			bDelPoint.setPreferredSize(new java.awt.Dimension(22,22));
+			bDelPoint.setIcon(new ImageIcon(getClass().getResource(pathToImages + "delone.png")));
+			bDelPoint.setToolTipText(Messages.getText("borrar_uno"));
+		}
+		return bDelPoint;
+	}
+	
+	/**
+	 * Este método inicializa el botón del clear que hará que se eliminen todos los
+	 * puntos seleccionados.	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBClear() {
+		if (bClear == null) {
+			bClear = new JButton();
+			bClear.setText("");
+			bClear.setPreferredSize(new java.awt.Dimension(22,22));
+			bClear.setEnabled(false);
+			bClear.setIcon(new ImageIcon(getClass().getResource(pathToImages + "delall.png")));
+			bClear.setActionCommand("");
+			bClear.setToolTipText(Messages.getText("borrar_todos"));
+		}
+		return bClear;
+	}
+	
+	/**
+	 * Resetea el control al estado inicial. Limpia el combo, pone
+	 * el número de elementos a 0 y desactiva las flechas.
+	 *
+	 */
+	public void resetControls(){
+		getCPoint().removeAllItems();
+		getLNumberOfPoints().setText(Messages.getText("de 0"));
+		checkArrows();
+	}
+	
+	/**
+	 * Elimina del control un elemento de una posición.
+	 * <UL>
+	 * <LI>Actualiza el combo</LI>
+	 * <LI>Actualiza el texto que dice el número de elementos</LI>
+	 * <LI>Actualiza las flechas</LI>
+	 * </UL>
+	 * @param pos Posición del elemento a eliminar.
+	 */
+	public void setNItems(int n){
+		//if(n < 1)
+			//return;
+		getCPoint().removeAllItems();
+		for(int i=1;i<=n;i++){
+			try{
+				getCPoint().addItem(String.valueOf(i));
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//No añadimos nada
+			}
+		}
+		getLNumberOfPoints().setText(Messages.getText("de ") + " " + n);
+		checkArrows();
+	}
+	
+	/**
+	 * Selecciona un elemento del control
+	 * @param index
+	 */
+	public void setSelectedIndex(int index){
+		try{
+			getCPoint().setSelectedIndex(index);
+		}catch(IllegalArgumentException ex){
+			
+		}
+		checkArrows();
+	}
+	
+	/**
+	 * Devuelve el punto seleccionado
+	 * @return Punto seleccionado.
+	 */
+	public int getSelectedIndex(){
+		return getCPoint().getSelectedIndex();
+	}
+	
+	/**
+	 * Obtiene el número de elementos en la lista.
+	 * @return Número de elementos
+	 */
+	public int getItemCount(){
+		return getCPoint().getItemCount();
+	}
+	
+	/**
+	 * Obtiene el Objeto seleccionado como cadena de texto.
+	 * @return Número seleccionado
+	 */
+	public String getSelectedItem(){
+		return getCPoint().getSelectedItem().toString();
+	}
+	
+	/**
+	 * Comprueba la posición del combo para ver si tiene que
+	 * habilitar o deshabilitar las flechas de delante y detrás.
+	 */
+	public void checkArrows(){
+		if(disableAllControls)
+			return;
+		
+		if(getCPoint().getItemCount() <= 0){
+			getBClear().setEnabled(false);
+			getBDelPoint().setEnabled(false);
+		}else{
+			getBClear().setEnabled(true);
+			getBDelPoint().setEnabled(true);
+		}
+		
+		if(getCPoint().getSelectedIndex() == -1){
+			getBPrev().setEnabled(false);
+			getBNext().setEnabled(false);
+			getBLast().setEnabled(false);
+			getBFirst().setEnabled(false);
+			
+			return;
+		}
+		if(getCPoint().getSelectedIndex() == 0){
+			getBPrev().setEnabled(false);
+			getBFirst().setEnabled(false);
+		}else{
+			getBPrev().setEnabled(true);
+			getBFirst().setEnabled(true);
+		}
+		
+		if(getCPoint().getSelectedIndex() == (getCPoint().getItemCount() - 1) ){
+			getBNext().setEnabled(false);
+			getBLast().setEnabled(false);
+		}else{
+			getBNext().setEnabled(true);
+			getBLast().setEnabled(true);
+		}
+	}
+	
+	/**
+	 * Añade un punto al combo y checkea los controles colocandolos en los valores correctos.
+	 * @param countPoints Número de punto a añadir al final del combo
+	 */
+	public void addPointToTable(int countPoints){
+		getCPoint().addItem("" + countPoints);
+		getLNumberOfPoints().setText(Messages.getText("de ") + " " + countPoints);
+		setSelectedIndex(getItemCount() - 1);
+		checkArrows();
+	}
+	
+	/**
+	 * Asigna la ruta donde están las imagenes
+	 * @param pathToImages
+	 */
+	public void setPathToImages(String pathToImages) {
+		this.pathToImages = pathToImages;
+	}
+	
+	/**
+     * Activa o desactiva este panel y todos los que lo componen
+     * @param enabled variable booleana para la activación y/o desactivación
+     */
+    public void setEnabled(boolean enabled){
+	    this.getBDelPoint().setEnabled(enabled);
+	    this.getBClear().setEnabled(enabled);
+    }
+
+    /**
+     * Dice si los controles están deshabilitados o no
+     * @return true si está habilitado y false si no lo está
+     */
+	public boolean isDisableAllControls() {
+		return disableAllControls;
+	}
+ }

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/TableControlerPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java	(revision 10281)
@@ -0,0 +1,69 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.exceptions;
+
+/**
+ * Excepción que indica que una tabla no ha sido inicializada.
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class NotInitializeException extends Exception {
+	/**
+	 *
+	 */
+	public NotInitializeException() {
+		super();
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 */
+	public NotInitializeException(String message) {
+		super(message);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public NotInitializeException(String message, Throwable cause) {
+		super(message, cause);
+
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param cause
+	 */
+	public NotInitializeException(Throwable cause) {
+		super(cause);
+
+		// TODO Auto-generated constructor stub
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/exceptions/NotInitializeException.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/IModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/IModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/IModel.java	(revision 10281)
@@ -0,0 +1,30 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+
+/**
+ * Interfaz que implementan los modelos de tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public interface IModel{
+    public Object[] getNewLine();
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/IModel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java	(revision 10281)
@@ -0,0 +1,79 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.i18n.Messages;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableSelectorButtonColumnEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
+	String currentText = "255";
+	JButton button;
+	JValueSelector valueSelector;
+	JDialog dialog;
+	protected static final String EDIT = "edit";
+
+	public TableSelectorButtonColumnEditor() {
+		button = new JButton();
+		button.setActionCommand(EDIT);
+		button.addActionListener(this);
+		button.setBorderPainted(false);
+
+		valueSelector = new JValueSelector();
+		dialog = JValueSelector.createDialog(button, Messages.getText("seleccion_alpha"), true, valueSelector, this, null, currentText); 
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (EDIT.equals(e.getActionCommand())) {
+			button.setText(currentText);
+			((ValueSelector)dialog).setValue(Integer.valueOf(currentText).intValue());
+			dialog.setVisible(true);
+
+			fireEditingStopped();
+
+		}else{
+			currentText = String.valueOf((int)((ValueSelector)dialog).getValue());
+			button.setText(currentText);
+		}
+	}
+
+	public Object getCellEditorValue() {
+		return currentText;
+	}
+
+	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
+             									int row, int column) {
+		currentText = (String)value;
+		return button;
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java	(revision 10281)
@@ -0,0 +1,67 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JCheckBox;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class CheckBoxColumnEditor extends AbstractCellEditor
+implements TableCellEditor {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public JCheckBox theCheckBox;
+
+    public CheckBoxColumnEditor() {
+        super();
+        theCheckBox = new JCheckBox();
+        theCheckBox.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent event) {
+                    fireEditingStopped() ;
+                    
+                }
+            });
+    }
+
+    public Component getTableCellEditorComponent(JTable table, Object obj,
+                                                 boolean isSelected,
+                                                 int row, int col) {
+    	theCheckBox.setHorizontalAlignment(SwingUtilities.CENTER);
+
+        Boolean lValueAsBoolean = (Boolean) obj;
+        theCheckBox.setSelected(lValueAsBoolean.booleanValue());
+
+        return theCheckBox;
+    }
+
+    public Object getCellEditorValue() {
+        return new Boolean(theCheckBox.isSelected());
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/RadioButtonModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/RadioButtonModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/RadioButtonModel.java	(revision 10281)
@@ -0,0 +1,59 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+
+public class RadioButtonModel extends DefaultTableModel implements IModel{
+
+	private String[]		columnNames = null;
+	
+	public RadioButtonModel(String[] columnNames){
+		super(new Object[0][2], columnNames);
+		this.columnNames = columnNames;
+	}
+	
+	
+	public Class getColumnClass(int c) {
+        if (c < 1) {
+            return Boolean.class;
+        }
+
+        return String.class;
+    }
+	
+	
+	public void setValueAt(Object value, int row, int col) {
+        super.setValueAt(value, row, col);
+    }
+	
+	
+	public void addNew() {
+        super.addRow(new Object[] {
+                         new Boolean(false), ""
+                     });
+    }
+	
+	
+	public Object[] getNewLine() {
+		return new Object[] {new Boolean(false), ""
+			};
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/RadioButtonModel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java	(revision 10281)
@@ -0,0 +1,54 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+
+import javax.swing.JRadioButton;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TreeRadioButtonColumnRenderer extends JRadioButton implements TableCellRenderer {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    public Component getTableCellRendererComponent(JTable table,
+                                                   Object value,
+                                                   boolean isSelected,
+                                                   boolean hasFocus,
+                                                   int row, int column) {
+        if (value == null) {
+            this.setSelected(false);
+        }
+        
+        if(value instanceof Boolean){
+	        Boolean ValueAsBoolean = (Boolean) value;
+	        this.setSelected(ValueAsBoolean.booleanValue());
+	        this.setHorizontalAlignment(SwingConstants.CENTER);
+        }
+        	
+        return this;
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/JValueSelector.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/JValueSelector.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/JValueSelector.java	(revision 10281)
@@ -0,0 +1,238 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.slidertext.SliderTextContainer;
+
+/**
+ * Ventana con el slider para la selección de Alpha en una entrada de la tabla que representa
+ * a la paleta de color.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+
+public class JValueSelector extends JComponent {
+	 /**
+     * Creates and returns a new dialog containing the specified
+     * <code>ColorChooser</code> pane along with "OK", "Cancel", and "Reset"
+     * buttons. If the "OK" or "Cancel" buttons are pressed, the dialog is
+     * automatically hidden (but not disposed).  If the "Reset"
+     * button is pressed, the color-chooser's color will be reset to the
+     * color which was set the last time <code>show</code> was invoked on the
+     * dialog and the dialog will remain showing.
+     *
+     * @param c              the parent component for the dialog
+     * @param title          the title for the dialog
+     * @param modal          a boolean. When true, the remainder of the program
+     *                       is inactive until the dialog is closed.
+     * @param valueSelector  the value-selector to be placed inside the dialog
+     * @param okListener     the ActionListener invoked when "OK" is pressed
+     * @param cancelListener the ActionListener invoked when "Cancel" is pressed
+     * @return a new dialog containing the color-chooser pane
+     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
+     * returns true.
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     */
+    public static JDialog createDialog(Component c, String title, boolean modal,
+    		JValueSelector valueSelector, ActionListener okListener,
+        ActionListener cancelListener, String initValue) throws HeadlessException {
+
+        return new ValueSelector(c, title, modal, valueSelector,
+                                                okListener, cancelListener, initValue);
+    }
+    
+}
+
+class ValueSelector extends JDialog implements ActionListener {
+	
+	private JValueSelector			valueSelector;
+	private int	 				initValue;
+	private ActionListener			okListener;
+	private ActionListener			cancelListener;
+	
+	private int 					MARGIN = 0;
+	private int 					HBUTTONS = 30;
+	private int 					HSLIDER = 50;
+	private JPanel					buttons = null;
+	private JPanel					pMain = null;
+	private SliderTextContainer 	pSlider = null;
+	private int 					width = 315, height = 115;
+	private int 					widthMargin = 300;
+	private JButton				bAccept = null;
+	private JButton				bCancel = null;
+		
+	/**
+	 * Constructor
+	 * @param pp PalettePanel
+	 */
+	public ValueSelector(Component c, String title, boolean modal,
+	        JValueSelector valueSelector, ActionListener okListener,
+	        ActionListener cancelListener, String initValue)throws HeadlessException {
+		
+        super(JOptionPane.getFrameForComponent(c), title, modal);
+        this.okListener = okListener;
+        this.cancelListener = cancelListener;
+        
+        this.valueSelector = valueSelector;
+      
+        try{
+        	init(Integer.valueOf(initValue).intValue());
+        	this.initValue = Integer.valueOf(initValue).intValue();
+        }catch(NumberFormatException ex){
+        	init(0);
+        }
+       
+        setLocationRelativeTo(c);
+	}
+	
+	public void init(int initValue){
+		getPSlider().setValue(initValue);
+		
+		Container contentPane = getContentPane();
+		FlowLayout layout = new FlowLayout();
+		layout.setHgap(0);
+		layout.setVgap(0);
+        contentPane.setLayout(layout);
+        setSize(width, height + 10);
+        contentPane.add(getPMain(), null);
+	}
+	
+	/**
+	 * Asigna el valor de inicialización para el Slider
+	 * @param value
+	 */
+	public void setValue(int value){
+    	this.initValue = value;
+    	this.getPSlider().setValue((double)value);
+    }
+	
+	/**
+	 * Asigna el valor de inicialización para el Slider
+	 * @param value
+	 */
+	public double getValue(){
+		 return initValue;
+    }
+	
+	/**
+	 * Obtiene el panel principal que contiene el panel de botones y el panel
+	 * con el slider
+	 * @return JPanel
+	 */
+	private JPanel getPMain(){
+		if(pMain == null){
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.gridx = 0;
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridy = 1;
+			gridBagConstraints1.gridx = 0;
+			pMain = new JPanel();
+			pMain.setLayout(new GridBagLayout());
+			pMain.setPreferredSize(new java.awt.Dimension(widthMargin, height));
+			pMain.add(getPSlider(), gridBagConstraints);
+			pMain.add(getPButtons(), gridBagConstraints1);
+		}
+		return pMain;
+	}
+	
+	/**
+	 * Obtiene el panel de botones
+	 * @return JPanel
+	 */
+	private JPanel getPButtons(){
+		if(buttons == null){
+			buttons = new JPanel();
+			buttons.setPreferredSize(new java.awt.Dimension(widthMargin, HBUTTONS));
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setVgap(0);
+			flowLayout.setHgap(2);
+			buttons.setLayout(flowLayout);
+			buttons.add(getBAccept(), null);
+			buttons.add(getBCancel(), null);
+		}
+		return buttons;
+	}
+	
+	/**
+	 * Obtiene el panel con el slider
+	 * @return 
+	 */
+	public SliderTextContainer getPSlider(){
+		if(pSlider == null){
+			pSlider = new SliderTextContainer(widthMargin, HSLIDER, 0, 255, this.initValue);
+			pSlider.setPreferredSize(new java.awt.Dimension(widthMargin, HSLIDER));
+		}
+		return pSlider;
+	}
+	
+	/**
+	 * Obtiene el botón de aceptar
+	 * @return JButton
+	 */
+	public JButton getBAccept(){
+		if(bAccept == null){
+			bAccept = new JButton("aceptar");
+			bAccept.addActionListener(okListener);
+			bAccept.addActionListener(this);
+		}
+		return bAccept;
+	}
+	
+	/**
+	 * Obtiene el botón de cancelar
+	 * @return JButton
+	 */
+	public JButton getBCancel(){
+		if(bCancel == null){
+			bCancel = new JButton("cancelar");
+			bAccept.addActionListener(cancelListener);
+			bCancel.addActionListener(this);
+		}
+		return bCancel;
+	}
+
+	/**
+	 * Al aceptar asignamos el valor del slider al botón de alpha y al cancelar cerramos la ventana
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == this.getBAccept()){
+			initValue = (int)getPSlider().getValue();
+		}
+		this.setVisible(false);
+	}
+
+} 

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/JValueSelector.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ModelLoader.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ModelLoader.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ModelLoader.java	(revision 10281)
@@ -0,0 +1,106 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+/**
+ * Cargador de Modelos
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class ModelLoader{
+	
+	private static DefaultTableModel tableModel = null;
+	
+	public JTable load(String model, String[] columnNames){
+		if(model == null || model.equals(""))
+			return null;
+		
+		JTable table = null;
+		
+		if(model.equals("ListModel")){
+			tableModel = new ListModel(columnNames);
+			table = new JTable(tableModel);
+		}
+		
+		if(model.equals("TreeRadioButtonModel")){
+			tableModel = new TreeRadioButtonModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+
+	        for (int i = 0; i < columnNames.length - 1; i++) {
+	        	column = table.getColumnModel().getColumn(i);
+	            column.setCellRenderer(new TreeRadioButtonColumnRenderer());
+	            column.setCellEditor(new TreeRadioButtonColumnEditor());
+	        }
+		}
+		
+		if(model.equals("RadioButtonModel")){
+			tableModel = new RadioButtonModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+			
+			for (int i = 0; i < columnNames.length - 1; i++){
+				column = table.getColumnModel().getColumn(i);
+				column.setCellRenderer(new TreeRadioButtonColumnRenderer());
+	            column.setCellEditor(new TreeRadioButtonColumnEditor());
+			}
+		}
+		
+		if(model.equals("CheckBoxModel")){
+			tableModel = new CheckBoxModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+			
+			for (int i = 0; i < columnNames.length - 1; i++){
+				column = table.getColumnModel().getColumn(i);
+				column.setCellRenderer(new CheckBoxColumnRenderer());
+	            column.setCellEditor(new CheckBoxColumnEditor());
+			}
+		}
+		
+		
+		if(model.equals("TableButtonModel")){
+			tableModel = new TableButtonModel(columnNames);
+			table = new JTable(tableModel);
+			TableColumn column = null;
+	        
+	        column = table.getColumnModel().getColumn(0);
+	        column.setCellRenderer(new TableColorButtonColumnRenderer(true));
+            column.setCellEditor(new TableColorButtonColumnEditor());
+            
+            column = table.getColumnModel().getColumn(4);
+            column.setCellRenderer(new TableSelectorButtonColumnRenderer());
+            column.setCellEditor(new TableSelectorButtonColumnEditor());
+		}
+		return table;
+	}
+	
+	/**
+	 * Obtiene el modelo de la tabla
+	 * @return DefaultTableModel
+	 */
+	public DefaultTableModel getTableModel(){
+		return tableModel;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ModelLoader.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java	(revision 10281)
@@ -0,0 +1,77 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.border.Border;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableColorButtonColumnRenderer extends JLabel
+                           implements TableCellRenderer {
+    Border unselectedBorder = null;
+    Border selectedBorder = null;
+    boolean isBordered = true;
+
+    public TableColorButtonColumnRenderer(boolean isBordered) {
+        this.isBordered = isBordered;
+        setOpaque(true);
+    }
+
+    public Component getTableCellRendererComponent(
+                            JTable table, Object color,
+                            boolean isSelected, boolean hasFocus,
+                            int row, int column) {
+    	if(!(color instanceof Color))
+    		return this;
+    	
+        Color newColor = (Color)color;
+        setBackground(newColor);
+        if (isBordered) {
+            if (isSelected) {
+                if (selectedBorder == null) {
+                    selectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
+                                              table.getSelectionBackground());
+                }
+                setBorder(selectedBorder);
+            } else {
+                if (unselectedBorder == null) {
+                    unselectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
+                                              table.getBackground());
+                }
+                setBorder(unselectedBorder);
+            }
+        }
+        
+        setToolTipText("RGB value: " + newColor.getRed() + ", "
+                                     + newColor.getGreen() + ", "
+                                     + newColor.getBlue());
+        return this;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java	(revision 10281)
@@ -0,0 +1,52 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableSelectorButtonColumnRenderer extends JLabel
+                           implements TableCellRenderer {
+
+
+    public TableSelectorButtonColumnRenderer() {
+        setOpaque(true);
+    }
+
+    public Component getTableCellRendererComponent(
+                            JTable table, Object value,
+                            boolean isSelected, boolean hasFocus,
+                            int row, int column) {
+    	if(!(value instanceof String))
+    		return this;
+    	
+        setText((String)value);
+     
+        return this;
+    }
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java	(revision 10281)
@@ -0,0 +1,54 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+
+import javax.swing.JCheckBox;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class CheckBoxColumnRenderer extends JCheckBox implements TableCellRenderer {
+    final private static long serialVersionUID = -3370601314380922368L;
+
+    public Component getTableCellRendererComponent(JTable table,
+                                                   Object value,
+                                                   boolean isSelected,
+                                                   boolean hasFocus,
+                                                   int row, int column) {
+        if (value == null) {
+            this.setSelected(false);
+        }
+        
+        if(value instanceof Boolean){
+	        Boolean ValueAsBoolean = (Boolean) value;
+	        this.setSelected(ValueAsBoolean.booleanValue());
+	        this.setHorizontalAlignment(SwingConstants.CENTER);
+        }
+        	
+        return this;
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java	(revision 10281)
@@ -0,0 +1,71 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TreeRadioButtonModel extends DefaultTableModel implements IModel{
+    final private static long 	serialVersionUID = -3370601314380922368L;
+    private String[]			columnNames = null;
+
+    public TreeRadioButtonModel(String[] columnNames) {
+        super(new Object[0][4], columnNames);
+        this.columnNames = columnNames;
+    }
+
+    public Class getColumnClass(int c) {
+        if (c < 3) {
+            return Boolean.class;
+        }
+
+        return String.class;
+    }
+
+    public void setValueAt(Object value, int row, int col) {
+        if ((col < 3) && ((Boolean) value).booleanValue()) {
+            for (int i = 0; i < getRowCount(); i++) {
+                if (i != row) {
+                    setValueAt(new Boolean(false), i, col);
+                }
+            }
+        }
+
+        super.setValueAt(value, row, col);
+    }
+
+    public void addNew() {
+        super.addRow(new Object[] {
+                         new Boolean(false), new Boolean(false),
+                         new Boolean(false), ""
+                     });
+    }
+    
+    public Object[] getNewLine(){
+    	return new Object[] {	new Boolean(false), new Boolean(false),
+                				new Boolean(false), ""
+            				};
+    }
+            
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonModel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ListModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ListModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ListModel.java	(revision 10281)
@@ -0,0 +1,56 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class ListModel extends DefaultTableModel implements IModel {
+    final private static long serialVersionUID = -3370601314380922368L;
+    private int nColumns = 0; 
+
+    public ListModel(String[] columnNames) {
+        super(new Object[0][columnNames.length], columnNames);
+        this.nColumns = columnNames.length;
+    }
+
+    public Class getColumnClass(int c) {
+        return String.class;
+    }
+
+    public void setValueAt(Object value, int row, int col) {
+    	super.setValueAt(value, row, col);
+    }
+
+    public void addNew() {
+    	Object[] line = new Object[nColumns];
+    	for(int i = 0; i < nColumns; i++)
+    		line[i] = new String("");
+        super.addRow(line);
+    }
+    
+    public Object[] getNewLine(){
+    	return new Object[] {"", "", "", ""};
+    }   
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/ListModel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java	(revision 10281)
@@ -0,0 +1,67 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JRadioButton;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.table.TableCellEditor;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TreeRadioButtonColumnEditor extends AbstractCellEditor
+implements TableCellEditor {
+    final private static long serialVersionUID = -3370601314380922368L;
+    public JRadioButton theRadioButton;
+
+    public TreeRadioButtonColumnEditor() {
+        super();
+        theRadioButton = new JRadioButton();
+        theRadioButton.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent event) {
+                    fireEditingStopped() ;
+                    
+                }
+            });
+    }
+
+    public Component getTableCellEditorComponent(JTable table, Object obj,
+                                                 boolean isSelected,
+                                                 int row, int col) {
+        theRadioButton.setHorizontalAlignment(SwingUtilities.CENTER);
+
+        Boolean lValueAsBoolean = (Boolean) obj;
+        theRadioButton.setSelected(lValueAsBoolean.booleanValue());
+
+        return theRadioButton;
+    }
+
+    public Object getCellEditorValue() {
+        return new Boolean(theRadioButton.isSelected());
+    }
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableButtonModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableButtonModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableButtonModel.java	(revision 10281)
@@ -0,0 +1,73 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+
+import javax.swing.JButton;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableButtonModel extends DefaultTableModel implements IModel{
+    final private static long 	serialVersionUID = -3370601314380922368L;
+    private String[]			columnNames = null;
+
+    public TableButtonModel(String[] columnNames) {
+        super(new Object[0][4], columnNames);
+        this.columnNames = columnNames;
+    }
+
+    public Class getColumnClass(int c) {
+        if ((c < 1) || (c == 4)) 
+            return JButton.class;
+                
+        return String.class;
+    }
+
+    public void removeRow(int row) {
+    	super.setValueAt(null, row, 0);
+    	super.setValueAt("", row, 1);
+    	super.setValueAt("", row, 2);
+    	super.setValueAt("", row, 3);
+    	super.setValueAt(null, row, 4);
+    	super.removeRow(row);
+    }
+    
+    public void setValueAt(Object value, int row, int col) {
+        super.setValueAt(value, row, col);
+    }
+    
+    /*public void addNew() {
+        super.addRow(new Object[] {new JButton(), "", "", "", new JButton("2554")});
+    }*/
+    
+    public Object[] getNewLine(){
+    	return new Object[] {Color.WHITE, "", "", "", "255"};
+    }
+    
+    public void addRow(Object[] list){
+    	super.addRow(new Object[] {list[0], list[1], list[2], list[3], list[4]});
+    }
+            
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableButtonModel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxModel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxModel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxModel.java	(revision 10281)
@@ -0,0 +1,61 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class CheckBoxModel extends DefaultTableModel implements IModel{
+    final private static long 	serialVersionUID = -3370601314380922368L;
+    private String[]			columnNames = null;
+
+    public CheckBoxModel(String[] columnNames) {
+        super(new Object[0][2], columnNames);
+        this.columnNames = columnNames;
+    }
+
+    public Class getColumnClass(int c) {
+        if (c < 1) {
+            return Boolean.class;
+        }
+
+        return String.class;
+    }
+
+    public void setValueAt(Object value, int row, int col) {
+        super.setValueAt(value, row, col);
+    }
+
+    public void addNew() {
+        super.addRow(new Object[] {
+                         new Boolean(false), ""
+                     });
+    }
+    
+    public Object[] getNewLine(){
+    	return new Object[] {	new Boolean(false), ""
+            				};
+    }
+            
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/CheckBoxModel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java	(revision 10281)
@@ -0,0 +1,80 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table.models;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JDialog;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+import org.gvsig.i18n.Messages;
+
+/**
+ * Editor de celda con un botón selector de color-
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class TableColorButtonColumnEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
+	Color currentColor;
+	JButton button;
+	JColorChooser colorChooser;
+	JDialog dialog;
+	protected static final String EDIT = "edit";
+
+	public TableColorButtonColumnEditor() {
+		button = new JButton();
+		button.setActionCommand(EDIT);
+		button.addActionListener(this);
+		button.setBorderPainted(false);
+
+		colorChooser = new JColorChooser();
+		dialog = JColorChooser.createDialog(button, Messages.getText("seleccion_color"), true, colorChooser, this, null); 
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (EDIT.equals(e.getActionCommand())) {
+			button.setBackground(currentColor);
+			colorChooser.setColor(currentColor);
+			dialog.setVisible(true);
+
+			fireEditingStopped();
+
+		} else 
+			currentColor = colorChooser.getColor();
+		
+	}
+
+	public Object getCellEditorValue() {
+		return currentColor;
+	}
+
+	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
+             									int row, int column) {
+		currentColor = (Color)value;
+		return button;
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/last.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/last.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/last.png	(revision 10281)
@@ -0,0 +1,6 @@
+‰PNG
+
+
+IHDR(-SýPLTE€€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ
+��$tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	A&Â.IDATÓc`À
+8ÑhNNNNNNNNB*ÙBÈ¥è~AÐa	È½|ÔÛIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/last.png
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/newpoint.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/newpoint.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/newpoint.png	(revision 10281)
@@ -0,0 +1,6 @@
+‰PNG
+
+
+IHDR(-SúPLTE€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ›‘.tRNS@æØfbKGDˆH	pHYsÒÝ~ütIMEÕ
+	ñ€e4IDATxœc`@è"è"è"H"p¡09¸
+ �FS�nº-„\JÀ·[w©ï«ÁÂIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/newpoint.png
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delone.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delone.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delone.png	(revision 10281)
@@ -0,0 +1,8 @@
+‰PNG
+
+
+IHDRóÿaIDATxÚÅ“MH”Q†Ÿs¿ûÍ¯â„ø¯PN›Z”�„ý¬’¨EDTPí¥ }ë6nÅh%µ²Më\´ŽHÊÑBÐi‘ýŒÎ:Þï»§ÅL%	m:p¹¸ï{Þóò^øß%¿õÉt*u?J&S§a¨^U)"ÚÀ6e2‰ 0‰}ÙÌÃ–-wçAêÄ‘ÃQ6“;~ôØÝËg‡ioÎ¢qŒ  µ-PÀÇ76<…–*“8˜šº}ñaìçDµ.WUâÐÒö©È­‰GX€ØûŽ|_÷•Óƒƒšr‘Äñvý1
+°ò‹ÅÛ€L¥Ê–sc$»¿§ïü¡î.ÑØý´fX¤7kðq}=²½==7®žNSÛDŒ÷_—+ì¸
+ZŸ)V«|X[3ùþ{½míh£ÎÕÍRmLÖë‰$ÖÅ¼XZb3Š^Z`ôæµëÖ H¢µÅ u%up�Äçûiùò
+Qåùâ"Ö˜9›N$NžéëDºº	’Iïw&Š¿iRË“™
+•Ê¸ó~Åvær—Z«oç÷Ž]BGÓËË¬”ËOo2 oVW!�Þ›À9¦gg©Zû~¥TzˆÉ„áäÂü<.•b;—kè0l‘÷xUT•×ss¼ZX˜¬9W<ÀàP áÿ_Nx4ÿáý[} 7ìYàÊ£IEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delone.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/first.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/first.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/first.png	(revision 10281)
@@ -0,0 +1,7 @@
+‰PNG
+
+
+IHDR(-SýPLTE€€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ
+��$tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	3�]xg1IDATÓ…�¡
+Ã°ýÿa¦`F²�™Ò[@@¾‹z4¥=Ú´¿œ.enÈ±°ò
+IEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/first.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/prev.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/prev.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/prev.png	(revision 10281)
@@ -0,0 +1,6 @@
+‰PNG
+
+
+IHDR(-SýPLTE€€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ
+��$tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	'¼ªÿÙ0IDATÓc`À
+8Ñùœè|Nt>':Ÿ�Ï‰ÎçDçãQ�i¦-˜îÀt)¦_`¾KA=9£àIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/prev.png
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delall.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delall.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delall.png	(revision 10281)
@@ -0,0 +1,6 @@
+‰PNG
+
+
+IHDR(-SúPLTE€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ›‘.tRNS@æØfbKGDˆH	pHYsšœtIMEÕ
+
+UiÚÄ9IDATÓc` ¾ÿ‹Êüþ&„ a2HJ�lªE€Ebš™H¶ Ü�.À€Ncó)™¯GåŠÂ>ÖIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/delall.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/next.png
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/next.png	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/next.png	(revision 10281)
@@ -0,0 +1,6 @@
+‰PNG
+
+
+IHDR(-SýPLTE€€€€€€€€€ÀÀÀÀÜÀ¦Êð""")))UUUMMMBBB999ÿ|€ÿPPÖ“ÌìÿïÖÆççÖ­©�3f™Ì333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌfÿ™ÿÌÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌff™f3™ff™f™™fÌ™fÿ™fÌf3Ìf™ÌfÌÌfÿÌfÿf3ÿf™ÿfÌÿfÿÌÌÿ™™™3™™™Ì™™33™f™Ì3™ÿ™f™3f™f3™™f™Ìf™ÿ3™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌf™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÌ™™ÿ™Ìÿ™ÿÿ™Ì3™fÌ™ÌÌÌ3™33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌff™™fÌÌfÌÿf™™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿ™™ÿÌÌÿÌÿÿÌ3Ìfÿ™ÿ3Ì33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÌ™fÿÌfÿÿfÌ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿ3ÿÿfÿÌ™ÿÿÌÿÿÿfffÿfÿÿfffÿÿfÿfÿÿ¥!___www†††–––ËËË²²²×××ÝÝÝãããêêêñññøøøÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ
+��$tRNS@æØfbKGDˆH	pHYsšœtIMEÕ	%å2+IDATÓc`À
+818181818181818	© d!—âö- ³A*TàIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/images/next.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/Table.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/Table.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/Table.java	(revision 10281)
@@ -0,0 +1,212 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.table;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.listeners.TableListener;
+import org.gvsig.gui.beans.table.models.ModelLoader;
+
+/**
+ * Componente tabla
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class Table extends BaseComponent {
+	private static final int		INTERNAL_MARGIN = 4;
+	
+    private JTable 					table = null;
+    private JScrollPane 			scrollPanel = null;
+    private DefaultTableModel		tableModel = null;
+    private int						width, height;
+    private String[]				columnNames = null;
+    private int[]					columnWidths = null;
+    private TableListener			tableListener = null;
+    private TableContainer			tableContainer = null;
+    public String					tableModelClass = null;
+    
+      
+    /**
+     * 
+     * @param width Ancho de la tabla en pixeles
+     * @param height Alto de la tabla en pixeles
+     * @param columnNames Vector de nombres de columna
+     * @param columnsWidth	Vector de anchos para cada columna. Ha de tener el mismo número de elementos que columnNames. 
+     * Si vale null las columnas se pondrán equidistantes. 
+     * @param tableListener Listener de la tabla
+     */
+    public Table(int width, int height, String[] columnNames, int[] columnWidths, TableListener tableListener, String tableModelClass){
+    	this.width = width;
+    	this.height = height;
+    	this.columnNames = columnNames;
+		this.columnWidths = columnWidths;
+    	this.tableListener = tableListener;
+    	this.tableModelClass = tableModelClass;
+    	initialize();
+    }
+		    
+    /**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		 this.setSize(new java.awt.Dimension(width, height));
+		 FlowLayout flowLayout = new FlowLayout();
+		 flowLayout.setHgap(0);
+		 flowLayout.setVgap(0);
+		 this.setLayout(flowLayout);
+		 this.add(getJScrollPane(), null);
+	}
+
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		this.setSize(new java.awt.Dimension(w, h));
+		scrollPanel.setSize(w, h);
+		//this.setPreferredSize(new java.awt.Dimension(w, h));
+		scrollPanel.setPreferredSize(new Dimension(w, h));
+	}
+		
+	
+	/**
+     * Obtiene la Tabla
+     * @return Tabla de bandas de la imagen
+     */
+    public JTable getTable() {
+        if (table == null) {
+            //tableModel = new ListModel(columnNames);
+        	ModelLoader loader = new ModelLoader();
+        	table = loader.load(tableModelClass, columnNames);
+        	tableModel = loader.getTableModel();
+            tableModel.addTableModelListener(tableListener);
+            table.setPreferredScrollableViewportSize(new Dimension(width, height));
+            table.addMouseListener(new MouseAdapter() {
+ 	           public void mouseClicked(MouseEvent e) {
+ 	        	   try{
+ 	        		   if(tableContainer != null)
+ 	        			   tableContainer.setSelectedIndex(table.getSelectedRow());
+ 	        	   }catch(NotInitializeException ex){}
+ 	           }
+ 	        });
+            
+            TableColumn column = null;
+            
+            int widthPerColumn = (int)(width / columnNames.length);
+            for (int i = 0; i < columnNames.length; i++) {
+            	column = table.getColumnModel().getColumn(i);
+            	column.setResizable(true);
+            	if(columnWidths == null)
+            		column.setPreferredWidth(widthPerColumn);
+            	else
+            		column.setPreferredWidth(columnWidths[i]);
+            }
+        }
+
+        return table;
+    }
+    
+    /**
+	 * This method initializes jScrollPane	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JScrollPane getJScrollPane() {
+		if (scrollPanel == null) {
+			scrollPanel = new JScrollPane(getTable());
+			scrollPanel.setSize(width, height);
+			scrollPanel.setPreferredSize(new Dimension(width , height));           
+		}
+		return scrollPanel;
+	}
+
+	/**
+	 * Obtiene el contenedor padre de la tabla
+	 * @return
+	 */
+	public TableContainer getTableContainer() {
+		return tableContainer;
+	}
+
+	/**
+	 * Asigna el contenedor padre de la tabla
+	 * @param tableContainer
+	 */
+	public void setTableContainer(TableContainer tableContainer) {
+		this.tableContainer = tableContainer;
+	}
+	
+	/**
+	 * Obtiene el modelo de la tabla
+	 * @return 
+	 */
+	public DefaultTableModel getTableModel() {
+		return tableModel;
+	}
+	
+	//********************Métodos de Tabla*****************************//
+	
+	/**
+	 * Añade una fila a la tabla.
+	 * @param list Lista de cadenas
+	 */
+	public void addRow(Object[] list){
+		((DefaultTableModel)this.getTable().getModel()).addRow(list);
+		/*try{
+			for(int i = 0; i < list.length; i++)	
+				((DefaultTableModel)this.getTable().getModel()).setValueAt(list[i], 
+								((DefaultTableModel)this.getTable().getModel()).getRowCount() - 1, 
+								i);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			//Se intenta acceder a una columna que no existe. Terminamos el bucle.
+		}*/
+	}
+	
+	/**
+	 * Elimina una fila de la tabla.
+	 * @param i Fila a eliminar
+	 */
+	public void delRow(int i){
+		((DefaultTableModel)this.getTable().getModel()).removeRow(i);
+	}
+	
+	/**
+	 * Elimina todas las filas de la tabla.
+	 */
+	public void removeAllRows(){
+		int nRows = ((DefaultTableModel)this.getTable().getModel()).getRowCount();
+		for(int i = 0; i < nRows; i++)
+			((DefaultTableModel)this.getTable().getModel()).removeRow(0);
+	}
+
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/Table.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/listeners/TableListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/listeners/TableListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/listeners/TableListener.java	(revision 10281)
@@ -0,0 +1,122 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.table.listeners;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+
+import org.gvsig.gui.beans.table.Table;
+import org.gvsig.gui.beans.table.TableContainer;
+import org.gvsig.gui.beans.table.TableControlerPanel;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.models.IModel;
+
+/**
+ * Listener para la tabla 
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class TableListener implements TableModelListener, ActionListener{
+
+	public static boolean 			comboEventEnable = true;
+	private TableContainer		 	tableContainer = null;
+	private TableControlerPanel 	controlPanel = null;
+	private Table 					table= null;
+	public boolean					enableNewLineListener = true;
+	
+	/**
+	 * Constructor
+	 * @param tableContainer
+	 */
+	public TableListener(TableContainer tableContainer){
+		this.tableContainer = tableContainer;
+	}
+	
+	private void initialize(){
+		this.controlPanel = tableContainer.getPTableControl();
+		this.table = tableContainer.getPTable();
+	}
+	
+	/**
+	 * Captura y gestiona los eventos del control de la tabla para añadir filas, 
+	 * eliminar filas y moverse por la tabla.
+	 */
+	public void actionPerformed(ActionEvent e) {
+		if(controlPanel == null || table == null)
+			initialize();
+		try{
+			/**
+			 * Nueva entrada
+			 */
+			if(enableNewLineListener && e.getSource() == controlPanel.getBNew()){
+				if(table.getTableModel() instanceof IModel)
+					tableContainer.addRow(((IModel)table.getTableModel()).getNewLine());
+			}
+			
+			/**
+			 * Eliminar todas las filas
+			 */
+			if(enableNewLineListener && e.getSource() == controlPanel.getBClear()){
+				tableContainer.removeAllRows();
+			}
+			
+			/**
+			 * Elimina una entrada concreta de la tabla
+			 */
+			if(enableNewLineListener && e.getSource() == controlPanel.getBDelPoint()){
+				tableContainer.delRow(tableContainer.getSelectedIndex());
+			}
+			
+			if(e.getSource() == controlPanel.getBFirst()){
+				tableContainer.setSelectedIndex(0);
+			}
+			
+			if(e.getSource() == controlPanel.getBLast()){
+				tableContainer.setSelectedIndex(tableContainer.getRowCount() - 1);
+			}
+			
+			if(e.getSource() == controlPanel.getBNext()){
+				if(tableContainer.getSelectedIndex() < tableContainer.getRowCount())
+					tableContainer.setSelectedIndex(tableContainer.getSelectedIndex() + 1);
+			}
+			
+			if(e.getSource() == controlPanel.getBPrev()){
+				if(tableContainer.getSelectedIndex() > 0)
+					tableContainer.setSelectedIndex(tableContainer.getSelectedIndex() - 1);
+			}
+	
+			if(e.getSource() == controlPanel.getCPoint()){
+				if(comboEventEnable)
+					tableContainer.setSelectedIndex(controlPanel.getCPoint().getSelectedIndex());
+			}
+			
+		}catch(NotInitializeException ex){
+			
+		}
+	}
+
+	public void tableChanged(TableModelEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/table/listeners/TableListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/dataInput/DataInputContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/dataInput/DataInputContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/dataInput/DataInputContainer.java	(revision 10281)
@@ -0,0 +1,313 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.dataInput;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.BaseComponent;
+
+public class DataInputContainer extends BaseComponent implements FocusListener, KeyListener{
+
+	private int					wComp = 150, hComp = 22;
+	private int					wLabel = 30, hLabel = 20;
+	private int					wText = wComp - wLabel - 5, hText = 20;
+	
+	private boolean				decimal = false;
+	private boolean				caracter = false;
+	
+	private JPanel pInput = null;
+	private JLabel lText = null;
+	private JTextField jTextField = null;
+	
+	private String				focusText = null;
+
+	/**
+	 * This is the default constructor
+	 */
+	public DataInputContainer(int widthLabel) {
+		super();
+		if(widthLabel > 0){
+			wLabel = widthLabel;
+			wText = wComp - wLabel - 5;
+		}
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {
+		FlowLayout flowLayout = new FlowLayout();
+		flowLayout.setHgap(0);
+		flowLayout.setVgap(0);
+		flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+		this.setLayout(flowLayout);
+		//this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+		this.add(getPInput(), null);
+		this.getJTextField().addFocusListener(this);
+		this.getJTextField().addKeyListener(this);
+		setComponentSize(wComp, hComp);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPInput() {
+		if (pInput == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridy = 0;
+			gridBagConstraints1.gridx = 1;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout3.setVgap(0);
+			flowLayout3.setHgap(0);
+			pInput = new JPanel();
+			pInput.setLayout(flowLayout3);
+			pInput.add(getLText(), null);
+			pInput.add(getJTextField(), null);
+		}
+		return pInput;
+	}
+
+	private JLabel getLText(){
+		if (lText == null){
+			lText = new JLabel();
+			lText.setText("JLabel");
+			lText.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
+		}
+		return lText;
+	}
+	
+	
+	/**
+	 * Da nombre al campo de texto del componente.
+	 * @param text
+	 */
+	public void setLabelText(String text){
+		this.lText.setText(text + ": ");
+	}
+
+	/**
+	 * This method initializes jTextField	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	public JTextField getJTextField() {
+		if (jTextField == null) {
+			jTextField = new JTextField();
+			jTextField.setBackground(java.awt.Color.white);
+		}
+		return jTextField;
+	}
+	
+	/**
+	 * Ajusta el tamaño del componente.
+	 * @param w
+	 * @param h
+	 */
+	public void setComponentSize(int w, int h){
+		wComp = w;
+		int wPanel = (int)(wComp * 0.9);
+		int hPanel = (int)(hComp * 0.95);
+		wText = wPanel - wLabel - 5;
+		this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		this.getPInput().setPreferredSize(new java.awt.Dimension(wPanel, hPanel));
+		this.getJTextField().setPreferredSize(new java.awt.Dimension(wText, hText));
+	}
+
+	/**
+	 * Modifica la altura del componente.
+	 * @param h
+	 */
+	public void setComponentHeight(int h){
+		this.hComp = h;
+		this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+	}
+	
+	/**
+	 * Devuelve el valor del campo de texto del componente.
+	 * @return
+	 */
+	public String getTextValue(){
+		return this.jTextField.getText();
+	}
+	
+	/**
+	 * metodos para indicar y conocer el tipo de valor acepatado por el 
+	 * campo de texto.
+	 * @param flag
+	 */
+	public void setDecimal(boolean flag){
+		this.decimal = flag;
+	}
+	
+	public void setCaracter(boolean flag){
+		this.caracter = flag; 
+	}
+	
+	public boolean isDecimal(){
+		return this.decimal;
+	}
+	
+	public boolean isCaracter(){
+		return this.caracter;
+	}
+	
+	/**
+	 * Modifica el tamaño de la etiqueta del componente.
+	 * @param w
+	 */
+	public void setLabelSize(int w){
+		this.wLabel = w;
+	}
+	
+	/**
+	 * Habilita o deshabilita el control
+	 * @param en
+	 */
+	public void setControlEnabled(boolean en){
+		this.getJTextField().setEnabled(en);
+		if (en)
+			this.getJTextField().setBackground(java.awt.Color.white);
+		else
+			this.getJTextField().setBackground(getBackground());
+	}
+	
+	/**
+	 * Devuelve el valor del campo de texto.
+	 * @return
+	 */
+	public String getValue(){
+		return this.getJTextField().getText();
+	}
+	
+	/**
+	 * Asigna el valor al campo de texto.
+	 * @return
+	 */
+	public void setValue(String value){
+		this.getJTextField().setText(value);
+	}
+	
+	
+	/*********************************************************/
+	/*********************LISTENERS***************************/
+	/*********************************************************/
+	
+	
+	public void focusGained(FocusEvent e) {
+		if (e.getSource() == this.getJTextField()){
+			if(!validateNumericFormat(this.getJTextField().getText()))
+				this.getJTextField().setText("");
+		}
+		
+	}
+
+	public void focusLost(FocusEvent e) {
+		//if(e.getSource() == this.getJTextField())
+			//checkTextValue();
+		
+	}
+	
+	
+
+	public void keyPressed(KeyEvent e) {
+		
+	}
+		
+
+	public void keyReleased(KeyEvent e) {
+		String cad = this.getJTextField().getText();
+		
+		if (e.getSource()==this.getJTextField()){
+			if (e.getKeyCode() == 10){
+				if(!validateNumericFormat(cad))
+					this.getJTextField().setText("");
+				return;
+			}
+			if (!caracter){	
+				if (checkTextField(e.getKeyCode()))
+					focusText = cad;
+				else
+					this.getJTextField().setText(focusText);
+			}
+		}
+	}
+
+	public void keyTyped(KeyEvent e) {
+		
+	}
+	
+	
+	/**
+	 * Checkea un textField para que contenga caracteres validos. Consideramos validos
+	 * los caracteres del 0 al 9, el punto, DEL, Supr, flechas y Enter teniendo en cuenta que el 
+	 * código ascii del teclado numerico es distinto.
+	 */
+	public boolean checkTextField(int code){
+		
+		//Si el caracter es erroneo pasamos de el y reponemos el texto que habia
+		if(	(code >= 0 && code <= 7) || 
+			code == 9 || 
+			(code >= 11 && code <= 36) ||
+			(code >= 41 && code <= 45) ||
+			code == 47 ||
+			(code >= 58 && code <= 95) ||
+			(code >= 106 && code <= 109) ||
+			(code >= 111 && code <= 126) ||
+			code >= 128){
+			return false;
+		}
+		
+		return true;
+	}
+	
+	/**
+	 * Validación de que el parámetro tenga formato numerico
+	 * @param t Valor del campo
+	 * @return true si es valido y false si no lo es
+	 */
+	private boolean validateNumericFormat(String field){
+		double d = 0D;
+		try{
+			d = Double.valueOf(field).doubleValue();
+		}catch(NumberFormatException exc){
+			return false;
+		}
+		return true;
+	}
+	
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/dataInput/DataInputContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/TreeListContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/TreeListContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/TreeListContainer.java	(revision 10281)
@@ -0,0 +1,280 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.treelist;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.ListSelectionModel;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+import org.gvsig.gui.beans.treelist.listeners.TreeListListener;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Componente consistente en un menú de arbol al que se le pueden añadir entradas
+ * y una lista de elementos debajo de este. 
+ * Haciendo doble click o arrastrando un elemento del menú a la lista este queda añadido
+ * en esta. Haciendo doble click en un elemento de la lista se elimina de esta y arrastrando
+ * elementos dentro de la lista se varia su posición en ella.
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class TreeListContainer extends BaseComponent {
+
+	private int 		wComp = 190;
+	private int 		hComp = 360;
+	private int 		hTree = (int)Math.floor(hComp * 0.68);
+	private int 		hList = hComp - hTree;
+	private Hashtable	map;
+	
+	private JPanel pMain = null;
+	private JScrollPane pTree = null;
+	private JScrollPane pList = null;
+	private JTree tree = null;
+	private JList list = null;
+	private DefaultMutableTreeNode raiz = null;
+	private TreeListListener listener = null;
+	private ArrayList		listListeners = new ArrayList();
+
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public TreeListContainer() {
+		super();
+		listener = new TreeListListener();
+		initialize();
+		listener.setList(getList());
+		listener.setTree(getTree());
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		map = new Hashtable();
+		raiz =  new DefaultMutableTreeNode(Messages.getText("filtros"));
+        this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setHgap(0);
+        flowLayout.setVgap(0);
+        this.setLayout(flowLayout);
+        this.add(getPMain(), null);
+
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPMain() {
+		if (pMain == null) {
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.gridx = 0;
+			gridBagConstraints1.gridy = 1;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridx = 0;
+			gridBagConstraints.gridy = 0;
+			pMain = new JPanel();
+			pMain.setLayout(new GridBagLayout());
+			pMain.setPreferredSize(new java.awt.Dimension(wComp,hComp));
+			pMain.add(getPTree(), gridBagConstraints);
+			pMain.add(getPList(), gridBagConstraints1);
+		}
+		return pMain;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JScrollPane getPTree() {
+		if (pTree == null) {
+			pTree = new JScrollPane();
+			pTree.setPreferredSize(new java.awt.Dimension(wComp, hTree));
+			pTree.setViewportBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
+			pTree.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+			pTree.setViewportView(getTree());
+		}
+		return pTree;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JScrollPane getPList() {
+		if (pList == null) {
+			pList = new JScrollPane();
+			pList.setPreferredSize(new java.awt.Dimension(wComp, hList));
+			pList.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
+			pList.setBackground(java.awt.Color.white);
+			pList.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+			pList.setViewportView(getList());
+		}
+		return pList;
+	}
+
+	/**
+	 * This method initializes jTree	
+	 * 	
+	 * @return javax.swing.JTree	
+	 */
+	public JTree getTree() {
+		if (tree == null) {
+			tree = new JTree(raiz);
+			tree.addMouseListener(listener);
+			tree.addMouseMotionListener(listener);
+		}
+		return tree;
+	}
+
+	/**
+	 * This method initializes jList	
+	 * 	
+	 * @return javax.swing.JList	
+	 */
+	public JList getList() {
+		if (list == null) {
+			DefaultListModel m = new DefaultListModel(); 
+			list = new JList(m);
+			list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+			list.addMouseListener(listener);
+			list.addMouseMotionListener(listener);
+		}
+		return list;
+	}
+
+	
+	public void setComponentSize(int w, int h){
+		wComp = w;
+		hComp = h;
+		hTree = (int)Math.floor(hComp * 0.68);
+		hList = hComp - hTree;
+        this.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		pMain.setPreferredSize(new java.awt.Dimension(wComp, hComp));
+		pTree.setPreferredSize(new java.awt.Dimension(wComp, hTree));
+		pList.setPreferredSize(new java.awt.Dimension(wComp, hList));
+	}
+	
+	//-------------------------------------------
+	//MÉTODOS DE ARBOL
+	
+	/**
+	 * Añade una nueva categoria al arbol
+	 * @param name	Etiqueta que aparece en el arbol. 
+	 * @param pos	Posición en el arbol de la nueva categoria
+	 */
+	public void addClass(String name, int pos){
+		DefaultTreeModel model =(DefaultTreeModel)tree.getModel();
+		DefaultMutableTreeNode r = new DefaultMutableTreeNode( name );
+		model.insertNodeInto(r, raiz, pos);
+	}
+	
+	/**
+	 * Añade una entrada a una categoria
+	 * @param name Nombre de la entrada a añadir
+	 * @param parentName Categoria a la que añadimos
+	 * @param value Valor asociado a la entrada
+	 */
+	public void addEntry(String name, String parentName, String value){
+		DefaultTreeModel model =(DefaultTreeModel)tree.getModel();
+		for(int i = 0; i < model.getChildCount(raiz); i++){
+			if(model.getChild(raiz, i).toString().equals(parentName)){
+				DefaultMutableTreeNode node = (DefaultMutableTreeNode)model.getChild(raiz, i);
+				node.add(new DefaultMutableTreeNode(name));
+				if (value!=null)
+					map.put(name,value);
+			}
+		}
+	}
+
+	/**
+	 * Método que comprueba si una entrada existe en la lista.
+	 * @param value Valor que se quiere comprobar si está en la lista
+	 * @return true si el valor está en la lista y false si no lo está
+	 */
+	public boolean isInList(String value){
+		DefaultListModel model = (DefaultListModel)getList().getModel();
+		for(int i = 0; i < model.getSize(); i++)
+			if(((String)model.get(i)).equals(value))
+				return true;
+		return false;
+	}
+	
+	/**
+	 * Añade un listener TreeListComponent
+	 * @param e
+	 */
+	public void addTreeListListener(TreeListComponentListener e){
+		listListeners.add(e);
+		listener.setListeners(listListeners);
+	}
+	
+	/**
+	 * Añade un elemento a la lista 
+	 * @param element Elemento a añadir
+	 */
+	public void addElementInList(String element){
+		DefaultListModel model = (DefaultListModel)getList().getModel();	
+		model.addElement(element);
+	}
+	
+	/**
+	 * Elimina un elemento a la lista 
+	 * @param element Elemento a eliminar
+	 */
+	public void removeElementInList(String element){
+		DefaultListModel model = (DefaultListModel)getList().getModel();	
+		model.removeElement(element);
+	}
+	
+	/**
+	 * Elimina un elemento a la lista por indice 
+	 * @param element Indice del elemento a eliminar
+	 */
+	public void removeElementInList(int element){
+		DefaultListModel model = (DefaultListModel)getList().getModel();	
+		model.remove(element);
+	}
+
+	public Hashtable getMap() {
+		return map;
+	}
+
+	public void setMap(Hashtable map) {
+		this.map = map;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/TreeListContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/event/TreeListEvent.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/event/TreeListEvent.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/event/TreeListEvent.java	(revision 10281)
@@ -0,0 +1,143 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.treelist.event;
+
+
+/**
+ * Event para el TreeListComponentListener
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class TreeListEvent{
+	
+	private String elementAdded = null;
+	private String elementRemoved = null;
+	private String sourceElement = null;
+	private String DestElement = null;
+	private int positionSourceElement = -1;
+	private int positionDestElement = -1;
+	
+	/**
+	 * Obtiene el elemento añadido
+	 * @return Elemento añadido
+	 */
+	public String getElementAdded() {
+		return elementAdded;
+	}
+	
+	/**
+	 * Asigna el elemento añadido
+	 * @param elementAdded
+	 */
+	public void setElementAdded(String elementAdded) {
+		this.elementAdded = elementAdded;
+	}
+	
+	/**
+	 * Obtiene el elemento eliminado
+	 * @return Elemento eliminado
+	 */
+	public String getElementRemoved() {
+		return elementRemoved;
+	}
+	
+	/**
+	 * Asigna el elemento eliminado
+	 * @param elementRemoved
+	 */
+	public void setElementRemoved(String elementRemoved) {
+		this.elementRemoved = elementRemoved;
+	}
+
+	/**
+	 * Obtiene el elemento de destino
+	 * @return Elemento de destino
+	 */
+	public String getDestElement() {
+		return DestElement;
+	}
+
+	/**
+	 * Asigna el elemento de destino
+	 * @param destElement
+	 */
+	public void setDestElement(String destElement) {
+		DestElement = destElement;
+	}
+
+	/**
+	 * Obtiene la posición del elemento de destino
+	 * @return Elemento de destino
+	 */
+	public int getPositionDestElement() {
+		return positionDestElement;
+	}
+
+	/**
+	 * Asigna la posición del elemento de destino
+	 * @param positionDestElement
+	 */
+	public void setPositionDestElement(int positionDestElement) {
+		this.positionDestElement = positionDestElement;
+	}
+
+	/**
+	 * Obtiene la posición del elemento de origen
+	 * @return Elemento de origen
+	 */
+	public int getPositionSourceElement() {
+		return positionSourceElement;
+	}
+
+	/**
+	 * Asigna la posición del elemento de origen
+	 * @param positionSourceElement
+	 */
+	public void setPositionSourceElement(int positionSourceElement) {
+		this.positionSourceElement = positionSourceElement;
+	}
+
+	/**
+	 * Obtiene el elemento de origen
+	 * @return Elemento de origen
+	 */
+	public String getSourceElement() {
+		return sourceElement;
+	}
+
+	/**
+	 * Asigna el elemento de origen
+	 * @param sourceElement
+	 */
+	public void setSourceElement(String sourceElement) {
+		this.sourceElement = sourceElement;
+	}
+	
+	/**
+	 * Resetea los valores
+	 */
+	public void resetValues(){
+		elementAdded = null;
+		elementRemoved = null;
+		sourceElement = null;
+		DestElement = null;
+		positionSourceElement = -1;
+		positionDestElement = -1;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/event/TreeListEvent.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java	(revision 10281)
@@ -0,0 +1,285 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.treelist.listeners;
+
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.ArrayList;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+
+/**
+ * Esta clase contiene la lógica que añade elementos desde el arbol a la lista, arrastrando o
+ * haciendo doble click sobre el elemento en el arbol, elimina elementos de la lista haciendo 
+ * doble click sobre ellos o intercambia elementos arrastrando en la lista de una posición 
+ * a otra.
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class TreeListListener implements MouseListener,  MouseMotionListener, TreeListComponentListener{
+
+	private JTree 					tree = null;
+	private JList 					list = null;
+	private DefaultMutableTreeNode 	raiz = null;
+	private ArrayList				listListeners = null;
+	private TreeListEvent 			ev = new TreeListEvent();
+	
+
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public TreeListListener() {
+	}
+
+	/**
+	 * Asigna la lista
+	 * @param list
+	 */
+	public void setList(JList list) {
+		this.list = list;
+	}
+
+	/**
+	 * Asigna el arbol
+	 * @param tree
+	 */
+	public void setTree(JTree tree) {
+		this.tree = tree;
+	}
+	
+	//-------------------------------------------
+	//MÉTODOS DEL LISTENER
+	
+	//AÑADIR A LA LISTA
+	//Pinchar con doble click el elemento del arbol
+	
+	//Pichar lista -> obtiene draggLabel
+	//Arrastrar -> draggActive
+	//Released -> !draggActive. Si enterList y se ha arrastrado y se ha pichado un elemento de la lista -> añade elemento
+	
+	//ELIMINAR DE LA LISTA
+	//Pinchar con doble click el elemento de la lista.
+	
+	//CAMBIAR EL ORDEN DE LOS ELEMENTOS DE LA LISTA
+	//Pinchar lista -> Obtiene index del elem pinchado
+	//Arrastrar -> draggElement a true
+	//Soltar -> si hay elemento seleccionado estamos dentro de la lista y draggElement es true -> se intercambiar
+	
+	/**
+	 * Variable que contiene la etiqueta seleccionada y arrastrado hasta la lista
+	 */
+	private String draggLabel = null;
+	/**
+	 * Variable que está a true si estamos arrastrando una etiqueta
+	 */
+	private boolean draggActive = false;
+	/**
+	 * Variable que está a true si el ratón ha entrado en la lista
+	 */
+	private boolean enterInList = false;
+	/**
+	 * Elemento seleccionado de la lista. -1 si no hay ninguno;
+	 */
+	private int selectElement = -1;
+	/**
+	 * Variable que está a true si estamos arrastrando un elemento de la lista
+	 */
+	private boolean draggElement = false;
+	
+	public void mouseClicked(MouseEvent e) {
+		
+		if(e.getSource() == list){
+			//Si es doble click y hay algún elemento seleccionado en la lista lo eliminamos 
+			if(e.getClickCount() == 2 && list.getSelectedIndex() != -1){ 	
+				DefaultListModel model = (DefaultListModel)list.getModel();	
+				
+				//Lanzamos el evento de eliminar un elemento
+				ev.resetValues();
+				ev.setElementRemoved((String)list.getSelectedValue());
+				elementRemoved(ev);
+				
+				model.remove(list.getSelectedIndex());
+			}
+		}
+		
+		if(e.getSource() == tree){
+			//Si es doble click y hay algún elemento seleccionado en el arbol lo añadimos 
+			if(e.getClickCount() == 2 && draggLabel != null){ 	
+				DefaultListModel model = (DefaultListModel)list.getModel();
+				
+				//Lanzamos el evento de añadir un elemento
+				ev.resetValues();
+				ev.setElementAdded(draggLabel);
+				elementAdded(ev);
+				
+				model.addElement(draggLabel);
+				draggLabel = null;
+			}
+		}
+	}
+	
+	public void mouseEntered(MouseEvent e) {
+		if(e.getSource() == list)
+			enterInList = true;
+		
+	}
+
+	public void mouseExited(MouseEvent e) {
+		if(e.getSource() == list)
+			enterInList = false;
+	}
+
+	
+	
+	public void mousePressed(MouseEvent e) {
+		selectElement = -1;
+		
+		//Al pulsar sobre el Arbol se captura el elemento seleccionado
+		if(e.getSource() == tree){
+			TreePath[] tp = tree.getSelectionPaths();
+			if(tp != null){
+				String val = tp[0].toString();
+				//Comprobamos que se haya pinchado sobre una rama
+				String[] pathTree = val.split(", ");
+				if(pathTree.length <= 2)
+					draggLabel = null;
+				else
+					draggLabel = val.substring(val.lastIndexOf(", ") + 2, val.lastIndexOf("]"));
+			}
+		}
+		
+		//Al pulsar sobre la lista capturamos el elemento seleccionado
+		if(e.getSource() == list){
+			selectElement = list.getSelectedIndex();
+			if(selectElement < 0)
+				return;
+			
+			//Capturamos datos para el evento elementMoved
+			ev.resetValues();
+			ev.setPositionSourceElement(selectElement);
+			ev.setSourceElement((String)((DefaultListModel)list.getModel()).getElementAt(selectElement));
+		}
+	}
+
+	
+	public void mouseReleased(MouseEvent e) {
+			
+		//Si se ha pinchado sobre un elemento del arbol y se ha arrastrado lo añadimos
+		if(enterInList){
+			if(draggLabel != null && draggActive == true){
+				DefaultListModel model = (DefaultListModel)list.getModel();
+				
+				//Lanzamos el evento de añadir un elemento
+				ev.setElementAdded(draggLabel);
+				elementAdded(ev);
+				
+				model.addElement(draggLabel);
+				draggLabel = null;
+			}
+		}
+		
+		//Si se está arrastrando un elemento de la lista se intercambia por el lugar donde se suelta
+		if(draggElement && e.getSource() == list && selectElement != -1){
+			if(list.getSelectedIndex() != selectElement){
+				DefaultListModel model = (DefaultListModel)list.getModel();
+				int posDst = list.getSelectedIndex();
+				String elemOrig = (String)model.getElementAt(selectElement);
+				
+				ev.setPositionDestElement(posDst);
+				ev.setDestElement((String)((DefaultListModel)list.getModel()).getElementAt(posDst));
+				
+				model.remove(selectElement);
+				model.insertElementAt(elemOrig, posDst);
+			}
+		}
+		
+		//Al levantar el click del ratón desactivamos los arrastres
+		draggActive = false;
+		draggElement = false;
+		selectElement = -1;
+		
+	}
+		
+	public void mouseDragged(MouseEvent e) {
+		//Al arrastrar desde el arbor se pone draggActive a true se se ha pinchado antes en un elemento
+		if(e.getSource() == tree){
+			if(draggLabel != null)
+				draggActive = true;
+		}
+		
+		if(e.getSource() == list){
+			if(selectElement != -1)
+				draggElement = true;
+		}
+	}
+
+	public void mouseMoved(MouseEvent e) {
+
+	}	
+	
+	/**
+	 * Añade la lista de listeners
+	 * @param l
+	 */
+	public void setListeners(ArrayList l){
+		this.listListeners = l;
+	}
+
+	/**
+	 * Ejecutamos el método elementAdded de todos los listeners registrados
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e) {
+		if(listListeners == null || listListeners.size() == 0)
+			return;
+		for(int i = 0; i < listListeners.size(); i++)
+			((TreeListComponentListener)listListeners.get(i)).elementAdded(e);
+	}
+	
+	/**
+	 * Ejecutamos el método elementRemoved de todos los listeners registrados
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e) {
+		if(listListeners == null || listListeners.size() == 0)
+			return;
+		for(int i = 0; i < listListeners.size(); i++)
+			((TreeListComponentListener)listListeners.get(i)).elementRemoved(e);
+	}
+
+	/**
+	 * Ejecutamos el método elementMoved de todos los listeners registrados
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent e) {
+		if(listListeners == null || listListeners.size() == 0)
+			return;
+		for(int i = 0; i < listListeners.size(); i++)
+			((TreeListComponentListener)listListeners.get(i)).elementMoved(e);
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java	(revision 10281)
@@ -0,0 +1,66 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.treelist.listeners;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Interfaz que contiene los eventos del componente TreeList
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public interface TreeListComponentListener{
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e);
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e);
+	
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent e);
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/BaseComponent.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/BaseComponent.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/BaseComponent.java	(revision 10281)
@@ -0,0 +1,43 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+
+/**
+ * 
+ */
+package org.gvsig.gui.beans;
+
+import javax.swing.JPanel;
+
+import org.gvsig.i18n.Messages;
+
+/**
+ * Clase base para los componentes. 
+ * Registramos en ella de forma estática el directorio de los ficheros de traducción para la 
+ * libreria gvsig-i18n.jar
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public abstract class BaseComponent extends JPanel{
+    
+    static {
+        Messages.addResourceFamily("org.gvsig.gui.beans.translations.text", BaseComponent.class.getClassLoader(), "org.gvsig.gui.beans");
+    }
+    
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/BaseComponent.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java	(revision 10281)
@@ -0,0 +1,106 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*/
+package org.gvsig.gui.beans.graphic.listeners;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+
+import javax.swing.JLabel;
+import javax.swing.event.TableModelEvent;
+
+import org.gvsig.gui.beans.graphic.GraphicContainer;
+import org.jfree.chart.ChartPanel;
+
+/**
+ * 
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ *
+ */
+public class GraphicListener implements MouseListener, ActionListener, MouseMotionListener{
+
+	private GraphicContainer		graphicContainer = null;
+	private boolean					move = false;
+	private JLabel					left = null;
+	private JLabel					right = null;
+	
+	public GraphicListener(GraphicContainer graphicContainer){
+		this.graphicContainer = graphicContainer;
+	}
+	
+	public void mouseDragged(MouseEvent e) {
+		if(move){
+			if(e.getSource() == left)	
+				left.setLocation(left.getLocation().x + e.getX(), left.getLocation().y);
+			
+			if(e.getSource() == right)
+				right.setLocation(right.getLocation().x + e.getX(), right.getLocation().y);
+		}	
+		ChartPanel cp = graphicContainer.getPGraphic().getChart();
+
+		//System.out.println(cp.getScaleX());
+		
+	}
+
+	public void mousePressed(MouseEvent e) {
+		move = true;
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		move = false;		
+	}
+	
+	public void setLabels(JLabel left, JLabel right){
+		this.left = left;
+		this.right = right;        
+	}
+	
+	public void mouseMoved(MouseEvent e) {
+			
+	}
+
+	private void initialize(){
+
+	}
+	
+	public void actionPerformed(ActionEvent e) {
+		
+	}
+
+	public void tableChanged(TableModelEvent e) {
+				
+	}
+
+	public void mouseClicked(MouseEvent e) {
+		
+	}
+
+	public void mouseEntered(MouseEvent e) {
+				
+	}
+
+	public void mouseExited(MouseEvent e) {
+				
+	}
+
+
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/listeners/GraphicListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/DoubleSliderControlPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/DoubleSliderControlPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/DoubleSliderControlPanel.java	(revision 10281)
@@ -0,0 +1,144 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.Color;
+import java.awt.FlowLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.graphic.listeners.GraphicListener;
+
+/**
+ * 
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class DoubleSliderControlPanel extends JPanel {
+	
+	private int 				width = 300, height = 25;
+	private JLabel 				lLeft = null;
+	private JLabel 				lRight = null;
+	private GraphicListener 	graphicListener = null;
+	private JPanel pRight = null;
+	private JPanel pLeft = null;
+	
+	public DoubleSliderControlPanel(int width, int height, GraphicListener 	graphicListener) {
+		super();
+		this.width = width;
+		this.height = height;
+		this.graphicListener = graphicListener;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setHgap(0);
+        flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+        flowLayout.setVgap(0);
+        
+        /*lRight = new JLabel();
+        lRight.setForeground(Color.RED);
+        lRight.setText("T");
+        lRight.setPreferredSize(new java.awt.Dimension(15,25));
+        
+        lLeft = new JLabel();
+        lLeft.setForeground(Color.BLUE);
+        lLeft.setText("T");
+        lLeft.setPreferredSize(new java.awt.Dimension(15,25));
+        this.setLayout(flowLayout);
+        
+        lRight.addMouseListener(graphicListener);
+        lRight.addMouseMotionListener(graphicListener);
+        lLeft.addMouseListener(graphicListener);
+        lLeft.addMouseMotionListener(graphicListener);
+        graphicListener.setLabels(lLeft, lRight);*/
+       
+        this.setLayout(flowLayout);
+        this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+        this.setSize(new java.awt.Dimension(width, height));
+        this.setPreferredSize(new java.awt.Dimension(width, height));
+  
+        this.add(getPLeft(), null);
+        this.add(getPRight(), null);
+        graphicListener.setLabels(lLeft, lRight);
+        
+        //lLeft.setLocation(28, 4);
+        //lRight.setLocation(470, 4);
+        
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPRight() {
+		if (pRight == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setHgap(0);
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setVgap(0);
+			lRight = new JLabel();
+			lRight.setText("T");
+			lRight.setForeground(Color.RED);
+			lRight.setPreferredSize(new java.awt.Dimension(15,22));
+			pRight = new JPanel();
+			pRight.setLayout(flowLayout1);
+			pRight.setPreferredSize(new java.awt.Dimension((width >> 1) - 2,20));
+			pRight.setSize(width >> 1,20);
+			pRight.add(lRight, null);
+	        lRight.addMouseListener(graphicListener);
+	        lRight.addMouseMotionListener(graphicListener);
+		}
+		return pRight;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPLeft() {
+		if (pLeft == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setHgap(28);
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout1.setVgap(0);
+			lLeft = new JLabel();
+			lLeft.setText("T");
+			lLeft.setForeground(Color.BLUE);
+			lLeft.setPreferredSize(new java.awt.Dimension(15,22));
+			pLeft = new JPanel();
+			pLeft.setLayout(flowLayout1);
+			pLeft.setPreferredSize(new java.awt.Dimension((width >> 1) - 2,20));
+			pLeft.setSize(width >> 1,20);
+			pLeft.add(lLeft, null);
+			lLeft.addMouseListener(graphicListener);
+	        lLeft.addMouseMotionListener(graphicListener);
+		}
+		return pLeft;
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/DoubleSliderControlPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicChartPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicChartPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicChartPanel.java	(revision 10281)
@@ -0,0 +1,187 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.FlowLayout;
+
+import javax.swing.JPanel;
+
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.ChartPanel;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.Plot;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+
+/**
+ * 
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class GraphicChartPanel extends JPanel {
+	
+	private static final int	HEIGHT_MARGIN = 5;
+	private static final int	WIDTH_MARGIN = 4;
+	private JFreeChart 			chart;
+	private ChartPanel 			jPanelChart = null;
+	private XYSeries 			series[] = null;
+	private XYSeriesCollection 	dataset = null;
+	private int 				width = 300, height = 150;
+
+	
+	public GraphicChartPanel(int width, int height) {
+		this.width = width;
+		this.height = height;
+
+		int nSeries = 3;
+		series = new XYSeries[nSeries];
+		dataset = new XYSeriesCollection();
+		
+		for(int iSerie = 0; iSerie < nSeries; iSerie++){
+			series[iSerie] = new XYSeries("");
+			for (int i = 0; i < 256; i++) 
+		         series[iSerie].add(new Integer(i),  new Integer(i * (iSerie + 1)));
+			dataset.addSeries(series[iSerie]);
+		}
+			    
+	    createChart();
+	    	    
+		initialize();
+		
+		Plot plot = this.jPanelChart.getChart().getPlot();
+        plot.setOutlineStroke(new BasicStroke(1));
+        plot.setOutlinePaint(Color.magenta);
+	}
+	
+	/**
+	 * This method initializes this			
+	 * 
+	 */
+	private void initialize() {
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setVgap(0);
+        flowLayout.setHgap(0);
+        this.setLayout(flowLayout);
+        this.setSize(new java.awt.Dimension(width, height));
+		this.setPreferredSize(new java.awt.Dimension(width, height));
+		this.add(getChart(), null);	
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public ChartPanel getChart(){
+		if(jPanelChart == null){
+			jPanelChart = new ChartPanel(chart);
+			jPanelChart.setSize(new java.awt.Dimension(width - WIDTH_MARGIN, height - HEIGHT_MARGIN));
+			jPanelChart.setPreferredSize(new java.awt.Dimension(width - WIDTH_MARGIN, height - HEIGHT_MARGIN));
+			jPanelChart.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+		}
+		return 	jPanelChart;
+	}
+
+	   /**
+     * Creates a chart.
+     * 
+     * @param dataset  the dataset.
+     * 
+     * @return A chart.
+     */
+    private void createChart() {
+            
+    	chart = 
+		     ChartFactory.createXYLineChart(null, null, null, 
+		    	dataset, 
+		    	PlotOrientation.VERTICAL,
+		        false,
+		        true, 
+		        true);
+        
+        // color
+        XYPlot plot = chart.getXYPlot();
+        plot.getRenderer().setSeriesPaint(0, Color.red);
+        plot.getRenderer().setSeriesPaint(1, Color.green); 
+        plot.getRenderer().setSeriesPaint(2, Color.blue);
+        plot.getRenderer().setSeriesPaint(3, Color.cyan);
+        plot.getRenderer().setSeriesPaint(4, Color.black);
+        plot.getRenderer().setSeriesPaint(5, Color.darkGray);
+        plot.getRenderer().setSeriesPaint(6, Color.gray);
+        plot.getRenderer().setSeriesPaint(7, Color.magenta);
+        plot.getRenderer().setSeriesPaint(8, Color.yellow);
+        plot.getRenderer().setSeriesPaint(9, Color.orange);
+        
+    }
+    
+    /**
+     * Asigna nuevos valores para la gráfica
+     * @param values Matriz de [número de gráficas][Valores por gráfica]
+     */
+    public void setNewChart(int[][] values, String names[]){
+    	dataset.removeAllSeries();
+    	series = new XYSeries[values.length];
+    	for (int iGraf = 0; iGraf < values.length; iGraf++) {
+    		series[iGraf] = new XYSeries(names[iGraf]);
+    		for (int i = 0; i < values[iGraf].length; i++) {
+    			series[iGraf].add(new Integer(i),  new Integer(values[iGraf][i]));
+    		}
+    		dataset.addSeries(series[iGraf]);
+    	}
+    	jPanelChart.repaint();
+    }
+    
+    /**
+     * Reemplaza los valores de la gráfica
+     * @param values Matriz de [número de gráficas][Valores por gráfica]
+     */
+    public void replaceValuesChart(int[][] values){
+    	for (int iGraf = 0; iGraf < values.length; iGraf++) {
+    		for (int i = 0; i < values[iGraf].length; i++) {
+    			series[iGraf].getDataItem(i).setY(values[iGraf][i]);
+    		}
+    	}
+    	jPanelChart.repaint();
+    }
+    
+    /**
+     * Limpia la gráfica
+     */
+    public void cleanChart(){
+    	dataset.removeAllSeries();
+    	jPanelChart.repaint();
+    }
+    
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		width = w;
+		height = h;
+		this.setSize(new java.awt.Dimension(w, h));
+		this.setPreferredSize(new java.awt.Dimension(w, h));
+		jPanelChart.setSize(new java.awt.Dimension(w - WIDTH_MARGIN, h - HEIGHT_MARGIN));
+		jPanelChart.setPreferredSize(new java.awt.Dimension(w - WIDTH_MARGIN, h - HEIGHT_MARGIN));
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicChartPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/BoxesPanel.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/BoxesPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/BoxesPanel.java	(revision 10281)
@@ -0,0 +1,157 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.FlowLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.textincreaser.TextIncreaserContainer;
+
+/**
+ * 
+ * Nacho Brodin (brodin_ign@gva.es)
+ */
+
+public class BoxesPanel extends JPanel {
+	
+	private int 				width = 300, height = 30;
+	private JPanel pLeft = null;
+	private JPanel pRight = null;
+	private TextIncreaserContainer controlLeft = null;
+	private TextIncreaserContainer controlRight = null;
+	public BoxesPanel(int width, int height) {
+		super();
+		this.width = width;
+		this.height = height;
+		initialize(); 
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        FlowLayout flowLayout = new FlowLayout();
+        flowLayout.setHgap(0);
+        flowLayout.setVgap(0);
+        this.setLayout(flowLayout);
+        this.setSize(new java.awt.Dimension(width, height));
+        this.setPreferredSize(new java.awt.Dimension(width, height));
+        this.add(getPLeft(), null);
+        this.add(getPRight(), null);
+			
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPLeft() {
+		if (pLeft == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setHgap(0);
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout1.setVgap(0);
+			pLeft = new JPanel();
+			pLeft.setLayout(flowLayout1);
+			pLeft.add(getControlLeft(), null);
+			pLeft.setSize(new java.awt.Dimension(width >> 1, height));
+	        pLeft.setPreferredSize(new java.awt.Dimension(width >> 1, height));
+		}
+		return pLeft;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPRight() {
+		if (pRight == null) {
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setHgap(0);
+			flowLayout2.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout2.setVgap(0);
+			pRight = new JPanel();
+			pRight.setLayout(flowLayout2);
+			pRight.add(getControlRight(), null);
+			pRight.setSize(new java.awt.Dimension(width >> 1, height));
+			pRight.setPreferredSize(new java.awt.Dimension(width >> 1, height));
+		}
+		return pRight;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TextIncreaserContainer getControlLeft() {
+		if (controlLeft == null) {
+			controlLeft = new TextIncreaserContainer(70, 0, 100, 0.0, true);
+		}
+		return controlLeft;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TextIncreaserContainer getControlRight() {
+		if (controlRight == null) {
+			controlRight = new TextIncreaserContainer(70, 0, 100, 100.0, false);
+		}
+		return controlRight;
+	}
+	
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		this.width = w;
+		this.height = h;
+		setSize(w, h);
+		setPreferredSize(new java.awt.Dimension(w, h));
+		getPRight().setSize(w >> 1, h);
+		getPRight().setPreferredSize(new java.awt.Dimension(w >> 1, h));
+		getPLeft().setSize(w >> 1, h);
+		getPLeft().setPreferredSize(new java.awt.Dimension(w >> 1, h));
+		
+	}
+	
+	//****************************************************
+	//MÉTODOS DEL CONTROL
+	
+	/**
+	 * Obtiene el valor de los controles. 
+	 * @return Array con los valores de ambos controles. El primer valor del array es el control de la derecha
+	 * y el segundo el de la izquierda.  
+	 */
+	public double[] getBoxesValues(){
+		double[] v = new double[2];
+		v[0] = getControlRight().getValue();
+		v[1] = getControlLeft().getValue();
+		return v;
+	}
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/BoxesPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicContainer.java
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicContainer.java	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicContainer.java	(revision 10281)
@@ -0,0 +1,240 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.gui.beans.graphic;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.gui.beans.BaseComponent;
+import org.gvsig.gui.beans.graphic.listeners.GraphicListener;
+
+/**
+ * Control para el manejo de un gráfico.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class GraphicContainer extends BaseComponent{
+	private static final int		INTERNAL_MARGIN = 4;
+	private static int				HEIGHT_CONTROL = 63;
+	private int						HEIGHT_DOUBLESLIDER = 25;
+	private static final int		HEIGHT_BOXES = 30;
+	
+	private int 					width = 400, height = 230;
+	private JPanel 					jPanel = null;
+	private JPanel 					jPanel2 = null;
+	private JPanel 					pGeneral = null;
+	private GraphicChartPanel 		pGraphic = null;
+	private JPanel 					pDoubleSlider = null;
+	private BoxesPanel 				pBoxes = null;
+	private GraphicListener 		graphicListener = null;
+	/**
+	 * Variable que estará a true si se desea que se muestre el control de barra deslizadora
+	 */
+	private	boolean 				showSlider = true;
+
+	
+	/**
+     * Constructor
+     * @param width Ancho del gráfico en pixeles
+     * @param height Alto del gráfico en pixeles
+     */
+	public GraphicContainer(int width, int height) {
+		this.width = width;
+		this.height = height;
+		graphicListener = new GraphicListener(this);
+		initialize();
+	}
+		
+	/**
+     * Constructor
+     * @param width Ancho del gráfico en pixeles
+     * @param height Alto del gráfico en pixeles
+     */
+	public GraphicContainer(int width, int height, boolean showSlider) {
+		this.showSlider = showSlider;
+		if(!showSlider)
+			HEIGHT_DOUBLESLIDER = 0;
+		this.width = width;
+		this.height = height;
+		graphicListener = new GraphicListener(this);
+		initialize();
+	}
+
+	private void initialize() {
+		FlowLayout layout = new FlowLayout();
+		layout.setHgap(0);
+		layout.setVgap(0);
+        this.setLayout(layout);
+        this.add(getPGeneral(), null);			
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPGeneral() {
+		if (pGeneral == null) {
+			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
+			gridBagConstraints4.gridy = 2;
+			gridBagConstraints4.insets = new java.awt.Insets(2,0,0,0);
+			gridBagConstraints4.gridwidth = 0;
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.gridy = 1;
+			gridBagConstraints3.insets = new java.awt.Insets(2,0,0,0);
+			gridBagConstraints3.gridx = 0;
+			GridBagConstraints gridBagConstraints = new GridBagConstraints();
+			gridBagConstraints.gridy = 0;
+			gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+			gridBagConstraints.gridx = 0;
+			pGeneral = new JPanel();
+			//pGeneral.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pGeneral.setLayout(new GridBagLayout());
+			pGeneral.add(getPGraphic(), gridBagConstraints);
+			if(showSlider)
+				pGeneral.add(getPDoubleSlider(), gridBagConstraints3);
+			pGeneral.add(getPBoxes(), gridBagConstraints4);
+		}
+		return pGeneral;
+	}
+
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public GraphicChartPanel getPGraphic() {
+		if (pGraphic == null) {
+			pGraphic = new GraphicChartPanel(width - INTERNAL_MARGIN, height - HEIGHT_BOXES - HEIGHT_DOUBLESLIDER);
+		}
+		return pGraphic;
+	}
+
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPDoubleSlider() {
+		if (pDoubleSlider == null) {
+			pDoubleSlider = new DoubleSliderControlPanel(width - INTERNAL_MARGIN, HEIGHT_DOUBLESLIDER, graphicListener);
+		}
+		return pDoubleSlider;
+	}
+
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private BoxesPanel getPBoxes() {
+		if (pBoxes == null) {
+			pBoxes = new BoxesPanel(width - INTERNAL_MARGIN, HEIGHT_BOXES);
+		}
+		return pBoxes;
+	}
+	
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	public void setComponentSize(int w, int h){
+		width = w;
+		height = h;
+        setPreferredSize(new java.awt.Dimension(w, h));
+        //getPGeneral().setPreferredSize(new java.awt.Dimension(w, h));
+		getPGraphic().setComponentSize(w - INTERNAL_MARGIN, h - HEIGHT_BOXES - HEIGHT_DOUBLESLIDER);
+		if(this.showSlider){
+			//getPDoubleSlider().setSize(w - INTERNAL_MARGIN, HEIGHT_DOUBLESLIDER);
+			getPDoubleSlider().setPreferredSize(new java.awt.Dimension(w - INTERNAL_MARGIN, HEIGHT_DOUBLESLIDER));
+		}
+		((BoxesPanel)getPBoxes()).setComponentSize(w - INTERNAL_MARGIN, HEIGHT_BOXES);
+	}
+	
+	//****************************************************
+	//MÉTODOS DEL CONTROL
+
+	/**
+	 * Obtiene el valor de los controles. 
+	 * @return Array con los valores de ambos controles. El primer valor del array es el control de la derecha
+	 * y el segundo el de la izquierda.  
+	 */
+	public double[] getBoxesValues(){
+		return getPBoxes().getBoxesValues();
+	}
+	
+	/**
+	 * Obtiene el botón de incremento del control izquierdo
+	 * @return JButton. Botón de incremento del control izquierdo
+	 */
+	public JButton getPlusButtonControlLeft(){
+		return this.getPBoxes().getControlLeft().getBmas();
+	}
+	
+	/**
+	 * Obtiene el botón de decremento del control izquierdo
+	 * @return JButton. Botón de decremento del control izquierdo
+	 */
+	public JButton getLessButtonControlLeft(){
+		return this.getPBoxes().getControlLeft().getBmenos();
+	}
+	
+	/**
+	 * Obtiene el botón de incremento del control derecho
+	 * @return JButton. Botón de incremento del control derecho
+	 */
+	public JButton getPlusButtonControlRight(){
+		return this.getPBoxes().getControlRight().getBmas();
+	}
+	
+	/**
+	 * Obtiene el botón de decremento del control derecho
+	 * @return JButton. Botón de decremento del control derecho
+	 */
+	public JButton getLessButtonControlRight(){
+		return this.getPBoxes().getControlRight().getBmenos();
+	}
+	
+	/**
+	 * Obtiene el JTextField de control derecho
+	 * @return JTextField de control derecho
+	 */
+	public JTextField getTextControlRight(){
+		return this.getPBoxes().getControlRight().getTText();
+	}
+	
+	/**
+	 * Obtiene el JTextField de control izquierdo
+	 * @return JTextField de control izquierdo
+	 */
+	public JTextField getTextControlLeft(){
+		return this.getPBoxes().getControlLeft().getTText();
+	}
+	
+}

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/src/org/gvsig/gui/beans/graphic/GraphicContainer.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/.cvsignore	(revision 10281)
@@ -0,0 +1 @@
+bin

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/.cvsignore
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/build.xml
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/build.xml	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/build.xml	(revision 10281)
@@ -0,0 +1,111 @@
+<project name="libBeans" default="dist" basedir=".">
+    <description>
+        Generates Beans
+    </description>
+  <!-- set global properties for this build -->
+  <property name="src" location="src"/>
+  <property name="build" location="bin"/>
+  <property name="dist"  location="dist"/>
+  <property name="lib"  location="lib"/>
+  <property name="beans.home" location="${build}/org/gvsig/gui/beans"/>
+  <property name="jarName" value="gvsig-ui"/>
+  <property name="installBaseDir" location="../_fwAndami"/>
+  <property name="installDir" location="${installBaseDir}/lib"/>
+	<property name="andami" location="../_fwAndami"/>
+	<property name="andamiLibs" location="${andami}/lib"/>
+	<property name="compile-classpath" value="${andamiLibs}/gvsig-i18n.jar"/>
+
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${build}"/>
+  </target>
+
+  <target name="dist" depends="init"
+        description="generate the distribution" >
+ 
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+
+  	<!-- Copy the translations -->
+	<mkdir dir="config"/>
+    <copy todir="${dist}/org/gvsig/gui/beans/resources/translations">
+        <fileset dir="config" includes="*" />
+    </copy>
+    <!-- Put everything in ${build} into the cms-${DSTAMP}.jar file -->
+    <jar jarfile="${dist}/${jarName}.jar" basedir="${build}">
+    	<manifest>
+    		<section name="common">
+	    		<attribute name="Built-By" value="${user.name}"/>
+	    		<attribute name="Implementation-Title" value="$gvSIG Beans" />
+	    		<attribute name="Implementation-Version" value="${TODAY}" />
+	    		<attribute name="Implementation-Vendor" value="the gvSIG project" />
+    		</section>
+    		<!-- finally, use the magically generated libs path -->
+    	</manifest>
+    </jar>
+    <jar jarfile="${dist}/${jarName}.jar" basedir="." includes = "images/*.gif" update="true" />
+  	<copy todir="../libCq CMS for java/lib">
+  	  		<fileset dir="${dist}" includes="${jarName}.jar"/>
+  	</copy>
+
+  </target>
+
+  <target name="clean"
+        description="clean up" >
+    <!-- Delete the ${build} and ${dist} directory trees -->
+    <delete dir="${build}"/>
+    <delete dir="${dist}"/>
+  </target>
+
+
+	<target name="batch-build"
+			description="compile the sources, create the jar file"
+			depends="compile,copy-data-files,create-jar,move-to-installDir">
+	</target>
+
+	<target name="compile" description="compile the source">
+		<!-- Create the time stamp -->
+		<tstamp/>
+		<!-- Create the build directory structure used by compile -->
+		<mkdir dir="${build}"/>
+		<!-- Compile the Java code from ${src} to ${build} -->
+		<javac  srcdir="${src}"
+			destdir="${build}"
+			debug="${debug}"
+			debuglevel="${debuglevel}"
+			classpath="${compile-classpath}"/>
+	</target>
+
+	<target name="copy-data-files">
+		<mkdir dir="config"/>
+        <copy todir="${dist}/org/gvsig/gui/beans/resources/translations">
+                <fileset dir="config" includes="*" />
+        </copy>
+    </target>
+
+	<target name="create-jar" description="Creates the jar file">
+		<mkdir dir="${dist}"/>
+		<jar jarfile="${dist}/${jarName}.jar" basedir="${build}">
+    		<manifest>
+    			<section name="common">
+		    		<attribute name="Built-By" value="${user.name}"/>
+		    		<attribute name="Implementation-Title" value="$gvSIG Beans" />
+	    			<attribute name="Implementation-Version" value="${TODAY}" />
+	    			<attribute name="Implementation-Vendor" value="the gvSIG project" />
+	    		</section>
+    			<!-- finally, use the magically generated libs path -->
+    		</manifest>
+		</jar>
+		<jar jarfile="${dist}/${jarName}.jar" basedir="." includes="images/*" update="true" />
+	</target>
+
+	<target name="move-to-installDir" description="Moves the build directory to andami">
+		<copy todir="${dist}">
+			<fileset dir="${lib}" includes="**/**"/>
+		</copy>
+	</target>
+
+</project>
+

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/build.xml
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/.classpath
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/.classpath	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/.classpath	(revision 10281)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry sourcepath="ECLIPSE_HOME/plugins/org.eclipse.jdt.source_3.1.1/src/org.junit_3.8.1/junitsrc.zip" kind="var" path="JUNIT_HOME/junit.jar"/>
+	<classpathentry kind="src" path="src-test"/>
+	<classpathentry kind="lib" path="lib/JWizardComponent.jar"/>
+	<classpathentry kind="lib" path="lib/gvsig-i18n.jar"/>
+	<classpathentry kind="lib" path="lib/jfreechart-1.0.1.jar"/>
+	<classpathentry kind="lib" path="lib/jfreechart-1.0.1-demo.jar"/>
+	<classpathentry kind="lib" path="lib/jcommon-1.0.0.jar"/>
+	<classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/.classpath
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/libraries/libUIComponent_praster/dist/gvsig-ui.jar
===================================================================
--- tags/Root_v10+Piloto/libraries/libUIComponent_praster/dist/gvsig-ui.jar	(revision 0)
+++ tags/Root_v10+Piloto/libraries/libUIComponent_praster/dist/gvsig-ui.jar	(revision 10281)
@@ -0,0 +1,909 @@
+PK
+`a&5	META-INF/þÊPK
+]a&5‚PYµMETA-INF/MANIFEST.MFm�=Â0†÷@þÃ
+:´´E;tk¤ƒ.W‰ñÔHs)É)ôßDÐõ½çÞ�µ"sÂÀÉ}0Ž*ÈÓLŠš¾”zPú‚µx,Ó…K�Šñ˜4ã“Ÿ§Å>Ï“CVÂ´»¬�ö.Œ�ÑhI§3)¤Ø(‹hg­#)š›éùõOÑÜIÑÚ¡G‹ÄŠch²5ÜG|r¾wí
+T~˜OÁ‡˜u@%YVþ!éè|g¼ï®¨ùYìPK
+¼j5org/PK
+¼j5
+org/gvsig/PK
+¼j5org/gvsig/gui/PK
+†I
+5org/gvsig/gui/beans/PK
+¼p5org/gvsig/gui/beans/buttonBar/PK
+f@5%org/gvsig/gui/beans/buttonBar/images/PK
+mm
+5#org/gvsig/gui/beans/coordDataInput/PK
+mm
+5org/gvsig/gui/beans/dataInput/PK
+¼j5org/gvsig/gui/beans/graphic/PK
+¼j5'org/gvsig/gui/beans/graphic/exceptions/PK
+¼j5&org/gvsig/gui/beans/graphic/listeners/PK
+¼j5org/gvsig/gui/beans/openFile/PK
+¼j5'org/gvsig/gui/beans/openFile/listeners/PK
+¼j5org/gvsig/gui/beans/slidertext/PK
+¼j5)org/gvsig/gui/beans/slidertext/listeners/PK
+S$5org/gvsig/gui/beans/table/PK
+¼j5%org/gvsig/gui/beans/table/exceptions/PK
+¼j5!org/gvsig/gui/beans/table/images/PK
+¼j5$org/gvsig/gui/beans/table/listeners/PK
+"R$5!org/gvsig/gui/beans/table/models/PK
+¼j5"org/gvsig/gui/beans/textincreaser/PK
+¼j5)org/gvsig/gui/beans/textincreaser/images/PK
+?5!org/gvsig/gui/beans/translations/PK
+¼j5org/gvsig/gui/beans/treelist/PK
+¼j5#org/gvsig/gui/beans/treelist/event/PK
+¼j5'org/gvsig/gui/beans/treelist/listeners/PK
+mm
+5'‘QD'org/gvsig/gui/beans/BaseComponent.class…“]OA†ß�Â¶km¥|+ò!T[Ð]ðáB�S#¤oÌÐí˜íÙÝBùE^£	MôÒÄe<3%Vh�{1“sæœ9Ï9óîÏ__¾pðœaFU·zJZÒÝÜÝ<ëª~ |áGCæ?äM7<’~Õ}õ†ûÂ³ÐË`•=†s‹âzœÖµs…!±uìG5É2C|µìI_Fk½¹|‰!¶®*‚!KŽpÀ1NÐêñH*mˆfÇµ$úÐŸ@®·¨;’.QÇ‘fH_A²0@Èû*(òº.�û‹y+
+¨·•|GIbÈFÃ“íÃ¢2ÇbS5üÊË P�…Q†ÁvÌv-PG|ÏÆìªˆ^‹0äUª=”ËwOâ&lÜÄm†þÕ‹i
+w£,%1…ic˜aHÑÅ¦ xEã¹Ž6ZGTasº™,�vb÷FÛš�KË¾{MãËÓ;óJå­U#(‹M^—Þ1ÃZÄtïe÷mÌãÃô•´¢ŠZóm–Å�Öƒ—¶ }QlÔ÷D°­çK-¨2÷J<�Ú6N=¢„�‘Ø¢šfÿ•;ÉÖÞju'ÍÅ—N�›!Æè"UkQÒnA=dÇ‘ Û&k½Æ»�I~Bj÷&v27Î1²û©�HÅØ»÷§˜<Ã�ï§¸›É�Ã91©iŒ`‘.[¢d›v GÃÉâ¡)¡ËNý)âÒÎhï›?Ãã Óú�³•’là	žšäg&jù7PK
+‰L5Pí?�¬6org/gvsig/gui/beans/buttonBar/ButtonBarContainer.class•Wû{W~Ov“M–ÂR!	·n6)K!½¬%`Ë’D‚I[êìîd38™	³³¹TÚZ­-µUëµ‚—‚­¥j[@É›Zë�üÑÿ ?øo¨ï™™�l’ÕçñÉóÌœùÎw¾÷ý®gó÷}ø1€ý¸+pÀ²óÉüLAç³¨'3šj’™¢ãXf�j'{Ê«^ËtTÝÔì„@[µS=jAëµ¦¦-S3�Bµ³ò[@¤¸žôÖÊ´êLŽX©)5¯béóêŒš4T3ŸvlÝÌwD<ÜÞìmÝHµmu>­jÄrzAÍÚQÃ�ÌlË ²§yÿè°£:š@Í”ÕÑMÝyT o÷Z9MA#6FÆ&µ¨k@
+6+ˆx«-¤ »“õhVP�)nØT…N;¢h•†¢X'õv*Pð¹Ú¥`=6ÈÕ�¨d¡«†þÑ÷IôÜ+°!Í°§2š="]’1±²ª1ªÚºüö…agR§�ÓÿoÂºË¬ÕY'yÌ°fÓê¼U$ëû¢,�Mtµ 9'ò*sŽ§ÚGÀýrë ·5Ê-]žì�Ê<-ñt`Ú“�RMÆÍî–vÂÃÒÇG<;Ãô›eO¹Ý8"÷>Ç°Lœ‚|¯¤JÔ\ÎsM _[3k%)™j×ñ¹da–’äãž�z£è“ŽÇ¬>}J3ºÜ<&+ƒÜŽã„@#yÙÚ„fÛZÎs`K…ËÁ1×ÝÇqRNÓ‹JX·ÒSYi{€—‰fÎkYæaH >¯9½†Z`‚7ÅÛ+œq…Ý
+Nc8Š/`D iµ§=Å‰	Ù–£+Œ{{|‘ÁŸQ�¢68!°¯2r|wûÚÐ)ÇQŒáIºR%ØÒÙFœ‹â,žfw©ÓÓš™è¬¦ºFäÑ%†ŠŒ´�¥÷Žåí	Ü¯ÊGÃ„Ô¥Â†U±‰@XÇð�Ö
+VÑÎ2C»þ;Ss’gN§iñË0¢8�)��ñ•{žwVƒ˜ö*W&/ˆD�Ö¬Ÿv™vïzêŽX–1¢O�hsŽ‚¤>Ìrò°~™»xªJhcÏÈòâQQÏzâ9�Öå3EÃ²tÓÑìþ¹¬6í¸5ûUÆP'ŸuŠþ‡�Äk-;§Ùœ€™ ­V5‚l«œf”ÛªÎÖ¦¬M:šj_KSÁ%¼"I~“Ç<U_¯y4¿EDÝÌisÄg6¼îiW QÑ1ÁýPÎÈJ¡ŒÄ÷¥¹pÜ~ãÌN)øÞ�Ö~Ì!Ï|7è…~SŽÅœ»?®à'ø©ŒôÏ8N˜„`3—á}Wåî5Ö—­ËÖÊ—Æ¨l
+$år¶–Ý_®X¡¬vÔÐó&›Ÿ±­µõü¤S�ë¡v¡¨Ê›hsµF#Í_á×²¯~Ã{Š¦#
+Þ÷Æë4§J)mþH” A„zü¬òJú�@s%Moë˜š¥ó,ðdÖÖxŽèƒQ>yaeg\±¸ÚMULd­»2m†ew·W3W	É¤.âN%üÞ»<ÊLZÿ™¶%|$káìQÏ“þ©ig¾||G¼*túG|"Aÿ$[€êÑaw<Óåeºeí5¹_ÚBñÂümTÇ7pU#¸oþ
+pß¼åÝ7ïx÷Ížï(„üIÁgŒ_³qÜŸXÄ=‰�âõ4%·-`k"ÆçöÄZÇñÙ´%BØ�ØKÝø-×d;Ÿ»$Hg'Í¶a%»°÷b:ÑÁ[º“» 
+ˆ’N÷ì¾€„A5|ïYÂ~‚%Ó¡ÉÇƒ‰Ž'·Éê6¶–ðè2î6×Ý.¢?@¤¥‡ˆý0‘qñš<›>^=¶ãóxŒˆGÑã#ê-»„>"÷7‡—p|¬±©±i©NuÜÅ)K”pf	gÇHdû<µˆ/‘[®„ÉÌE\(¡xµ‡k;ï¢¡9ÜYÂÛv4‡K¸È£Ïß"d3Nðïß�sô3[Ç¹“ÂÞÌ'p’ÏA`#¼MÏaœqêb¦IÕwH®¾Æ³Â]}
+®»Y¼H‡BüÇ7ð“"ð2ƒî¹{š:R+&©µ”ðêY2û¶Ç®Ö˜[WOÒÂSë9&ééŠpÆô¾C$ÎgƒDæÊ‰¹ÎŒù(ßû}%üðì‹B´HQ	—¯ýûŸ«'è]›ùÞ
+½JkXZW|D%@¼Ê³Rkˆ†w_ÁÉDX©�ò?öJ*íìmYAçç#Ÿ¬´_¬`÷�Õåm³P
+Ä-2SóðqÏ±�æ™«*Øùl[˜­2Û·¶ýøtI¶—‘t[JÜVAÆåzh5£OWþ%2z…Œ^¥õ×°—ïCÌÈ2“.ŸÉzî•™¼�_úLó+A©¾ Ô¹UõF…5%È»äýV‡gíuBò?5¿�OuÖ²�;ewÄÞ-á½ËX'E7®£^Jo$Ø‡WÇøM>¯²æ®Ñæ[ŒàÛ¬„wÇ»¸�’ä²ÓC	¸ìÇM·ê9Ln¹>	ü–6<VFHrom¹Œ�	»
+	q–ðqËDwðg.—Y4¹ýõ+ê}žÿ€ß7Ø“7+¢Ð ·â/d*£ðW÷üßþPK
+¼p5êòçrJÉ1org/gvsig/gui/beans/buttonBar/TestButtonBar.class•TmsÔT=·M»Ù�¶Û”¾ ‚¾dwmƒUPY»•Bë
+HË" âÝMÌ¦“M0ÉRõ“þ
+ÿ…3ºÌÐÿˆ/ŽçnZ ÓggóÜ</çžç<÷æÉ¿�ÿ°„ªqâ;þÃ4à³8-OF©ÓêeYÕeâlyiVß+@”¶åCé„2ò�ë­m¯�0*0öc"»žÀÑ†
+ÿì¤;6Ö”·&0~!ˆ‚ì¢À¨]n
+h«±ë™(@7 Á°W`˜€abãEŒ`JàÌËÉ>#ºG™"�Œ§
+Xj‡Bêe›Á¯¤8f¯¯—›&ŽbVm0GOø�LÇ‰0-‡Y	?êzQ&0k7ž7½™%$YS¯áu…þ†€îÆ;ÑÒƒÈ×q‚íuâPêxK (]7‡°‡ ö¨�Âiü6õú©çéx—‹L†:lJÉ‰Èô’Ž
+‰K7ˆSïs'Ÿ¸À‚½^>8‡<R39sG!Ÿ˜’PÀ²€A	.G²z.[±ï*Bá¬�qŽ¹Aªb+a¨TNâ05ñ‰¤…O9ÿ„ôâÄÛ�5eØã¤kyÂ…\àÕ¸û Ž(m=N\/1qQÁ[¸Ä6\/ÜoC³b¬ ®‚«“¾ª�2VÞ�G9gç}:r'sž
+�m^Æšší•½“u0^À:õäd*ö‹õ{¬jåaN_¢a`_‘YÚ‰wL\W]Mà†ÀTƒÀ×zÝ–—l)u¸o#nË°)“@½ï9µ¬¤‹�ÿqéx{´v¬Žáò+ÊUÛåJ)uoØ6x¯x94™øä53$G‘&‹Í¸—´½µ`ÐÝŠKª
+'‰¥ñ³"hye¹ášwœÏ"ßž2:Bû{åŽTv1qç&ÿFiW3�Ê_(M‹?J‹}ÌW­c}¯ZoZ'Gûx§*¬÷´Ü–Çr[ÏíbAY:?`âÇÕ>ÎóÿY•ÙŸ«”/jWé¼v;_ýç€ÚM>7x®@riNÁÀ<Žà4L”9ÕeLâ<½u”˜7Í|÷0ƒûüp´1‹³»XÀ/8†ßø)Ø$Ò\Þ ¶p‹vÛhâö ýopgO†æ¨¬â.FØ÷ÝÆs:Æ pœŠ�x®Èm¿¥U:~G`Áß÷ƒšûÿPK
+Åp5BÇ¦ºk¡-org/gvsig/gui/beans/buttonBar/images/down.png%R?HÖa>MñÓûDÄ¢¾I¡ºÉÍDQ©O>ü34„RpCC.
+bK‚qÙ`PAC
+-ÙÒ�7‘6$BŠê&5\Ï]¿ßï½÷}ï¹çyîw¿22ØÒÔÑDD-ÃCý£ø‹§pï®³­cDµ*—Æ¨JÕ*öðŠÕ*âûêËOûuuu…B¡¹¹¹X,¶µµuvv–J¥îîî‰‰‰r¹Ü×××ÓÓãwª^©¬Ó¼ýò½õ�ÛÛë¯_=d"!R"*3	“2“ç‰�
+™�çUV%U2%ÏJ6#52#ÇÚI�Ì‘¸Âž
+Â¬ÌÆìÙ¹«°	{¶Ç±(«²){²Ám1Vc3ö¬gu6gO¢4ÁK²ðæ@êp7d`¡"–’Ð‰ª˜Š§B0P3ñT6êbÀPÍA*„Bv°
+Há€¢O j€—æ2ÂT=Í‚	|5SOï MòØ\=­ätZ£“$<€h
+—9¸e^šý4P3à8Œ6Ï‘À2(DWäŽ4‡	”C�ð8.ÁK
+«\ÒÔxÌ5ŒÍú £‰n�è9ÉCd(Àÿ�çê�žœœœ™™™��]XXX[[[YYÙØØØÜÜÜÚÚÚÝÝ=888<<ô¿ûKKÏ«Õjü8NžÏb±õÑ9lÔÜ£ÞŸß$’«ûi®þÄ’Æé¡Ë7‰Ž�§†ž<mÇfÃ­áò@Ã×Æ“Å®†ßg¿ÁÖ©áþãí_®M-5þè­ß)í\ÿ|ûÙâ½çß]Ùy;¿7Mïkk–?Ì=À]é_î›ºûPK
+(´
+5Á—Øvs3org/gvsig/gui/beans/buttonBar/images/fullExtent.pngëðsçå’âb``àõôp	Ò ÌÁ$å?ÿORlIÞî.ÿApÁÞå“�"œ‘ÅÜÂ ÌÈ0kŽP�½ÄÓ×•ý
+§§œÕSÃìeŒž.Ž!·–NÞŸwÈ@àX½¸‡yùg£
+eG+’–hhk3+ó_lÌ+�ü:à¦ím�§*úß¿ÿ~gwx²C0Ãšø{?þýbH¸ºíFE¦á9'/¡Â†ÑÐ³]Ë6É0îÈ+ÿ%ÿcöéÈ
+¼oŽXým·°ÓNpzÖ,™[ùÎï«Cì%Žßûnr6{–LòÉu·ç“­¸Ÿ>ù”øÅŽ°ÜÓ"L�+¢žì¹¿?|ß‡#K�ïy³H´%—N]æ³êÇÌ—±ånç··,Y"(È{xcÖ†‹Vdm{[¹ïbiûîÖ™Sæ‹Mšº¼Ã»iÓ£�v¿íåôß©	O|S|RhÏ§˜²ðku¿¾öÜßPP"OW?—uN	MPK
+Ñ…°4¿.Ywˆ‹3org/gvsig/gui/beans/buttonBar/images/selectTool.pngëðsçå’âb``àõôp	Ò ÌÁ$å?ÿORAž.Ž!·Ž^¼È”`½pû}ÉŒ�aY�íL_&p0<¶Sá^÷Ñ_È–éÖ±Ë»¤òŸ5Èr2
+q23{2nú+;£ãµôÔª½�¥S¾²äGÌ®äZáÁTê&(È¹é+ÐtOW?—uN	MPK
+Åp5€8jvn§+org/gvsig/gui/beans/buttonBar/images/up.png%RMH”aÍp5E—B$Ìp¡£˜Ó�-kîR+‹?‡¼æ(x	ü’º%�0å¡:$t‚ˆ|oÑÚ!OB‚éÍ
+œž¾ï{ç}ßyæyžùÔÇÇ:ÛO·QgµRžÀ·ÛŸÜ1¼‡»&‰šÿÖ¯O�RFY†=¼|µŽø±þêË^KKK.—ëèèÈçó===}}}…BahhhzzºV«•J¥b±hw2«×ô(ý²ß�O;;�·o2‘)Q*3	“2%&‹3!JBWYI”T))YTr"I¤‰R"ÃÚH�’9";*p…- „Y™³E?ä"¬ÂIØ¢=ŽEY•“²Ü–Äš8%¶¨c5NÆDÙi‚—DçÍŽ
+Ôá®ËÀBERHBK$ª’T,‚�&II,Ô‚�š$ +ƒf'åB!ÛY¤p@ÞÇÕÀKcé‘T-Ì‚q|MI-¼ƒ6‰ãdja%‡Óêí`˜›$îDC¨»ÌÎÝ)'ç¥Ñ?@0>öCoƒ°	,ƒBtEnHc˜`@1q�ý¼$·Ê$,A�ù\ÝhÑ¨wš>ZÐïæˆ3�8D†b},V/i`vvvaaaiiieeecccmmmssskkk{{{wwwÿààÀþí­®¾È²Ì#‹�Å
+ñ¤kù<6šæ'Æ'iäçwñäÖµ±2Ý?~¦‚¤ívåÆÑ‰“þ4Ñã§½Øl�¯ÖF[¿µõçÏŽtýÁÖ¹jùÊTï×Ÿßwå>^¸j‹ç.–‡Ÿ_??ìž¨Ü;5Ó?ÓºØÜÔè/\FUGÇËïJ7ïþPK
+ÈL5qviMY
+Ì@org/gvsig/gui/beans/coordDataInput/CoordDataInputContainer.class½WyxTÕÿÝÌ$†$A"V23��(¢ˆ!1#Ájû2óœNfp2!@Ý¨ûRm«‚­]´Ö.V«¶d‚Æ¥E-­Ý7·jíŠÖ½ÖªýÇ¯¿óî›-yðé?ýòÍ½ç�{ïY~çÜsOžüàÁG,À–¤Ò±¦ØÖ�8ÇÁxS¯e&š"©T:ÚnfÌÎä–ÁLS[Ég[*™1ãI+íƒR¨w;¿Â°ÚRý[RI+™ñÁ£P±¦uÝÊÎST§Bù�,rîÓsEßZ3i%|C]f¯• Õ—£Ê‡D³lÖsÅÛ…©]›Í­æ¶¦�¡x2Ö´Ú–uÙ×œ#Z*â™ÁDªyÜ[G¸°ƒ›�-yG›y ¥ËÍ¿hšñ¨„Ke”Šli.ýäêÄŒ­ÚA Æ6°)aÒ¼õ™4­—–Æ“ñÌIÄ ¡³3Ð­àmKE-OC ÛÀ8Ò/æ(GÅ”á(>Mm RSÇ˜ ©~M
+LÔT£CSLÒÔB“1E¨Uš:Î@µ¦Ž7PƒÃ„:ÁÀTM-1p8j…Zj`š¦N20]S'¨ÓÔ
+:B¼V%Ú
+ÌÀLav(T
+X™|Ö¬�ï°¬Â,?™3~� n&löÇÅå2t)Lé"æ§ö÷Zé
+foÂS3Ñm¦ãòí0½™¾8si©k4?\¶3jˆ¿>…Ãì™C™¦ŽDŠ)»=5È,ßàÇ˜ÃÔ¥«b&óÚÛÐ):e©G/usÉÀYš÷	…	äi
+3ºò¢5o�™4cT.rÎÁ'ÅëOÑÇü®öx¿•ˆ§’>ôJ*®¢Ëµië\+�¶¢‚¥Â´"áùc¶àsÁôlBŒÇœûUÛp»a6ã<ÙÎlõ˜Qn	ÎÇ/\”È§õn¶"[U)9Kpüçæ±S8¼ËR">3Ï^™ŽGW˜1†c “f@2>düÄËc\Üf`H2wÛÎv;4çÓd¥®øp¡‰€Ú±jr1½Ä��˜#»ˆú¤‚�))k—ñf¶3%S±J\QÀ·øîvvêz•—ãj…ºb+Vf+ÝaF2©ôv®¥‘‘´ef,ûrDõ²Âù
+%aèµÙÎá°›Ê®;ÃÅÁI¤˜JnâŠU2ÄŸÅõ~\‡tzæ,™}(KÄÑÏã‚Õ�N"Ù…ØÀÍ:_vÉÒ–¢%Ö•/ê¥/ñNÅÆ˜ÅqV×!€ùQ3þ,MnMÄcIæxÆÀ×ôU»�¥–š»òoÁ¸üÖ¯��¯ã1ê¬.9SóïÁq<ô‘_ßÄ·Dä·Ç‰$wéµïÒ¾Â•h›±¶q>|Ï�{%c+4£÷ëª²ÁÚ&×È%%.?À97\U�hO÷Ž5«…Q{P›5:n�çÖk�”˜Ìp-ü¨Ðøð#¹Ð><Æ&UËL›ýVÆJ3’;]üùrä­5ìúL¬bûÊ}ø	C�Éu-™\Jù"V"j6¨–üjKŽ×’_mi‘Ñ'‘aé�\Ð¾ÆÌôùð;–1¢›JËCÒàSù<åÇïñ´Ð'ßE¯4VºÞ·[‘x¿<}‰Ak@mûý…ÂrîE–î¨ák¶I¡Zž]‚!æ¹³‹xþ®Oýƒ§"fZßàÜÎÃg¹õ,Ucy>¼ÂF+w’­˜sýJÎx
+¯‹®7ˆïVGÅa®
+¤0åŒ¨mpÙ"ÎWæ6xGî?Dd}j0±:âÒq�ç~�ÈC=³ÜËV¹†3»+ReÒ[Ùs¥3Opf¿3OtfÃ™'93»){®ræjgfeÏS�™=”=OsæéÎ\çÌl˜8WCÉsÏq6 &ÀÃ?àâàêƒUÆ0æ«Õ9ÃøX°jí0æ«¦#¬Z:ŒP°ªvóƒÕ¸eMöBsP
+ãXÉ°X†eË°L†å2´ÊÐ¬9e+ƒ3Exp‡=˜—Åjj^s¿mà©×ÑàxéK	L=�9ŠÆÎEG“{Â˜‡“Ñ€SÈY� NCÐˆÌgŸ³€MÌBÄ±˜ýÂ	|ÄOä=YÂ= 4ÛM¬Åé€M­#¼Ê¦Ö“*ã»C
+.aÐÊ87Š3zFÐÝòd±I†³ƒ¡,Ìà("=9F`eÒ�~•Åù_f3äÀ
+¼�ÁlgÀN¡?´z%Že‹*vÕj=Ž]•ô$�ZQ&Ý’cÍëDBiŽÝ�­£¤Q[iÔ0¶‡¼Ã¸Àá¬iŽÐÂ‹ÈºXâÃS£ØÉ¯Ïdq©|)+=žQ\ÞSs¥§Ê?‚kÔ^|.‹›d•ŽìnÌâ‡¾5äÐ÷å;žî€&ûhô;dë™e®3¢n†äLîÙH—{Ð‹MÆYÆÙ.�˜B'¿Œ¯ÐÑzîý*)	ÄÍy×³Ü-m¢‹öãôqñ¸]%ïí"ÙÒ~.¢õw*mý¢`ß)¢ïÎÑ¯ð‚=­1ÚÕG¯âôj3í8�É–@3ú±Œ¾t"E?ÓEáÛ”÷¦÷8ác3àøÐM$ÑæPÝ‰û1�ÆÞKcï“»BNÍ÷³È
+Q°¤Æ®[iÉém¼·;lm†–ãh+“.È§Å§Å²ÑÁi1qzÀÁc1±y¨ˆ~4G�ÅéRZw=¾œ8]Aœ®¤W§«‰Ó5ÄéZâtqºá 8ýÐÁiÄ§p	Naáäp
+�ÅéFZré›‰Ónœ”tQŽŽÕ<!kÓ)hÙ~L¡Ž}=ž<.åŠ¬‚ìÉvžÞFÙ·³¾ÞQ$wz^î]®r——Ê].¬±rï¦Ü{(÷^W¹ºÊm-•Û*¬±r÷Rî”;ê*÷aW¹m¥rÛ„5Vîã”ûåîw•û~ìÈ}™¥ª’óÆ`Hj=³ºQGmÙü,~*HÔy5®+×+­ušÓVçÓÄ!êS¡¸Ã÷xŠ…úiV£gøú=KžãóðG>Ï³ô¿À*ô¢mï:mS¾øoÄ“ÌeS?#UfS?'å±©_�òÚÔ/I•ÛÔ¯HUØÔ¯IùxzUþ}Œ{¸_…õãÆ‡`Üûð©E7Äß|›û[¹y®ÜÝEæF9òbn=Ø’ÃE«üQïŽ+÷â™ëùR—Ÿ$¥Ï9ÓÄ_³½ýY	Špf‰ˆæYÑ,ž“ºèºqùø�¹nl¿ñQ×�mc6ÛÁx‰�¾L ÿÉrò
+ßËWù�¼†ñ¯ú›Ø…·x…þ…Gñ6›Ûsç;ø€-Z5ÞUóðžZ‚÷íÀuXr�'å¼ú¤ô«¿w2a*ìÒó<SF§±e?C`KD�ffñgÁÀ™[�¹Mæ‚Ùµ’'”\©ØÃ*v_ÊÃÿ·¼EÕ¯>ŸõøþÊÍ
+;¨ÊŽÊŽÊŽÊcUN¢ÊÉT9…*«¨²ú *_rT¾LLµÊ!¢#»š|ãÕ�(ÎâÍõ=^QmSå¢Ü¦*D½P]¡Bm˜!7BÍ ò™˜¡ŽÀÑjù=_YdD“cÄ|~½Å ‰o3hÚˆ~çå
+ˆú�§%‹wE}ÈëP­¡r‡jU5ÖÿøUSU³U
+ª±Hu ï ¯ú=ûüûÿPK
+m]5AÏ•?¥‰	;org/gvsig/gui/beans/coordDataInput/TestCoordDataInput.class½UmsSE~¶
+$�hÓ
+Š`4A° QL©C©¤´|a›»M/$÷†{oš‚/3øÁ�ú3üŒCƒ#3þÿ‰ÂñÙMHÛi�2~p2wÏîÙ³ç<ç5þýû2ø^`ÂóËÙòjàp­;Ù%%Ý [ò<ßž’¡Ì»µz˜�SA˜ÛÂŠBô>�«2[‘n9{sé�*‘Û-�4\Ù³jU¹a6çUkžË]Á	Bå*?Š=¢Á/ÏoE`Ï²/«J`  Ÿ®eƒ†C•×§5w’×�À¥Âk@Ý
+3ç¹¡th“jö^r\'¼,Ð�Ÿˆä<[YØ�qDÐg!ŠXºÐo¡§µHlÅÁ8†õƒ8ÞÐb‡-XØ§w#ÿ;Ä(ŽÑ×T>?>¯a%ãÅqEÚö¶
+œLv‹ó¤VtojE'úŒ]åJ[Éš³¦*1¼%-Ök™ü“G1Œ3wb8M²Ã;¼Ê»Ë™)åÇ�Ø¨pVê„Êž¶˜ôCŸšü?9Ú¹wqV;wŽ¥HtSªäTee^VêŠ#©»ZfçµÌ€29zP¢-!´n/
+ì/+“pVº¬Æ¡ÔøFˆ7
+ÉÂ%|¨+àr»<¶ÞGñ1+Œ9H§6¿o'gr|'¦…O�‹ã
+¦uÂ,:OX›Óº†ñ©@œ¼y'p–*dç5æa\8P É™zuIùs’wDTðJ:¾£Ïmf$\q�¯Ó?Û[�­©Ò7‘{;åAàlÉ«f‚º›Ñ·Ó-™ZE.g¸³½F�YhÑ‚ç=¼âÚÓJ×Þ-�ÁÍíu;Cº²¬C8ÇtÐãMâ”Ý¡Þt~ç±ÇmÜÙ2ŽŠ�ÙÕ(î2Êg»¶;^v–/C¾W²Ê°�/{p_	ŒÍxÉ@%kue«dIV—é'e%¹ó}�þE±Ä¼Õ4£âZ°5¤Tœ3¡ïÕƒëêZIÕBÇs£àÜ‹H¿Ì¼ôïUö ê Þú”wÝ¡·Ìì—^ÕÏ5ÇfcÓ‡
+WWMñ1Y£»È0öÅ7¼UÅJîí0n©€¥IVŒí²àØáŠ™§y!êº*W[½ØÑÙªäµÖ8{¼YwqÅks¼èÕý’švt¥Ü^~¦¦pœ¡Œ€Cœk—ÕüûêÒƒÚPNbC9‡I÷RŽc�k/OQF�þœ~�DºO4×1�îÃëJ¿ÄðâZÇ‘´XÇQžGÓÏ1Ð·I†z�Ù/0¦/žókâ”¦‰T"�x;‘IœÑkïif¤‰÷5ínb’ôHécWôQëÔ
+›¸¦�”þì™\àzÞ€î¥cÜ%ø1ôa’§pƒ¸�!¬à Œð�8„Ÿp7øÊj¹†Ü$íÁ,>o»]£ö.ÒÃ‰âoXüVáW|��M,¿D�.ž™·1þœ6’!ìá:JÎu� †“´uÊXJ¢[kÃ<4–b¨ J
+‡ø¹´Î‚…G«-ëÆ;@l¸¹×˜;m”
+µ.Û°õ®‚GF…¿»Š3»¨:*æL±#&&-�VjÍî˜ÝÄ“
+íq#{Ž‘�Øda¤ca¤cá›ÝA^Üä·Fþ»PK
+ÃL5y§Ïaá6org/gvsig/gui/beans/dataInput/DataInputContainer.class•W	x\Uþo¶I&¯é4é>ÝÒÍtÒfJ7°ÅBÓ4mÊ”Ö6ZhËëä%yíd&ÎLšQÄ…]„²kÔ‚´6S ˆÅ
+²ˆŠŠ
+îŠ¨¨ˆŠÀî{yy�Lég¾/÷žwî½çœÿ,÷žyü­Ð Æ*ÌM¥;¢»26Ç;ºÝ2“™h›™5[’Ý=ÙhÓµ<•ÌšvÒJ j�j43ÖòTWw*i%³+LØaî2£fo6jí"/ÚœŠ÷dbv&kiA¥
+ãóvœaí\(”öŠDÕBºÓ¡Ëzcæv+A¢Ó%J{[­ÝYÙáÌ�6+nw™\Q›ÊãfÚŒg­4Otk0
+#c¢xw4Ók';¢«×™I+±„Ž€¼e­†ËÁ²Ül[‰6…±ÇîñV¸¯¢]€:¢ªõ¶hÂä¦
+Ù4÷rCÙ©vÒÎ.U(©k™µ‘ÓòT›¥P\7k£�0&Q‚É*¬@j
+T:Ô4†CÍ00Ì¡Þc Ê¡fîPõB!ÔÕ5Pƒ‘B�d`F5ßÀŒj¡�q/ÔÉÄ)ÖÙfÂ¾À2ð^1§‹†Ç˜götm·Ò­æö„%àRq3±ÑLÛòí2K²�vFa^ìÿM-ñp¯Ý–k�—Í‰ƒ¾'ÕÃ¼ZD#&3È+»ªÃì6Ð„	Â[áð6jÞJ‡·JÁ oYÂîHv1Á¬vÎ`”¸àU×Å<eo�™4;h“Dd
+Î¬å™+»ÎÍ¡Ñu³
+e‘�÷c½lßÀ€šmÌ”Y>á^�,ñåÅÚí;¬xV«:åìÙ
+Ã¨jµ/ßÆç«Ì8›°YŽ�K«
+ï	`‹BˆæSƒ¬dŸmŠTÛ´
+ç±¦BøJTaò�ã¾e}8Ž69Ì¼Ñßü
+Ì-Ö[]K‹lê@§˜o3Ú½P+ŒŠÈfIØc¯LÛm�fS(“M3‰²™º‚HJ‚”vpq��n©‰$>àrvÈ8©Î¡`W½˜,#^Î0ÄœRpç^0p>(æHŽ0r5C¬:Iabì]¬&¨ê¡§*Ý1?ßZ­=€�q©À-såø¸SŽÍ£ê†Þ?âñOàr9÷IÚ547×¦mŽfÖN%ø4Sq}ËÊU­ÛZ×n‹­hneÔä³ï=r®¬Àgp•ÂÔ}›¦*¿±ó\+v^çÔ±Fè#VcO{»¼Ÿc¦å¯p#�²ËLôXkÛfÖ(¾¡~2pnb/n‘K™þº·)-žRŽ;èo³»ÛJ²0grñ–ce~}"é‹L­lÊYãƒSWPÿ]¸[ö~I.U¢–Bb¤«|nK¤ùy;í¬YìØE
+ù*î«À½ØÏ8Ò…�f|gG:Õ#–×Ôåï—
+EQÙi¯<!O–�öj»þs3Pïo²yŸft†÷°€Â×�*_—¶ˆ5mµ9U>Æ§Æ;¦U}ß”Â9"…sD”á“ÝËÿNyæu9Ê3ïÕþTZeÙ�Ì£ÃIõ�\Ùý4ð=ñÝV<Á;…çš:‚’ºÍúÅmO˜ô{¥ˆôÚƒ
+;ãíã[¼Y^ÂÌà²—�¬Úœd6�J¬HÊÓ×æ¨r?üO‹?uîr¿ã«Âí�ÓÏðsqÆ/˜bVÒ¹x\På—q,ÙÒ]¿R÷+åñ¤ÐI…¯òB.ÌãŽ»Àï�·mCª'·òóÑ-/â¥ þ€—y¯Ð›�¹ôVÚŽ7§Ò]æñî›Íþ„WÜŸPŽ¿0ÂT~{š¨X*C©Á�Ö&U&#8'zs|(�»J‡QÎz+a™ZÐ˜ãlà� þ-(ƒt	¹^wÖbà¿xSÿÇ2ŒwZñ�¾Zš9B}›çP¤Ø&ÇM²Ë©´uO·h,‰kI¾û©)ÕÃd	¨²¼[©À=âl•[I•U@UO›æ¹iB›U©YÆkzð¬Óµ9AZ±;nuë»]
+g.µ;Æ+ùo¢kwœmAìg¥Ws’¥Ù–¦oÌÐv®AD –Q/áãnpfOËßEÒÑêÙpçaî\åÎÃÝ™}¬ž«Ý™=¬žÙÁê™ý«žÙ½r¦&pœÈ¯çPÌ +rS"#p}?¦FB£û1=šÔ�™‘ÐÈ~ÔE"É>ˆ™måmýˆhæìHq?d˜Qý˜'ÃÉpJøVŒ‰„EBÞÙCX²_›s*Ç¥,$üé4~Mš‰y¨ÃÉ˜Åõz,Ãl4cÎ@ë°­\Ù„SÐ‰ÅH`	ÞÇÓ£”u ©Óé^Ò—»0÷º0£qÓ!,�ÕçÐ,CK}i±H}ëÄ¶V•Ã9‘Îãÿvwn€0=‡ƒ¶G´û—3hMÍ
+º¿™®fW�"Y­­^ˆ1¬ñÙÙèÚYN;‰Aìd7ìÚù:í,áœ¦¶yGaF’æ¦hn?Òõ%ýèq9kf“Ó#CÚ…tæ2G ÉÐ9Œ^òwKh(lN{d&Æã…š&¾ú>W#
+ì²ØÈèœÍd:‡©³‰iº™Ñ9—Q9ó±…QØJ\Û¸ÿ|"4yb;Ç8ýoi¼‰‹w8wg-}r1)þ¶¢.¡$6l]´ñ[Éyšµà(j	äRù˜¤9Õ—åð)!àê>+Ô í£QÊÑ¦í;��Lôc‘ÔöŽT×…ëq¹«qƒ.? ,Âã†Mõ÷ãÖC¸½úó9Ü™Ã—©p0ìA½µ—µ´ÛÖ°—~a|…k¼)ä‡«àlR-,:Š±„´•�öI±�srÈ	5ˆ¤Z{ï""¹˜ô%ÌªK}(j=ü]à*y†Ø}\ÊNÒuêe#qhçK%sI>°óŠE%‘‰¾R<Œ‡6
+¤ö!<œÃ#RÂ�8ªD3¾%)ân“xÌÖÜozc*lcKÙÏ†p%Í¼Šå{5Kó†ùZ¦ÄuÚìŽiž—âxT©PßÑ>
+1GISÆJ|ò_á1ï¦:‹ÄÓãÞô¶UE!`gZŠ›yÝÝâÓ8Ï€qZ­„éqÜíª˜§¿Y›ŠžŒF™æ÷ù"PîEà)<íž_ÊÝ¢¥LLlÈO™{hÏ½>[Ê<[Êð}Þ~¢û™Â²ææËÚOYN ëø¡++êâ*%®†}y ú} J=P?*xxnþá
+~ÖÚ1(fæ£8Â3�Å£nt~ìyÄveÍ�œçð\øF„„vÊç.T¹÷õóüTå\	�1`�CZÞqx’�ÍS>µ3<µ3ð‚ë¼_H
+J/�ÏLŠ_y—Ë2×ì
+9Ïgæ×ù^xžÇ^ð™Sá™S�ß¸WÉoñ;W\Ü7�¢þ("ïÄøˆkÚ!¼º†|TÿõEÎeò";Š—ˆÿeVí+>…Ó<…Óð7¼¦þÝS¸PK!¦ýyÀ_ó‰Pžå‰øþy"oWÄëZÄ¿<r�u«u
+áÿÇ�¿œä[¡àí™�ïÉÙ½¼veKNÝˆÊÈl6'¹r§ã§zx“y‹]ÔÛ˜@#§³K�£ŠÐ J°P•âtU†UªT¥¶~Šc—g}«k}9bª˜á+‚âÉ¹B
+?�+Þ–MZÄnl	ß„Šp(Ð‡õáPÅmˆ…C•wgzN‡fizN„CÑÛÐ-Öœm}˜íÐtWF‡C)M_Ø‡`x.º¥ÅûJöë5AFHM O&¢NM¢?&c±š‚fU‹õj*6©i8WÍôÁØâÁØB¿9-ä¸02ü’Ê¬©j©¿_sªªå.—håJ·»ÃTÈ_Ä*Êß'‘;ÃÕ|ŒP}}F�§¬F�ÐUSÄÕªF7ÊEj¤%ŠÒ-±óPK
+m]5zõ*9WÅ1org/gvsig/gui/beans/dataInput/TestDataInput.class•UëVUþ·@:B¸¶ZR*˜› •ª¥Z+	
+Òz›dÉÐd&f&IõA|×U‚KÖò|ßÅåw&!M
+šå�Ì9gŸ½¿ýíËÙùóïßÿGU`Á)eÙŠkñ[¶iiØnÂ4<#iË^bWºÞÃ³SB tdTŒDÞ°³‰Gé#™¡´[ ìK�ª—�i{‰U§PtlîtËõ¤-Kô
+:Iþr½‡%£ Æteú"áV-Bn®+éŠ@�â °¤ÿ7¿&·UÇö‹ŽhÛwÏ²-ï�îHt�P«Ž)5b(ˆk ]Õ0Pß�ŒœgÀå ®(ƒ .)µ«4¼¥vÓoì¶Ìp=ˆ\é¥¬Ÿ^o$™Œîi¸�YuwS`ñÿFÀƒˆø0ƒx'ˆyD˜7Ã4ÏeY`.¢w*ÅŠŠaA÷.“D �h‹]ÓbE³Ø¾m	Ë¢À`Vú<©«2 0‰¶âœÕDÃn+ï7×~À�Ø…¢	…ƒø)Læ4È|ïY®•ÎK•ª§Šå=|¬nÙC:�l—iYÚ5|•ÝÉù=£d©sCØãå,WàV‡–k{ì6Q<×Ä~7¨&.0<•”g-‰Ly%*­¨Î\Ê8…¸[¶ãê6îÇ‹yã0Î�éTÝø~}ÕçùÛ\—2ß�
+�ñVoO’[†mdU7Yf¢E�º‘‹|kÐ±ÄØn{Ñ©Ù"…vØ²Äv¯[Nb‡–í¥Q`þ#5€/±+0»í„].–¥)Ã£�¶ŒRØÈ‡Û83ÖÑ€øŠo¥¨y[ÃSEéÏ‚|aÃg>¯µYô,Çà[¦Õ(eY¨Ñ²ÊrÈ&ëvSÞu{Î!Û!sÖH–iJhößÍZÅïB0ÓA‡¹oo9ÉGj
+K—ã€¢~¾˜}ËôrþtJj8ÂsÕ¦¬Ô¯6¤•ÍyìºÔ!†«žXFÍ
+?¨Y2�R«ÇTÎ©2’`Ê)—2rÝò»¼­Uý&ãêâäŒä·KMBþt©9è¯tþÊ1Çµ�zœšü†xúË·ª±ŒÄ†ñó1Æb¡¥cLÄNqåà“Ç˜Š‰c\;Å�a}!öŠ*¯0QÃÛÔ™?-� JÊ¦b5ÜR
+×D
+ï)A
+Ë5ÜÝ÷/›†+êØSÃý—>±Où½ã“"�K&Õižo�b”§eŒâ3ŒaãHá2¾cmL¢‚)< ÕD=ê¬r�b±Æ°ŽÏ�©£´®Ž$Ã£_ é¿âÉÈ~
+_Ÿ¢‹�}£¿¤&˜²~â×9M —ßJf‰u“LæèuÞ÷F·BÃ÷0¸ªT§‘!Â$&y°g!qØð¾ìÇ	ˆ×÷ùîZ�Ô.�¬‘ë±ØÂjBì6Š=­*T¯N!4ë»bèºYƒû=èëÞfŽ—[<L7=L7=x�IÞí@²ìëWþPK
+–L5A.V¨,
+,org/gvsig/gui/beans/graphic/BoxesPanel.class�T[SSWþvâ” ÛÒ$XSï´U‰Ñ`TDÀ[á�Î¡'AÐ¾öÞék§—×þ€vFÂLíôÕ™>ô'uú­}ŽI|‘	{¯³ÖÞk}ßºìþûóoGPQv½Bªð¨ls]³S–é”SÏ\-ÚùÔEwÃ*OšŽUŠ@)t-›�Ì�TyÝv
+©‰@ß¤Ð¼n/VŠ
+*«ÐR´ìB‘Ž›WsÖ÷žÜö[çxnõ–nWÞu*ž[òOŸÍí„§bmTl'ïYfÙòRÓüÊ¾øçmÓv,�>�ÀUà¹eÌvìÊG„Ïf3
+áqwÑRhŠ'f´cOathFKBè1ñ¥^­hiŸ�¨/õØC¤»}é BTBØfÉ~bxK\†0¤Ð‘#¤ëk+–7m.”´+çæÍÒŒéÙò(Ã•¢]VˆïHz{H±[’™2×+©LÉ]Ï™�ÝµJïEG—B¤lU®ÌUzŽg…d#b:ì›fh2Xv­K)´Qç»PˆÅs5×¾îšé˜æUüÅ1av<è}*m¯XNÙv�NH:;¢8‰S~¤)æC¡¯Ágí´öwgÅ	uòô¤g-Yžg-Né4~èY¸Ö�~côÆ;5’�ó¸ §/²®æâ¢B¢!è¸»²ê:–S9çëJ&oÞXX¶ò
+#�Kr7ÃTH$Ý7®øÙÌÑ¥Z’öævÈ½t\(Ù‡yûšŸÞëÒ\ÌW;�7vø‰¼q�¸‰[nJÜgd9'sµ«Žõ(°6`5ç_œéä1…Óo
+&‚û-çç ÿXªx6�NÏû“eFñ~qk5ð‹{Fú$KP³EÔ:ÿ‹~št£Ï˜¥5«,
+œ¸›ö;@«ôØ¦
+”°"Î^{¤’3Ñ)wÍË[[Fª£>.G¤^b´0!¶pç¤S
+Éœë�S®÷h°sÂõ¾[ï­¤Å¶æÚÉ¯©oâ>šÜBwr�:¼‰½ÉÎƒ›èKªMì—%&ËY“11ˆu‡þÐ^ßæšd,°=Â8„=ÔôâÄð.ŸŽa®	Ú“HaÇq˜P¯cÒ6¬=ª9(-E4§�<;Æßh
+qŸ|†øÜ¹‘¦*Þ—åƒäH•ÐŸáä\ò)‘=EßNW1¶]õq’�ÇU—E˜¡ŽXgê8s3Ê,�@g¾§ˆú4çö28‹ÓØ{},öVÎÕUäˆ4$3 þ7@ì1üþç°·¿á£†0õÝ’h$—IÙ“ULßm‘_ð?©1™y�þŽè¯q:ÂºƒoA—Xízpû‰ö ²¬È¿«ä–ÃmÎö
+ÙÕ¹y·välÀíÊŽÜbÛ¸5oç“ƒ·¹Ý
+¸Å^Ãm'½p‹½Êm–ÜæˆržÜî’Û=r»OnÈí!¹}Bn&¹å_Ãížæ¦äñ	¸Ý¤_éÂA†;ð½$ñ`®3ÓÞƒ‡íá-äeh©i×�\"�ôÃÕ�ßEHÉ¸Ÿ
+ÜÑÉàsìkpÏ_“ ¡_
+°Á�1€ÏÕ,Ö¦¹ÊÚÈùÙ†A�
+T±¤ç!6Lû?~B}ADmâg�hNIÝ8þ²ñÕ‰ù‚ñ¾äìÅè_ã¾áð-gå;öÜ÷¸ƒ¦}¶6í³(Ó>[O»Â2>
+8Ìó‘Jõ7ÿaSIÃTáÞ	ËXh©ž�.ýþÄõgfêìÃ¯
+µî"†ù½ŠÏt­=}·ü?PK
+œL5Ñ°�:org/gvsig/gui/beans/graphic/DoubleSliderControlPanel.class�UÛSWÿâ*Q‹•â%	H¼ß ZQì‚h�ª½ØM²$«Ë.n6 Ô[½[{yiŸÚ™ö©�i´†N�é«3}éÔé÷�]AðÁÉÌ9ß~ç»ý~ç;_þùï¯¿tà[�½¶“MdÇó­#‘Ò5+ŸÈ:ÚXÎH'zìBÊÔ“¦‘Ñ�nÛrÛÔ,ÝB¬½¢�k×ù	ÃÊ&NûúJ�ª	#ãæDŸÀŠœnds.)MU¡½N-óRµ”nv’�yÎ³«õS«FÞÕ-Ý8 ¾©BÓ·Ë'N–;rÐ1?è¢¤²T:¯ójZÑeX†{D +Ú×÷–ÙbÃ�n;£TFcÃ
+ÂXBu
+ª°¢hPô¤wT£†¥
+BžÔ¤`%–6*X…Õ,mVPëIï
+„¸FC3�)]Á^�­Ä—jXú@a4¥;CÝ]‹j§5sXsþö•7gäö¿Ýr·MT­cÚ„›è5í	U›´nm!´£N ˜×ÝSYmŒòDû||´S@¡£c¦‘µFuËU°Û;Øãù“�‚}žn¿@
+é¼Ø‘¨ZÊééú5KËJªÄ!&à°Àê’U·mÚN]T!š«åg�
+Žàh
+ÞÃû�[â¸íæ^-íÚÎdÇÉ7íèš«3»Þ¡@Gtq¼¾XYc¥¤¡Œ’õàDÝèõ€Í…Ù}ƒc;…>ÆvÚa2_�Aüå
+Û
+B¥Æ¥>õzl „~œñØLRk¬_PeÉKÆ=‹s7IàÈzÐÑGtÇÑ3IÙQç½Cêâê,z£![êå(¸€‹l}‰š]ËdbeÔŒŽÙÝv§§35ò<“º¢§]YÆÇø„}?%V8“|¢
+>ó"jûÞê‘žëš(ÔêmÑ¥&ÍR:.JÇHdé��”\ ^]¢ï;�>&ˆ«!˜üÄP5,ïJ†ôë%º€‰¤ë�“L:†kìB=QyîD�×kÎ‚À*òíµ=ëØ‹ø]÷Zë±ÿ®³ÿ$/Ã<ló"oz€¥[¼Ïaº£~»�×ç‡jË‚€ú8]V¢Ì@†ÿw9ò=êƒ¹ý¶KÝ4fûÒaÊÍd°xÈÁ	¬œ'x=Õãêù
+¾ô ?%þ“vÁIë½�­æåFR§EuL€þÈ‚´Ó”%©‚g¬ÜiÂÊ=äï4]åN³Uîµr€èÁZ×Ò×´ïH|õñ5¢ýÖÇÃ�/Ð/á¥™—M¼´ðÒ�°M›ìàƒYlûCÆßNën™³�bn¡[Ñ€mˆÐÉfDé+†8v AÃr/­‡°“ØE' ½¬BZ@JŒNH‰ñUH‰U’L~ýÿ’ŸÙ/Ñ~q;Ô¶Ê"vñ²——ñ¶":ãÓ8ø'‹ø þýã3`�³,bèuÕ‡qõ‘(â2))ÌÒ"dÍEä>Hä"¢SQ�X�4á�’æ,Í«$†1„Ë4s,\’€¼²}ÀÕÈÂÀUÁsÁ'Z}pÏ(kË+üRŽ±ª„ñ%LÒ�òUQykí"ò,Lc¼ˆ)–a¸6Ü Ñ}Nö²¯ç¥ÀÄÐ
+ÞçhLUeÂuÒô&ë=]¸®ˆÛþg31r‡wf¥ˆûóâc¶x^"§—zHÑ
+¦©û2¨£©Óˆl$¸1äˆ<]{W	´	
+£˜$Š1ßÑ°ø	×ðò{æV‹ðÄ'ìB‰°->aÏ©ŒÖWøµDX¸©¼+JŒñ…Fæ‹Lã+�±ÈrŒµrdŸ±Öek-gŒ?#>c‘yÆ"óŒµ.fì1v“0ÞB=ncî`Í¦8îbîÑ›¹OÍõ€é!qûSÄ×ú}O3åg<ÅïøzcÏKŒýè3&èœó}ó?PK
+åk!5Ðô¯Q’	3org/gvsig/gui/beans/graphic/GraphicChartPanel.class•Xi@T×þ.300NÜ1EÁ­.Ã ŒÚÆF‰&Šc%BPÔ¨�™'<fð1€˜“hcº£5¶YcLkkl›466]Ó}5Ý›¶é¾·¿k¿{ïcÙjðÞ½çžwîY¾óÝ;¼ñŸ—/(Å¿æ'ì¦`SG›Åg»l4�x[°É6Z›­H°R¿Ë›
+;YcÄÍ˜B`üN£ÃØlë´âMÁ5ŽÜ%pSÕêPeUÝ¶êë+CkDˆ²òD¼-iÄ“õF¬Ýtq×lß†Ðªº*GOÊÜÙ¹‰@aX:´s‡mšA%
+®©àX¹P&0j§Ú¯|8å~W©œÓfÚ–Ù&P´9C1j$�àž®àÆ†ZµLE�”µ™´8gÅòD,fF’V"ÎO²;­h²™{4›VS3¿Ì¹ÍŠ[Éå\ñ‡BÅõîòDÔpù‹ë}ÈÇ;¼p£À‡›0:Y˜âÃŒ•£"Æa¼Móaräh†õè�“‡wÉƒÙ³nÄeæzáG�r(ð‡eƒ1ƒE,O´´¶Ñ3Ë´³ó¼˜ƒùãúuBñ¤ÙdÚš?¤õz±‹¤�
+ÌÍ´¹¶½¥Ñ´ËKä—ïÆ-r‡Åyü²Ö)Ó4ÿHe’ßÝŠ%2Š¥BÄ6�¤Æ…·Éôfa™€WVÁ2bÖ^Ó‡ÛµøŽër8(¬Èm2“¨¦ú‹GÂ «°Ú‹rTaµ_Ïƒ*âŠVkb	-Âh+W‚r™6×à½^„˜¨ft&ƒ+�6+R›´»LÖÊ¬Wè¬×x±w²†ÃZô V`,½®=³â¦¶BãN…¤y-Si½õ^ÔaƒÀèô2¡“`µE‹ÑdÆ“-†¯_¦ã›±%›p·À˜þíj+Î 'dì¦Dj³mØ.7£¹1aêjTÔIð‘ZÂ‰ˆ«7lKÎ¡;ÙlÁðÿEU²­ã}ÈÊ±ÔˆœdÑ^«*É”
+BßÓžWÄ�a£+ÑÎ¬Æ¼h‘=äa¬õMF«	Ù-hÕ²*%³µŒûæQ¦¿å~ÙÐ²j#ÎÌêŽhG‡„j§C¯Jk•ÕbÆÛTóvÉºOòb/îÑ;Õà7gØLk+{ûpŸ´·_Ã Æ6w˜¶mFkU_< ì9”`?(Uß'PìÏ¬~Kk"NPdö÷ºÆ�ä§¿É¯f?îH§O ?<DV¹É(ø$×}hê=
+ÿGd÷‘�ýòÁ(ÜD3ôa�ÅãìŒÌ#jeÂŽšv…I&ì.N0%š<$üô¢@© ¶CÅáL+�JÑ1FŸ?ŠÇ½øžÐEî33Õ?ÂGÒý§ð1éôÓ×Ñöø­#TÙoš¶Ÿ!9Õ¯^_*_¾þ|þ+º÷,Nçážã!9d}ÓéøY^§ccƒLˆÃ‚Odr9©‚Ñ”Ý�d(_¥�×²s~Ó¦Mÿƒ�?‰Oyqg™{2ìÆÍ±Ó†ãX­ÀïÎáÓ’e?ÃfAÑƒx¾Ððz3Î²it6m;«:ÄPÒléÓçNÝxÉ‹qžG#»Î‡”†f¯@àÆíxp‘Œ,›]Ñ˜Ãªý¡¡hõ>7
+/ã^@šh<îÃçõž¯²?yùòá‹Zð%
+"]5¾¢_å7�1#²Ë‡×µä
+A5ì]•ª¯¾¦…_'�v™16®ßÔ¢oQ”°Y~ZÿŽ}—‡Ýˆe`nÒZ³ÓAZ�óæÐæÁH’w¨1¶Ù’è0WÄb:>\•Gºo’m³UFïÃ�¥¬?¡3òšIâuÑ&£Š-r6aó\µÞ.
+1zS]QÛ¯r¤WÒ	‰_Y�¼ùq©ÂÚÿoËËÍo¯k½Ášüž…`*äÑ¾JÖð�ø“ÀŸI›‘�7ÇÉàiÆÕÄ/xP^?½µ‰v;bVXò œ4è,•ac¹Õ
+yñ›Œlä€¹ã,KÍó2æ’²IÅjÌkªzó’ªÞ¼¢ª7/¨ê=Q½sù-Ï%>oÄ!Ú‘Ò+�^LˆÊÇTù˜'æõ`f`Nô`V`Šr”³<Pô
+æHµKð7ô¢˜Ê®Åî3¨œÇÔ|÷%Ìi_Ò‹ÒZ×âì3˜«¥‹.aAC~v/Þ¥ùn÷öfÎRxÏÁl‘Ÿ=NàÔµ«Ô�îè§PvÐ-òÝE§®�¥{Ëù·‚K…)T¦P½Ô]À�Ö5øz±>…�înlM¡ñEj„Ï­2@knþjÊC�ÉYÀT,djo‘÷X”ðj:K8[Š;x­À2Ôc9¶ðº�ï‡)=AùIâô4V“¼*ñªð*éèuÞþ¢´^¥Êp&vj4AGŽdº³¸ÃShâÈE+[ÐÌ‘
+ôÆâ(›ö&a'vQ–%o¾º(<¢²9*/¡…é�‡K\)ì–�d $…=LûÞfb&ÿfõâÞî,:¤ð�Háýý)™Éêwò¹žh©%>ê¸á]0ðeØÀlTaMÒÛ;aåÒµàƒtNÈ»…ãä“N wË’¼†:zP.=8Ü‹G%Œ(íóÉ•^åF•_G‡]9&Wºñ˜ûžLá¤œ½�v}²‚é6æ{;Ý3XËFÖ B‡Må²O;ã¸œ%^8Ÿ‹<Îé€BÂ«w¹¹Éó=8,Ná³a¦µÇÕ�qÙ9!œ¾�ždwãËéIN7^KO<Ýx#=ÉíÆ7Ò“±Ô{¬FÅ­ý3j~»–×�ï©Y¥êÙ£Àn†`m¬A’}ÞÎ0;X¹N‚Ùfï&Èö¢÷ ÷Òû²ûPƒýLÄýÖØƒñà8ëö,GýÕ=í¤ª‡¨ù}UÝà‡Nuÿªà	Ž	KáG�’Ëºå]ËÏ°ÖlÐ"ÙåóŠé6góÏVRÝån§ËKŠå»K�&—½LÁåS×Þìëò"Õä.QTBé9ÝÜ?íÏB)c³è��ÓŽ0'�b6Ž²u�±øG™¥ãÔ;‚µ�mU
+¯üN·d?ÃÏ8’ø~IËãyä½¥ZÒÏ,Õ’¿Â¯�ØçŠäÞ%®egP,.�¾.*Jáw%|•Já/ÊëBÍÛ³D¡àê ¦*~xš.�$U?ƒ"¾ýœ/dúoÅsÊá€Þ,íðÇá,²Ä[ŠC<ä,K9,X˜>–X¡JŒé+ÑÀÍGCþ£æ,?žãsm2ÆÙLào}'ÊQúÕýD¯HeJaÃ8“}=<Å-Ø×²c3qž™èa&RÜ²³p�Y¸ˆ0/AÒ¹éÚ�t&ªñw‡dªñ•	�*‹ÿú/PK
+ck5(¦É-`2org/gvsig/gui/beans/graphic/GraphicContainer.class¥VÛwTWÿíaÂpH
+„»B“IÂ@¸ÚD(¹'2i ÄŠ‡Ìarèd&Îœ!¡jÕb½WhÕj±-µÞZZJ)ÍDÛz«¬åZ>öÑG}óðÅåï;gÏd†˜Y9{ïoßï»ï½ÿúŸ÷>°
+QhJ¥ã¡øÙŒÍoÖ�²Ìd&O›cöh¨Û;RIÇ´“VÚ¥°©œD»™±:Rã©¤•tüð)Ô„{»zFNöè÷*¨°Âbe3é™‰¬å£ªw…»žìèëè‹(,×„Î¾GÛ#]ÑH¸³k@ÁÐÔö¾ã]Q]¯P9iÇœ1……c–s89Óo&­„Â‘3æYs*”™´“ñÐ—Úªà÷ö[ª&º-úd&Ü©ç©B(r73ÓNqÉDg*{*aEvÌJÓ‚‰öÔ”•Q¨ŸÊeÊcÔhjÄÎ8b”ÂÞy…š/“·(/H¬@f,5™7F� wm£	;i;û|õ
+C
+:R1ËÀ",\„
+l ú³Û›?e¥Mº¢°,’5CfÚ–µ&.lÓ0•õápÃ��O`]°Å@ÀÃzÈÀoÖ` Ú›5¨A­Ìš
+,õf!Ë¼ÙËñ€ÌvXáÑvX‰e¶×À*¬–Ù§¬A�ÌèâîûŠ�ŸVØ1VJ+¾Õsó@ûñc+°Í„ýã×.ÞW ƒuÆl&|Û½A3 Œã	ÉÈr©Õ�9é„%R“ó\*Ë.:@[X³Ë97'¨¨Þ�ûg‘­okˆ[ú<Z¿Â"Ò<…ºúHÚ£õ˜I3®@T<TX·œþB?¬¬o(×=†pLŽ³’ÌXL¡¡¾Ðþ­-aR²ïÔkÔq•�ÀˆÈ~–n'´u+"eüf\ê
+äî´k7ãî©‘fØœŒŸÀ”°TÆ¹yÎÀ¨Ô™	šSS�'òžfˆä|¹Ž‡Mlw_ai¤D„N>Ž„à�3’¢Á=a¤<-Zï”�´G!Ê²ÛƒåG6€³bæÊRgòé�
+à¶W!ùShpoç��/áËß'�A®Àâ“ÉÀ×¼ì=%ŽqSSÁÿ¡«è 2ðu<-ß`ÉÆoKÍ.…u‘yR×ZVj'ãw;U¡ùžàÇ÷$ÁŸà|_a×|ÂÅQ‘vL§ã¢BËå>Ï^¯ÆžàYü@aëÝÕ�ð¼Ø\Ëú+4Q”GŒ.,7š�ö¸•ÌØ©¤/p)ÏßŸ¶N[é´óø,êÇ‚„k×‹xI÷²�ŸxAzEêäeQý
+¯‰Iþó­f]¸¦¹×sFœ†‘N¿Â¯…ó5…UR9‰l¦=ë8©¤Ž^Ä:íˆò’SÃãiõ`oam»CÍ9Ö”c'GÓŸéÐ WáüjîÜ4ð&®Š9o)ì»_?ÞæÑ îŽ›ïà�®ã†ç`ÄÊ”sp‘Ën%SÈy3
+«ËEdÀ{�ÔÌ9îR¼ç™>ëÉÝ¦HË-çžØ}+uMi€…å�m%bŒq•ˆÁÀïñ¡Øöi¬[p<7ÑT6=j²åN_Qz-m
+ØÄZYÀ'V5oÝJ,cÅUªxÓóÝàÎî¸‹‹ö
+þ/ÑûÕzäíïŽKõ¸L�¼÷Ýq…^óÎwGÞøîÈûžc-u®Å:jXÏU�£ü-¬=p¯»|›ø•ÚêiëVlv© 'Ï-÷1½‘'ãHp[ƒµ«§Q\ª.N#\ŠN£)¨¦±M>ÛåÓ"Ÿ]òÙ#Ÿ}òy8¸`mÁ:‘Y+³Ø?L¸ƒ²5ƒÎ9cÚ]‡Pe
+k¢CÍt`
+á!l'e-Øƒ�hÅ^<Â_â%‡ÐÁ›²Óub£g2÷¹N�¸¡UîL‚[áºØ­]ü7õIÊìÿÛÅuü¬»„ª O0îÂá^æ|•Ü½Ã:ÕÃçJ/}ˆ¢Çq1¾HÆ¸ÚìfÚu¦à¼]pÞÖÎËLjÄÇy{¡Blw
+lšExxG"�¾zås4Ø˜Ã£Aš>¬rxlÎü5n¡±ÐŽQÉqè0Kñã?âš²ÒÔ¦T±<?‡“TW!ï!O­êfˆÁ7‚ï¢å&®ÌÂ¤öS‘ÆÊiX�³ˆWú|¾œ™F²‘qý‚fèibÈ­¦[šÈàh†Þf.¬fað„æ0gÉ1)¹¤ÒYœãê‰¾(«`_iÎá«œ·½€—4ƒóMIæßlÔó·�p;r”®ÄØµW§Y`qöÕ³hc7Î°4gÞÌÖ8ÝO’+Eê²|�Gàð|ËâU^/oaª(—7tkpßÂ·¸íxßá¬‚h�á»œùHåCFçrDg¼�fîº‰�ôø™aÎƒþ¿Mµëe¨�Íà‚”2yæ\©v{ç)ºrž‡ÀÓ®†¦Í¨�÷�VtL+ÚB�=7±–Šž�STÏÿ‡gðCiî—*¹@%Y,Ï)ÙRPÂ“Vr”§“ìm È¾›XI%Ïk%µëgðciBî”Â¿Hø—X£—‹à7hx%·¹†¿Jxá�ÞÒ±—†ëÖÎà§9\–Š¨óÇÖæ£–ÃÏ¼âX%…árzÞºì¯J…Ô‰e9ü|®U6³ü�×¨êuvú¶É›ÌîUv÷5t�ôNÑÑ-to¿Ð!Žâ—úèâ£B›ÞÂQöªDi¯Ï…À“y¿Èõª‚ëWð†–ß­å{ò×rx·â£"ˆÅˆéy ~S
+ñ·²¿½ÄïÊXñqYˆ÷ç�¸ÍŠ¿—…øÞâ�¥ÿ(ñ§;A\+ñ¯²v¹>ú/PK
+N5dbD	ó
+-org/gvsig/gui/beans/graphic/TestGraphic.class•TkWZGÝƒ$WðF_±1Š´I€XnI_š¤­ÕhJŒ
+kÒ×\\Ñöõsº"®6kõô÷ôsW÷\(’ÚÅâž™3ç±Ï9{æ�¿~û@Zàš[/9¥fCó{¨�¼’µ†SªËƒ².8;ªáÝm¯-�È¾lJ§"k%çA~_<C1_+�<G5UÍsVÝê�[ã*£žª©º…sâˆÿMþËçžÔeU	LfŒë±Ó8ÒyoÝh—¬N~�tæUð:ÐVÝš'5óÐõüŠ®iï¶ÀP"™¯Ô�§ÝZC`¹_,Oæ+ÊQ]3gËõ6BËŠþIuÝ-ŒWÝ¢²1Š±0‚˜´aa8„¦m„Ú«‹Ñ—K²ðZ—ŒC#Æì²
+ÌjA`éÿ”ha‘E&67%sÉëaÄñ;)‹Å—ú.p%‘4œeè*®„	�Ñ’òL6ZlËg4�HžÅ8kµ�®Ÿ¥NÉ/ž[Hs%�Jôúw²/'û)m¼…·ÃpðIÐP^–# [X®y7MÂ÷8VžåtCstœJÂïÅøÐœ~$0–!‚­Ãj^Õw¤oÍ¸YÉÉº6ûŽ2è•5Y‘|%ÅznÙ¬²8Ó’Ç™³›�õê5Ûæ<'_¸$ÙÙãª…UöÂ=ô¦Ú~Úu¶éäÑUÉ*Ë^ÃzŸá.-:«¹1¹à³På0xs&úøZøœ­:0Š
+‘M%ú³q[adð€%Èz‰UOô©€�6·A
+Ô±À­¾�ù�÷…ÁÆ
+ÿÌuC‹ŠèâÿÎÆµ¦O
+^YÁÑ,°#M»Áï»ME–EºŠ‡ªA$T
+“Ê»ºè•ý×`ÓÆ×øÆPä[��6”.•=ß·µ,;Ò0Üï„1Ü³Q0œ‹£Ø›1[v�XM8ëÖj]2Ezˆ’6à±H6ÁËÊoÀ¼|qæ�ð%_ò <O;¾*ÜG¸3^QLpõ«ü�:ÅTj\üy‚Š¥Ì¦žãÒÞ)æN0Ÿ'ˆqßK=ÃLÄ.RÌFæ‹C§¸bNžÑ¤…¤‘-¼IkáÝ]_M{cÜÂûflaù©k…ßAã„s�pFq™ã\­`’T�F3Èã"ö1‹[´´ÛPqw(CøŸPcÊ(1b€rê9ÄüiægØ™_°½×ÂöSßm„¿h'q”)Át#˜gÐ¦[ôÄ0d‚à<¤æ.ËT‚6ÃØÁ—\	ä°ÛIzÓ/gµ›yÕ6Ý>ì 5«¯°ç‡x48Äõ!wCìøÓæLÛÛø®=!®òRê,zØ·M“�NO†¹n†¹n†'ƒAÞ²äÛ—ÿPK
+¼j5ÕÙ1
+;org/gvsig/gui/beans/graphic/listeners/GraphicListener.class•TmWW~n“¬ ­B¬´6/ÀÖ¤¥R@ŒM0¢M•¶ÖM\’¥›]Ïî‚´ÿ¤ ß{Ž¦çôCû½?ª§3w—„Ä�È‡½wfîì3ïóïý
+`/l§®Ö÷]ƒÎ=C­êšåªuG{Õ0jªi¸žnéŽ«nø’b ˆAœÙÕö5ÕÔ¬ºú°º«×¼ÂSRª½öT}_·<µdï¹zç¿�T�ÆJÍ3l«£¸Ü¤dwëÅÉ…ÀÓUÛò4ƒ¤óÅAmôè/	Dšö¾. ¶‰4õO`¼ÈæT÷µA±=(jUÝ$ÅÇ¨7è9zÛ°oYàjæd¶²2±j¿$káL¶¢àÎ'ÁI(q„pQÁiŒ2õ‘‚1œajJÁYŸš+Òæ^³ª;O´ªIHçŠvM3+šc0#^Ãpúwlu)V¥É_s´z]§.™ÎûUd�IÖÄ±Ï1\ˆ×uï±½çÔÈ·ñL¶ØÛ9K
+2È&ðrÑ»Ù�aV I ,wiÂ°Ñ²mX25�9|.0ÚýÃ5*ñ}7°ÇuÜ¤<äSY
+�[ìÁ—¤ô‹‚Û¾Ò²ëµ;’)¸v_á.›Z˜=IÄ°êGR^¸�²ïÕG
+ÍñÊšE½¨`÷XÃ†ÀÜ‰~�¡ pŠÌKÖ·½»ãèºZc¡Úeèx€%…j79 
+BµW4ÿƒð«ìè®Ë�uZ²[º©k’�s®¹âÔ½ùL¿9ì'ãL4ý±Ï0	žPC3�_Éé1M.˜²îìØN“ŸÓï´³¿ƒ:ý<5H�¢ðxÎ(0KŽÇ•nOý?ä(–hÚÍìÌ{èæhÕ4j?3ºÏ®[žî0›ôÙÃ“‘úcuÏà±ïäy¶†�iuDF§Àë&ÄÛ†öˆw�¼iÓÈû¬¼Ðtá:Ç‰Û%yˆîéÜŸø0'Þb"~‹I¦R|¤sy’ý!ÿ¿ÄzˆÑ9Gv2ˆ#Kr„•ÇEÎTò¸à#â2fI%¥U�Oði`÷ò8L·‘{ƒÉßð,ßBžÈÔï˜á‹¿®¾Á"=,½h³Ë-|¨¦}Õ4Ýªé¶*1-Üoa³ÔÂ5:¯S"nuw°ˆq
+¢8„K¾sí<D™\oÐ÷[„$ð¸Ìr�Äh.B¹ëXJHé]Œ`åHb¢mÔh€*ð¤V¸Öa­Áú•ëépI.b*7KåìŽÊ§ûXï€NØÉ6hRöŽ�w‡ý]ÛÕ‰ˆhT*oñP´ÁDàaOq>€ÈKyˆ-	¡ø�„À3l³]9Öö÷2;?P�‡@lñ\Bü4<Ïf@àÅpˆêm8ÄÎˆªÔ¯ýPK
+»L5 —9/E4org/gvsig/gui/beans/openFile/OpenFileContainer.class­Vkxå~'›d“í!é^B–‹ˆIB`é†D’ƒ:ÉN663qwrC«µ­¥¢om±ö"UÄÞ,^vC¥µ­ØRíý~ýÙßýÕþëÓ§ï™™½$›òØ>Mž�9s¾ïœï¼ç¼çû¾wÿõÆ›Zð-V:MNf>'Œè ®™™¨5®›�FJ�v{B»eÚšaêi?k²iÓ2œ66n™ºiûáSP5%ß
+”åWöOµMØ¶eÊhŸ>mS3’×øGóÒ²ø¨6©MG3S†™ŒîwÕ­´±% 
+sÇÅQ§¡§œR“22¶ÎHìˆ_[~b¦€2îiè&0h¥zÚ
+±ÞY.šÒ¸X¯�æšœ±ØÈ¸qõc0¥çaÕ·¦aïTà†úT¶[	]Å2, 
+*ªP]‹
+¬Táw¥U*j\iMõ®¿ÿñÖ©»B
+ìÒì?ÖüpÊ²«2ØêP±×p6¨¨uíƒ*®Vñ>¨"5«¸
+‹DjQ±u"m¢A\ƒ-*– ^t7¨¸KEºQÁöÿ1m~Ü¤`kðÊY/cTk¨_ts; ‰—üZÊ8Æ¼Ý*y«ÓHêöþ<=®	†$ˆŠÛ°[ÚÔft;?¿!¸àtY¸{dáNÖ3ÎhLŒ
+²êšSÏú¸5¤¥úµ´!ßž²Ò12
+6ý·(I�`,vXHQu(ÖÑ·�Š}{b{÷õ)htª­MÙÑ½i#Ñ¦%i–±Ó4´3~tÐƒ®<l¤R*J�{ÐK?IÎžVñAWÓïifTÜájªo[çOO7’#ö4iJòÜ�{dÂÂ.¬3™2®§q2C�ÅÜÂ0ˆ£5œqKâóL˜÷a$Åßˆ‚åó±Äµk‚ÂhG†ÆÕx°èËÕui¦–ôH1SŠi±…YÆ˜nfËôã^â
+æ£Ì�†ì&ôÞKîIâåVŽßIL‰_¦¢V
+v„yÕkpŒ&Åš›o2£]z&Ãh˜“ûé™t·ƒ
+Áòý T®RñàÃøˆ‚¥üks¶–NmÈ¶Ò3~|”ø†Òºfë}†�Òî°‚{ç²ÖÝ�<ãÖòåb±"ÞNÒ®µøÙn¥¬tkh!w¥K2â�ãá>†OxýãE²æJ‘HF?‰G$£'¸íi	r%,]Ü;JcîÕ‡lÇö1|JlOrë–»üÊù^ÜâU<Ž'ÄâIW'Ëúe³‚Õñ+ô±¾ÜŠ®Ø!üøl§…´uÌFOZÖÓi=ÑëìMŸ�Æ³lbÞ=d“^ñÂÙ³®$ú$ÑGçÎp __JfD:Ã$hƒi#ÝÒÒRƒç]:»¤[¶éèã,^ËsÜ"9·pUËèWðUýš×—åéôã®åSö·„ŠoŠÉË8/�y<[½ëoÃÎŸ‚«
+¬p£ª´�—¤§PgI�Ô‡™Q¦øq{G¶CÎô
+5¬¨hXŽ¥ÁÿÐ<oÊêßUÀòû
+ÔR3?.I×úÛø½–ØÏ0Ác~\&Y­ü]B{èÙ¦]£ÿwðn-~„³9NØZ“Õ¤¥‡FŒI«É´š&/�I	«?õ˜1ÏÞ�ŸÕ¸(R¦Š_J$¿À¯ò“�HöLéã¶³Uý†Áp—á¹>¼OŸ*Ä8×LÃ^k"=¤»©[^v¨´ˆÖ2×•Üã%ç¼^Pª�Ë…ó®ñÞµÞ;à½y=pÞ¼8o^
+œ7¯Î›—HÞ¹ºðy
+¿.Ñ;‹=<‹á%Êß³h×mÏbux	Îfqmx)šÂ¯£ñøÑxÿÉ,BáºåYDÂJå•ÇæpýÖ,¶…+³Ø¾ˆôv‹¨g±‹ÆònÏaï+Nûø¼Ù	q!^ÇðÖ£×#„
+ˆ"ˆ(í@;ÑÌ“|#bØÌÓp°	ŽÆh©ºAc?>à„Ë÷ý“€$qöÿÐjy4ŠŸUâæ½àë$*ðâòÞðíÆ´¡í<ã;ˆqFè!ƒ½Ö°‹ÇÃ*R®8ÒJŽ$ÅõQ¾5_Z¥Ž„ñqìÉ‹è˜ÅíñHU}B:ñeq8²wfñ¡ÈEøª|¾YèYÞä®fGíóU¹êf±�Ç¡æÅ4bŽrZ*‡qŠéæ¹nË,&r˜	+õ÷]ÀC>Ÿ¢\Àñ
+Kvšs8çðT„Âü< )»IÛõvÆ~k˜��èÃ6V¾ýÌÃ!ÎºƒÚÜƒÃ0q'Ä]<£îÆ8âä©ÉEëå©'ð4>Í\lãœÏPªà?¯’O^óˆo°~/;ˆNÑ3Âjß×òqp}^´RëžóDg0‡/ËgýÄœÃKÞÐö¾.h]ñÑž/€ÞÀÎ’,Ï¤Ä(©}”Hä!š$Áx	Ñ�ÑyLzž¦½ŒõÓyô2ºàexUÌUŸÁ*ðp„
+8^;‡u%�Ç—âu§Š3d¸íJgw™ájÇí}X�ûÙŒ°P•DØ_ˆ0‡½w:)ªÃöR±èGûpÂñ°Ü�U x5f¹\`¸¾ÞñÈl¹�è6tY'çAñ·ÚÁò­|*X‹…SQX(Å ×‘QÀI}ŠíãXE¦Eñnd!ºÉ/“'r‘…VŒ…7¼nµpÑéVßÆw<Xs¶Ì�(q‰$‡ïÕ¿uk.âíï{?ŒŸƒÚõ*~Rÿ³~9OÓE\¦	¿�S¡çøu†#Ïsäžg¹Í¼TRÄ©‚úßá÷ô²–�þ€?:!ýÉùó¿PK
+mm
+5RŸ@Ý;¥/org/gvsig/gui/beans/openFile/TestOpenFile.class•TSSG=�×WMøiI‹ b�Gimµ±ÚA¢�FüëA–dxÏÉ{„N¿UgJœ©�~€~(§g71‰Õšñ�}»÷îÝsÏ={÷ýóæÏ¿,bG Ô«Nµ*~Ï”s =?t‚—Ò_U'ÒÙ‘a´Ù6Éc¯á9'ž_u6Žåa”À€ÀUãõÎ#G6¤9Åàôeàsåª0’¾¬'0( Î9J5�Á£ºw*Æ]}ôW'<W„|²ª½�¸f °ä~”Ý[fÅÀ�<Å4<9tOù*º/0�Íí¨T¤�K¸l!Ž”�†GÃ˜�‘ÖjB`ô}	\±0©XøL‡}iÃÆçz•Xü4Z	|ma)ÊÊ¨#NYýF³¥Rn×ÆfuÐ5jâU*ï)(p#ëö“¹ �n`NÝ¸TÕÙ|nE[žÏ\él®‹ÑUÍFy]î|[‹w÷¸E9IJ Ÿí=ßÎ^È}ÈiÃÁ’Å&ûF Á²uµ6¾ÕUNâ;‹¾]ªƒ‹g÷5õïñƒÞ½#pÙeæ�³ÓYßñLÈ¨z'»^]i»íŒG5
+Ì¼Oz»X7×)ËÒb¼p»Ý\Žê¼}
+hñŠySq¯^%òØb(F‘ãáÛb×T¥¢ûuöÿ¯h¥a”bK
+òžîÇ»ë€¯
+Ié“Ç¶©%]Ã¼ß=U‰j¦ÛK6žà©ÖÏáÖšTÕZdc£åÝì-×‚s¶ÊÁYýPjaR½:-j‚lÊŸ
+_¿1ývøÛˆé—cf>
+3óapbß¿IZa€+à8ÿ
+£ù”xs�ñ|rÿéükL>…/.0•øŠö4í«zù‡ãé&®³‰,ç©&´ÙÄòž6»Q·µoâîï†Ë�æÇ¦y%ÉÙFŠÜ2ä5ÃÕFQÀŠÇ6&à!
+Ee
+Œ¶[lq?qÁ}<hWòQcÚ÷1òüÙí&²ÌÆåÈ�t+�Gr&@‘p¼r<ÂJî¶9
+ˆ.Ì�É=Ó!Ú<ôj�
+ÄZˆ¹>¥ÄŽ¹P Ó–œú®'­Jkµ•\®PþÿÖ™c¥ó=2�™N†gýI.õ!¹mâËÿPK
+°L5m¢›¯r=org/gvsig/gui/beans/openFile/listeners/OpenFileListener.class•UkOG=Æ6Ë’^!š�¶`—…�4%PÒ@ �:†×-}jmf£e­×�ßÒÐÏ­Ô©‘òú£ªž™Ý`B5²43{çÞsï�ñ?ÿþýÀ~¸ëu«~Ðp¸6«"m¯aùûÒ[w\i¹N#”žÖF,*Ä’„@ßûÀ¶\Û«[•²¦Ð)0®¥öahÉé…Öƒjèø^Û±K Yi†¡ï	”ñK«qèäéŠ/
+tíí=)Ð_h‡Ø
+QiV}/|wÓö¤+0[¸�Ã›ÌWéd;Ì€É%ÇsÂe�ùÌû:gË‰U¿Æä:3Ù²‰^ôHàŠ‰ÒÝèÀ€‰nê4d¢¦:]¸\ ±¹W‘AÉ®¸šœ_µÝ²8ê;&Â]§!°pq^ç7Fo?*LwC†+q¡G2gVZ±éd3˜ž­Û´)ƒ?Ø“5�ë‘Ë;�\Sgí9z¾>…�˜@]†[~3¨’×`&[8=.‹&>Á¤��1ÅßÊO}×÷jb²r¸"Ð³%]ºÝPÊ4ò—Èð¡c»~½ä„ªzC™wF5i–Â˜˜ûŸu}.íE¡Š‹E
+ìÃ4nX§
+y"ÑÅ³c÷â3ó¸+0l×jÚVµZ9F¦ÞÝ¡ªaZm3
+¶€{ŠÈ¢â¾ëªîG¸z¢_«þÞ¾ïé>=1ñ–•Ó}vYuDQ*v¬Xß›¾8¾ŽÅž<ÀŠ2_åM;©IaM úµÓ�	›x„ÇÖñD`æý®V
+_Ÿ	–”ŠÓã—º$_†ëŽtkŒòEl°¨gÛ¤ðµ@Šó¡$&¶Ô<GI@�ôØE“Í;¸£K3z~§9Û�›�W¶yÑÉö0qe½[F4öQ‰‡NßÑ…‹	¾	ð1B'O|<ø&w¨§Cï|8¸+}/.q½Ì/›òî×rGèÏ‰¿0¨–aµŒä¦¹ü¡]¯q%,x±¸AÈ	BÜÄoÛ&©†# |€1@ŸÆ�Tð!®Çá–ãpI…=ØÆ6´4‹.I+yŒ•dÌ´Æš`Ô«Eë÷ât™ÜŸü
+k¯�Û>Âô³|ÿ§-Ìå_a~;ßçŸ·°”§ÍH_.�ÿŠ±\¾…‡-<U\µx“Ûpß´sš$Kõ—Ö‹<g)›Ãnñ4�ÛüÝÇÎÌ‚Î7erœoe|Ë<pßa›ˆ³¬Æ÷ø��ø�c–æt©è¿‡Njá’†6#ƒZà'mõóPK
+°L5,?¡~–7org/gvsig/gui/beans/openFile/listeners/ReadFilter.class•SëNQþ†ZÊÊ¥Þ°Š¶ÝÚñâ¥
+^Ò S#Ìv9-GËžfwú*<?4Ñ’hâøPÆ9»• —6éììÌ7ßÌ|çì¯ßß(âaVy
+«±éK¶miÕ„íú–j	wI6…Õ”~ \áùÖ+a¯q(^DÈ¼·7í�–¿%Ý†Ug¨³®”/<K—ýÅÅ‰nœ0UÙ_ò\ãJQnžÐWKée5mÆ¬CuvAº2X$XÙãIæª„xI­	B,›«è‡‘B'ô¢¯=2�@R{#„¡ŠtÅr{£&¼×v­)ô0Ê±›UÛ“ú½ŒëÒ'ÌUþ[8Þ$Ær°åmy+ÛqD+ ŒD[YR…êÍçV	ÆþH§	Ò/KO8�ò>…­8‹s)œÁyÖ¹!‚e{ƒçÍæKaà2z‘0|0›ÀÓª¢¶„W²}aàŠF_F–0~ý¸]¯ëÃÍ¨˜D�0–=J{-w1–^µÅÂ¬
+GA…¢<ô,®k†9B2PQÎÀM=›‰[dNÿ�Ö�™�ºƒ»z‘{<l�0ø¯Ð`ÙÊÂw<Ù
+¤r	©Õö}ƒYÊ±Ýã¬tO³¨Ë1Í÷%ÎßOÿù"Aÿø±��xëÛ~ûÀˆ?'ó»ÌÓ7k“Î›Ú+°÷%$9Év*¤YbÚ”1ˆ'Š	<Ã(g¦#"Œa<l7‰S\A¡7Á­{ØŸd–¨ñ;æÑÃ™fÓÛ˜áÇ¥r?`¾M_ÝÅµüW¤;¸ÑÁíæ·ÑÛ‰ïì�ÑVÂ¶ãÍ^[¸ÏyÂ"2Ýf‹áÖÀèôŸ°¾Y�ße%<QÿPK
+¶L5m¯Z§öß8org/gvsig/gui/beans/slidertext/SliderTextContainer.class¥Vù{\U~oštšáÒfiÒ’�†šN&m†¤Ð¢i¡YKÊ¤M›�6•ª7™›É-“™0s'J¬
+"‹¢²TQ•¶6“H74Šûþ£ÿ‰ú~çÜÎL–žG›§÷|ó�oy¿÷|gyÿßï¼ ÿ4ÐšHFCÑ©”ÃoÚ	�ØV<JÅœˆ�tí74 ÄAŠ�‰¸k9q;éƒa n=¿+ew&&&q;îú°ÁÀÆ¾ö‡{�0z
+�ì>5hÀ7©£Ø>kMY3¡Ô´�†Žô[q;ÖFÃIIHï”gW±ÒN»Ó°ÐUvÛWN‹s�cÇ"jÚ‰¸ã5n;ÑqÚn˜pâòµfø#ö˜•Ž¹ý‰”�M1'åÚqIw0ü!¬\3MåñötLºñ€wÜ;3Ð+ÿ‡µ3±™8Ð8d¢7øQˆ*EØXŒÜhÂ§¥&6¡X¤›Løµt³‰ë`Št‹‰ë±Y¤[´GÀD‰–‚&Jµ´ÛD™–šM”kéV[Q!R+K„Žs´MÜ&p
+p»�-a®ðÑôÄk²Fb\NŒZ±!+éÈoOYèŽ;¤ì¶ãi�î!=mÿ»>0ÀþÀÿ’XÐ�àÒTKË„¬i7t8éD:¬(
+Sn’¦nÊ‡C~´£ŠíåäŒ‰N¡°]žfÖD�Ö6P¹:RØšM¤Ùÿ½~‘ Å)ÛÕ:¦
+„³æZ×gÅ­¨/Œ>YîÔvû¯m“Ê@ãzÅD?Ž‹ý	ö•‰hÌ‹žÝˆmZ³èylä¬=êª\ƒ¸W|Ùš›$—peâ”8l`s^ X‚¼ŒËMZ³JÂ+çä>^Œûð	7äíH$Y@�5ê&’³>XôMÚ–kK›éIÍ�ÕñzW–;¢½`L6Šˆ#°5³×Âì|€“Å¸ÔæÝ²ôppY²MMÜ�˜M(�®é‹5áè¶fÙZ/*×.žI?Rª;Èþµ…Þ¶z¡½“ÎDS‚kZœ†¼ˆ
+E—3aÇSN"îÃƒÒß„ÿ>¥kìOÚcv2iGt�ÛòˆÎº)jÁ£øÏf¢Ñ‡oÕj,¹cÕÄã8/pž MëàõáÓ~\�âÊ‰¢Ï:›H:£÷LZ£´b×ŸÅçÄìI×X!KÌRbpZ>�§Åà^'¾"Ž‰gu€ç¸]ô¼3‘ž0ñE­þ’§¶f´úËZý6<ÕCV,Í£ïE­|É@)wPç87‰Î^;Wö”=Å~	­4Rü}
+¯H”W½Ã`-e>¼îÇEa¤2·Ü$­:ÒccBÙ7¸f«ç|ø&—dJ ã5ðvF¾
+WãM|Û�oá;b±v^Ÿ{ßõã
+|�µ»	­çíX7ÚÛ¸$¶—™9¥›ÁÄÄÿ"®#iêIŒ¦S9–êòúJS´Â@È`A,ò`a€{ìÙœ{í÷¼iåü–ÄùGÒrç„èsò“ÝjLóÿ¸>ÁÔ‚ª¶Kúó’˜ür§]‰4o/–
+4¬ÇSxµ©¢ö7~üï¸.¢t^ßüï‰þ÷Ò«]r¿WpXmþ$kóg1S¡Á[Ä?�H'GíGnÓíëÜVÍ
+u,¸�O5“#_
+”
+ä� F¾Ôè÷F¾ÔÈ÷�·xv%ÞXê�eÞXî�|p,[ÛøÝ[¨—ÙhpÕÁ’Mó¨	–´Î£6hÌ£N>õòÙ)Ÿ]ÁR£p�Á’úy47ÌcO°ÿ™GHä1Ù¬ƒe¾Fæ+
+eº¢Hæ°ï²²Ÿß„ÜÅ¢YX�à›o7ª°µ|±Þ‚5·¢…ûÐŠƒØ‹¾_ã/Ïvç¯!ÞÖ÷¡‹7DÆ8s#Þ©ËÁGðQ@IB�¡$!¨@IBÑ%	I…JšŠ8Ï7’&åŒXÙÁ%&þ»XáÚ‡ÐnbeÝM,ünOÓ·›?ºås7í�PuOÇ‚tØ�ÁIN7‰pŸ,\ÄXgƒÁ«dë*¨Žç¨ÙÇ•Žr•�‘¤~Â9Ž$¬¤d�¤Ü‹6ß…“èãE~
+Ãˆà´*ÿ&
+Ø++=˜d9
+¤úJüã[Â+p˜ÖBM=1Ô-£Š¸SÄíÊÒSÌ`ÆÈ`VäKYxeŠ¯¶ç(å¡�©Ô¦å¥.�†—æò*sû¨~Í¹4’¸~	
+s¬-©_ÀÃ<&:¦žóR×çRW2X‘�•”1l’l
+7/ý~/½!÷¨—þ-¯Ê3¶sƒL�é?#mMMIkO‰P˜Á3JáÏàyøO/xb(ƒ¯zbK/{âÞ^12È~&ÈGòQTãYyŒ½ý8çÏ³oŸà²Í‘ŸyÀÏd�óÆõ€Ÿ'Ó2×Í»–q€À/ø×e+R³„7„·–E¼µ€ïgp%ƒyÑkT?Ì‰?1°Jm‘gðY|Ž€ŸÇí¼Ká…<@ÝY@|)y€þEþ¥¿æò¶¹·zª�Õú½+í’§­‰ÈâFJªs«»ÎŠïÌó¨�(7Ïã'ºVÏÃ))WêŸæ6ÌÍ<"Á¾/‘û—QÃkº
+¯pû¼Š	¼F¾_ÏÛsÙ³a?óÎ†9ü\�
+~�÷¼bïP¿�ÍÒ‹üj¿Íàog³jÏ7ó(Ûœ¥ìEüÑ‹rœ9%k…DÙµˆ¿È"q_ízš=”+a³2ºÄ³ý2wí´RVY¸<�þÆ°þ®üþñ_PK
+¼j5w]Pö68org/gvsig/gui/beans/slidertext/TestSliderTextTable.class�TmWE~&¤lk	á­µ©¤±Õ$V±õ-}Ñ"¸¥Ø`�V«KvšlO’ÅìÐâ_ðs=%œcÏÑïþ(õ™ILèi<)‡ì�¹s_ž{ï3ó×ß¿ÿ`U�%¿Y±*­Àã÷À³ö¤Ó¬ æ¹²Ê£ÐÚ–AXÔÛmn·�½š4 Oœ–cÕœFÅº·÷D–C#i­uCK¶d#´–ýú¾ßàÊö‚P6dÓÀqÈß:ÌæqÓ©K�i[¹YÁ¡Ç�«J[í@¸fÚ¹ì7BÇc2åÃkxá-�‘l®$_9*ËýÐó�@aPÄPUhÉž™µé‡ëá95ïgÙs70)]ö]iâ,&âˆbÚ„�Ø"˜51ÖY�H¾\—�×ã¸ âWfM˜xM­æ‡Od@¡.	Ä²ëê/WRˆÞŒ#ƒËl«ãº/
+AàJÖ6©‚
+ôÞVH³g+Rç£Å–ÓàÀf³¹~Œ~ËMäñŽò¹Ú-ýÅs‹œA	ä³§ý»Ù¹AJïâ½8,,	�‹©“íT{
+×UÂ8^ž•¼Àã9�ìuú>V§ŸLØD°yPßc÷m’´ý²S+9MOí»ÊhXõ‚W Ü€›AÂEë¬Suç¡Ý¿!Å°Éé³£qŽxú…ËSü‰í®Xf[üƒP`¦ãçùÖ�BºJ§Î¬`uŸãZ¨\Nºá§Éí²&¦ã:1ðFM
+ð5ð%»¶¯5"›Éfâ.6ã°q�%8Í
+05 �ˆ<¸9°7¯xud¢üßh×<×•D•ùB®´4/x{§3?ÄŽLí¿ë·$‰–è)îË€H¨Š‘Í;žVõÃ°nâ!¾U,ùN`ŒGkÒ«TCßw´?0F èß
+£ègbOÑ.ƒòéŒÅªÈjâEÿ Y–«žâÓ¹DYTEàÙ)~#êñà£QO‡–|´äË@9J;>4Ü'¸S^ILqõ'­å�ùÌä'Å£cÌå'ñË1ÎçŸãÂî	RÇx#/Ž‘æ>³›†¹„éRœO,¸#“ø‡ÿ'¸¢ÎŸÑ°�œ’m,P¤ÛxG«é¥\ÚøPm£mžjp7øÍ*-JÀIÂ½HÀÂ¼ÃÝ¦±‹T1‹}Ìá&-Í`ÜÂmÊ1|ŠÏ¨QÅT1B9ó"¿cÿ
+Óþ
+kÉ�6¶žj·q�¤“8É”à|Æ‘Òi§1¯¤1¢‚à+Ü§Œqg2•à7†"¶¹ø¥nÒëº@ô+Õ©.ë`³�Ã.ZµÚÁ7:Äîð¹!!ôBlk)ÕöÎuæÄ•ÃQµáö£ÇµíUÖ¾p*Cª—!ÕË ‡ƒ\ò±¶¯üPK
+¼j5¬ìÁŒ“
+Aorg/gvsig/gui/beans/slidertext/listeners/SliderTextListener.class�U[SÛFþ0¡ÖàpI$�¶©mD.4M´\%Q	„Ú\d{aKÓŸÑÇ>õ-Ï�iœL;ÓÐÕéÙ•*ÛàiÇãµtöìw.ß·ÇýýûŸÆqÌ0åwô�C×¢µdéYn\Ýµ­</z¼ìé¶åz¼À‹®¾&�ëd4›ÆÐ½gšºmvô•ìÏy
+Z®kYw�,²óC^ðôù]òáÑÙÃ°<ky�ËlÎ³œBä¢0Ö¸<äÇÑ~'ÃPÍþ¢“+¹‘GÃ97L|Þ)x¦E·�&…¯ÕŸšbè°M×F†„U¾æ©PÚo¿o,o†áNòÿHm0´Í;yÎÐšLmhèA¯Š6ôiøw¢èÀ
+qt‹÷‹qƒÎ>*íg	ÍÌÚ\¤æäL{Ã,Zâ=0¶y»–Ë0Ý,¯³§
+cf�Ûª(Ô2mëGÂŽ›’¹U^ÜvŠû<Ïp9i4$7#že�ŒÎ
+�åÄ ¹žéq_8„9êc6’U{ó¿·]AŠAÙá±ƒÉÔ‰8„yÑâv~JÃ®©Hã:C-ýs¥ím¦3t˜ˆa Îß ¬¸)°n‘F8(˜$½Ð†i—|A,k¸ƒ/U|�»'.ž_µL9Þ+Û}ÉåT½D5LcFÅ}|%<ê÷}ÑÍª˜À…÷ßÎÐ›lˆ¶€Œð]úQß3ßPV®ß\
+ö2’Bš�I{Í�W‹ÜuùCu‚¢Qð/í‚—ŒÀ]e¸pªC!>á67%dõÊÊ“ÂÂd5¬‹×‚§ÄÛ)0
+žQjÄÄUÕ°)8ù['8YpJtíüÀpµQŸ�ZWIÍÏñ’o|Þ5˜ý9²dtC1´¹Tu\¨�Øî ÊÖ�DY]Ûb.	iÓÛ¥º¾É]˜‹gì“’%˜á¸t1Úù›’i»5Âñ§þTjKÃ>
+BZ]î‰¼!Ž#7@-Òx0½L9ÇÄEW@h­¼œc1šø
+A¬9¥bŽ/Zbž
+Ô�§q�â¯�>í4(UhôÖ"¦'ýãµˆ©I¿*ˆ|$h=Go›ÒèK¿Gš½Ãùtbð†Òcôø«<6Lk?b´Žp�HÔ5ôâ:.É=	€Ë¸È§
+ÈÈ:J>~˜1ú2ñ� Û¥á†„ÐüÍ‚á|œ”þ
+NVÅfal†Ïp•V†Ï)Sb‹²^£éßp¾‚ñ?0±é?Þ®àÞ|ýó,U`D1Tyâ.Ur¯*Îhg”â|+ã<ÂJg)he<ªà1u²tšš3SAãúD‚®… »h’øÙ«àûnõéGq>àU¹
+v¢h	*˜¥u��¡†,UEM†Q“aÔÝ0ê©]7Níºaa¯ÄãS!^K;„˜–"b¢öÚ6®SaO« b!T,€jó,€ú)hãÜ‰–={‹[FdIVpð3zý‘(Þ¡¾!Q”EôÐÇò¤Â@Cª/¨é/Iº¯¨ú,µ>_•ß\�_:J8”¥ÉšÊÿPK
+zS$5–{xA\
+2org/gvsig/gui/beans/table/CheckBoxModelTable.class�U[sSUþv.=i8Ð6½Q(%€H ¡(©`ƒéER‹¡ÞN“Mr 9§&§ð~¿+OþÇ^ph:cÅGÇqýþÕñÛç„´¥…:�œ½÷Úk}ëöíÕ_ÿýá'}¸)pÀ.çùÙŠÉïŒ™˜’†UI8ÆTQ&2{í¬=?lçdq\‰4�æ«Æ¬‘(V>1:uUf
+~�¨+5æœ„œ•–“´KÓ¶Å]Ê¬8Ò’e
+A1Ç_’¿‚@ðJÙ(I�¶”2�OTæLB^8¯¤¼vƒˆ§¡Ô m9†I4j8iZ¦sZÀë�Ÿ›ÏÊiÇ´­ŠÀÀƒqd]-1b;IB˜FÑ¼!ëæZƒ,„Ž-h
+#€6B�ð¡CG£·Û*Y›Œ†malWalRj;tèØ¬v;W•3í”i¥a—€op*„=ZÖ.Î”,#„½±ÿ[	
+û¶Å’ÉÉÔýè“ÉÞ	•Do1Ä6¯jsBé¸'�öØZeß‡„²?Ä›õré8¬jÃc-Ëfgm»ÈP5a
+c—=÷O„qÇ˜ #ç;z(„õC'ë‡Ã!°Ÿ
+F.wÑ&{:b+sòèFtO)×g©ËÈ]Ý@ÌÍõiœS7çI5¢¬!¦ÀÞZ’a¯ëbIÕÈ[òÒQÕ¦Æ˜aIVï2Æ2#u¤0¬lFjÌX}¯aŒTeP¤yl¥}Íû@ïzB‘ã9Œ³HlUš¥ç{a»U�¸¤¾ÀÎðnÂ¬˜d†ŽËªâÛ1)Ð”¢ë‘™Ò”,�{O,’²³FqÂ(›ê\œ‚ÉWÓ÷�ç·v@ð	nò;BâÓ¼u
+èžÎ%3ç¨ä›äHð—UËZ×é.cá]¿·æRbñîgB�›a>«¶ÕÏê:{XÒ@:ûí‡¤öìL;1F#‡¦Ò(±¬ìF”0M
+•�µì(Ù�uÙmäøI–Öul5U›V‚¢¥cV=Ž(å|¥6Ë&*çN=¤¢"£){�	Cf.'Y‰Ýæï¹Y—Fœ…‚=Ý¹�‰]¶g%yÙ\\”FBQˆäw[çŽÙ¤Ž÷ñ�âÖ‡�¼’f¾àèøØ“~BŒŠz-5˜´;(>S,�áó•Ó{ŽÙ„ÓöL9+Ï›Š…�k9Ö§rÀ.¶9>v~}jóšOÍawå uWŽY®
+ÔãÔæ¹™'eA+ ¾£]%ÿÄÑo7ÐoÁ/èŠ/a{fÝè‰‹Dƒw±;ã�<’Î"�¦SÁÃsÇh&Ð"FF‡©ËÄï ³YÏqéj>˜Û`ûiÈc4r°Š~µ©âq2þ%Íq\Á
+¤G–…þšðTúD`­ôÉô‰ Â!Þ Z»÷6ÁÚ†‚g¸öÄ«xV­UŒzŽŸ¿äŠ£
+°
+nµ_¼íê%~'ÐÎo´‰Ò±ƒÅÛÍ’õ£…Ó5‚I-‡6\CÞA'¾ÁVÜBî`î²Ó?£¿£ Š?Ù ¿hý7öàe¢žö
+�Wð*×~üSlÄZf‰ê#â›�¸?qóü»Â8nqÈ¸²±&®RŸmã��@û|ìÑµÔ·ÐSßãµH¥ŠùÛTP)xiEì£$Æ¤z™À~7¤(]×È?n08'î_ÇÜ	†ôVÍé·L$Ír½\W‡\°ï²–ŸÚ½ÍŒÄ»CÙâ½:Ä¸Ëv [5ÕëïGç¸û”´«â‹eô°«{Œ­9¾ÂCwÝCwÝÃ—yzƒ ¿rõ¿þPK
+ÛL5s"-™ C'org/gvsig/gui/beans/table/Table$1.class�SKoÓ@þ6	ubLS”G %$€“BÜÀ¤ $)(é¡A¹oœUºÔµ‹½yÀâ\	
+âÀ‘?
+1»
+ê�GbË;³³3ß|³3þñóë7u<f(EñÈMIëXzÁÃÄS|ïµ^+
+Œ¡ø†O¸Ç§Ê*¯�ñbÈ�”ˆ-¤VÔ¾L*ÛØY€ØdÈõÞ…j_(éSà3Jõœ¡â.Œ¬ö2­h(Ònµï ‹ó62pœÃJ)¬2ä;2»ãÃ�ˆMC¡ù<èóXêýÜ˜Ñ„Ê‹’VDØ9Ôõ¶éˆ!Ã†ÛùÛ}ìhÕ�Ü\ja�!Ë}_$æÒºKÔ¾È£…ŠSéqÓÁ5\·q7Î’4ž,“D×5ó’©GÞ«S£ƒ›¸¥á6è*ÿ<·p›au$TOÂWb¸MMÚî l£„
+ƒ»,{÷Ö’3¸v83ê—ÛÖwQµq5†æ¿ÅÌGJFdØ�T›æKò@¾;¿í00š‚âÉ`÷¢qì‹—RŒmxÖµ?
+D;$®­€'‰H°M“—¡?ŠˆëA$iA?)ú²ÈÑÞ&í)íµÅ®}Æ…ÚÖ'ä��Ïš¶™“·„Âp‘4‡¤¶pÉà^Æ•9Êy¦I–k‘ÿ‚âwçÚ©Ø<ÁÝl}@¦{l@Jô>œ§)šŠ€Æd�P¦&ÝºI_ž§ÓZE§¨4M±�G†3~„óPK
+ÛL5ò~Tx$%org/gvsig/gui/beans/table/Table.class�Vë_W~,,,“�Ò�J!%P–å²Iƒ‰š„6!!¡.”¥R´8ìN`pÙ%{�$š6µ©ÕÖKÛØz­&j­V[%‹m4ÆkúóƒÕ?Äï~²>ï™aw�Rá·gÞ9ó^Ÿ÷rÎßÿûîMø›B}<1œœKÚ\ÓvpÂ2cÉ`ÊœˆZÁaY½P
+
+…˜Ž˜I«;>3�Y±”Å
+•½ýÃÇû‡ÆûïíWP½
+›ºã±dÊŒ¥FÌhÚ*¦a�B‰6¡°54mÎ™g‚Éy;6|X›< P‘'âÑè€³¢
+5Ë™†²ßÈéÓŠúâaÜ¹ŒÑ‰â¨uÊLGSÃY6
+•ÌÛ‘Ô”Bé”eON¥h/�¦gbýæŒ•T¸{Lë	FMjJ%¨ŒB†Ãó˜ˆ’©hLbÓ6Bv2eÅ¬„ÂÞÐÚpF]®¤ì’5oÖ„)eÚZM`5ÃËx)]™C ;j&éZU!÷KÚ1;Õ¥0îïí-àXïÿáûj5-#
+žn:£Pìo1P‹û|ð Þ@9|å(Bƒ�
+BÝo`6µÓÀ]¨ªÙÀÝØ*T‹�jlªÕÀ=øˆPíjp¯PA•(j��-µ—å AÚfÔ>gø¨˜.Â>b"Xýé™	+1ì^U(6£#fÂ–wwÓ“š²‰_ÃFðÎ*¹9Ÿ
+µg¬XÒŽÇ¼8ÈÒ"ºNØ]>Âƒ
+Þ¤•¢?
+÷øC«¥÷aO»Y{YŽžh|>dž�§Ù\Ç|èA½£ëÄ¤9KWýÚÌ	ôÊ§‡�O#üd äìõ)”sÏQ¡P›gÜÙë3cæ$“(zÁ€8p’Å8i¥òZL[Öì?CÁG™n3QhÉ3“�ùuòÈÄ´Ni£�áS";Ê´�Ê«P*€!ßÂh²*]D×pÌ‹'T¦`Ÿu$Ö)+‘°"Cº6&ñq„9£æùã0(cànl[òRÖÛÖ.ŒiÀdP÷a(nF¬„¶Ó’6O”
+üÚ®@²m ŠQãÔYòÔ{Í+Ü]kð˜ÅiÑÁsÿx!Ù`Zs[¹Qç&zI…5Ç¤W3êDÏaÞ‡4Î¸m³<4/Î)4.Ë�Î£|±­ùÙx"åäì’³ÏãüR^ƒ6íñâ)…&ÿ†�ìôêÓ>\ÀY(¶/žNæ�ô†¼‚v‚\Æ \Ä³âØ—œîéÖç„››]sãñ,Sóe|Et<O,6æ÷â«ìî¬-Êp¬o‡&¾ŽoTàkxQaûº¬^¼ÌãŽ´’ö9w4ú—H¿‰W|¸„WîÊÏ˜>
+|[&Ï%|‡§MT·€BÇ:XÝ2rN…Ý�ê7ˆ‡`ëc|ÀJ,¡ l“˜’¡reù¸Í�"'á?–æÿ	£Xj¥¼Ó·�)ûç¯±REû†…—Ó 'f)ën0>/“g¬Ð¬t¦“[R;Ö.©¥búÞ”bú¥�7ðsi½·d±dW\n\t€rÚ�ò„5Ÿ³H¸.éL#Ã‰ãìŽ
+OÈ
+zCª;žŽ¥ôAßkà¼+Ü7xÆ®23¶’É¦Ý
+}wÐ‰ôò¡³±Ô”•²Ã93{öß‰™‚“Ý7O'ÂV�-ÅîÓ»ÂÈFè�Ñ¦¾ZYI4°¶<¼ÃVà^” <xùV„2þxÁÑ4¯7úÉË�~ò¢¢Ÿ[Ü'¯:úÉ‹Ž~òš£Ÿ¼äð©äŠÃç&Rµ¨ãº�oÿáw±4XÄŽ€ºŽFYšdÙ%‹_–€,m²tÈ²;P{ê®£3Ð.,5á©)¦šRaXÄþ·µí�qí¡gà±éA;cé ÷Aú¸‡^=@ö¢�hæ­ª
+G¸Û�}8Š8F‰ç¯#'Ñ‹�SË	Ç[|‚ÐT¥FK(Á¡HS‚D±¦�¦�M	ÂÉ{œ‹Â~ÉÎÀ
+
+,0ºt.â¡ŽÞ@Ïè"Ž‡Z‹3ø¤,ý�ÖñbŒ#*ƒÇsqÞ§} Í“Dx;x‹Ù‰að(£Ñþosì¸þ×Ò—1|š^(|]®7§é�xß¬½©­sü GMµu˜Bä}ˆä¨Ò¡>Á�Ó�‰]¼ŽˆÑŽº,hÍ°\ÐšqJC¡d¾9æÕAš Þ ¡ÆÛ¸rÓàs¡@+7vóçÏ .…B’R&ú×–ÁY‘X…à“Îî…Q"öLÏ©>÷³ÿf´«xŸça'G/T{ÞÁKEèkódð-în£¢m{ß½†Ímò^íéàÛE�ªöhù+¼'¢o­(µi&"ÊÂ˜A=bŒ1ÎB›eéœæÕðFyàGpž\Oâ,žâzÏâiž`Ïð¤9�«xN£Öé à¢V‰Wñ=|Ÿ�ò&ü~@‹–è‰_1ÑëÂeRîòêê&ò5ÊIÊnc?ó9>ÈàG‹¸*M¶ ©¼¼./"»¹øœ~‘ñ½Dúe–×%z÷Šö×pl¹þ*¼Žk®A]`@	•uä”9%ðZžpIVø§ø™+ÜEn©ÙÒ@+û?Wl>½{•2¯çUvi¶ÈJõÜÃ¼pd×JGÞ,èWø¸ëH¥ ˜Á¯n!Í
+|{¥G‹œ/·ò<ªÌzT‰_ã7ÚƒN“5•Öf°¸Rém*}o
+¥—µÿ
+¿ÍŽ“3ä‘Žä”fð»ƒÅ‡®akn‹£dñb‘ª«½òÁ¿söœÿƒöÞç ù'†÷Ñ‚åõqÀµ½™Cü÷ÚöŽ‘Ëº�Ëpàó–öM|Ù¹^î;µZ	¨ÄŸÖl\)Øž,ÂŸõúüU£¥ØMòWõ?PK
+¦N5kv­°ì.org/gvsig/gui/beans/table/TableContainer.class�W	xTÕþoöLI&!	•‹„Âè$ ( à$ó'3qf’€Ö}¯¶Z­m¥­;¢h­[5nµ­Xë¾Ô¶Z—.¶Zk7­µ¶ÚÿÜ÷òf2	‚ýæ›÷î»ïÜsþóŸåÞ÷Ä'÷? FU+¸£±`m°7âµ'TÛaú#ñÚ„¿#lÖ¶Ëµ)IøC3–¥P9’ôœb]ÝÑˆIä#[a´·­½yU[£oskãªo›‚ò*Œ¢®xÂI¬õ‡{Ìl"p)/oö¶,oßÜ´¢­}Õ
+ŸB^·¶K[¾@kP(è|±hXaœo›¿×¿½6ÞŠk�Yé�˜aJäö…‰­T»Õ·&ˆ¢ÛñK¯«=�[ÒŒ
+ª,èn1IˆŸ‹‹:£áž®H›¿ËŒ+”nÔjÃ~"X�ˆÅ
+Kf�à PÖF¡Bë÷…â	Ñ¤pØg€ÛRqÎà"j.EB	›-µ�´ë­Ñ€n
+ûã4V2 "¾K4Æi+²nÈÓrÒt”è\¤PæözGpg£wÎZ…œ&ÚPÈvÏYk`*¦»�ƒ
+‘Wˆ,Ì4àB‘Œf00JFs[o«Œ¶Fs
+ŒÁXÕ(±äæ(Å8f`<&ÈèpqˆŒŽ40	e2ú½&´³h0PŽÉòâ‹¤ÁÇ|mëéê0c69%¾h§?¼ÖÉ³=™“Ø"Ežƒ‰¿®RçvBþpè*˜÷¹c–�¥
+sÝoÑâw™Íha¨‚fb¥“{ÜsFJy^ã"ÇRDÇÏß—¨m‰…KüAŸG´‡5ÚêBf0‚þ@@aŽÛç:…Ü�üÛÌÎ„F³Ç‰òU
+câfÂ‘^­ÉeÒˆP…`Ž¦X£/ÙàíZ2°ÁÂ¸‘±qL/
+u™‘x(ÉÇ	âö6a³-1ÔË|ø-+cæ33€‰iž8ê4îN\èe
+ˆ�3Èá�ºŒ� ¶
+Ø�ÂÔçã$í‚<Œ.eÿl>›÷WLÿGÙWc%ÉÉb“­d,YšE’Baô°E9ô,GûÓ¡Ï…í’ù\»<èïfq¸u OÁ©òêËÖ«µ|eàtkî2É9K…ByóÖ\«?âÚ9|Îç°‚¶8vÆûF€#-“ŠÃìHŒ`ÂÀ–Å%€DYœ–¬á(‹êbâ
+Æü;˜¾¡ï¼¯âk…¸—*LJÏ£%ÑXÀŒ-ów&¢±ùø:×vÆLÂ”æa½T¨qgêó­¹-h+£±+ð
+.Ç•7ƒj¦¸?c‘Ðó-|[|»J.çX\K>ø®¤R¾GtNÖ:;×¼'oÆÞeà\+©|�he
+Ïý\ëóq£Âô4NÌ^Æ§¶±3Á*sÔJÇ›\Ø…ÝÌ‹Ì¤1&f"ž�[\Ø#!Í
+òåv·I»ØƒïÛ3;üÀš¹ƒmÝÑä�� ®¾‹T±²¬ž3÷¸p7ú¹‡…ô{–‚/c		Ø‹{Eß}l+Áa€*|Ÿ�—™Y:|Ñ<Zd]í“ž¼q¤¶É´oÞÞivO4Ò°ÖMG¬¶-šð:»�³<?táQálLg´«#Ú,!hŽÈb?–Í±?1ð–‚ÛÇÓJÐ<#Û1ÜOñ„Hÿ,³×Ú=í)«{ÓÃ¦hO$¡7~¯�gð¬Oã9††þ¯Œ’Œöh»…ä)Ù]xQ’í9«U¯6ÃdÃx#“¡~Y$²ðÖ®´ºŒÓ“M©åþ®©•ÈPñk�…×¼*ÊÂxÃª»6oÂìŠø�â·<å¦47ÆØ)´‚=‰[–Ð£@<�Þß³e³Óg™Ûålp°ëˆtTÌìŠöš�aÁKëïÈ¹(Œ?	z91®´\à
+o$aÆzýÜß“"am¥ÌyÃa3è7Æ‚=ÒÓþ�0�ê4ð+ï3Ñ¤OËùº1‘ÚÓ)µªåŸøPü‹…Ö+ÒC�ŠûÙ1¡>»SÚM57B	ûôäÞ y=ŠH–ø;O
+Æ„j±S,½“PÅ~£²(*^:¬ÁœÊQ¹§òäô¾5”0
+U ›¸*´ü³Ò=`¨"|*‚´P`:È
+(¡�…Ü_Ü#í–TÛe½—Ú°EggÔ†UŽKÍ-þž°U?Z�œLQ2MÄP%jœàÏÆAèÌW­mÛî¶kCñ�öDÇÒz0T™øºK•³çõ:Ag·7‡{*žú¾oêmfŸloƒó†š¦†ª¤RKBBÅeÈDTd¨C%™w©™üÎŠ™qî™Ž�l†šm	¸	ju´'Öi.	ÂÒ¡G‘¡•,Ú~þ�Fr‘ZçS
+øç7„óBßùý ïÅöühûÎ/}/±ßó«AßùÍ ïübÐw~/è;?ô½Â^?EßÇÓöTLãµ’Oïq>—÷ã={q¨gÌ!ý˜åQýpËÅã«.ëGµg,ïG�LÕÉ¥^.óår„\x²û±ÐSrT?yÊE~²HÏ™I9ºS[?š×eÚƒ%d¢ŠÞÎ¥g5ô¡ÓQ‡Ù˜‡jÔózŽÀ|4ðºGrMŽÅRžÂ›±†OÑÂyPBãF#õA�Š5¯2Æ²ôH8ÊÖ#a)‡ï›hÍò}�~*=9âÀš×“…åâï¾´­ß‹I¬N9P¢ƒØFÓ+èÊJÒxœcXŠl0JÎÃ¶‘«(+Z„šuB�9~›Ö—�q<÷`Ö^œ˜ÄË$g'ÛÏIl‰É¶T  �D$¥LGs=Õo —ÇÊ	dqÚ¬!M³Ì:ü´ jóÓ‚nÍ�’S¾
+ó1jÆ6Ñ”{Ö��ðzŽ«-ë5)¼Íçÿþð¿h/â’/\FÄ½ØNÒvøª²“8M.gÊ›ª$Î•ûú…Œh?ŸJ"†m˜‰“0‡ÛÇ\t1º[ûe£¯'“êýMhï&XhmïZ˜óp>}É’Ï,Û§WÈ�H�JÓž}ˆ¥c»HcÓ(éjç¿"	OÁ»pYÎ½øf;å‰È¿#÷³’¸Zf$Vi³vÐD4‰ëU7È8åp=s8�ŸÎô<ƒiy&õ,åÙtú:{.åÎ£“ç“ŠÐ‹‹Ò=Õvt4)³Ur®µmµ¹œ&ëö¡„Øv	¶{q³Ô,gS@Šu^\N WPù•ié[nÉ’ÏiKµª œÈ‹7õû°s{ÈÕ­ä°·ËåÎªÜ½>;» {/’ý¸ßh­�jÖ�Õ–@¶-�¢»^tÒ(IæpXïÔž�_?$$õRU¿õRJÕö8åâ¶JàjB¿†Œ]K®¯#××Ã�X"7âpOâ&º¹›•z3ù¾…ßZ{Èë­$æ6®¼=­„np¸¿x€ÄÔ11äHJˆ§NÞá{‰Á£:s�D­�°îDÑ¥7?z8ûn<f—Ãã'ñdÏ'ñ’äÍÏsXã¿Ì¡XªÎ§s�î¥3÷Â«åFêAöÊ‡Ø!¦#�¤%JƒSï
+ø+@…'Åa$ÄÝ–F€H$¯k$»QÒj=�¨ŸrÚryojøœÄï,¸²Mãï-ª¯áï-~�ÞÔöþã„ÿ¥ž¤ÔS”z†ïžeóž¹ÿA¿ÈÖõÒ~Z×tëªdòþokÞyÔæTH¿fï‡÷$ÞÜÙèAŽ§èÝø^_%È×òuö×7hâMÌâ™:U#³�ÏO�a|6€²©@ß–Q‡oÓæ;´ùnš�2ÇÆË#DîB®“•u#;YÇèüÙ¶WÎñ_µVË[MàáïïC2ë}"ø€>äÛ�˜Yÿ¦ÄÇÜŸ?ah>MË¬:'uv8”|�|~>Èà@å!_åc´*‘Û‡Ù8™cÉÞŠ‘mTM®Hâ£Œ][•ÒÌ8š™€Éj¢6å±”8ŽUÐù�µù
+üÇ>BTà¿esöÒ‘	äÎˆÔâ å;1Ñ#ûzRe'UþnŒ±çîR.>F)©Fe¤¢šJ¬Óˆu:JÕÌV31ŸÇÍ£•;- ‹Ü‹U1	“oŽÑjŒ½',²‘åyªx.Ké—¯G¨Zäªº4]yŽ®<5–ÇFÑUBÆ,]t°®Áª	�¨CRýV+Ô‘iá+ŸšDÖ,-›mDå²AÒéÉ$©HÎŽ³v£Ð:z¦`N�Ó�:j1Õˆqª	ejiärr9w)Ëý)Î–XkCÎºùYH�MCšë �ê m´‘ÊZÞ¯¦gÒ×N\kÒ°:X
+.K‘£Î´ÕUÊÎeœ¾�’ŠÞ»¬ÑœL÷7¢Hñ0«NÀ$µÓÔ‰i&+“•ŽI�¬WUÿPK
+¼j5ïÌ¦<Ò
+Ý3org/gvsig/gui/beans/table/TableControlerPanel.class•X	xSUþo)MO()T ˆl…6@c©u«8B]¨–mEÁQxm%š&%I[QAÜÀaÜpAÜ÷]R—7ÜuV÷eVG�ÑÙ\ÆqþóÞÍKš†oœ¯_ïrî½çþg½çå…ÿ<ò8€*U«03ïvô$Âl»ÃÁ6ËŒ&‚I³-b[¥­�E“ñXÄŠ/0£VÄ¥à?Åì1W½áhGð(M¤0¸mAÜêQÕØoÃÜîd2­S(j_G“
+{ößPël‹Í�­¬MÖJî(j;"O$…ÐhJ¿GW6…‘�Að¼'b_‘°¡Ñl³7�4uw¶Yñæeé�…¼²WaHÛaVDã+j«�Xf\Áè2“Ë[c
+�f‡Å­~›g0b’cK2NÆäh´Ùò%Z’fÒR(8q17†Â	�;'ÑˆyZq¡èàp4œ<DaR…ÃËìM­+šÎiO†cÑÆp"iE­x]åBB«�…ÈrPEåBc±—…o`0Š† xà•Ñ$CÚ>g4ÕÀPgTaÀÀ2
+†á2ša ØUáìÛÇ€ßÍ2PâŒö¥JÃ¶ôA/ö30£„|€�Rì)£ƒŒÆ¬àáÂf$|šeà”ùHþuÞŽZŽÚm#Š"cífd¡Ë\“ËÃTS°ñÿòH±©¶@Zw
+{ÿåj¶7î´¢	®zp$ý­¢¡ÁÑvƒóp”BqÂJÒ¯—Yñ¸j¡hôß,ã¹ÇëäX#æ‹ÐMT�µØŠXàÐŽQ(qO‰õ6š«bÝIZ|hÅxçÄ¼³‹š¨°1,Äñ²t‚³´�K;´é°¤9,Ê²9´ùf”V‹Û NÂÉ`InäÚ1á�éC›Ü_ÔÕMÆ^„(aÆáê¢ÁùV"!^àÁ2¢é°’­v˜N­•I–#ìCNqDq�Êw˜p#èDQi¨ÈAfˆ€*³$d¾èŠEiÖº,Ím§XíI›Á
+ÄE^úÒ"�«3Éž•yó’�nôÈ~&¯ì—$f`•C<ÍaR¯3Ã˜\&nî2p:Î�gj6’Èœå°Y«‰’ÌœãÏuTÉ�½Ö;´óh$Òs³TiîÅNB3p>.�s2	¯t3p±Ãp£Ö‚�Ñ\âP¤�1GüXaÞ?^\&Á|).§ÕòŠïÁ•>l‘õ¡Ë\×®M?9.ÏðN•`Ùém±�k±Un¸NØ\ÇTB7qwV,»Þ€eËM²å&fø¸•HÆâé|�XhFº-Ù0^š¦¨vohï`Pç:Žw9&ª�˜	ê»¤"Û�m"•}îõánÜG{äºîÜîeL<Ð�¹³æÁC4u�àk^–5i¿Í5)ôù°;$1&Ä#ÔÜ2qçª®h‡�2hÍ®.+JÍø^¡è $ëÇñ„0ü	…NÆœ5j´"/Œ'ñ”ì}š™6G%<K‹SkÇZ‰Xw¼ÝÊ<lypD­dð¸cÉñ9<ïÃ.¼@g«è¿æäÞ—|¸/;ÉBlæ&×ší:á¾ŠŸ‰µ_ãÞ®8Sq<æÅ
+Ã$ËÄb‘ÖpW«‡¿^Š_R^×úû5õ×I†;yèMxñ¶lâuÞ.&gÓ{ÎàDý½ÓŒ†|àðû�[ÍhÒŠ‡cq/~ËY”×9/9:Ì'Œ™Êòâ�â¶ã¥¡k„Hù„ý„}¼øŒ±µz»$n�£åCí¶zˆëÆBÈŠ0ß9Kç¼-�›ñ%ÝQ®ÿÓY7#gýK©Hœõd,$éükVOº¶[Š‹[�±)O’VgÂÀ·R\lÁk!‹˜X­`hûr«ýÔ9ñx¬7a¨ÙQ 9O“}NÌÒ�ßsU=WyhfÙœ“ï3éZ
+Q>Þ­†2ðn¯Úƒ—³.ÏZîV#è–Ê¯P‘ÙC¸æª†hÈZÙÜ�l^67Ö
+%_Ùnu‰ù<j$™Ó¾ª�ÿaÇ²-V„P¬�}ÊPcä…Ý¢ÆÒ•3l"«ÃŒÌ‰wtó¹Of1GS…å$™uä0³s[ƒ¡öV„åD'G‹6ê‰+i¨ÉÎÂFVöY[]ýƒQëËPSÕ49R!yH"’êµ~kÌ.Ž$PÇ‹¡¦H3V¬(W¥Ÿ‘áRÌô«i=V:ËŽ'ËS¶úZìÈ>",5Úè<X• ÄD¾*…ü¨Æž*GRžÚý=÷é~¨îY–Ú=‹R»/Öý½î×}‰îY}Ú=kO»gåÉ~4}u,ÊØŽãì9ÒØ·ú°w@mÇDi&KS.Í4i*¥™.ÍLi‚ÒTKS#MmÀ¿ÿv(ö>Z¸u�AÛ1;0½‡Þoß:‡íÄN‰”n:%˜A”3‰¥
+{!ˆIØÓPMê,¶5Øû¢µ<{ 0MäÐÂúr.¹”:xQ�Ã{t8W™¤„v¤R7S§ƒ¸öM`'æ-¡¦—öáèšsæÇîDë¢>7Æ IóÃÀŒ–r[éí"ðC˜é·vàÔb2ÅUÅÃíó]!©’�@
++ÓƒÕéÁšôàìô`]z°!=¸(=Ø”l¶ä7=…+„�î×°¿J˜éù:ÝoÐý&Ýo–>£ü¸mèt—c0Ç¢‚ªœIµÍbÅ¼?N RQÁ‹±'"Ìê7Ž“±Kp.)ÃÄå,,¯C;nC÷ÃÂ#¬LŸd‰úw¿ŽSð&NÅ‡,C?F'¾@_#fj‚c×PßhCUà
+\�kˆŽBó;&«än¾)è£Fg_……âF¡n�h"…m­2)u¤'ƒE')\oOŠD1é�h'=ñŠjÒ“bÙ·Ù�ÉÆ
+öŒ—Ðü7Ý¯a‹pÕóuºß¤ûÍºß }FÝMôl —Ñ¼’»š1w:¦âzõ™8k0ŸEîb¬¥ÏFÖ‘ºžça#6PÕçc+.À-¸�ÅÓE¬h6Úª4ÕhU*ÜšVž×jëµmAÜ‰>
+c«®FKd«NOÖØª«Ñ²ÙªÓ+ëlÕéÉ&[uz²ÙQ�žmÈÌ2bW1M�…¯‡B¸‚b_I±·Pì«(öÕûŠ}-ÅÞJ±·e‰ÕëŠÅ/-Öä#kËyÕ´]XÂ€¼”y›$$Rì ,ÕA|»Pl[Ø+w."ÄûwâÁEœ¸÷a§ÿ±~šÂ3)¼Ø‡WRx]¶únGõ¯d|Ÿ+ÇxÞúº·3¡Þ�),­fà.Ï¤÷fá^îâ>'/îÊ~¸+…2w¥Æ]¹Ü¿ˆ»Òÿ–‹»2÷¶÷#Ä½“¸%îÇˆû‰¼¸W¹¸ŸÖ¸O#Ó‰»°"ƒ{¢Püï¤ð®4Ü‰™¸Þ(€Íí#{ð;W’‰I¦ò‰�‡ÉCçö3Ë”áELÆK|^fFz…YçUzÊkY�æJtV^‰ÊûIT.”´DåZ¢ò•ïF¢?”¨<-Q¹ÿO®Då¹½IDoQ¢·)Ñ;”è]Jô%zŸ}@‰>Ê+?“µDKø¨ÉšxÒä]˜@‰¶P¢�å¹&Å`–àÏBÉðÛµÆ'ð)ÇŸÑ9>Ïº¬Ò½Œ_Çú²µú²#É(¸‡d^Ä PD'þO)«VÊ_ÒJ‰9«„2Ù}#IÉ@)%càKBùŠP¾æÃÿ
+¡|›çHÎz×š[µ5—’Yõ.Ÿ±fµP¯z7Æû| ñªýsmV�Á9VŠ(U�òÀ¯¼˜¢† Yùp¢2²°.u±^ìbíÓXW�aÍ.¦k�PÒžW£=¯føšÝ€ÿÇ@ð5þ¹àk2à'I%©J	~O‚�2–é“ÕXÔª2,UãQã³„Xá
+qIÞð©í>µBIQ;|­«v7B|5PˆÚtøÔú¿q¥©Í	UAi*)M€ÒLgÑ5ƒÒÌ¤4U« ºUuÞðù·ûR6Û0Æ©¾“Ò«D)]Ù¥Taæ-³ÃEÄë0RŒÑjvó1iæj0³«Ãüž�kÔÌgßŠQ2·CySÊ¸…Mç¨qe7}÷‰\,J)QÃÜ*QÅÔKYJ•è(²ñðˆ~8V�êgÖ£‰«†jâJ3•ÑHÓ¶àHÕŠ£ÕqY•W£[y5ªR:?Eyb4GT„|·iì‹8—ý#/!”ìü4ðYªöê§˜“H9™L«¶¬š|„{á5Þ¾PÉ·œ¾f–ÌÙ{m©Iw¹ê.º
+g©ØëªxòîÎ—çž_‘÷üT<¥Ï×êóC�ó•)¸/‡Åª,C]n�z´.¶žqŠ­Âû5”kQšUÚõá­(R¡&é^ä.Ø†)YUfnuiW¡šñ¤«lÆ«³—Æ«5Ã•YŒ5˜ÂÐ6ûT?ÆÎ©³õîu…ýJ·6–áPkéVgÃ«ÎeŒ­££¬G¹ÚÀ8;ŸqvUcžÚˆjNP—0î6ÃT—âTuêrœ©®ÄzµÕ5¸^]‹ÛÕV<¤¶áQu=¿»oÌRì3®b§».xýJ<hžÈ ±Ñ§f¤ƒAß+`è°3C)UÕ?”íçFÝ�QêN¨îB½º›¡rO–×Îs½vž
+j¯Ý‡Ÿ2²Cô÷qQ`:¿q3|åWaðãw0¿Õ2¼Š\^Eö×·xÜ
+¸Qóš¯yI m*Ó•uY?S“HT�Ñ�3¸žØMpU3	ÌY|ÖAíÜƒÅ3s#ãÙ,ívµ_#»Ô¾ÿPK
+zp$5je�£øi)org/gvsig/gui/beans/table/TestTable.class�U[wSEþ¦I›�ZîŠÅ4Ð†rQ¡€Bm!˜^$¥Pñ4gL$959)¼âýŽ‚÷ûõÁµpIPQŸ|`ùä«¾øè‹?Àµ\~sršêÊÊ™=³¿ùöž½÷ìùåŸïÐ�/VZ…L,3^4ù-™±©ç‹1[ÉÊØ�,ÚCJòA„ëãúD¬xÔÌgb»{zŽë�°Z�éGí˜—y;ÖmåÆ¬<¥„Y´e^|¨Gù�ó?*PïÐD×±­¾ÝVÞÖMRt	4l1ó¦½MÀiôL¤å˜mZù¢@×µydë·ì8)L=k—Õí>Ìðv[†Ô aV^„4øàŸ�:ÌÓ0£"5k`¦’�#gu"i	ÌH[ÙR.¯‡;ýXR3]çÇ²šéz?Â5Ó
+~´Dþo$|¸A`Q$?˜¸Ò‰®ƒñ¶auˆU´âFÆÈ¬WC›:[+¢�Ei+¾‚•6‹¦“
+oä€Ú»í
+Ô!0“ Ãt\Ð°¶²ÞÉÜ•òVx­ë)VQ‰™» ùfº¤“[Í6¹x¤ËÅSÜ:‰§|ëž³í.žëvñ{&ñ”wNá9c=5è†±Çbq5Gj#20rX¦í.u¦;�P¾÷kÈ¬ƒõFœH
+`Piî˜G–ÿÔ­@k$1]q;&’
+°2ö
+ÌÎTbKÄ ž—Ê­¶)Ž©zÖ°ûÕž”{±.×ûp�…N§xI"µû]ë]mW[Ôp7î	à.ð1I&žad±('uŒ(ƒiÖunæ5H•Ú:Ü'0'AÓý¥Üˆ,U.h(a¥õì°^0ÕÜ]ôÚ£&ï\ëõ.ïdã`ÖgV
+½Ÿí‚»æ^¥l´
+fŸiØ£Õdb='SüvV†urŒÎ•©vYTSˆ¥­\ÇáŒe¦,vd-ëH±c,«m3Ý1X÷&¸¼=oôJ™õ£$ÐTÛ×öÆûô¼žQ õÙT
+œØÈÕk8†ãLàÄå­áK$çÃƒ<Œ,°œš*›M+6È�6÷K=Ç¬=ŒGfà!<*ÐÒo…‹2<V’†§õÜˆ©Âz6|™Ï�1ŒW!òá	¦}L-dóžR.=‰§UrCôÀ*Ùž«Xzž¾¨üèa^66‰´Ó$tC÷ãÅIrç5]òÃ¯2L��Õ£\êr[»ÎÊ	�­×)‘iû2Éæ¤'K{—i’™o¹ö…ìwî«`ù4æµJÜg�K^²`ua�,Ò.ùy“�‚t^œ¸†wñžŠåûìÝTí’ff”ý°²ú9œ¶êÒ$�žû‰ºr­ø´ÖbrÔ:Ê“’V©�–½¦ºR³«¦C¹Ždô‚
+J|‹øX×©—Èùql žïç³9Sè ññ
+gE/`n´Qœ:�¦h#.�Çü¨8�…¾±8å	-M¦¼¡åÉT}hE2ÕZ™Lø~¤<ÁÞ�”7x` UÌ¤qr /z­©è7h
+j‡ùÁvcõšˆ�ŒÓ…e¬Vƒ·Œ˜=e¬smlP6nR6nQ66'û]Å¥Ø¦·)ÅŽäf¯«¹]iz•f—ÒìNn®W¤íeô«QY©õ®À…=ÑhÃü¨¸sï¾¨òV¹Z†%"sÎ	Ü(¿Ãhâ7È€i1tó´µ”â˜óp„ú"šqpñáãW,ÁoXŠ?°"Œ¿Ð‚¿±R¨÷XcŽM²n«‡É²þŽ,rLL?#‹œa§ãš‡¼‡p?%/Ù{P TÏaÏ4â5¢ë8®
+�‹ÎBK|�“¡ÇËxæ"êRðl¢²öBè%®�s°~þ^æî%üÝó.c9QjÖ�¿Ý9ítò$ëèõÇï(½ %¼B/à”Ùiz*xz^åYÑ~zô:%�7ð¦ëãF'ª<òTxUU›ÚæŠÒ
+‡’Nã-‡âíé)¶MCñN•¢ŸÞ+T³Ê>«àU¦e|Ì2-ã³)Þ€ƒÚÎüî¨án®r7W¹ÏNïÞÎiÜûÜÁñ/PK
+?5ÚÞÒ#ç9org/gvsig/gui/beans/table/TestTableButtonModelTable.class�UYWSWþ2p+1*Š‚ª5Ä!€bU”Ê¤¢ah‚ØHµ½$W¸6É¥ÉeÐŽv¶ó<ÏÏÚ×ªm_úÐ®®¾õ¥ÿ �ícŸºú�{C˜¡+ëæìsöÞßžÏùõßï~°SûŒÌphx<«óL
+ij:2Õ¡¤ê×²f¿¤ÚÆLÓHw	-ií�ÞKê¸JªéáPïÐ%-n:Q,à·NÕ	3¤�ki3Ôn¤F�4©°ž5µ´–q¢D z�TkÜÔ�ô¬ˆS@Lðëâ7"Pr1£¦4�õa©7ÊNè´zê¸<m&ÛrW ^!ùßn¤MU§*•ÑÓºÙ"P¨ðtNÆµQéEV yy­ ê1Ì.BèjR¿¢Ô�X'àhg®x±Ö*¸áq£›”ÙÔfßâ`œ¨ò Z*(¸MŠmS°å’ª™—ñ¨™¡–·3�6Ãüé›´;\q#9–J«�.ìœÝís¡NÀ�ßù÷»°‹.rÛäÂ�ÀÿÍš!�Í�®®ÁðBOš»êdÀ
+Ô£‘¾.löÓ£¬fZ;�
+�Å âî”Y½�]‡e*ëÁÂ­)ôN»‘4èÔQvÀ‰Hgg­†ç3›Ü…cn´ UÀij“¦á¯w¡�Uohdô�ÌC[øL§‚¶ØÉ‚Xƒ§(ÖØD±0‰Hg‡‚[ª· ÅDß-Pt� Q–BM$"·"07EöxXÑ�Á€ã,{™²‹†C`G ¼ÚY@1œ“�2È|k¦,%úÔ´&�×ÍMÃLË+8�Rç¾|ëÍç;¡2J:Å9
+ÌÕÏ[o®[êPA	†@»N7Êb±ìéä0F¤A�µ$o@ÏêÖœ:ç$÷$%7%P¦=c©!-Óo�²/lÄÕä€šÑå>è0GtNgÓJc¾Ü•ÅÆ)³ ‡sF”uK4±€bËœÕæ…ŠygdI×-QQºD^ƒ½°é)¦raõ½íáWÌŸâË¬hÊ‰GiÄ39¶žn„ú¨dRUSSLòã¸êÆcx‚2ÕŸ6üœŽ¸5jBuá)z¸„®Ï°0£ò ™Vðœ®gq�®ª™álþêdá‹´I�£+$vÕ{�É(�ÏôÅI=‘Ð˜‰Úå»¹sÜj*^½‚¥Ý¶ŠÛ¼ÞmŒkìRoá ¢eé	�\«tÖ­Þ¥à-¼-[ìÞ~d�ÔôáSÁ{öéûÄÈÊÙÉÃD­‹æCÙ³õøh®Åèˆ1ÁhÊUë™êÓ2�LJÜ¶(>û%›
+Îg‘†?¡ù‡¬{º¦Æ…ÏªVRä¼D�±L\;®Ë¾ßºlWï• ¨ac9ø•Âe­|løºÉ§ÆZù–X+_®|¼åÃÄ½�;wë±�SÊµ>xƒkÅoÓ¨®Å/ÓØ¼…êØMl�†?(¦QëúÛcÅ¾;¢1‡/�•ø‚ÑX©ow4æôí�†]ß{bÅÞ½1‡7Ó+ñ^è�•JÊé=ÒÛM¨úXð[Tz•—-Þ=‰]»obQ¹­õ5åpH9¡G¬øÚ¤™i¦Cšé�fŽG{fØ]’}Z²OKöiÉîŽvÌðû$?"ùÉ�H~ôp‰´²'‡{äZé˜!JlÂÌá^¹æp¿íÎÅ³Ö1=—nçpIn©–¾nåÖà„™?óëc†«ù_ËÜCïÞ�˜Ä&\E%§p¦P…Ÿ)ñ'¶â/lÇ?|¾m7ŸêMŠ�|£CØ�Q"¶ØuÁƒÈpw#“u;�ß1†qZŸÂ5L¿˜˜:.“r¹WH•°ÂÃ”g•y%ñl¸…"–ô‘ð”ð
+<é{:‡ç¯Sl›2a‡ä#8eh`5ò|¿å’Ÿ¦‚èØvÅx‘Îñþ$ý^&%ð
+^Ím²RÄfsUj™:d�UØÌ||’z
+¯[o¬Ñ²
+Ä›ˆ~k8€*YP»¶ïÚ]Hê6bÏ¢{,ÙV–ªmŽ…ª‚…ª‚…OVwòÄ*N~ŠÏò­ùú¸eM¾°j2ß£SÌpxœ»ç&Ü—ÜW–Î×ÿPK
+¼j5ÃT2mé
+=org/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.class�UiwW~.Á©IÈ¢1Q1j%E­V
+š¶I]°d1ÐXL·	Œd,0)I´‹Ý÷Å.ÿ¡§~³§!çÔ¶Ÿ{úúsjŸ;ƒMLz8Ü÷½÷¾ûûÜwþþ÷·?Æ�'­r>–_¨˜\«flÖÐK•˜­ÏŒXÚ¨Øé²aLé9Ó©Ú¶U³rF!-oU�¶ëú‚+è¥|lböº‘µUxÂÎ©¾hÇŒ£dÇF­â¼U"—4+¶Q2Ê*|b‘ÿÿs¾ke½ht&¥êR¬²hÒä¥óò4Îk'�hrƒ`å:j•lÝ¤*ùÏ˜%ÓðF¦‚ç–²Æ¼mZ¥Š@üñvŒ†XlÜ²4aêó¦ÑPWÑ. Œ²¶¢5�TZàA·†—Û.Z›ŒŠAôJ… ¶H±�4<!¹Ý•3e—©¥b4À^’ì'	à€@KÖ*T‹%=|<€�Èÿ-ŒŠƒ;"‰ÄLòQgñ™ÄÀ´ÌéPƒ8Ìn¬×üŽ*†íìº"k
+I3Çð”4sœ•7EÔð´¬Ø N
+´7ÕF,«ÀˆUœfe#WÝ(âAáŒ€jK¶>Àpcs4€g›cŒ°Ýz.7eSÝ‘Õ©¹°t"zç¤ëó”eäŽ¬qR¾ˆ„¼¹Ä”ie
+\ö×“ÜÓŽ‹$Æd{Ç¶æ
+[�“zÉ�a
+4m4qªa—¥ÎT/ß«HÀŠà�¬Ö¯{�¬w¨aW‚x/±HlUŠ¥ç+b×e�W1#¾ÌÎðnÚ¬˜ˆ†WeÅ{ñš@k’®Ç«ÅY£œv^(ieõÂ´^6å¾~¨Øs&ßÒé�åF„ot‹‹âq¾ZêX“š+sÅÌÙsòÌpfxË²{ë4šañî¨KŽ‘YÇGAÑ€i�ï®óáwwƒí,ª˜§«jß®žiÅ&©dSÕÐ‹¬p•¼	)!³ÑÃ%+L g ë9=€F¸Ž®Š%ve^JnÊwro1T½œ¯Ô‡�ÎD
+Ê�Ý ¸›N*£5ûÍ\Î`%úås¢8,Û»{9b¼a|ÌZ0Ñ¶ÆÁ”Qa$<
+ð8­sæpBÃ§øLÂìsŽ0^]4Ìüœ­áK÷ô+Ú¨È‡S7“rfÆ7°ƒøvµÇÔœµÈl‚)«ZÎçM	Èþ
+ávX¦ƒ=ì¸Ž®9µùôÈ™íPe‡r$“ú)Ç	Ï}wR+„@Ü§žŸ4]AW´]Ü^Æ¶h;þZFOôz3+è[Æ®¨XFXýýoh_*£„žLe|¡H*ãESIõ÷`ÆÛÖ=‘Qäâ“‹¿]ŒOŒÑÂ`&ú+¶µi9’ž¶C¹ƒƒ+ˆÑ·áÐÑNH¦†S4®d¼÷0”QVp–.$ëuX_“õ‡žI�7E½MQe­ès©!e]ÙUf•ºìhjÈ'#9TÃI{”Œ¯ÎðàÒ]Ñ&$­!å†ž¹â3K™b
+¯È-¥_¿ë”_ç:�.®­,û–]ÃN¶¤Ÿ�ˆ£ižXlÅ:qÝ¸ƒmø‡_\zD;DzEúÄ>ìƒ‹8?£—Ð/¦°³´:ì¶Yä¸‹‹í0p�íMã>ò˜cwð3L\‡—vßÁäZ¿Œ9áRD‰òå=ü]÷àaç­äOÐ’¿ Z¬áí»�)¸i…˜p€'&5À:!…éŠFèìi€»w§ù[x�œÀûø îô„S&æÐ¬—ßquÄ1Öí^Öó“Ü‡øÈ1ññæ&Nlbâ“†‰´ó†€>ÙT·¿_¸¨%÷5�[Ãí¦õ #{Š¯üô*}
+}
+ßmäð&A~ïÈÿðPK
+éL5µÃr� Aorg/gvsig/gui/beans/table/exceptions/NotInitializeException.class¥�ÙJÃP†ÿ±K´îÕjÝp¹ªqÉ… HUŠ7JïOë!=RIÒ*¾•W/|JœIãB­Þ˜ÀÌœÉ?ßù3¯oÏ/¶±D(û�ë¸íÐpl§¦•:‘ª5µ£êú.2>7.üèÜ3‘QMó¨O?úˆ0u£ÚÊi*Ïu¾}H²û†G	©Òz•�>ö¯õ2Èæ�Æ a¼b<}Ñº­éàJî#ä+~]5«*0rNšé¨aBÂAåFË„B©òeô2
+Œç–×«âgLüŒ¬[†Ê�}ü�ì>€o�«Fàß‹›„:%ÔiB¦®Z!3}µ„béHQ s„Ü¥ß
+êúÌÈBúÿã¶`°Š‘'
+’es´ø´Ã™8gì†ž¸@ŽcŽ3°Ìâ5s5Òqå,€±pÈJÑfí�&z	6+·bÂLW•¤šD>¾œw’°Î‘â°ì�Í
+½°]Ú‹a+]Ù'ÌJ`RÍ`–Õ‚-ö³8ßK=båÉ/…%â™ÅwPK
+ ½M3ßQÐX…º+org/gvsig/gui/beans/table/images/delall.png%RMH”asËMWL‚UBÉ<D{ÈCsÚKÔ²‹»Õ.‹º‡NšÂ@Ð!Hðô!ý\Š@ëà¡‚‚
+<t‰è s‹Ö=I	¤t‘Š¦™iàû¾wÞ÷�gžç™ïN½6ÜÙ~¤:+åâˆ}ù“nµ÷‰“]£û~Õ/Œ• �$±={ùjÙb}ùÙÊN*•J§Ó™L¦»»;›Íöõõ
+ær¹F£Q­V…B>Ÿ×ë‰ÖëMx(ßõGóÃÖVóåóû@ †Š€„À‚ q†DÀB qˆ�„A£H€D@m­À
+¢Žˆ`v5X"#
+¢F?Ë‰�	…P£½#3
+£»M‚,(‚•¤ÈŠ¢¨A�¦ñ¢èï¼ÑQ
+Æêì®Ë°
+&’�d--a&aÒPhXH„4ÔV5@Wfš�”5ÙÎÒPŒ”€÷qDvãÅ±ôf
+³L9>‹°†w¦�âX”5¬Äpš½�æ&‘{`¢M¨»ŒÎÝ)‹óâè Žj0>ôCoc¡1³ÌZWËÕÒ¦1€¹Ç~É¼·J),±õ¹ºÑÄQï4}´F‡¼›#jÌ€âÐ2+6€ÿ�ÕS86>>>333777??¿ººº´´´¶¶¶±±±¹¹¹½½½»»»··§¿wŸ$Iâ?Ž‚ÆGceñ¨ëÁ�m´L�ÔFáÌ·ÏäÉäùá"ÜÞß_¶äàÕòÅk‡ýi�…Ç½¶Ù6]©–Ú>µwöt´6.yo[ùJñìXïÇ©‰�ÌÛzoåÏßþã·/�*Ÿ›½’êy‘.%-GK©É\~3°>;´œÔ¦~ödsÀ¯‡¿Þ}wºi P)ÕŠ¯
+7ÿPK
+ÓeC3VÛ„}MH+org/gvsig/gui/beans/table/images/delone.pngH·ý‰PNG
+
+
+IHDRóÿaIDATxÚÅ“MH”Q†Ÿs¿ûÍ¯â„ø¯PN›Z”�„ý¬’¨EDTPí¥ }ë6nÅh%µ²Më\´ŽHÊÑBÐi‘ýŒÎ:Þï»§ÅL%	m:p¹¸ï{Þóò^øß%¿õÉt*u?J&S§a¨^U)"ÚÀ6e2‰ 0‰}ÙÌÃ–-wçAêÄ‘ÃQ6“;~ôØÝËg‡ioÎ¢qŒ  µ-PÀÇ76<…–*“8˜šº}ñaìçDµ.WUâÐÒö©È­‰GX€ØûŽ|_÷•Óƒƒšr‘Äñvý1
+°ò‹ÅÛ€L¥Ê–sc$»¿§ïü¡î.ÑØý´fX¤7kðq}=²½==7®žNSÛDŒ÷_—+ì¸
+ZŸ)V«|X[3ùþ{½míh£ÎÕÍRmLÖë‰$ÖÅ¼XZb3Š^Z`ôæµëÖ H¢µÅ u%up�Äçûiùò
+Qåùâ"Ö˜9›N$NžéëDºº	’Iïw&Š¿iRË“™
+•Ê¸ó~Åvær—Z«oç÷Ž]BGÓËË¬”ËOo2 oVW!�Þ›À9¦gg©Zû~¥TzˆÉ„áäÂü<.•b;—kè0l‘÷xUT•×ss¼ZX˜¬9W<ÀàP áÿ_Nx4ÿáý[} 7ìYàÊ£IEND®B`‚PK
+ÓeC3MK–	{µ*org/gvsig/gui/beans/table/images/first.png%ROHÔQžµ
+WsË¥ZD,H:ä¡ ¦‹‡À–5w©•Å?‡ˆÐ§[	Ftø$EHA°0áÁ ……-�K"rNEÑž„	ÒNBÈ43
+üö½yïÍ7ß÷Í>¨d[;[ [.‡lm÷/³Ë~�ß7Ð´S=?ÒŸXž@K»%‹KŸ6Óét&“ikkËårù|¾«««»»»§§gtt´R©
+…ÞÞ^½�hµºOä—þ^ù°¾¾òòÅc CE@B`AÐ¸C"`!ÐxŠÄÀÂ Q‰$À" ¶W`QGD°
+{‚
+,‘Q£ŸåDÈ„B¨ÑÞ®‰‘…Qƒ�½&AA�JRdEQÔ ŠNÓxQôwÞè¨cuöÖeØ�IH²––0“0i(4,$Bj�
++‰ +3ÍNÊ…šlgi(FÊ.Àû8";€ñâØz³†Y&†ŸEXÃ;ÓFq-ÊVb8ÍÞÎs“È=0Ñ&Ô]Fçî”ÅyqôPG5Ÿú¥·±Ð‰Yf
+­«åjiÓ@�Ücd^‚[¥–X�ú\Ýhâ¨wš>Z£CÞÍ5f@qi™ÀÿEc7GÆÆÆ¦¦¦¦§§kµÚòòr½^_]]m4kkk[[[ÛÛÛúwsnîy’$þÇQÐX4vÙ™;Gí 5948}?¿‘'WÎ
+áþîC%KZ®—.ÜØ³ß¿<�í°ÃæÉr¥¿ùkËá\g.Ý¼jG'ËÅ3#_î=z–È¼_ÜÑËŽŸí¬ÏðÞÏÛû •¶Ÿ·o�š?ýýÍ»Ù×š>¾^ücÏÊýƒÅW…ñ»ÿPK
+ÓeC3T%·*h²)org/gvsig/gui/beans/table/images/last.png]RMHPÍrµ•Z“° ‰È .sÉ[.+ºÔ.‹?‡NZÁÐ1Hð"±u�:A Ltð�A‡:x¤CHÎ¡¨´(OB†éMˆ˜¾™n=v÷½yóæ›ïûfï7êÃ]�Ç:‰¨«:RÅ~8¾…}ø=sîÐQëŸÆåñ¡&â&5skæiëÛò³·;mmm…B¡X,–J¥îîîÞÞÞ¾¾¾þþþ‰‰‰Z­V.—|¶é�Æ=²ŸþkíÍÖÖÚ‹ç™Hˆ”È€ÊÄLÂ¤LÆä™c!R!ò|ÊJ¢¤J¦äYÉFb¤Ffä8;©“y r OØ³–0+³1{öC,Â*lÂží‘eU6eO6x-ÆjlÆž•â¬ÎæìI”ƒ&xIöÞ¨€AÞ†\`©ˆ¥$´D *¦â©ÔÄL<Õ‚�º˜0”As�
+¡�,�RHPô	D
+ðÒ<Æ2UO³ F_ÍÔÓ;h“L›«§•œNk´ƒaa’„
+¡á2÷ lÁK³‚*`bÉhƒå9X…èŠØæ0Á€rÇ#xIa•KZ‚�¹†Ñ¢Y4c´ #Ñ-=g ™D„büÛ<O‹trrrrfffnnn~~~uuuiii}}}cccsss{{{wwwooÏï,,<m6›ñÇqòÜ<OX]îœÂEËôh}Œ.~ÿ,\»4\¡{û�� è¸9råÑÁ#ñm¡ÇOzpÙ>]­
+µê8Q:Z<]x�«óÕÊàxÏ‡ëSË�Þß8P¯[þÿ”Ï¾”WÜ|GW;ZW^Í~üŠJªÕ+/ËSwÿPK
+:—D3û«{µ-org/gvsig/gui/beans/table/images/newpoint.png%R=h“a¾ÄhÓ4¥­B‰ ™ìPÎ%[
+©MÔ”ÐŸAZo”‚…8ˆ|ŠÝ¡p¨PA…":tQœªƒƒ½I°u0SÁJÚlE…óîú’ïûÞ{ï½çžç¹<hŽ�öæŽä ·^«ŽÛ·ßŸì>{Ÿê›Hÿi^˜�’ÄÎìå»[?V^}ÙÉd2Ùl6ŸÏ
+…b±X*•§¦¦�F¥R)—Ëz+Ñfs
+ËoÝ^û¼¹¹öfé!ˆ¡" !0‚ hä�€˜@4®"10ƒ0hT¢	°€¨íXAÔÑ¬Â® F[„Èˆ‚¨ÑÏb"dB!ÔhoibdFaÔ`c·I�EP£’YQ5ˆ¢Ó4^ý�7:ªÁX�Ýuv`‹‰$$YK˜I˜4!
+µÆ†•D
+Ð•™f'åBM¶³4#e	ð>ŽÈ`¼8¶¾„YÃ,CŽÏ"¬á�i£H‹²†•N³·3ÃÜ$rL´	u—Ñ¹;eq^ýÔQ
+Æg€žô6¶4Fb–™Bëj±ZÃ4C ÷Ø/™—àV)…%V£>W7š8ê�¦�Öè�wsD�P$-²bØûhì^ÂñéééV«5??¿°°°ººº¼¼¼¾¾Þn·766¶¶¶:�Îîî®þÝY\|‘$‰ÿq4>;[Oú�´ƒÔÜøØÿüN\9?Z…ûû�Ö,èž­]¼ÐsÐŸÔ×öívØ5WoŒt}Ëeú»S�BrÍŽN×«g&o>½:3ÜU<œþU*îýj¥âl*Û“ž>U~Ÿ;vèÙÙ‰;×|ºwùÜÊ;¸ÔJ/m¿þøÉê¡>2V}[™¹ûPK
+ÓeC3K?�šc¯)org/gvsig/gui/beans/table/images/next.pngmRÏKÔQkÃõ¶"¡¡R�…‡šKÞrQt©•Å‡NJÅœƒ/¾u�:A`LtðP�‡:Ø?à©CÎ-Ò	‘” Az	!búÌtí±»ïÍ›7Ÿù|>³“ã­§Z‰¨£61:…ýx|ËGñ{n¨sšèÈŸÆµ™±qAEnEžÖ±>¯¿z¿_*•Êår{{{¥Réêêêééœ��­×ëÕjuxxØïÞhlÒûá?7ßíîn¾^}ÌDB¤DT&f&e2&Ï‰�
+™�çSV%U2%ÏJ6#52#ÇÙI�Ì‘xÂž
+°„Y™�Ù³bVaöl�´(«²){²Ák1Vc3ö¬gu6gO¢4ÁK²ðæ@êð6dàKE,%¡%U1O…` &fâ©lÔÅ€¡šƒT…ì`	�B‚¢O j€—æ1–©zš1øj¦žÞA›dÚ\=­ätZ£“$<€h
+—9¸e^šý4P3àHF,Ï‘À2(DWÄŽ0‡	”C�ð8ÁK
+«\ÒÔxÌ5ŒÍú £‰n�è9É$"àßæyzIýsss‹‹‹KKKËËËkkk[[[ÛÛÛ;;;{{{‡‡‡þ{eåEQñÇqòÜ<OX�î�ÁEÓÂÔä4]ùþI"¸qu|”ë�@Ðr{âú¢¶“ñm¢gÏ»qÙ¼P«�5l9]9q¶÷[ù®.ÔFGfº?Üœ_o½|±ôŸOËjß­¶þ§_
+QßÛ##�çg¾ Œjc“£oªó÷ÿPK
+ÓeC3zxÇ|´)org/gvsig/gui/beans/table/images/prev.png%ROHÔQMs5—Z$‘°"	lB0—6(rYÑÅvÙüsè´R0Ð-hÁ‹‡Ÿ$AHFB%ÔÁsÄž:äPD¤	ÁB¥7#bš™üö½yóæ›ïûf+åÑt×‘.HÇ
+¶ò/µÏ~O
+œhý[¹85’Xœ@[§º­/õÕ7;mmm©Tª»»;“Éôööö÷÷d³ÙéééR©”Ïçs¹œÎ%Z©lÀ]ù¡¿6^7›ÏŸÞA`1TD F��ÆSd f�J µ³+ˆ:":€UØÔh`‹Q5úYL„L(„í-MŒÌ(Œlì5	² jT’"+Š¢QtšÆ‹¢¿óFG5«³·.Ã.l1‘„$ki3	“†BcÀB"¤¡ÖØ°’¨º2Óì¤\¨Év–†b¤,ÞÇÙŒÇÑ—0k˜ebÈñY„5¼3miQÖ°Ãiövf˜›Dî�‰6¡î2:w§,Î‹£€:ªÁøÐ“ÞÆ–ÆHÌ2Sh]-Vc˜Æbäû#óÜ*¥°ÄjÔçêFG½ÓôÑònŽ¨1Š¤EVlÿ7�Ó8Q­Vggg–––Ö×××ÖÖ677·¶¶�ÆöööîîîÞÞžþÙYYyœ$‰ÿq46�“­ôíù“vÑR›(OÂ…oŸÈƒ+ã£¸Õ~tÌ‚Îëc—oèñ¯î/÷ÙeG­XéøØy,sxðå3ýlW§‹…á©¾Wgêé3ï/Ÿ+×Îž}ØóàÝâÛf¡Ù¸4mÿêÐ½ŸõZvµ:óªŽ�·ŸË=újµP)^ägnþPK
+DM58ÔªÉ
+7org/gvsig/gui/beans/table/listeners/TableListener.class•U]sU~MYH—o(iK’©•6´L?„R¤²Ií–í.n6%‚ŠŸþ‡�ñ"^y�J�ÑÑ�Ñ{¯ü	þ/Ÿ³gÛ´�¶”Ît÷ì{ž÷yŸsÞ�üñß�?8‚OŽzþDzb¦dóY¶Óyi¹¥t`å™vìR ]é—Ò£ê;}›§¬+íXîDz8?%���ÊZI—îÚ´ËéÚuÐ+J§îß(Ðú[wƒÖ[lÏ­C†(xÓy¯_m÷»ŠE@\ØŠËxn`Ù„
+¤rËatöŒ€Yà‡ï9#–+�ôj|	—~è@‚Æ@KÙ÷$ObwÈP÷�¼›cøÙÃ	¬ë.8¶k=
+‰ä˜@,Ã2±ñõXƒ›”ÃPy:/ýQokÎ+XÎ˜åÛê;2®íŽh'V	É1-ØGÏ˜h‚©b¶šØ€�jÕnb6«Õ>[´¢ý”LÚ%�c+ÄY¦^xq%Ó¶ûE'V«Ô@‚U0!ƒ‘ù©`É&’O™6)tÅ‘Ä!�õs„ûŸÌDß#H+ßç˜+,ÓéßòüiYhOä–¬ä°lÃ«>¨®z
+Žì^ià­ì²WöT¶�Ê·¥œÂé8NâEfü©nÀ@·€Aþ>£ÀÎˆ}¶U/ö•ƒÀs /ÇñÎòdO` O`)ë.pp±ÆŸ“·¬²3È@çÐGôY>Ð´—ÒÙÐÉÀVFýÄþJ$¯/uKñJ²È±A¬bñ’Ç7'–@ªôaX%wD__Æ‘–oâ’¾†Ë<¡/§½Ùë8ä)™¸¢Ò™›ÖTøsÒñl70ñºv¹ªKö²tA³nQVÂ6Ïš¸Ž7”ï
+êâyB]±DV©x7ÕŽ©°ý)š’e¶¹´ˆÒÄ-í2Áq¢\r–ò°µÇ”@�Œ�ñÊJœ£#OGà!Y¡ÑÓà;‘qÄ—3&|m,i%™ðp-‹&£fsŸWám—1£<x˜KB¼Ç=uê3ËgZV
+òŽj‡RzÈ²sã¢ÖnàÎ&}ÏJ
+Ç¬èŸ‡I¦Yõgg"·ÒoÒl›r¬ÇòÓý9`‡#yÁ˜;¢ü±�­ãÿZ¬C#:G:i×¨1¾9dÃ7G,ßB
+X¾‰ÞŠmüÞÎ¯$ßê¯1ö-š…ð�|ª)$Hß‰]¡U´`wä6E‹²µ¥¾Çž”xÌ{Õ£#{Œ©.Úê|m0ø|ž|IÊLQX%"÷1´âx£Y3âYÆD¸R´œ“›å—¼3•úm5VAõò(C×nDŸ'IqŠÄ§Ã¦v�Ê9¦iÅ_D/zHµ÷7Äùêøw‚Ëq¼«†3j³†Þ*:Õ~
+çEö!ZTøÈð²?`P †Wµß®ºßh5ä¥Ò×ô^{}ïZ["î�×�¯ïÉ*š”½¡†ÉºõvÛên¬¸`÷­*3 ¹"À—óáã±›àA­ÑÎçqi+U´}ƒf+Â([
+÷	ú
+±ÁG¼Í­¢[tãÝ(ùðÞÏ2½¬¹&ò<“}�Csˆch˜så
+îcŸâ*>Ã5|�øãø	þ¤÷ßKÿõ/GO“b;n‹8"ÁéÒÍaÂÙQ/Ñ3[:\½‡T#ð>>ˆJçÄl×‹dmX•yÕ'æªO�âÃ�â£ÿñÿPK
+ÈR$5o`k¨M=org/gvsig/gui/beans/table/models/CheckBoxColumnEditor$1.class�QËn1=·M™d:�4@¡ÐÒ‡²Hƒ¨›â)DEBRQöÎÄM\&iì„ö³�@ |…¸v³B‹X²ïÃ÷žs¿ÿüüà{„GE9£™ÕüNµ(i¬pr�+1)†*·¢7VÙ§×ÅY¯È§s4Ô®([ÝDhœÊ™¹4#ñ~pª2a™°¼ò³j¦Œ¯2§“jë”Qe„Â7Ö¶uÈôéBüÏµãsãÆÊéŒážk£ÝÂÓö‚xû}B¥Ç„åö~?AŒ«1*¸– Bµ†%4õTõn:¨ò£G$4Ó"“y_–ÚÛsgÅ7Gx²X)­.7W—afTyR”5$l·ÓKÇzäõPþÃ…è"Ü&Te–)ËIp«16p—°h›ÿ#&ÄÇÅ´ÌÔí[ß¸ŒâÀç’·†×ßË¥µÊâ�GZ¯ŽoÃÏ˜e
+þ,ñ�±ÊvÂÚc¶ƒ§óõÎýoXûbš!Êÿ<8×YKXzï
+ÜdIXÇ­9ÊK–>¶ÚùŠµØüCpÝ€±~7ÇðÚî…ìí�³ƒÝ�u�4ÿPK
+ÈR$5œÁšI3;org/gvsig/gui/beans/table/models/CheckBoxColumnEditor.class�TMSSI=ò1ŠÄ(u`P“y~#uBü ˜Ñ#U°{yé	Í¼¼¦^wýþ­ÒP%U–ëÙ¹÷w¸´æv'LX±È}·»ï=÷œÛ}óï�OŸLáÃ]6�æ¦dÛÂ©s7PŽvë>wZ²Á}åTÖ¸÷Ï¼Ü®H¿Ý
+ž4„–aŒalÝÝt·µ%‚¦S®+ºž®pßß‹`˜ØÓ…ýËØýa1†ÓŠ‡Âõ—y¨„^U3°E†“(ízÙõÛ<öufúûö·y0œÐk|�Ãhm•Å½ƒC|NB?dÈå—¢’”Â)'ÅÃÙ#8“D#)¤prœc˜>VŸ&o&ðÃl®v¬ôR~Ù°=ŸDFÜF£ìiêPM(Í2\ÊYñŽ»¥¾Éíüa!~Å˜4Î0\ÑnÕyhï�!]“uÞ¥þÓº·ÕkB‘ècÒf¸ÐäúÀEWdkCÄ�áQîç³‘¥®ß¥�—õuîéÒjµšïËû€ðÏ)®d(ÞÈ@»~ÙÍ e¡£¹ªQ|9£8OMë£ÎKé“‚®1¤êÝ…}Yö}¬¦pSIáÐ#ü%î	Þ0 «ô&nÐÛ1ÝíSæ(„&ëë¦³‡1$…êã²UŠ
+åyUò<éÓ
+ù–RYõØ2œ©’@@iêp¿¹=™\þpÑfŒ®æÍcºeÒ|
+ºžÇ•š¼Á0´ô: �ÒÂ#Ø¿EÈ
+&	ZÒrcƒ7RXèqL.Évèñ§Â¨ÏuùS¦>õ·Ðë«ø®R\a‚†(Js§ïy$0HþýE�$�¦Œ|sN“Iö4­^Ù50^ØAº°‹ÌÊÎ~ÄháFw‘]¡í‹üöÞ‚L�MSp�l‘@®c·q‰vR]\Æ$}®à÷^‰·”™°%s ƒBñŠ³q³ÊÆ;¸ÑÁã¿;Pâ>±Ÿ%¦%RòÀ–XèÂôJï.îõÊNS|Äz3”5`½æ,Ò8åÏ!FX#xˆGÔ†?PîÑ›¡hƒ1¼‹âŠ!ÒAeOútâö¸¼Oåp�Â ž¹žY:ì
+�›ˆX¡ƒÅ÷ ˜…ˆØßskkø“¾æn²"ýPK
+ÑR$5Ói–"`=org/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.class�RMOSA=—¶´Öò� ß
+¨m©}ø‘¬1B	±¤Ñ´‹î^Ë¤|�1ï½ñŸø'Œn0qateâÎ½¿Ã¥ñÎ¼
+X¹˜{ïÜ¹sÎ¹wæÛ¯�Ÿq�°¦ý–Ó:$Û®tÂU�º
+O8½/¼À)·Eóå¦>.k¯ÛQ»Bí_øIáÊ�{è;Á‘T-gçOa1ÂÒßGÞscËÂóÎ0„á@øÒõjÂ¤V/*[Ú!”µ
+BW…5×ëŠÄ÷õµŸÇ?6Aè(•bÙ\�/³Ê2H#Ž!ÂPU*ñ´ÛißF«ºÉ.Óð¾—Œ‡mÖ«ÿÙ‰0×á¹žÊºóJ+¡BÂãlõŸùØÚ’Í9žË™g�ÑKõz¥’‹ÒîQèœ"0Åå@„{Âã*±Ïš³õ\-ƒI\M£S„‘3¬M­=ÖžÄ!Óˆ6vtvPõæ0ŸÆ,úDûòµV¡ëmx²¥:Vp<[1ø×±hð—‰0ÖøE�ðñaD0z¾'BZgÊ©NHµÝ`[7»<õ˜¯�8Yá×lÚ©­Ø� ×a¬z®9ƒº§»~SlK#kæâ§)š‹ÜEfà5�$Rì/ñ¯ïƒiŽÌ�a;È‡=±Oä?`ø½-aÛo“‹e›‰
+0†qöüñ1Ñ»ü–«Sìo¾"•��`ºð³o0YøŒÙÉüTò×8kŽ–óïNÑçY�g‰+,«ˆa–1�U,à–qß²îFÈ=VÝàE6º…,#™(Ç(1­X<p›Õš¨ÈQ?#2þ*sã
+wPK
+øS$5¹ý�T¤ó4org/gvsig/gui/beans/table/models/CheckBoxModel.class•TßsU=·IØÒ_�
+‘Ø$’-�‚4¥5˜¦JJ0åÁÙ¦—t1Ýuv7¥þþ¾øŠ8GF}rœñÍwÿÏÝÝICšÇ‡ÜÜçžï|ßwîþñÏO¿(bS è¸-£µçY;–±%MÛ3|s«-�]g[¶=£´#›Ÿ/9ûkj©AÌ>7÷Ì}Ã{aÙ­»,Ÿ™�¶¿¡0&pù?ÉË8!0áI×2Ûuéz–c?./ˆ‡£%Çö|Óöëf»#.Þø{ÿ¯%k:íÎ®]5w¥'püiE©2Ú&5Õ|—ÒnhÍ¶éysó“}Ç%µÉÓ£µ/mGúV³‡¼*päŽe[þ]�)}g®./Q´À‰§ýçë[ÏeÓ¿­!+�×‡
+ÙÊÕÓÈàd
+qœJ#�Ñ£Ái�ñŠeËjgwKºAI2§Éâ˜,×ÑfÜß±˜û|åÿ5‘©�µ¤_
+êƒÉèåÜ¡¥1†q%é¨‹ê°¸ä8m†HbŽJîh¸Äb>s\Õ�‹ú�‰£#—ÂeäÎV�à˜ÞZq:öö×u\
+ï°Ù˜�×y¡2ÕPH1­5éyfKõGÏžÆ<®¦`à]�ì0qAG®¥pï¥1¦ƒî<H?D&±(p~ “ªã‡R÷›òŸ6ÖÀbúK”©Î“¡‹ïû'õÃv(—Uø{ø@â¾@bO¡UóAbLœ#_=knoW¥ZêÊ ƒp
+å¨ƒánÔA
+ÑDúf˜ôZ
+T�ÄÇ!å#áÍgÐgÜG¨)�aÙ^™VU57äA5§ã6åŠØù
+Co³Òq>ì#OC£>Q~§F�â��JÉý	 XMö­œepœã	®êˆñ0•�%~ÃÔH¡‹é¼øgòß¼33Œ\À1¼EžYd1‡³ê^xç¸�`¦°‘8O¥aŒ¯¢«gâ_cîf¿cæIæâ�(4¾Ãì7�+›Ÿý€….®ÿúòn†€[!àæ €d£4�;ü8/àÿC‘c¾�Ê%ú®ö®â}Ü
+Ò@‘À
+&§ÒKæ3g»X:H;Ü6Xæù€-âzlI”°L5{@Þ‘`¶ÂYŒ»«ø0Š°N…šÎ'~ÆÃFì5*�XëµF<óI­‹Çƒ•^à…k¬òNáz:D¡;÷$"¿G/¨³ì0î—=â´ØG–í‘} ÿPK
+¼j5!Ø3Ž«-org/gvsig/gui/beans/table/models/IModel.class;õo×>=NFõü¢týô²âL Yš©Ÿ”š˜W¬_’˜”“ªŸ›Ÿ’šS¬ïé¢Ù²ËõsóÒõý“²R“KØ˜¸ÒSKüRË}2óRD54£}Ð•Yç—%§ºeæqCÌÔ©ccd`b`aFFV6‹�H21pPK
+ZN5:YVÍïu5org/gvsig/gui/beans/table/models/JValueSelector.classÕSMoA}n6IÒ¶¡�Rhù’Ú"2â„„
+(T+.A‘èm²…�ÉNµ;I{äÿp�S%�àÎ�Bxv!m©ôÈl�=~~öz¾}ÿô@w	Â¦#1šfšåD‹¡’I&œ%ÆvO™Lì¤™¨¾2*v6­‚ËoäTŠì@'#±³mÇû6Q‰«¢D¨<Ô‰v�¥�Í!Øf”Ê¨Ô`ž°éD½˜Œ‡*}éËÂÈÆÒdªýù§3p¯uFx�“_—ÐˆS%�z¢¥±#Â×�ÈÓòÀ‰Õná3’è»”ûèîž»Ô1®š2¦x;m“HgN%êÃ'lF§æZ4À
+ÕŸÆjß'óDVf¨=%÷ŒÊ²Y´ŠK„Î™]üö?—ïÿŸ
+ü.]®£…eÅ„Öß¨ÊN»b¹þÀà “•†ów	Ó“„yØöí¯ú„µ3š±LbeŽSj~ýó!0VßNÒX=ÓžÉÒéÑt<2nbŽŸ…ÿæ@þ•°¬òI°&Öå­#Ô>æá:ËJîìàËFq�õëšXä[Ù8æ0ïØïuø­W[÷Vï·ƒv¹]9Â•3Ì&J,{˜Çs¶{9v¯ÈÂU´sr!Vp-¯b×9Ó[7¸r)·Ö°ž·rCëÌÉ[·8Ãó½�WºóPK
+¼j5ÂF�t¯Ê0org/gvsig/gui/beans/table/models/ListModel.class�TMsÛT=Ï‘+Ü|¸ùh‚[’Æmd;Xi-%m¡uêà¸¥N]L‡aGuÔq$F’Ó0Ã’?ÂªÛò†aÅ0ÃŽ=?�5Kà<Iã¤‰gZÏøêé¾{ï9÷¾óôÇ¿?ï(á�@ÁqÛz{Û³h»–¾n¶§ûÆzÇÔ·œ
+³ãéUËóWåR�˜}ll;º÷Ä²ÛQÜ’ùÈèvü5ùÆæ^Z¸'†=ÓµŒNÃt=Ë±ïW–ÄŠÀñ²c{¾aû
+£Ó5“^¹üÏÎ_7!�²ËN§»e{Œ«(­Žáy¹�‘ªä§w²+Kç¢À±ú¶¿iúVK`àªe[þu�qíá�Ðºï²ŸÅ|C Q&+�Ñ‡÷ï¬?6[þ¢‚QNLë·ÕÇ•o¤1‚q	L¤‘ÆñcˆaR`¨jÙf­»µnºÁÌ2U§Åî
+Î€ï‘3áoZìo¾úê'Äf_kƒ©[&“OôiR`°múáü‚±Y­’?2¸41$)Ïò|äfIn–Â*)œe#‡RÌñ,9®D8«õ™p˜<
+*4NïoÖœ`›ÚZvºöÆ-×u\o²¥ý˜µM×y"¡@PÙÕªéyF[Ÿ–?
+žÆy\P±€‹cýÈö¶Ê›qI`úÓšã‡TvZæç>eªàÊ�¢R=3Tè
+_`B;ª„JE–^ÄU©…kÉm-ÏýH¨@œMÑò)Wcc£fÊWMjsøp¸‚[/xÃF| €**nËNd•{²è‹¢? Ó*V%µU×¡8	§GMXá˜I©„�iù¾�jÝéº-sÙ’Bìé³$C1CM%x‰Çåå÷(•ÞHòýÃ�¿$W#ÈÐžàÛÇÌ‹ñy²/îý†±XqW®ÀT¡¸GûMPëuÚq€3¬ùóg1�²ôŒ‡ù8…ÓAý“ÜŸfuAng"”O#”™o‘kþŽìƒÌ¹Ÿ0ßü¹§zŽÒ'Ÿýˆ·vqù×gò{DÒ£¸ÁÐÌ€šéAÍà]ÆJ(Ê!‚Z#MI4U(fOíâú~j�]ä�æƒj…0®W-…÷ð~€–Â
+Ö�«›\Åé-c)Bø’#ŒËüÂ÷˜úËÕøµ§È³Ïq»™YÙÅ‡õ¯b"+7¿þïïçygŸÃûtÖ]`Ýó˜ä3‡¼¶NÓaåˆSŠ¼‹�ˆ«2ó^ÀI ÎC&åàè�I…4šñÌJ½™�&)ÍÍ³p8ÆKH:LŠ@îQ�ÿPK
+$R$5¥–@‹¼à2org/gvsig/gui/beans/table/models/ModelLoader.class­VÏSuÿ<Ø°t	?J¡•j¥´¥$„’¢Bh¡@©”*�Ø@Á.ÉK7‰M6^/^<xqtÆƒíLgZg`”ŽzôàÐ«w�êûînB ¡¡Œ™Iö}¿ß÷>ûy?¾ïåÅ?¿íèÄ§„ŽdjÅ¿²žÖù7£û—45‘ö›ê’¡ùãÉ˜f¤ýwÄ#˜TcZJêÖÔuÕo¨‰ÿÔÒš5e”ËÆÒ%´…Î†?ýXg-mT[V3†9“S*¢†žÐÍë„r�7L�FøÄ
+*N 
+¡6¨'´ÉL|IKY–„ú`2ªa5¥‹µ³Y1`Á¸QƒJjÊ\ÕÓ„Îàë8Èœ$ƒ%BÀÜó3d¦Ø‘À|á–wŸ§·-:‚J4î‹”­.ãsÕeTƒ©5æ¿ÂeÀ;çFÎ*xoNõ´iÑ«Ä9B{IWrú2š	§=Å‡E”ZœÇŽf!}—-ž")ÌË��rYA+Ú
+3)M›Vczr8cšÉ„CÙKè.I¹˜©Ÿ‚Á¯fE3G’F&žpJë²Ç{³<½€›«Û/Ø]%\(­/ãŽvî]lã/ñ~Å{è®Â»è!\]7mŒi-ÁE'îÕû
+úDÕž{å;epmÕ¦™¦fYc‚çÐdåëY9»†ë
+0H8å›1ÝL2á
+†áj‡�½/òó*.¶–Åd7“1¾&…•ó¡«$¿Âª¹­`BTMõÈª}8œÜpàîp(	·ÏFÆ”‚»«÷È†s:­ $BTúìGÈ†xVAXØ×YáÛŸ{G‰ÏA3s
+æ…OƒG³e:ÉTñz]àFé™³»ÀÇ
+ñ€pí˜¨Y—D…¿ÃGÃ	iwÌÃj
+–ØÐñÁ²¼VèÊ·[P}aS%TE-›I5®qk?U¤ñ2€iO«†âC£"ê4Ÿæ�‡@:Ç¹Ð¹eíueB[ÑîXlô*¡d&ÕÆtA¨.ov
+{´ðø•ø?+ŠiÌ’Ä3Mæ/÷I^yù)>.úUÏX(ƒ›~‚�%4£ÚÚ593??…¡«}u{fÖ¦mâ¶põ–ñ)4ØÆe/–™ÐßïpûêOoá­o™À&Múêß¶M;8éØÆE&µƒÖÈsTmÃÃÇíÖqhâøÊþcê—Ê{\?Áwe]�®_Ñ[†~©IÚA_dý[ò0Ë#[¸õ…‹]»Rì‡ÿðÕ�g�'pðÿžÌßÀ8Ä`3p˜å�
+€#°¶ƒy|¿X@–ç!.F¤m¨d”!c)”ä<¥eÞ_qtt–×„Îf.¿Ïy˜—8¿­¨EçÖ‹³hç•WyR÷qaŒ²4….LóD½Ç£UC7¡ŸñúKôãkð=Œ'<ÃžbÏ0„]ÜÀžCòú%Æðnáo„q’0A
+‚t†»ÿEL’Ÿ×„h34…YšC˜¸‘êˆÐ:æèsÜ§¯¸¯}‡Eú¬ZüU¢ÞœZÒC¢>YŠ#ÁÞ�¤o�d½ræÝË|S\£³Ì>
+“køinïçìóröHÎí-`ÜÑ#d°î\–Nç²HœœÍwe5ï®H¹»òØÒÚøPK
+YM5<>­Li¼7org/gvsig/gui/beans/table/models/RadioButtonModel.class•TmOÓP=—mvŒ	8ˆ¼
+Øm¸�SQAPæte83ø`ÊVFIiMÛþÿ�_üª�‘¨ŸŒ‰?ÊøÜ¶ÙæXbL“›{ŸçÜsž·Û_¿¿|Ç3†iÝ('Êû¦BkEIlÉ’f&,iK•{zIVÍÄšTRôÅŠeéÚ
+·`—v¥}é0a(ZÙ…ß—·¥Šj­óƒô0\þ'Úû:ŠºZÙÓ²Òžl2œÝÌp•„*‘FÎ2Hj–A(ª’iŽM1œip/q#yÛs¯4kG¶”b
+9ÍpjNÑë.C¯Ø‚3’gð.Q=›�þÕ­]¹hÍ
+èfˆŠ­\-L‘|§
+À‹³Að·£
+a†®Œ¢ÉÙÊÞ–lØ%beô¢¤æ%Cág×èµvÊ=™ùï¾Pö�eÙZ²Kh×ƒòÓ‘U
+¢ÕÕ�;ãÜ_Ôu•Tü¸@Á6Ý0JõÜÖ
+Þ†q±E[è\ÂX1Î0\wfuÛMã²¬W´ÒÃÐ
+—©ßuÌúŽ¡ðdD”ÖŠlšR™·HŒœ"†É¢¸ÂnœÝ”D"¦‚:é_eè®§ï ý¸Æ0Ò”IV·œP‹òKKÑ57�KSt¦lå%µ"/X}âÉ‰H§¹ümÌò™˜cðís4ïÿ	(ƒ‡§•�­T*ee~ùŒv7ÃÜw;èXÝ
+X¦97œ¤�…	?;”k\áï—Ð0»+Èò8W�²“<Ÿ[^ÕH‹Êé£(/+|xÃÍ3ç70JÅö‚Äá¡=	ðhhÉÖØ§`ÃÉG»Óè¤µ‹NyûÐõø~àL[¬Šž(ûHç-ïÉÓ†>ZC¤G?º1„0†qŽßsn“õ¼ÍÞkG@½Ã¡�×®FjÀûcG.üÄàóÐÈgL>`ø-ºŽ!n¼ø„xÓßß!é®;€d3€Èè@’3ô—MRïgÜ ;Iô$|ô6&è«˜ª˜ÂMÜ²¤™q\§äxzþhlp¨Š;õ´öí%5i³E\�Í�»˜'¾»G¼mön�v².bÉUX%Žê�ú¾âAÁsŒTÁSÅ£\ÁÊäªxÒ\é)º0MUž"Ù¤-t\i†§XsÉç©÷ÜnÅý®Fì€fÈÂ5²œ�ZÿPK
+?5.pÕ6+è7org/gvsig/gui/beans/table/models/TableButtonModel.class•T]SU~ùØ�¦Ð¦…jCi-PòI�RhÁjùjƒ!Õ†ST\Â¶²ÎîðŸx©WÞVÅÑQ¯g¼óÞßá¥ãsÎî„4dÆq2ywÏ9ïÇó>ïsö�~ü@ºÀ„eïæv“¶aæ¶
+½îä\}»fäö­£æäÖåb¡áºV}MîhC/õý(çšõ]ß}Éx¡7j®r÷£ÿ™?ï;‡.8†mêµ²a;¦U–_«ç­ºãêu·¬×FèÏ{3ýµ�sU«ÖØ¯õ}Ã¸´Y�¨r5�˜J®MhsZµ¦;Îðm�‹-Ç‹r“§Ý¥ÏëîžášÕ¦ç„@xÞ¬›î�þd‡œ©²@p‘ .o¶ž?Ù~iTÝ9
+}éd§£[©rq\‰"ˆ7bˆá|7ºpU ·`Ö�bcÛ°¥ñ‚U%9:)âÚßº{&{Ÿ*üï9²ûž]Ã]T*>ØO2Ÿ:ÃR=è•¨n’c5÷¬š{vÕËÁ0á¶Ei¸EF_X¶ŽÀH²�*%‘Šbi�ÁÓÃ¢¥Ž)°«QßY¶mËÖ0æ£ñ|Ö÷lëPv¨!+eck†ãè»rHÉÔÙâ1ÜÆD9L
+ôu§Ær'ŠqLÇpÑ#`†•žYé™õ<#¸'p£­“¢åzP�ªÆg.µ¬�tŠLä):ÛØ·Œ§Ö!çGÆ©§¨cxê~è
+\Iž•I>/=Ä‚Ê¢"XŽá¼+×�¶Ì:�9¤TÎ$ o‹GMÑ8”ê’�§:HÒï²uOÃÊEíê‡nŽ¢‘#ø€7ç×—Qxý�—°Þ�§xÆÊ“ÓÓlðbé;;ªí×/VËU¨à¹ìh“ÌÔLÇm»ÕM€Ñ’Õ°«ÆŠ)ï@_»´³2oqbA~%Â´W¡‘1RÏï^¢üó¦A²Hmsÿ V[Va¾Åq‰ö2Weô§ÚoèïÊœàÍ´ø‰t†æ•w€6ÎjÀÎá&óÜBå|MÆyÑÄu•½_!  pƒH½_ø5
+‰àWˆ$´/1|Œ¡ÊïØˆ�ü€Lå[}�ÞŸ0þ|ë{L�àî¯¯Ž1ë9Ü÷fÛ˜‘ßÖ�Çf)™yi«i²‘áo¼e¡‰²€·ñ@¡¤Ô|”GìPz�¥E"p‚¥t|%ôŸ!ÿ–O‘Ðä#q‚Ç§ürÀí$¹ž"²;¬5M¦îÅLŠ±&Š1ä}¼>Šu¢�LGÒ™�k,sZ!ª¢ï³ÂœÊ–öüšÙ"XÅ{Ì"ßdÞ.õVà[€»k(úòJ=ÀõÈÏx¿8F¹T	ÆWJ•�4ai´ø‡¥WÍÂaå¾ ŠÆ¼P¿¨�ºöÓnÑO–M{y3�IæÍiC™m8¦Õ2Údéµ÷µB¦µ°4ÚìkãÅÒ–Šùô_PK
+?5¼=†uM	Corg/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.class¥UßWEþBãm
+­´µ†´°ÐÖ
+P!P
+F‹?êf3„¥›º;ü|ôÉã_àk=§¤=zŽÇgÿ(�wfCHH r;wg¾½÷›{¿{óÏ¿ü`?2Ì¿h÷‡žeÇÌsËLiå]n–D�»�¹¡^2Âþ|YJá‘Y.y‹G
+?Æ0¸cíYf°ïxEs.Hß²e†»î¦�a¸ºýÖÁ¢×Ì´ö¥É÷¸'Í9[:ÂË:�ä'HŒÁ°Ë¾OgšÃùlí½“fèÈkž}Ùú¨Ë!ý´r¡�™m!N.®6Â2u‡Ê[Á±\Qlò¶ ·	Y\XÚ`H„D\‹×¥O:ëÊ/�–'s–[æ„åt×Nô’ÛiÇsä,C{r4GJ¶�K¸Gý[P�ájè7ðŒshÃ Ý?à2ÌRF”J–W ¢Éf*£9ïaX}>ÂpÁ*SË0’Ìž™|íâ|¨\\ãÎ¿Àý5Ëñ$§¸‘ä¦Â$1ª0)†þSóÃÍ8ÆÔMºÐ­nb2ôÜå¶M!Ÿéútb’áò±<�É)Ï\áA`yÃm†X‘Ë
+~ ®·ºró–��q7Ž;¸§DàsKò…juIÖ©´+<JAºÙÅæbyKß–ß–ú2ð	>U¹"«çU®f(WYÇã«åRžûº�”ü„m¹9ËwÔ{u3"·�€á~ö59é¸ÇÒ\×¸¿%ü’*öÐ)rYTvZIúÊéç1,’‚ŠMÊíM¶,ÚçxÇ,Ñ7'OcxD½Ä_”-78¡üÇùn•M+X�#‹ÇÎ!®Røµ¦°e?/ú¢¬b_Lžœ$JÌëØPbþ’¡“ðzßÀWjs_ŸìÒ°d1l2Ä	�s‡²jà[Õßà;ªÒ–ãs•UÂ¯K±»Ëž©¦oÃ£È�æZâ(Ç|äa«ÀÄ–QuÎªyPÎjãµ:€3\M�@ÕI�ó¸Ö¤Ÿd£452Ýìgsii´U1t7^%—!*C‘ö¶rNÇ{!ãD+¾q'XWÓBÏFùn÷Å>Y$‘[K—0ë¢ìÛü�£‚Ÿ%ðqÃTƒýw Qúy$©@ýÑ¬Õ+M*½RÒs�)€ì6ôÑ—LMoz¾K;?ƒ~i}”z�+©?1ðô5®b(õ
+C‰¾
+ÞWFª‚�ÔÚ^Á
+ÂŒfü)
+ºõS²&Rì
+¦1û»tŸž#D˜ �“Dæ¼M³ý
+Þ»dÝÃ2¦ð!Œ�æ0O+CUz?‘§6Zg}7*X®`íW$5¥WxRANÇÕæSZf#|Od­ßÐ­ÈMTÀñä˜Ð ÝHSÀiÊÀœEŠ(LRÈi,j2—Â€U2ÊÚB‘è0lÃ©Ò2õ;U±_ÖÜwèÍ‡uwŠÖî´ƒçÕ�KºtT¦ÔÍ¿Q"~ê>ÇNâ:þ
+¥nU;š
+Á5>]ð ´ó.ìâ…FwÁG€vmI”)áÊÚ#+JÈ}íûà?PK
+?5=OÍßyEorg/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.class¥TßSUþnHHK¡	¡"‚ü¨ífI»j+¶)$544MbjãÏMr	‹ËnÜìB}Öggžê?àk�±©£3Ž>9ãåxî.Ð4axqîžsî¹ß9ß¹çÜþýí×±ËpÇ²›jó ­Óêêj�kf[u´šÁÕ}«Á�¶ZJÖ2,;ã:Že’èî›En6¸Íí0ClO;Ð«íCÝlª›­Æ�0ºí>¨�Æ
+ã@ˆaÌ5ÛÜàu‡72–Mv†©B÷ášgUýÍ4Ã…^÷¨ÞöEÞ``U†ÁÝÔ�U† \MVè—%:r²"AÂhAŒI#2„b†|i\BÃBš`jsg»¥}ír	¯`$JÖI†Ñ‚nòî~�Û*@ÁªkFE³u¡ƒÎ®ÞfX/üÏÝé&wú*—µö[–ÉM‡aM~©Z›žoÚ³©†F–íÚ•+]­æóIß¬:ê)‚¨h—•	cŽa„èg´úWMÛrMªk\.¼ì•Å\ÀeQ˜7zûÀK"Œ«”~É»0Ý2»cr²QBJ2&»ñüëÍiuÇ²¿	ãÃÅºÍ5‡oiŽÃOú`IÎÓ×—æYÍÔuŽ¢ªx3J#ñ–é'p3ò9m(ÈßÀMAþ*V³»XÞõiÜ"ú/î¡äØ„“qwvDç/372³šáòåÙVr¡×=í·ìjiÜ¡Î¦@EÑæÔËy	ëÈD1�,mh­e�’On¹/(1}9�´ÁHQÌ<Cê¬˜çÜ†¥²asnJxà§±Í…0ÄÈ|èÛŠäèX>Ã¸ÜM e|$@+Þl;eË2Êz«Ì;>ÔxÄrüÑ?«Ýi».n[Œc_ç{/DéøÑ |vµvÎª»4Ÿ¶uHO•a°îÍíšü0ëC�õ¶•,×®óœ.2Y8v¯‹Ó˜£ìƒ  w—žˆoèøOÏ
+­Ú—0BëÒöHÐFyŽ‹
+{†¸XJð.)Sb	vðêÏÞ¹)áG¨€BQ®îUÂ�Ç"=Z)Lã^£Ý	‘ô/îŒ™¨ãuÌúqY‰rY¥þÂü�)OSb~9¬L†;¸¢ü‚KO�›~‚Ë$&þFL	EB‘ÅR¿âm‘Ÿ0w°ôæHŠw9ÜöâÂ!NÊïH?Š½÷køn÷b›l	åƒn¥DJ;¨*OOÉV� õQ¾Id—0J³–À-"y›ˆ,ý4Ñ^!�4í®Ò„¬á­[ÈP›­ã!îâ² �o±‰ïIþ÷½"}ú§E:Â'ø”Š#¤Ïð¹WÂ#:=ì]å¾$)èIjyR�¤AÊê;4À)K†/÷æPK
+jM5¼·ãNÅ[
+Forg/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.class•VÛWEÿ
+$
+MiSz±åR°Ò�V–K©mƒ´h
+†‚B)MÕºI†°¸Ù¥»›€÷»¾ùî“�ú¨çHÊÑs´ÏþQ¿™]’@‚±œÃÌì7ßå÷]'ÿóûŸ†ðÃmËÎ«ù’£ÓZÔÕ×LGuµŒÁÕ‚•ã†£.‹�%nð¬kÙÓE×µÌ„eælN'JŒ¡gC+iÛª³¥›yu*ã¸¶–uÜ0öxZújy<Ru-[�¡[°©Ú–«ò7]u*ëê–™Ò—›œXBÇ²EÛ¦»e¾í2DRRÂÐHí’k“ö8Ã‘ŒÊp*UkvÎÃOí%Í(VÜbI5
+ÄÜJ­ˆ0’Ó5ÃÊ×™‘dbÌÎ$—ÉVÂ2W3]©€ÈœÜmÃIÒ0¡›º;ÉÐ\¡‹YRp
+§Ãà,‘GÇÇÛpNÁQ„�¢]'øBO½8«àÁ×ÇpÜá®»„U(hfŽ`FëC5¸¢à%\â/3œÐr¹ýgè÷¥K‰Tq	Q¡bÐ³;mÙ9n/jºér²ˆ¦Ïe\<¯0¨ÏëÔ0†…íxAø7ÊÐáˆË,y¬›ëZ®2œ©*ÖG®›ê<w-Ï�®1„òÜ/™�F�¨')¸Ža¼Š›JÖæšËgüŒÿUŠï¦eR`âõ*ÒÏ]VM‚ý¿®ëý:X›
+&ðšˆé¤‚1½M1Mé&¿W,d¸-[S4—•ÕŒÍÖÅ·O¸ëºÃ0ÝÜ·&³ƒZ¤C“,r{Í²¢Zz©·YqŽ‹69wø}¯S	æëJ¿3Ú0¿sx#Œ$R$sð6„{ÔŸüIQ3œ­³�Ù ‡âƒi‹x3Œ¼EÕåxÕ¥`Ùk§ûCMt ÌPVí$©}òbæ=$õr^-¬1\jR¼¾y÷o‡‘Æ;mzeøÐ¤I*xŒ÷Ä•FW„{o.E“¢O³È…±
+~pÖx¥•XéŽNž(ÐE_¯cƒªeM·¹H-ñ/¹Öæ&Ï)0Ä4kA�Låy
+Š6…¥'"¾É†	zGÄ—z–‘T×U™'ýÕ×Ä·´?ó~êÎ‹a°ÿù©ô1Ã­èþ®‘œñz=éäìýƒ€!èz½ÒÙH]—<t‘FØÂºã•„h–¦hÙÖ�’T�YÙ>Ä³dí,¿£#›ôÙ�0‚>ÊB€þ� 
+AzÿéM�ø£7Cî4[åNó€Ö.œ {BHçt’$­gˆò#é`´ß�=Å‹±ÈùtÇþ@ïÃ§¸°ƒþØoè�t–1 ±2bbo-cˆx†‰gdc’ßE<@§±£µ{·v0õ«49Më�?Tˆ•£#D%êUÜÀ8µÛ5$ˆKña³´3ÜÁ]ìÏh%}Àj¤óróe,ý€	�L–±BÛÔ3¬zÞ-#SÆš ÊxŸÐ›?áBÌç)Ãþ~EánU¾Š·ŸÂB¥à&YŽÓ“7�1LÒ×RÄñ€Ð	¬§=<>Vq*a‹Ð2lãµ*¿� °òKÅÄI¼[ãr°âò‡øÈ.È<SNcWžaÁ‡[U–öS„v^*šô˜+xÚñ1>‘ÊÛñ)>“Üíø_P$ÅéK|E9§¯é$Îo¤îoÿPK
+mM5ÒI�þ€Horg/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.class¥RMoÓ@}[;ukB[Jù*_¥©c•qM…Pƒ*‚,*‘*‡ÜÖÎ*uåx‹½NúøüŠr)W~b¼ŽZ H¸ÌÎÌ¾y3óv¿ÿøü@Ã®LGÞh’EdóÈO2Oñ ÞXEœyEÐ±•Lws¥dÒ‘q>NÞŠd(R‘Z`µ#>á'^6�’‘÷Úç�ˆ-¿æK^MØq|APa˜ß‰’H=g0œfŸÁìP÷*,,Ø0a3,fBíów¹ KgÐìWQÅUsXbXö£D¼ÉÇ�H5;ÍãË�Ç}žFE<Kšê0Ê^úÿ¿t›a}$Ô¥]:r|,‘(†Žÿ›(ÛÖ9/æ”ÙŽˆ¿=t»Í2Í§Ê;g +àžJ‰ÅÂ
+‹¤8'ÔbÕñÿD´enâV¡Ìm†Š*W¿þ·YèzÂã\Ëui,;ÊJ	Ä��
+y¶'Ãœ44R9¥d—.ÔÂ¼'ó4{QÑ¯ñO[EG<¤1M}È9:éÁÉ.R´£cÀv?áŠkžaù£Æ¬�]‚Av“*„ÝÂ5Šª%5Ôé¤�±:czOU�õíoXû€Š{ênÅÚî¸§ç”5"ž°EEO‰ò™¦}U–Îhï.Öu«:îá>UÞZÄÐÞ#òLímà1*ÚÛ$ožjºÛÖOPK
+¼j5î1E¡­wDorg/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor$1.class¥R]OA=
+Û.+-UñMJ�}3‘°ÁÄd£FHß§Û±ÙÎ$»³5þ,
+Ä€?Êxgè“1¼t“Ùû±çž{ï™ýýçç/ûxN8²ÅDLf¥æw¥ÅHIS
+'G¹S;Vy)Î¥>É±¶o*ç¬Ø¼ššÓ±v¶èô#¡u)gRäÒLÄ‡Ñ¥Ê\„eÂvÈÊ/N¨™2NœdN[“êÒ)£Š+„Uw¡ËÎO‘.2ÆkBãì«qÊéŒYµÑîˆpÒ]ŒvoH¨
+GXîî
+Ä¸£†õê
+,¡Eh¦Ú¨÷Õt¤ŠsOLh§6“ùPÚÇódÍ¯J8^h¢NŸWmÊ äGU|¶ÅT�	;Ýô¿ZŸz?lq¸H×	u™eªäËJðk1á	a%t#lÝÖŸŸÙªÈÔ[í…Ø½¥Ó¾§!$ïÿ!ƒ\–¥*qÀ:×À×Ê§å…gÛ€–øÄXã8aïÇ!Ó»B³÷â6¾L; ü——�ç.{	[Ÿ½‡ûl	›x0g9fë±õÞwl\cë_ÁôÇæ
+nÎá½m<
+Õ;¡fÏBÕ
+ÐþPK
+¼j5¿9DR_Borg/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.class¥”]SS9Çÿ)}�n©]T^\Ô¶TŽ/»*ÑÒ•¥XuF„¸;=ÍÖ0§'ÌI
+®ßb¿É:ã–™eÆÙë½óÞÏá¥ã“´Ú
+«7\4çIòä—ÿÿIÒÿ>þóÀž0,È°á4v• ¶%œwåh·æs§)ëÜWÎó�ógn]È¥–Ö2(K¿ÕÖ…–aŒabÛÝu_:jO
+§TS:t=]æ¾ÿ9g€aº?§CnÚþ´ÃIÅCáú<TBë•_Ø*ÃpYJ»�Þpý�½›¿ýáåû%0œÐ/ú¥1ŒWû7Zí›+2ÄD ô"Ã@6·Á-“¿N`$‰(FÎ~km§’È`4…†‡Ái†ÅãÔmæzgJÙêq(ÅÜ†‘?žÄÎ1ŒºõzÉÓT¸ªPš<d¸˜µqÜ=íð]hçë‹¸€	co’a¤*þ¤Õ¬ñÐCº*=:—Ž…úÝÁ¨~!•àxêÎ5¸>t
+Ê²¹#Êp?ûõaÚÌbÇ�ïÒÈÓÚ6÷tq«RÉõ\~ÿ´âzE†â•´ë—|ÑšÍVŒñ+Èã9ª]�º$¥OF˜eHÕ:{ïì½ÙJá*æ’(Àaø�økÜ'¼n [z7ô&CLwÊ•ù?D“µmSà#†’Bõ¸l‹rC¹GQ…"OútP¾•TR]µ§ªG,(Mî·k#“ÍÝ4…yã+ƒ%s§n‡ôú]ÏãJÍ\cZû# ç¦…GØßEÈ
+“­i¹³Ãë)¬tiL®ÉVèñeaÜO}çÌTæJ@w±ì»Jq…iz`QzÜqúŽ#�AŠ‡èï*‚$Eô)6óôp©=I½uÛ&óûHç�ÙÜÇ�ãLþ
+Î`l“†Ï·1õÚB¦©MÓ`–ÚA®b7q‘FR~Â}.árw‹?ieÂnAÌ�6ò…Q¸7½±x×ÚøÙÄÚâ©¿KJ‹ääžÝb¥ƒéna¢_p«»ímÊ�ØhžV
+Ø¨ˆKš¤õˆk‹¸OÕax€RWÞ<eÆÈ
+›FHå}<ìÉ‰ÛéRŸË‘®„A,“¸~³rìÍ›ŒX¾�Õ×‡Ì""ö÷È¶U<¦¯9›1‹HPK
+¼j5E,ÛfDorg/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.class¥SÉnA}Û±1Î²‘’¶c<a‘E$FŽ,�’àƒoc»åt4îF3=IÄŸð.Aâ€à„Ä�;ßÁQ=c%AA\8tUuuõ{¯jz¾ýúø	@÷ëÚï8�Ã@²
+¥Ó®
+ã6=átu[x�³ç±ã¶¥Þ�Ñª¢½°«v„j_øiaêÀ=t��àHªŽ³}®6�aéüiŒ¼gmExÞLŠ0_º^]ø�Ôêeõ)�¶	­ã*Sw½P¤¾?|ðóøÇ&ý�¥’f��Èê„d…õæ�Ã@I†jR‰ça·)üˆ�0ZÓ-&p™†÷½dÒìË€ð¤ö“X#Ìu„¹ÐZEw_i%”aŠ|í�IEµkQÎñ\Î¼hˆ–Yk4ªÕBœv�ŒsŠÀ—av…ÇU¢ÍÒó�B=‡ILeÑ‡iÂÈÖ¦Ö·�ÆUB®o¢	Fójä0‡ù,f±@˜`ÐgÚ—¯µ2®·áÉŽêF‚“ùªÅ¿ŽE‹¿DH™xfãk„�c‚Ñ‹=²28SN
+Bfß
+¶t+äá'|}ÄÉ*ÔV4UÂ`$v#èõA«]hÎ¢îêÐo‰-ie-þó•í}n¦�ŸñšAö—øoèƒí‘ìûa;È‡=±O?`ø}T2Â¶?J.b”m..ÀÆÙ®`¢wù-WgØß,}E¦˜8ÁLéfß`²ô³�ÒÅéô	®qÖ-ß�¢Ï³$ ÈWXVÃ,c«XÀ,ã~Äº#÷XmtƒEÑ-äÉFFIDÑJ„g£n³Z•9êgäAÆ_eNb|«áîoPK
+¼j5K:E(Ú;org/gvsig/gui/beans/table/models/TreeRadioButtonModel.class�T]Se~^’°4,PÒ†Jù°Ú&KJK�JmBÁ(¤JhjÀZ7É¶²ÎîðÞà•WŽÞ´—µN¡cÇ�Çï¼÷Êá¥ú¼»‘DÈŒŽysÞ÷|=ç9çìÏ|ó€1”®ZöFrcÛ1yÖÌdÑÐ«NÒÕ‹#¹e•�Š“\µ
+cE/›VªæºVuY¾*#�ôm}7éì˜Õ�ºË¼ñP¯UÜUy©.ükŽLÝ8$pÜ1lS¯ä
+Û1­êÝÌ¼€xK +mUW¯ºy½R3B¿\›ú}÷×:KV¥¶UÍê[†#pb}I¢JVtbÊ¹6¡Í(¥Šî8£—z›ÔiùHí±ÜÇUwÓpÍÒ�å¸@û¬Y5Ý9�¾X‹˜ñ¼@0MÐ'×›õwŠ�Œ’;£ * ÅZ©Z<Åó*"8F¯¨PÑum8-Ð³dV�lm«hØ¥‘%«DrtRÄ{ý1ènš¬}jéõ’tonÚ£Ñã„5Å2ñ#L©èF�Dv–<Jå˜TŽ¥,«ÂL%àC>
+Î“Ó‡–-Û#p.Ö‚Éybˆ‡qšÀpC™µ<5GlÁªUË·mÛ²¼Îž7lV7mkG¬`L Ì²–
+ÇÑ7d›bñ£ÉU\ÂxI\ˆ¶ç5f"Œ‹¸ª¢×/ŠCÚ(ß·ìÀ5�3‡*ÉZ®u·d|ärš�lÁ1¢s˜o¹§bG§"“‘SÖÛx¯3­à–€Zô/^�@,¾¦"�ù0R¸Í‘ˆ­ùØåÃ›*nâ�0±s“:ÉÊŠµ“&2×sÌ¨XÂ²ÔfåÒ$´íG�ERÌ“kÇ:L.Š^.g�/T¾NM³‹‚÷Ð�5ßtEzÿs§š¶à}Ü—>ð›Ç°rdoâ-h”³jvÉX0åô·šî1é…×X\�‹vž§¡
+×žŸÀ6È²¹p�9Þ|?x·Þ¦[ˆR'xžä-�½€>- üˆ¾¶Ä>ú5ñZ‚ÇW^ÜAžfÎ¢¯2Î¢Å�ôó½1Ìwx’D@6q†HýŸÖs,´‰Ñg)ü„Á{‘s/�(|�‘Çèy‰‹köpe“ß?}†ißàºo0}Ø€Áº¨³üî_Áuþû »™\¶·î<M.âæ<€£:À',.Äÿ¹!œHü€Ô>ƒ˜>Æ@48ø9"ÚK¤
+�}d¢Á¡=¼ýIPDƒÚî|ñçoZbphï4Èf[ÀMìáJF1Ž\†FySÌ>íášð3àšÃ»X!)åøkó¤Uþ¬uw)É¶çq¯ŽÚdiŸÔ”oQ(þ˜+b¨!¶GÖsûxÐ€ÙçA˜a˜YBºAÂfHèMžê‡®Ãøz=í}NžÔ%þ{Ö§)ý¥(§ÉHª)Uâ UÑ³.ýPK
+ZN5)›EçC4org/gvsig/gui/beans/table/models/ValueSelector.class�V‰TÕþ^Æ	[!‚Xa2	™�"Z’°'!’jõ%yNfâÌËî¶•ª­mí^Qqiµ•hfBMkµjÓÒÅ¥vw©]í¯ýÚ~çÞ—™ÉRRûË/ïž9÷žs¾³ÝsÏþë¹çTâ}•ñD$éO:üö9¡ÛŠ%C®ÕµC=ñ.;šµ[Ñ>»ÕŽÚ�n<áƒa`á!«ß%œX$´«Á±¢ñˆùJe#d
+¸!»ßŽ¹¡­�®�…�¤kÇlÊ˜ÛŸ«ÎÀºðŒvM@Pc`Žs\Å4`4ðÇo·a`Eøœ (>¯ÓŠuÚÑ¬È¬¦­{v46˜½³no[ÛîæV¾�­áÆ†m{Huô¹n<–4°(<Áñ+fG©¯°·Érb<ØÛuºDáúi�Jª]×tCú`ÉúxÌ¥´V8àt¹‰ç íDºÎSŒ&+Qú;¶vvÚ½ä/ž¤N¬‘õÊ5ªØ$1ª5ðd �úxOo<Æ˜Ôh^Ô¢t«› ’šý83ÄùÚÎEPÖÎLnî2vÚVWÔN&3»>¬0PPO\–LˆÅnµ/©ñaS±Ýí	«ÇÞOdÜ7°zÚ¨”e™J¦ÆÄ‡p‰cõD½;MËÚM,GÀ�”™˜ÿä¡ÜD‘¦Öš(ÖTÈÄ|,j�‰…šú°‰EX,Ô¥&Jô¹ËL,ÑÔGLœ¯)ÂZŠ„Úlb™¦®0qL¡¶š˜«©z>Ìj›�ùY°�1×ŽH;î`Å¨vÜÝm`M`š”„§HÑx#vù±W²_œØxæÊM4¡Y¶v39R\�“«°ÇO­&æhö²ˆ“¶ŽwZ’¯=v”k¿Ýg>§Ï
+µ\�kDË>6yWs_O‡�`z{,7§>(
+³¯ôv›Ô±�b/Ún%ùí1Üƒ«­jæ˜|�ãwÂ$°le×qµÅ)Aå&õYlRc¿�<{ÐÀEáü¡�Ÿ•Ü2~Ál”ý?WŒ	‡$„7¨þàò>ô0çL›—ó‚@ƒ¤%Ž^?b¸‘7+1ÊiÆ@:Ð@I ,7>YI¸‚£Ï&º«¢ñ�°u8Þçú0 *JuÓa?q„¥JÃ;#V¯‰›¥šq‹æµ+Þmšw;C>Õ wrjH½)õ–åÔ˜æ5Y1KÊ[l~Ÿôãã¸KëouŽÐ“Â@£ªäOán~!	Ñ7ÿ¸›“Fƒ‰Oã3rú>zcuu(›é6ÞÝqˆÕ¥P|Ÿ÷stæÆtÑtå�õ|[ž&¢Ruý:k‚;Û´
+FæüŽ„ÓUgE¨6é&¨ØMúð€Ç$ü…n6ñ�4ð1<ìqM<¢9�z¡Ÿ÷ã„((™lf<×Oøq
+GäÔ]¹ÙkpzìXR5ó“RŒûSø–�bæ¤%awÛ‰„Ý¥““{edÄTŸÆiQ<$‰¤äL�Ë¤‰a��­F¦xÎ×Lø�a@NZgÀ$¼­Q'#×Äsº.Gu×�Oð%“+Æ›á&¾‡çÔ÷==ÐM¼¨Ù? »;“U&“eÙ¨+s9^‘6ü¡|†&?Ò´z~Ìš¶‚•˜�Ÿ°X¦»õ•²Ÿùq?çà`áNœÝVf˜î¢â5¼.*Þ Hýà“oòZ¶ÔÙ;ÑÍKÎfW¬ø/ê¶õë›?÷)0eß‡ß°·ªÖx_¢Sú#P6µ¡Lü¿÷ã·xËÄ×ðu‰Ñ;¥\NÒÑs  Æ÷ðžú�¼žÉ\~.dT �nwDÁÂ‰¤J‘ÄJê*Û“o€<™Ç|xçÉT+g¶Zçzë<�_ä­ÅÞÊ·‚Zz+ß	j-ñö—xëùÞÊ÷�Z—©ÕOûËQÊßò— Y‰‹£…ôrî–ŸÁšŠÒƒù)T‹/L¡2X\�BUÐH¡Z>ëå³!8ß¨Iáò`q2…�üQ‘Â&Ù¨•Ï–àÒÂê‚Kg¥Ð\Z�ÂöàRß„ÓhI£-C§Ðþügó…[žÆþ!bÚ�>þ}”(¯%¦=ô8Hì{�vú{5½¹†È÷áž
+â.ãéZž®ÇÇøèpÐŒChC”»qt£—ÚnÄœ}¸ý<J(�q®e¡ƒÖ…êD­eS>_Q’±EI®
+%Ùš¥¨9”à°"?B¬³©‡/~]œ¤œHÖÓˆ.;šF‚DÓ(÷�à¦æµtþVùÜQ±6�£Áà0Ã:Œ�ÅþëÓ¸·"8‚Ïi|aHåQ"²Z!?ÌïM¬“›™û[‘[‘Û‘Û±ž>n&&ñ2¨-g¼¬UÇ�*|_R•À—ñzi0Zã˜¯äo‰@Qp“”ž1O…ån:|é{•±-’1V„¯*c†tš§¸Šg$È³èbûÑ§3úf)îýJ�©OxzòdxzÒ¡=±;@éõcˆ�âcø`¸œÕz\>�yœ¦
+Ýñ
+áGq‚¬“R¹”Å)þúFßÔ¿žÚÇu“|ßNãáŠ¿¬Æg=‚t…GŸÎÀÝÀÜ0çÇèæƒ¬Ñ‡Økäqæç”ãQžy
+xœUx‚Ut’õwJ¹·R»à¹WÄjÁåàUø©<þ
+g\~�.KX» z²îT'Ç�Jí€WWáòÂ4¾[.u%Ô­r¸\{]Mÿ^0´OB¿4Ngý«d•§éßošgX#Ï2uÃ¸lw¤q1ï ÖV"¾£9éïòüªB/³®$ý|lzÞ$Uo›inÃ£;ŠØ8þªüùø·”ÅÆä†á‰ïª”w?næUÞ/æËX…Wp9Ær*h³Å�YêèV×x·
+£vÀÙ}~:‚WåîVÿuiüB‘ÞšµW¢ÿUÚ{�)+ðÖàÍ››/NksKÆæ/•Í-žÍmk‹gsËd›oÑæÛ´ùm¾K›ïMkóWøµgóZ¯�K™ó·%ß'ÙËR×i¼{Ÿ´4ãOC“ù>³þwÎ�pJü3'§¥™–.ÅŸÙ„’Ó¿*Ù¿ýPK
+¼j5þPu
+±9org/gvsig/gui/beans/textincreaser/TestTextIncreaser.class�SÙRA="ÃŠŠâžDeÜ·¸ ,�ˆ†Š¥>5¡�m%3ÔL#è¿øì³–„*­òÙò£,O¸’Ê¤zîíÛw9÷ôíoß?}0†9�³aT÷ë¯bÍï’öç•bß¨£ƒZ¤d¬"NÅfŽ–ÒO‹!ÐÿR¾’~CuÿÁüKU3:Ä2W‰ë…À¶ç‘l*�Á²u]ñãeMç»ÓÖZH];-p¥¼TŸ#u "æè¼ªm®täòUwj¥¦�ƒX Ø6¯œo(_ýrógBfÖFË†~£~…;è#À‰pAyð°ÝEÛÐÙ�=8ëÚ�@fsov¹¶]è¶n{.ýo“F:Ç#ù	tåJ“““OóUë€‹}8èÁE�­rX ·®Œ�T�™•©Êåò}¹lüßÄy8Šccn£�¿ÏÈ¨\X(äþŒo.†sóíŒNà¤‹ãpbe*$”C�+•,ÜS8mžá%ñ¬ªcÍ‹ Ç¹¤™s8oO/ô•‰`f©9¯¢9™¸dÊaM6ª2Òv¿aL›šw|~KÃóÏøÚÙk²QKÏ³òï1®˜ˆ—XÌW]²™ùkÂ+¯c£šn�—pÉd×ãtèÏ2È0TÉ&)¸‰[ÝÇ=,R9„£ÑZ2_r!ìÂ”À@›X·IÛ¢54ˆ,›kÌC	w]ÜÁ=¶ £:hÓA£RjEàZ{Š¶ö˜Ê­„KQMMkKûÐ&2Çlu ciNhš’¯„ZÊ¾‘Dò$’cšHa_eoâOš±ƒÚ[ž
+ÊÇ…5vàë*²ëbgá3†Ÿ¬a÷*öRÝ÷¤ºwû{Ók8´Š#…�ØÛBžâHþc»åÊrílá¬Ý¦[¸ø>)}‰ßƒô±t2„2B§¨ÝÀf0ˆ*²¸Lo® HÙ�«¸F‹…Zg¦eö3RÄu½ü^ù&3Ó-”ß'a=ü÷oÌ$ÌÓ²›I÷°ÄHR`6	î³,ªXÊ²Ó…Y<¤&ð(�]ùPK
+UN5£Ù½¹	*>org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.class�W	xTÕþ_˜0<IÂ¾(ˆ“™$ƒPT†:,&! ËKò2:™Ig^D‹µ‹ˆmcq«¥ˆÝ,3¡¦".Åµ¶uk]j÷}ß[íî{™%ôûš|yï¾sÏ=÷?çüçÜ›“o?p@•¦i¸(ùC=‰0ŸÝa‹iD~Ëì³ÂÑÖ¸i$Ì¸¿‘_�¡¯å±¨e„£fÜ®ž�ou
+õ–Ç:»bQ3j¹P¨áŒ­F�á7z-¿ÙC™ÿ’V+‹Ã	ËT–FiÕn³:4h
+£;Ìp¨Ã¢Ð’½5L
+Š�>¢7
+ùW‹°.lFÚª5wÕt[V,šÐ01Wk½5#Ô(jé48;)wÖ^ÅéÑ-�f4–K+�á°3m2"Ý&ñÔÊ§Ñç|…£aÒ»«£1è4B&—ŽW¶ýƒ–¬87 aW8Qo»¡mâ6‹eåójkk7•7ÑØòXmzÊ›tLÇna¦ŠÇ gêc�ÎÒáÆX�£CÇi2:OÇ8”ÈÈ££Ôyu”Ù³:Æc‚ŒªF/k†úÑ1ÑÍÓ1É½OP*üÅ¸@ÇdLñE:¦bšŒipî°	_nêX, p±†’ I°¶»³ÅŒ7-S‚k5"MF<,ßŽ°Èê3@‹‚ÿ/ÍÈQq;ŒÒ,ª‹ÄzƒÆ¶X7éUëÆ
+Ì¤#	ÓZ2º¸§' ]‰U2°§š8¥ãý¶,¨ae¶	
+3<Á´i[¶Æˆ2*ñj±³ëÄçõô0­U&iä°õè	ì6ºÑ€
+öŽ
+Œ˜†)Y¶Ó«”ÝË°Qì6k(¥öú¸ÙnÆãf[ƒ
+ôf{r‹†±!N¦™9ÙSž�å:>ˆÉ‚“NF[›†ò¬}ÓÅX�ÅÓu-[ÍVK!iA«¬å*w{:²C3,àÌÇØŒÒòY‚ë‡§Vh]LÄ�váN7Sº:>‚ˆlÛÉd`ÕÆºIb´cÅìb"ZYc:>Š¸] Ã&çßÆ…n;6žIž‘V$½ès£Û˜ËÛqÂq‹õÉ&à
+
+™èÉ‹åcØ!6®¢ª²±®]Ãyùö÷–‹¯Æ'Ä‘O2ºmJ¦öÖñi\)òkˆbnÕÜb\«aVf¹]u±x§a­èk5»,EÉë¨möµ²=ßC·ZÏ”ÇÓÒÝtF:ù+ãá¶#Ä’LXq¥•páF7ú¥êJÒZ�(£Ì™ÏÓÖÃPEÜìÆÜÂþVóÊ‚Ã–ÐûÛpûÚûÃâfÛt|Q:_?ît$}:î²%w;e˜[.|É�ýhòpØC}â€÷Š«û±^[ìŒÖ¨³aÊpš:§ƒŽ¯áëÂÑûd	ëcŒZ"ç…ŽÃöÔýlL¡šÏC/ø.¬Î»jžÓä†ápaÀ�£þ¨à.c�çž ÎÊ*÷|g¬bù ¾%&ddï¢N±@«ìóPN-Ú-Â…‡írX1Ö„ú+!õ(sã|{(YŒ¯éno—SþDŽq{Î…'‡UÉP_ÊWbWã)7Nâi!ö	<Ë,2ƒU]ÑP1ž'ËŒ®.3ÊDU¼Gáe#£áð]1÷=é(;dôâµ3Nºð²]#õf"Öo53QÏ³KÔ´üêƒ´ý*~àÆ+ø!çÉ�³+äu7Žã
+»KIÒ]*�ŸVçÄøÞ’üý˜<T´Ýþ)o{8Ññs»D~A[½êÅ²ù•œôýøµŽÝö	ñÛ¼Ì;Ÿe5RÊ ŠFëÍx;;‡ÉÈÎ:ÓVÈ¸ZúÿØ.#ž0íÖvŠ–[«ãÏø‹t¶¿ò�8µ=þn]ƒñÜÞëpEÇ?ñ/7þ�ó®E¥Óß
+!9ÛX]XàÍÈí¨˜Íx�´âå©@îe¼FÈ­L½y'SoÞÈÔ›÷1õ.uÞeŽœ71õžè¼'9oÞ¶Ô›w-¾ÝÜg:fðy: ¹QÈ}€vïfyKë’˜í-�–ÄÙ^-‰så1GåòðÉ£Ò;.	¿w"æ&1_Æ¼ã/Lb¡·(‰jïYï…©E2?©X¤SG‹Ú–V8–ò¹Va»„^—Ó/±úˆª³P‰sPE©ŸÏ¹X€ó±ó°ð>UƒÕXŽu¨Å~mF^¿L¬â<°„ñ£'´Z£.¢í*’šIl
+ÔH¢S¤F{ÅrF¦˜ó¼vÚqÁCÅÈÍƒXÑ<€º ¯0…ÕòXãHÖTˆDk¼)\êDC³÷ýçßšRØ4Rô/Ã`h)˜™PT©ô®#€õLä¥„ZÏP40�Å†â2ÛH�f>7+WÏ´Á9®sU;B*±KÑÁQÇaluœ©¥¶èëÞ¢sŽÂJáòÌþn˜¢hU¶'«o=FÛ(2WàJÇb/uDË'SøøQ|*…�ðº.’ñ»¸Ã¸ƒ9“U&ÊøûgãÉŒ1x;+C„Nw’“QÆ¿+„Ï1žà>‹Ï)¼Í9 z¸^l.fxÏ=A¶
+¢‡™¹^ˆ{Dý-°}•¯¡T”Nk+�¦rqƒˆ¥Ã`£ÙFÎ\Îý¶3ÄWàB^¶–©¨}4ÒâœúqQ_B»›ÆæœÀÎAôÂMAß ö4òg·&q‡�Õ°×W˜Ä>GaME®BçöÊc½ØO�{¤òhs÷òëË)|Åþjh.�æ8ðU‘0ÆI¿CÎø>gœql‰j×èNŽ®ÅLìÂÙ¸&b.Ãº”�­Åõà2n7™p#,¶ò«p5ödñm·€òà’Á\lAŠ#á¯0Nbnã^°-R~
+té(�ø¦ôJ'tåÄ"!ðcöÌñfŽÄ’¬…GñÌžÿ�¾ŸÂK)¼6€7Sø‰¨fü›®ŠøNî¹—‰»‹5s7É>VÍþ¬ämq°krŸÊƒÓ—ƒÓ'’8}Nß)pþl$Nßpœ÷qÏƒÄyˆ8çýÄy$ÎùOË!Ù$§õÓ`å	ì"YšK£’ø%çªoE©0mŸ"Òœ¦W1$QÜ[Q’Äo2$«›9$«Ì”Jšf•RÊÍ*ÙÂ~çÐ¬2ãÞj:<H÷Ž‘ Çyæ<Lð��j�’j�‘*�³›Ÿ`7’ú'I¹§H¹§I¹gH¹gYÍÏñÞõ<ÉøBåúÓ”Û�ß+ÊMaóùƒC¹?âON*�°§KW¯O÷œ¿ˆñ?B•{ø�wIkÀÃñü[îÀ8©{�ÝŸR	)ÿÍ·ç¨d¥—­x‘½è%v‹—™ÐWèÝ«là¯a!^ÇÅxƒ'Ò›lÆoeyPŸn¤õø/Þ&Þ±<³¶«óHÃ;b]ÃÿPK
+£Š÷4ó–»G�0org/gvsig/gui/beans/textincreaser/images/mas.png%S¿k“a¾Øbb Eˆ"]Ì–ù»ÕÐ`¦†þ:µ"Ü,Xéâð¡Pp,…Â‰HŠÑ¡Aqè`oNìT°P›Eçsç…/ßû¾÷ÞsÏó\ò¢³pwrìæM¶æçñ¾OeßýûjD—�{ËÍ‚ð)ß?|½­T*SSSÕjuzzºV«Õëõ•••v»Ýh4fffüiá�N�vì§ÿî��õ>í¿b"!R"C&f&e2&Ï‰�
+™�çUV%U2%ÏJ6#52#ÇÚI�Ì‘¸Âž
+Â¬ÌÆìÙ{Vaöl�´(«²){²Ám1Vc3ö¬gu6gO¢4ÁK²ðæ@êp7dà¡"–’ÐU1O…` &fâ©lÔÅ€¡šƒT…ì`	�B‚¢O j€—æ2ÂT=Í‚	|5SOï M2m®žVr:­Ñ†…I@4„†ËÜƒ²/Íþ	¨€‰p$£
+Âs$°
+Ñ{Ç6‡	”C�ð8.ÁK
+«\ÒÔxÌ5ŒÍú £‰n�è9É$v(Àÿ—çê=ÝZ[[ÛÜÜÜÚÚÚÝÝ=>>>88è÷û'''§§§çççƒÁ`8úß‹½½wEQÄÇÉóå¹B¼Ý>ZÂAicqa‰f|“ø[<š_}L4~-ž½~s‡å�V»Yî•¯_/—¶
+pTmÍÝY®ô®Ï^îvo¯v;…}ù8BÕ‚^î?ð7¨Õ\˜ûÜXöPK
+£Š÷4…éâCC}2org/gvsig/gui/beans/textincreaser/images/menos.png%S¿k“a¾ÖBc“"©PE:h¶L‚çÒMcƒ
+˜ûcpJA8Ap7EœˆtPAD‘þ�:Ø›3,Áf‘€ÃùÜù†/ï�{ï¹çyîûž·ÖnÏÏ]š#¢ùÆêÊ:æ³ñÎàp÷O…hzÜº³Yï~ÝŒ¾�ÎÌÌ
+…R©T.——––*•JµZÝÚÚj6›µZmyyÙŸv½ÕêÓ+ûå¿û‡ÇÇýÏ_0‘)‘¡3	“2“gŒ…DH…LÈó*+‰’*™’g&‰‘™‘cí¤Næ�È€\aÏÂ¬ÌÆìY{Vaö,�°(«²){²Ám1Vc3öÌgu6gO¢4ÁK²~ðæ@òp7dàCE,%¡$6ªb*ž
+Á@MÌÄS-Ø¨‹9C4©
+ÙÁ( …E�@Ô/ÍeSõ4b$ðÕL=½ƒ6É°¹zZÉé´F9&IxÑ.spÊ¼4ë'h &zÀŒ2ž-�ePˆªØ;¶ÙL0 l‚„Çq	^RXå’– Ç£¯a´hæÍh-èHTDÏH±C2þOž«÷t¥Ýnw:�ÝÝÝ^¯wtt´¿¿?†Ãáh4:99�Ç“ÉÄÿžîí½ëv»ñâ8yNž+Œ·/7p0µ³¾¶A7~~—ø,­ÞLT<Ï½~s‡³;�f}¶?{á\±Ô»uý	Ž+77ƒÛ—¾Ö¦®¯âëš¦{ÃO{ˆR£¾¶ò¥¶ýìPK
+?5(äL6:0org/gvsig/gui/beans/translations/text.properties]‘±N1†÷Hy‡Hì÷J¡mN¬'7¨¥\|rrUÅÛ220 6&œË¡¤ÈöÿÅ‰eû&ûsnF¦ÑsFŸ´‚#7McWK° ØñD•›UUré¦a
+ÐËÅo$ðzyr€Øƒ]ÍÂÌB«Ên¯DªJj;öÀ]†C».±iK¬U™RwÂ4AÀW)‘ì]Aæi%½0x¶÷ÕkõŒ!³$oª@<ÈÃ.Ê™ÏèÈn*3QÎ4¼¦UÀaD`ûP½Vœq »}+N¤ïì¶ØEÄEÆ0ÎÉqNŽ#ž}ðÉî¾¥&™Þ›…Èu—îÈÀeŠ²”ØIþÿÌ‰ñÅG»Ÿ�VI~r)vŽ±}¬ú+–Bë‚®s ŒGø›Ó2Ä4ûèJ;G²­	©ì§¥y=2ìö©X­~PK
+lÂ4Â:ÖG3org/gvsig/gui/beans/translations/text_ca.propertiesS.I­(‰ONÔ+(Ê/H-*ÉL-æåPK
+lÂ4Â
+À3org/gvsig/gui/beans/translations/text_cs.propertiesS.I­(‰O.Ö+(Ê/H-*ÉL-æåPK
+lÂ4Ãº{Å3org/gvsig/gui/beans/translations/text_de.propertiesS.I­(‰OIÕ+(Ê/H-*ÉL-æåPK
+lÂ4ÆZ¸33org/gvsig/gui/beans/translations/text_en.propertiesS.I­(‰OÍÓ+(Ê/H-*ÉL-æåPK
+lÂ4G]23org/gvsig/gui/beans/translations/text_eu.propertiesS.I­(‰O-Õ+(Ê/H-*ÉL-æåPK
+lÂ4þ�‚n3org/gvsig/gui/beans/translations/text_fr.propertiesS.I­(‰O+Ò+(Ê/H-*ÉL-æåPK
+lÂ4ÕÈÂ3org/gvsig/gui/beans/translations/text_it.propertiesS.I­(‰Ï,Ñ+(Ê/H-*ÉL-æåPK
+lÂ49øÁ6org/gvsig/gui/beans/translations/text_pt_br.propertiesS.I­(‰/(‰O*Ò+(Ê/H-*ÉL-æåPK
+¼j58Qî"¥
+/org/gvsig/gui/beans/treelist/TestTreeList.class•U[wUþNš4´
+m¡P \
+i DQ¡€—ÚJ1@¥µˆ:MéÔd¦&“¶ Š¼_ñî‹/>øà.\²–o®åòÑ?à»ÿÀ—ß9“Ë ÁâÃÌì½ÏÙß¾ïùíïŸ~0ˆ¯úÝBÖÌÎm¾K¶9--§hz)svÑ3'eÑ›$“"†hŸµæ-3g9YóÄô¬LSÚ,×RkÁ3å¼t<sØÍÏ¹)¥'Yc…€Xà3ÆgF`Åù‚•—�)¥ºhlBUÒ!{Ê¼ÀžÔ»WqmØu<Ë¦ª¶´Û;,ÐœèŸˆŽ,¦åœg»NQ`¨!š5�“¦¬]3�»Þ!l+g_”5õ0:BÃnFX�¶(Bè4F¤Mè6ÐêSëb·†Æú(6(…(Vªkÿ_halŽ"® ¬R[bÉq#Ø.±2™áœUdŒÝ‰T½F^�N�õOØ��
+ AµŒ[Œ ÉphŽÔnf-]²¼ÁÂDÐÈ{Á^Äñ
+ö7À¿‰ráìS.Ü[±¡Ý¸ŸèŠñ]9@NQ¾ýƒUNßdM£¾›þéƒu^Ÿ?,°²Âû`�¬ªªá�
+U‘í¤)9R×*J›ZGé]Vê¶èJôßÜ¡J<d …c*’ã·‡1.Ð*ç,'sÒeÓ‡º'1Åã˜XM|UXNÈ¸åHU4ßŒž¡z7˜Â)Õ8OVºêæó0Î°˜,�@2Ô¯LßP#¡�§p.Š³xš�¥7Á.çÄ%Æ´“ÏÂR§9šª§þ=È}K·™v]ë¤:Ï"ÑÈ”]´9f*gÔélu:+Ð–b(ÇKùiY˜´ô•XÊM[¹)«`+¾"y36»{×2!°¯¸ByæIe÷l£~Œrˆ:oZi@>jvKÜ?]¾žíšãTò¨*­<3XÂ|+<°¶]Ê?+î¸q®�´ÞV†mÅIYÓ@7Œ˜õ9%È9ª½Ê‹x)ŠK¸Ì¬B–î¬i�@“—ãK.
+jœ—;[mDjKW‹xÄÎd$]Ûzû:�Ìëæâv¬Ìæeî±ÝkàÇÜyÉnm¯	NÊ"=¡(Â‘8eg¼½¸Ç¼‡÷U‡|ÀQâÑigg<ùÒ«Ä(ªªÀ¨6ð‰êÝ8>
+Zœ˜qMtÂ-ÒrÔV½Ôl“Aå=¶°Bàä»Imuþ›ÔN×_.mýåæå·…÷ø ßNNiÅ°ßh¢'y]Éüº„µÉqi	=ÉØpú:z—°‰dœä–%lKþ€m±¾æ2ú5µ+T¥VT)³¥JÝë‹Ý]Æ}šÙd†‚Ì¡Ø@�y È<3ëÌp�	2�™± óX€)ãý~‚ä¦2Nû’gN)–ÏZ>=e¤5[FV}Ûs×ts|ŸGßmLØJ&ÏÀF¦2Aj/y�EÆÑ�sX‹Y¬Ãï_Áz\eí¿F/¾£Æ�Ø„_°¿³ä`+þÄvü…>ÁÑŽ�bó´bøE�—\+æð<%,²ô¦‰ß®hbI
+©oa¤¾Çbìb/_SjtO9è;£»ÀnJ:H7÷hq4+¼‚W¡þ—Íx�¦ø£!}¯“xoVŒîÓI Gõl´hSû4X·XñVQoám
+ñÎò–�x·1©ûèU¥ó«øa{4ãS·wfÊø¬ŽÕw1ù‡zkzk>_ÞÉáeœüBßÿòPK
+	O5«Ê�}|4org/gvsig/gui/beans/treelist/TreeListContainer.class¥X	xTÕþo2“�á±$� „ÅˆJ2	Â’°E'ˆÃRµ}$�d`2ƒ3«h+­­Jí¢Ö¥ÖV[·š	ŠRª­Ô¥›­»•ÖVQ»»Ô¶.ô?ï¾¼Y2 m?>Þ=s—sþ³Þ{òØ‡÷ïP«ZjcñŽ`Ç¦D˜ßîpp­eFÁdÜ²"áD2¸‚DˆDS,š4ÃQ+îƒR¨Èw¦ÑLXM±®�±¨MúP¨àÝ,¿T3éNM{;…¥ŒÂV¡°Ëälih½¹Év'Ã‘à3Ñ™4×F¬zîÚØB©
+#ìõ-ÁÄæp´#xÊ23jEìeÍlTöòò¶x,‘Mö-È“´·ÏÞ*ç¹É±÷ä,ÊAYŒ›ásª²…[p�µÎìŽ$[ºm¼Âki¬]ø
+~Í¥0+tT÷mL¸¦93d38’ñ;‘m¦ùñ¸¹ÕAX4'
+'hÍÊªVn"
+åã‡ãxQ48Ö€OSÇÍ{å¡+Î¬|ça…!6ÏˆI¥ZÌd§'Òhë"±Á{*T-0P‰*?&"``€>_c` ¦j
+,ÔdC0T¨“ÓÔ4Å(jº�á!ÔL¥(j¶�‘8F¨9´}Õ|hðcžh0
+£eß|…ÿ£9}hòcÆ)øÅXa3>—FZ$F*Àb_‡•Ô¡RZY•'4ãÙ{*÷&úö–UæÙZÕj KEÞiš±ŽÓ~Œíð3p:>!Œ—kÆzo.c{«0>­Âx¥ÂÐ3riw×Z+¾BP¡$k3#­f<l¤žô$;ÃžÉGÄ~™^Ÿå7+}8Ë�³Å'~Ÿ|ZaâÇÌÖRÅuáH2K@»ÂÈ4¦ð”™Ñ`‹•H˜VÂ‡uŽá¬-´ò‰Ú:J—'ã”S_ÕÊ@'Â~t`½Ø:cý´µë­6í—rDühC�e¯››“Áá.+šÇ¢>Äü•ÍÍzç9~lÓ`½²,n­³âq«}9ã†ÀöYÇmIt‹37õ™Ov,ŠÄ6‡Ì­±n†ô?¶JŠ«—tHõóTÚò>ƒódé|½ÔÊ%è¹JÈÙ,Ê3„ë¹3J³ÅmŸÃE`;Ë
+¸LWÐ²ÜÐÓ5ÔÀp±ìþ"‹‡ÙN�TeðvËy}~[^‚KåìeÌ©u®†n™ÊVœáTîN/Ž‡ÛÍÆZ"ÉêMÒáWú±SìâíàâWI�Ù‰¯83[
+|MÏ|Ýq]¶*>\ãÇµÂ ,WLŸå¯óãzŒ“]Ûå³É1�Î·ò\eÜ"nÂ·DÓ›åÜeÎ9É·è•[éîŽ~ZMQ:ŠÖ4JIÿSŒ®# ña—»E‡ÝTæ¶ÆX¼ÝŠ/2Û’±øVîR(n‹[fÒj´6Y½ª0Ž±–¥çZ{Á9MMïÁ÷ý¸÷ò¸DaØÚ¼1O¦�å°„D
+½n�Âh9nÅ“aV$­A£_‹„ÛèÊû%®wc/‹X†³S+�ÂüAì“S? Õ´j“m�V»oà‡úC:Yúf¤ý¸ï¦Ól#1Þä�ÒNÒýÃBÙ‹´Ä£xl ~‚Çy;³mCG<ÖeŽ¯ÌÝ-è~ŠŸ‰ ŸÓrý*·¿ìg<»Pº�]q~åÇ“ø5á0[bÝ	+ä>$*2„Ò£Ñd0kƒÍài<#žeô1h‰%Y™Òl&æg“½Ífö<^f/*ŒÉ„í”vÙÚBàL¼—ü8(‰—­¶¾ÀÇ@ÈVÛ=è¨ü{?^Æt‘]nEX[¤Å~Á¼*Qò2ÉçYù‹bå: zÍË
+]°#Ku2ui˜¦ˆ™H¸WlÖÒ,(Io›•ø,Ï»Oœ¦Exo‰•Þ¦ƒŽtºÛ}ø£0M0-ÄéÍÑ$ï›%yÂ"÷IùÑ;ì+äŸø—ïâß¼S¢f—ý è§!ýÆµ÷vi
+'ñ]›V“¦‹kÓ-Œ&ã[ùªÍcº�3ÓgÝ¦Îp¤=Œ™KsUÿ9Cy”—š©"ú6wÕ§�i2¦E°Y¨Ì÷4P~5È¯*#‹ƒ^õ©!|D[çt›‘Ä^k5LûÕPU¢pÂÇð˜}?ª|k¨R1¹\Œ3ópÎ#+Ÿþ#Õ1|v©Q,F}ækb1Jn³¡ÊÕ±ØX^ÎÍ8ó`©ÞMf¤[ò!,AB¤´]8Ñí{úæñÙÞ49i�N6f€:�¹©Ø6šðÈïÂJÅ.â 
+è‡�ÎJ6,„Z£&ÉJ-++C,÷å®°°ò¿m¢ÜäÏªh—Ðƒ˜§NR0œ¼ÓXS™·³â5MÕñ¹­¦ÓbÄÛøÿÑÅ}aÄâ£1yT»3Wüé­†š#O×ƒj.
+hé9,nuÅ6Y9ìgÍj¾(~P52ÊõŠ¡ho,ä”T;y‡ŽìKœ~}xQÂÙ’e¨ôêòXw¼ÍZ–ž£¬_;Q+çPÁ§’À`ŽìJIHOj�œq 3²¿°Gö—öÈîÒ‡9#;K{d_i�ì*í‘=¥=²gäX%�0¿cùëMJU·z1>PŒ}=¨«ÎLîÅ„‹Gàø
+{P½£“ì	þŸÔÞƒ`@õ`Š|¦Ê§N>3ä3K>õò™Ø‹y«{qrI. ¹Pf{±„LæR¥°Ì!W¤°ênåj~O±5YBËL£Îuü50“1›¿êù�Ã6x.»¾6¡ó°'c9æ³
+kF˜§»p*¶ „‹Øu®!'CëˆOâL[Æ"Wÿ›©ÇÓˆðl"üTL’m«K¬=ØÐ‹¨(³Wg…èß‹D
+›÷b+7Ÿª.La›|>¨Náó*÷%•ÂåiUN¤û€Tãš½µXIeVQ‰Õ½	j)Î²a–i(ÌétØ\A Ò”8€_!àBŽ›	fÊD÷b'‘|™HzðÕjO®vfZjdF>WS�k9õ
+ñOíÅõüuC
+7ê_9Ê}Sf©È·kRøŽC·Ú¡ïr›nG¡Åh]Çøë`Ìup˜½žJo@5"ÜÓEE©\Œ»Ø:òŸ(z¬VÁQt(ÛÏïá6*XÁÎÿvRüÇÃQy‡£!˜zMTg7¸Cb�3
+L²¸Sf={Ð“Â}B‘ÂBè8Û/dZ�qÔì5}8�qv>*±
+SÙgÎÁ…XÌÞ1?!7~nq±]ç`k%ÓºhIc«“™lA[]á<œÂ#BÞƒ'Rø…P}(ëtbÊº4ÊãX
+€K‰ò2¢¼œ(wåÌ�+Í;i·«2�¶:H•ü%ÅAº�Ù$k3 ’HŸlõ½xJr÷^ûÿÜžK“¿2
+¢ŒÊŠÊ>¶�e¸�îº5tTZðWp3ÓP¾„‚%®ÈlÖ±ÉAZè·!xyuu/^‘¢Á%fÑk2jÑ¯§É7„ÌuØmüÞÎÐÙÅ¬ÚÍâp3ëNÌb»“Î¤7Àø#þD<
+Æ9®�LÚ(—¢7æ£K^ÿ:pÄÊ•yâ!·R¤ˆª—¥~õº�n¾Ÿ•b/ÝøSìA†ç¾ŒÚæè'Ô_xI(›ú+©ÒÃßM/ Äs"vF
+ïìÇ»K¥ÆÑøÑÙžI£<cRx/
+¦Ä¾•eÙzŒ÷Èãø„-xšfä
+®ÀûøÀ\�mÁƒhüÃœ(ä9Cñæ“¸SªÐó‹ÛÓ`f{
+§{oÅ"
+¤Ô›R¾”\“RÃ¯AmÆä~´Í.UÔ=¥Ê&=‚Á\6«'¥Ôè•Û½ªÔ«÷§Ô¸›ß“kÜ§ -a	žÁD<Ëûä9V§çyÏ¼À,yšUè%[Ç%Ÿ«c»«c»OªÀ¦Ž%UH~«lm=²ª‚ð’o¹:ŽzÓ!j‚:ÞM}Ó×Úù­&îÇÁ–Â†[1²flJUïWC«m}½ž]ÛÕX*¼éð¡Â]®£íWÀ«´ï!Þø¯a<^§Í1ß°Q4wu­�Pqÿfð°^�·Òj²šâà:Ý®¶@)ÍÖHSWÚW2¤ÔŒ´‡Ø÷&ÍøKýÛYVêŠ,U3Õ,É25[Õ;ìWr�œ,ÎP»†brY¿G¤ïS³2¼Øe]¬æ9Ú9Ú(u²+d•#¤$GHÓÊ)ÊƒAÊKnERJ\)%®_Z
+ï…£H)O©Eý¤¦”!”2ôˆRŠr¤,VK)A»L^‰ëtÕ³³[•dÔZo_­UÍª¯Ö68Î,
+Tó!“†%‘ƒbýV#3<WäB*²—â¹SåŒ
+ýPK
+O5�,ÎÃr6org/gvsig/gui/beans/treelist/event/TreeListEvent.class•”[OA€Ï”Þ»ôBii­¥^Ú¢,à%1TLH/@šø¸m'uHÙÕÝmõÉû/ñA‰‰þ”ñÌîPÚa6Ñ—93çúí93ûûÏÏ_°·¬[v_ï�†ë�éj˜ŽîÚ”˜ãêtDMW?Àc�;üB {hŒ}`˜}ýqç�vQ;C@£z„.Û½í˜k�zí»63ûw¤…Ï=²FÜkÖ±†v—îøj©+�œ
+/,‡¹Ì2÷§½È.�ü‰m*"z—™ÌÝ"0So´	„ï[=ªÁ,¤“†¬ˆ& sÄüÝ¼qWÔ áïJ$!Åwç4ÐüÝy™3é£áQ‡ÚFg@ù7Z]cÐ6lÆÏBvŸ3‡Àfë{‹ýÉôéÉ·ˆ6Î×ªFfÙ±P?ëÇ[�;M9îzÎ9«K£ßT+ÓŽ¤Hõ&OEô¢vÇStÌáú.Ç*M„KÓ-9�¦,FÉ*çŒ*eST¶�Á�â ’¾õ!ó&6Õñ5Þ1XÂñ†ñEDQâýÀ]ˆßOÆ…L‰÷Â“š'Ó@øÝÂ5ƒ'†z‚r¥ùrMry¾ø²À—r3t¾T¿yIq]Æ¨b‘ELVƒ<\€bUÑºŒ¶zh~j´,¡$¨_eu”Üi~‡ü×qâ¨§lLGÆÁá’ÞBï÷n®"ï)VÒÓn`Ì¦—¡è{‰|ñ*¸¬)È ·• WÔ dcî€ÄH]	R–Av• 
+5HYyŠ1{ M²
+W Õ/È3%È5ü1Ë •©ãƒÓ	á—“Ö• „)AÖÕ ä%ÆØ I²¡Í‚<šWJ�Mõhd�×ó&$.Fs}üX
+ñXkÿúPñ¢¼Å"ï°à{Lòæá#”áÚ>O ×Æè7¼è›PK
+O5ÐùkL»)Forg/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.class}NMÁPœ-ZJÄ/pæâ�œ\ˆpªH÷~lš6í{ÒVœƒàG‰÷¢ÜØÃLfw33�çí`†>a©ŠXÄu™h¼&"`_–¢*˜³¤¬„–\”â¤WžVk•_”dYyÍÉF©_û"óe,öAÊaå EpÆ¹~]EG„ùÄûÆµþýmŒZLÏ„acsà\ÕÆèã»{K÷¨®EÈÛ$cÂøgÑ™éh,´a¦Õ&t`š�†»†Aèi´à¾PK
+O5/FÉ%¯=org/gvsig/gui/beans/treelist/listeners/TreeListListener.class�WkpTg~¾Ý
+6‡@¸)HI6—�)ÊMhmj,XÛ“ì!ØìÆ=g¥­¶mÑªµ´Z(J…Öz)-,,Òj)ío££ÔqÆËŒ:þðŸþPŸ÷;'{²aJ'3ûÝŸïyŸ÷ò�¼ûß—4ã]…¶L¶/Ñ7èØüÍÙ‰ËL;	7kY)Ûqòc¥­¬“ØÂ©.Žºü™(”Â¤Ýæ ™H™é¾Ä†žÝV¯EX¡VÏš{Ý„5h¥ÝDw&çXÁ¹2…y¥vtg\;“öEVß ¹öLÿ@&MÄe¼BDN(Lé’[÷%œ½6ùÞ)g–sQP®Y”ó²˜5íý
+õE‹‚–è°vš¹”Û�sÍž”%Xë3IÁ›�&’£0MŸMä\;•X“Íš÷ûÐ!kP¡µkL=q†Œ[+#žŒ%³f__—Ùc¥&w.ØìfÉ�;*ôŽ5½®=H»ÕvÎð¨•íÔê’£c¥è¬µ)«ŸóÜÑ©`è3…©q+ì´í®R×Õo¥í´ÎÀlÌ‰!‚¹*`ŒGóL@¥ô>h`"&IïfU˜,½:…–50Šx
+rÅL�&ÓP-½„�é˜!½¨ñz·˜‰YÒ[l Ö›kS˜Øe§­õ¹þ+»E$BezÍÔV3kk‡y“w—MÝ:¶FOju,×Sµº®D‰x²e‹Á‘[tÊ£_2 =e÷î±’
+s¼}#3Ä‹Ù_3êrí
+ãû,ws&—íå�Sëê»F¦érk±.†ÜÎhàf}s{&'®§Ç;
+tâNYÿˆBÕ5VEÑÍÜ—;tYÉÎtÒÚg`ƒœY��
+å\ìfÈ0BkêŠÓGôIlÂf9°Å¯C[üä*ìŒ‚&Wd-ê¸ÕLå,ÇÀÇ$pw1½j`‡Ø¶/*P^vDñ	ZD ?Ò7Yý™A‘|ZÝµ™T¿ÕÀ}0å¢…JkÄ‘Åu7ž¾™„c˜îd–e5–ÜÞYÒK»`Ç°
+»Ñç5É¤•4�ò˜õ3z¬¢…Œ‡?ÀRa&“…”.²Ð¿AèdáÈRÈdÖ‘§PÖï9uN×XþZ>Ðk¥êˆTÞpŸíÊÈ[ÜH‡:2¬º&'¢xˆÓÇòYØhº»IŒú×c9"(Ø§ñpŸÂ#~Š”ÜÅ£ŒP7ãyyd†ø¾7ðY|.†xŒµºqn9Òzg eS§…¥beG)Œ/à‰îÅ©@Êt\�'vŽmÌº/ãIÙÿúâžrb&;¹ÇçY]×ÙY’é3øªœúšÂFÉÆŒc‹d^(¸?Â£·ãˆDÍsôB_Q®�¯{¡ö
+&�3T=üeÏ{±vœZ¸Œ«Ú±œÀ
+2h2FÊ8òêÞ”â°ðè0ØD›:ª‡‘ï°·pû‹ço3¹¥hé;±ï2Aì´ce‹
+Õ¶(àµßÇËbê&à@Æé�â].)´!k÷
+Eg‡<‡Â*Öï}œè”7üjï?î3êJ¾îR¡˜Rb1Šô…cïg�ú¡ÔË‹x�ŠÑ~$.¸ˆËˆIö*[:;ƒüÖ$¼K®�›ç¦u¶<fÓF¾NÍr=nb)ˆ Œq(ç!)|»ùõ’—[·|·uËW[·|xuËgW·|tu[ã·|pu[«Ç•Pò]Àßptˆ7)¶+ãçqS\�Ã|ùY ?å§>~
+wŸGã94Ë¸%>‡VùY�Ãé-=£áoåo«¦ÚF1M¼¬™ô¼¸óòuèål÷íá®V`)–ñ„á‘ÀrÎ€ý•Xå\EäÛqñò
+nŠéÙ£«5Bµ·ËG�ÞmªâžÕ¥°æ�Äº�XwŒ‚U¡*¬Ám–º™{Â\;Ñ�Çñ³Xp
+Ýìv•=�µ2Ìã£¡cXæuïºŒmÝì6ç±]oöžË¸7�Þ¸·Ð×èËcÏ6tþ)tø +8l¹‚Å£¶ä‘ö¡>Ùè�sÚc��·éÀqhMŽ0ˆzÜO¿ì§Uðûá!Ü…Gø~>J¿àìc=Ž'pO³.eï8ë�è§iyAŸÄÚK]êéõ}ÄñôB¿§Ø÷5C·¯U Yy<ÂP
+(VjQŸ"ÅC$ûÌ0wT®«ò¯S¤=&t¸ô³„>Lè#×�~°àéfÆE×Žê€<Ó.MŸén¼‚¶Æpk�¯ošüù<¾´,R¹TvZÿÓ¨‰7é…§Êîkšü4Û<žåB@µ=îû^2ê,–EäL±w—äy!rÄýÞä1C'+×ÑàŸ •'™yßdâ‹Ùwšu÷fÞ‹´ü%lÄËüî:ƒ�xýxi0^pãx´:‹<»êõÕ™Á¬=IÜQ›ˆ]Me°§xG„ë/´àŠ`\%ÛE‡‡qëááÆt_/ˆÙ_zn ™-ö3ÃL_9ÃæbHYXÕ(µ,"Ø³óx©XËÙCB~Ïß¼g[cM„³¯ÊÝRíý@çMºè^Fo°ð¾‰¹,ó
+¸‚[p•z½ÃšóSlÇÏøEøsfÜ/ª¿d6ý
+Oâ×Ôç7Tþ·Túwx¿çé?àmüQk¾ŠÕÃÓüª¯ù\þyåð¯÷ëä«,îa"·à,ý êŸ+$Åƒ~R´A;Ñó€N»Ö@ÍI¾šz~X=ŸCû€?3gþÂÇæ¯|Zþ†yø;+À?XÕÿ9,‡Z
+Œ[
+9”/0Y¬ô8]òÿ5B Tâ<E*Q¼ëGï3Ìþ3Jñ~�Ô‹ßÙ>ÖA¿x·Ñìú+˜ M—Ž0íÂ+OcºŒkóxã2b
+¯áÍ„T­¿éøÿþ\>S¼¥øí«B˜¬Â˜®"ü/:Œ%ªL“™ë]S ÓFÃ¦’ÄTªøczNêcò}ÒúÉõhñÿz5�´*Ik"iU’Ö¤÷Lë­÷IëíëÑšNZ3H«†´f’V
+iÍzÏ´®j´wþPK
+`a&5	íAMETA-INF/þÊPK
+]a&5‚PYµ¤�+META-INF/MANIFEST.MFPK
+¼j5íAorg/PK
+¼j5
+íA4org/gvsig/PK
+¼j5íA\org/gvsig/gui/PK
+†I
+5íAˆorg/gvsig/gui/beans/PK
+¼p5íAºorg/gvsig/gui/beans/buttonBar/PK
+f@5%íAöorg/gvsig/gui/beans/buttonBar/images/PK
+mm
+5#íA9org/gvsig/gui/beans/coordDataInput/PK
+mm
+5íAzorg/gvsig/gui/beans/dataInput/PK
+¼j5íA¶org/gvsig/gui/beans/graphic/PK
+¼j5'íAðorg/gvsig/gui/beans/graphic/exceptions/PK
+¼j5&íA5org/gvsig/gui/beans/graphic/listeners/PK
+¼j5íAyorg/gvsig/gui/beans/openFile/PK
+¼j5'íA´org/gvsig/gui/beans/openFile/listeners/PK
+¼j5íAùorg/gvsig/gui/beans/slidertext/PK
+¼j5)íA6org/gvsig/gui/beans/slidertext/listeners/PK
+S$5íA}org/gvsig/gui/beans/table/PK
+¼j5%íAµorg/gvsig/gui/beans/table/exceptions/PK
+¼j5!íAøorg/gvsig/gui/beans/table/images/PK
+¼j5$íA7org/gvsig/gui/beans/table/listeners/PK
+"R$5!íAyorg/gvsig/gui/beans/table/models/PK
+¼j5"íA¸org/gvsig/gui/beans/textincreaser/PK
+¼j5)íAøorg/gvsig/gui/beans/textincreaser/images/PK
+?5!íA?org/gvsig/gui/beans/translations/PK
+¼j5íA~org/gvsig/gui/beans/treelist/PK
+¼j5#íA¹org/gvsig/gui/beans/treelist/event/PK
+¼j5'íAúorg/gvsig/gui/beans/treelist/listeners/PK
+mm
+5'‘QD'¤�?org/gvsig/gui/beans/BaseComponent.classPK
+‰L5Pí?�¬6¤�È	org/gvsig/gui/beans/buttonBar/ButtonBarContainer.classPK
+¼p5êòçrJÉ1¤�¹org/gvsig/gui/beans/buttonBar/TestButtonBar.classPK
+Åp5BÇ¦ºk¡-¤�Rorg/gvsig/gui/beans/buttonBar/images/down.pngPK
+(´
+5Á—Øvs3¤�org/gvsig/gui/beans/buttonBar/images/fullExtent.pngPK
+Ñ…°4¿.Ywˆ‹3¤�Ïorg/gvsig/gui/beans/buttonBar/images/selectTool.pngPK
+Åp5€8jvn§+¤�¨org/gvsig/gui/beans/buttonBar/images/up.pngPK
+ÈL5qviMY
+Ì@¤�_org/gvsig/gui/beans/coordDataInput/CoordDataInputContainer.classPK
+m]5AÏ•?¥‰	;¤�(org/gvsig/gui/beans/coordDataInput/TestCoordDataInput.classPK
+ÃL5y§Ïaá6¤�-org/gvsig/gui/beans/dataInput/DataInputContainer.classPK
+m]5zõ*9WÅ1¤�É8org/gvsig/gui/beans/dataInput/TestDataInput.classPK
+–L5A.V¨,
+,¤�o=org/gvsig/gui/beans/graphic/BoxesPanel.classPK
+œL5Ñ°�:¤�ÑBorg/gvsig/gui/beans/graphic/DoubleSliderControlPanel.classPK
+åk!5Ðô¯Q’	3¤�¶Horg/gvsig/gui/beans/graphic/GraphicChartPanel.classPK
+ck5(¦É-`2¤�™Rorg/gvsig/gui/beans/graphic/GraphicContainer.classPK
+N5dbD	ó
+-¤�[org/gvsig/gui/beans/graphic/TestGraphic.classPK
+¼j5ÕÙ1
+;¤�T_org/gvsig/gui/beans/graphic/listeners/GraphicListener.classPK
+»L5 —9/E4¤�»corg/gvsig/gui/beans/openFile/OpenFileContainer.classPK
+mm
+5RŸ@Ý;¥/¤�<lorg/gvsig/gui/beans/openFile/TestOpenFile.classPK
+°L5m¢›¯r=¤�Äoorg/gvsig/gui/beans/openFile/listeners/OpenFileListener.classPK
+°L5,?¡~–7¤�Îsorg/gvsig/gui/beans/openFile/listeners/ReadFilter.classPK
+¶L5m¯Z§öß8¤�¡vorg/gvsig/gui/beans/slidertext/SliderTextContainer.classPK
+¼j5w]Pö68¤�í~org/gvsig/gui/beans/slidertext/TestSliderTextTable.classPK
+¼j5¬ìÁŒ“
+A¤�9ƒorg/gvsig/gui/beans/slidertext/listeners/SliderTextListener.classPK
+zS$5–{xA\
+2¤�$ˆorg/gvsig/gui/beans/table/CheckBoxModelTable.classPK
+ÛL5s"-™ C'¤�µ�org/gvsig/gui/beans/table/Table$1.classPK
+ÛL5ò~Tx$%¤��org/gvsig/gui/beans/table/Table.classPK
+¦N5kv­°ì.¤��˜org/gvsig/gui/beans/table/TableContainer.classPK
+¼j5ïÌ¦<Ò
+Ý3¤�}¥org/gvsig/gui/beans/table/TableControlerPanel.classPK
+zp$5je�£øi)¤� ³org/gvsig/gui/beans/table/TestTable.classPK
+?5ÚÞÒ#ç9¤�ß¹org/gvsig/gui/beans/table/TestTableButtonModelTable.classPK
+¼j5ÃT2mé
+=¤�>Àorg/gvsig/gui/beans/table/TestTreeRadioButtonModelTable.classPK
+éL5µÃr� A¤�Æorg/gvsig/gui/beans/table/exceptions/NotInitializeException.classPK
+ ½M3ßQÐX…º+¤�æÇorg/gvsig/gui/beans/table/images/delall.pngPK
+ÓeC3VÛ„}MH+¤�´Êorg/gvsig/gui/beans/table/images/delone.pngPK
+ÓeC3MK–	{µ*¤�JÍorg/gvsig/gui/beans/table/images/first.pngPK
+ÓeC3T%·*h²)¤�
+Ðorg/gvsig/gui/beans/table/images/last.pngPK
+:—D3û«{µ-¤�¼Òorg/gvsig/gui/beans/table/images/newpoint.pngPK
+ÓeC3K?�šc¯)¤�‚Õorg/gvsig/gui/beans/table/images/next.pngPK
+ÓeC3zxÇ|´)¤�,Øorg/gvsig/gui/beans/table/images/prev.pngPK
+DM58ÔªÉ
+7¤�ïÚorg/gvsig/gui/beans/table/listeners/TableListener.classPK
+ÈR$5o`k¨M=¤�Hàorg/gvsig/gui/beans/table/models/CheckBoxColumnEditor$1.classPK
+ÈR$5œÁšI3;¤�Kâorg/gvsig/gui/beans/table/models/CheckBoxColumnEditor.classPK
+ÑR$5Ói–"`=¤�íåorg/gvsig/gui/beans/table/models/CheckBoxColumnRenderer.classPK
+øS$5¹ý�T¤ó4¤�¨èorg/gvsig/gui/beans/table/models/CheckBoxModel.classPK
+¼j5!Ø3Ž«-¤�žìorg/gvsig/gui/beans/table/models/IModel.classPK
+ZN5:YVÍïu5¤�wíorg/gvsig/gui/beans/table/models/JValueSelector.classPK
+¼j5ÂF�t¯Ê0¤�¹ïorg/gvsig/gui/beans/table/models/ListModel.classPK
+$R$5¥–@‹¼à2¤�¶óorg/gvsig/gui/beans/table/models/ModelLoader.classPK
+YM5<>­Li¼7¤�Âøorg/gvsig/gui/beans/table/models/RadioButtonModel.classPK
+?5.pÕ6+è7¤�€üorg/gvsig/gui/beans/table/models/TableButtonModel.classPK
+?5¼=†uM	C¤�org/gvsig/gui/beans/table/models/TableColorButtonColumnEditor.classPK
+?5=OÍßyE¤�Öorg/gvsig/gui/beans/table/models/TableColorButtonColumnRenderer.classPK
+jM5¼·ãNÅ[
+F¤�<
+org/gvsig/gui/beans/table/models/TableSelectorButtonColumnEditor.classPK
+mM5ÒI�þ€H¤�eorg/gvsig/gui/beans/table/models/TableSelectorButtonColumnRenderer.classPK
+¼j5î1E¡­wD¤�Éorg/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor$1.classPK
+¼j5¿9DR_B¤�Øorg/gvsig/gui/beans/table/models/TreeRadioButtonColumnEditor.classPK
+¼j5E,ÛfD¤�Šorg/gvsig/gui/beans/table/models/TreeRadioButtonColumnRenderer.classPK
+¼j5K:E(Ú;¤�Rorg/gvsig/gui/beans/table/models/TreeRadioButtonModel.classPK
+ZN5)›EçC4¤�Óorg/gvsig/gui/beans/table/models/ValueSelector.classPK
+¼j5þPu
+±9¤�(org/gvsig/gui/beans/textincreaser/TestTextIncreaser.classPK
+UN5£Ù½¹	*>¤�p+org/gvsig/gui/beans/textincreaser/TextIncreaserContainer.classPK
+£Š÷4ó–»G�0¤�…5org/gvsig/gui/beans/textincreaser/images/mas.pngPK
+£Š÷4…éâCC}2¤�8org/gvsig/gui/beans/textincreaser/images/menos.pngPK
+?5(äL6:0¤�­:org/gvsig/gui/beans/translations/text.propertiesPK
+lÂ4Â:ÖG3¤�1<org/gvsig/gui/beans/translations/text_ca.propertiesPK
+lÂ4Â
+À3¤�™<org/gvsig/gui/beans/translations/text_cs.propertiesPK
+lÂ4Ãº{Å3¤�=org/gvsig/gui/beans/translations/text_de.propertiesPK
+lÂ4ÆZ¸33¤�i=org/gvsig/gui/beans/translations/text_en.propertiesPK
+lÂ4G]23¤�Ñ=org/gvsig/gui/beans/translations/text_eu.propertiesPK
+lÂ4þ�‚n3¤�9>org/gvsig/gui/beans/translations/text_fr.propertiesPK
+lÂ4ÕÈÂ3¤�¡>org/gvsig/gui/beans/translations/text_it.propertiesPK
+lÂ49øÁ6¤�	?org/gvsig/gui/beans/translations/text_pt_br.propertiesPK
+¼j58Qî"¥
+/¤�w?org/gvsig/gui/beans/treelist/TestTreeList.classPK
+	O5«Ê�}|4¤�æDorg/gvsig/gui/beans/treelist/TreeListContainer.classPK
+O5�,ÎÃr6¤�´Qorg/gvsig/gui/beans/treelist/event/TreeListEvent.classPK
+O5ÐùkL»)F¤�ËTorg/gvsig/gui/beans/treelist/listeners/TreeListComponentListener.classPK
+O5/FÉ%¯=¤�êUorg/gvsig/gui/beans/treelist/listeners/TreeListListener.classPKjj&ô^
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster/dist/gvsig-ui.jar
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native


Property changes on: tags/Root_v10+Piloto/libraries/libUIComponent_praster
___________________________________________________________________
Added: svn:ignore
   + bin


Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java	(revision 10281)
@@ -0,0 +1,359 @@
+/*
+ * Created on 25-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.gui.panels;
+
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.TreeMap;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+
+import com.iver.andami.PluginServices;
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class RasterFilterPanel extends JPanel{
+
+	private int					HEIGHT_BUTTONS = 35;//35
+	private int					MARGIN = 12;//12
+	private int					WIDTH_SELECTOR = 165;//165
+	private JPanel 				pMain = null;
+	private TreeListContainer 	pSelector = null;
+	private JPanel 				pRight = null;
+	private int 				width = 0;
+	private int 				height = 0;
+	private JPanel 				pSelectedFilter = null;
+	private JPanel 				pButtons = null;
+	private JButton 			bAccept = null;
+	private JButton 			bApply = null;
+	private JButton 			bClose = null;
+	/**
+	 * Titulo del panel. Este aparece en el Borde del panel.
+	 */
+	private String 				title = null;
+	/**
+	 * Lista de paneles
+	 */
+	private static ArrayList	listPanels = new ArrayList();
+	/**
+	 * Tabla de hash cuya clave es el nombre de la entrada de menu que devuelve su posición
+	 */
+	private static TreeMap		panelEntry = new TreeMap();
+	
+	/**
+	 * This method initializes 
+	 * 
+	 */
+	public RasterFilterPanel(int width, int height) {
+		super();
+		this.width = width - MARGIN;
+		this.height = height + 30;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 1;
+		gridBagConstraints1.gridy = 0;
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.gridx = 0;
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(width, height));
+		this.add(getPSelector(), gridBagConstraints);
+		this.add(getPRight(), gridBagConstraints1);
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public TreeListContainer getPSelector() {
+		if (pSelector == null) {
+			pSelector = new TreeListContainer();
+			pSelector.setComponentSize(WIDTH_SELECTOR, height);
+			pSelector.getTree().expandRow(0);
+		}
+		return pSelector;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPRight() {
+		if (pRight == null) {
+			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+			gridBagConstraints3.gridx = 0;
+			gridBagConstraints3.gridy = 1;
+			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+			gridBagConstraints2.gridx = 0;
+			gridBagConstraints2.gridy = 0;
+			pRight = new JPanel();
+			pRight.setLayout(new GridBagLayout());
+			pRight.setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR, height));
+			pRight.add(getPSelectedFilter(), gridBagConstraints2);
+			pRight.add(getPButtons(), gridBagConstraints3);
+		}
+		return pRight;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPSelectedFilter() {
+		if (pSelectedFilter == null) {
+			pSelectedFilter = new JPanel();
+			pSelectedFilter.setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, height - HEIGHT_BUTTONS));
+			pSelectedFilter.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Prueba", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pSelectedFilter.setLayout(new GridBagLayout());
+			
+			for(int i = 0; i < listPanels.size(); i++){
+				GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+				gridBagConstraints2.gridx = i;
+				gridBagConstraints2.gridy = 0;
+				((JPanel)listPanels.get(i)).setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - (MARGIN * 3), height - HEIGHT_BUTTONS - (MARGIN * 3)));
+				((JPanel)listPanels.get(i)).setVisible(false);
+				pSelectedFilter.add((JPanel)listPanels.get(i), gridBagConstraints2);
+			}
+			
+			if(((JPanel)listPanels.get(0)) != null)
+				((JPanel)listPanels.get(0)).setVisible(true);
+		}
+		return pSelectedFilter;
+	}
+
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getPButtons() {
+		if (pButtons == null) {
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout1.setVgap(8);
+			flowLayout1.setHgap(3);
+			pButtons = new JPanel();
+			pButtons.setLayout(flowLayout1);
+			pButtons.setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, HEIGHT_BUTTONS));
+			pButtons.add(getBAccept(), null);
+			pButtons.add(getBApply(), null);
+			pButtons.add(getBClose(), null);
+		}
+		return pButtons;
+	}
+
+	/**
+	 * This method initializes jButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBAccept() {
+		if(bAccept == null){
+			bAccept = new JButton();
+			bAccept.setText(PluginServices.getText(this, "Aceptar"));
+			bAccept.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+		}
+		return bAccept;
+	}
+
+	/**
+	 * This method initializes jButton1	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBApply() {
+		if(bApply == null){
+			bApply = new JButton();
+			bApply.setText(PluginServices.getText(this, "Aplicar"));
+			bApply.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+		}
+		return bApply;
+	}
+
+	/**
+	 * This method initializes jButton2	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	public JButton getBClose() {
+		if(bClose == null){
+			bClose = new JButton();
+			bClose.setText(PluginServices.getText(this, "Cerrar"));
+			bClose.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+		}
+		return bClose;
+	}
+	
+	/**
+	 * Redimensiona el componente al tamaño pasado por parámetro
+	 * respetando los margenes establecidos.
+	 * @param w Nuevo ancho del componente
+	 * @param h Nuevo alto del componente
+	 */
+	public void setSizeComponent(int w, int h){
+		/*this.width = w - MARGIN;
+		this.height = h;
+		this.setPreferredSize(new java.awt.Dimension(width, height));
+		getPSelector().setPreferredSize(new java.awt.Dimension(WIDTH_SELECTOR, height));
+		getPSelector().setComponentSize(WIDTH_SELECTOR, height);
+		getPRight().setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR, height));
+		getPSelectedFilter().setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, height - HEIGHT_BUTTONS));
+		getPButtons().setPreferredSize(new java.awt.Dimension(width - WIDTH_SELECTOR - MARGIN, HEIGHT_BUTTONS));*/
+	}
+
+	/**
+	 * Asigna el panel que se mostrará por defecto al abrir el dialogo
+	 * @param name Nombre del panel
+	 */
+	public void setVisiblePanel(int pos){
+		//Los ponemos todos invisibles
+		for(int i = 0; i < listPanels.size(); i++)
+			((JPanel)listPanels.get(i)).setVisible(false);
+		
+		//Ponemos visible solo el panel seleccionado
+		if(((JPanel)listPanels.get(pos)) != null)
+			((JPanel)listPanels.get(pos)).setVisible(true);
+	}
+	
+	/**
+	 * Obtiene el panel visible
+	 * @return panel visible
+	 */
+	public JPanel getVisiblePanel(){
+		for(int i = 0; i < listPanels.size(); i++)
+			if(((JPanel)listPanels.get(i)).isVisible())
+				return ((JPanel)listPanels.get(i));
+		return null;
+	}
+	
+	/**
+	 * Asigna el título al panel
+	 * @param title Título del panel
+	 */
+	public void setTitle(String title){
+		this.title = title;
+		this.getPSelectedFilter().setBorder(javax.swing.BorderFactory.createTitledBorder(null, title, javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+	}
+	
+	/**
+	 * Obtiene el título del panel
+	 * @param title Título del panel
+	 */
+	public String getTitle(){
+		return title;
+	}
+	
+	//----------------------------------------------------------------
+	//Gestión de paneles
+	
+	/**
+	 * Asigna un panel con un nombre de entrada de menú y una posición en la lista
+	 * @param panel Panel a registrar
+	 * @param panelPos Posición del panel para esa entrada
+	 * @param menuEntry Entrada de menú
+	 */
+	public static void addPanel(JPanel panel, int panelPos, String menuEntry){
+		listPanels.add(panelPos, panel);
+		panelEntry.put(menuEntry, new Integer(panelPos));
+	}
+	
+	/**
+	 * Obtiene un panel asociado a un nombre que corresponde con la entrada de menú
+	 * @param name Nombre de la entrada de menú
+	 * @return Panel que corresponde con esa entrada
+	 */
+	public static JPanel getPanel(String name){
+		int index = ((Integer)panelEntry.get(name)).intValue();
+		return (JPanel)listPanels.get(index);
+	}
+	
+	/**
+	 * Obtiene la posición del panel que corresponde a la entrada de menú
+	 * @param menuEntry Entrada de menú
+	 * @return Posición del panel para esa entrada
+	 */
+	public static int getPos(String menuEntry){
+		try{
+			return ((Integer)panelEntry.get(menuEntry)).intValue();
+		}catch(NullPointerException exp){
+			return -1;
+		}
+	}
+	
+	/**
+	 * Obtiene el panel de la posición i
+	 * @param pos Posición del panel a recuperar
+	 * @return Panel de la posición i
+	 */
+	public static JPanel getPanel(int pos){
+		try{
+			return (JPanel)listPanels.get(pos);
+		}catch(NullPointerException exp){
+			return null;
+		}
+	}
+	
+	/**
+	 * Obtiene el número de paneles registrados
+	 * @return Número de paneles
+	 */
+	public static int getPanelCount(){
+		try{
+			return listPanels.size();
+		}catch(NullPointerException exp){
+			return 0;
+		}
+	}
+	
+	/**
+	 * Resetea las listas de paneles y asociación de entradas de menú
+	 */
+	public static void resetLists(){
+		listPanels.clear();
+		panelEntry.clear();
+	}
+	
+
+}  
+

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/panels/RasterFilterPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,337 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.convolution.ConvolutionFilter;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.RasterFilterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente a los filtros para WCS.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class WCSRasterFilterTocMenuEntry extends AbstractTocContextMenuAction implements TreeSelectionListener, TreeListComponentListener{
+	private JMenuItem 						filters;
+	private FLayer							lyr = null;
+	private RasterFilterDialog				rasterFilterDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 620;
+	private int 							height = 310;
+	
+	//Paneles insertados en el interfaz general de filtros
+	private FirstDerivativePanel 			sobel = new FirstDerivativePanel();
+	private FirstDerivativePanel 			roberts = new FirstDerivativePanel();
+	private FirstDerivativePanel 			prewitt = new FirstDerivativePanel();
+	private FirstDerivativePanel 			frei_chen = new FirstDerivativePanel();
+	private KernelFiltersPanel 				paso_bajo = new KernelFiltersPanel(1);
+	private KernelFiltersPanel 				mediana = new KernelFiltersPanel(4);
+	private KernelFiltersPanel				media = new KernelFiltersPanel(4);
+	private KernelFiltersPanel 				gauss = new KernelFiltersPanel(2);
+	private KernelFiltersPanel 				laplace = new KernelFiltersPanel(2);
+	
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWCS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/**
+	 * Gestiona la apertura del dialogo de propiedades de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems)  {
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrWCS){
+       		stackManager = new RasterFilterStackManager(((FLyrWCS)lyr).getFilterStack());
+       		
+       		//Añadimos paneles al cuadro
+       		addPanels();
+       		
+       		rasterFilterDialog = new RasterFilterDialog((FLyrWCS)lyr, width, height, stackManager);
+       		       		
+       		//Construimos el menú
+       		menuBuild();       	
+       		
+       		//Cargamos la lista con lo que hay en la pila de filtros
+       		loadList();
+       		
+       		//Cargamos el panel que es visible para el usuario
+       		loadVisiblePanel();
+       		
+       		PluginServices.getMDIManager().addWindow(rasterFilterDialog);
+        }
+	}
+	
+	/**
+	 * Añade paneles al dialogo de filtros
+	 */
+	private void addPanels(){
+		RasterFilterPanel.resetLists();
+  
+		RasterFilterPanel.addPanel(sobel, 0, PluginServices.getText(this, "sobel"));
+   		RasterFilterPanel.addPanel(roberts, 1, PluginServices.getText(this, "roberts"));
+   		RasterFilterPanel.addPanel(prewitt, 2, PluginServices.getText(this, "prewitt"));
+   		RasterFilterPanel.addPanel(frei_chen, 3, PluginServices.getText(this, "frei_chen"));
+   		RasterFilterPanel.addPanel(paso_bajo, 4, PluginServices.getText(this, "paso_bajo"));
+   		RasterFilterPanel.addPanel(mediana, 5, PluginServices.getText(this, "mediana"));
+   		RasterFilterPanel.addPanel(media, 6, PluginServices.getText(this, "media"));
+   		RasterFilterPanel.addPanel(gauss, 7, PluginServices.getText(this, "gauss"));
+   		RasterFilterPanel.addPanel(laplace, 8, PluginServices.getText(this, "laplace"));
+	}
+	
+	/**
+	 * Construye el arbol para el menú de filtros disponibles
+	 */
+	private void menuBuild(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		lc.getTree().addTreeSelectionListener(this);
+		lc.addTreeListListener(this);
+		lc.addClass(PluginServices.getText(this, "detección_bordes"), 0);
+		lc.addEntry(PluginServices.getText(this, "sobel"), PluginServices.getText(this, "detección_bordes"),"sobel");
+		lc.addEntry(PluginServices.getText(this, "roberts"), PluginServices.getText(this, "detección_bordes"),"roberts");
+		lc.addEntry(PluginServices.getText(this, "laplace"), PluginServices.getText(this, "detección_bordes"),"laplace");
+		lc.addEntry(PluginServices.getText(this, "prewitt"), PluginServices.getText(this, "detección_bordes"),"prewitt");
+		lc.addEntry(PluginServices.getText(this, "frei_chen"), PluginServices.getText(this, "detección_bordes"),"frei_chen");
+		lc.addClass(PluginServices.getText(this, "suavizado"), 1);
+		lc.addEntry(PluginServices.getText(this, "paso_bajo"), PluginServices.getText(this, "suavizado"),"paso_bajo");
+		lc.addEntry(PluginServices.getText(this, "mediana"), PluginServices.getText(this, "suavizado"),"mediana");
+		lc.addEntry(PluginServices.getText(this, "media"), PluginServices.getText(this, "suavizado"),"media");
+		lc.addEntry(PluginServices.getText(this, "gauss"), PluginServices.getText(this, "suavizado"),"gauss");
+		lc.getTree().expandRow(0);
+	}
+
+	/**
+	 * Carga la lista de filtros con los que hay actualmente en la pila.
+	 * Solo añadirá los filtros que tienen nombre, es decir que la variable
+	 * filterName tiene un valor distinto de vacio que es el valor con el que
+	 * se inicializa.
+	 */
+	private void loadList(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		RasterFilterStack filterStack = this.stackManager.getFilterStack();
+		for(int iFilter = 0; iFilter < filterStack.lenght(); iFilter ++){
+			RasterFilter rasterFilter = filterStack.get(iFilter);
+			if(!rasterFilter.getFilterName().equals("")&& lc.getMap().containsValue(rasterFilter.getFilterName()))
+				lc.addElementInList(PluginServices.getText(this,rasterFilter.getFilterName()));
+		}
+	}
+	
+	/**
+	 * Carga el panel que es visible al usuario. Si hay filtros en la lista
+	 * se mostrará el primero de la lista sino se mostrará el primero del arbol
+	 * de filtros.
+	 */
+	private void loadVisiblePanel(){
+		String firstFilter = "";
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		DefaultTreeModel modelTree = (DefaultTreeModel)lc.getTree().getModel();
+		
+		firstFilter = modelTree.getChild(modelTree.getChild(modelTree.getRoot(), 0), 0).toString();
+		lc.getTree().expandRow(1);
+		lc.getTree().setSelectionInterval(2, 2);
+				
+		int pos = RasterFilterPanel.getPos(firstFilter);
+		//Si pos es -1 es pq para el primero de la lista no existe panel para él.  
+		if(pos == -1)
+			return;
+		else{
+			rasterFilterDialog.setVisiblePanel(pos);
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+firstFilter);
+		}
+	}
+	
+	/**
+	 * Este método activa el panel visible si su filtro correspondiente está en la lista de filtros 
+	 * activos sino lo desactiva.
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param filter Nombre del filtro del cual se comprueba si está en la lista 
+	 */
+	private void setEnableVisiblePanel(TreeListContainer lc, String filter){
+		if(lc.isInList(PluginServices.getText(this, filter)))
+   			rasterFilterDialog.getVisiblePanel().setEnabled(true);
+   		else
+   			rasterFilterDialog.getVisiblePanel().setEnabled(false);
+	}
+		
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForFirstDerivativeFilter(int nPanel, String selection, String filter, TreeListContainer lc, FirstDerivativePanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		FirstDerivativeFilter rf = (FirstDerivativeFilter)stackManager.getFilter(filter);
+       		if(rf != null)
+       			panel.getTUmbral().setText(rf.getUmbral() + "");
+		}
+	}
+	
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForConvolutionFilter(int nPanel, String selection, String filter, TreeListContainer lc, KernelFiltersPanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		ConvolutionFilter rf = (ConvolutionFilter)stackManager.getFilter(filter);
+       		if(rf != null){
+       			int index = 0;
+       			switch(rf.getKernel().kernel.length){
+       			case 5:index = 1; break;
+       			case 7:index = 2; break;
+       			case 9:index = 3; break;
+       			}
+       			panel.getCbKernel().setSelectedIndex(index);
+       		}
+		}
+	}
+	
+	/**
+	 * Este método se ejecuta cada vez que cambia el valor seleccionado en el menú, es decir cuando se pincha
+	 * sobre una entrada de menú define que acciones se realizan. En él, hay que definir para cada entrada (addEntry)
+	 * que hallamos puesto en la función menuBuild cual será el comportamiento de esta, es decir que panel se muestra
+	 * cuando se selecciona dicha entrada.  
+	 */
+	public void valueChanged(TreeSelectionEvent e) {
+		String path = null;
+		try{
+			path = e.getNewLeadSelectionPath().toString();
+		}catch(NullPointerException exc){
+			return;
+		}
+		if(path == null)
+			return;
+		
+		String selection = path.substring(path.lastIndexOf(", ") + 2, path.lastIndexOf("]"));
+		
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		
+		actionsForFirstDerivativeFilter(0, selection, "sobel", lc, sobel);
+		actionsForFirstDerivativeFilter(1, selection, "roberts", lc, roberts);
+		actionsForFirstDerivativeFilter(2, selection, "prewitt", lc, prewitt);
+		actionsForFirstDerivativeFilter(3, selection, "frei_chen", lc, frei_chen);
+		actionsForConvolutionFilter(4, selection, "paso_bajo", lc, paso_bajo);
+		actionsForConvolutionFilter(5, selection, "mediana", lc, mediana);
+		actionsForConvolutionFilter(6, selection, "media", lc, media);
+		actionsForConvolutionFilter(7, selection, "gauss", lc, gauss);
+		actionsForConvolutionFilter(8, selection, "laplace", lc, laplace);
+		
+	}
+
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementAdded());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(true);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementRemoved());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(false);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "filters");
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSRasterFilterTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,114 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.HistogramDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WMSHistogramTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 				propsMenuItem;
+	private FLayer 					lyr = null;
+	private HistogramDialog			histogramDialog = null;
+	private int 					width = 650;
+	private int 					height = 500;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWMS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWMS && ((FLyrWMS)lyr).getPxRaster()!=null){
+
+    		histogramDialog = new HistogramDialog(width, height);
+    		histogramDialog.setOnlyViewValue();
+    		histogramDialog.setHistogramObj(((FLyrWMS)lyr).getGrid().getHistogram());
+    		
+    		//Parámetros de inicialización del histograma
+    		histogramDialog.getHistogramPanel().setHistogramDataSource(0); //Fuente de datos; la vista
+    		histogramDialog.getHistogramPanel().setType(0); //Tipo de histograma; no acumulado
+    		histogramDialog.setRGBInBandList(); //Asignación R,G,B en el combo
+    		histogramDialog.getHistogramPanel().showHistogram(); //Dibujamos histograma
+       		       					
+       		PluginServices.getMDIManager().addWindow(histogramDialog);    	
+		}
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "histograma");
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSHistogramTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,135 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.PaletteDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WMSPaletteTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 					propsMenuItem;
+	private FLayer 						lyr = null;
+	private PaletteDialog				paletteDialog = null;
+	private RasterFilterStackManager	stackManager = null;
+	private int 						width = 408;
+	private int 						height = 420;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWMS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWMS && ((FLyrWMS)lyr).getPxRaster()!=null){
+
+			FLyrWMS layer = (FLyrWMS) lyr;
+			stackManager = new RasterFilterStackManager(layer.getFilterStack());
+
+    		paletteDialog = new PaletteDialog((FLyrWMS)lyr, stackManager, width, height);
+			PaletteFilter pf = (PaletteFilter)layer.getFilterStack().getByType(PaletteStackManager.palette);
+			
+			//Si hay en la pila alguna paleta la carga en el dialogo
+			if(pf != null && pf.getPalette() != null){
+				paletteDialog.getPPalette().loadPanelFromPalette(pf.getPalette());
+				if(pf.isExec())
+					paletteDialog.getPPalette().getCActive().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCActive().setSelected(false);
+				
+				if(pf.isInterpolate())
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(false);
+			}
+			
+			//No se puede modificar la paleta de un WMS ya que esta se recarga cada 
+			//vez que se hace un zoom. Habría que llevar un control de cambios para cada
+			//entrada de la tabla y volver a aplicarlo al siguiente zoom
+			paletteDialog.getPPalette().getBAccept().setEnabled(false);
+			paletteDialog.getPPalette().getBApply().setEnabled(false);
+       		       					
+       		PluginServices.getMDIManager().addWindow(paletteDialog);    		
+		}
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "paleta");
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSPaletteTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,113 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.HistogramDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WCSHistogramTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 				propsMenuItem;
+	private FLayer 					lyr = null;
+	private HistogramDialog			histogramDialog = null;
+	private int 					width = 650;
+	private int 					height = 500;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWCS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWCS && ((FLyrWCS)lyr).getPxRaster()!=null){
+    		histogramDialog = new HistogramDialog(width, height);
+    		histogramDialog.setOnlyViewValue();
+    		histogramDialog.setHistogramObj(((FLyrWCS)lyr).getGrid().getHistogram());
+    		
+    		//Parámetros de inicialización del histograma
+    		histogramDialog.getHistogramPanel().setHistogramDataSource(0); //Fuente de datos; la vista
+    		histogramDialog.getHistogramPanel().setType(0); //Tipo de histograma; no acumulado
+    		histogramDialog.setRGBInBandList(); //Asignación R,G,B en el combo
+    		histogramDialog.getHistogramPanel().showHistogram(); //Dibujamos histograma
+       		       					
+       		PluginServices.getMDIManager().addWindow(histogramDialog);    	
+		}
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "histograma");
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSHistogramTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,134 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+*
+* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+*
+* For more information, contact:
+*
+*  Generalitat Valenciana
+*   Conselleria d'Infraestructures i Transport
+*   Av. Blasco Ibáñez, 50
+*   46010 VALENCIA
+*   SPAIN
+*
+*      +34 963862235
+*   gvsig@gva.es
+*      www.gvsig.gva.es
+*
+*    or
+*
+*   IVER T.I. S.A
+*   Salamanca 50
+*   46005 Valencia
+*   Spain
+*
+*   +34 963163400
+*   dac@iver.es
+*/
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.PaletteDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+/**
+ * Entrada del menú contextual para el histograma
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WCSPaletteTocMenuEntry  extends AbstractTocContextMenuAction {
+	private JMenuItem 					propsMenuItem;
+	private FLayer 					lyr = null;
+	private PaletteDialog				paletteDialog = null;
+	private RasterFilterStackManager	stackManager = null;
+	private int 						width = 408;
+	private int 						height = 420;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWCS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.gui.toc.TocMenuEntry#execute(com.iver.cit.gvsig.gui.toc.ITocItem)
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+        
+		if(lyr instanceof FLyrWCS && ((FLyrWCS)lyr).getPxRaster()!=null){
+			FLyrWCS layer = (FLyrWCS) lyr;
+			stackManager = new RasterFilterStackManager(layer.getFilterStack());
+
+    		paletteDialog = new PaletteDialog((FLyrWCS)lyr, stackManager, width, height);
+			PaletteFilter pf = (PaletteFilter)layer.getFilterStack().getByType(PaletteStackManager.palette);
+			
+			//Si hay en la pila alguna paleta la carga en el dialogo
+			if(pf != null && pf.getPalette() != null){
+				paletteDialog.getPPalette().loadPanelFromPalette(pf.getPalette());
+				if(pf.isExec())
+					paletteDialog.getPPalette().getCActive().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCActive().setSelected(false);
+				
+				if(pf.isInterpolate())
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(false);
+			}
+	
+			//No se puede modificar la paleta de un WMS ya que esta se recarga cada 
+			//vez que se hace un zoom. Habría que llevar un control de cambios para cada
+			//entrada de la tabla y volver a aplicarlo al siguiente zoom
+			paletteDialog.getPPalette().getBAccept().setEnabled(false);
+			paletteDialog.getPPalette().getBApply().setEnabled(false);
+			
+       		PluginServices.getMDIManager().addWindow(paletteDialog);    	
+		}
+	}
+	
+	public String getText() {
+		return PluginServices.getText(this, "paleta");
+	}
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WCSPaletteTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,337 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.gui.toc;
+
+import javax.swing.JMenuItem;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.convolution.ConvolutionFilter;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.RasterFilterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente a los filtros para WMS.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class WMSRasterFilterTocMenuEntry extends AbstractTocContextMenuAction implements TreeSelectionListener, TreeListComponentListener{
+	private JMenuItem 						filters;
+	private FLayer							lyr = null;
+	private RasterFilterDialog				rasterFilterDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 620;
+	private int 							height = 310;
+	
+	//Paneles insertados en el interfaz general de filtros
+	private FirstDerivativePanel 			sobel = new FirstDerivativePanel();
+	private FirstDerivativePanel 			roberts = new FirstDerivativePanel();
+	private FirstDerivativePanel 			prewitt = new FirstDerivativePanel();
+	private FirstDerivativePanel 			frei_chen = new FirstDerivativePanel();
+	private KernelFiltersPanel 				paso_bajo = new KernelFiltersPanel(1);
+	private KernelFiltersPanel 				mediana = new KernelFiltersPanel(4);
+	private KernelFiltersPanel				media = new KernelFiltersPanel(4);
+	private KernelFiltersPanel 				gauss = new KernelFiltersPanel(2);
+	private KernelFiltersPanel 				laplace = new KernelFiltersPanel(2);
+	
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrWMS)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de propiedades de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrWMS){
+       		stackManager = new RasterFilterStackManager(((FLyrWMS)lyr).getFilterStack());
+       		
+       		//Añadimos paneles al cuadro
+       		addPanels();
+       		
+       		rasterFilterDialog = new RasterFilterDialog((FLyrWMS)lyr, width, height, stackManager);
+       		       		
+       		//Construimos el menú
+       		menuBuild();       	
+       		
+       		//Cargamos la lista con lo que hay en la pila de filtros
+       		loadList();
+       		
+       		//Cargamos el panel que es visible para el usuario
+       		loadVisiblePanel();
+       		
+       		PluginServices.getMDIManager().addWindow(rasterFilterDialog);
+        }
+	}
+	
+	/**
+	 * Añade paneles al dialogo de filtros
+	 */
+	private void addPanels(){
+		RasterFilterPanel.resetLists();
+  
+		RasterFilterPanel.addPanel(sobel, 0, PluginServices.getText(this, "sobel"));
+   		RasterFilterPanel.addPanel(roberts, 1, PluginServices.getText(this, "roberts"));
+   		RasterFilterPanel.addPanel(prewitt, 2, PluginServices.getText(this, "prewitt"));
+   		RasterFilterPanel.addPanel(frei_chen, 3, PluginServices.getText(this, "frei_chen"));
+   		RasterFilterPanel.addPanel(paso_bajo, 4, PluginServices.getText(this, "paso_bajo"));
+   		RasterFilterPanel.addPanel(mediana, 5, PluginServices.getText(this, "mediana"));
+   		RasterFilterPanel.addPanel(media, 6, PluginServices.getText(this, "media"));
+   		RasterFilterPanel.addPanel(gauss, 7, PluginServices.getText(this, "gauss"));
+   		RasterFilterPanel.addPanel(laplace, 8, PluginServices.getText(this, "laplace"));
+	}
+	
+	/**
+	 * Construye el arbol para el menú de filtros disponibles
+	 */
+	private void menuBuild(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		lc.getTree().addTreeSelectionListener(this);
+		lc.addTreeListListener(this);
+		lc.addClass(PluginServices.getText(this, "detección_bordes"), 0);
+		lc.addEntry(PluginServices.getText(this, "sobel"), PluginServices.getText(this, "detección_bordes"),"sobel");
+		lc.addEntry(PluginServices.getText(this, "roberts"), PluginServices.getText(this, "detección_bordes"),"roberts");
+		lc.addEntry(PluginServices.getText(this, "laplace"), PluginServices.getText(this, "detección_bordes"),"laplace");
+		lc.addEntry(PluginServices.getText(this, "prewitt"), PluginServices.getText(this, "detección_bordes"),"prewitt");
+		lc.addEntry(PluginServices.getText(this, "frei_chen"), PluginServices.getText(this, "detección_bordes"),"frei_chen");
+		lc.addClass(PluginServices.getText(this, "suavizado"), 1);
+		lc.addEntry(PluginServices.getText(this, "paso_bajo"), PluginServices.getText(this, "suavizado"),"paso_bajo");
+		lc.addEntry(PluginServices.getText(this, "mediana"), PluginServices.getText(this, "suavizado"),"mediana");
+		lc.addEntry(PluginServices.getText(this, "media"), PluginServices.getText(this, "suavizado"),"media");
+		lc.addEntry(PluginServices.getText(this, "gauss"), PluginServices.getText(this, "suavizado"),"gauss");
+		lc.getTree().expandRow(0);
+	}
+
+	/**
+	 * Carga la lista de filtros con los que hay actualmente en la pila.
+	 * Solo añadirá los filtros que tienen nombre, es decir que la variable
+	 * filterName tiene un valor distinto de vacio que es el valor con el que
+	 * se inicializa.
+	 */
+	private void loadList(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		RasterFilterStack filterStack = this.stackManager.getFilterStack();
+		for(int iFilter = 0; iFilter < filterStack.lenght(); iFilter ++){
+			RasterFilter rasterFilter = filterStack.get(iFilter);
+			if(!rasterFilter.getFilterName().equals("")&& lc.getMap().containsValue(rasterFilter.getFilterName()))
+				lc.addElementInList(PluginServices.getText(this,rasterFilter.getFilterName()));
+		}
+	}
+	
+	/**
+	 * Carga el panel que es visible al usuario. Si hay filtros en la lista
+	 * se mostrará el primero de la lista sino se mostrará el primero del arbol
+	 * de filtros.
+	 */
+	private void loadVisiblePanel(){
+		String firstFilter = "";
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		DefaultTreeModel modelTree = (DefaultTreeModel)lc.getTree().getModel();
+		
+		firstFilter = modelTree.getChild(modelTree.getChild(modelTree.getRoot(), 0), 0).toString();
+		lc.getTree().expandRow(1);
+		lc.getTree().setSelectionInterval(2, 2);
+				
+		int pos = RasterFilterPanel.getPos(firstFilter);
+		//Si pos es -1 es pq para el primero de la lista no existe panel para él.  
+		if(pos == -1)
+			return;
+		else{
+			rasterFilterDialog.setVisiblePanel(pos);
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+firstFilter);
+		}
+	}
+	
+	/**
+	 * Este método activa el panel visible si su filtro correspondiente está en la lista de filtros 
+	 * activos sino lo desactiva.
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param filter Nombre del filtro del cual se comprueba si está en la lista 
+	 */
+	private void setEnableVisiblePanel(TreeListContainer lc, String filter){
+		if(lc.isInList(PluginServices.getText(this, filter)))
+   			rasterFilterDialog.getVisiblePanel().setEnabled(true);
+   		else
+   			rasterFilterDialog.getVisiblePanel().setEnabled(false);
+	}
+		
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForFirstDerivativeFilter(int nPanel, String selection, String filter, TreeListContainer lc, FirstDerivativePanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		FirstDerivativeFilter rf = (FirstDerivativeFilter)stackManager.getFilter(filter);
+       		if(rf != null)
+       			panel.getTUmbral().setText(rf.getUmbral() + "");
+		}
+	}
+	
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForConvolutionFilter(int nPanel, String selection, String filter, TreeListContainer lc, KernelFiltersPanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		ConvolutionFilter rf = (ConvolutionFilter)stackManager.getFilter(filter);
+       		if(rf != null){
+       			int index = 0;
+       			switch(rf.getKernel().kernel.length){
+       			case 5:index = 1; break;
+       			case 7:index = 2; break;
+       			case 9:index = 3; break;
+       			}
+       			panel.getCbKernel().setSelectedIndex(index);
+       		}
+		}
+	}
+	
+	/**
+	 * Este método se ejecuta cada vez que cambia el valor seleccionado en el menú, es decir cuando se pincha
+	 * sobre una entrada de menú define que acciones se realizan. En él, hay que definir para cada entrada (addEntry)
+	 * que hallamos puesto en la función menuBuild cual será el comportamiento de esta, es decir que panel se muestra
+	 * cuando se selecciona dicha entrada.  
+	 */
+	public void valueChanged(TreeSelectionEvent e) {
+		String path = null;
+		try{
+			path = e.getNewLeadSelectionPath().toString();
+		}catch(NullPointerException exc){
+			return;
+		}
+		if(path == null)
+			return;
+		
+		String selection = path.substring(path.lastIndexOf(", ") + 2, path.lastIndexOf("]"));
+		
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		
+		actionsForFirstDerivativeFilter(0, selection, "sobel", lc, sobel);
+		actionsForFirstDerivativeFilter(1, selection, "roberts", lc, roberts);
+		actionsForFirstDerivativeFilter(2, selection, "prewitt", lc, prewitt);
+		actionsForFirstDerivativeFilter(3, selection, "frei_chen", lc, frei_chen);
+		actionsForConvolutionFilter(4, selection, "paso_bajo", lc, paso_bajo);
+		actionsForConvolutionFilter(5, selection, "mediana", lc, mediana);
+		actionsForConvolutionFilter(6, selection, "media", lc, media);
+		actionsForConvolutionFilter(7, selection, "gauss", lc, gauss);
+		actionsForConvolutionFilter(8, selection, "laplace", lc, laplace);
+		
+	}
+
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementAdded());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(true);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementRemoved());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(false);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public String getText() {
+		return PluginServices.getText(this, "filters");
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/gui/toc/WMSRasterFilterTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java	(revision 10281)
@@ -0,0 +1,451 @@
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.apache.log4j.Logger;
+import org.cresques.io.data.CutRasterProcess;
+import org.cresques.io.data.Grid;
+import org.cresques.io.data.ICutRaster;
+import org.cresques.io.data.IQueryableRaster;
+import org.cresques.px.Extent;
+import org.cresques.ui.raster.CutRasterPanel;
+import org.gvsig.gui.beans.table.models.CheckBoxModel;
+
+import com.hardcode.driverManager.Driver;
+import com.iver.andami.PluginServices;
+import com.iver.andami.Utilities;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.IWindowListener;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.drivers.RasterDriver;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.RectangleBehavior;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.CutRasterListener;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.StatusBarListener;
+
+
+
+public class CutRasterDialog extends JPanel implements IWindow, ActionListener,
+		ComponentListener, ICutRaster, IWindowListener {
+		
+	private static Logger logger = Logger.getLogger(CutRasterDialog.class.getName());
+	
+	private int 						width = 0, height = 0;
+	/**
+	 * Panel de recortado de imagen que está en la libreria raster
+	 */
+	private CutRasterPanel				cutPanel = null;
+	/**
+	 * Capa raster cargada en la vista que es la fuente de datos
+	 */
+	private FLyrRaster					fLayer = null;
+	/**
+	 * Ancho y alto en pixeles de la imagen a recortar
+	 */
+	private int 						widthPx = 0, heightPx = 0;
+	/**
+	 * clase que realiza el proceso de recortado y extracción de bandas
+	 */
+	private CutRasterProcess			process = null;
+	/**
+	 * Grid del raster fuente de datos
+	 */
+	private Grid 						grid = null;
+	/**
+	 * Valores iniciales de ancho y alto en pixeles de la ventana.
+	 */
+	private double 						initWidth, initHeight;
+	/**
+	 * Recuerda la última ruta seleccionada por el usuario
+	 */
+	private static String				lastPath = "./";
+	/**
+	 * Lista de ficheros creados. Si se ha creado una imagen por banda solo 
+	 * tendrá un elemento, sino tendrá uno por banda.
+	 */
+	private String[]					fileNames = null;
+	/**
+	 * Herramienta seleccionada en el momento de la apertura del dialogo
+	 */
+	private String						lastTool = null;
+	private MapControl					mapCtrl = null;
+	private String						viewName = null;
+
+	/**
+	 * Constructor
+	 * @param width Ancho
+	 * @param height Alto
+	 */
+	public CutRasterDialog(FLyrRaster layer, int width, int height, MapControl mapCtrl, String viewName){
+		this.width = width;
+		this.height = height;
+		this.fLayer = layer;
+		this.mapCtrl = mapCtrl;
+		this.lastTool = mapCtrl.getCurrentTool();
+		this.viewName = viewName;
+		
+		ArrayList attr = ((FLyrRaster)layer).getSource().getAttributes();
+   		for (int i=0; i<attr.size(); i++) {
+			Object[] a = (Object []) attr.get(i);
+			if(a[0].toString().equals("Width"))
+				widthPx = ((Integer)a[1]).intValue();
+			if(a[0].toString().equals("Height"))
+				heightPx = ((Integer)a[1]).intValue();
+		}
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setPreferredSize(new Dimension(width, height));
+		
+		this.add(getPCut(), gridBagConstraints);
+		this.addComponentListener(this);
+		
+		getPCut().getBSave().addActionListener(this);
+		getPCut().getBAccept().addActionListener(this);
+		getPCut().getBCancel().addActionListener(this);
+	
+	}
+	
+	/**
+	 * Obtiene el panel de recorte
+	 * @return TailImagePanel
+	 */
+	public CutRasterPanel getPCut(){
+		if(cutPanel == null){
+			try {
+				cutPanel = new CutRasterPanel(fLayer.getFullExtent(), widthPx, heightPx, this);
+			} catch (DriverException e) {
+				NotificationManager.addError("No se ha podido obtener el extent de la capa al crear el panel de recorte", e);
+				return null;
+			}
+			cutPanel.setComponentSize(this.width - 10, this.height - 40);
+			cutPanel.addComponentListener(this);
+		}
+		return cutPanel;
+	}
+	
+	/**
+	 * Asigna el valor inicial en ancho y alto de la ventana en pixeles .
+	 * @param w Ancho en pixeles
+	 * @param h Alto en pixeles
+	 */
+	public void setInitValuesToSize(double w, double h){
+		initWidth = w;
+		initHeight = h;
+	}
+		
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODELESSDIALOG /*| ViewInfo.RESIZABLE*/);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "recorte"));
+    	m_viewinfo.setWidth(width);
+    	m_viewinfo.setHeight(height - 36);
+		return m_viewinfo;
+	}
+
+	
+	/**
+	 * Al pulsar Cancelar o Aceptar la ventana se cierra.
+	 */
+	public void actionPerformed(ActionEvent e) {		
+		
+		//Botón de Aceptar o Aplicar
+		if(e.getSource() == cutPanel.getBAccept())
+			accept();
+		
+		//Botón de Cerrar
+		if(e.getSource() == cutPanel.getBCancel()){
+			try{
+	        	if(lastTool != null)
+	        		mapCtrl.setTool(lastTool);
+				PluginServices.getMDIManager().closeWindow(CutRasterDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+		
+		//Botón de Salvar
+		if(e.getSource() == cutPanel.getBSave())
+			saveRaster();
+				
+		fLayer.getMapContext().invalidate();
+	}
+
+	/**
+	 * Acciones realizadas cuando se acepta en el dialogo. Se obtendrán los datos de recorte desde el dialogo,
+	 * crearemos el objeto TailRasterProcess que gestiona el recortado, ajustamos el tamaño del grid
+	 * de salida y procesamos.
+	 */
+	private void accept(){
+		grid = fLayer.getGrid();
+		
+		//Controlamos las coordenadas del recorte que no se salgan de la imagen.
+		//De ser así mostramos un error
+		String[] values = cutPanel.getCoordReal();
+		try{
+			double minX = Double.parseDouble(values[0]);
+			double maxY = Double.parseDouble(values[1]);
+			double maxX = Double.parseDouble(values[2]);
+			double minY = Double.parseDouble(values[3]);
+			Extent ext = grid.getExtent();
+			if(minX > ext.maxX() || maxX < ext.minX() || minY > ext.maxY() || maxY < ext.minY()){
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+						PluginServices.getText(this, "coordenadas_erroneas"));
+				return;
+			}
+		}catch(NumberFormatException e){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this, "coordenadas_erroneas"));
+			return;
+		}
+		
+		//Obtenemos las coordenadas del recorte
+		String[] sValues = cutPanel.getCoordPixel();
+		int[] dValues = new int[sValues.length];
+		try{
+			for(int i = 0; i < sValues.length; i ++)
+				dValues[i] = (int)Math.round(Double.valueOf(sValues[i]).doubleValue());
+		}catch(NumberFormatException exc){
+			//Los valores de las cajas son incorrectos. Terminamos la función
+			return ;
+		}
+					
+		//Seleccionamos las bandas que se usaran en el recorte a partir de la tabla
+		int countBands = 0;
+		int rowCount = ((CheckBoxModel)getPCut().getTSelection().getModel()).getRowCount();
+		for(int iRow = 0; iRow < rowCount; iRow++)
+			if((((Boolean)((CheckBoxModel)getPCut().getTSelection().getModel()).getValueAt(iRow, 0))).booleanValue())
+				countBands++;
+		
+		int[] drawableBands = new int[countBands];
+		int i = 0;
+		for(int iRow = 0; iRow < rowCount; iRow++){
+			if((((Boolean)((CheckBoxModel)getPCut().getTSelection().getModel()).getValueAt(iRow, 0))).booleanValue()){
+				drawableBands[i ++] = iRow;
+			}
+		}
+				
+		//Usamos el directorio de temporales de andami
+		String tmpImgs = Utilities.createTempDirectory();
+		
+		process = new CutRasterProcess(	dValues,
+											drawableBands, 
+											grid, 
+											tmpImgs + File.separator + "cutLayer", cutPanel.getCbOneLyrPerBand().isSelected(),
+											(int)initWidth,
+											(int)initHeight,
+											this);
+		
+		//Remuestreamos por si se ha variado el tamaño del raster de salida
+		grid.setAdjustedWindow((int)cutPanel.getWidthText(), (int)cutPanel.getHeightText(), IQueryableRaster.INTERPOLATION_NearestNeighbour, null);
+		
+		fileNames = process.createWriters(grid.getRasterBuf(), (int)cutPanel.getWidthText(), (int)cutPanel.getHeightText());
+		process.start();
+		getPCut().getBSave().setEnabled(true);
+	
+	}
+	
+	/**
+	 * Acciones realizadas cuando se salva los recortes de raster. Aparecerá un dialogo para introducir
+	 * la ruta y salvaremos el raster completo con el nombre proporcionado o si se ha salvado por bandas
+	 * se guardará un fichero por cada una con el nombre proporcionado más _Bn.
+	 */
+	private void saveRaster(){
+		JFileChooser chooser = new JFileChooser(lastPath);
+		chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_directorio"));
+		
+		int returnVal = chooser.showOpenDialog(this);
+		if(returnVal == JFileChooser.APPROVE_OPTION){
+		 	String fName = chooser.getSelectedFile().toString();
+
+		 	if(fileNames == null || fileNames.length == 0)
+		 		return;
+		 	
+		 	try {
+			 	if(fileNames.length == 1){
+				 	if(!fName.endsWith(".tif"))
+				 		fName += ".tif";
+				 	File oldFile = new File(fileNames[0]);
+					org.cresques.util.Utilities.copyFile(fileNames[0], fName);
+			 	}else{
+			 		if(fName.endsWith(".tif"))
+			 			fName = fName.substring(0, fName.indexOf("."));
+			 		for(int iFile = 0; iFile < fileNames.length; iFile ++){
+			 			File oldFile = new File(fileNames[iFile]);
+			 			org.cresques.util.Utilities.copyFile(fileNames[iFile], fName + "_B" + iFile + ".tif");
+			 		}
+			 	}
+		 	} catch (FileNotFoundException e1) {
+				logger.error(PluginServices.getText(this,"file_not_found "), e1);
+			} catch (IOException e1) {
+				logger.error(PluginServices.getText(this,"io_exception"), e1);
+			}				 	
+		 		
+		 	lastPath = chooser.getCurrentDirectory().getAbsolutePath();
+		}
+		 	
+	}
+	
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		PluginServices.getMDIManager().getWindowInfo(PluginServices.getMDIManager().getActiveWindow()).setWidth(cutPanel.getWidth()+10);
+		PluginServices.getMDIManager().getWindowInfo(PluginServices.getMDIManager().getActiveWindow()).setHeight(cutPanel.getHeight()+40);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		
+	}
+
+	/**
+	 * Obtiene la capa raster
+	 * @return capa raster
+	 */
+	public FLyrRaster getFLayer() {
+		return fLayer;
+	}
+
+	/**
+	 * Acciones que se realizan al finalizar de crear los recortes de imagen.
+	 * Este método es llamado por el thread TailRasterProcess al finalizar.
+	 */
+	public void cutFinalize(String[] fileNames) {
+		//seleccionamos la vista de gvSIG
+		com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
+		try{
+			IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
+			for(int i = 0; i < allViews.length; i++){
+				if(allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View &&
+						PluginServices.getMDIManager().getWindowInfo((View)allViews[i]).getTitle().equals(viewName))
+					theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];					
+			}
+			if(theView == null)
+				return;
+		}catch(ClassCastException ex){
+			logger.error(PluginServices.getText(this,"cant_get_view "), ex);
+			return;
+		}
+		
+		//Cargamos las capas
+		for(int iFName = 0; iFName < fileNames.length; iFName ++){
+			theView.getMapControl().getMapContext().beginAtomicEvent();
+			try {
+				Driver driver = LayerFactory.getDM().getDriver("gvSIG Image Driver");
+				int endIndex = fileNames[iFName].lastIndexOf(".");
+				if(endIndex < 0)
+					endIndex = fileNames[iFName].length();
+				FLayer lyr = LayerFactory.createLayer(fileNames[iFName].substring(fileNames[iFName].lastIndexOf(File.separator) + 1, endIndex), 
+						(RasterDriver)driver, 
+						new File(fileNames[iFName]),
+						theView.getMapControl().getProjection());
+				theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
+			}catch (DriverException e) {
+				//Intentamos cargar el siguiente 
+				continue;
+			}
+			theView.getMapControl().getMapContext().endAtomicEvent();
+		}
+		theView.getMapControl().getMapContext().invalidate();
+		grid.free();
+		
+		/*try{
+			PluginServices.getMDIManager().closeView(this);
+		}catch(ArrayIndexOutOfBoundsException ex){
+			//Si la ventana no se puede eliminar no hacemos nada
+		}*/
+	}
+
+	/**
+	 * Acciones que se realizan para seleccionar la tool CutRaster
+	 */
+	public void selectToolButton() {
+		//seleccionamos la vista de gvSIG
+		com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
+		try{
+			IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
+			for(int i = 0; i < allViews.length; i++){
+				if(allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View &&
+						PluginServices.getMDIManager().getWindowInfo((View)allViews[i]).getTitle().equals(viewName))
+					theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];					
+			}
+			if(theView == null)
+				return;
+		}catch(ClassCastException ex){
+			logger.error(PluginServices.getText(this,"cant_get_view "), ex);
+			return;
+		}
+    	MapControl m_MapControl = theView.getMapControl();
+    	
+		//Listener de eventos de movimiento que pone las coordenadas del ratón en la barra de estado
+        StatusBarListener sbl = new StatusBarListener(m_MapControl);
+        
+        //Cortar Raster
+        CutRasterListener crl = new CutRasterListener(m_MapControl, this);
+        m_MapControl.addMapTool("cutRaster", new Behavior[]{
+        				new RectangleBehavior(crl), new MouseMovementBehavior(sbl)});
+        
+        m_MapControl.setTool("cutRaster");
+	}
+
+	public void windowActivated() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void windowClosed() {
+		if(lastTool != null)
+    		mapCtrl.setTool(lastTool);
+	}
+
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/CutRasterDialog.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java	(revision 10281)
@@ -0,0 +1,368 @@
+/*
+ * Created on 19-jul-2006
+ *
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.channels.FileChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.cresques.io.datastruct.Histogram;
+import org.cresques.ui.raster.HistogramPanel;
+
+import com.hardcode.driverManager.DriverLoadException;
+import com.hardcode.gdbms.engine.data.DataSource;
+import com.hardcode.gdbms.engine.data.DataSourceFactory;
+import com.hardcode.gdbms.engine.data.NoSuchTableException;
+import com.hardcode.gdbms.engine.data.driver.DriverException;
+import com.hardcode.gdbms.engine.values.Value;
+import com.hardcode.gdbms.engine.values.ValueFactory;
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.ProjectExtension;
+import com.iver.cit.gvsig.fmap.drivers.shp.DbaseFileHeaderNIO;
+import com.iver.cit.gvsig.fmap.drivers.shp.DbaseFileWriterNIO;
+import com.iver.cit.gvsig.fmap.edition.EditableAdapter;
+import com.iver.cit.gvsig.fmap.layers.LayerFactory;
+import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
+import com.iver.cit.gvsig.project.ProjectFactory;
+import com.iver.cit.gvsig.project.documents.table.ProjectTable;
+import com.iver.cit.gvsig.project.documents.table.ProjectTableFactory;
+import com.iver.cit.gvsig.project.documents.table.gui.Table;
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class HistogramDialog extends JPanel implements IWindow, ActionListener, ComponentListener{
+	private final int		HBUTTONS = 28;
+	private final int		MARGIN = 10;
+	
+	private int 			width = 0;
+	private int 			height = 0;
+	private HistogramPanel 	histPanel = null;
+	private JPanel			pButtons = null;
+	private JButton			bClose = null;
+
+	
+	public HistogramDialog(int width, int height){
+		this.width = width;
+		this.height = height;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.gridx = 0;
+		gridBagConstraints1.gridy = 1;
+		
+		this.add(getPHistogram(), gridBagConstraints);
+		this.add(getPButtons(), gridBagConstraints1);
+		this.addComponentListener(this);
+	}
+	
+	/**
+	 * Obtiene el panel con el histograma
+	 * @return HistogramPanel
+	 */
+	public HistogramPanel getPHistogram(){
+		if(histPanel == null){
+			histPanel = new HistogramPanel(width - MARGIN, height - MARGIN);
+			histPanel.getBCreateTable().addActionListener(this);
+		}
+		return histPanel;
+	}
+	
+	/**
+	 * Obtiene el panel con los botones inferiores
+	 * @return JPanel
+	 */
+	public JPanel getPButtons(){
+		if(pButtons == null){
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
+			flowLayout.setHgap(2);
+			flowLayout.setVgap(0);
+			pButtons = new JPanel();	
+			//pButtons.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
+			pButtons.setLayout(flowLayout);
+			pButtons.add(getBClose(), null);
+			pButtons.setPreferredSize(new Dimension(width - MARGIN, HBUTTONS));
+		}
+		return pButtons;
+	}
+	
+	/**
+	 * Obtiene el botón inferior
+	 * @return JButton
+	 */
+	public JButton getBClose(){
+		if(bClose == null){
+			bClose = new JButton();
+			bClose.setText(PluginServices.getText(this, "Cerrar"));
+			bClose.setPreferredSize(new java.awt.Dimension(100,25));
+			bClose.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+			bClose.addActionListener(this);
+		}
+		return bClose;
+	}
+	
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG | WindowInfo.RESIZABLE);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "histograma"));
+    	m_viewinfo.setWidth(width);
+    	m_viewinfo.setHeight(height);
+		return m_viewinfo;
+	}
+
+	/**
+	 * Asigna el tamaño del componente
+	 * @param w Nuevo ancho del componente padre
+	 * @param h Nuevo alto del componente padre
+	 */
+	/*public void setComponentSize(int w, int h){
+		getPButtons().setPreferredSize(new Dimension(w - MARGIN, HBUTTONS));
+	}*/
+	
+	public void actionPerformed(ActionEvent e) {
+		
+		//Botón de cerrar
+		if(e.getSource() == bClose){
+			try{
+				PluginServices.getMDIManager().closeWindow(HistogramDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+//		--------------------------------------		
+		//Botón Crear tabla.
+		JButton table = histPanel.getBCreateTable();
+		if(e.getSource() == table){
+
+	        try {
+//	        	-------Mostrar un fileChooser------------------
+	        	String fName;
+	        	JFileChooser chooser = new JFileChooser();
+	    		chooser.setDialogTitle(PluginServices.getText(this, "guardar_tabla"));
+	    		
+	    		int returnVal = chooser.showOpenDialog(this);
+	    		if(returnVal == JFileChooser.APPROVE_OPTION){
+	    		 	fName = chooser.getSelectedFile().toString();
+	    			if(!fName.endsWith(".dbf"))
+	    				fName += ".dbf";
+	        	     
+	    			//-------------Crear el dbf----------------------
+	    		
+		    		DbaseFileWriterNIO dbfWrite = null;
+			        DbaseFileHeaderNIO myHeader;
+			        Value[] record;
+		        	
+		        	int histogram[][]=histPanel.getLastHistogram();
+		        	int numBands = histogram.length;
+		        	int numRecors = histogram[0].length;
+		        	
+		        	File file = new File(fName);
+		        	
+		        	String names[] = new String[numBands+1];
+		        	int types[] = new int [numBands+1];
+		        	int lengths[] = new int [numBands+1];
+		        	
+		        	names[0]="Value";
+	        		types[0]=4;
+	        		lengths[0]=15;
+		        	for (int band = 0; band < numBands; band++){
+		        		names[band+1]="Band"+band;
+		        		types[band+1]=4;
+		        		lengths[band+1]=15;
+		        	}
+		        	
+		            myHeader = DbaseFileHeaderNIO.createDbaseHeader(names,types,lengths);
+	
+		            myHeader.setNumRecords(numRecors);
+		            dbfWrite = new DbaseFileWriterNIO(myHeader,
+		                    (FileChannel) getWriteChannel(file.getPath()));
+		            record = new Value[numBands+1];
+	
+		            for (int j = 0; j < numRecors; j++) {
+		            	record[0] = ValueFactory.createValue(j);
+		                for (int r = 0; r < numBands; r++) {
+		                    record[r+1] = ValueFactory.createValue(histogram[r][j]);
+		                }
+	
+		                dbfWrite.write(record);
+		            }
+	
+		            dbfWrite.close();
+		            
+		            //------------Añadir el dbf al proyecto--------------
+					ProjectExtension ext = (ProjectExtension) PluginServices.getExtension(ProjectExtension.class);
+					String name = file.getName();
+					LayerFactory.getDataSourceFactory()
+							.addFileDataSource("gdbms dbf driver",
+									name, fName);
+					DataSource dataSource;
+						dataSource = LayerFactory.getDataSourceFactory()
+													.createRandomDataSource(name, DataSourceFactory.AUTOMATIC_OPENING);
+					
+					SelectableDataSource sds = new SelectableDataSource(dataSource);
+					EditableAdapter auxea=new EditableAdapter();
+					auxea.setOriginalDataSource(sds);
+					ProjectTable projectTable = ProjectFactory.createTable(name, auxea);
+					//ext.getProject().addTable(projectTable);
+					ext.getProject().addDocument(projectTable);
+					
+					Table t = new Table();
+					t.setModel(projectTable);
+					//projectTable.setAndamiWindow(t);
+					PluginServices.getMDIManager().addWindow(t);
+	    		}
+			} catch (DriverLoadException e1) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError(e1);
+			} catch (NoSuchTableException e1) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError(e1);
+			} catch (DriverException e1) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError(e1);
+			}catch (IOException ex) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+						PluginServices.getText(this,"table_not_create"));
+				NotificationManager.addError("Error al crear un DbaseFileHeaderNIO", ex);
+	        }
+		}
+		
+		//--------------------------------------
+	}
+	/**
+	 * 
+	 * @param path
+	 * @return
+	 * @throws IOException
+	 */
+	private WritableByteChannel getWriteChannel(String path)throws IOException {
+		WritableByteChannel channel;
+		
+		File f = new File(path);
+		
+		if (!f.exists()) {
+			System.out.println("Creando fichero " + f.getAbsolutePath());
+			
+			if (!f.createNewFile()) {
+				throw new IOException("Cannot create file " + f);
+			}
+		}
+		
+		RandomAccessFile raf = new RandomAccessFile(f, "rw");
+		channel = raf.getChannel();
+		
+		return channel;
+	}
+	 
+	/**
+	 * Asigna el objeto histograma para la gestión de procesos de histograma
+	 * @param histogramObj
+	 */
+	public void setHistogramObj(Histogram histogramObj) {
+		histPanel.setHistogram(histogramObj);
+	}
+
+	/**
+	 * Obtiene el panel con el histograma gráfico y los controles
+	 * @return HistogramPanel
+	 */
+	public HistogramPanel getHistogramPanel() {
+		return histPanel;
+	}
+	
+	/**
+	 * Asigna el número de bandas al combobox
+	 * @param bands Número de bandas de la imagen
+	 */
+	public void setBands(int bands){
+		histPanel.setBands(bands);
+	}
+
+	/**
+	 * Resetea el control de bandas del panel con los valores RGB para 
+	 * cuando se está haciendo el histograma de la visualización en
+	 * vez del histograma con los datos
+	 *
+	 */
+	public void setRGBInBandList(){
+		histPanel.setRGBInBandList();
+	}
+	
+	/**
+	 *Asigna el combo "Origen" el valor de solo vista para el calculo del histograma. Esa opción es 
+	 *utilizada para extensiones que necesitan histograma pero no pueden acceder a la fuente de datos.
+	 */
+	public void setOnlyViewValue(){
+		histPanel.setOnlyViewValue();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		getPButtons().setPreferredSize(new Dimension(getWidth() + 8 - MARGIN, HBUTTONS));
+		histPanel.setComponentSize(getWidth() + 8 - MARGIN, getHeight() - 42);
+		PluginServices.getMDIManager().refresh(this);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+}  
+

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/HistogramDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java	(revision 10281)
@@ -0,0 +1,323 @@
+/*
+ * Created on 19-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+import org.cresques.io.datastruct.Palette;
+import org.cresques.ui.raster.PalettePanel;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+import org.gvsig.gui.beans.table.models.TableButtonModel;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.messages.NotificationManager;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.RasterOperations;
+
+/**
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class PaletteDialog extends JPanel implements IWindow, ActionListener, ComponentListener{
+	private final int					MARGIN = 8;
+	
+	private int 						width = 0;
+	private int 						height = 0;
+	private PalettePanel 				palPanel = null;
+	private RasterFilterStackManager	stackManager = null;
+	private RasterOperations			fLayer = null;
+	private ArrayList					filters = null;
+	
+	/**
+	 * Constructor
+	 * @param width Ancho
+	 * @param height Alto
+	 */
+	public PaletteDialog(RasterOperations layer, RasterFilterStackManager stackManager, int width, int height){
+		this.width = width;
+		this.height = height;
+		this.stackManager = stackManager;
+		this.fLayer = layer;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setPreferredSize(new Dimension(width, height));
+		
+		this.add(getPPalette(), gridBagConstraints);
+		this.addComponentListener(this);
+		
+		getPPalette().getCbInterpolar().addActionListener(this);
+		getPPalette().getBAccept().addActionListener(this);
+		getPPalette().getBApply().addActionListener(this);
+		getPPalette().getBCancel().addActionListener(this);
+		getPPalette().getBSave().addActionListener(this);
+		getPPalette().getBSaveAs().addActionListener(this);
+		
+		//Salvamos el estado del filtro de paleta, si hay alguno en la pila
+		RasterFilterStack filterStack = stackManager.getFilterStack();
+		PaletteFilter pf = (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+		if(pf != null){
+			filters = new ArrayList();
+			PaletteStackManager paletteStackManager =  (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+			if(paletteStackManager != null)
+				filters = paletteStackManager.getStringsFromStack(filters, pf);
+		}
+	}
+	
+	/**
+	 * Obtiene el panel con el histograma
+	 * @return HistogramPanel
+	 */
+	public PalettePanel getPPalette(){
+		if(palPanel == null){
+			palPanel = new PalettePanel(width - MARGIN, 
+										height - MARGIN,
+										System.getProperty("user.home") + File.separator +
+											PluginServices.getArguments()[0] + File.separator + "palettes.xml");
+			palPanel.setComponentSize(width - MARGIN, height - MARGIN);
+		}
+		return palPanel;
+	}
+		
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODELESSDIALOG /*| ViewInfo.RESIZABLE*/);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "paleta"));
+    	m_viewinfo.setWidth(width);
+    	m_viewinfo.setHeight(height + 10);
+    	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+    	m_viewinfo.setX( ((((int)d.getWidth()) >> 1) - (width >> 1)) );
+    	m_viewinfo.setY( ((((int)d.getHeight()) >> 1) - (int)(height / 1.5)) );
+		return m_viewinfo;
+	}
+
+	
+	/**
+	 * Valida que el campo de valores RGB de la tabla tenga 3 valores enteros separados
+	 * por comas y que el rango de valores sea numerico
+	 * @return
+	 */
+	private boolean validateFields(){
+		try{
+			TableButtonModel model = (TableButtonModel)palPanel.getPTable().getModel();
+			for(int iRow = 0; iRow < palPanel.getPTable().getRowCount(); iRow ++){
+				for(int iCol = 1; iCol < 4; iCol ++){
+					String value = (String)model.getValueAt(iRow, iCol);
+					switch(iCol){
+						case 2:	try{
+									String[] rgb = value.split(",");
+									Integer.valueOf(rgb[0]);
+									Integer.valueOf(rgb[1]);
+									Integer.valueOf(rgb[2]);
+								}catch(NumberFormatException exc){
+									return false;
+								}catch(ArrayIndexOutOfBoundsException exc){
+									return false;
+								}
+								break;
+						case 3:	try{
+									Double.valueOf(value);
+								}catch(NumberFormatException exc){
+									return false;
+								}
+								break;
+					}
+				}
+				String value = (String)model.getValueAt(iRow, 4);
+				try{
+					Integer.valueOf(value);
+				}catch(NumberFormatException exc){
+					return false;
+				}
+			}
+			return true;
+		}catch(NotInitializeException exc){
+			return false;
+		}
+	}
+	
+	/**
+	 * Obtiene el objeto paleta desde el filtro de paleta cargado en la pila
+	 * @return Objeto palette
+	 */
+	public Palette getPalette(){
+		return ((Palette)getPaletteFilter().getParam("palette"));
+	}
+	
+	/**
+	 * Obtiene el filtro de paleta cargado en la pila
+	 * @return Filtro de paleta
+	 */
+	public PaletteFilter getPaletteFilter(){
+		RasterFilterStack filterStack = stackManager.getFilterStack();
+		return (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+	}
+	
+	/**
+	 * Al pulsar Aceptar o Aplicar se añade un filtro de paleta en la pila en caso de que
+	 * no exista ninguno. Si hay alguno entonces se modifica el que hay.
+	 * 
+	 * Al pulsar Cancelar o Aceptar la ventana se cierra.
+	 */
+	public void actionPerformed(ActionEvent e) {		
+				
+		//Botón de Aceptar o Aplicar
+		if(	e.getSource() == palPanel.getBAccept() || 
+			e.getSource() == palPanel.getBApply() || 
+			e.getSource() == palPanel.getBSave() || 
+			e.getSource() == palPanel.getBSaveAs()){
+			
+			if(palPanel.isActivePanel()){
+				if(!validateFields())
+					return;
+							
+				palPanel.orderRows();
+				
+				if(getPaletteFilter() != null){
+					if(e.getSource() == palPanel.getBAccept() || e.getSource() == palPanel.getBApply())
+						getPaletteFilter().setExec(true);
+					
+					//Modificar paleta de la pila
+					try {
+						if(palPanel.getTablePalette() != null){
+							Palette pal = getPalette();
+							pal.createPaletteFromTable(	palPanel.getTablePalette(), 
+														fLayer.getDataType());
+							pal.addName(palPanel.getCbList().getSelectedItem().toString());
+							getPaletteFilter().addParam("interpolate",new Boolean(palPanel.getCbInterpolar().isSelected()));
+						}
+						else
+							stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+					} catch (NotInitializeException e1) {
+						JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+								PluginServices.getText(this,"palette_not_create"));
+						NotificationManager.addError("No se ha podido crear la paleta desde la tabla", e1);
+					}
+				}else{
+					//Añadir un filtro de paleta
+					Palette palette = new Palette(palPanel.getCbList().getSelectedItem().toString());
+					
+					try {
+						if(palPanel.getTablePalette() != null){
+							palette.createPaletteFromTable(palPanel.getTablePalette(), fLayer.getDataType());
+							PaletteStackManager psm = (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+			                stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+			                psm.addPaletteFilter(palette,palPanel.getCbInterpolar().isSelected());
+			                
+			                if(e.getSource() == palPanel.getBSave() || e.getSource() == palPanel.getBSaveAs())
+								getPaletteFilter().setExec(false);
+			                else
+			                	getPaletteFilter().setExec(true);
+						
+						}
+					} catch (NotInitializeException e1) {
+						JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),this.getName() + " " +
+								PluginServices.getText(this,"palette_not_create"));
+						NotificationManager.addError("No se ha podido crear la paleta desde la tabla", e1);
+					}
+				}
+			}else { //Si no está activo el panel
+				//Decimos al filtro que no se ejecute
+				RasterFilter rf  = stackManager.getFilter("palette");
+				if(rf != null)
+					rf.setExec(false);
+			}
+			
+		}
+		
+		//Botón de Aceptar o Cerrar
+		if(e.getSource() == palPanel.getBAccept() || e.getSource() == palPanel.getBCancel()){
+			//Solo si ha cancelado restauramos el valor inicial del filtro de paleta en la pila
+			if(e.getSource() == palPanel.getBCancel()){
+				stackManager.getFilterStack().removeFilter(PaletteStackManager.palette);
+				if(filters != null){
+					PaletteStackManager paletteStackManager =  (PaletteStackManager)stackManager.getManagerByClass(PaletteStackManager.class);
+					if(paletteStackManager != null)
+						paletteStackManager.createStackFromStrings(filters, (String)filters.get(0), null, 0);
+				}
+			}
+			try{
+				PluginServices.getMDIManager().closeWindow(PaletteDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+		
+		//Check de Interpolación
+		if(e.getSource() == palPanel.getCbInterpolar()){
+				if(getPaletteFilter() != null)
+					getPaletteFilter().addParam("interpolate", new Boolean(palPanel.getCbInterpolar().isSelected()));
+			return;
+		}
+		
+		if(fLayer instanceof FLayer)
+			((FLayer)fLayer).getMapContext().invalidate();
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		/*this.width = this.getWidth() + 10;
+		this.height = this.getHeight() - 4;
+		getPPalette().setComponentSize(width - MARGIN, height - MARGIN);*/
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}  
+
+

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/PaletteDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java	(revision 10281)
@@ -0,0 +1,313 @@
+/*
+ * Created on 25-jul-2006
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Informaciï¿½n Geogrï¿½fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.gui.dialogs;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.ListModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.RasterFilter.Kernel;
+import org.cresques.filter.convolution.ConvolutionStackManager;
+import org.cresques.filter.correction.MedianStackManager;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.filter.segmentation.FirstDerivativeStackManager;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+
+/**
+ * Dialogo para los filtros de raster.
+ * 
+ * @author Nacho Brodin <brodin_ign@gva.es>
+ */
+public class RasterFilterDialog extends JPanel implements IWindow, ActionListener, ComponentListener{
+	private final int					MARGIN = 4;
+	
+	private int 						width = 0;
+	private int 						height = 0;
+	private RasterFilterPanel 			filterPanel = null;
+	private JPanel						pButtons = null;
+	private JButton						bClose = null;
+	private RasterFilterStackManager	stackManager = null;
+	private FLayer	 				fLayer = null;
+	
+	/**
+	 * Constructor 
+	 * @param width	Ancho del panel
+	 * @param height Alto del panel
+	 * @param stackManager Gestor de la pila de filtros
+	 */
+	public RasterFilterDialog(FLayer layer, int width, int height, RasterFilterStackManager stackManager){
+		this.width = width;
+		this.height = height;
+		this.fLayer = layer;
+		this.stackManager = stackManager;
+		
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.gridx = 0;
+		gridBagConstraints.gridy = 0;
+		this.setLayout(new GridBagLayout());
+		this.add(getPFilter(), gridBagConstraints);
+		this.addComponentListener(this);
+	}
+		
+	/**
+	 * Obtiene el panel de filtros
+	 * @return HistogramPanel
+	 */
+	public RasterFilterPanel getPFilter(){
+		if(filterPanel == null){
+			filterPanel = new RasterFilterPanel(width, height);
+			filterPanel.getBAccept().addActionListener(this);
+			filterPanel.getBApply().addActionListener(this);
+			filterPanel.getBClose().addActionListener(this);
+		}
+		return filterPanel;
+	}
+	
+	/**
+	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG /*| WindowInfo.RESIZABLE*/);
+    	m_viewinfo.setTitle(PluginServices.getText(this, "Filtros"));
+    	m_viewinfo.setWidth(width + MARGIN);
+    	m_viewinfo.setHeight(height + MARGIN);
+		return m_viewinfo;
+	}
+
+	/**
+	 * Acciones realizadas al pulsar los botones de Aceptar, Aplicar o Cancelar del dialogo general
+	 * de filtros.
+	 */
+	public void actionPerformed(ActionEvent e) {
+
+		//Al pulsar Aceptar o aplicar se añaden los filtros
+		if(e.getSource() == getPFilter().getBApply() || e.getSource() == getPFilter().getBAccept()){
+			RasterFilterStack stack = stackManager.getFilterStack();
+
+			// Quitamos lo filtros de la pila que se han eliminado de la lista
+			removeFiltersFromStack(stack);
+			
+			ListModel model = getSelector().getList().getModel();
+			for(int iListFilter = 0; iListFilter < model.getSize(); iListFilter ++){
+				String filterName = getSelector().getMap().get(model.getElementAt(iListFilter).toString()).toString();
+				addFilterByName(filterName);
+			}
+			
+			fLayer.getMapContext().invalidate();
+		}
+		
+		//Al pulsar Cerrar o Aceptar la ventana se cierra
+		if(e.getSource() == getPFilter().getBClose() || e.getSource() == getPFilter().getBAccept()){
+			try{
+				PluginServices.getMDIManager().closeWindow(RasterFilterDialog.this);
+			}catch(ArrayIndexOutOfBoundsException ex){
+				//Si la ventana no se puede eliminar no hacemos nada
+			}
+		}
+				
+	}
+
+	/**
+	 * Añade un filtro desde el dialogo en la pila de filtros a partir de los parámetros
+	 * del panel.
+	 * @param filterName Nombre del filtro.
+	 */
+	private void addFilterByName(String filterName){
+		if(filterName.equals("sobel")||filterName.equals("roberts")||filterName.equals("prewitt")||filterName.equals("frei_chen")){
+			//stackManager.removeFilter(FirstDerivativeStackManager.firstDerivative);
+			FirstDerivativePanel panel =  (FirstDerivativePanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			int umbral = 0;
+			try{
+				if (panel.getCbUmbralizar().isSelected())
+					umbral = Integer.valueOf(panel.getTUmbral().getText()).intValue();
+			}catch(NumberFormatException ex){
+				//No se ha podido leer el umbral y no hacemos nada. Tendrá el valor por defecto
+			}
+			boolean compare = panel.getCbUmbralizar().isSelected();
+			FirstDerivativeStackManager manager = (FirstDerivativeStackManager)stackManager.getManagerByClass(FirstDerivativeStackManager.class);
+			
+			int operator = -1;
+			if (filterName.equals("sobel")) operator = FirstDerivativeFilter.TYPE_SOBEL;
+			else if (filterName.equals("roberts"))operator = FirstDerivativeFilter.TYPE_ROBERTS;
+			else if (filterName.equals("prewitt"))operator = FirstDerivativeFilter.TYPE_PREWITT;
+			else if (filterName.equals("frei_chen"))operator = FirstDerivativeFilter.TYPE_FREICHEN;
+			
+			manager.addFirstDerivativeFilter(umbral, operator ,compare,filterName);
+			
+		}else if(filterName.equals("laplace")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			double k[][] = null;
+			double k3[][]= {{-1,-1,-1},{-1,8,-1},{-1,-1,-1}};
+			double k5[][]= {{0,0,-1,0,0},{0,-1,-2,-1,0},{-1,-2,16,-2,-1},{0,-1,-2,-1,0},{0,0,-1,0,0}};
+			switch(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue()){
+				case 3:
+					k = k3;
+					break;
+				case 5:
+					k = k5;
+					break;
+			}
+				
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+			
+		}else if(filterName.equals("gauss")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			double k[][] = null;
+			double k3[][]= {{1,4,1},{4,12,4},{1,4,1}};
+			double k5[][]= {{1,2,3,2,1},{2,7,11,7,2},{3,11,17,11,3},{2,7,11,7,2},{1,2,3,2,1}};
+			switch(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue()){
+				case 3:
+					k = k3;
+					break;
+				case 5:
+					k = k5;
+					break;
+			}
+				
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+			
+		}else if(filterName.equals("media")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			int ladoVentana = Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue();
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			
+			double k[][]= new double[ladoVentana][ladoVentana];
+			for (int i=0; i<ladoVentana; i++)
+				for (int j=0; j<ladoVentana; j++)
+					k[i][j]=1;
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+			
+		}else if(filterName.equals("mediana")){
+			KernelFiltersPanel panel =  (KernelFiltersPanel)RasterFilterPanel.getPanel(PluginServices.getText(this,filterName));
+			MedianStackManager manager = (MedianStackManager)stackManager.getManagerByClass(MedianStackManager.class);
+			manager.addMedianFilter(Integer.valueOf(panel.getCbKernel().getSelectedItem().toString()).intValue());
+			
+		}else if(filterName.equals("paso_bajo")){
+			ConvolutionStackManager manager = (ConvolutionStackManager)stackManager.getManagerByClass(ConvolutionStackManager.class);
+			double k[][]= {{0,1,0},{1,6,1},{0,1,0}};
+			manager.addConvolutionFilter(new Kernel(k),0,filterName);
+		}
+		
+	}
+	
+	/**
+	 *Quita los filtros de la pila que no están en la lista. Esto solo tiene efecto para aquellos filtros con nombre
+	 *ya que son los filtros de usuario. Los filtros que no tienen nombre (filterName) no se visualizan en la lista por
+	 *lo que no son eliminados de esta.
+	 *@param stack Pila de filtros.
+	 */
+	private void removeFiltersFromStack(RasterFilterStack stack){
+		//Recorremos la pila de filtros y eliminamos los que están "registrados" en el interfaz de filtros.
+		for(int iFilter = 0; iFilter < stack.lenght(); iFilter ++){
+			RasterFilter rf = stack.get(iFilter);
+			if(!rf.getFilterName().equals("") && getSelector().getMap().containsValue(rf.getFilterName())){
+					stack.removeFilter(rf);
+					iFilter--;
+			}
+		}	
+	}
+	
+	/**
+	 * Obtiene el panel con el selector de filtros
+	 * @return TreeListContainer
+	 */
+	public TreeListContainer getSelector(){
+		return filterPanel.getPSelector();
+	}
+	
+	//-------------------------------------------
+	//MÉTODOS DEL LISTENER
+	
+	public void componentHidden(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentMoved(ComponentEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void componentResized(ComponentEvent e) {
+		this.width = this.getWidth();
+		this.height = this.getHeight();
+		getPFilter().setSizeComponent(width - MARGIN, height - MARGIN);
+	}
+
+	public void componentShown(ComponentEvent e) {
+		// TODO Auto-generated method stub
+	}
+	
+	//-------------------------------------------
+	//MÉTODOS DEL COMPONENTE
+	
+	/**
+	 * Asigna el panel visible en el dialogo
+	 * @param pos Posición del panel
+	 */
+	public void setVisiblePanel(int pos){
+		getPFilter().setVisiblePanel(pos);
+	}
+	
+	/**
+	 * Obtiene el panel visible
+	 * @return panel visible
+	 */
+	public JPanel getVisiblePanel(){
+		return getPFilter().getVisiblePanel();
+	}
+	
+	/**
+	 * Obtiene el panel de la posición solicitada
+	 * @param pos Posición del panel solicitado
+	 * @return panel solicitado
+	 */
+	public JPanel getPanel(int pos){
+		return RasterFilterPanel.getPanel(pos);
+	}
+	
+	
+}  
+

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/gui/dialogs/RasterFilterDialog.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,130 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.io.GeoRasterFile;
+import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.tools.Behavior.Behavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.MouseMovementBehavior;
+import com.iver.cit.gvsig.fmap.tools.Behavior.RectangleBehavior;
+import com.iver.cit.gvsig.project.documents.view.gui.View;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.CutRasterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.CutRasterListener;
+import com.iver.cit.gvsig.project.documents.view.toolListeners.StatusBarListener;
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente al cuadro
+ * de de recorte de raster, cambio de resolución y extracción de bandas.
+ * 
+ * @author Diego Guerrero (diego.guerrero@uclm.es)
+ *
+ */
+public class CutRasterTocMenuEntry extends AbstractTocContextMenuAction {
+	private JMenuItem 						recorte;
+	private FLayer							lyr = null;
+	private CutRasterDialog					cutRasterDialog = null;
+	private int 							width = 438;
+	private int 							height = 617;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 3;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de recorte de raster  
+	 * cambio de resolución y extracción de bandas cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrRaster){
+       		
+       		View theView = (View) PluginServices.getMDIManager().getActiveWindow();
+       		String viewName = PluginServices.getMDIManager().getWindowInfo(theView).getTitle();
+        	MapControl m_MapControl = theView.getMapControl();
+        	
+        	cutRasterDialog = new CutRasterDialog((FLyrRaster)lyr, width, height, m_MapControl, viewName);			
+       		PluginServices.getMDIManager().addWindow(cutRasterDialog);
+        	
+        	//Listener de eventos de movimiento que pone las coordenadas del ratón en la barra de estado
+	        StatusBarListener sbl = new StatusBarListener(m_MapControl);
+	        
+	        //Cortar Raster
+	        CutRasterListener crl = new CutRasterListener(m_MapControl,cutRasterDialog);
+	        m_MapControl.addMapTool("cutRaster", new Behavior[]{
+	        				new RectangleBehavior(crl), new MouseMovementBehavior(sbl)});
+	        
+	        //m_MapControl.setTool("cutRaster");
+	        
+	        GeoRasterFile[] files = ((FLyrRaster)lyr).getSource().getFiles();
+	        
+	        for (int i=0;i<files.length;i++){
+	        	String fileName = files[i].getName();
+	        	for(int j=0;j<files[i].getBandCount();j++){
+	        		Object row[] = {new Boolean(true),new String("B"+(j+1)+" - "+fileName.substring(fileName.lastIndexOf(File.separator)+1,fileName.length()))};
+	        		try {
+						cutRasterDialog.getPCut().getTSelection().addRow(row);
+					} catch (NotInitializeException e1) {
+						e1.printStackTrace();
+					}
+	        	}
+	        }
+        }
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "recorte");
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/CutRasterTocMenuEntry.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,116 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.io.data.RasterBuf;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.layers.FLyrVect;
+import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.HistogramDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente al cuadro
+ * del histograma raster
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class HistogramTocMenuEntry extends AbstractTocContextMenuAction {
+	private JMenuItem 						properties;
+	private FLayer							lyr = null;
+	private HistogramDialog					histogramDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 600;//650
+	private int 							height = 430;//500
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 0;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de histogramas de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+		lyr = getNodeLayer(item);
+        
+       	if(lyr instanceof FLyrRaster){
+       		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+
+    		histogramDialog = new HistogramDialog(width, height);
+   
+    		if( ((FLyrRaster)lyr).getGrid().getDataType() == RasterBuf.TYPE_DOUBLE ||
+    			((FLyrRaster)lyr).getGrid().getDataType() == RasterBuf.TYPE_FLOAT)
+    			histogramDialog.setOnlyViewValue();
+    		
+    		histogramDialog.setHistogramObj(((FLyrRaster)lyr).getGrid().getHistogram());
+    		
+    		//Parámetros de inicialización del histograma
+    		histogramDialog.getHistogramPanel().setHistogramDataSource(0); //Fuente de datos; la vista
+    		histogramDialog.getHistogramPanel().setType(0); //Tipo de histograma; no acumulado
+    		histogramDialog.setRGBInBandList(); //Asignación R,G,B en el combo
+    		histogramDialog.getHistogramPanel().showHistogram(); //Dibujamos histograma
+       		       					
+       		PluginServices.getMDIManager().addWindow(histogramDialog);
+        }
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "histograma");
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/HistogramTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,128 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import javax.swing.JMenuItem;
+
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.bands.PaletteFilter;
+import org.cresques.filter.bands.PaletteStackManager;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.PaletteDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente al cuadro
+ * del paletas raster
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class PaletteTocMenuEntry extends AbstractTocContextMenuAction {
+	private JMenuItem 						paleta;
+	private FLayer							lyr = null;
+	private PaletteDialog					paletteDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 408;
+	private int 							height = 420;
+
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 1;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	if(((FLyrRaster)lyr).getSource().getNumBands() != 1)
+            		return false;
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de paletas de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrRaster){
+       		RasterFilterStack filterStack = ((FLyrRaster)lyr).getSource().getFilterStack();
+       		stackManager = new RasterFilterStackManager(filterStack);
+
+    		paletteDialog = new PaletteDialog((FLyrRaster)lyr, stackManager, width, height);
+			PaletteFilter pf = (PaletteFilter)filterStack.getByType(PaletteStackManager.palette);
+			
+			//Si hay en la pila alguna paleta la carga en el dialogo
+			if(pf != null && pf.getPalette() != null){
+				paletteDialog.getPPalette().loadPanelFromPalette(pf.getPalette());
+				if(pf.isExec())
+					paletteDialog.getPPalette().getCActive().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCActive().setSelected(false);
+				
+				if(pf.isInterpolate())
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(true);
+				else
+					paletteDialog.getPPalette().getCbInterpolar().setSelected(false);
+				
+				//Asignamos el nombre en el dialogo
+				for(int i = 0; i < paletteDialog.getPPalette().getCbList().getItemCount(); i++){
+					String name = paletteDialog.getPPalette().getCbList().getItemAt(i).toString();
+					if(name.equals(paletteDialog.getPalette().getName())){
+						paletteDialog.getPPalette().getCbList().setSelectedIndex(i);
+						break;
+					}
+				}
+			}
+	
+       		PluginServices.getMDIManager().addWindow(paletteDialog);
+        }
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "paleta");
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/PaletteTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java	(revision 10281)
@@ -0,0 +1,341 @@
+/*
+ * Created on 19-jul-2006
+ * 
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ */
+package com.iver.cit.gvsig.project.documents.view.toc.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JMenuItem;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+
+import org.cresques.filter.RasterFilter;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.filter.RasterFilterStackManager;
+import org.cresques.filter.convolution.ConvolutionFilter;
+import org.cresques.filter.segmentation.FirstDerivativeFilter;
+import org.cresques.ui.filter.FirstDerivativePanel;
+import org.cresques.ui.filter.KernelFiltersPanel;
+import org.gvsig.gui.beans.treelist.TreeListContainer;
+import org.gvsig.gui.beans.treelist.event.TreeListEvent;
+import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.layers.FLayer;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.gui.panels.RasterFilterPanel;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.RasterFilterDialog;
+import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
+import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
+import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
+
+
+/**
+ * Entrada en del menú contextual del TOC correspondiente a los filtros para raster.
+ * 
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ *
+ */
+public class RasterFilterTocMenuEntry extends AbstractTocContextMenuAction implements TreeSelectionListener, TreeListComponentListener{
+	private JMenuItem 						filters;
+	private FLayer							lyr = null;
+	private RasterFilterDialog				rasterFilterDialog = null;
+	private RasterFilterStackManager		stackManager = null;
+	private int 							width = 620;
+	private int 							height = 310;
+	
+	//Paneles insertados en el interfaz general de filtros
+	private FirstDerivativePanel 			sobel = new FirstDerivativePanel();
+	private FirstDerivativePanel 			roberts = new FirstDerivativePanel();
+	private FirstDerivativePanel 			prewitt = new FirstDerivativePanel();
+	private FirstDerivativePanel 			frei_chen = new FirstDerivativePanel();
+	private KernelFiltersPanel 				paso_bajo = new KernelFiltersPanel(1);
+	private KernelFiltersPanel 				mediana = new KernelFiltersPanel(4);
+	private KernelFiltersPanel				media = new KernelFiltersPanel(4);
+	private KernelFiltersPanel 				gauss = new KernelFiltersPanel(2);
+	private KernelFiltersPanel 				laplace = new KernelFiltersPanel(2);
+	
+	public String getGroup() {
+		return "RasterTools"; 
+	}
+
+	public int getGroupOrder() {
+		return 80;
+	}
+
+	public int getOrder() {
+		return 2;
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1;
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (isTocItemBranch(item)) {
+			lyr = getNodeLayer(item);
+            if ((lyr instanceof FLyrRaster)) {
+            	return true;
+            }
+		}
+		return false;
+	}
+		
+	/**
+	 * Gestiona la apertura del dialogo de propiedades de raster cuando se pulsa
+	 * la opción asignando a este las propiedades iniciales. 
+	 */
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+       	lyr = getNodeLayer(item);
+                   
+       	if(lyr instanceof FLyrRaster){
+       		stackManager = new RasterFilterStackManager(((FLyrRaster)lyr).getSource().getFilterStack());
+       		
+       		//Añadimos paneles al cuadro
+       		addPanels();
+       		
+       		rasterFilterDialog = new RasterFilterDialog((FLyrRaster)lyr, width, height, stackManager);
+       		       		
+       		//Construimos el menú
+       		menuBuild();       	
+       		
+       		//Cargamos la lista con lo que hay en la pila de filtros
+       		loadList();
+       		
+       		//Cargamos el panel que es visible para el usuario
+       		loadVisiblePanel();
+       		
+       		PluginServices.getMDIManager().addWindow(rasterFilterDialog);
+        }
+	}
+	
+	/**
+	 * Añade paneles al dialogo de filtros
+	 */
+	private void addPanels(){
+		RasterFilterPanel.resetLists();
+  
+		RasterFilterPanel.addPanel(sobel, 0, PluginServices.getText(this, "sobel"));
+   		RasterFilterPanel.addPanel(roberts, 1, PluginServices.getText(this, "roberts"));
+   		RasterFilterPanel.addPanel(prewitt, 2, PluginServices.getText(this, "prewitt"));
+   		RasterFilterPanel.addPanel(frei_chen, 3, PluginServices.getText(this, "frei_chen"));
+   		RasterFilterPanel.addPanel(paso_bajo, 4, PluginServices.getText(this, "paso_bajo"));
+   		RasterFilterPanel.addPanel(mediana, 5, PluginServices.getText(this, "mediana"));
+   		RasterFilterPanel.addPanel(media, 6, PluginServices.getText(this, "media"));
+   		RasterFilterPanel.addPanel(gauss, 7, PluginServices.getText(this, "gauss"));
+   		RasterFilterPanel.addPanel(laplace, 8, PluginServices.getText(this, "laplace"));
+	}
+	
+	/**
+	 * Construye el arbol para el menú de filtros disponibles
+	 */
+	private void menuBuild(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		lc.getTree().addTreeSelectionListener(this);
+		lc.addTreeListListener(this);
+		lc.addClass(PluginServices.getText(this, "detección_bordes"), 0);
+		lc.addEntry(PluginServices.getText(this, "sobel"), PluginServices.getText(this, "detección_bordes"),"sobel");
+		lc.addEntry(PluginServices.getText(this, "roberts"), PluginServices.getText(this, "detección_bordes"),"roberts");
+		lc.addEntry(PluginServices.getText(this, "laplace"), PluginServices.getText(this, "detección_bordes"),"laplace");
+		lc.addEntry(PluginServices.getText(this, "prewitt"), PluginServices.getText(this, "detección_bordes"),"prewitt");
+		lc.addEntry(PluginServices.getText(this, "frei_chen"), PluginServices.getText(this, "detección_bordes"),"frei_chen");
+		lc.addClass(PluginServices.getText(this, "suavizado"), 1);
+		lc.addEntry(PluginServices.getText(this, "paso_bajo"), PluginServices.getText(this, "suavizado"),"paso_bajo");
+		lc.addEntry(PluginServices.getText(this, "mediana"), PluginServices.getText(this, "suavizado"),"mediana");
+		lc.addEntry(PluginServices.getText(this, "media"), PluginServices.getText(this, "suavizado"),"media");
+		lc.addEntry(PluginServices.getText(this, "gauss"), PluginServices.getText(this, "suavizado"),"gauss");
+		lc.getTree().expandRow(0);
+	}
+
+	/**
+	 * Carga la lista de filtros con los que hay actualmente en la pila.
+	 * Solo añadirá los filtros que tienen nombre, es decir que la variable
+	 * filterName tiene un valor distinto de vacio que es el valor con el que
+	 * se inicializa.
+	 */
+	private void loadList(){
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		RasterFilterStack filterStack = this.stackManager.getFilterStack();
+		for(int iFilter = 0; iFilter < filterStack.lenght(); iFilter ++){
+			RasterFilter rasterFilter = filterStack.get(iFilter);
+			if(!rasterFilter.getFilterName().equals("")&& lc.getMap().containsValue(rasterFilter.getFilterName()))
+				lc.addElementInList(PluginServices.getText(this,rasterFilter.getFilterName()));
+		}
+	}
+	
+	/**
+	 * Carga el panel que es visible al usuario. Si hay filtros en la lista
+	 * se mostrará el primero de la lista sino se mostrará el primero del arbol
+	 * de filtros.
+	 */
+	private void loadVisiblePanel(){
+		String firstFilter = "";
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		DefaultTreeModel modelTree = (DefaultTreeModel)lc.getTree().getModel();
+		
+		firstFilter = modelTree.getChild(modelTree.getChild(modelTree.getRoot(), 0), 0).toString();
+		lc.getTree().expandRow(1);
+		lc.getTree().setSelectionInterval(2, 2);
+				
+		int pos = RasterFilterPanel.getPos(firstFilter);
+		//Si pos es -1 es pq para el primero de la lista no existe panel para él.  
+		if(pos == -1)
+			return;
+		else{
+			rasterFilterDialog.setVisiblePanel(pos);
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+firstFilter);
+		}
+	}
+	
+	/**
+	 * Este método activa el panel visible si su filtro correspondiente está en la lista de filtros 
+	 * activos sino lo desactiva.
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param filter Nombre del filtro del cual se comprueba si está en la lista 
+	 */
+	private void setEnableVisiblePanel(TreeListContainer lc, String filter){
+		if(lc.isInList(PluginServices.getText(this, filter)))
+   			rasterFilterDialog.getVisiblePanel().setEnabled(true);
+   		else
+   			rasterFilterDialog.getVisiblePanel().setEnabled(false);
+	}
+		
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForFirstDerivativeFilter(int nPanel, String selection, String filter, TreeListContainer lc, FirstDerivativePanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		FirstDerivativeFilter rf = (FirstDerivativeFilter)stackManager.getFilter(filter);
+       		if(rf != null)
+       			panel.getTUmbral().setText(rf.getUmbral() + "");
+		}
+	}
+	
+	/**
+	 * Acciones realizadas para el paso de parámetros al panel del filtro de primera derivada
+	 * @panel Número de orden del panel a seleccionar como visible
+	 * @param selection Entrada de menú seleccionada
+	 * @param filter Filtro del cual queremos realizar el paso de parámetros
+	 * @param lc Lista a comprobar si está el filtro insertado
+	 * @param panel Panel al que se le asignaran los parámetros
+	 */
+	private void actionsForConvolutionFilter(int nPanel, String selection, String filter, TreeListContainer lc, KernelFiltersPanel panel){
+		if(selection.equals(PluginServices.getText(this, filter))){
+			rasterFilterDialog.getPFilter().setTitle(PluginServices.getText(this, "filtro_de")+" "+PluginServices.getText(this, filter));
+       		rasterFilterDialog.setVisiblePanel(nPanel);
+       		setEnableVisiblePanel(lc, filter);
+       		ConvolutionFilter rf = (ConvolutionFilter)stackManager.getFilter(filter);
+       		if(rf != null){
+       			int index = 0;
+       			switch(rf.getKernel().kernel.length){
+       			case 5:index = 1; break;
+       			case 7:index = 2; break;
+       			case 9:index = 3; break;
+       			}
+       			panel.getCbKernel().setSelectedIndex(index);
+       		}
+		}
+	}
+	
+	/**
+	 * Este método se ejecuta cada vez que cambia el valor seleccionado en el menú, es decir cuando se pincha
+	 * sobre una entrada de menú define que acciones se realizan. En él, hay que definir para cada entrada (addEntry)
+	 * que hallamos puesto en la función menuBuild cual será el comportamiento de esta, es decir que panel se muestra
+	 * cuando se selecciona dicha entrada.  
+	 */
+	public void valueChanged(TreeSelectionEvent e) {
+		String path = null;
+		try{
+			path = e.getNewLeadSelectionPath().toString();
+		}catch(NullPointerException exc){
+			return;
+		}
+		if(path == null)
+			return;
+		
+		String selection = path.substring(path.lastIndexOf(", ") + 2, path.lastIndexOf("]"));
+		
+		TreeListContainer lc = rasterFilterDialog.getSelector();
+		
+		actionsForFirstDerivativeFilter(0, selection, "sobel", lc, sobel);
+		actionsForFirstDerivativeFilter(1, selection, "roberts", lc, roberts);
+		actionsForFirstDerivativeFilter(2, selection, "prewitt", lc, prewitt);
+		actionsForFirstDerivativeFilter(3, selection, "frei_chen", lc, frei_chen);
+		actionsForConvolutionFilter(4, selection, "paso_bajo", lc, paso_bajo);
+		actionsForConvolutionFilter(5, selection, "mediana", lc, mediana);
+		actionsForConvolutionFilter(6, selection, "media", lc, media);
+		actionsForConvolutionFilter(7, selection, "gauss", lc, gauss);
+		actionsForConvolutionFilter(8, selection, "laplace", lc, laplace);
+		
+	}
+
+	/**
+	 * Este método es ejecutado cuando se inserta un nuevo elemento en la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementAdded(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementAdded());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(true);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+	
+	/**
+	 * Este método es ejecutado cuando se elimina un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementRemoved(TreeListEvent e){
+		int pos = RasterFilterPanel.getPos(e.getElementRemoved());
+		try{
+			if(pos > -1)
+				rasterFilterDialog.getPanel(pos).setEnabled(false);
+		}catch(ArrayIndexOutOfBoundsException exc){
+			return;
+		}
+	}
+
+	/**
+	 * Este método es ejecutado cuando se mueve un elemento de la lista
+	 * @param e TreeListEvent
+	 */
+	public void elementMoved(TreeListEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public String getText() {
+		return PluginServices.getText(this, "filters");
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toc/actions/RasterFilterTocMenuEntry.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java	(revision 10281)
@@ -0,0 +1,120 @@
+package com.iver.cit.gvsig.project.documents.view.toolListeners;
+
+import java.awt.Component;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+
+import javax.swing.JOptionPane;
+
+import com.iver.andami.PluginServices;
+import com.iver.cit.gvsig.fmap.DriverException;
+import com.iver.cit.gvsig.fmap.MapControl;
+import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
+import com.iver.cit.gvsig.fmap.tools.SaveRasterListenerImpl;
+import com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent;
+import com.iver.cit.gvsig.project.documents.view.gui.dialogs.CutRasterDialog;
+
+
+/**
+ * Listener del recorte de raster. Al seleccionar un área sobre la vista debe cargar
+ * el cuadro con los datos de coordenadas pixel, coordenadas reales, ancho y alto
+ * del raster resultante, tamaño de celda.
+ */
+public class CutRasterListener extends SaveRasterListenerImpl {
+	private FLyrRaster 			layer = null;
+	private CutRasterDialog 	cutRasterDialog;
+	private MapControl			mapCtrl = null;
+	private String				currentTool = null;
+	
+	/**
+	 * Constructor.
+	 * @param mapCtrl
+	 * @param cutRasterDialog
+	 */
+	public CutRasterListener(MapControl mapCtrl, CutRasterDialog cutRasterDialog) {
+		super(mapCtrl);
+		this.cutRasterDialog = cutRasterDialog;
+		this.layer = cutRasterDialog.getFLayer();
+		this.mapCtrl = mapCtrl;
+		currentTool = mapCtrl.getCurrentTool();
+	}
+
+	/**
+	 * Asigna la capa raster.
+	 * @param flyr Capa raster
+	 */
+	public void  setRasterLayer(FLyrRaster flyr){
+		layer = flyr;
+	}
+	
+	/**
+	 * Realiza las acciones de selección del área de recorte por medio de un rectangulo
+	 * sobre la vista.
+	 */
+	public void rectangle(RectangleEvent event) {
+		super.rectangle(event);
+		
+		//Obtenemos el extent completo de la capa
+		Rectangle2D extent = null;
+		try {
+			extent = ((FLyrRaster)layer).getFullExtent();	
+		} catch (DriverException e1) {
+			return;
+		}
+		
+		if(extent == null)
+			return;
+		
+		//Si nos salimos de los margenes de la capa lo ajustamos a esta
+		double minx = rect.getMinX(), miny = rect.getMinY(), maxx = rect.getMaxX(), maxy = rect.getMaxY();
+		
+		//Controlamos las coordenadas del recorte que no se salgan de la imagen.
+		//De ser así mostramos un error
+		if(minx > extent.getMaxX() || maxx < extent.getMinX() || miny > extent.getMaxY() || maxy < extent.getMinY()){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					PluginServices.getText(this, "coordenadas_erroneas"));
+			return;
+		}
+		
+		if(extent.getMinX() > rect.getMinX())
+			minx = extent.getMinX();
+		if(extent.getMinY() > rect.getMinY())
+			miny = extent.getMinY();
+		if(extent.getMaxX() < rect.getMaxX())
+			maxx = extent.getMaxX();
+		if(extent.getMaxY() < rect.getMaxY())
+			maxy = extent.getMaxY();
+		rect = new Rectangle2D.Double(minx, miny, Math.abs(maxx - minx), Math.abs(maxy - miny));
+		
+		//Asignamos las coordenadas reales
+		cutRasterDialog.getPCut().setCoorRealFromDouble(rect.getMinX(), rect.getMaxY(), rect.getMaxX(), rect.getMinY(), 6);
+		try {
+			int widthPx = 0;
+			int heightPx = 0;
+			ArrayList attr = ((FLyrRaster)layer).getSource().getAttributes();
+	   		for (int i=0; i<attr.size(); i++) {
+				Object[] a = (Object []) attr.get(i);
+				if(a[0].toString().equals("Width"))
+					widthPx = ((Integer)a[1]).intValue();
+				if(a[0].toString().equals("Height"))
+					heightPx = ((Integer)a[1]).intValue();
+			}
+	
+	   		Rectangle2D window = new Rectangle2D.Double(rect.getMinX(), rect.getMinY(), rect.getWidth(), rect.getHeight());
+	   		Rectangle2D r = org.cresques.util.Utilities.getPxRectFromMapRect(layer.getFullExtent(), widthPx, heightPx, window);
+	   		cutRasterDialog.getPCut().setCoorPixelFromDouble(r.getMinX(), r.getMinY(), r.getMaxX(), r.getMaxY(), 3);
+	   		cutRasterDialog.getPCut().setWidthText(r.getWidth(), 0);
+	   		cutRasterDialog.getPCut().setHeightText(r.getHeight(), 0);
+	   		cutRasterDialog.getPCut().setCellSizeText((rect.getWidth() / r.getWidth()), 4);
+	   		cutRasterDialog.getPCut().setRelWidthHeight((double)(r.getWidth() / r.getHeight()));
+	   		cutRasterDialog.setInitValuesToSize(r.getWidth(), r.getHeight());
+	   		if(currentTool != null)
+	   			mapCtrl.setTool(currentTool);
+		} catch (DriverException e) {
+		
+		} catch (NumberFormatException e) {
+		
+		}
+	}
+
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/project/documents/view/toolListeners/CutRasterListener.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java	(revision 10281)
@@ -0,0 +1,97 @@
+/*
+ * Created on 17-feb-2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package com.iver.cit.gvsig.pilotoraster;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.cit.gvsig.gui.panels.FPanelAbout;
+import com.iver.cit.gvsig.About;
+
+/**
+ * Extensión que abre una nueva ventana mostrando la información sobre el
+ * raster de gvSIG.
+ *
+ * @author Vicente Caballero Navarro
+ */
+public class RasterAbout extends Extension {
+  /**
+	 * @see com.iver.andami.plugins.IExtension#isEnabled()
+	 */
+	public boolean isEnabled() {
+		return false;
+	}
+
+	/**
+	 * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+	 */
+	public boolean isVisible() {
+		return false;
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#initialize()
+	 */
+	public void initialize() {
+
+	}
+	/**
+	 * @see com.iver.andami.plugins.IExtension#postInitialize()
+	 */
+	public void postInitialize() {
+		About about=(About)PluginServices.getExtension(About.class);
+		FPanelAbout panelAbout=about.getAboutPanel();
+		java.net.URL aboutURL = RasterAbout.class.getResource(
+	        "/about.htm");
+	        panelAbout.addAboutUrl("Raster",aboutURL);
+	}
+
+	/**
+	 * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+	 */
+	public void execute(String actionCommand) {
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/RasterAbout.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java	(revision 10281)
@@ -0,0 +1,90 @@
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package com.iver.cit.gvsig.pilotoraster;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.plugins.Extension;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.cit.gvsig.gui.toc.WCSHistogramTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WCSPaletteTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WCSRasterFilterTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WMSHistogramTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WMSPaletteTocMenuEntry;
+import com.iver.cit.gvsig.gui.toc.WMSRasterFilterTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.CutRasterTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.HistogramTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.PaletteTocMenuEntry;
+import com.iver.cit.gvsig.project.documents.view.toc.actions.RasterFilterTocMenuEntry;
+import com.iver.utiles.extensionPoints.ExtensionPoints;
+import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
+
+
+/**
+ * Extensión para el piloto de raster. Añade las entrada de menú necesarias.
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class PilotoRasterModule extends Extension {
+	
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#inicializar()
+     */
+    public void initialize() {
+    	ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
+    	extensionPoints.add("View_TocActions","Histogram",new HistogramTocMenuEntry());
+       	extensionPoints.add("View_TocActions","RasterFilter",new RasterFilterTocMenuEntry());
+       	extensionPoints.add("View_TocActions","Palette",new PaletteTocMenuEntry());
+       	extensionPoints.add("View_TocActions","CutRaster",new CutRasterTocMenuEntry());
+       	
+       	//Puntos de extensión para WCS
+       	extensionPoints.add("View_TocActions","HistogramWCS",new WCSHistogramTocMenuEntry());
+       	extensionPoints.add("View_TocActions","RasterFilterWCS",new WCSRasterFilterTocMenuEntry());
+       	extensionPoints.add("View_TocActions","PaletteWCS",new WCSPaletteTocMenuEntry());
+       	
+       	//Puntos de extensión para WMS
+       	extensionPoints.add("View_TocActions","HistogramWMS",new WMSHistogramTocMenuEntry());
+       	extensionPoints.add("View_TocActions","RasterFilterWMS",new WMSRasterFilterTocMenuEntry());
+       	extensionPoints.add("View_TocActions","PaletteWMS",new WMSPaletteTocMenuEntry());
+    }
+   
+    /**
+     * Cargamos el listener y ejecutamos la herramienta de salvar a Raster.
+     */
+    public void execute(String actionCommand) {
+    	
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isEnabled()
+     */
+    public boolean isEnabled() {
+        return true;
+    }
+
+    /**
+     * Mostramos el control si hay alguna capa cargada.
+     */
+    public boolean isVisible() {
+        com.iver.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+                                                             .getActiveWindow();
+        if (f == null) 
+            return false;
+      
+        return (f  instanceof IWindow);
+    }
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/com/iver/cit/gvsig/pilotoraster/PilotoRasterModule.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java	(revision 10281)
@@ -0,0 +1,289 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import javax.swing.JPanel;
+
+import org.gvsig.gui.beans.openFile.OpenFileContainer;
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.io.File;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class contains all the components of a open raw file
+ * panel. It doesn't has the main buttons.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileControlsPanel extends JPanel {
+	private final int PANELS_WIDTH = 510;	
+	
+	private OpenFileContainer openFilePanel = null;
+	private GeometryPropertiesPanel geometryPropertiesPanel = null;
+	private OutputHeaderFormatPanel outputHeaderFormatPanel = null;
+	
+	private boolean calculateFileSize = true;
+
+	/**
+	 * Constructor
+	 * @param rawFileName
+	 * Raw file name
+	 */
+	public OpenRawFileControlsPanel(String rawFileName) {
+		super();
+		initialize();
+		openFilePanel.getTOpen().setText(rawFileName);
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+        gridBagConstraints2.insets = new java.awt.Insets(5,0,5,0);
+        gridBagConstraints2.gridy = 2;
+        gridBagConstraints2.gridx = 0;
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(5,0,5,0);
+        gridBagConstraints1.gridy = 1;
+        gridBagConstraints1.gridx = 0;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(5,0,5,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getOpenFilePanel(), gridBagConstraints);
+        this.add(getGeometryPropertiesPanel(), gridBagConstraints1);
+        this.add(getOutputHeaderFormatPanel(), gridBagConstraints2);
+        new CalculateFileSize();
+	}
+
+	/**
+	 * This method initializes openFilePanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private OpenFileContainer getOpenFilePanel() {
+		if (openFilePanel == null) {
+			openFilePanel = new OpenFileContainer(PANELS_WIDTH,50,false);
+			openFilePanel.setPreferredSize(new java.awt.Dimension(PANELS_WIDTH,50));
+		}
+		return openFilePanel;
+	}
+
+	/**
+	 * This method initializes geometryPropertiesPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GeometryPropertiesPanel getGeometryPropertiesPanel() {
+		if (geometryPropertiesPanel == null) {
+			geometryPropertiesPanel = new GeometryPropertiesPanel();
+		}
+		return geometryPropertiesPanel;
+	}
+
+	/**
+	 * This method initializes outputHeaderFormatPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private OutputHeaderFormatPanel getOutputHeaderFormatPanel() {
+		if (outputHeaderFormatPanel == null) {
+			outputHeaderFormatPanel = new OutputHeaderFormatPanel();
+		}
+		return outputHeaderFormatPanel;
+	}	
+	/**
+	 * Sets the file size into the text field
+	 * @param fileSize
+	 */
+	public void setFileSize(int fileSize){
+		getGeometryPropertiesPanel().setFileSize(fileSize);
+	}
+	
+	/**
+	 * Gets the data type
+	 * @return
+	 */
+	public VRTFormatOptions.UIOption getDataType(){
+		return getGeometryPropertiesPanel().getDataType();
+	}
+	
+	/**
+	 * Gets the byte order
+	 * @return
+	 */
+	public String getByteOrder(){
+		return getGeometryPropertiesPanel().getByteOrder();
+	}
+
+	/**
+	 * Gets the type of interleaving
+	 * @return
+	 */
+	public String getInterleaving(){
+		return getGeometryPropertiesPanel().getInterleaving();
+	}
+	
+	/**
+	 * gets the image width
+	 * @return
+	 */
+	public int getImageWidth(){
+		return getGeometryPropertiesPanel().getImageWidth();
+	}
+	
+	/**
+	 * gets the image height
+	 * @return
+	 */
+	public int getImageHeight(){
+		return getGeometryPropertiesPanel().getImageHeight();
+	}
+	
+	/**
+	 * gets the number of bands
+	 * @return
+	 */
+	public int getNumberOfBands(){
+		return getGeometryPropertiesPanel().getNumberOfBands();
+	}
+	
+	/**
+	 * gets the header size
+	 * @return
+	 */
+	public int getHeaderSize(){
+		return getGeometryPropertiesPanel().getHeaderSize();
+	}
+	
+	/**
+	 * gets the selected outputformat
+	 * @return
+	 */
+	public String getOutputHeaderFormat(){
+		return getOutputHeaderFormatPanel().getOutputHeaderFormat();
+	}
+	
+	/**
+	 * Gets the RAW file
+	 * @return
+	 */
+	public File getFile(){
+		return getOpenFilePanel().getFile();		
+	}
+	
+	/**
+	 * This method is used by the listener to stop the
+	 * thread that calculates the file size
+	 *
+	 */
+	public void stopThread() {
+		calculateFileSize = false;		
+	}
+
+	/**
+	 * This class is a thread that try if the textbox (where
+	 * the file to open is written) contains a valid file and
+	 * calculate its size.
+	 * @author Jorge Piera Llodrá (piera_jor@gva.es)
+	 */
+	public class CalculateFileSize implements Runnable{
+		volatile Thread myThread = null;
+		
+		public CalculateFileSize(){
+			if (myThread == null){
+				myThread = new Thread(this);
+				myThread.start();
+			}
+		}
+		
+		/*
+		 *  (non-Javadoc)
+		 * @see java.lang.Runnable#run()
+		 */
+		public void run() {
+			while(calculateFileSize){
+				File file = getFile();
+				if ((file.exists() &&
+						(file.isFile()))){
+					getGeometryPropertiesPanel().setFileSize(file.length());
+				}else{
+					getGeometryPropertiesPanel().setFileSize(0);
+				}
+				try {
+					Thread.sleep(1000);
+				} catch (InterruptedException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}			
+		}
+		
+	}
+
+	
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileControlsPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java	(revision 10281)
@@ -0,0 +1,141 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import javax.swing.JPanel;
+
+import org.gvsig.rasterTools.raw.ui.listener.OpenRawFileDefaultViewListener;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This is the main open raw file panel. It is composed
+ * by all the other panels
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileDefaultPanel extends JPanel{
+
+	private OpenRawFileControlsPanel controlsPanel = null;
+	private OpenRawFileButtonsPanel buttonsPanel = null;
+		
+	private String rawFileName = null;
+
+	public OpenRawFileDefaultPanel(String rawFileName) {
+		super();
+		this.rawFileName = rawFileName;
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints1.gridy = 1;
+        gridBagConstraints1.gridx = 0;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getControlsPanel(), gridBagConstraints);
+        this.add(getButtonsPanel(), gridBagConstraints1);
+			
+	}
+
+	/**
+	 * This method initializes controlsPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	public OpenRawFileControlsPanel getControlsPanel() {
+		if (controlsPanel == null) {
+			controlsPanel = new OpenRawFileControlsPanel(rawFileName);
+			controlsPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.SoftBevelBorder.RAISED));
+		}
+		return controlsPanel;
+	}
+
+	/**
+	 * This method initializes buttonsPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private OpenRawFileButtonsPanel getButtonsPanel() {
+		if (buttonsPanel == null) {
+			buttonsPanel = new OpenRawFileButtonsPanel();
+		}
+		return buttonsPanel;
+	}
+	
+	/**
+	 * Sets the buttons listener
+	 * @param listener
+	 * Buttons listener
+	 */
+	public void setActionListener(OpenRawFileDefaultViewListener listener){
+		getButtonsPanel().setActionListener(listener);
+	}
+	
+	
+	
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java	(revision 10281)
@@ -0,0 +1,211 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.swing.JComboBox;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:24  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class implements one part of the open raw file panel.
+ * It contains the combobox to select the "output header format".
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OutputHeaderFormatPanel extends JPanel{
+	private JPanel labelsPanel = null;
+	private JPanel fieldsPanel = null;
+	private JPanel OutputFormatTextPanel = null;
+	private JPanel outputFormatLabelPanel = null;
+	private JLabel outputFormatLabel = null;
+	private JComboBox outputFormatText = null;
+	private final int WIDTH = 510;
+	private final int HEIGHT = 25;
+	private final int LABELS_PANEL_WIDTH = 250;
+	private final int TEXTS_PANEL_WIDTH = 250;
+	private final int LABELS_WIDTH = 245;
+	private final int LABELS_HEIGHT = 19;
+	private final int TEXTS_WIDTH = 245;
+	private final int TEXTS_HEIGHT = 19;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public OutputHeaderFormatPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {    
+		
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getLabelsPanel(), new GridBagConstraints());
+		this.add(getFieldsPanel(), new GridBagConstraints());
+	}
+	
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getOutputFormatLabelPanel() {
+		if (outputFormatLabelPanel == null) {
+			outputFormatLabel = new JLabel();
+			outputFormatLabel.setText(PluginServices.getText(this, "output_header_format"));
+			FlowLayout flowLayout4 = new FlowLayout();
+			flowLayout4.setHgap(0);
+			flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout4.setVgap(1);
+			outputFormatLabelPanel = new JPanel();
+			outputFormatLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			outputFormatLabelPanel.setLayout(flowLayout4);
+			outputFormatLabelPanel.add(outputFormatLabel, null);
+		}
+		return outputFormatLabelPanel;
+	}
+	
+	
+
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getLabelsPanel() {
+		if (labelsPanel == null) {
+			labelsPanel = new JPanel();
+			labelsPanel.setPreferredSize(new java.awt.Dimension(LABELS_PANEL_WIDTH,HEIGHT));
+			labelsPanel.add(getOutputFormatLabelPanel(), null);
+		}
+		return labelsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFieldsPanel() {
+		if (fieldsPanel == null) {
+			fieldsPanel = new JPanel();
+			fieldsPanel.setPreferredSize(new java.awt.Dimension(TEXTS_PANEL_WIDTH,HEIGHT));
+			fieldsPanel.add(getOutputFormatTextPanel(), null);
+		}
+		return fieldsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getOutputFormatTextPanel() {
+		if (OutputFormatTextPanel == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			OutputFormatTextPanel = new JPanel();
+			OutputFormatTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			OutputFormatTextPanel.setLayout(flowLayout);
+			OutputFormatTextPanel.add(getOutputFormatText(), null);
+		}
+		return OutputFormatTextPanel;
+	}
+	
+	/**
+	 * This method initializes pronunciacionText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getOutputFormatText() {
+		if (outputFormatText == null) {
+			outputFormatText = new JComboBox(VRTFormatOptions.getOutputHeaderFormats());
+			outputFormatText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return outputFormatText;
+	}
+	
+	/**
+	 * gets the selected outputformat
+	 * @return
+	 */
+	public String getOutputHeaderFormat(){
+		return ((VRTFormatOptions.UIOption)getOutputFormatText().getSelectedItem()).getVrtOptionName();
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OutputHeaderFormatPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java	(revision 10281)
@@ -0,0 +1,440 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.text.NumberFormat;
+
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.StringUtilities;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel contains the left panel of the "Set Geometry"
+ * panel. It is the imput to write the image width, the heigth,
+ * the number of bands and the image header size.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GeometryPropertiesLeftPanel extends JPanel{
+	private JPanel bandsLabelPanel = null;
+	private JPanel headerSizeLabelPanel = null;
+	private JPanel heigthLabelPanel = null;
+	private JLabel heigthLabel = null;
+	private JPanel labelsPanel = null;
+	private JPanel fieldsPanel = null;
+	private JPanel widthTextPanel = null;
+	private JPanel heigthTextPanel = null;
+	private JPanel widthLabelPanel = null;
+	private JLabel widthLabel = null;
+	private JLabel bandsLabel = null;
+	private JPanel bandsTextPanel = null;
+	private JPanel headerSizeTextPanel = null;
+	private JFormattedTextField widthText = null;
+	private JLabel headerSizeLabel = null;
+	private JFormattedTextField heigthText = null;
+	private JFormattedTextField bandsText = null;
+	private JFormattedTextField headerSizeText = null;
+	
+	private final int WIDTH = 245;
+	private final int HEIGHT = 110;
+	private final int LABELS_PANEL_WIDTH = 120;
+	private final int TEXTS_PANEL_WIDTH = 125;
+	private final int LABELS_WIDTH = 120;
+	private final int LABELS_HEIGHT = 19;
+	private final int TEXTS_WIDTH = 120;
+	private final int TEXTS_HEIGHT = 19;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public GeometryPropertiesLeftPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {                
+		
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getLabelsPanel(), new GridBagConstraints());
+		this.add(getFieldsPanel(), new GridBagConstraints());
+	}
+	
+	/**
+	 * This method initializes pX	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getBandsLabelPanel() {
+		if (bandsLabelPanel == null) {
+			bandsLabel = new JLabel();
+			bandsLabel.setText(PluginServices.getText(this, "bands_number"));
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
+			bandsLabelPanel = new JPanel();
+			bandsLabelPanel.setLayout(flowLayout2);
+			bandsLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			bandsLabelPanel.add(bandsLabel, null);
+			flowLayout2.setVgap(1);
+			flowLayout2.setHgap(0);
+		}
+		return bandsLabelPanel;
+	}
+
+	/**
+	 * This method initializes pY	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeaderSizeLabelPanel() {
+		if (headerSizeLabelPanel == null) {
+			headerSizeLabel = new JLabel();
+			headerSizeLabel.setText(PluginServices.getText(this, "header_Size"));
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			headerSizeLabelPanel = new JPanel();
+			headerSizeLabelPanel.setLayout(flowLayout1);
+			headerSizeLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			headerSizeLabelPanel.add(headerSizeLabel, null);
+			flowLayout1.setHgap(0);
+			flowLayout1.setVgap(1);
+		}
+		return headerSizeLabelPanel;
+	}
+
+	/**
+	 * This method initializes pLatitud	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeigthLabelPanel() {
+		if (heigthLabelPanel == null) {
+			heigthLabel = new JLabel();
+			heigthLabel.setText(PluginServices.getText(this, "alto"));
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
+			heigthLabelPanel = new JPanel();
+			heigthLabelPanel.setLayout(flowLayout3);
+			heigthLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			flowLayout3.setHgap(0);
+			flowLayout3.setVgap(1);
+			heigthLabelPanel.add(heigthLabel, null);
+		}
+		return heigthLabelPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getWidthLabelPanel() {
+		if (widthLabelPanel == null) {
+			widthLabel = new JLabel();
+			widthLabel.setText(PluginServices.getText(this, "ancho"));
+			FlowLayout flowLayout4 = new FlowLayout();
+			flowLayout4.setHgap(0);
+			flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout4.setVgap(1);
+			widthLabelPanel = new JPanel();
+			widthLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			widthLabelPanel.setLayout(flowLayout4);
+			widthLabelPanel.add(widthLabel, null);
+		}
+		return widthLabelPanel;
+	}
+	
+	
+
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getLabelsPanel() {
+		if (labelsPanel == null) {
+			labelsPanel = new JPanel();
+			labelsPanel.setPreferredSize(new java.awt.Dimension(LABELS_PANEL_WIDTH,HEIGHT));
+			labelsPanel.add(getWidthLabelPanel(), null);
+			labelsPanel.add(getHeigthLabelPanel(), null);
+			labelsPanel.add(getBandsLabelPanel(), null);
+			labelsPanel.add(getHeaderSizeLabelPanel(), null);
+		}
+		return labelsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFieldsPanel() {
+		if (fieldsPanel == null) {
+			fieldsPanel = new JPanel();
+			fieldsPanel.setPreferredSize(new java.awt.Dimension(TEXTS_PANEL_WIDTH,HEIGHT));
+			fieldsPanel.add(getWidthTextPanel(), null);
+			fieldsPanel.add(getHeigthTextPanel(), null);
+			fieldsPanel.add(getBandsTextPanel(), null);
+			fieldsPanel.add(getHeaderSizeTextPanel(), null);
+		}
+		return fieldsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getWidthTextPanel() {
+		if (widthTextPanel == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			widthTextPanel = new JPanel();
+			widthTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			widthTextPanel.setLayout(flowLayout);
+			widthTextPanel.add(getWidthText(), null);
+		}
+		return widthTextPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeigthTextPanel() {
+		if (heigthTextPanel == null) {
+			FlowLayout flowLayout5 = new FlowLayout();
+			flowLayout5.setHgap(0);
+			flowLayout5.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout5.setVgap(1);
+			heigthTextPanel = new JPanel();
+			heigthTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			heigthTextPanel.setLayout(flowLayout5);
+			heigthTextPanel.add(getHeigthText(), null);
+		}
+		return heigthTextPanel;
+	}	
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getHeaderSizeTextPanel() {
+		if (headerSizeTextPanel == null) {
+			FlowLayout flowLayout8 = new FlowLayout();
+			flowLayout8.setHgap(0);
+			flowLayout8.setAlignment(FlowLayout.LEFT);
+			flowLayout8.setVgap(1);
+			headerSizeTextPanel = new JPanel();
+			headerSizeTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			headerSizeTextPanel.setLayout(flowLayout8);
+			headerSizeTextPanel.add(getHeaderSizeText(), null);
+		}
+		return headerSizeTextPanel;
+	}
+	
+	/**
+	 * This method initializes oficialTextPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getBandsTextPanel() {
+		if (bandsTextPanel == null) {
+			FlowLayout flowLayout9 = new FlowLayout();
+			flowLayout9.setHgap(0);
+			flowLayout9.setAlignment(FlowLayout.LEFT);
+			flowLayout9.setVgap(1);
+			bandsTextPanel = new JPanel();
+			bandsTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			bandsTextPanel.setLayout(flowLayout9);			
+			bandsTextPanel.add(getBandsText(), null);
+		}
+		return bandsTextPanel;
+	}
+
+
+	
+	/**
+	 * This method initializes pronunciacionText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getWidthText() {
+		if (widthText == null) {
+			widthText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			widthText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			widthText.setText("0");
+		}
+		return widthText;
+	}
+
+	/**
+	 * This method initializes etimologyText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getHeigthText() {
+		if (heigthText == null) {
+			heigthText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			heigthText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			heigthText.setText("0");
+		}
+		return heigthText;
+	}
+
+	/**
+	 * This method initializes bandsText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getBandsText() {
+		if (bandsText == null) {
+			bandsText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			bandsText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			bandsText.setText("0");
+		}
+		return bandsText;
+	}
+
+	/**
+	 * This method initializes headerSizeText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JFormattedTextField getHeaderSizeText() {
+		if (headerSizeText == null) {
+			headerSizeText = new JFormattedTextField(NumberFormat.getIntegerInstance());
+			headerSizeText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			headerSizeText.setText("0");
+		}
+		return headerSizeText;
+	}
+	
+	/**
+	 * gets the image width
+	 * @return
+	 */
+	public int getImageWidth(){
+		try{
+			String buffer = StringUtilities.replace(getWidthText().getText(),".","");
+			buffer = StringUtilities.replace(buffer,",","");
+			return Integer.parseInt(buffer);
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+	
+	/**
+	 * gets the image height
+	 * @return
+	 */
+	public int getImageHeight(){
+		try{
+			String buffer = StringUtilities.replace(getHeigthText().getText(),".","");
+			buffer = StringUtilities.replace(buffer,",","");
+			return Integer.parseInt(buffer);
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+	
+	/**
+	 * gets the number of bands
+	 * @return
+	 */
+	public int getNumberOfBands(){
+		try{
+			return Integer.valueOf(getBandsText().getText()).intValue();
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+	
+	/**
+	 * gets the header size
+	 * @return
+	 */
+	public int getHeaderSize(){
+		try{
+			return Integer.valueOf(getHeaderSizeText().getText()).intValue();
+		}catch(NumberFormatException e){
+			return 0;
+		}
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesLeftPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java	(revision 10281)
@@ -0,0 +1,419 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import com.iver.andami.PluginServices;
+import com.iver.utiles.swing.JComboBox;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:24  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel contains the rigth panel of the "Set Geometry"
+ * panel. It is the imput to write the file size in bytes,
+ * the data type, the byte order and the type of
+ * interleaving.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GeometryPropertiesRigthPanel extends JPanel{
+	private JPanel byteOrderLabelPanel = null;
+	private JPanel interleavingLabelPanel = null;
+	private JPanel dataTypeLabelPanel = null;
+	private JLabel dataTypeLabel = null;
+	private JPanel labelsPanel = null;
+	private JPanel fieldsPanel = null;
+	private JPanel fileSizeTextPanel = null;
+	private JPanel dataTypeTextPanel = null;
+	private JPanel fileSizeLabelPanel = null;
+	private JLabel fileSizeLabel = null;
+	private JLabel byteOrderLabel = null;
+	private JPanel byteOrderTextPanel = null;
+	private JPanel interleavingTextPanel = null;
+	private JTextField fileSizeText = null;
+	private JLabel interleavingLabel = null;
+	private JComboBox dataTypeText = null;
+	private JComboBox byteOrderText = null;
+	private JComboBox interleavingText = null;
+	
+	private final int WIDTH = 245;
+	private final int HEIGHT = 110;
+	private final int LABELS_PANEL_WIDTH = 120;
+	private final int TEXTS_PANEL_WIDTH = 125;
+	private final int LABELS_WIDTH = 120;
+	private final int LABELS_HEIGHT = 19;
+	private final int TEXTS_WIDTH = 120;
+	private final int TEXTS_HEIGHT = 19;
+	
+	/**
+	 * This is the default constructor
+	 */
+	public GeometryPropertiesRigthPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 * @return void
+	 */
+	private void initialize() {    
+		
+		this.setLayout(new GridBagLayout());
+		this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getLabelsPanel(), new GridBagConstraints());
+		this.add(getFieldsPanel(), new GridBagConstraints());
+	}
+	
+	/**
+	 * This method initializes pX	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getByteOrderLabelPanel() {
+		if (byteOrderLabelPanel == null) {
+			byteOrderLabel = new JLabel();
+			byteOrderLabel.setText(PluginServices.getText(this, "byte_order"));
+			FlowLayout flowLayout2 = new FlowLayout();
+			flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);
+			byteOrderLabelPanel = new JPanel();
+			byteOrderLabelPanel.setLayout(flowLayout2);
+			byteOrderLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			byteOrderLabelPanel.add(byteOrderLabel, null);
+			flowLayout2.setVgap(1);
+			flowLayout2.setHgap(0);
+		}
+		return byteOrderLabelPanel;
+	}
+
+	/**
+	 * This method initializes pY	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getInterleavingLabelPanel() {
+		if (interleavingLabelPanel == null) {
+			interleavingLabel = new JLabel();
+			interleavingLabel.setText(PluginServices.getText(this, "type_of_interleaving"));
+			FlowLayout flowLayout1 = new FlowLayout();
+			flowLayout1.setAlignment(java.awt.FlowLayout.LEFT);
+			interleavingLabelPanel = new JPanel();
+			interleavingLabelPanel.setLayout(flowLayout1);
+			interleavingLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			interleavingLabelPanel.add(interleavingLabel, null);
+			flowLayout1.setHgap(0);
+			flowLayout1.setVgap(1);
+		}
+		return interleavingLabelPanel;
+	}
+
+	/**
+	 * This method initializes pLatitud	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getDataTypeLabelPanel() {
+		if (dataTypeLabelPanel == null) {
+			dataTypeLabel = new JLabel();
+			dataTypeLabel.setText(PluginServices.getText(this, "data_type"));
+			FlowLayout flowLayout3 = new FlowLayout();
+			flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);
+			dataTypeLabelPanel = new JPanel();
+			dataTypeLabelPanel.setLayout(flowLayout3);
+			dataTypeLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			flowLayout3.setHgap(0);
+			flowLayout3.setVgap(1);
+			dataTypeLabelPanel.add(dataTypeLabel, null);
+		}
+		return dataTypeLabelPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel3	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFileSizeLabelPanel() {
+		if (fileSizeLabelPanel == null) {
+			fileSizeLabel = new JLabel();
+			fileSizeLabel.setText(PluginServices.getText(this, "file_size_in_bytes"));
+			FlowLayout flowLayout4 = new FlowLayout();
+			flowLayout4.setHgap(0);
+			flowLayout4.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout4.setVgap(1);
+			fileSizeLabelPanel = new JPanel();
+			fileSizeLabelPanel.setPreferredSize(new java.awt.Dimension(LABELS_WIDTH,LABELS_HEIGHT));
+			fileSizeLabelPanel.setLayout(flowLayout4);
+			fileSizeLabelPanel.add(fileSizeLabel, null);
+		}
+		return fileSizeLabelPanel;
+	}
+	
+	
+
+	
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getLabelsPanel() {
+		if (labelsPanel == null) {
+			labelsPanel = new JPanel();
+			labelsPanel.setPreferredSize(new java.awt.Dimension(LABELS_PANEL_WIDTH,HEIGHT));
+			labelsPanel.add(getFileSizeLabelPanel(), null);
+			labelsPanel.add(getDataTypeLabelPanel(), null);
+			labelsPanel.add(getByteOrderLabelPanel(), null);
+			labelsPanel.add(getInterleavingLabelPanel(), null);
+		}
+		return labelsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFieldsPanel() {
+		if (fieldsPanel == null) {
+			fieldsPanel = new JPanel();
+			fieldsPanel.setPreferredSize(new java.awt.Dimension(TEXTS_PANEL_WIDTH,HEIGHT));
+			fieldsPanel.add(getFileSizeTextPanel(), null);
+			fieldsPanel.add(getDataTypeTextPanel(), null);
+			fieldsPanel.add(getByteOrderTextPanel(), null);
+			fieldsPanel.add(getInterleavingTextPanel(), null);
+		}
+		return fieldsPanel;
+	}
+
+	/**
+	 * This method initializes jPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getFileSizeTextPanel() {
+		if (fileSizeTextPanel == null) {
+			FlowLayout flowLayout = new FlowLayout();
+			flowLayout.setHgap(0);
+			flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout.setVgap(1);
+			fileSizeTextPanel = new JPanel();
+			fileSizeTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			fileSizeTextPanel.setLayout(flowLayout);
+			fileSizeTextPanel.add(getFileSizeText(), null);
+		}
+		return fileSizeTextPanel;
+	}
+	
+	/**
+	 * This method initializes jPanel1	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getDataTypeTextPanel() {
+		if (dataTypeTextPanel == null) {
+			FlowLayout flowLayout5 = new FlowLayout();
+			flowLayout5.setHgap(0);
+			flowLayout5.setAlignment(java.awt.FlowLayout.LEFT);
+			flowLayout5.setVgap(1);
+			dataTypeTextPanel = new JPanel();
+			dataTypeTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			dataTypeTextPanel.setLayout(flowLayout5);
+			dataTypeTextPanel.add(getDataTypeText(), null);
+		}
+		return dataTypeTextPanel;
+	}	
+
+	/**
+	 * This method initializes jPanel2	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getInterleavingTextPanel() {
+		if (interleavingTextPanel == null) {
+			FlowLayout flowLayout8 = new FlowLayout();
+			flowLayout8.setHgap(0);
+			flowLayout8.setAlignment(FlowLayout.LEFT);
+			flowLayout8.setVgap(1);
+			interleavingTextPanel = new JPanel();
+			interleavingTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			interleavingTextPanel.setLayout(flowLayout8);
+			interleavingTextPanel.add(getInterleavingText(), null);
+		}
+		return interleavingTextPanel;
+	}
+	
+	/**
+	 * This method initializes oficialTextPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private JPanel getByteOrderTextPanel() {
+		if (byteOrderTextPanel == null) {
+			FlowLayout flowLayout9 = new FlowLayout();
+			flowLayout9.setHgap(0);
+			flowLayout9.setAlignment(FlowLayout.LEFT);
+			flowLayout9.setVgap(1);
+			byteOrderTextPanel = new JPanel();
+			byteOrderTextPanel.setPreferredSize(new java.awt.Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			byteOrderTextPanel.setLayout(flowLayout9);			
+			byteOrderTextPanel.add(getByteOrderText(), null);
+		}
+		return byteOrderTextPanel;
+	}
+
+
+	
+	/**
+	 * This method initializes pronunciacionText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JTextField getFileSizeText() {
+		if (fileSizeText == null) {
+			fileSizeText = new JTextField();
+			fileSizeText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+			fileSizeText.setText("0");
+			fileSizeText.setEnabled(false);
+		}
+		return fileSizeText;
+	}
+
+	/**
+	 * This method initializes etimologyText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getDataTypeText() {
+		if (dataTypeText == null) {
+			dataTypeText = new JComboBox(VRTFormatOptions.getDataTypes());
+			dataTypeText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return dataTypeText;
+	}
+
+	/**
+	 * This method initializes bandsText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getByteOrderText() {
+		if (byteOrderText == null) {
+			byteOrderText = new JComboBox(VRTFormatOptions.getByteOrder());
+			byteOrderText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return byteOrderText;
+	}
+
+	/**
+	 * This method initializes headerSizeText	
+	 * 	
+	 * @return javax.swing.JTextField	
+	 */
+	private JComboBox getInterleavingText() {
+		if (interleavingText == null) {
+			interleavingText = new JComboBox(VRTFormatOptions.getInterleaving());
+			interleavingText.setPreferredSize(new Dimension(TEXTS_WIDTH,TEXTS_HEIGHT));
+		}
+		return interleavingText;
+	}
+
+	/**
+	 * Sets the file size into the text field
+	 * @param fileSize
+	 */
+	public void setFileSize(long fileSize){
+		getFileSizeText().setText(String.valueOf(fileSize));
+	}
+	
+	/**
+	 * Gets the data type
+	 * @return
+	 */
+	public VRTFormatOptions.UIOption getDataType(){
+		return (VRTFormatOptions.UIOption)getDataTypeText().getSelectedItem();
+	}	
+	
+	/**
+	 * Gets the byte order
+	 * @return
+	 */
+	public String getByteOrder(){
+		return ((VRTFormatOptions.UIOption)getByteOrderText().getSelectedItem()).getVrtOptionName();
+	}
+
+	/**
+	 * Gets the type of interleaving
+	 * @return
+	 */
+	public String getInterleaving(){
+		return ((VRTFormatOptions.UIOption)getInterleavingText().getSelectedItem()).getVrtOptionName();
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesRigthPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java	(revision 10281)
@@ -0,0 +1,227 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JPanel;
+
+import org.gvsig.rasterTools.raw.tools.VRTFormatOptions;
+
+import com.iver.andami.PluginServices;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/08/01 13:12:56  jorpiell
+ * Separado un poco las dos columnas del panel
+ *
+ * Revision 1.4  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.3  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.2  2006/07/28 12:53:45  jorpiell
+ * Cambiado el Messages por el Plugin services
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel implements all the geometry properties panel.
+ * The "guess image geometry" button can be enabled or disabled
+ * changing the GUESS_IMAGE_BUTTON_VISIBLE attribute value.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GeometryPropertiesPanel extends JPanel {
+	private final int WIDTH = 510;
+	private final int HEIGHT = 155;
+	
+	private boolean GUESS_IMAGE_BUTTON_VISIBLE = false;
+	private GeometryPropertiesLeftPanel leftPanel = null;
+	private GeometryPropertiesRigthPanel rigthPanel = null;
+	private GuessImagePanel guessImagePanel = null;
+	public GeometryPropertiesPanel() {
+		super();
+		initialize();		
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+        gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints2.gridy = 1;
+        gridBagConstraints2.gridx = 0;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+        gridBagConstraints1.insets = new java.awt.Insets(0,2,0,0);
+        gridBagConstraints1.gridy = 0;
+        gridBagConstraints1.gridx = 1;
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.setSize(new java.awt.Dimension(WIDTH,HEIGHT));
+        this.setPreferredSize(new java.awt.Dimension(WIDTH,HEIGHT));
+        this.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this,"select_image_geometry"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+        this.add(getLeftPanel(), gridBagConstraints);
+        this.add(getRigthPanel(), gridBagConstraints1);
+        if (GUESS_IMAGE_BUTTON_VISIBLE){
+        	this.add(getGuessImagePanel(), gridBagConstraints2);
+        }
+			
+	}
+
+	/**
+	 * This method initializes leftPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GeometryPropertiesLeftPanel getLeftPanel() {
+		if (leftPanel == null) {
+			leftPanel = new GeometryPropertiesLeftPanel();
+		}
+		return leftPanel;
+	}
+
+	/**
+	 * This method initializes rigthPanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GeometryPropertiesRigthPanel getRigthPanel() {
+		if (rigthPanel == null) {
+			rigthPanel = new GeometryPropertiesRigthPanel();
+		}
+		return rigthPanel;
+	}
+
+	/**
+	 * This method initializes guessImagePanel	
+	 * 	
+	 * @return javax.swing.JPanel	
+	 */
+	private GuessImagePanel getGuessImagePanel() {
+		if (guessImagePanel == null) {
+			guessImagePanel = new GuessImagePanel();
+		}
+		return guessImagePanel;
+	}
+	
+	/**
+	 * Sets the file size into the text field
+	 * @param fileSize
+	 */
+	public void setFileSize(long fileSize){
+		getRigthPanel().setFileSize(fileSize);
+	}
+	
+	/**
+	 * Gets the data type
+	 * @return
+	 */
+	public VRTFormatOptions.UIOption getDataType(){
+		return getRigthPanel().getDataType();
+	}
+	
+	/**
+	 * Gets the byte order
+	 * @return
+	 */
+	public String getByteOrder(){
+		return getRigthPanel().getByteOrder();
+	}
+
+	/**
+	 * Gets the type of interleaving
+	 * @return
+	 */
+	public String getInterleaving(){
+		return getRigthPanel().getInterleaving();
+	}
+	
+	/**
+	 * gets the image width
+	 * @return
+	 */
+	public int getImageWidth(){
+		return getLeftPanel().getImageWidth();
+	}
+	
+	/**
+	 * gets the image height
+	 * @return
+	 */
+	public int getImageHeight(){
+		return getLeftPanel().getImageHeight();
+	}
+	
+	/**
+	 * gets the number of bands
+	 * @return
+	 */
+	public int getNumberOfBands(){
+		return getLeftPanel().getNumberOfBands();
+	}
+	
+	/**
+	 * gets the header size
+	 * @return
+	 */
+	public int getHeaderSize(){
+		return getLeftPanel().getHeaderSize();
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GeometryPropertiesPanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java	(revision 10281)
@@ -0,0 +1,112 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import javax.swing.JPanel;
+import javax.swing.JButton;
+
+import com.iver.andami.PluginServices;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:24  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This panel is a JButton for the "Guess image geometry"
+ * option.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class GuessImagePanel extends JPanel {
+	private final int BUTTON_WIDTH = 250;
+	private final int BUTTON_HEIGHT = 19;
+	
+	private JButton guessImageButton = null;
+
+	
+	public GuessImagePanel() {
+		super();
+		initialize();
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+        GridBagConstraints gridBagConstraints = new GridBagConstraints();
+        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.gridx = 0;
+        this.setLayout(new GridBagLayout());
+        this.add(getGuessImageButton(), gridBagConstraints);
+			
+	}
+
+	/**
+	 * This method initializes guessImageButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getGuessImageButton() {
+		if (guessImageButton == null) {
+			guessImageButton = new JButton();
+			guessImageButton.setPreferredSize(new java.awt.Dimension(BUTTON_WIDTH,BUTTON_HEIGHT));
+			guessImageButton.setText(PluginServices.getText(this,"guess_image_geometry"));
+			
+		}
+		return guessImageButton;
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/GuessImagePanel.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java	(revision 10281)
@@ -0,0 +1,166 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.awt.Dimension;
+
+import javax.swing.JPanel;
+import javax.swing.JButton;
+
+import org.gvsig.rasterTools.raw.ui.listener.OpenRawFileDefaultViewListener;
+
+import com.iver.andami.PluginServices;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:22  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/07/31 10:44:28  jorpiell
+ * Se ha añadido el tamaño del fichero con un thread.
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class contains the main buttons of the open raw 
+ * file panel window.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileButtonsPanel extends JPanel{
+	private final int WIDTH = 500;
+	private final int HEIGHT = 35;
+	private final int BUTTONS_WIDTH = 80;
+	private final int BUTTONS_HEIGHT = 25;
+	
+	private JButton openButton = null;
+	private JButton closeButton = null;
+	
+	
+
+	public OpenRawFileButtonsPanel() {
+		super();
+		initialize();
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * This method initializes this
+	 * 
+	 */
+	private void initialize() {
+		GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
+		gridBagConstraints3.insets = new java.awt.Insets(5,3,5,5);
+		gridBagConstraints3.gridy = 0;
+		gridBagConstraints3.gridx = 3;
+		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
+		gridBagConstraints2.insets = new java.awt.Insets(5,3,5,2);
+		gridBagConstraints2.gridy = 0;
+		gridBagConstraints2.gridx = 2;
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.insets = new java.awt.Insets(5,3,5,2);
+		gridBagConstraints1.gridy = 0;
+		gridBagConstraints1.gridx = 1;
+		GridBagConstraints gridBagConstraints = new GridBagConstraints();
+		gridBagConstraints.insets = new java.awt.Insets(5,5,5,2);
+		gridBagConstraints.gridy = 0;
+		gridBagConstraints.gridx = 0;
+		this.setLayout(new GridBagLayout());
+		this.setSize(new java.awt.Dimension(WIDTH,HEIGHT));
+		this.add(getOpenButton(), gridBagConstraints2);
+		this.add(getCloseButton(), gridBagConstraints3);
+			
+	}
+	
+
+	/**
+	 * This method initializes openButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getOpenButton() {
+		if (openButton == null) {
+			openButton = new JButton();
+			openButton.setPreferredSize(new Dimension(BUTTONS_WIDTH,BUTTONS_HEIGHT));
+			openButton.setText(PluginServices.getText(this,"accept"));
+			openButton.setActionCommand("open");
+		}
+		return openButton;
+	}
+
+	/**
+	 * This method initializes closeButton	
+	 * 	
+	 * @return javax.swing.JButton	
+	 */
+	private JButton getCloseButton() {
+		if (closeButton == null) {
+			closeButton = new JButton();
+			closeButton.setPreferredSize(new Dimension(BUTTONS_WIDTH,BUTTONS_HEIGHT));
+			closeButton.setText(PluginServices.getText(this,"close"));
+			closeButton.setActionCommand("close");
+		}
+		return closeButton;
+	}
+	
+	/**
+	 * Sets the buttons listener
+	 * @param listener
+	 * Buttons listener
+	 */
+	public void setActionListener(OpenRawFileDefaultViewListener listener){
+		openButton.addActionListener(listener);
+		closeButton.addActionListener(listener);
+	}
+
+
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileButtonsPanel.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java	(revision 10281)
@@ -0,0 +1,127 @@
+package org.gvsig.rasterTools.raw.ui.main;
+
+import java.io.File;
+
+import org.gvsig.rasterTools.raw.ui.listener.OpenRawFileDefaultViewListener;
+
+import com.iver.andami.PluginServices;
+import com.iver.andami.ui.mdiManager.IWindow;
+import com.iver.andami.ui.mdiManager.WindowInfo;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2006/11/15 12:58:01  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/08/03 06:36:51  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.4  2006/08/03 06:18:29  jorpiell
+ * *** empty log message ***
+ *
+ * Revision 1.3  2006/08/01 12:56:00  jorpiell
+ * Se abre el cuadro de diálogo en el momento de abrir el fichero
+ *
+ * Revision 1.2  2006/08/01 11:19:04  jorpiell
+ * Ajustado el tamaño de las ventanas
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class implemens the View interface to add the open
+ * raw panel in gvSIG
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileDefaultView extends OpenRawFileDefaultPanel implements IWindow{
+	private File imageFile = null;
+	
+	/**
+	 * Constructor. It create and sets the listener for the window
+	 * buttons.
+	 * @param rawFile
+	 * Raw file name
+	 */
+	public OpenRawFileDefaultView(String rawFileName){
+		super(rawFileName);
+		setActionListener(new OpenRawFileDefaultViewListener(this));
+		PluginServices.getMDIManager().addWindow(this);	
+	}
+		
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.andami.ui.mdiManager.View#getViewInfo()
+	 */
+	public WindowInfo getWindowInfo() {
+		WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG);
+		m_viewinfo.setTitle(PluginServices.getText(this, "open_raw_file"));
+		m_viewinfo.setHeight(270);
+		m_viewinfo.setWidth(540);
+		return m_viewinfo;
+	}	
+
+	/**
+	 * @return Returns the imageFile.
+	 */
+	public File getImageFile() {
+		return imageFile;
+	}
+
+	/**
+	 * @param imageFile The imageFile to set.
+	 */
+	public void setImageFile(File imageFile) {
+		this.imageFile = imageFile;
+	}
+
+}
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/main/OpenRawFileDefaultView.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java	(revision 10281)
@@ -0,0 +1,165 @@
+package org.gvsig.rasterTools.raw.ui.listener;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+
+import javax.swing.JOptionPane;
+
+import org.apache.log4j.Logger;
+import org.gvsig.rasterTools.raw.tools.VRTFileCreator;
+import org.gvsig.rasterTools.raw.ui.main.OpenRawFileControlsPanel;
+import org.gvsig.rasterTools.raw.ui.main.OpenRawFileDefaultView;
+
+import com.iver.andami.PluginServices;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1.2.1  2006/11/15 12:58:01  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.6  2006/09/05 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.5  2006/08/01 12:56:00  jorpiell
+ * Se abre el cuadro de diálogo en el momento de abrir el fichero
+ *
+ * Revision 1.4  2006/08/01 11:19:24  jorpiell
+ * Ahora ya no es la ventana la que carga la capa, sino el driver
+ *
+ * Revision 1.3  2006/07/31 10:44:04  jorpiell
+ * Se han completado las acciones de los botones aceptar y cancelar
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * Listener for the open raw file window. It implements actions
+ * for the "open file" and for the "close window" buttons. 
+ * 
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class OpenRawFileDefaultViewListener implements ActionListener{
+	private OpenRawFileDefaultView openRawView = null;
+	private static Logger logger = Logger.getLogger(OpenRawFileDefaultViewListener.class.getName());
+	
+	/**
+	 * Contructor
+	 * @param view
+	 * Open raw file view
+	 */
+	public OpenRawFileDefaultViewListener(OpenRawFileDefaultView view) {
+		super();
+		this.openRawView = view;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+	 */
+	public void actionPerformed(ActionEvent event) {
+		if (event.getActionCommand() == "close") {
+			closeButtonActionPerformed();
+		}else if (event.getActionCommand() == "open") {
+			openButtonActionPerformed();
+		}		
+	}
+
+	/**
+	 * Open raw file button action
+	 *
+	 */
+	private void openButtonActionPerformed() {
+		OpenRawFileControlsPanel controls = openRawView.getControlsPanel();
+		if (!(controls.getFile().exists())){
+			JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+				 	PluginServices.getText(this,"file_doesn_exists"));
+			return;
+		}
+		if (controls.getOutputHeaderFormat().equals("VRT")){
+			String vrtFileName = controls.getFile().getAbsolutePath().replaceAll("\\.raw", ".vrt");
+			VRTFileCreator vrt = new VRTFileCreator(vrtFileName);
+			vrt.setImageWidth(controls.getImageWidth());
+			vrt.setImageHeight(controls.getImageHeight());
+			vrt.setBands(controls.getNumberOfBands());
+			vrt.setHeaderSize(controls.getHeaderSize());
+			vrt.setDataType(controls.getDataType().getVrtOptionName());
+			vrt.setDataSize(controls.getDataType().getDataSize());
+			vrt.setByteOrder(controls.getByteOrder());
+			vrt.setInterleaving(controls.getInterleaving());
+			vrt.setRawFile(controls.getFile().getName());
+			try {
+				vrt.writeFile();				
+				openRawView.setImageFile(vrt.getM_File());
+			} catch (IOException e) {
+				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
+					 	PluginServices.getText(this,"cant_create_vrt_file"));
+				logger.error(PluginServices.getText(this,"cant_create_vrt_file"),e);				
+			}			
+		}
+		closeButtonActionPerformed();
+	}
+
+	/**
+	 * Close window
+	 */
+	private void closeButtonActionPerformed() {
+		OpenRawFileControlsPanel controls = openRawView.getControlsPanel();
+		controls.stopThread();
+		PluginServices.getMDIManager().closeWindow(openRawView);		
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/ui/listener/OpenRawFileDefaultViewListener.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java	(revision 10281)
@@ -0,0 +1,218 @@
+package org.gvsig.rasterTools.raw.tools;
+
+import java.util.Hashtable;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/31 10:43:25  jorpiell
+ * Algunos métodos necesarios que calculan valores para construir el fichero VRT
+ *
+ *
+ */
+/**
+ * This class has some utils to create a VRT file.
+ * It has methods to obtaint the VRT parameters that
+ * will be written in the file
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class VRTFormatUtils {
+		
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param dataSize
+	 * Type of each pixel
+	 * @param headerSize
+	 * Header file size
+	 * @param interLeaving
+	 * Type of interleaving
+	 * @param band
+	 * Band number
+	 * @param numBands
+	 * Number of bands
+	 * @param width
+	 * Image width
+	 * @param height
+	 * Image height
+	 * @return
+	 * ImageOffSet parameter value
+	 */
+	public static String getImageOffset(int dataSize,
+			int headerSize,
+			String interLeaving,
+			int band,
+			int numBands,
+			int width,
+			int height){
+		
+		int imageOffSet = 0;
+		if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_PIXEL)){
+			imageOffSet = 1;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_BAND)){
+			imageOffSet = width * height;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_LINE)){
+			imageOffSet = width * numBands;
+		}	
+		
+		imageOffSet = imageOffSet * (dataSize/8);
+		imageOffSet = imageOffSet * (band - 1);
+		imageOffSet = imageOffSet + headerSize;
+		return String.valueOf(imageOffSet); 
+	}
+	
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param fileCreator
+	 * Contains all the params
+	 * @param band
+	 * Band to obtain the image offset
+	 * @return
+	 */
+	public static String getImageOffset(VRTFileCreator fileCreator,int band){
+		return getImageOffset(fileCreator.getDataSize(),
+				fileCreator.getHeaderSize(),
+				fileCreator.getInterleaving(),
+				band,
+				fileCreator.getBands(),
+				fileCreator.getImageWidth(),
+				fileCreator.getImageHeight());
+	}
+	
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param dataSize
+	 * Type of each pixel
+	 * @param interLeaving
+	 * Type of interleaving
+	 * Band number
+	 * @param numBands
+	 * Number of bands
+	 * @param width
+	 * Image width
+	 * @return
+	 * ImageOffSet parameter value
+	 */
+	public static String getLineOffset(int dataSize,
+			String interLeaving,
+			int numBands,
+			int width){
+		
+		int lineOffSet = 0;
+		if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_PIXEL)){
+			lineOffSet = width * numBands;
+					
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_BAND)){
+			lineOffSet = width;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_LINE)){
+			lineOffSet = width * numBands;
+		}		
+
+		lineOffSet = lineOffSet * (dataSize/8);
+		return String.valueOf(lineOffSet); 
+	}
+	
+	/**
+	 * It calculates the LineOffSet parameter value.
+	 * @param fileCreator
+	 * Contains all the params
+	 * @return
+	 */
+	public static String getLineOffset(VRTFileCreator fileCreator){
+		return getLineOffset(fileCreator.getDataSize(),
+				fileCreator.getInterleaving(),
+				fileCreator.getBands(),
+				fileCreator.getImageWidth());
+	}
+	
+	/**
+	 * It calculates the ImageOffSet parameter value.
+	 * @param dataSize
+	 * Type of each pixel
+	 * @param interLeaving
+	 * Type of interleaving
+	 * @param numBands
+	 * Number of bands
+	 * @return
+	 * ImageOffSet parameter value
+	 */
+	public static String getPixelOffset(int dataSize,
+			String interLeaving,
+			int numBands){
+		
+		int pixelOffSet = 0;
+		if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_PIXEL)){
+			pixelOffSet = numBands;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_BAND)){
+			pixelOffSet = 1;
+			
+		}else if (interLeaving.equals(VRTFormatOptions.INTERLEAVING_LINE)){
+			pixelOffSet = 1;
+		}	
+		
+		pixelOffSet = pixelOffSet * (dataSize/8);
+		return String.valueOf(pixelOffSet); 
+	}
+	
+	/**
+	 * It calculates the PixelOffSet parameter value.
+	 * @param fileCreator
+	 * Contains all the params
+	 * @return
+	 */
+	public static String getPixelOffset(VRTFileCreator fileCreator){
+		return getPixelOffset(fileCreator.getDataSize(),
+				fileCreator.getInterleaving(),
+				fileCreator.getBands());
+	}
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatUtils.java
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java	(revision 10281)
@@ -0,0 +1,425 @@
+package org.gvsig.rasterTools.raw.tools;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/31 10:42:56  jorpiell
+ * Cambiadas estas clases de paquete
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class is user to create a VRT file. It writes the file when
+ * the "writeFile" method is called. If some params are not seted
+ * the deafult values will bi used.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class VRTFileCreator {
+	private Writer writer = null;	
+	private File m_File = null;
+	private int width = 0;
+	private int height = 0;
+	private int bands = 0;
+	private int headerSize = 0;
+	private int fileSize = 0;
+	private String rawFile = null;
+	private String dataType = null;
+	private int dataSize = 0;
+	private String byteOrder = null;
+	private String interleaving = null;
+	private String outputHeaderFormat = null;
+	
+	public VRTFileCreator(File m_File) {
+		super();		
+		this.m_File = m_File;
+	}
+	
+	public VRTFileCreator(String file) {
+		super();		
+		this.m_File = new File(file);
+	}
+	
+	/**
+	 * It writes the VRT file
+	 * @throws IOException 
+	 *
+	 */
+	public void writeFile() throws IOException{
+		if (!m_File.exists()){
+			m_File.createNewFile();
+		}
+		writer = new FileWriter(m_File);
+		createVRTFile();
+		writer.close();	
+	}
+	
+	/**
+	 * It creates the VRT File
+	 * @throws IOException
+	 */
+	private void createVRTFile() throws IOException{
+		writer.write(getXMLVRTDatasetHeaderTag());
+		
+		for (int i=0 ; i<getBands() ; i++){
+			createOneBand(i+1);
+		}
+		
+		writer.write(getXMLVRTDatasetEndTag());
+	}
+	
+	/**
+	 * IT creates all the XML tags for one band
+	 * @param band
+	 * Band number
+	 * @throws IOException 
+	 */
+	private void createOneBand(int band) throws IOException{
+		writer.write(getXMLVRTRasterBandHeaderTag(band));
+		writer.write(getXMLSourceFilenameTag());
+		writer.write(getXMLByteOrderTag());
+		writer.write(getXMLImageOffsetTag(band));
+		writer.write(getXMLPixelOffsetTag());
+		writer.write(getXMLLineOffsetTag());
+		writer.write(getXMLVRTRasterBandEndTag());
+	}
+	
+	/**
+	 * Creates the header of the VRTDataset XML tag. It 
+	 * contains the width and the height.
+	 * @return
+	 * The VRTDataset XML tag
+	 */
+	private String getXMLVRTDatasetHeaderTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("<VRTDataset rasterXSize=\"" + getImageWidth() + "\" ");
+		buffer.append("rasterYSize=\"" + getImageHeight() + "\">\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the end of the VRTDataset XML tag
+	 * @return
+	 *  The VRTDataset XML tag
+	 */
+	private String getXMLVRTDatasetEndTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("</VRTDataset>\n"); 		
+		return buffer.toString();
+	}
+	
+	/**
+	 * Creates the header of the VRTRasterBand XML tag. It
+	 * contains the image data type. 
+	 * @return
+	 * The VRTRasterBand XML tag
+	 */
+	private String getXMLVRTRasterBandHeaderTag(int band){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t<VRTRasterBand dataType=\"" + getDataType() + "\" ");
+		buffer.append("band=\"" + band + "\" ");
+		buffer.append("subClass=\"VRTRawRasterBand\">\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the end of the VRTRasterBand XML tag
+	 * @return
+	 *  The VRTRasterBand XML tag
+	 */
+	private String getXMLVRTRasterBandEndTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t</VRTRasterBand>\n"); 		
+		return buffer.toString();
+	}		
+	
+	
+	/**
+	 * Creates the SourceFilename XML tag: The raw file path
+	 * @return
+	 * The SourceFilename XML tag
+	 */
+	private String getXMLSourceFilenameTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<SourceFilename relativetoVRT=\"1\">");
+		buffer.append(getRawFile());
+		buffer.append("</SourceFilename>\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the ByteOrder XML tag. Possible values
+	 * are specified in VRTFileOptions class.
+	 * @return
+	 * The ByteOrder XML tag
+	 */
+	private String getXMLByteOrderTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<ByteOrder>");
+		buffer.append(getByteOrder());
+		buffer.append("</ByteOrder>\n");
+		return buffer.toString();
+	}	
+	
+	/**
+	 * Creates the ImageOffset XML tag: The image data starts
+	 * from the byte number specified by this value
+	 * @return
+	 * The ImageOffset XML tag
+	 */
+	private String getXMLImageOffsetTag(int band){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<ImageOffset>");
+		buffer.append(VRTFormatUtils.getImageOffset(this,band));
+		buffer.append("</ImageOffset>\n");
+		return buffer.toString();
+	}
+	
+	/**
+	 * Creates the PixelOffset XML tag: The byte offeset between 
+	 * pixels
+	 * @return
+	 * The PixelOffset XML tag
+	 */
+	private String getXMLPixelOffsetTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<PixelOffset>");
+		buffer.append(VRTFormatUtils.getPixelOffset(this));
+		buffer.append("</PixelOffset>\n");
+		return buffer.toString();
+	}
+	
+	/**
+	 * Creates the LineOffset XML tag.
+	 * @return
+	 * The LineOffset XML tag
+	 */
+	private String getXMLLineOffsetTag(){
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("\t\t<LineOffset>");
+		buffer.append(VRTFormatUtils.getLineOffset(this));
+		buffer.append("</LineOffset>\n");
+		return buffer.toString();
+	}
+	
+	/**
+	 * @return Returns the bands.
+	 */
+	public int getBands() {
+		return bands;
+	}
+
+	/**
+	 * @param bands The bands to set.
+	 */
+	public void setBands(int bands) {
+		this.bands = bands;
+	}
+
+	/**
+	 * @return Returns the byteOrder.
+	 */
+	public String getByteOrder() {
+		return byteOrder;
+	}
+
+	/**
+	 * @param byteOrder The byteOrder to set.
+	 */
+	public void setByteOrder(String byteOrder) {
+		this.byteOrder = byteOrder;
+	}
+
+	/**
+	 * @return Returns the dataType.
+	 */
+	public String getDataType() {
+		return dataType;
+	}
+
+	/**
+	 * @param dataType The dataType to set.
+	 */
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+
+	/**
+	 * @return Returns the fileSize.
+	 */
+	public int getFileSize() {
+		return fileSize;
+	}
+
+	/**
+	 * @param fileSize The fileSize to set.
+	 */
+	public void setFileSize(int fileSize) {
+		this.fileSize = fileSize;
+	}
+
+	/**
+	 * @return Returns the headerSize.
+	 */
+	public int getHeaderSize() {
+		return headerSize;
+	}
+
+	/**
+	 * @param headerSize The headerSize to set.
+	 */
+	public void setHeaderSize(int headerSize) {
+		this.headerSize = headerSize;
+	}
+
+	/**
+	 * @return Returns the height.
+	 */
+	public int getImageHeight() {
+		return height;
+	}
+
+	/**
+	 * @param height The height to set.
+	 */
+	public void setImageHeight(int height) {
+		this.height = height;
+	}
+
+	/**
+	 * @return Returns the interleaving.
+	 */
+	public String getInterleaving() {
+		return interleaving;
+	}
+
+	/**
+	 * @param interleaving The interleaving to set.
+	 */
+	public void setInterleaving(String interleaving) {
+		this.interleaving = interleaving;
+	}
+
+	/**
+	 * @return Returns the outputHeaderFormat.
+	 */
+	public String getOutputHeaderFormat() {
+		return outputHeaderFormat;
+	}
+
+	/**
+	 * @param outputHeaderFormat The outputHeaderFormat to set.
+	 */
+	public void setOutputHeaderFormat(String outputHeaderFormat) {
+		this.outputHeaderFormat = outputHeaderFormat;
+	}
+
+	/**
+	 * @return Returns the width.
+	 */
+	public int getImageWidth() {
+		return width;
+	}
+
+	/**
+	 * @param width The width to set.
+	 */
+	public void setImageWidth(int width) {
+		this.width = width;
+	}
+
+	/**
+	 * @return Returns the rawFile.
+	 */
+	public String getRawFile() {
+		return rawFile;
+	}
+
+	/**
+	 * @param rawFile The rawFile to set.
+	 */
+	public void setRawFile(String rawFile) {
+		this.rawFile = rawFile;
+	}
+
+	/**
+	 * @return Returns the m_File.
+	 */
+	public File getM_File() {
+		return m_File;
+	}
+
+	/**
+	 * @return Returns the dataSize.
+	 */
+	public int getDataSize() {
+		return dataSize;
+	}
+
+	/**
+	 * @param dataSize The dataSize to set.
+	 */
+	public void setDataSize(int dataSize) {
+		this.dataSize = dataSize;
+	}
+
+
+
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFileCreator.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java	(revision 10281)
@@ -0,0 +1,213 @@
+package org.gvsig.rasterTools.raw.tools;
+
+import java.util.Vector;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/07/31 10:42:56  jorpiell
+ * Cambiadas estas clases de paquete
+ *
+ * Revision 1.2  2006/07/28 13:13:27  jorpiell
+ * Unos pequeños cambios para que coja el ancho y el alto de la imagen
+ *
+ * Revision 1.1  2006/07/28 12:51:40  jorpiell
+ * Primer commit de las clases empleadas para abrir raw
+ *
+ *
+ */
+/**
+ * This class contains some information to manage
+ * the VRT file formats. It has the possible values
+ * for the params.
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class VRTFormatOptions {
+	public static final String INTERLEAVING_PIXEL = "Pixel";
+	public static final String INTERLEAVING_BAND = "Band";
+	public static final String INTERLEAVING_LINE = "Line";
+	
+	public static final String DATA_TYPE_BYTE = "Byte";
+	public static final String DATA_TYPE_UINT16 = "Uint16";
+	public static final String DATA_TYPE_INT16 = "Int16";
+	public static final String DATA_TYPE_UINT32 = "UInt32";
+	public static final String DATA_TYPE_INT32 = "Int32";
+	public static final String DATA_TYPE_FLOAT32 = "Float32";
+	public static final String DATA_TYPE_FLOAT64 = "Float64";
+	public static final String DATA_TYPE_CINT16 = "CInt16";
+	public static final String DATA_TYPE_CINT32 = "CInt32";
+	public static final String DATA_TYPE_CFLOAT32 = "CFloat32";
+	public static final String DATA_TYPE_CFLOAT64 = "CFloat64";
+	
+	public static final String BYTE_ORDER_LSB = "LSB";
+	public static final String BYTE_ORDER_MSB = "MSB";
+	
+	public static final String OUTPUT_FORMAT_VRT = "VRT";
+	
+	/**
+	 * Return the supported image data types 
+	 * @return
+	 * One vector of data types
+	 */
+	public static Vector getDataTypes(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(DATA_TYPE_BYTE,8));
+		vector.add(new UIOption(DATA_TYPE_UINT32,16));
+		vector.add(new UIOption(DATA_TYPE_INT16,16));
+		vector.add(new UIOption(DATA_TYPE_UINT32,32));
+		vector.add(new UIOption(DATA_TYPE_INT32,32));
+		vector.add(new UIOption(DATA_TYPE_FLOAT32,32));
+		vector.add(new UIOption(DATA_TYPE_FLOAT64,64));
+		vector.add(new UIOption(DATA_TYPE_CINT16,16));
+		vector.add(new UIOption(DATA_TYPE_CINT32,32));
+		vector.add(new UIOption(DATA_TYPE_CFLOAT32,32));
+		vector.add(new UIOption(DATA_TYPE_CFLOAT64,64));		
+		return vector;
+	}
+	
+	/**
+	 * Return the supported byte order
+	 * @return
+	 * One vector of byte order
+	 */
+	public static Vector getByteOrder(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(BYTE_ORDER_LSB,"LSB (Swapped)"));
+		vector.add(new UIOption(BYTE_ORDER_MSB,"MSB (Unswapped)"));
+		return vector;
+	}
+	
+	
+	/**
+	 * Return the types of interleavings
+	 * @return
+	 *One vector  of interleavings
+	 */
+	public static Vector getInterleaving(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(INTERLEAVING_PIXEL));
+		vector.add(new UIOption(INTERLEAVING_BAND));
+		vector.add(new UIOption(INTERLEAVING_LINE));
+		return vector;
+	}
+	
+	/**
+	 * Return the supported output header formats
+	 * @return
+	 * One vector of header formats
+	 */
+	public static Vector getOutputHeaderFormats(){
+		Vector vector = new Vector();
+		vector.add(new UIOption(OUTPUT_FORMAT_VRT));
+		return vector;
+	}
+
+	/**
+	 * This class is used to separate the string that is 
+	 * showes in the user interface of the other string
+	 * used in the vrt file format.
+	 * @author Jorge Piera Llodrá (piera_jor@gva.es)
+	 *
+	 */
+	public static class UIOption{
+		private String uiName = null;
+		private String vrtOptionName = null;
+		private int dataSize = 0;
+		
+		public UIOption(String vrtOptionName,String uiName) {
+			super();
+			this.uiName = uiName;
+			this.vrtOptionName = vrtOptionName;
+		}
+		
+		public UIOption(String vrtOptionName) {
+			super();
+			this.uiName = vrtOptionName;
+			this.vrtOptionName = vrtOptionName;
+		}
+		
+		public UIOption(String vrtOptionName,int dataSize) {
+			super();
+			this.uiName = vrtOptionName;
+			this.vrtOptionName = vrtOptionName;
+			this.dataSize = dataSize;
+		}
+		
+		/**
+		 * @return Returns the uiName.
+		 */
+		public String getUiName() {
+			return uiName;
+		}
+		
+		/**
+		 * @return Returns the vrtOptionName.
+		 */
+		public String getVrtOptionName() {
+			return vrtOptionName;
+		}
+		
+		/**
+		 * @return Returns the uiName.
+		 */
+		public String toString() {
+			return uiName;
+		}
+
+		/**
+		 * @return Returns the dataSize.
+		 */
+		public int getDataSize() {
+			return dataSize;
+		}
+		
+	}
+}
+	

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/tools/VRTFormatOptions.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java	(revision 10281)
@@ -0,0 +1,108 @@
+package org.gvsig.rasterTools.raw;
+
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
+
+import org.cresques.cts.IProjection;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.px.PxRaster;
+import org.gvsig.rasterTools.raw.ui.main.OpenRawFileDefaultView;
+
+import com.iver.cit.gvsig.fmap.drivers.raster.CmsRasterDriver;
+
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+/* CVS MESSAGES:
+ *
+ * $Id$
+ * $Log$
+ * Revision 1.1  2006-11-28 11:49:25  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.1  2006/10/10 16:11:23  nacho
+ * *** empty log message ***
+ *
+ * Revision 1.2  2006/08/01 12:56:00  jorpiell
+ * Se abre el cuadro de diálogo en el momento de abrir el fichero
+ *
+ * Revision 1.1  2006/08/01 11:19:45  jorpiell
+ * Eliminada la extensión y añadido el driver
+ *
+ *
+ */
+/**
+ * This driver loads a Raw file from a file. It opens a 
+ * properties window to set some params to create a VRT
+ * file and then uses it to load the raw file in the
+ * gvSIG current view
+ * 
+ * @author Jorge Piera Llodrá (piera_jor@gva.es)
+ */
+public class RawDriver extends CmsRasterDriver  {
+	
+	/* (non-Javadoc)
+	 * @see com.hardcode.driverManager.Driver#getName()
+	 */
+	public String getName() {
+		return "gvSIG Raw Image Driver";
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#fileAccepted(java.io.File)
+	 */
+	public boolean fileAccepted(File file) {
+		if (file.getName().toUpperCase().endsWith("RAW")){
+			return true;
+		}
+		return false;
+	}
+	
+	/*
+	 *  (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.raster.CmsRasterDriver#getTransformedFile(java.io.File)
+	 */
+	public File getTransformedFile(File file){
+		OpenRawFileDefaultView view = new OpenRawFileDefaultView(file.getAbsolutePath());
+		return view.getImageFile();
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/raw/RawDriver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java	(revision 10281)
@@ -0,0 +1,435 @@
+/*
+ * Created on 20-dic-2006
+ */
+/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ */
+package org.gvsig.rasterTools.grass;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.cresques.cts.ICoordTrans;
+import org.cresques.cts.IProjection;
+import org.cresques.filter.RasterFilterStack;
+import org.cresques.geo.ViewPortData;
+import org.cresques.io.GdalFile;
+import org.cresques.io.GeoRasterFile;
+import org.cresques.io.data.Grid;
+import org.cresques.io.data.RasterBuf;
+import org.cresques.px.Extent;
+import org.cresques.px.PxRaster;
+
+import com.iver.cit.gvsig.fmap.ViewPort;
+import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
+import com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver;
+
+
+public class GrassDriver implements GeorreferencedRasterDriver{
+	
+	/* (non-Javadoc)
+	 * @see com.hardcode.driverManager.Driver#getName()
+	 */
+	public String getName() {
+		return "gvSIG Grass Driver";
+	}
+
+	
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#fileAccepted(java.io.File)
+	 */
+	public boolean fileAccepted(File file) {
+		int index = file.getAbsolutePath().lastIndexOf(File.separator);
+		String path = file.getAbsolutePath().substring(0, index);
+		return path.endsWith("PERMANENT/cellhd");
+	}
+	
+	private File file = null;
+	private IProjection proj = null;
+	private GeoRasterFile rasterFile = null;
+	private PxRaster raster = null;
+	private Grid	grid = null;
+
+	int trans = 255;
+
+	static {
+		 Class c[] = {GdalFile.class};
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#open(java.io.File)
+	 */
+	public void open(File f) throws IOException {
+		file = f;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#close()
+	 */
+	public void close() throws IOException {
+		rasterFile.close();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#initialize()
+	 */
+	public void initialize() throws IOException {
+		if (proj != null){
+			String fName = null;
+			if(file != null)
+				fName = file.getAbsolutePath();
+				
+			if(fName != null)
+				rasterFile = GeoRasterFile.openFile(proj, fName);
+			
+			if(rasterFile == null)
+				throw new IOException("Formato no valido");
+			grid = new Grid(rasterFile);
+			createPxRaster();
+		} else
+			throw new IOException("Proyección no asignada");
+	}
+
+	/**
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#initialize(org.cresques.cts.IProjection)
+	 */
+	public void initialize(IProjection proj) throws IOException {
+		this.proj = proj;
+		rasterFile = GeoRasterFile.openFile(proj, file.getAbsolutePath());
+		if(rasterFile == null)
+			return;
+		grid = new Grid(rasterFile);
+		createPxRaster();
+	}
+
+	private void createPxRaster() {
+		raster = new PxRaster(rasterFile, null, rasterFile.getExtent());
+		raster.setTransparency(false);
+		grid.addRenderizer(raster);
+	}
+
+	/**
+	 * Añade un fichero al PxRaste
+	 * @param fileName Nombre del fichero a añadir
+	 */
+	public void addFile(String fileName){
+		if(raster!=null){
+			GeoRasterFile grf = raster.addFile(fileName);
+			grid.addFile(grf);
+		}
+	}
+
+	/**
+	 * Elimina un fichero al PxRaste
+	 * @param fileName Nombre del fichero a añadir
+	 */
+	public void delFile(String fileName){
+		if(raster!=null){
+			GeoRasterFile grf = raster.delFile(fileName);
+			grid.removeFile(grf);
+		}
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getFullExtent()
+	 */
+	public Rectangle2D getFullExtent() {
+		return rasterFile.getExtent().toRectangle2D();
+	}
+
+	public int getTransparency() {
+		return 255-(raster.getAlpha());
+	}
+
+	public void setTransparency(int trans) {
+		this.trans = trans;
+		if (raster != null) {
+			raster.setTransparency(trans);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort)
+	 */
+	public void draw(BufferedImage image, Graphics2D g, ViewPort vp) throws DriverIOException {
+		Extent e = new Extent(vp.getAdjustedExtent());
+		Dimension imgSz = vp.getImageSize();
+		ViewPortData vp2 = new ViewPortData(vp.getProjection(), e, imgSz );
+		vp2.setMat(vp.getAffineTransform());
+		raster.draw(g, vp2);
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#getProjection()
+	 */
+	public IProjection getProjection() {
+		return proj;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.GeorreferencedRasterDriver#setProjection(org.cresques.cts.IProjection)
+	 */
+	public void setProjection(IProjection proj) {
+		this.proj = proj;
+	}
+
+	/*
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getNumBands()
+	 */
+	public int getNumBands() {
+		return rasterFile.getBandCount();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, byte[])
+	 */
+	public byte[] getPixel(int x, int y, byte[] dArray) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getPixel(int, int, int[])
+	 */
+	public int[] getPixel(int x, int y, int[] dArray) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getRasterDataType()
+	 */
+	public int getRasterDataType() {
+		return raster.getDataType();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getData(int, int, int)
+	 */
+	public Object getData(int x, int y, int band) {
+		return raster.getFiles()[0].getData(x, y, band);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsByte(int, int, int)
+	 */
+	public byte getDataAsByte(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsFloat(int, int, int)
+	 */
+	public float getDataAsFloat(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsDouble(int, int, int)
+	 */
+	public double getDataAsDouble(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getDataAsInt(int, int, int)
+	 */
+	public int getDataAsInt(int x, int y, int band) {
+		return 0;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getImage(java.awt.Dimension, java.awt.geom.Rectangle2D, org.cresques.cts.ICoordTrans)
+	 */
+	public Image getImage(Dimension size, Rectangle2D userSize, ICoordTrans rp) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.drivers.RasterDriver#getAttributes()
+	 * ¡AVISO! Variar los tipos de datos devueltos puede hacer que alguna extensión
+	 * no funcione bien. Se pueden añadir atributos pero no es recomendable quitar ninguno. 
+	 */
+	public ArrayList getAttributes() {
+		ArrayList attr = new ArrayList();
+		String dataType = "Byte";
+		if (rasterFile.getDataType() == DataBuffer.TYPE_BYTE) dataType = "Byte";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_SHORT)
+			dataType = "Short";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_USHORT)
+			dataType = "Unsigned Short";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_INT)
+			dataType = "Integer";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_FLOAT)
+			dataType = "Float";
+		else if (rasterFile.getDataType() == DataBuffer.TYPE_DOUBLE)
+			dataType = "Double";
+		else
+			dataType = "Unknown";
+		Object [][] a = {
+			{"Filename",rasterFile.getName()},
+			{"Filesize",new Long(rasterFile.getFileSize())},
+			{"Width",new Integer(rasterFile.getWidth())},
+			{"Height", new Integer(rasterFile.getHeight())},
+			{"Bands", new Integer(rasterFile.getBandCount())}
+//			{"BandDataType", dataType}
+		};
+		for (int i=0; i<a.length; i++)
+			attr.add(a[i]);
+		return attr;
+	}
+
+	/**
+	 * Devuelve el colorBand activo en la banda especificada.
+	 * @param flag banda.
+	 * @return color de banda activo
+	 */
+	public int getBand(int flag){
+		return raster.getBand(flag);
+	}
+
+	/**
+	 * Devuelve la posición del fichero para la banda especificada.
+	 * @param flag banda.
+	 * @return posición del fichero
+	 */
+	public int getPosFile(int flag){
+		return raster.getPosFile(flag);
+	}
+
+	/**
+	 * Activa o desactiva la transparencia
+	 * @param t	true activa la transparencia y false la desactiva
+	 */
+	public void setTransparency(boolean t){
+		raster.setTransparency(t);
+	}
+
+	/**
+	 * Asocia un colorBand al rojo, verde o azul.
+	 * @param flag cual (o cuales) de las bandas.
+	 * @param nBand	que colorBand
+	 */
+	public void setBand(int flag, int nBand){
+		raster.setBand(flag, nBand);
+	}
+
+	/**
+	 * Obtiene la pila de filtros
+	 * @return pila de filtros
+	 */
+	public RasterFilterStack getFilterStack(){
+		return raster.filterStack;
+	}
+
+	/**
+	 * Asigna la pila de filtros
+	 * @return pila de filtros
+	 */
+	public void setFilterStack(RasterFilterStack stack){
+		raster.filterStack = stack;
+	}
+
+	/**
+	 * Obtiene el valor del pixel del Image en la posición x,y
+	 * @param x Posición x
+	 * @param y Posición y
+	 * @return valor de pixel
+	 */
+	public int[] getPixel(double wcx, double wcy){
+		return raster.getPixel(wcx, wcy);
+	}
+
+	/**
+	 *
+	 */
+	public GeoRasterFile [] getFiles(){
+		return raster.getFiles();
+	}
+	
+	/**
+	 * Obtiene el flag que dice si la imagen está o no georreferenciada
+	 * @return true si está georreferenciada y false si no lo está.
+	 */
+	public boolean isGeoreferenced() {
+		return rasterFile.isGeoreferenced();
+	}
+	
+	/**
+	 * Asigna una transformación al georrasterfile para la transformar la 
+	 * asignación de setView. Del mismo modo asigna los extents a PxRaster para
+	 * transformar la visualización.
+	 * @param t Matriz de transformación
+	 */
+	public void setAffineTransform(AffineTransform t){ 
+		for (int i = 0; i < raster.getFiles().length; i++) {
+			raster.getFiles()[i].setAffineTransform(t);
+			raster.setExtent(raster.getFiles()[i].getExtent());
+			raster.setExtentForRequest(raster.getFiles()[i].getExtentForRequest());
+		}
+	}
+	
+	public AffineTransform getAffineTransform(){
+		return raster.getFiles()[0].getAffineTransform();
+	}
+	
+	/**
+	 * Obtiene el grid asociado 
+	 * @return grid
+	 */
+	public Grid getGrid(){
+		return grid;
+	}
+	
+	/**
+	 * It returns a new file created from the selected
+	 * raster file. e.g: When the user name chooses a
+	 * RAW file the file to open is a VRT file. This 
+	 * method creates the new file and returns its name.
+	 * @param file
+	 * Selected File
+	 * @return
+	 * New File to load
+	 */
+	public File getTransformedFile(File file){
+		return null;
+	}
+
+	/**
+	 * Set data buffer to create a memory raster driver
+	 * @param buf data buffer
+	 */
+	public void setBuffer(RasterBuf buf){
+	}
+	
+	/**
+	 * Set extent to create a memory raster driver
+	 * @param ext Extent
+	 */
+	public void setExtent(Extent ext){
+	}
+
+}

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/src/org/gvsig/rasterTools/grass/GrassDriver.java
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.cvsignore
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.cvsignore	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.cvsignore	(revision 10281)
@@ -0,0 +1,4 @@
+bin
+dist
+gvSIG*.zip
+build-doc

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.cvsignore
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/A.txt
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/A.txt	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/A.txt	(revision 10281)
@@ -0,0 +1,45 @@
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+ 
+ Copyright (C) 2000 The Apache Software Foundation. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+ 
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+ 
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+ 
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+ 
+ 4. The names "Batik" and  "Apache Software Foundation"  must not be  used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+ 
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+ 
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf  of the Apache Software  Foundation. For more  information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/A.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.xml
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.xml	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.xml	(revision 10281)
@@ -0,0 +1,155 @@
+<project name="extgvSIGPiloto-Raster" default="generate-without-source" basedir=".">
+    <description>
+        Instala el plugin en Andami
+    </description>
+  <!-- set global properties for this build -->
+  <property name="src" location="src"/>
+  <property name="build" location="bin"/>
+  <property name="dist"  location="dist"/>
+  <property name="andami" location="../_fwAndami"/>
+  <property name="extensionsDir" location="${andami}/gvSIG/extensiones"/>
+  <property name="mainplugin" value="com.iver.cit.gvsig"/>
+  <property name="lib-dir" location="${extensionsDir}/${mainplugin}/lib"/>
+  <property name="drivers-dir" location="${extensionsDir}/${mainplugin}/drivers" />
+
+  <!--Plugins-->
+  <property name="plugin" value="com.iver.cit.gvsig.pilotoraster"/>
+  <property name="jarName" value="${plugin}.jar"/>
+
+  <target name="init">
+    <!-- Create the time stamp -->
+    <tstamp/>
+  	
+	<echo>
+		Compiling ${ant.project.name}...</echo>
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${dist}"/>
+  	<loadproperties srcFile="build.number"/>
+  </target>
+
+  <target name="raw" depends="grass" description="Genera el driver del raw">
+	<mkdir dir="${drivers-dir}/raw" />
+	<jar jarfile="${drivers-dir}/raw/raw.jar" basedir="./bin" includes="org/gvsig/rasterTools/raw/**" />
+  </target>
+	
+  <target name="grass" depends="" description="Genera el driver del grass">
+	<mkdir dir="${drivers-dir}/grass" />
+	<jar jarfile="${drivers-dir}/grass/grass.jar" basedir="./bin" includes="org/gvsig/rasterTools/grass/**" />
+  </target>
+	
+  <target name="generate-without-source"
+  		description="generate the distribution without the source file"
+	  	depends="raw">
+  		
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+		
+    <!-- Jars de las extensiones -->
+    <jar jarfile="${dist}/${jarName}" basedir="${build}" 
+    	includes="com/iver/cit/gvsig/**,org/gvsig/rasterTools/**"/>
+  	  	
+  	<!-- Instala extensiÃ³n salvar a raster -->
+    <move todir="${extensionsDir}/${plugin}/">
+    	<fileset dir="${dist}" includes="${jarName}"/>
+    </move>  	
+  	<copy file="config/config.xml" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+	<copy file="config/about.htm" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+	<copy file="build.number" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+  	<loadproperties srcFile="build.number"/>
+  	<replace casesensitive="true"
+  		file="${extensionsDir}/${plugin}/about.htm"
+  		token="#build.number#"
+  		value="${build.number}"
+  		></replace>
+  	<copy file="config/plugin.dtd" todir="${extensionsDir}/${plugin}" overwrite="yes"/>
+
+  	<copy file="config/palettes.xml" todir="${user.home}/gvSIG" overwrite="no"/> 
+    <copy file="lib/gvsig-ui.jar" todir="${lib-dir}" overwrite="yes"/>
+    <copy file="lib/cms.jar" todir="${lib-dir}" overwrite="yes"/>
+    <copy file="lib/jcommon-1.0.0.jar" todir="${lib-dir}"/>
+    <copy file="lib/jfreechart-1.0.1.jar" todir="${lib-dir}"/>
+    <copy file="lib/jfreechart-1.0.1-demo.jar" todir="${lib-dir}"/>
+  	<copy todir="${extensionsDir}/${plugin}">
+  	  	<fileset dir="config" includes="text*.properties"/>
+		<fileset dir="." includes="images/"/>
+  	</copy>
+  	  	
+  </target>
+	<target name="buildNumber">	  	
+		<propertyfile 
+			file="build.number"
+			comment="Build Number for ANT. Do not edit!"
+		>
+			<entry  key="build.number" default="0" type="int" operation="+"/>
+		</propertyfile>
+		<property file="build.number"/>
+	</target>
+	<target name="distribution"
+		description="compile the sources, create the jar file for distribution (generate new build number)"
+		depends="buildNumber,init,compile,create-jar,copy-data-files,move-to-andami"
+		>
+
+	</target>
+
+	<target name="batch-build"
+			description="compile the sources, create the jar file"
+			depends="init,compile,create-jar,copy-data-files,move-to-andami">
+	</target>
+
+	<target name="compile" description="compile the source" >
+		<!-- Compile the Java code from ${src} to ${build} -->
+		<mkdir dir="${build}" />
+		<javac  srcdir="${src}"
+			destdir="${build}"
+			source="1.4"
+			target="1.4"
+			debug="${debug}"
+			debuglevel="${debuglevel}"
+			classpath="${compile-classpath}"/>
+	</target>
+	
+	<target name="create-jar"
+			description="Creates the plugin jar">
+		<mkdir dir="${dist}"/>
+	    <jar jarfile="${dist}/${jarName}" basedir="${build}" 
+	    	includes="com/iver/cit/gvsig/**,org/gvsig/rasterTools/**"/>
+	</target>
+
+	<target name="copy-data-files">
+	    <copy file="config/config.xml" todir="${dist}" overwrite="yes"/>
+		<copy file="config/about.htm" todir="${dist}" overwrite="yes"/>
+		<loadproperties srcFile="build.number"/>
+		<echo>${build.number}</echo>
+	  	<replace casesensitive="true"
+	  		file="${dist}/about.htm"
+	  		token="#build.number#"
+	  		value="${build.number}"
+	  		></replace>		
+		<copy file="build.number" todir="${dist}" overwrite="yes"/>
+	  	<copy file="config/plugin.dtd" todir="${dist}" overwrite="yes"/>
+		<copy file="config/palettes.xml" todir="${user.home}/gvSIG" overwrite="no"/>		
+	    <copy file="lib/gvsig-ui.jar" todir="${lib-dir}" overwrite="yes"/>
+	    <copy file="lib/cms.jar" todir="${lib-dir}" overwrite="yes"/>
+		<copy file="lib/jcommon-1.0.0.jar" todir="${lib-dir}"/>
+	    <copy file="lib/jfreechart-1.0.1.jar" todir="${lib-dir}"/>
+	    <copy file="lib/jfreechart-1.0.1-demo.jar" todir="${lib-dir}"/>
+		<copy todir="${dist}">
+			<fileset dir="config" includes="text*.properties"/>
+			<fileset dir="." includes="images/"/>
+		</copy>
+	</target>
+	
+	<target name="move-to-andami">
+	    <move todir="${extensionsDir}/${plugin}/">
+	    	<fileset dir="${dist}" includes="**/**"/>
+    	</move>
+	</target>
+
+  <target name="clean"
+        description="clean up" >
+    <!-- Delete the ${build} and ${dist} directory trees -->
+    <delete dir="${dist}"/>
+    <delete dir="${build}"/>
+  </target>
+</project>
+

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.classpath
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.classpath	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.classpath	(revision 10281)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="/_fwAndami"/>
+	<classpathentry kind="src" path="/libFMap"/>
+	<classpathentry kind="var" path="JUNIT_HOME/junit.jar"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="lib" path="/libFMap/lib/driver-manager-1.1.jar" sourcepath="/libDriverManager"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/beans.jar" sourcepath="/libUI/src"/>
+	<classpathentry kind="lib" path="lib/gvsig-ui.jar" sourcepath="/libUIComponents/src"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/log4j-1.2.8.jar"/>
+	<classpathentry kind="lib" path="lib/cms.jar" sourcepath="/libCq CMS for java/src"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/appgvSIG"/>
+	<classpathentry kind="lib" path="/libFMap/lib/gdbms-0.8-SNAPSHOT.jar" sourcepath="/libGDBMS"/>
+	<classpathentry kind="lib" path="/_fwAndami/lib/iver-utiles.jar" sourcepath="/Utiles/src"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/extWCS"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/extWMS"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.classpath
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.project
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.project	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.project	(revision 10281)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>extgvSIGPiloto-Raster</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>de.loskutov.FileSync.FSBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
+	</natures>
+</projectDescription>

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/.project
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_fr.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_fr.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_fr.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(\u00e9chelle maximum)
+(escala_minima)=(\u00e9chelle maximum)
+1\:=
+_(Simbolo_unico)=(Symbole unique)
+__proyeccion_actual=Projection actuelle\:
+__redimensionar_texto_escala=Redimensionner le texte suivant l'\u00e9chelle de la vue
+__seleccion_de_fuente=S\u00e9lection d'une fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Descendre
+abrir=Ouvrir
+abrir_plantilla=Ouvrir police
+abrir_proyecto=Ouvrir un projet
+abrir_tooltip=Ouvrir un projet existant
+Abrir_una_capa=Ouvrir une couche
+Accion_Predefinida=Action pr\u00e9d\u00e9finie
+aceptar=Accepter
+Aceptar=Accepter
+acerca_de=A propos de...
+activar=Activate
+activar_regla=Afficher la r\u00e8gle
+activos=Toutes actives
+add_delete_edit_fields=
+add_layer=Ajouter une couche
+add_rows=
+adjust_transparency=Ajuster la transparence
+agrupacion=
+agrupar=Grouper
+agrupar_capas=Grouper les couches
+agrupar_graficos=Grouper les graphiques
+agrupar_linea=Grouper les lignes graphiques
+Ajustar_transparencia=Ajuster la transparence
+ajustes_linea_grafica=Ajuster la ligne graphique
+Al_leer_la_leyenda=A la lecture de la l\u00e9gende
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alignement
+alinear=Aligner
+alinear_graficos=Aligner les graphiques
+alta=Hauteur
+alto=Hauteur
+altura=Hauteur
+Altura_fija_de_texto=Fixe la hauteur du texte
+ambito=Cadre
+Anadir=Ajouter
+Anadir_al_conjunto=Ajouter \u00e0 la s\u00e9lection
+Anadir_capa=Ajouter une couche g\u00e9ographique
+Anadir_Capa=Ajouter une couche g\u00e9ographique
+anadir_tag=
+Anadir_todos=Tout ajouter
+ancho=Largeur
+ancho_alto=Largeur X hauteur
+anchura=Largeur\:
+Aplicar=Appliquer
+Archivo=Fichier
+arriba=Monter
+ascending_order=Ordre ascendant
+ascending_order_tooltip=Classe le champs s\u00e9lectionn\u00e9 par ordre ascendant
+Atributo=Attribut
+automatico=Automatique
+Ayuda=Aide
+back=Pr\u00e9c\u00e9dent
+background_color=Colour d'arri\u00e8re plan
+baja=Basse
+Bajar_capa=Descendre la couche
+bandas=Bandes
+barra=Barre
+base=Base
+base_datos=Base de donn\u00e9es
+bmp=Fichiers BMP
+Bold=Gras
+borra_seleccion=Effacer une s\u00e9lection
+borrador=Brouillon
+borrar=Supprimer
+box=rectangle
+brillo=Luminosit\u00e9
+brillo_y_contraste=Luminosit\u00e9 et contrate
+browse=
+cajetin=
+Calcular_intervalos=Calculer les intervalles
+calidad=Qualit\u00e9
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Changer la couleur
+cambio_nombre=Changement de nom
+campo=Champ
+Campo=Champ
+campo_altura_texto=Taille du champ textuel\:
+Campo_de_clasificacion=Champ de classification
+Campo_de_etiquetado=Etiqueter \u00e0 partir d'un champ
+Campos=Champs
+cancel=Annuler
+Cancel=Annuler
+cancelar=Annuler
+Cancelar=Annuler
+Capa=Couche
+Capas=Couches g\u00e9ographiques
+Capas_del_localizador=Couches de localisation
+Centimetros=Centim\u00e8tres
+cerrar=Fermer
+Cerrar=Fermer
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=Cercle
+clave=Clef
+close=Fermer
+coincidir_tamanyo=
+colocar_a_margenes=Positionner par rapport aux marges.
+colocar_alrededor_seleccionados=Positionner autour des graphiques s\u00e9lectionn\u00e9s.
+colocar_alrededor_todos=Positionner autour de tous les graphiques.
+colocar_delante=Avant
+colocar_detras=Apr\u00e8s
+color=Couleur \:
+Color_final=Couleur d'arriv\u00e9e \:
+Color_inicio=Couleur de d\u00e9part
+color_texto=Couleur du texte\:
+comentarios=Commentaires
+comenzar_edicion=
+compleja=
+configurar=Configurer
+configurar_localizador=Configurer la vue d'ensemble
+Configurar_localizador=Configurer la vue d'ensemble...
+confirmar_borrar=Confirmer la suppression ?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Conserver l'\u00e9chelle de la vue
+consulta=Requ\u00eate
+Contengan=Contiennent
+contraste=Contraste
+coor_geograficas=Coordonn\u00e9es g\u00e9ographiques
+copiar=
+copy=Copier
+cortar=
+creation_date=Date de cr\u00e9ation
+Crucen_con=Croisent avec
+cuando_activo=Quand active
+cut=Couper
+Dado_un_campo_de_atributos=Champs d'attributs donn\u00e9
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=d\u00e9faire
+delete_field=Supprimer une colonne
+Derecha=Droite
+Derecho=Droit
+desagrupar=Dissocier
+desagrupar_capas=
+desagrupar_graficos=Dissocier les graphiques
+descending_order=Ordre descendant
+descending_order_tooltip=Classe le champs s\u00e9lectionn\u00e9 par ordre descendant
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Depuis le haut\:
+desde_izquierda=Depuis la gauche\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=d\u00e9faire
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=D\u00e9placer
+desviacion_tipica=Ecart type
+distance_units=Unit\u00e9s de distance
+distribuir=Distribuer \:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divisions \u00e0 partir de la gauche
+documento=
+documentos_existentes=Documents existants
+draw_text_only=
+driver=Driver
+Dxffiles=Fichiers DXF
+edicion=\u00e9dition
+editable=
+Editar_leyenda=Editer la l\u00e9gende
+editar_vertices=\u00e9diter les sommets
+el_numero_maximo_de_intervalos_para_este_campo_es=Le nombre maximum d'intervalles pour ce champ est
+Elegir_Color=Selectionner la couleur
+Elegir_Fuente=Choisir la fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Entit\u00e9s s\u00e9lectionn\u00e9es de la couches
+Eliminar=Supprimer
+eliminar_capa=Supprimer une couche
+eliminar_columna=
+eliminar_extremos=Eliminer les extr\u00eames
+eliminar_fila=
+en_el_mapa=Dans la carte\:
+En_metros=En m\u00e8tres
+En_pixels=En pixels
+en_unidades=
+Encuadre=Zooms
+Encuadre_Vista=D\u00e9placer
+enlace_vivo=Lien dynamique
+Enlazar_a_fichero_de_texto=Lier \u00e0 un fichier texte
+Enlazar_a_ficheros_de_imagen=Lier \u00e0 un fichier image
+equal_intervals=Intervalles \u00e9gaux
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Erreur en sauvegardant la l\u00e9gende
+Error_guardando_la_plantilla=
+escala=Echelle
+Escala=Echelle
+escala_desconocida=
+escala_maxima=Echelle maximum
+Escala_Maxima=Echelle maximum
+escala_minima=echelle minimum
+Escala_Minima=Echelle minimum
+escala_usuario=Echelle d\u00e9finie par l'utilisateur
+espaciado_horizontal=Pas horizontal de la grille
+espaciado_vertical=Pas vertical de la grille
+espacio=Espace\:
+estadisticas=Statistiques
+este_por_debajo_de_=Soit en dessous de
+este_por_encima_de=Soit au dessus de
+Esten_contenidos_en=Sont contenus dans
+Etiqueta=Etiquette
+Etiquetados=Etiquettages
+etiquetas=Etiquettes\:
+Etiquetas_estandar=Etiquettes standard
+Examinar=Parcourir
+export=Exporter
+exportar=Exporter
+exportar_pdf=Exporter en pdf
+exportar_ps=Exportar a ps
+extension=Extension
+Extent=Extension
+extents_no_coincidentes=Les dimmensions de l'image selectionn\u00e9e ne co\u00efncident pas avec celles de l'image d'origine.
+factor_zoom_incorrecto=
+fallo_capas=Erreurs d'acc\u00e8s aux couches. Les couches suivantes seront supprim\u00e9es du projet.
+family=
+fichero=
+Fichero=Fichier
+fichero_existe=Le fichier selectionn\u00e9 existe d\u00e9j\u00e0
+fichero_incorrecto=Fichier incorrect
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtre
+finish=Finaliser
+Font=Fonte
+formato=Format
+Formato_de_numero_erroneo=
+formato_incorrecto=Format incorrect
+fuente=Fonte
+General=G\u00e9n\u00e9ral
+georeferenciado=
+gestion_encuadre=Gestionnaire de positionnement
+grados=Degr\u00e9es\:
+Grados=Degr\u00e9es
+Graficos=Graphiques
+grosor_linea=Largeur de la ligne
+group=Grouper
+group_graphic_line=
+grupo=
+guardado=Enregister sous
+guardar=Enregistrer
+Guardar=Enregistrer
+guardar_cambios=Enregistrer les changements ?
+guardar_como=Enregistrer comme...
+guardar_como_plantilla=Garder comme police
+Guardar_el_zoom_actual=Enregistrer le zoom actif
+Guardar_leyenda=Enregistrer une l\u00e9gende
+guardar_proyecto=Enregistrer un projet
+guardar_tooltip=Enregistrer le projet
+Habilitar_etiquetado=Etiqueter
+Hiperenlace=Hyperlien
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Identifier les r\u00e9sultats
+Igual_que_la_impresora=Identique que l'impression
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Implimir=
+importar=Importer
+Imprimir=Imprimer
+Indexando=Indexation...
+Indexando_espacialmente=Indexation spatiale de la couche g\u00e9ographique
+indexar_campos=
+Inferior=Inf\u00e9rieur
+info=Information
+informacion=Propri\u00e9t\u00e9s de l'entit\u00e9 cliqu\u00e9e
+Informacion=
+Inicializando=Initialisation
+initial_warning=
+insert_row=Ins\u00e9rer une ligne
+Insertar=Ins\u00e9rer
+insertar_cajetin=insertar cajetin
+insertar_circulo=Ins\u00e9rer un cercle
+insertar_columna=
+insertar_escala=Ins\u00e9rer une \u00e9chelle
+insertar_fila=
+insertar_imagen=Ins\u00e9rer une image
+insertar_leyenda=Ins\u00e9rer une l\u00e9gende
+insertar_linea=Ins\u00e9rer une ligne
+insertar_norte=Ins\u00e9rer  nord
+insertar_poligono=Ins\u00e9rer un polygone
+insertar_polilinea=Ins\u00e9rer une polyligne
+insertar_punto=Ins\u00e9rer un point
+insertar_rectangulo=Ins\u00e9rer un rectangle
+insertar_texto=Ins\u00e9rer du texte
+insertar_vista=Ins\u00e9rer une vue
+Intersecten_con=S\u2019intersectent avec
+Intervalo=Intervalle
+Intervalos=Intervalles
+introduce_nombre=Nouveau type
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=Italique
+Izquierda=Gauche
+Izquierdo=Gauche
+join=Joindre
+jpg=Fichiers JPEG
+kilometros=Kilom\u00e8tres
+Kilometros=Kilom\u00e8tres
+leyenda=L\u00e9gende
+Leyenda=L\u00e9gende
+leyenda_campo_unido=Un champs d'une table en jointure est utilis\u00e9  dans la l\u00e9gende (et /ou l'\u00e9tiquetage). Changez la l\u00e9gende avant d'enlever la jointure svp.
+Leyenda_Por_Defecto=L\u00e9gende par d\u00e9faut
+linea=Ligne
+linea_grafica=Ligne graphique
+lineal_directo=Lin\u00e9aire direct
+link=Lien
+Link=Lien
+localizador=Localisateur
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Activer la grille
+manage_fields=
+mantener_intervalo=Maintenir l'intervalle
+map_units=Unit\u00e9s de la carte
+mapa=carte
+Mapa=Carte
+mapas=Mises en page
+marco=Cadre
+marco_vista=Espace de travail de la vue
+margenes=Marges\:
+mas_de_100_simbolos=Plus de 100  symboles n'apportent plus d'information dans un plan
+max_length_is=
+maximo=Maximum
+MDIFrame.quiere_salir=Voulez-vous vraiment quitter gvSIG?
+MDIFrame.salir=Quitter
+media=Moyenne
+medir_area=Mesurer une surface
+medir_distancias=Mesurer les distances
+metadatos=Metadatos
+metros=M\u00e8tres
+Metros=M\u00e8tres
+Milimetros=Millim\u00e8tres
+Millas=Miles
+minimo=Minimum
+modificar=
+modification_date=Date de modification
+mostrar_escala_numerica=
+Mostrar_siempre=Tout afficher
+mostrar_unidades=Montrer unit\u00e9s
+move_elements=
+Muestra_atributos=Afficher les attributs de la couche s\u00e9lectionn\u00e9e.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Afficher les \u00e9l\u00e9ments de la couche en utilisant un symbole pour chaque valeur unique
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Afficher les \u00e9l\u00e9ments de la couche en utilisant une gamme de couleurs en fonction de la valeur d'un champs d'attributs d\u00e9termin\u00e9
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Afficher tous les \u00e9l\u00e9ments d'une couche en utilisant le m\u00eame symbole
+natural_intervals=Intervalles naturels
+navegacion=Navigation
+navegacion_vista=Navigation vue
+necesita_una_capa_activa=N\u00e9cessite une couche g\u00e9ographique active
+necesita_una_capa_vectorial_activa=N\u00e9cessite une couche g\u00e9ographique vectorielle active
+new_field=Nouvelle colonne
+new_field_properties=
+next=Suivant
+ninguna_impresora_configurada=Aucune imprimante configur\u00e9e
+Nivel_de_transparencia=Niveau de transparence
+no=Non
+no_activos=Toutes inactives
+No_de_intervalos=Nombre d'intervalles
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Ne pas afficher la couche lorsque l'\u00e9chelle est
+No_mostrar_la_capa_cuando_la_escala=Ne pas afficher la couche lorsque l'\u00e9chelle
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=Impossible d'obtenir la table de la couche g\u00e9ographiqueS
+no_visibles=Toutes invisibles
+nombre=Nom
+Nombre=Nom
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nom pour le zoom
+nombre_sesion=Nom du projet
+none=
+none_selected=Aucune selection
+normal=Normal
+north=Nord
+Nueva_tabla=Nouvelle table
+nuevo=Nouveau
+Nuevo_conjunto=Nouvelle s\u00e9lection
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Nouveau projet
+nuevo_tooltip=Cr\u00e9er un nouveau projet
+num_bandas=Nombre de bandes
+num_columnas=Nombre de colonnes
+num_filas=Nombres de lignes
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=
+ok=Accepter
+opacidad=Opacit\u00e9
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientation\:
+origen_de_datos=Origine des donn\u00e9es
+Origen_de_datos=Origine des donn\u00e9es
+Origen_de_Datos=Origine des donn\u00e9es\:
+owner=Propri\u00e9taire
+paste=Copier
+paste_elements=
+path=Chemin
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet d'\u00e9tiquetter les \u00e9l\u00e9ments de la carte avec la valeur d'un champs d\u00e9termin\u00e9
+Personalizado=Personnalisation
+personalizar_margenes=
+Pies=Pieds
+pila_de_comandos=historique des commandes
+pixeles=pixels
+pixels=pixels
+Plain=Normal
+plantilla=
+please_insert_new_field_name=
+png=Fichiers PNG
+poligono=Polygone
+polilinea=polyligne
+poner_capas_a=Ajouter les couches ...
+por_debajo_de=en dessous de\:
+por_encima_de=au del\u00e0 de\:
+Por_favor_active_la_capa=Veuillez activer la couche
+posicion_linea=Position de la ligne
+precision=
+preparar_pagina=Pr\u00e9parer la page
+Preparar_pagina=Pr\u00e9parer la page
+presentacion=Pr\u00e9sentation
+previsualizacion=Pr\u00e9visualisation.
+Previsualizacion=Pr\u00e9visualisation
+Previsualizacion_de_simbolo=Pr\u00e9visualisation du symbole
+propiedad=
+propiedades=Propri\u00e9t\u00e9s
+propiedades_cajetin=Propri\u00e9t\u00e9s du cadre
+propiedades_capa=Propri\u00e9t\u00e9s de la couche
+propiedades_de_la_capa=Propri\u00e9t\u00e9s de la couche\n
+Propiedades_escala_grafica=Propri\u00e9t\u00e9s de la barre d'\u00e9chelle
+propiedades_grafico=Propri\u00e9t\u00e9s du graphique
+propiedades_mapa=Propri\u00e9t\u00e9s de la carte
+propiedades_marco_imagenes=Propri\u00e9t\u00e9s du bloc image
+propiedades_marco_leyenda=Propri\u00e9t\u00e9s du bloc de l\u00e9gende
+propiedades_marco_vista=Propri\u00e9t\u00e9s du bloc de vue
+propiedades_raster=Propri\u00e9t\u00e9s du raster
+propiedades_sesion=Propri\u00e9t\u00e9s du project
+propiedades_tabla=Propri\u00e9t\u00e9s de la table
+Propiedades_texto=Propri\u00e9t\u00e9s du texte
+propiedades_vista=Propri\u00e9t\u00e9s de la vue
+Proyecciones=
+ps=
+puerto=Port
+Pulgadas=Pouces
+punto=Point
+quantile_intervals=Intervalles quantiles
+quiere_continuar=S\u00fbr de vouloir continuer?
+Quitar=Quitter
+Quitar_capa=Supprimer une couche
+quitar_enlaces=Enlever liens
+Quitar_todos=Tout supprimer
+quitar_uniones=Enlever unions
+rango_de_escalas=Niveau d'\u00e9chelle
+Rango_de_escalas=Classes d'\u00e9chelles
+realce=R\u00e9heussement
+realmente_desea_guardar=Voulez-vous sauvegarder ?
+recargar=
+recorte_colas=Couper les r\u00e9sidus
+recorte_vista=Couper la vue
+rectangulo=Rectangle
+recuento=Recomptage
+Recuperar_leyenda=Charger une l\u00e9gende
+Recuperar_y_eliminar_otros_zoom=R\u00e9cuperer et \u00e9liminer les autres zooms
+refrescar=Rafra\u00eechir
+registros_seleccionados_total=Total registres s\u00e9lectionn\u00e9s
+rehacer=refaire
+rellenar_marco_vista=Remplir le cadre de la vue
+relleno=Remplir \:
+remove_elements=
+remove_fields=
+remove_row=Supprimer une ligne
+remove_rows=
+rename_field=
+renombrar=Renomer
+reproyectar_aviso=Le syst\u00e8me de projection de la couche est diff\u00e9rent de la vue.\nAVISO\: \=Des probl\u00e8mes peuvent \u00eatre rencontr\u00e9s avec certaines projections. Lisez la documentation
+reproyectar_pregunta=Souhaitez-vous reprojeter ?
+resolucion_resultado=R\u00e9solution du r\u00e9sultat\:
+resto_valores=Reste des valeurs
+restore_palette=
+rotation_field=
+salir=Quitter
+salir_tooltip=Quitter
+salvar_raster=Enregistrer le raster g\u00e9or\u00e9f\u00e9renc\u00e9.
+Sample=Exemple
+Se_superponen_a=Se superposent \u00e0
+Sean_disjuntos_a=sont disjoints de
+Sean_iguales_a=sont identiques \u00e0
+seleccion=S\u00e9lection
+seleccion_fuente=S\u00e9lection d'une fonte
+Seleccion_por_capa=S\u00e9lection par couche
+selecciona_sistema_de_referencia=
+Seleccionar=S\u00e9lectionner
+seleccionar_capas=S\u00e9lectionner des couches
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=S\u00e9lectionner dans la couche active les entit\u00e9s qui\:
+Seleccionar_del_conjunto=Mettre ce texte sur plusieurs lignes
+Seleccionar_fichero=S\u00e9lectionner un fichier
+seleccionar_por_poligono=
+seleccionar_por_punto=S\u00e9lection
+seleccionar_por_rectangulo=S\u00e9lection \u00e0 partir d'un rectangle
+seleccionar_todos=Tout s\u00e9lectionner
+seleccione_campo_enlace=S\u00e9lectionner le champs \u00e0 relier
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=S\u00e9lection d'une date...
+seleccione_tabla_a_enlazar=S\u00e9lectionner la table a relier
+seleccione_tabla_origen=S\u00e9lectionner la  origine de la jointure
+selection_color=Couleur de s\u00e9lection
+selection_up=
+separator=
+Servidor=Serveur
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Toujours
+simbolo=
+Simbolo=Symbole
+Simbolo_unico=Symbole unique
+Simbologia=Symbologie
+simplificar_leyenda=
+simplify=
+sin_titulo=Sans titre
+sincronizar_color_borde_relleno=Synchroniser la couleur de contour avec le fond \:
+Size=Taille
+sobre_la_barra=Sur la barre
+Solo_para_capas_vectoriales=Seulement pour les couches vectorielles
+start_edition=Commencer l'\u00e9dition
+statistics=Statistiques
+stop_edition=Terminer l'\u00e9dition
+Style=Style
+Subir_capa=Monter une couche
+suma=Somme
+Superior=Sup\u00e9rieure
+symbol_selector=
+Tabla=Table
+Tabla_de_Atributos=Table d'attributs
+tablas=Tables
+Tablas=Tables
+tag=tag
+tamano=Taille\:
+tamano_metros=Taille en m\u00e8tres
+tamano_pagina=Taille de la page\:
+tamano_posicion=Taille et position
+tamanyo_borde=Taille du bord
+tamanyo_fuente=Taille de la source
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Texte
+this_table_is_not_self_editable=
+tipo_dato=Type de donn\u00e9e
+tipo_de_intervalo=Type d'intervalle
+tipo_de_leyenda=Type de l\u00e9gende
+tipo_fichero_proyecto=Fichier de projet gvSIG (*.GVP)
+tipo_linea=Type de Ligne\:
+tipo_relleno=Remplir\:
+tipo_simbolo=Type de symbole\:
+tipos_de_documentos=Type de documents
+titulo=Gestionnaire de projet
+titulo_fframetext=Titre du champs texte
+to_annotation=Transformer la couche en etiquettes
+to_palette=Changer la palette
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=touchent
+transparencia=Transparence
+Transparencia=Transparence
+transparencia_pixel=Transparence des pixels
+ungroup=Dissocier
+unidades=Unit\u00e9s\:
+Unidades=Unit\u00e9s\:
+untitled=Sans titre
+url=
+Usar_indice_espacial=Utiliser indice spatial
+usar_marco=Utiliser le cadre
+usar_titulo=Utiliser titre
+usuario=Utilisateur
+utilizar_margenes_impresora=Utiliser les marges de l'imprimante.
+vacia=Vide
+Valor=Valeur
+Valores=Valeurs
+Valores_unicos=Valeurs uniques
+varianza=Variance
+Ventana=Fen\u00eatre
+ventana_proyecto=Fen\u00eatre de projet
+Ver=Afficher
+ver_error_capa=
+ver_tabla_atributos=Voir la table des attributs
+ver_tags=
+ver_tooltip=Afficher la fen\u00eatre de projet
+vertical=Vertical
+vertical_space=
+visible=Visible
+visibles=Toutes visibles
+Vista=Vue
+vistas=Vues
+visualizacion=Vues
+Visualizacion=Visualiser
+visualizar_cuadricula=Afficher la grille
+warning=
+xmax=X minimum
+xmin=X minimum
+Yardas=Yards
+ymax=Y minimum
+ymin=Y minimum
+Zoom_a_la_capa=Zoom \u00e0 la couche
+Zoom_Acercar=Zoom rapprocher
+Zoom_Alejar=Zoom \u00e9loigner
+Zoom_Completo=Vue g\u00e9n\u00e9rale
+Zoom_Completo_Vista=Zoom complet dans le cadre
+zoom_in_factor=
+Zoom_Mas=Zoom avant.
+Zoom_Mas_Vista=Zoom arri\u00e8re dans le cadre
+Zoom_Menos=Zoom avant
+Zoom_Menos_Vista=Zoom avant dans le cadre
+zoom_out_factor=
+Zoom_pixel=Zoom a la r\u00e9solution du raster
+Zoom_Previo=Zoom pr\u00e9c\u00e9dent
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00e0 la s\u00e9lection

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_fr.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_de.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_de.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_de.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [de]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(Gr\u00f6\u00dfter Ma\u00dfstab)
+(escala_minima)=(Kleinster Ma\u00dfstab)
+1\:=
+_(Simbolo_unico)=(Einmaliges symbol)
+__proyeccion_actual=Aktuelle projektion\:
+__redimensionar_texto_escala=Textgr\u00f6\u00dfe an den ansichtsma\u00dfstab anpassen
+__seleccion_de_fuente=Auswahl der Schriftart
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Nach unten
+abrir=\u00d6ffnen
+abrir_plantilla=Vorlage \u00f6ffnen
+abrir_proyecto=Projekt \u00f6ffnen
+abrir_tooltip=Vorhandenes Projekt \u00f6ffnen
+Abrir_una_capa=Layer \u00f6ffnen
+Accion_Predefinida=Vordefinierte aktion
+aceptar=OK
+Aceptar=OK
+acerca_de=\u00dcber...
+activar=Activate
+activar_regla=Lineal aktivieren
+activos=Aktiv
+add_delete_edit_fields=
+add_layer=Layer hinzuf\u00fcgen
+add_rows=
+adjust_transparency=Transparenz anpassen
+agrupacion=
+agrupar=Gruppieren
+agrupar_capas=Layer gruppieren
+agrupar_graficos=Grafiken gruppieren
+agrupar_linea=Grafiklinie mit grafiken gruppieren
+Ajustar_transparencia=Transparenz anpassen
+ajustes_linea_grafica=Anpassung grafiklinie
+Al_leer_la_leyenda=Beim lesen der legende
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Ausrichtung\:
+alinear=Ausrichtung
+alinear_graficos=Grafiken ausrichten
+alta=Hoch
+alto=Hoch
+altura=H\u00f6he\:
+Altura_fija_de_texto=Fixierte texth\u00f6he
+ambito=Bereich
+Anadir=Hinzuf\u00fcgen
+Anadir_al_conjunto=Zum Datensatz hinzuf\u00fcgen
+Anadir_capa=Layer hinzuf\u00fcgen
+Anadir_Capa=Layer hinzuf\u00fcgen
+anadir_tag=
+Anadir_todos=Alle hinzuf\u00fcgen
+ancho=Breite
+ancho_alto=Breite x h\u00f6he
+anchura=Breite\:
+Aplicar=Anwenden
+Archivo=Datei
+arriba=Nach oben
+ascending_order=Aufsteigende ordnung
+ascending_order_tooltip=Sortierung nach dem ausgew\u00e4hlten Feld in aufsteigender Ordnung.
+Atributo=Attribut
+automatico=Automatisch
+Ayuda=Hilfe
+back=Zur\u00fcck
+background_color=Hintergrundfarbe
+baja=Niedrig
+Bajar_capa=Layer nach unten
+bandas=Farbstreifen
+barra=Balken\:
+base=base
+base_datos=Datenbank
+bmp=BMP-Dateien
+Bold=Fett
+borra_seleccion=Auswahl l\u00f6schen
+borrador=Entwurf
+borrar=L\u00f6schen
+box=
+brillo=
+brillo_y_contraste=
+browse=
+cajetin=
+Calcular_intervalos=Intervalle berechnen
+calidad=Qualit\u00e4t
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Farbe \u00e4ndern
+cambio_nombre=Namen \u00e4ndern
+campo=Feld
+Campo=Feld
+campo_altura_texto=H\u00f6he textfeld\:
+Campo_de_clasificacion=Klassifikationsfeld
+Campo_de_etiquetado=Etikettierfeld
+Campos=Felder
+cancel=Abbrechen
+Cancel=Abbrechen
+cancelar=Abbrechen
+Cancelar=Abbrechen
+Capa=Layer
+Capas=
+Capas_del_localizador=Navigatorlayer
+Centimetros=Zentimeter
+cerrar=Schlie\u00dfen
+Cerrar=Schlie\u00dfen
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=Kreis
+clave=Passwort
+close=schlie\u00dfen
+coincidir_tamanyo=
+colocar_a_margenes=Zu den r\u00e4ndern anordnen
+colocar_alrededor_seleccionados=Um ausgew\u00e4hlte graphiken anordnen.
+colocar_alrededor_todos=Um alle grafiken anordnen.
+colocar_delante=Nach vorn
+colocar_detras=Nach hinten
+color=Farbe\:
+Color_final=Endfarbe\:
+Color_inicio=Anfangsfarbe
+color_texto=Textfarbe\:
+comentarios=Kommentare
+comenzar_edicion=
+compleja=
+configurar=Konfigurieren
+configurar_localizador=Navigator konfigurieren
+Configurar_localizador=Navigator konfigurieren ...
+confirmar_borrar=Sind Sie sicher, dass Sie dieses element l\u00f6schen wollen?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Darstellungsma\u00dfstab beibehalten
+consulta=Abfrage
+Contengan=Beinhalten
+contraste=Contrast
+coor_geograficas=Geografische koordinaten
+copiar=
+copy=
+cortar=
+creation_date=Erstellungsdatum
+Crucen_con=Sich kreuzen mit
+cuando_activo=Wenn aktiv
+cut=
+Dado_un_campo_de_atributos=Bei vorgegebenen attributfeld\:
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=
+delete_field=
+Derecha=Rechts
+Derecho=Rechts
+desagrupar=Gruppe aufl\u00f6sen
+desagrupar_capas=
+desagrupar_graficos=Grafikgruppe aufl\u00f6sen
+descending_order=Absteigende ordnung
+descending_order_tooltip=Sortierung nach dem ausgew\u00e4hlten Feld in absteigender Ordnung.
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Von oben\:
+desde_izquierda=Von links\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Verschieben
+desviacion_tipica=Typische Abweichung
+distance_units=Ma\u00dfeinheiten
+distribuir=Verteilen\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Teilungen auf der linken Seite
+documento=
+documentos_existentes=Vorhandene dokumente
+draw_text_only=
+driver=Treiber
+Dxffiles=DXF-Dateien
+edicion=
+editable=Editierbar
+Editar_leyenda=Legende editieren
+editar_vertices=
+el_numero_maximo_de_intervalos_para_este_campo_es=Die maximal Intervallenummer f\u00fcr dieses Feld ist
+Elegir_Color=Farbe ausw\u00e4hlen
+Elegir_Fuente=Schriftart ausw\u00e4hlen
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Ausgew\u00e4hlte elemente des layers
+Eliminar=L\u00f6schen
+eliminar_capa=Layer l\u00f6schen
+eliminar_columna=
+eliminar_extremos=Extreme l\u00f6schen
+eliminar_fila=
+en_el_mapa=Auf der karte\:
+En_metros=In Metern
+En_pixels=In pixeln
+en_unidades=
+Encuadre=Bildausschnitt
+Encuadre_Vista=Ansicht im bildausschnitt verschieben
+enlace_vivo=Aktiver link zum original
+Enlazar_a_fichero_de_texto=Link zu textdateien
+Enlazar_a_ficheros_de_imagen=Link zu bilddateien
+equal_intervals=Gleiche intervalle
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Fehler beim Speichern der Legende
+Error_guardando_la_plantilla=
+escala=Ma\u00dfstab
+Escala=Ma\u00dfstab
+escala_desconocida=
+escala_maxima=Maximalma\u00dfstab
+Escala_Maxima=Gr\u00f6\u00dfter ma\u00dfstab
+escala_minima=Minimalma\u00dfstab
+Escala_Minima=Kleinster ma\u00dfstab
+escala_usuario=Benutzerdefinierter Ma\u00dfstab
+espaciado_horizontal=Horizontaler rasterabstand
+espaciado_vertical=Vertikaler Rasterabstand
+espacio=Leerzeichen\:
+estadisticas=Statistiken
+este_por_debajo_de_=Kleiner ist als
+este_por_encima_de=Gr\u00f6\u00dfer ist als
+Esten_contenidos_en=Enthalten sind in
+Etiqueta=Etikett
+Etiquetados=Etikettierung
+etiquetas=Etiketten\:
+Etiquetas_estandar=Standard-Etiketten
+Examinar=Browse
+export=Exportieren
+exportar=Exportieren
+exportar_pdf=Als pdf exportieren
+exportar_ps=Als ps exportieren
+extension=Verl\u00e4ngerung
+Extent=Bildbereich
+extents_no_coincidentes=Die ausgew\u00e4hlte Bildgr\u00f6\u00dfe stimmt nicht mit dem Originalbild \u00fcberein.
+factor_zoom_incorrecto=
+fallo_capas=Fehler beim Zugriff auf die Layer. Die folgenden Layer werden aus dem Projekt entfernt
+family=
+fichero=
+Fichero=Datei
+fichero_existe=Ausgew\u00e4hlte datei existiert schon als layergruppe.
+fichero_incorrecto=Unrichtige datei
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filter
+finish=Beenden
+Font=Schriftart
+formato=Format
+Formato_de_numero_erroneo=
+formato_incorrecto=Unrichtig Format
+fuente=Schriftart
+General=Allgemein
+georeferenciado=
+gestion_encuadre=Verwaltung der Bildausschnitte
+grados=Grad\:
+Grados=Grad
+Graficos=Grafiken
+grosor_linea=Strichst\u00e4rke
+group=Gruppieren
+group_graphic_line=
+grupo=
+guardado=Gespeichert in
+guardar=
+Guardar=Speichern
+guardar_cambios=\u00c4nderungen speichern?
+guardar_como=Speichern unter ...
+guardar_como_plantilla=als Vorlage speichern
+Guardar_el_zoom_actual=Aktuellen zoom speichern
+Guardar_leyenda=Legende speichern
+guardar_proyecto=Projekt speichern
+guardar_tooltip=Speichert die \u00c4nderungen des Projekts
+Habilitar_etiquetado=Etikettierung aktivieren
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Ergebnisse identifizieren
+Igual_que_la_impresora=Wie drucker
+igual_todos_lados=Gleiche Verschiebung in alle richtungen
+imagen=Bild
+Implimir=
+importar=Importieren
+Imprimir=Drucken
+Indexando=Indexing...
+Indexando_espacialmente=
+indexar_campos=
+Inferior=Unten
+info=Information
+informacion=Information
+Informacion=Information
+Inicializando=Initialisiert
+initial_warning=
+insert_row=
+Insertar=Einf\u00fcgen
+insertar_cajetin=
+insertar_circulo=Kreis einf\u00fcgen
+insertar_columna=
+insertar_escala=Ma\u00dfstab einf\u00fcgen
+insertar_fila=
+insertar_imagen=Bild einf\u00fcgen
+insertar_leyenda=Legende einf\u00fcgen
+insertar_linea=Linie einf\u00fcgen
+insertar_norte=Nordung einf\u00fcgen
+insertar_poligono=Polygon einf\u00fcgen
+insertar_polilinea=
+insertar_punto=Punkt einf\u00fcgen
+insertar_rectangulo=Rechteck einf\u00fcgen
+insertar_texto=Text einf\u00fcgen
+insertar_vista=Ansicht einf\u00fcgen
+Intersecten_con=Sich \u00fcberschneiden mit
+Intervalo=Intervall
+Intervalos=Intervalle
+introduce_nombre=Geben Sie den neuen Namen ein.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=Kursiv
+Izquierda=Links
+Izquierdo=Links
+join=Verbindung
+jpg=JPEG-Datei
+kilometros=Kilometer
+Kilometros=Kilometer
+leyenda=Legende
+Leyenda=Legende
+leyenda_campo_unido=Man verwendt ein Field der Verbindung in der Legende (und/oder Etikettierung). Tauschen Sie die Legende vorher aus, die Verbindung aufzul\u00f6sen.
+Leyenda_Por_Defecto=Legende nach vorgabe
+linea=Linie
+linea_grafica=Grafiklinie
+lineal_directo=Direktlineal
+link=Link
+Link=Link
+localizador=Locator
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Raster aktiviert
+manage_fields=
+mantener_intervalo=Intervall beibehalten
+map_units=Karteneinheiten
+mapa=
+Mapa=Karte
+mapas=Karten
+marco=Rahmen
+marco_vista=Ansichtsrahmen
+margenes=R\u00e4nder\:
+mas_de_100_simbolos=Mehr als 100 Symbols liefern keine Information zu der Karte
+max_length_is=
+maximo=Maximal
+MDIFrame.quiere_salir=Sind Sie sicher, dass Sie das Programm beenden wollen?
+MDIFrame.salir=Beenden
+media=Mittel
+medir_area=Fl\u00e4che messen
+medir_distancias=Abst\u00e4nde messen
+metadatos=
+metros=Meter
+Metros=Meter
+Milimetros=Milimeter
+Millas=Meilen
+minimo=Minimal
+modificar=
+modification_date=Letzte \u00c4nderung
+mostrar_escala_numerica=
+Mostrar_siempre=Immer zeigen
+mostrar_unidades=Einheiten anzeigen
+move_elements=
+Muestra_atributos=Zeigt die attribute der ausgew\u00e4hlten Layer.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zeigt Elemente des Layers mit je einem symbol pro Wert.
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zeigt die Elemente des Layers mit der gleichen Farbpalette, abh\u00e4ngig vom Wert eines bestimmten Attributfelds.
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zeigt alle elemente des layers mit dem gleichen symbol.
+natural_intervals=Nat\u00fcrliche Intervalle
+navegacion=\u00dcbersicht
+navegacion_vista=\u00dcbersicht der Ansicht
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_field=
+new_field_properties=
+next=Weiter
+ninguna_impresora_configurada=Kein Drucker konfiguriert
+Nivel_de_transparencia=Transparenzgrad
+no=No
+no_activos=inaktiv
+No_de_intervalos=Anzahl intervalle
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Den Layer nicht zeigen, wenn der Ma\u00dfstab ...
+No_mostrar_la_capa_cuando_la_escala=Den layer nicht zeigen, wenn der ma\u00dfstab ...
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+no_visibles=Unsichtbar
+nombre=Name
+Nombre=Name
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Name des zooms
+nombre_sesion=Name der session
+none=
+none_selected=keiner ausgew\u00e4hlt
+normal=Normal
+north=Nord
+Nueva_tabla=Neue tabelle
+nuevo=Neu
+Nuevo_conjunto=Neuer datensatz
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Neues projekt
+nuevo_tooltip=Erstellt ein neues projekt
+num_bandas=Anzahl farbstreifen
+num_columnas=
+num_filas=
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=Unrichtig nummer
+ok=OK
+opacidad=Lichtundurchl\u00e4ssigkeit
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Ausrichtung
+origen_de_datos=Herkunft der daten
+Origen_de_datos=Herkunft der daten
+Origen_de_Datos=Herkunft der daten\:
+owner=Besitzer
+paste=Paste
+paste_elements=
+path=Pfad
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Erm\u00f6glicht das etiketieren von elementen der karte, mit dem wert eines bestimmten felds.
+Personalizado=Benutzerdefiniert
+personalizar_margenes=
+Pies=Feet
+pila_de_comandos=
+pixeles=pixel
+pixels=pixels
+Plain=Einfach
+plantilla=
+please_insert_new_field_name=
+png=PNG-Datei
+poligono=
+polilinea=
+poner_capas_a=
+por_debajo_de=unter\:
+por_encima_de=\u00fcber\:
+Por_favor_active_la_capa=
+posicion_linea=Position der Linie
+precision=
+preparar_pagina=Seite einrichten
+Preparar_pagina=Seite einrichten
+presentacion=Pr\u00e4sentation
+previsualizacion=
+Previsualizacion=Voransicht
+Previsualizacion_de_simbolo=Symbolvoransicht
+propiedad=
+propiedades=Eigenschaften
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=Eigenschaften des Layers
+Propiedades_escala_grafica=Eigenschaften des Ma\u00dfstabsbalkens
+propiedades_grafico=Eigenschaften der grafik
+propiedades_mapa=Eigenschaften der Karte
+propiedades_marco_imagenes=Eigenschaften des bildrahmens
+propiedades_marco_leyenda=Eigenschaften des Legenderahmens
+propiedades_marco_vista=Eigenschaften des ansichtsrahmens
+propiedades_raster=Eigenschaften der rasterung
+propiedades_sesion=Eigenschaften der session
+propiedades_tabla=Eigenschaften der tabelle
+Propiedades_texto=Eigenschaften des textes
+propiedades_vista=Eigenschaften der ansicht
+Proyecciones=
+ps=
+puerto=
+Pulgadas=Inches
+punto=Punkt
+quantile_intervals=Quantile Intervalle
+quiere_continuar=W\u00f6llen Sie wietermachen?
+Quitar=Entfernen
+Quitar_capa=Layer entfernen
+quitar_enlaces=Links aufl\u00f6sen
+Quitar_todos=Alle entfernen
+quitar_uniones=Verbindungen aufl\u00f6sen
+rango_de_escalas=Ma\u00dfstabsbereich
+Rango_de_escalas=Ma\u00dfstabsbereich
+realce=Heraushebung
+realmente_desea_guardar=
+recargar=
+recorte_colas=Zuschnitt der Randbereiche
+recorte_vista=Ausschneiden nach Augenma\u00df
+rectangulo=Rechteck
+recuento=Nachz\u00e4hlung
+Recuperar_leyenda=Legende laden
+Recuperar_y_eliminar_otros_zoom=Andere zooms laden oder l\u00f6schen
+refrescar=Aktualisieren
+registros_seleccionados_total=Alle ausgew\u00e4hlten register
+rehacer=
+rellenar_marco_vista=Ansichtsrahmen f\u00fcllen
+relleno=F\u00fcllung\:
+remove_elements=
+remove_fields=
+remove_row=
+remove_rows=
+rename_field=
+renombrar=Umbenennen
+reproyectar_aviso=Die Layerprojektion deckt sich nicht mit der Ansichtsprojektion. \nACHTUNG\: Bei einigen Transformationen k\u00f6nnte sie ungenau sein.\nLesen Sie bitte die Dokumentation.
+reproyectar_pregunta=W\u00fcnschen Sie eine neue Projektion?
+resolucion_resultado=Ausgabeauf\u00f6sung\:
+resto_valores=Andere werte
+restore_palette=
+rotation_field=
+salir=Schlie\u00dfen
+salir_tooltip=Schlie\u00dfen
+salvar_raster=Als Rasterung sichern
+Sample=Beispiel
+Se_superponen_a=Sich \u00fcberlagern \u00fcber
+Sean_disjuntos_a=getrennt sind von
+Sean_iguales_a=gleich sind wie
+seleccion=Auswahl
+seleccion_fuente=Schriftart w\u00e4hlen
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+Seleccionar=ausw\u00e4hlen
+seleccionar_capas=Layer ausw\u00e4hlen
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=In den aktiven layern nach elementen suchen, die\:
+Seleccionar_del_conjunto=Aus dem datensatz ausw\u00e4hlen
+Seleccionar_fichero=Datei ausw\u00e4hlen
+seleccionar_por_poligono=
+seleccionar_por_punto=\u00dcber Punkt ausw\u00e4hlen
+seleccionar_por_rectangulo=Auswahlrahmen
+seleccionar_todos=Alle ausw\u00e4hlen
+seleccione_campo_enlace=W\u00e4hlen Sie das Feld aus, \u00fcber das sie verlinken wollen.
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=W\u00e4hlen sie ein Datum aus ...
+seleccione_tabla_a_enlazar=W\u00e4hlen Sie die Tabelle aus, die Sie verlinken wollen.
+seleccione_tabla_origen=W\u00e4hlen Sie die Originaltabelle f\u00fcr die Verbindung aus.
+selection_color=Farbe der Auswahl
+selection_up=
+separator=
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Immer
+simbolo=
+Simbolo=Symbol
+Simbolo_unico=Einmaliges symbol
+Simbologia=Symbole
+simplificar_leyenda=
+simplify=
+sin_titulo=Ohne Titel
+sincronizar_color_borde_relleno=Die randfarbe mit der f\u00fcllung synchronisieren\:
+Size=Gr\u00f6\u00dfe
+sobre_la_barra=Auf dem Balken
+Solo_para_capas_vectoriales=Nur f\u00fcr Vektorlayer
+start_edition=
+statistics=Statistiken
+stop_edition=
+Style=Stil
+Subir_capa=Layer nach oben
+suma=Summe
+Superior=Oben
+symbol_selector=
+Tabla=Tabelle
+Tabla_de_Atributos=Attributtabelle
+tablas=Tabellen
+Tablas=Tabellen
+tag=tag
+tamano=Gr\u00f6\u00dfe\:
+tamano_metros=Gr\u00f6\u00dfe in Metern
+tamano_pagina=Seitenformat\:
+tamano_posicion=Gr\u00f6\u00dfe und Position
+tamanyo_borde=Randgr\u00f6\u00dfe
+tamanyo_fuente=Schriftgr\u00f6\u00dfe
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=
+this_table_is_not_self_editable=
+tipo_dato=Datentyp
+tipo_de_intervalo=Intervallesart
+tipo_de_leyenda=Legendentyp
+tipo_fichero_proyecto=Projektdatei gvSIG (*.GVP)
+tipo_linea=Strichtyp\:
+tipo_relleno=F\u00fcllstil\:
+tipo_simbolo=Symboltyp\:
+tipos_de_documentos=Dokumenttyp
+titulo=Projektverwalter
+titulo_fframetext=Titel des Textfelds
+to_annotation=
+to_palette=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=fassen an
+transparencia=Transparenz
+Transparencia=Transparenz
+transparencia_pixel=
+ungroup=Gruppe aufl\u00f6sen
+unidades=Einheiten\:
+Unidades=Einheiten\:
+untitled=Ohne Titel
+url=
+Usar_indice_espacial=R\u00e4umlichen Index benutzen
+usar_marco=Rahmen verwenden
+usar_titulo=Titel verwenden
+usuario=Benutzer
+utilizar_margenes_impresora=Randbegrenzung des Druckers verwenden
+vacia=
+Valor=Wert
+Valores=Werte
+Valores_unicos=Einmalige werte
+varianza=Varianz
+Ventana=Fenster
+ventana_proyecto=Projektfenster
+Ver=Sehen
+ver_error_capa=
+ver_tabla_atributos=Attributtabelle sehen
+ver_tags=
+ver_tooltip=Zeigt das Projektfenster
+vertical=Vertikal
+vertical_space=
+visible=Sichtbar
+visibles=Sichtbar
+Vista=Ansicht
+vistas=Ansichten
+visualizacion=Darstellung
+Visualizacion=Visualisierung
+visualizar_cuadricula=Raster darstellen
+warning=
+xmax=Maximalwert x
+xmin=Minimalwert x
+Yardas=Yards
+ymax=Maximalwert y
+ymin=Minimalwert y
+Zoom_a_la_capa=
+Zoom_Acercar=Heranzoomen
+Zoom_Alejar=Wegzoomen
+Zoom_Completo=Zoom auf alles
+Zoom_Completo_Vista=Zoom auf alles im bildausschnitt
+zoom_in_factor=
+Zoom_Mas=Gr\u00f6\u00dfer zoomen
+Zoom_Mas_Vista=Im bildausschnitt gr\u00f6\u00dfer zoomen
+Zoom_Menos=Kleiner zoomen
+Zoom_Menos_Vista=Im bildausschnitt kleiner zoomen
+zoom_out_factor=
+Zoom_pixel=Zoom zur Rasteraufl\u00f6sung
+Zoom_Previo=Letzter zoom
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zur auswahl zoomen

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_de.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/plugin.dtd
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/plugin.dtd	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/plugin.dtd	(revision 10281)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO_8859-1"?>
+<!ELEMENT class EMPTY >
+<!ATTLIST class name NMTOKEN #REQUIRED >
+
+<!ELEMENT extension ( class | menu | toolBar | toolBoxItem | popupMenu)* >
+<!ATTLIST extension enabled NMTOKEN #IMPLIED >
+<!ATTLIST extension position NMTOKEN #IMPLIED >
+
+<!ELEMENT fileExtension ( class ) >
+<!ATTLIST fileExtension description CDATA #REQUIRED >
+<!ATTLIST fileExtension enabled NMTOKEN #IMPLIED >
+<!ATTLIST fileExtension endsWith CDATA #REQUIRED >
+<!ATTLIST fileExtension dialog CDATA #REQUIRED >
+
+<!ELEMENT import EMPTY >
+<!ATTLIST import plugin NMTOKEN #REQUIRED >
+
+<!ELEMENT libraries ( library+ ) >
+
+<!ELEMENT library EMPTY >
+<!ATTLIST library file NMTOKEN #REQUIRED >
+
+<!ELEMENT menu EMPTY >
+<!ATTLIST menu actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST menu enableText CDATA #IMPLIED >
+<!ATTLIST menu key NMTOKEN #IMPLIED >
+<!ATTLIST menu mnemonic NMTOKEN #IMPLIED >
+<!ATTLIST menu icon CDATA #IMPLIED >
+<!ATTLIST menu text CDATA #REQUIRED >
+<!ATTLIST menu tooltip CDATA #IMPLIED >
+
+<!ELEMENT plugin ( import*, libraries, resourceBundle, labelSet*, extension*, fileExtension*, icon*) >
+
+<!ELEMENT icon EMPTY >
+<!ATTLIST icon src CDATA #REQUIRED >
+<!ATTLIST icon text CDATA #REQUIRED >
+
+<!ELEMENT resourceBundle EMPTY >
+<!ATTLIST resourceBundle name NMTOKEN #REQUIRED >
+
+<!ELEMENT tool EMPTY >
+<!ATTLIST tool actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST tool enableText CDATA #IMPLIED >
+<!ATTLIST tool icon CDATA #IMPLIED >
+<!ATTLIST tool text NMTOKEN #IMPLIED >
+<!ATTLIST tool tooltip CDATA #IMPLIED >
+
+<!ELEMENT toolBar ( tool+ ) >
+<!ATTLIST toolBar name NMTOKEN #IMPLIED >
+
+<!ELEMENT entry EMPTY >
+<!ATTLIST entry text CDATA #IMPLIED >
+<!ATTLIST entry enableText CDATA #IMPLIED >
+<!ATTLIST entry tooltip CDATA #IMPLIED >
+<!ATTLIST entry actionCommand NMTOKEN #IMPLIED >
+
+<!ELEMENT popupMenu ( entry+ ) >
+<!ATTLIST popupMenu name NMTOKEN #IMPLIED >
+
+<!ELEMENT labelSet ( label+ ) >
+<!ATTLIST labelSet class NMTOKEN #REQUIRED >
+
+<!ELEMENT label EMPTY >
+<!ATTLIST label text NMTOKEN #REQUIRED >
+<!ATTLIST label size NMTOKEN #IMPLIED>
+
+<!ELEMENT toolBoxItem EMPTY >
+<!ATTLIST toolBoxItem default NMTOKEN #IMPLIED >
+<!ATTLIST toolBoxItem actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST toolBoxItem icon CDATA #IMPLIED >
+<!ATTLIST toolBoxItem text CDATA #IMPLIED >
+<!ATTLIST toolBoxItem tooltip CDATA #IMPLIED >
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/plugin.dtd
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_eu.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_eu.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_eu.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(eskala handiena)
+(escala_minima)=(eskala txikiena)
+1\:=
+_(Simbolo_unico)=(Ikur bakarra)
+__proyeccion_actual=Egungo proiekzioa\:
+__redimensionar_texto_escala=Testua bistaren eskalara egokitu.
+__seleccion_de_fuente=Letra-tipoa aukeratu
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Behera
+abrir=Ireki
+abrir_plantilla=Ireki txantiloia
+abrir_proyecto=Proiektua ireki
+abrir_tooltip=Aurreko proiektu bat irekitzen du
+Abrir_una_capa=
+Accion_Predefinida=Aurretik zehaztutako ekintza
+aceptar=Ados
+Aceptar=Ados
+acerca_de=Honi buruz\:
+activar=Activate
+activar_regla=Erregela aktibatu
+activos=Aktiboak
+add_delete_edit_fields=
+add_layer=Gehitu geruza
+add_rows=
+adjust_transparency=Doitu gardentasuna
+agrupacion=
+agrupar=Multzokatu
+agrupar_capas=Multzokatu geruzak
+agrupar_graficos=Multzokatu grafikoak
+agrupar_linea=Lerro grafikoa grafikoekin multzokatu.
+Ajustar_transparencia=Doitu gardentasuna
+ajustes_linea_grafica=Lerro grafikoaren doitzeak
+Al_leer_la_leyenda=Legenda irakurtzean
+alias=Ezizena
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Lerrokadura
+alinear=Lerrokatu
+alinear_graficos=Grafikoak lerrokatu
+alta=Goi
+alto=Goi
+altura=Altura\:
+Altura_fija_de_texto=Testuaren altura finkoa
+ambito=Esparrua
+Anadir=Gehitu
+Anadir_al_conjunto=Gehitu multzoari
+Anadir_capa=Gehitu geruza
+Anadir_Capa=Gehitu geruza
+anadir_tag=
+Anadir_todos=Gehitu guztiak
+ancho=Zabalera
+ancho_alto=Zabalera altuera
+anchura=Zabalera\:
+Aplicar=Aplikatu
+Archivo=Fitxategia
+arriba=Gora
+ascending_order=Goranzko hurrenkera
+ascending_order_tooltip=Ordenatu hautatutako eremua goranzko hurrenkeran
+Atributo=Atributua
+automatico=Automatikoa
+Ayuda=Laguntza
+back=Aurrekoa
+background_color=Atzeko kolorea
+baja=Behe
+Bajar_capa=Jaitsi geruza
+bandas=Bandak
+barra=Barra\:
+base=base
+base_datos=Datu-baseak
+bmp=BMP motako fitxategiak
+Bold=
+borra_seleccion=Ezabatu aukeraketa
+borrador=Zirriborroa
+borrar=Ezabatu
+box=
+brillo=Distira
+brillo_y_contraste=Distira eta kontrastea
+browse=Aztertu
+cajetin=
+Calcular_intervalos=Kalkulatu bitarteak
+calidad=Kalitatea
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Kolore aldaketa
+cambio_nombre=Izen aldaketa
+campo=Eremua
+Campo=Eremua
+campo_altura_texto=Testuaren altura eremua\:
+Campo_de_clasificacion=Sailkapen eremua
+Campo_de_etiquetado=Etiketatze eremua
+Campos=Eremuak
+cancel=Utzi
+Cancel=Utzi
+cancelar=Utzi
+Cancelar=Utzi
+Capa=Geruza
+Capas=Geruzak
+Capas_del_localizador=Bilagailuaren geruzak
+Centimetros=Zentimetroak
+cerrar=Itxi
+Cerrar=Itxi
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=Zirkulua
+clave=Gakoa
+close=Itxi
+coincidir_tamanyo=
+colocar_a_margenes=Jarri marjinak kontuan hartuta.
+colocar_alrededor_seleccionados=Jarri hautatutako grafikoen inguruan.
+colocar_alrededor_todos=Jarri grafiko guztien inguruan.
+colocar_delante=Jarri aurrean
+colocar_detras=Jarri atzean
+color=Kolorea\:
+Color_final=Amaierako kolorea\:
+Color_inicio=Hasierako kolorea
+color_texto=Testuaren kolorea\:
+comentarios=Iruzkinak
+comenzar_edicion=
+compleja=
+configurar=Konfiguratu
+configurar_localizador=Konfiguratu bilagailua
+Configurar_localizador=Konfiguratu bilagailua...
+confirmar_borrar=Ziur al zaude osagaia ezabatu nahi duzula?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Gorde bistaratze eskala
+consulta=Kontsulta
+Contengan=Honakoak dituztenak
+contraste=Kontrastea
+coor_geograficas=Koordenatu geografikoak
+copiar=
+copy=Kopiatu
+cortar=
+creation_date=Sortze data
+Crucen_con=Hauekin gurutzatzen direnak
+cuando_activo=Aktibo dagoenean
+cut=Ebaki
+Dado_un_campo_de_atributos=Atributu eremua emanda dago
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=Desegin
+delete_field=Ezabatu eremua
+Derecha=Eskuina
+Derecho=Eskuina
+desagrupar=Desegin multzoak
+desagrupar_capas=
+desagrupar_graficos=Desegin grafikoen multzoak
+descending_order=Beheranzko hurrenkera
+descending_order_tooltip=Ordenatu hautatutako eremua beheranzko hurrenkeran
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Goitik\:
+desde_izquierda=Ezkerretik\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=Desegin
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Lekualdaketa
+desviacion_tipica=Ohiko desbideratzea
+distance_units=Neurri unitateak
+distribuir=Banatu\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Zatiketak ezkerrean
+documento=
+documentos_existentes=Aurretik dauden dokumentuak
+draw_text_only=
+driver=Driver
+Dxffiles=.DFX fitxategiak
+edicion=Edizioa
+editable=Editagarria
+Editar_leyenda=Editatu legenda
+editar_vertices=Editatu erpinak
+el_numero_maximo_de_intervalos_para_este_campo_es=Eremu honek izan dezakeen tarte kopuru handiena hau da
+Elegir_Color=Hautatu kolorea
+Elegir_Fuente=Hautatu letra-tipoa
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Geruzatik hautatu diren osagaiak
+Eliminar=Ezabatu
+eliminar_capa=Ezabatu geruza
+eliminar_columna=
+eliminar_extremos=Ezabatu muturrak
+eliminar_fila=
+en_el_mapa=Mapan\:
+En_metros=Metrotan
+En_pixels=Pixeletan
+en_unidades=
+Encuadre=Enkoadraketa
+Encuadre_Vista=Bistaren gaineko enkoadraketa
+enlace_vivo=Lotura bizia
+Enlazar_a_fichero_de_texto=Testu fitxategietara estekatu
+Enlazar_a_ficheros_de_imagen=Irudi fitxategietara estekatu
+equal_intervals=Tarte berdinak
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Errorea legenda gordetzean
+Error_guardando_la_plantilla=
+escala=Eskala
+Escala=Eskala
+escala_desconocida=
+escala_maxima=Eskala handiena
+Escala_Maxima=Eskala handiena
+escala_minima=Eskala txikiena
+Escala_Minima=Eskala txikiena
+escala_usuario=Erabiltzaileak zehaztutako eskala
+espaciado_horizontal=Sarearen tarte horizontala
+espaciado_vertical=Sarearen tarte bertikala
+espacio=Espazioa\:
+estadisticas=Estatistikak
+este_por_debajo_de_=Honen azpitik egotea\:
+este_por_encima_de=Honen gainetik egotea\:
+Esten_contenidos_en=Hemen daudenak
+Etiqueta=Etiketa
+Etiquetados=Etiketatuak
+etiquetas=Etiketak\:
+Etiquetas_estandar=Etiketa estandarrak
+Examinar=Aztertu
+export=Esportatu
+exportar=Esportatu
+exportar_pdf=Esportatu pdf batera
+exportar_ps=Exportar a ps
+extension=Luzapena
+Extent=Extent
+extents_no_coincidentes=Hedadurak ez datoz bat
+factor_zoom_incorrecto=
+fallo_capas=Hutsegitea geruzetara iristean. Hurrengo geruzak proiektutik ezabatuko dira
+family=
+fichero=
+Fichero=Fitxategia
+fichero_existe=Fitxategia badago
+fichero_incorrecto=Fitxategia ez da zuzena
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Iragazkia
+finish=Bukatu
+Font=Letra-tipoa
+formato=Formatua
+Formato_de_numero_erroneo=
+formato_incorrecto=Formatoa ez da zuzena
+fuente=Letra-tipoa
+General=Orokorra
+georeferenciado=
+gestion_encuadre=Enkoadraketen kudeaketa
+grados=Graduak\:
+Grados=Graduak
+Graficos=Grafikoak
+grosor_linea=Lerroaren lodiera\:
+group=Multzokatu
+group_graphic_line=
+grupo=
+guardado=Hemen gorde da\:
+guardar=Gorde
+Guardar=Gorde
+guardar_cambios=Aldaketak gorde nahi dituzu?
+guardar_como=Gorde honela\:
+guardar_como_plantilla=Gorde txantiloi moduan
+Guardar_el_zoom_actual=Gorde zooma
+Guardar_leyenda=Gorde legenda
+guardar_proyecto=Gorde proiektua
+guardar_tooltip=Gorde proiektuaren aldaketak
+Habilitar_etiquetado=Gaitu etiketak
+Hiperenlace=Hiperesteka
+horizontal=Horizontala
+horizontal_space=
+Identificar_Resultados=Identifikatu emaitzak
+Igual_que_la_impresora=Inprimagailuaren neurrira
+igual_todos_lados=Alde guztietatik berdin mugitzea.
+imagen=Irudia
+Implimir=
+importar=Inportatu
+Imprimir=Inprimatu
+Indexando=Indexatzen...
+Indexando_espacialmente=Geruza espazioan indexatzen ari da
+indexar_campos=
+Inferior=Behean
+info=Informazioa
+informacion=Informazioa
+Informacion=Informazioa
+Inicializando=Hasten
+initial_warning=
+insert_row=Txertatu ilara
+Insertar=Txertatu
+insertar_cajetin=Txertatu inskripzio-laukia
+insertar_circulo=Txertatu zirkulua
+insertar_columna=
+insertar_escala=Txertatu eskala
+insertar_fila=
+insertar_imagen=Txertatu irudia
+insertar_leyenda=Txertatu legenda
+insertar_linea=Txertatu lerroa
+insertar_norte=Iparraldea txertatu
+insertar_poligono=Txertatu poligonoa
+insertar_polilinea=Txertatu polilinea
+insertar_punto=Txertatu puntua
+insertar_rectangulo=Txertatu laukizuzena
+insertar_texto=Txertatu testua
+insertar_vista=Txertatu bista
+Intersecten_con=Hauekin ebakitzen direnak
+Intervalo=Tartea
+Intervalos=Tarteak
+introduce_nombre=Sartu izen berria
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Izquierda=Ezkerra
+Izquierdo=Ezkerra
+join=Lotu
+jpg=JPEG fitxategiak
+kilometros=Kilometroak
+Kilometros=Kilometroak
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Legendan (eta/edo etiketan)loturaren eremu bat erabiltzen ari zara. Mesedez, aldatu legenda lotunea kendu aurretik.
+Leyenda_Por_Defecto=Legenda lehenetsia
+linea=Lerroa
+linea_grafica=Lerro grafikoa
+lineal_directo=Zuzeneko lineala
+link=Lotura
+Link=Lotura
+localizador=Bilagailua
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Sarea aktibatuta
+manage_fields=
+mantener_intervalo=Tartea mantendu
+map_units=Maparen unitateak
+mapa=
+Mapa=Mapa
+mapas=Mapak
+marco=Markoa
+marco_vista=Bista-eremua
+margenes=Marjinak
+mas_de_100_simbolos=100 sinbolo baino gehiagok ez diote planoari informaziorik eransten.
+max_length_is=
+maximo=Gehienez
+MDIFrame.quiere_salir=Ziur zaude irten nahi duzula?
+MDIFrame.salir=Irten
+media=Batez beste
+medir_area=Azalera neurtu
+medir_distancias=Distantziak neurtu
+metadatos=Metadatos
+metros=Metroak
+Metros=Metroak
+Milimetros=Milimetroak
+Millas=Miliak
+minimo=Gutxienez
+modificar=
+modification_date=Aldatu zen azken eguna
+mostrar_escala_numerica=
+Mostrar_siempre=Erakutsi beti
+mostrar_unidades=Bistaratu unitateak
+move_elements=
+Muestra_atributos=Hautatutako geruzen atributuak erakusten ditu.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Geruzaren osagaiak balio bakoitzerako ikur bat erabiliz erakusten ditu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Geruzaren elementuak atributu eremu jakin bateko koloreak erabiliz erakusten ditu
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Geruza baten osagai guztiak ikur berdina erabiliz erakusten ditu
+natural_intervals=Tarte naturalak
+navegacion=Nabigazioa
+navegacion_vista=Nabigazio Ikuspegia
+necesita_una_capa_activa=Geruza bat aktibo egon behar da
+necesita_una_capa_vectorial_activa=Bektore-geruza bat aktibo egon behar da
+new_field=Eremu berria
+new_field_properties=
+next=Hurrengoa
+ninguna_impresora_configurada=Ez dago konfiguratutako inprimagailurik
+Nivel_de_transparencia=Gardentasun maila
+no=Ez
+no_activos=Ez daude aktibo
+No_de_intervalos=Tarte kop.
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Ez erakutsi geruza eskala horrelakoa bada
+No_mostrar_la_capa_cuando_la_escala=Ez erakutsi geruza eskala horrelakoa bada\:
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=Ezin izan da geruzaren taula eskuratu
+no_visibles=Ez dago ikusgai
+nombre=Izena
+Nombre=Izena
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Zoomari emango zaion izena
+nombre_sesion=Saioaren izena
+none=
+none_selected=Ez da bat ere ez hautatu
+normal=Normala
+north=Iparraldea
+Nueva_tabla=Taula berria
+nuevo=Berria
+Nuevo_conjunto=Multzo berria
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Proiektu berria
+nuevo_tooltip=Beste proiektu bat sortu
+num_bandas=Banda kopurua
+num_columnas=Zutabe kopurua
+num_filas=Lerro kopurua
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=Zenbakia ez da zuzena
+ok=Ados
+opacidad=Opakotasuna
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientazioa\:
+origen_de_datos=Datu-iturburua
+Origen_de_datos=Datu-iturburua
+Origen_de_Datos=Datu-iturburua\:
+owner=Jabea
+paste=Itsatsi
+paste_elements=
+path=Bidea
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mapako elementuak eremu jakin baten balioarekin etiketatzea ahalbidetzen du
+Personalizado=Pertsonalizatua
+personalizar_margenes=
+Pies=Oinak
+pila_de_comandos=Komando-pila
+pixeles=pixelak
+pixels=pixels
+Plain=
+plantilla=
+please_insert_new_field_name=
+png=png fitxategiak
+poligono=Poligonoa
+polilinea=polilinea
+poner_capas_a=Jarri geruzak hemen\:
+por_debajo_de=Honen azpitik\:
+por_encima_de=Honen gainetik\:
+Por_favor_active_la_capa=Mesedez, aktibatu geruza
+posicion_linea=Lerroaren kokalekua
+precision=
+preparar_pagina=Prestatu orria
+Preparar_pagina=Prestatu orria
+presentacion=Aurkezpena
+previsualizacion=Aurrebista
+Previsualizacion=Aurrebista
+Previsualizacion_de_simbolo=Ikurraren aurrebista
+propiedad=
+propiedades=Ezaugarriak
+propiedades_cajetin=Inskripzio-laukiaren ezaugarriak
+propiedades_capa=Geruzaren ezaugarriak
+propiedades_de_la_capa=Geruzaren ezaugarriak
+Propiedades_escala_grafica=Eskala grafikoaren ezaugarriak
+propiedades_grafico=Grafikoaren ezaugarriak
+propiedades_mapa=Maparen ezaugarriak
+propiedades_marco_imagenes=Irudi-markoaren ezaugarriak
+propiedades_marco_leyenda=Legenda-markoaren ezaugarriak
+propiedades_marco_vista=Bista-markoaren ezaugarriak
+propiedades_raster=Raster-aren ezaugarriak
+propiedades_sesion=Saioaren ezaugarriak
+propiedades_tabla=Taularen ezaugarriak
+Propiedades_texto=Testuaren ezaugarriak
+propiedades_vista=Bistaren ezaugarriak
+Proyecciones=
+ps=
+puerto=Ataka
+Pulgadas=Hazbeteak
+punto=Puntua
+quantile_intervals=Tarte koantilak
+quiere_continuar=Ziur zaude irten nahi duzula?
+Quitar=Kendu
+Quitar_capa=Kendu geruza
+quitar_enlaces=Kendu lotuneak
+Quitar_todos=Kendu denak
+quitar_uniones=Kendu loturak
+rango_de_escalas=Eskala-maila
+Rango_de_escalas=Eskala-maila
+realce=Irtengunea
+realmente_desea_guardar=Ziur zaude gorde nahi duzula?
+recargar=
+recorte_colas=Ilarak ebaki
+recorte_vista=Bistarako murrizketa
+rectangulo=Laukizuzena
+recuento=Zenbaketa
+Recuperar_leyenda=Berreskuratu legenda
+Recuperar_y_eliminar_otros_zoom=Beste zoom batzuk berreskuratu eta ezabatu
+refrescar=Eguneratu
+registros_seleccionados_total=Hautatutako erregistroak guztira
+rehacer=Berregin
+rellenar_marco_vista=Bete bista-eremua
+relleno=Betegarria\:
+remove_elements=
+remove_fields=
+remove_row=Ezabatu lerroa
+remove_rows=
+rename_field=
+renombrar=Berriro izendatu
+reproyectar_aviso=Geruzaren proiekzioa ez da bistaren proiekzioaren berdina. OHARRA\: Zehaztugabea izan daiteke aldaketa batzuekin. Mesedez, irakurri dokumentazioa.
+reproyectar_pregunta=Berriro proiektatu nahi duzu?
+resolucion_resultado=Emaitzaren ebazpena\:
+resto_valores=Gainerako balioak
+restore_palette=
+rotation_field=
+salir=Irten
+salir_tooltip=Irten
+salvar_raster=Gorde raster geoerreferentziatuan.
+Sample=Adibidea
+Se_superponen_a=Honakoei gainjartzen zaizkienak
+Sean_disjuntos_a=honen disjuntu direnak
+Sean_iguales_a=honen berdinak direnak
+seleccion=Hautaketa
+seleccion_fuente=Letra-tipoa aukeratu
+Seleccion_por_capa=Hautatu geruzaka
+selecciona_sistema_de_referencia=
+Seleccionar=Hautatu
+seleccionar_capas=Hautatu geruzak
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Geruza aktiboetatik baldintza hauek betetzen dituzten osagaiak hautatu\:
+Seleccionar_del_conjunto=Multzotik hautatu
+Seleccionar_fichero=Hautatu fitxategia
+seleccionar_por_poligono=
+seleccionar_por_punto=Puntuka hautatu
+seleccionar_por_rectangulo=Laukizuzenka hautatu
+seleccionar_todos=Hautatu guztiak
+seleccione_campo_enlace=Hautatu lotzeko erabiliko den eremua
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Hautatu data bat...
+seleccione_tabla_a_enlazar=Hautatu lotu beharreko taula
+seleccione_tabla_origen=Hautatu join-aren sorburu-taula
+selection_color=Hautaketaren kolorea
+selection_up=
+separator=
+Servidor=Zerbitzaria
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Beti
+simbolo=
+Simbolo=Ikurra
+Simbolo_unico=Ikur bakarra
+Simbologia=Sinbologia
+simplificar_leyenda=
+simplify=
+sin_titulo=Titulurik gabe
+sincronizar_color_borde_relleno=Ertzaren kolorea eta betegarriarena sinkronizatu\:
+Size=
+sobre_la_barra=Barran
+Solo_para_capas_vectoriales=Bektore-geruzetarako bakarrik
+start_edition=Hasi edizioa
+statistics=Estatistikak
+stop_edition=Amaitu edizioa
+Style=Estiloa
+Subir_capa=Igo geruza
+suma=Batura
+Superior=Goian
+symbol_selector=
+Tabla=Taula
+Tabla_de_Atributos=Atributuen taula
+tablas=Taulak
+Tablas=Taulak
+tag=tag
+tamano=Tamaina\:
+tamano_metros=Tamaina metrotan
+tamano_pagina=Orrialde-tamaina\:
+tamano_posicion=tamaina/kokalekua
+tamanyo_borde=Ertzaren tamaina
+tamanyo_fuente=Iturri-tamaina
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Testua
+this_table_is_not_self_editable=
+tipo_dato=Datu mota
+tipo_de_intervalo=Tarte mota
+tipo_de_leyenda=Legenda-mota
+tipo_fichero_proyecto=gvSIG (*.GVP) proiektu fitxategia
+tipo_linea=Lerro mota\:
+tipo_relleno=Betegarri-mota\:
+tipo_simbolo=Ikur-mota\:
+tipos_de_documentos=Agiri-motak
+titulo=Proiektuen kudeatzailea
+titulo_fframetext=Testu eremuaren titulua
+to_annotation=Bihurtu oharpen-geruza
+to_palette=Aldatu paletara
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=hauek ukitzen dituztenak
+transparencia=Gardentasuna
+Transparencia=Gardentasuna
+transparencia_pixel=Gardentasuna pixel bakoitzeko
+ungroup=Desegin multzoak
+unidades=Unitateak\:
+Unidades=Unitateak\:
+untitled=Titulurik gabe
+url=
+Usar_indice_espacial=Espazio-indizea erabili
+usar_marco=Erabili markoa
+usar_titulo=Erabili titulua
+usuario=Erabiltzailea
+utilizar_margenes_impresora=Erabili inprimagailuaren marjinak.
+vacia=Hutsik
+Valor=Balioa
+Valores=Balioak
+Valores_unicos=Balio bakarrak
+varianza=Bariantza
+Ventana=Leihoa
+ventana_proyecto=Proiektuaren leihoa
+Ver=Ikusi
+ver_error_capa=
+ver_tabla_atributos=Ikusi atributuen taula
+ver_tags=
+ver_tooltip=Proiektuaren leihoa erakusten du
+vertical=Bertikala
+vertical_space=
+visible=Ikusgai
+visibles=Ikusgai
+Vista=Bista
+vistas=Bista
+visualizacion=Bistaratzea
+Visualizacion=Bistaratzea
+visualizar_cuadricula=Bistaratu sarea
+warning=Oharra
+xmax=xmax
+xmin=xmin
+Yardas=Yardak
+ymax=ymax
+ymin=ymin
+Zoom_a_la_capa=Zooma geruzari
+Zoom_Acercar=Hurbiltzeko zooma
+Zoom_Alejar=Urruntzeko zooma
+Zoom_Completo=Zooma osorik
+Zoom_Completo_Vista=Zooma osorik bistaren gainean
+zoom_in_factor=
+Zoom_Mas=Zoom handiagoa
+Zoom_Mas_Vista=Zoom handiagoa bistaren gainean
+Zoom_Menos=Zoom txikiagoa
+Zoom_Menos_Vista=Zoom txikiagoa bistaren gainean
+zoom_out_factor=
+Zoom_pixel=Pixelaren zooma
+Zoom_Previo=Aurretiko zooma
+Zoom_Real=1\:1 zooma
+Zoom_Select=Zooma hautatutakoari

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_eu.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_it.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_it.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_it.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+(escala_maxima)=(scala massima)
+(escala_minima)=(scala minima)
+1\:=
+_(Simbolo_unico)=(Simbolo unico)
+__proyeccion_actual=Proiezione attuale\:
+__redimensionar_texto_escala=Ridimensiona il testo alla scala della vista
+__seleccion_de_fuente=Seleziona carattere
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Basso
+abrir=Apri
+abrir_plantilla=Apri Tavola
+abrir_proyecto=Apri Progetto
+abrir_tooltip=Apri Progetto esistente
+Abrir_una_capa=Apri Layer
+Accion_Predefinida=Azione predefinita
+aceptar=Accetta
+Aceptar=Accetta
+acerca_de=Cerca...
+activar=Attiva
+activar_regla=Attiva regola
+activos=Attivi
+add_delete_edit_fields=I campi possono essere aggiunti, cancellati o rinominati.
+add_layer=Aggiungi Layer
+add_rows=Aggiungi righe
+adjust_transparency=Regola transparenza
+agrupacion=Raggruppamento
+agrupar=Raggruppa
+agrupar_capas=Raggruppa layers
+agrupar_graficos=Raggruppa grafici
+agrupar_linea=Raggruppa riquadro di contorno con i grafici 
+Ajustar_transparencia=Regola trasparenza
+ajustes_linea_grafica=Regola spessore linea
+Al_leer_la_leyenda=Leggendo la legenda
+alias=Alias
+align_center=Allinea al centro
+align_down=Allinea in basso
+align_left=Allinea a sinistra
+align_right=Allinea a destra
+align_to_layout_center=Allinea al centro del layout
+align_to_layout_down=Allinea in basso nel layout
+align_to_layout_left=Allinea a sinistra del layout
+align_to_layout_right=Allinea a destra del layout
+align_to_layout_up=Allinea in alto nel layout
+align_to_layout_vertical_center=Allinea al centro del layout verticalmente
+align_up=Allinea in alto
+align_vertical_center=Allinea al centro della verticale
+alineamiento=Allineamento
+alinear=Allinea
+alinear_graficos=Allinea grafici
+alta=Alta
+alto=Alto
+altura=Altezza\:
+Altura_fija_de_texto=Altezza fissa del testo
+ambito=Ambito
+Anadir=Aggiungi
+Anadir_al_conjunto=Aggiungi all'insieme
+Anadir_capa=Aggiungi layer
+Anadir_Capa=Aggiungi layer
+anadir_tag=Aggiungi tag
+Anadir_todos=Aggiungi tutto
+ancho=Larghezza\:
+ancho_alto=Larghezza X Altezza
+anchura=Larghezza\:
+Aplicar=Applica
+Archivo=File
+arriba=Alto
+ascending_order=Ordine crescente
+ascending_order_tooltip=Ordina il campo selezionato in ordine crescente
+Atributo=Attributo
+automatico=Automatico
+Ayuda=Aiuto
+back=Precedente
+background_color=Colore sfondo
+baja=Basso
+Bajar_capa=Abbassa layer
+bandas=Bande
+barra=Barra\:
+base=base
+base_datos=DataBases
+bmp=BMP files
+Bold=Grasseto
+borra_seleccion=Annulla/Elimina selezione
+borrador=Bozza
+borrar=Rimuovi
+box=Riquadro
+brillo=Luminosit\u00e1
+brillo_y_contraste=Luminosit\u00e0 e Contrasto
+browse=Sfoglia
+cajetin=Riquadro
+Calcular_intervalos=Calcola intervalli
+calidad=Qualit\u00e1
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Adatta altezza degli elementi selezionati al pi\u00f9 alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Adatta larghezza degli elementi selezionati al pi\u00f9 largo.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Adatta la dimensione degli elementi selezionati al maggiore.
+Cambio_Color=Cambio di colore
+cambio_nombre=Cambio di nome
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo di altezza del testo\:
+Campo_de_clasificacion=Campo di classificazione
+Campo_de_etiquetado=Campo di etichetta
+Campos=Campi
+cancel=Cancella
+Cancel=Cancella
+cancelar=Cancella
+Cancelar=Cancella
+Capa=Layer
+Capas=Layers
+Capas_del_localizador=Layers del localizzatore
+Centimetros=Centimetri
+cerrar=Chiudi
+Cerrar=Chiudi
+change=Modifica
+change_before=Porta avanti
+change_behind=Porta indietro
+change_height=Modifica altezza
+change_width=Modifica larghezza
+circulo=Cerchio
+clave=Password
+close=Chiudi
+coincidir_tamanyo=Adatta dimensione
+colocar_a_margenes=Colloca al margine
+colocar_alrededor_seleccionados=Colloca intorno a quanto selezionato
+colocar_alrededor_todos=Colloca intorno a tutto
+colocar_delante=Colloca davanti
+colocar_detras=Colloca dietro
+color=Colore\:
+Color_final=Colore finale\:
+Color_inicio=Colore iniziale
+color_texto=Colore testo\:
+comentarios=Commenti
+comenzar_edicion=Inizia modifica
+compleja=
+configurar=Configura
+configurar_localizador=Configura localizzatore
+Configurar_localizador=Configura localizzatore ...
+confirmar_borrar=Gli elementi saranno rimossi. Sei sicuro?
+conflicto_de_nombres_de_mapas_al_pegar=Si sta tentando di incollare mappe i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflicto_de_nombres_de_tablas_al_pegar=Si sta tentando di incollare tabelle i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflicto_de_nombres_de_vistas_al_pegar=Si sta tentando di incollare Viste i cui nomi sono gi\u00e0 presenti nel progetto corrente.
+conflito_de_nombres_de_tablas_al_pegar=Conflitto nei nomi delle tabelle durante la copia.
+conservar_escala_visualizacion=Mantieni scala di visualizzazione
+consulta=Consulta
+Contengan=Contengono
+contraste=Contrasto
+coor_geograficas=Coordinate geografiche
+copiar=Copia
+copy=Copia
+cortar=Taglia
+creation_date=Data creazione
+Crucen_con=Si incrociano con
+cuando_activo=Quando attivo
+cut=Taglia
+Dado_un_campo_de_atributos=Dato un campo di attributi
+debera_introducir_nombres_para_las_vistas_a_pegar=E' necessario inserire nuovi nomi per le viste.
+debera_introducir_nombres_para_los_mapas_a_pegar=E' necessario inserire nuovi nomi per le mappe.
+default_projection=Proiezione predefinita
+default_value=Valore predefinito
+dehacer=Annulla
+delete_field=Elimina campo
+Derecha=Destra
+Derecho=Destro
+desagrupar=Separa
+desagrupar_capas=Separa layers
+desagrupar_graficos=Separa grafici
+descending_order=Ordine decrescente
+descending_order_tooltip=Ordina il campo selezionato in ordine decrescente
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Per utilizzare valori comuni per tutti i campi del layer lasciare i valori di default. Per personalizzare l'aspetto delle etichette selezionare i campi che contengono i valori corrispondenti.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con questo strumento \u00e8 possibile creare un layer virtuale basato su un layer esistente che permetta di realizzare un'etichettatura avanzata. Modifica la visualizzazione del layer mostrando il valore di uno dei suoi campi.</HTML>
+desde_arriba=Dall'alto\:
+desde_izquierda=Da sinistra\:
+desea_borrar_el_documento=Eliminare i domumenti selezionati?
+desea_borrar_la_capa=Eliminare i layers attivi?
+desea_continuar=Continuare?
+deshacer=Annulla
+desplaza_los_elementos_seleccionados_a_la_derecha=Sposta gli elementi selezionati a destra.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Sposta gli elementi selezionati a sinistra.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Sposta gli elementi selezionati al centro dell'asse X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Sposta gli elementi selezionati al centro dell'asse Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Sposta gli elementi selezionati in basso.
+desplaza_los_elementos_seleccionados_hacia_arriba=Sposta gli elementi selezionati in alto.
+Desplazamiento=Spostamento
+desviacion_tipica=Deviazione standard
+distance_units=Unit\u00e1 di misura
+distribuir=Distribuisci\:
+distribuir_elementos_sobre_todo_el_layout=Disponi elementi sull'intero layout
+distributes_down=Disponi dal basso
+distributes_horizontal=Disponi orizzontalmente
+distributes_left=Disponi a sinistra
+distributes_right=Disponi a destra
+distributes_to_layout_down=Disponi dalla parte inferiore del layout
+distributes_to_layout_horizontal=Disponi orizzontalmente nel layout
+distributes_to_layout_left=Distibuisci a sinistra nel layout
+distributes_to_layout_right=Disponi dalla destra del layout
+distributes_to_layout_up=Disponi dalla parte superiore del layout
+distributes_to_layout_vertical=Disponi verticalmente nel layout
+distributes_up=Disponi dall'alto
+distributes_vertical=Disponi verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Equidistanzia in orizzontale.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Equidistanzia in verticale.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuisci uniformemente gli elementi selezionati dal basso verso l'alto.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuisci uniformemente gli elementi selezionati dall'alto verso il basso.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuisci uniformemente gli elementi selezionati da destra a sinistra.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuisci uniformemente gli elementi selezionati da sinistra a destra.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuisci uniformemente gli elementi selezionati in orizzontale.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuisci uniformemente gli elementi selezionati in verticale.
+divisiones_izquierda=Separazioni a sinistra
+documento=
+documentos_existentes=Documento esistente
+draw_text_only=Disegna il solo testo
+driver=Driver
+Dxffiles=DXF Files
+edicion=Modifica
+editable=Modificabile
+Editar_leyenda=Modifica legenda
+editar_vertices=Modifica vertici
+el_numero_maximo_de_intervalos_para_este_campo_es=Il numero massimo di intervalli per questo campo \u00e8
+Elegir_Color=Seleziona Colore
+Elegir_Fuente=Seleziona Font
+elemento_ya_existe=L'elemento esiste gi\u00e0
+Elementos_seleccionados_de_la_capa=Gli elementi selezionati nel presente layer
+Eliminar=Elimina
+eliminar_capa=Elimina layer
+eliminar_columna=Elimina colonna
+eliminar_extremos=Elimina gli estremi
+eliminar_fila=Elimina riga
+en_el_mapa=Nella mappa\:
+En_metros=In metri
+En_pixels=In pixels
+en_unidades=in unit\u00e0
+Encuadre=Zoom
+Encuadre_Vista=Zoom vista
+enlace_vivo=Collegamento attivo
+Enlazar_a_fichero_de_texto=Collegamento a documento di testo
+Enlazar_a_ficheros_de_imagen=Collegamento a files d'immagine
+equal_intervals=Intevalli uguali
+Error_exportando_SLD=Errore d'esportazione SLD
+Error_guardando_la_leyenda=Errore nel salvare la legenda
+Error_guardando_la_plantilla=Errore nel salvare la tavola
+escala=Scala
+Escala=Scala
+escala_desconocida=Scala sconosciuta
+escala_maxima=Scala massima
+Escala_Maxima=Scala massima
+escala_minima=Scala minima
+Escala_Minima=Scala minima
+escala_usuario=Scala specificata dall'utente
+espaciado_horizontal=Spazitura orizzontale
+espaciado_vertical=Spaziatura verticale
+espacio=Spazio\:
+estadisticas=Statistiche
+este_por_debajo_de_=Al di sotto di
+este_por_encima_de=Al di sopra di
+Esten_contenidos_en=Sono contenuti in
+Etiqueta=Etichetta
+Etiquetados=Etichettati
+etiquetas=Etichette\:
+Etiquetas_estandar=Etichette standard
+Examinar=Cerca...
+export=Esporta
+exportar=Esporta
+exportar_pdf=Esporta come pdf
+exportar_ps=Exporta come ps
+extension=Estensione
+Extent=Estensione
+extents_no_coincidentes=L'estensione della immagine selezionata non coincide con la immagine di origine.
+factor_zoom_incorrecto=Fattore di zoom errato
+fallo_capas=Errore nell'accedere al layer. I layers seguenti saranno eliminati dal progetto
+family=
+fichero=file
+Fichero=File
+fichero_existe=Il file selezionato esiste gi\u00e1 come banda del layer
+fichero_incorrecto=File non corretto
+fichero_ya_existe_seguro_desea_guardarlo=Il file esiste gi\u00e0, continuare?
+field_already_exists=Il campo esiste gi\u00e0
+field_decimal_count=Precisione decimale
+field_default_value=Valore predefinito
+field_length=Lunghezza
+field_manager=Editor dei campi
+field_name=Nome del campo
+field_type=Tipo
+filtro=Filtro
+finish=Termina
+Font=Font
+formato=Formato
+Formato_de_numero_erroneo=Formato del numero errato
+formato_incorrecto=Formato non corretto
+fuente=Font
+General=Generale
+georeferenciado=Georeferenziando
+gestion_encuadre=Gestione zoom
+grados=Gradi\:
+Grados=Gradi
+Graficos=Grafici
+grosor_linea=Spessore linea\:
+group=Raggruppa
+group_graphic_line=Raggruppa bordi grafici
+grupo=Gruppo
+guardado=Salvato
+guardar=Salva
+Guardar=Salvare
+guardar_cambios=Salvare le modifiche
+guardar_como=Salva come...
+guardar_como_plantilla=Salva come tavola
+Guardar_el_zoom_actual=Salva lo zoom attuale
+Guardar_leyenda=Salva legenda
+guardar_proyecto=Salva progetto
+guardar_tooltip=Salva progetto
+Habilitar_etiquetado=Attiva etichetta
+Hiperenlace=Collegamento
+horizontal=Orizzontale
+horizontal_space=Spazio orizzontale
+Identificar_Resultados=Identifica risultati
+Igual_que_la_impresora=Uguale alla stampante
+igual_todos_lados=Uguale per tutti i lati
+imagen=Immagine
+Implimir=
+importar=Importa
+Imprimir=Stampa
+Indexando=Indicizzando...
+Indexando_espacialmente=Indicizzazione spaziale del layer
+indexar_campos=Indicizzare campi
+Inferior=Inferiore
+info=Informazione
+informacion=Informazione
+Informacion=Informazione
+Inicializando=Inizializzando
+initial_warning=<html><b>ATTENZIONE\!</b><br>Versione in via di sviluppo. Pu\u00f2 contenere errori significativi e provocare la corruzione dei file modificati.<br><br>Si consiglia l'uso di una versione stabile di gvSIG per il lavoro quotidiano.</html>
+insert_row=Inserisci riga
+Insertar=Inserisci
+insertar_cajetin=Inserisci griglia
+insertar_circulo=Inserisci Cerchio
+insertar_columna=Inserisci colonna
+insertar_escala=Inserisci Scala
+insertar_fila=Inserisci riga
+insertar_imagen=Inserisci Immagine
+insertar_leyenda=Inserisci Legenda
+insertar_linea=Inserisci Linea
+insertar_norte=Inserire Nord
+insertar_poligono=Inserisci Poligono
+insertar_polilinea=Inserisci polilinea
+insertar_punto=Inserisci Punto
+insertar_rectangulo=Inserisci Rettangolo
+insertar_texto=Inserisci Testo
+insertar_vista=Inserisci Vista
+Intersecten_con=Intersecano con
+Intervalo=Intervallo
+Intervalos=Intervalli
+introduce_nombre=Inserisci nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Inserire il nome del nuovo layer di annotazioni
+introduzca_nuevo_nombre_para_la_vista=Inserire il nuovo nome della vista
+invalid_value_for_gap=
+invert_selection=Inverti selezione
+Italic=Corsivo
+Izquierda=Sinistra
+Izquierdo=Sinistro
+join=Unisci
+jpg=JPEG files
+kilometros=Chilometri
+Kilometros=Chilometri
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Si sta utilizzando un campo dell'unione nella legenda (e/o etichettato). Cambia le legenda prima di togliere l'unione.
+Leyenda_Por_Defecto=Legenda standard
+linea=Linea
+linea_grafica=Bordo grafico
+lineal_directo=Lineare diretto
+link=Collegamento
+Link=Collegamento
+localizador=Localizzatore
+locked_element=Elemento bloccato
+locked_element_it_cannot_be_deleted=Elemento bloccato.\nNon pu\u00f2 essere eliminato.
+locked_element_it_cannot_be_renamed=Elemento bloccato.\nNon pu\u00f2 essere rimosso.
+m/pixel=metri/pixel
+malla_activada=Rete attivata
+manage_fields=Modifica struttura della tabella
+mantener_intervalo=Mantieni intervallo
+map_units=Unit\u00e1 di mappa
+mapa=Mappa
+Mapa=Mappa
+mapas=Mappe
+marco=Bordo
+marco_vista=Bordo vista
+margenes=Margini\:
+mas_de_100_simbolos=Pi\u00fa di 100 simboli non apportano informazioni al piano
+max_length_is=La lunghezza massima \u00e8
+maximo=Massimo
+MDIFrame.quiere_salir=Sei sicuro di voler uscire?
+MDIFrame.salir=Uscire
+media=Media
+medir_area=Misura area
+medir_distancias=Misura distanze
+metadatos=Metadati
+metros=Metri
+Metros=Metri
+Milimetros=Millimetri
+Millas=Miglia
+minimo=Minimo
+modificar=Modifica
+modification_date=Modifica dati
+mostrar_escala_numerica=Mostra scala numerica
+Mostrar_siempre=Mostra sempre
+mostrar_unidades=Mostra unit\u00e1
+move_elements=Sposta elementi
+Muestra_atributos=Mostra gli attributi dei layers selezionati
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra gli elementi del layer usando un simbolo per ogni valore unico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra gli elementi del layer usando una gamma di colori in funzione del valore di un determinato campo di attributi
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tutti gli elementi di un layer usando lo stesso simbolo
+natural_intervals=Intervalli naturali
+navegacion=Navigazione
+navegacion_vista=Vista navigazione
+necesita_una_capa_activa=Necessario un layer attivo
+necesita_una_capa_vectorial_activa=Necessario un layer vettoriale attivo
+new_field=Nuovo campo
+new_field_properties=Propriet\u00e0 del nuovo campo
+next=Successivo
+ninguna_impresora_configurada=Nessuna stampante individuata
+Nivel_de_transparencia=Livello di trasparenza
+no=No
+no_activos=Non attivi
+No_de_intervalos=No intervalli
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=Impossibile terminare l'operazione
+No_mostrar=Non mostrare
+No_mostrar_la_capa_cuando_la_escala=Non mostrare il layer quando la scala
+no_se_pegaran_las_tablas=Non verr\u00e0 incollata alcuna tabella
+no_se_pegaran_las_vistas_del_conflicto=Le viste in conflitto nonsaranno incollate
+No_se_pudo_obtener_la_tabla_de_la_capa=Impossibile ottenere la tabella dal layer
+no_visibles=Non visibili
+nombre=Nome
+Nombre=Nome
+nombre_no_valido=Nome non valido
+Nombre_que_se_le_dara_al_zoom=Nome per lo zoom
+nombre_sesion=Nome sessione
+none=
+none_selected=Nessuna selezione
+normal=Normale
+north=Nord
+Nueva_tabla=Nuova tabella
+nuevo=Nuovo
+Nuevo_conjunto=Nuovo insieme
+nuevo_nombre_para_el_mapa=Scrivere il nuovo nome per il layer
+nuevo_proyecto=Nuovo progetto
+nuevo_tooltip=Crea nuovo progetto
+num_bandas=Numero delle bande
+num_columnas=Numero di colonne
+num_filas=Numero di righe
+Num_intervalos=Numero di intervalli
+numero_decimales_mostrar=Numero decimali
+numero_incorrecto=Numero non corretto
+ok=Accetta
+opacidad=Opacit\u00e1
+operacion_cancelada=Operazione cancellata
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientamento\:
+origen_de_datos=Origine dei dati
+Origen_de_datos=Origine dei dati
+Origen_de_Datos=Origine dei Dati\:
+owner=Proprietario
+paste=Incolla
+paste_elements=Inolla elementi
+path=Percorso
+pdf=
+pegar=Incolla
+pegar_mapas=Incolla mappe
+pegar_vistas=Incolla viste
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permette di etichettare gli elementi della mappa con il valore di un determinato campo
+Personalizado=Personalizzato
+personalizar_margenes=Personalizza margini
+Pies=Piedi
+pila_de_comandos=Lista dei comandi
+pixeles=Pixels
+pixels=Pixels
+Plain=Normale
+plantilla=Tavola
+please_insert_new_field_name=Inserire nuovo nome del campo
+png=PNG files
+poligono=Poligono
+polilinea=Polilinea
+poner_capas_a=Poini Layers come...
+por_debajo_de=dal basso\:
+por_encima_de=dall'alto\:
+Por_favor_active_la_capa=Attivare il layer
+posicion_linea=Posiziona della linea
+precision=Precisione
+preparar_pagina=Imposta pagina
+Preparar_pagina=Imposta pagina
+presentacion=Presentazione definitiva
+previsualizacion=Anteprima
+Previsualizacion=Anteprima
+Previsualizacion_de_simbolo=Anteprima simbolo
+propiedad=Propriet\u00e0
+propiedades=Propriet\u00e1
+propiedades_cajetin=Propriet\u00e0 riquadro
+propiedades_capa=Propriet\u00e0 del layer
+propiedades_de_la_capa=Propriet\u00e0 del layer
+Propiedades_escala_grafica=Propriet\u00e1 della scala
+propiedades_grafico=Propriet\u00e1 del grafico
+propiedades_mapa=Propriet\u00e1 della mappa
+propiedades_marco_imagenes=Propriet\u00e1 del bordo dell'Immagine
+propiedades_marco_leyenda=Propriet\u00e1 del bordo della legenda
+propiedades_marco_vista=Propriet\u00e1 del bordo della vista
+propiedades_raster=Propriet\u00e1 del raster
+propiedades_sesion=Propriet\u00e1 di sessione
+propiedades_tabla=Propriet\u00e1 tabella
+Propiedades_texto=Propriet\u00e1 del testo
+propiedades_vista=Propriet\u00e1 della vista
+Proyecciones=Proiezioni
+ps=
+puerto=Porta
+Pulgadas=Pollici
+punto=Punto
+quantile_intervals=Intervalli quantili
+quiere_continuar=Sei sicuro di voler continuare?
+Quitar=Rimuovi
+Quitar_capa=Elimina layer
+quitar_enlaces=Elimina collegamenti
+Quitar_todos=Elimina tutto
+quitar_uniones=Elimina unioni
+rango_de_escalas=Classe delle scale
+Rango_de_escalas=Classe delle scale
+realce=Ottimizzazione
+realmente_desea_guardar=Si vuole salvare realmente?
+recargar=Ricarica
+recorte_colas=Ritaglio degli estremi
+recorte_vista=Ritaglio della vista
+rectangulo=Rettangolo
+recuento=Riconto
+Recuperar_leyenda=Recupera legenda
+Recuperar_y_eliminar_otros_zoom=Recupera ed elimina gli altri zoom
+refrescar=Aggiorna
+registros_seleccionados_total=Totale registri selezionati
+rehacer=Ripeti
+rellenar_marco_vista=Riempi il bordo della vista
+relleno=Riempi\:
+remove_elements=Rimuovi elementi
+remove_fields=Rimuovi campi
+remove_row=Rimuovi riga
+remove_rows=Rimuovi righe
+rename_field=Rinomina campo
+renombrar=Rinomina
+reproyectar_aviso=La proiezione del Layer non s' la stessa della Vista.\nAVVISO\: Puo' essere incorretto in alcune trasformazioni.\nLeggere la documentazione.
+reproyectar_pregunta=Riproiettare?
+resolucion_resultado=Qualit\u00e1 di stampa\:
+resto_valores=Resto dei valori
+restore_palette=Ripristina layout di visualizzazione
+rotation_field=Campo di rotazione
+salir=Esci
+salir_tooltip=Esci
+salvar_raster=Salva raster
+Sample=Esempio
+Se_superponen_a=Si sovrappongono a
+Sean_disjuntos_a=Sono diversi da
+Sean_iguales_a=Sono uguali a
+seleccion=Selezione
+seleccion_fuente=Seleziona carattere
+Seleccion_por_capa=Selezione per layer
+selecciona_sistema_de_referencia=Seleziona sistema di riferimento
+Seleccionar=Seleziona
+seleccionar_capas=Seleziona layers
+seleccionar_capas_raster=Seleziona layer raster
+Seleccionar_de_las_capas_activas_los_elementos_que=Selezionare dai layers attivi gli elementi che\:
+Seleccionar_del_conjunto=Seleziona dall'insieme
+Seleccionar_fichero=Seleziona file
+seleccionar_por_poligono=Seleziona con poligono
+seleccionar_por_punto=Seleziona con punto
+seleccionar_por_rectangulo=Seleziona con rettangolo
+seleccionar_todos=Seleziona tutto
+seleccione_campo_enlace=Seleziona il campo da collegare
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore d'inclinazione per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di colore per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Selezionare il campo contenente il testo per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il font per la rappresentazione delle eichette</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selezionare il campo contenente il valore di dimensione del testo per la rappresentazione delle eichette</HTML>
+seleccione_fecha=Seleziona data
+seleccione_tabla_a_enlazar=Seleziona la tabella da collegare
+seleccione_tabla_origen=Seleziona la tabella di origine della unione
+selection_color=Seleziona colore
+selection_up=Sposta selezione in alto
+separator=Separatore
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=Mostra questa finestra al prossimo avvio
+si=si
+siempre=Sempre
+simbolo=Simbolo
+Simbolo=Simbolo
+Simbolo_unico=Simbolo unico
+Simbologia=Simbologia
+simplificar_leyenda=Semplifica legenda
+simplify=Semplifica
+sin_titulo=Senza titolo
+sincronizar_color_borde_relleno=Sincronizza il colore del bordo pieno\:
+Size=Dimensiona
+sobre_la_barra=Sopra la barra
+Solo_para_capas_vectoriales=Solo per layers vettoriali
+start_edition=Inizia Editing
+statistics=Statistica
+stop_edition=Termina Editing
+Style=Stile
+Subir_capa=Layer s\u00fa
+suma=Somma
+Superior=Superiore
+symbol_selector=
+Tabla=Tabella
+Tabla_de_Atributos=Tabella degli attributi
+tablas=Tabelle
+Tablas=Tabelle
+tag=Tag
+tamano=Dimensione\:
+tamano_metros=Dimensione in metri
+tamano_pagina=Dimensione della pagina
+tamano_posicion=Dimensione e posizione
+tamanyo_borde=Dimensione del margine
+tamanyo_fuente=Dimensione del font
+tamanyo_pagina=Dimensioni della pagina
+tamPixX=Dimensione pixel X
+tamPixY=Dimensione pixel Y
+terminar=Termina
+terminar_edicion=Termina Editing
+texto=Testo
+this_table_is_not_self_editable=Tabella non modificabile
+tipo_dato=Tipo di Dato
+tipo_de_intervalo=Tipo intervallo
+tipo_de_leyenda=Tipo legenda
+tipo_fichero_proyecto=tipo di file di progetto(*.GVP)
+tipo_linea=Tipo di linea\:
+tipo_relleno=Tipo di riempimento\:
+tipo_simbolo=Tipo di simbolo\:
+tipos_de_documentos=Tipo di documento
+titulo=Gestore di progetto
+titulo_fframetext=Titolo del campo di testo
+to_annotation=Trasforma in layer annotazioni
+to_palette=Modifica layout visualizzazione
+tooltip_copiar_al_portapapeles=Copia nella clipboard
+tooltip_cortar_al_portapapeles=Taglia nella clipboard
+tooltip_pegar_desde_el_portapapeles=Incolla dalla clipboard
+Toquen=Toccano
+transparencia=Transparenza
+Transparencia=Transparenza
+transparencia_pixel=Trasparenza per pixel
+ungroup=Separa
+unidades=Unit\u00e1\:
+Unidades=Unita'
+untitled=Senza titolo
+url=url
+Usar_indice_espacial=Usa indice spaziale
+usar_marco=Usa margine
+usar_titulo=Usa titolo
+usuario=Utente
+utilizar_margenes_impresora=Utilizza i margini della stampante.
+vacia=Vuota
+Valor=Valore
+Valores=Valori
+Valores_unicos=Valori unici
+varianza=Varianza
+Ventana=Finestra
+ventana_proyecto=Finestra di progetto
+Ver=Mostra
+ver_error_capa=
+ver_tabla_atributos=Mostra tabella degli attributi
+ver_tags=Mostra tags
+ver_tooltip=Mostra la finestra di progetto
+vertical=Verticale
+vertical_space=Spazio verticale
+visible=Visibile
+visibles=Visibili
+Vista=Vista
+vistas=Viste
+visualizacion=Visualizza
+Visualizacion=Visualizza
+visualizar_cuadricula=Visualizza maglia
+warning=Attenzione
+xmax=X massima
+xmin=X minima
+Yardas=Yarde
+ymax=Y massima
+ymin=Y minima
+Zoom_a_la_capa=Zoom al layer
+Zoom_Acercar=Zoom\: avvicina
+Zoom_Alejar=Zoom\: allontana
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo della vista
+zoom_in_factor=Fattore di Zoom-in
+Zoom_Mas=Aumenta zoom
+Zoom_Mas_Vista=Aumenta zoom Vista
+Zoom_Menos=Disminuisci zoom
+Zoom_Menos_Vista=Disminuisci zoom vista
+zoom_out_factor=Fattore di Zoom-out
+Zoom_pixel=Zoom a la risoluzione del raster
+Zoom_Previo=Zoom precedente
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom selezionato

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_it.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text.properties	(revision 10281)
@@ -0,0 +1,720 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=1
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__proyeccion_actual=Proyecci\u00f3n actual\:
+__redimensionar_texto_escala=Redimensionar el texto a escala con la vista.
+__seleccion_de_fuente=Selecci\u00f3n de fuente
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Abajo
+abrir=Abrir
+abrir_plantilla=Abrir plantilla
+abrir_proyecto=Abrir proyecto
+abrir_tooltip=Abre un proyecto existente
+Abrir_una_capa=Abrir una capa
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activar=Activar
+activar_regla=Activar regla
+activos=Activos
+add_delete_edit_fields=Puede a\u00f1adir, borrar o renombrar los campos
+add_layer=A\u00f1adir capa
+add_rows=A\u00f1adir filas
+adjust_transparency=Ajustar transparencia
+agrupacion=Agrupaci\u00f3n
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar l\u00ednea gr\u00e1fica con gr\u00e1ficos
+Ajustar_transparencia=Ajustar transparencia
+ajustes_linea_grafica=Ajustes de l\u00ednea gr\u00e1fica
+Al_leer_la_leyenda=Al leer la leyenda
+alias=Alias
+align_center=Alinear centro
+align_down=Alinear bajo
+align_left=Alinear izquierda
+align_right=Alinear derecha
+align_to_layout_center=Alinear centro del layout
+align_to_layout_down=Alinear bajo del layout
+align_to_layout_left=Alinear izquierda del layout
+align_to_layout_right=Alinear derecha del layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Alinear centro del layout verticalmente
+align_up=Alinear arriba
+align_vertical_center=Alinear centro de la vertical
+alineamiento=Alineamiento\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00e1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fija de texto
+ambito=\u00c1mbito
+Anadir=A\u00f1adir
+Anadir_al_conjunto=A\u00f1adir al conjunto
+Anadir_capa=A\u00f1adir capa
+Anadir_Capa=A\u00f1adir capa
+anadir_tag=A\u00f1adir etiqueta
+Anadir_todos=A\u00f1adir todos
+ancho=Ancho
+ancho_alto=Ancho x Alto
+anchura=Anchura\:
+Aplicar=Aplicar
+Archivo=Archivo
+arriba=Arriba
+ascending_order=Orden ascendente
+ascending_order_tooltip=Ordena por el campo seleccionado en orden ascendente
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Ayuda
+back=Anterior
+background_color=Color de fondo
+baja=Baja
+Bajar_capa=Bajar capa
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bmp=Ficheros de tipo bmp
+Bold=Negrita
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+box=Cajet\u00edn
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+browse=Examinar
+cajetin=Cajet\u00edn
+Calcular_intervalos=Calcular intervalos
+calidad=Calidad
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Cambiar el alto de los elementos seleccionados hasta coincidir con el m\u00e1s alto.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Cambiar el ancho de los elementos seleccionados hasta coincidir con el m\u00e1s ancho.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Cambiar el tama\u00f1o de los elementos seleccionados hasta coincidir con el m\u00e1s grande.
+Cambio_Color=Cambio color
+cambio_nombre=Cambio de nombre
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+Campo_de_etiquetado=Campo de etiquetado
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Capas del localizador
+Centimetros=Cent\u00edmetros
+cerrar=Cerrar
+Cerrar=Cerrar
+change=Cambiar
+change_before=Posicionar delante
+change_behind=Posicionar detr\u00e1s
+change_height=Cambiar altura
+change_width=Cambiar anchura
+circulo=C\u00edrculo
+clave=Clave
+close=Cerrar
+coincidir_tamanyo=Coincidir tama\u00f1o
+colocar_a_margenes=Colocar con referencia a margenes.
+colocar_alrededor_seleccionados=Colocar alrededor de los gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar alrededor de todos los gr\u00e1ficos.
+colocar_delante=Colocar delante
+colocar_detras=Colocar detr\u00e1s
+color=Color\:
+Color_final=Color final\:
+Color_inicio=Color de inicio
+color_texto=Color del texto\:
+comentarios=Comentarios
+comenzar_edicion=Comenzar edici\u00c3\u00b3n
+compleja=Compleja
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+confirmar_borrar=\u00bfSeguro que desea borrar el elemento?
+conflicto_de_nombres_de_mapas_al_pegar=Se est\u00e1 intentando pegar mapas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_tablas_al_pegar=Se est\u00e1 intentando pegar tablas cuyos nombres ya existen en el proyecto actual
+conflicto_de_nombres_de_vistas_al_pegar=Se est\u00e1 intentando pegar vistas cuyos nombres ya existen en el proyecto actual
+conflito_de_nombres_de_tablas_al_pegar=Conflicto de nombres de tablas al pegar
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+consulta=Consulta
+Contengan=Contengan
+contraste=Contraste
+coordenadas_erroneas=Coordenadas erroneas
+coor_geograficas=Coordenadas geogr\u00e1ficas
+copiar=Copiar
+copy=Copiar
+cortar=Cortar
+creation_date=Fecha de creaci\u00f3n
+Crucen_con=Crucen con
+cuando_activo=Cuando activo
+cut=Cortar
+Dado_un_campo_de_atributos=Dado un campo de atributos
+datum=Datum
+debera_introducir_nombres_para_las_vistas_a_pegar=Deber\u00e1 introducir nombres nuevos para las vistas
+debera_introducir_nombres_para_los_mapas_a_pegar=Deber\u00e1 introducir nombres nuevos para los mapas
+default_projection=Proyecci\u00f3n por defecto
+default_value=Valor por defecto
+dehacer=Deshacer
+delete_field=Borrar campo
+Derecha=Derecha
+Derecho=Derecho
+desagrupar=Desagrupar
+desagrupar_capas=Desagrupar capas
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Orden descendente
+descending_order_tooltip=Ordena por el campo seleccionado en orden descendente
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Si desea utilizar valores comunes a todos los atributos de la capa deje los valores por defecto. Si desea personalizar como se muestran la etiquetas seleccione los campos que almacenan los valores.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Con esta herramienta puede crear una capa virtual basada en una capa ya existente que le permita realizar un etiquetado avanzado. Cambia la visualizaci\u00c3\u00b3n de la capa seleccionada mostrando el valor<br> de uno de sus campos.</HTML>
+desde_arriba=Desde arriba\:
+desde_izquierda=Desde la izquierda\:
+desea_borrar_el_documento=\u00bfEst\u00e1 seguro de que desea borrar los documentos seleccionados?
+desea_borrar_la_capa=\u00bfEst\u00e1 seguro de que desea borrar las capas activas?
+desea_continuar=\u00bfDesea continuar?
+deshacer=Deshacer
+desplaza_los_elementos_seleccionados_a_la_derecha=Desplaza los elementos seleccionados a la derecha.
+desplaza_los_elementos_seleccionados_a_la_izquierda=Desplaza los elementos seleccionados a la izquierda.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Desplaza los elementos seleccionados al centro por el eje X.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Desplaza los elementos seleccionados al centro por el eje Y.
+desplaza_los_elementos_seleccionados_hacia_abajo=Desplaza los elementos seleccionados hacia abajo.
+desplaza_los_elementos_seleccionados_hacia_arriba=Desplaza los elementos seleccionados hacia arriba.
+Desplazamiento=Desplazamiento
+desviacion_tipica=Desviaci\u00f3n t\u00edpica
+distance_units=Unidades de medida
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=Distribuir los elementos sobre todo el Layout.
+distributes_down=Distribuye desde abajo
+distributes_horizontal=Distribuye horizontalmente
+distributes_left=Distribuye a la izquierda
+distributes_right=Distribuye a la derecha
+distributes_to_layout_down=Distribuye desde abajo del layout
+distributes_to_layout_horizontal=Distribuye layout horizontalmente
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=Distribuye derecha del layout
+distributes_to_layout_up=Distribuye desde arriba del Layout
+distributes_to_layout_vertical=Distribuye layout verticalmente
+distributes_up=Distribuye desde arriba
+distributes_vertical=Distribuye verticalmente
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Distribuye el espacio entre los elementos en horizontal.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Distribuye el espacio entre los elementos en vertical.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Distribuye los elementos seleccionados de forma equidistante de abajo hacia arriba.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Distribuye los elementos seleccionados de forma equidistante de arriba hacia abajo.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Distribuye los elementos seleccionados de forma equidistante de derecha a izquierda.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Distribuye los elementos seleccionados de forma equidistante de izquierda a derecha.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Distribuye los elementos seleccionados de forma equidistante y horizontal.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Distribuye los elementos seleccionados de forma equidistante y vertical.
+divisiones_izquierda=Divisiones a la izquierda
+documento=Documento
+documentos_existentes=Documentos existentes
+draw_text_only=Dibujar s\u00f3lo el texto
+driver=Driver
+Dxffiles=Ficheros .DXF
+edicion=Edici\u00f3n
+editable=Editable
+Editar_leyenda=Editar leyenda
+editar_vertices=Editar V\u00e9rtices
+el_numero_maximo_de_intervalos_para_este_campo_es=El n\u00famero m\u00e1ximo de intervalos para este campo es
+Elegir_Color=Elegir color
+Elegir_Fuente=Elegir fuente
+elemento_ya_existe=El elemento ya existe
+Elementos_seleccionados_de_la_capa=Elementos seleccionados de la capa
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=Eliminar columna
+eliminar_extremos=Eliminar extremos
+eliminar_fila=Eliminar fila
+en_el_mapa=En el mapa\:
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=en unidades
+Encuadre=Encuadre
+Encuadre_Vista=Encuadre sobre la vista
+enlace_vivo=Enlace vivo
+Enlazar_a_fichero_de_texto=Enlazar a ficheros de texto
+Enlazar_a_ficheros_de_imagen=Enlazar a ficheros de imagen
+equal_intervals=Intervalos iguales
+Error_exportando_SLD=Error exportando SLD
+Error_guardando_la_leyenda=Error guardando la leyenda
+Error_guardando_la_plantilla=Error guardando la plantilla
+escala=Escala
+Escala=Escala
+escala_desconocida=Escala desconocida
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada por el usuario
+espaciado_horizontal=Espaciado horizontal de la malla
+espaciado_vertical=Espaciado vertical de la malla
+espacio=Espacio\:
+estadisticas=Estad\u00edsticas
+este_por_debajo_de_=Est\u00e9 por debajo de
+este_por_encima_de=Est\u00e9 por encima de
+Esten_contenidos_en=Est\u00e9n contenidos en
+Etiqueta=Etiqueta
+Etiquetados=Etiquetados
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extensi\u00f3n
+Extent=Extensi\u00f3n
+extents_no_coincidentes=Extensiones no coincidentes
+factor_zoom_incorrecto=Factor de zoom incorrecto.
+fallo_capas=Fallo accediendo a las capas. Las siguientes capas van a ser eliminadas del proyecto
+family=Familia
+fichero=Archivo
+Fichero=Archivo
+fichero_existe=Fichero existe
+fichero_incorrecto=Fichero incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=El fichero ya existe, \u00bfdesea continuar?
+field_already_exists=El campo ya existe
+field_decimal_count=Precisi\u00f3n decimal
+field_default_value=Valor por defecto
+field_length=Tama\u00f1o
+field_manager=Editor de campos
+field_name=Nombre del campo
+field_type=Tipo
+Filtros=Filtros
+filters=Filtros
+filtro_de=Filtro de
+filtro=Filtro
+finish=Finalizar
+Font=Fuente
+formato=Formato
+Formato_de_numero_erroneo=Formato de n\u00famero incorrecto
+formato_incorrecto=Formato incorrecto
+fuente=Fuente
+General=General
+georeferenciado=Georeferenciado
+gestion_encuadre=Gesti\u00f3n de Encuadres
+grados=Grados\:
+Grados=Grados
+Graficos=Gr\u00e1ficos
+grosor_linea=Grosor de l\u00ednea\:
+group=Agrupar
+group_graphic_line=Agrupar l\u00ednea gr\u00e1fica
+grupo=grupo
+guardado=Guardado en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=\u00bfQuiere guardar los cambios?
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar leyenda
+guardar_proyecto=Guardar proyecto
+guardar_tooltip=Guarda los cambios del proyecto
+Habilitar_etiquetado=Habilitar etiquetado
+Hiperenlace=Hiperenlace
+histograma=Histograma
+horizontal=Horizontal
+horizontal_space=Espacio horizontal
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual que la impresora
+igual_todos_lados=Desplazamiento igual por todos lados.
+imagen=Imagen
+Implimir=Imprimir
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente la capa
+indexar_campos=Indexar campos
+Inferior=Inferior
+info=Informaci\u00f3n
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+Inicializando=Inicializando
+initial_warning=<html><b>\u00a1ATENCI\u00d3N\!</b><br>Versi\u00f3n en desarrollo. Puede contener errores importantes e incluso provocar da\u00f1os en los ficheros editados.<br><br>Si desea trabajar de forma normal con gvSIG, le recomendamos que utilice la \u00faltima versi\u00f3n estable.</html>
+insert_row=Insertar fila
+Insertar=Insertar
+insertar_cajetin=Insertar cajet\u00edn
+insertar_circulo=Insertar c\u00edrculo
+insertar_columna=Insertar columna
+insertar_escala=Insertar escala
+insertar_fila=Insertar fila
+insertar_imagen=Insertar imagen
+insertar_leyenda=Insertar leyenda
+insertar_linea=Insertar l\u00ednea
+insertar_norte=Insertar norte
+insertar_poligono=Insertar Pol\u00edgono
+insertar_polilinea=Insertar polil\u00ednea
+insertar_punto=Insertar punto
+insertar_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten con
+Intervalo=Intervalo
+Intervalos=Intervalos
+introduce_nombre=Introduce el nuevo nombre
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Introduzca el nombre para la nueva capa de anotaciones
+introduzca_nuevo_nombre_para_la_vista=Introduzca el nuevo nombre para la vista
+invalid_value_for_gap=Valor inv\u00c3\u00a1lido para el intervalo
+invert_selection=Invertir selecci\u00f3n
+Italic=Cursiva
+Izquierda=Izquierda
+Izquierdo=Izquierdo
+join=Unir
+jpg=Ficheros JPEG
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+leyenda=Leyenda
+Leyenda=Leyenda
+leyenda_campo_unido=Se est\u00e1 utilizando un campo de la uni\u00f3n en la leyenda (y/o etiquetado). Cambie la leyenda antes de quitar la uni\u00f3n, por favor.
+Leyenda_Por_Defecto=Leyenda por defecto
+linea=L\u00ednea
+linea_grafica=L\u00ednea gr\u00e1fica
+lineal_directo=Lineal directo
+link=Enlace
+Link=Enlace
+localizador=Localizador
+locked_element=Elemento bloqueado
+locked_element_it_cannot_be_deleted=Elemento bloqueado.\nNo puede ser borrado.
+locked_element_it_cannot_be_renamed=Elemento bloqueado.\nNo puede ser renombrado.
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=Modificar estructura de tabla
+mantener_intervalo=Mantener intervalo
+map_units=Unidades de mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco de la vista
+margenes=M\u00e1rgenes\:
+mas_de_100_simbolos=M\u00e1s 100 de s\u00edmbolos no suelen aportar informaci\u00f3n en un plano.
+max_length_is=La longitud m\u00e1xima es
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=\u00bfEst\u00e1 seguro de que quiere salir?
+MDIFrame.salir=Salir
+media=Media
+medir_area=Medir \u00e1rea
+medir_distancias=Medir distancias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+minimo=M\u00ednimo
+modificar=modificar
+modification_date=\u00daltima fecha de modificaci\u00f3n
+mostrar_escala_numerica=Mostrar escala num\u00e9rica
+Mostrar_siempre=Mostrar siempre
+mostrar_unidades=Mostrar unidades
+move_elements=Desplazar elementos
+Muestra_atributos=Muestra los atributos de las capas seleccionadas.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Muestra los elementos de la capa usando un s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Muestra los elementos de la capa usando una gama de colores en funci\u00f3n del valor de un determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Muestra todos los elementos de una capa usando el mismo s\u00edmbolo
+natural_intervals=Intervalos naturales
+navegacion=Navegaci\u00f3n
+navegacion_vista=Navegaci\u00f3n vista
+necesita_una_capa_activa=Necesita una capa activa
+necesita_una_capa_vectorial_activa=Necesita una capa vectorial activa
+new_field=Nuevo campo
+new_field_properties=Propiedades del campo nuevo
+next=Siguiente
+ninguna_impresora_configurada=Ninguna impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=No
+no_activos=No activos
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=No es posible aplicar la leyenda vac\u00eda.
+No_ha_sido_posible_realizar_la_operacion=No ha sido posible realizar la operaci\u00f3n
+No_mostrar=No mostrar la capa cuando la escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa cuando la escala
+no_se_pegaran_las_tablas=No se pegar\u00e1 ninguna tabla
+no_se_pegaran_las_vistas_del_conflicto=No se pegar\u00e1n las vistas con conflicto
+No_se_pudo_obtener_la_tabla_de_la_capa=No se pudo obtener la tabla de la capa
+no_visibles=No visibles
+nombre=Nombre
+Nombre=Nombre
+nombre_no_valido=Nombre no v\u00e1lido
+Nombre_que_se_le_dara_al_zoom=Nombre que se le dar\u00e1 al zoom
+nombre_sesion=Nombre de la sesi\u00f3n
+none=None
+none_selected=Ninguno seleccionado
+normal=Normal
+north=Norte
+Nueva_tabla=Nueva tabla
+nuevo=Nuevo
+Nuevo_conjunto=Nuevo conjunto
+nuevo_nombre_para_el_mapa=Introduzca el nuevo nombre para la capa
+nuevo_proyecto=Nuevo proyecto
+nuevo_tooltip=Crea un nuevo proyecto
+num_bandas=N\u00famero de bandas
+num_columnas=N\u00famero de columnas
+num_filas=N\u00famero de filas
+Num_intervalos=N\u00famero de intervalos
+numero_decimales_mostrar=N\u00famero decimales
+numero_incorrecto=N\u00famero incorrecto
+ok=Aceptar
+opacidad=Opacidad
+operacion_cancelada=Operaci\u00f3n cancelada
+options.layout.paper_properties.landscaped=Apaisado
+options.layout.paper_properties.paper_direction=Orientaci\u00f3n del papel
+options.layout.paper_properties.portrait=Normal
+options.layout.paper_properties.title=Propiedades y tama\u00f1o del papel
+options.view.default_map_overview_back_color=Color de fondo del localizador por defecto
+options.view.default_selection_color=Color de la selecci\u00f3n por defecto
+options.view.default_view_back_color=Color de fondo de la vista por defecto
+options.view.invisible_new_layers=A\u00f1adir nuevas capas en modo invisible
+options.view.keep_scale_on_resizing=Mantener escala al redimensionar
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de datos
+Origen_de_datos=Origen de datos
+Origen_de_Datos=Origen de datos\:
+owner=Propietario
+paleta=Tablas de color
+palette_not_create=No se ha podido crear la paleta a partir de la tabla
+paste=Pegar
+paste_elements=Pegar elementos
+path=Ruta
+pdf=Pdf
+pegar=Pegar
+pegar_mapas=Pegar mapas
+pegar_vistas=Pegar vistas
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar los elementos del mapa con el valor de un determinado campo
+Personalizado=Personalizado
+personalizar_margenes=Personalizar m\u00e1rgenes
+Pies=Pies
+pila_de_comandos=Pila de comandos
+pixeles=p\u00edxeles
+pixels=p\u00edxeles
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=Por favor inserte nuevo nombre de campo.
+png=Ficheros png
+poligono=Pol\u00edgono
+polilinea=polil\u00ednea
+poner_capas_a=Poner capas a ...
+por_debajo_de=por debajo de\:
+por_encima_de=por encima de\:
+Por_favor_active_la_capa=Por favor active la capa
+posicion_linea=Posici\u00f3n de la l\u00ednea
+precision=Precisi\u00f3n
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Presentaci\u00f3n
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=Previsualizaci\u00f3n de s\u00edmbolo
+projection=Proyecci\u00f3n
+propiedad=Propiedad
+propiedades=Propiedades
+propiedades_cajetin=Propiedades del cajet\u00edn
+propiedades_capa=Propiedades de la capa
+propiedades_de_la_capa=Propiedades de la capa
+Propiedades_escala_grafica=Propiedades de la escala
+propiedades_grafico=Propiedades del gr\u00e1fico
+propiedades_mapa=Propiedades del mapa
+propiedades_marco_imagenes=Propiedades del marco de im\u00e1genes
+propiedades_marco_leyenda=Propiedades del marco de la leyenda
+propiedades_marco_vista=Propiedades del marco de la vista
+propiedades_raster=Propiedades del r\u00e1ster
+propiedades_sesion=Propiedades de la sesi\u00f3n
+propiedades_tabla=Propiedades de la tabla
+Propiedades_texto=Propiedades del texto
+propiedades_vista=Propiedades de la vista
+Proyecciones=Proyecciones
+ps=Ps
+puerto=Puerto
+Pulgadas=Pulgadas
+punto=Punto
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=\u00bfEst\u00e1 seguro de que quiere continuar?
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar enlaces
+Quitar_todos=Quitar todos
+quitar_uniones=Quitar uniones
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+realce=Realce
+realmente_desea_guardar=\u00bfRealmente desea guardar?
+recargar=Recargar
+recorte=Recorte
+recorte_colas=Recorte de colas
+recorte_vista=Recorte a vista
+rectangulo=Rect\u00e1ngulo
+recuento=Recuento
+Recuperar_leyenda=Recuperar leyenda
+Recuperar_y_eliminar_otros_zoom=Recuperar y eliminar otros zooms
+reference_system=Sistema de Referencia
+refrescar=Refrescar
+registros_seleccionados_total=Total registros seleccionados
+rehacer=Rehacer
+rellenar_marco_vista=Rellenar marco de la vista
+relleno=Relleno\:
+remove_elements=Borrar elementos
+remove_fields=Borrar campos
+remove_row=Elimina fila
+remove_rows=Elimina filas
+rename_field=Renombrar Campo
+renombrar=Renombrar
+reproyectar_aviso=La proyecci\u00f3n de la capa no es igual que la de la vista.\nAVISO\: Puede ser inexacto con algunas transformaciones.\nPor favor, lea la documentaci\u00f3n.
+reproyectar_pregunta=\u00bfDesea reproyectar?
+resolucion_resultado=Resoluci\u00f3n del resultado\:
+resto_valores=Resto de valores
+restore_palette=Restaurar paleta
+rotation_field=Campo de rotaci\u00f3n
+salir=Salir
+salir_tooltip=Salir
+salvar_raster=Salvar a raster georreferenciado.
+Sample=Ejemplo
+Se_superponen_a=Se superponen a
+Sean_disjuntos_a=sean disjuntos a
+Sean_iguales_a=sean iguales a
+seleccion=Selecci\u00f3n
+seleccion_fuente=Selecci\u00f3n de fuente
+Seleccion_por_capa=Selecci\u00f3n por capa
+selecciona_sistema_de_referencia=Selecciona sistema de referencia
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=Seleccionar capas r\u00e1ster
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar de las capas activas los elementos que\:
+Seleccionar_del_conjunto=Seleccionar del conjunto
+Seleccionar_fichero=Seleccionar fichero
+seleccionar_por_poligono=Seleccionar por pol\u00edgono
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione el campo por el que enlazar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Seleccione el campo donde se almacenar\u00e1 el \u00e1ngulo con el que se mostrar\u00e1 el texto de la etiqueta</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el color con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Seleccione el campo de texto que desea que se utilice para mostrar en la nueva capa virtual.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 la fuente con el que se mostrar\u00e1 de la etiqueta</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Selecione el campo donde se almacenar\u00e1 el alto con el que se mostrar\u00e1 la etiqueta</HTML>
+seleccione_fecha=Seleccione una fecha...
+seleccione_tabla_a_enlazar=Seleccione la tabla a enlazar
+seleccione_tabla_origen=Seleccione la tabla origen de la join
+selection_color=Color de la selecci\u00f3n
+selection_up=Mover arriba la selecci\u00f3n
+separator=Separador
+Servidor=Servidor
+Shapefile=Shapefile
+show_this_dialog_next_startup=Mostrar este di\u00e1logo la pr\u00f3xima vez
+si=s\u00ed
+siempre=Siempre
+simbolo=S\u00edmbolo
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbolog\u00eda
+simplificar_leyenda=Simplificar leyenda
+simplify=Simplificar
+sin_titulo=Sin t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar el color del borde con el del relleno\:
+Size=Tama\u00f1o
+sobre_la_barra=Sobre la barra
+Solo_para_capas_vectoriales=S\u00f3lo para capas vectoriales
+start_edition=Comenzar edici\u00f3n
+statistics=Estad\u00edsticas
+stop_edition=Terminar edici\u00f3n
+Style=Estilo
+Subir_capa=Subir capa
+suma=Suma
+Superior=Superior
+symbol_selector=Selector de simbolog\u00c3\u00ada
+Tabla=Tabla
+Tabla_de_Atributos=Tabla de atributos
+tablas=Tablas
+Tablas=Tablas
+table_not_create=No se ha podido crear la tabla
+tag=tag
+tamano=Tama\u00f1o\:
+tamano_metros=Tama\u00f1o en metros
+tamano_pagina=Tama\u00f1o de p\u00e1gina\:
+tamano_posicion=tama\u00f1o/posici\u00f3n
+tamanyo_borde=Tama\u00f1o del borde
+tamanyo_fuente=Tama\u00f1o de fuente
+tamanyo_pagina=Tama\u00f1o de p\u00e1gina
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+terminar=Terminar
+terminar_edicion=Terminar edici\u00f3n
+texto=Texto
+this_table_is_not_self_editable=La tabla no tiene permiso de escritura.
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de leyenda
+tipo_fichero_proyecto=Fichero de proyecto gvSIG (*.GVP)
+tipo_linea=Tipo de L\u00ednea\:
+tipo_relleno=Tipo de Relleno\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Gestor de proyectos
+titulo_fframetext=T\u00edtulo del campo de texto
+to_annotation=Transformar a capa de anotationes
+to_palette=Cambiar a paleta
+tooltip_copiar_al_portapapeles=Copiar al portapapeles
+tooltip_cortar_al_portapapeles=Cortar al cortapapeles
+tooltip_pegar_desde_el_portapapeles=Pegar desde el cortapapeles
+Toquen=toquen
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por pixel
+ungroup=Desagrupar
+unidades=Unidades\: 
+Unidades=Unidades\: 
+untitled=Sin t\u00edtulo
+url=url
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Usar marco
+usar_titulo=Usar t\u00edtulo
+usuario=Usuario
+utilizar_margenes_impresora=Utilizar m\u00e1rgenes de la impresora.
+vacia=Vac\u00eda
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varianza
+Ventana=Ventana
+ventana_proyecto=Ventana de proyecto
+Ver=Ver
+ver_error_capa=Ver errores
+ver_tabla_atributos=Ver Tabla de atributos
+ver_tags=Ver
+ver_tooltip=Muestra la ventana de proyecto
+vertical=Vertical
+vertical_space=Espacio vertical
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+xmax=xmax
+xmin=xmin
+Yardas=Yardas
+ymax=ymax
+ymin=ymin
+zone=Huso
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acercar
+Zoom_Alejar=Zoom alejar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre la vista
+zoom_in_factor=Factor zoom m\u00e1s
+Zoom_Mas=Zoom m\u00e1s
+Zoom_Mas_Vista=Zoom m\u00e1s sobre la vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre la vista
+zoom_out_factor=Factor zoom menos
+Zoom_pixel=Zoom a la resoluci\u00f3n del r\u00e1ster
+Zoom_Previo=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a lo seleccionado

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/palettes.xml
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/palettes.xml	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/palettes.xml	(revision 10281)
@@ -0,0 +1,6114 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<palettes>
+	<palette_list>
+		<name>Ninguna</name>
+		<name>purple-red+stripes</name>
+		<name>blue-white</name>
+		<name>ocean</name>
+		<name>red-temperature</name>
+		<name>16level</name>
+		<name>blue-green-red-yellow</name>
+		<name>blue-pastel-red</name>
+		<name>blue-red</name>
+		<name>blue-waves</name>
+		<name>green-red-blue</name>
+		<name>green-white-exponential</name>
+		<name>hardcandy</name>
+		<name>haze</name>
+		<name>mac-style</name>
+		<name>nature</name>
+		<name>pastels</name>
+		<name>plasma</name>
+		<name>prism</name>
+		<name>rainbow</name>
+		<name>red-purple</name>
+		<name>std-gamma-II</name>
+		<name>steps</name>
+		<name>stern-special</name>
+		<name>MDT1</name>
+		<name>MDT2</name>
+		<name>CLASIFICACION</name>
+	</palette_list>
+	<palette name="purple-red+stripes" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,0" value="1" />
+			<entry class="" argb="255,127,127,127" value="2" />
+			<entry class="" argb="255,191,0,191" value="3" />
+			<entry class="" argb="255,188,0,192" value="4" />
+			<entry class="" argb="255,186,0,192" value="5" />
+			<entry class="" argb="255,184,0,193" value="6" />
+			<entry class="" argb="255,182,0,194" value="7" />
+			<entry class="" argb="255,179,0,195" value="8" />
+			<entry class="" argb="255,177,0,195" value="9" />
+			<entry class="" argb="255,140,0,157" value="10" />
+			<entry class="" argb="255,138,0,157" value="11" />
+			<entry class="" argb="255,170,0,198" value="12" />
+			<entry class="" argb="255,168,0,198" value="13" />
+			<entry class="" argb="255,165,0,199" value="14" />
+			<entry class="" argb="255,163,0,200" value="15" />
+			<entry class="" argb="255,161,0,201" value="16" />
+			<entry class="" argb="255,158,0,202" value="17" />
+			<entry class="" argb="255,156,0,202" value="18" />
+			<entry class="" argb="255,154,0,203" value="19" />
+			<entry class="" argb="255,121,0,163" value="20" />
+			<entry class="" argb="255,119,0,164" value="21" />
+			<entry class="" argb="255,147,0,205" value="22" />
+			<entry class="" argb="255,145,0,206" value="23" />
+			<entry class="" argb="255,142,0,207" value="24" />
+			<entry class="" argb="255,140,0,208" value="25" />
+			<entry class="" argb="255,138,0,208" value="26" />
+			<entry class="" argb="255,135,0,209" value="27" />
+			<entry class="" argb="255,133,0,210" value="28" />
+			<entry class="" argb="255,131,0,211" value="29" />
+			<entry class="" argb="255,103,0,169" value="30" />
+			<entry class="" argb="255,101,0,170" value="31" />
+			<entry class="" argb="255,124,0,213" value="32" />
+			<entry class="" argb="255,122,0,214" value="33" />
+			<entry class="" argb="255,119,0,215" value="34" />
+			<entry class="" argb="255,117,0,215" value="35" />
+			<entry class="" argb="255,115,0,216" value="36" />
+			<entry class="" argb="255,112,0,217" value="37" />
+			<entry class="" argb="255,110,0,218" value="38" />
+			<entry class="" argb="255,108,0,218" value="39" />
+			<entry class="" argb="255,84,0,175" value="40" />
+			<entry class="" argb="255,82,0,176" value="41" />
+			<entry class="" argb="255,101,0,221" value="42" />
+			<entry class="" argb="255,99,0,221" value="43" />
+			<entry class="" argb="255,96,0,222" value="44" />
+			<entry class="" argb="255,94,0,223" value="45" />
+			<entry class="" argb="255,92,0,224" value="46" />
+			<entry class="" argb="255,89,0,225" value="47" />
+			<entry class="" argb="255,87,0,225" value="48" />
+			<entry class="" argb="255,85,0,226" value="49" />
+			<entry class="" argb="255,66,0,181" value="50" />
+			<entry class="" argb="255,64,0,182" value="51" />
+			<entry class="" argb="255,78,0,228" value="52" />
+			<entry class="" argb="255,76,0,229" value="53" />
+			<entry class="" argb="255,73,0,230" value="54" />
+			<entry class="" argb="255,71,0,231" value="55" />
+			<entry class="" argb="255,69,0,231" value="56" />
+			<entry class="" argb="255,66,0,232" value="57" />
+			<entry class="" argb="255,64,0,233" value="58" />
+			<entry class="" argb="255,62,0,234" value="59" />
+			<entry class="" argb="255,47,0,188" value="60" />
+			<entry class="" argb="255,46,0,188" value="61" />
+			<entry class="" argb="255,55,0,236" value="62" />
+			<entry class="" argb="255,52,0,237" value="63" />
+			<entry class="" argb="255,50,0,238" value="64" />
+			<entry class="" argb="255,48,0,238" value="65" />
+			<entry class="" argb="255,46,0,239" value="66" />
+			<entry class="" argb="255,43,0,240" value="67" />
+			<entry class="" argb="255,41,0,241" value="68" />
+			<entry class="" argb="255,39,0,241" value="69" />
+			<entry class="" argb="255,29,0,194" value="70" />
+			<entry class="" argb="255,27,0,194" value="71" />
+			<entry class="" argb="255,32,0,244" value="72" />
+			<entry class="" argb="255,29,0,245" value="73" />
+			<entry class="" argb="255,27,0,245" value="74" />
+			<entry class="" argb="255,25,0,246" value="75" />
+			<entry class="" argb="255,23,0,247" value="76" />
+			<entry class="" argb="255,20,0,248" value="77" />
+			<entry class="" argb="255,18,0,248" value="78" />
+			<entry class="" argb="255,16,0,249" value="79" />
+			<entry class="" argb="255,11,0,200" value="80" />
+			<entry class="" argb="255,9,0,200" value="81" />
+			<entry class="" argb="255,9,0,251" value="82" />
+			<entry class="" argb="255,6,0,252" value="83" />
+			<entry class="" argb="255,4,0,253" value="84" />
+			<entry class="" argb="255,2,0,254" value="85" />
+			<entry class="" argb="255,0,0,255" value="86" />
+			<entry class="" argb="255,0,6,255" value="87" />
+			<entry class="" argb="255,0,12,255" value="88" />
+			<entry class="" argb="255,0,18,255" value="89" />
+			<entry class="" argb="255,0,19,204" value="90" />
+			<entry class="" argb="255,0,24,204" value="91" />
+			<entry class="" argb="255,0,36,255" value="92" />
+			<entry class="" argb="255,0,42,255" value="93" />
+			<entry class="" argb="255,0,48,255" value="94" />
+			<entry class="" argb="255,0,54,255" value="95" />
+			<entry class="" argb="255,0,60,255" value="96" />
+			<entry class="" argb="255,0,66,255" value="97" />
+			<entry class="" argb="255,0,72,255" value="98" />
+			<entry class="" argb="255,0,78,255" value="99" />
+			<entry class="" argb="255,0,68,204" value="100" />
+			<entry class="" argb="255,0,72,204" value="101" />
+			<entry class="" argb="255,0,97,255" value="102" />
+			<entry class="" argb="255,0,103,255" value="103" />
+			<entry class="" argb="255,0,109,255" value="104" />
+			<entry class="" argb="255,0,115,255" value="105" />
+			<entry class="" argb="255,0,121,255" value="106" />
+			<entry class="" argb="255,0,127,255" value="107" />
+			<entry class="" argb="255,0,133,255" value="108" />
+			<entry class="" argb="255,0,139,255" value="109" />
+			<entry class="" argb="255,0,116,204" value="110" />
+			<entry class="" argb="255,0,121,204" value="111" />
+			<entry class="" argb="255,0,157,255" value="112" />
+			<entry class="" argb="255,0,163,255" value="113" />
+			<entry class="" argb="255,0,170,255" value="114" />
+			<entry class="" argb="255,0,176,255" value="115" />
+			<entry class="" argb="255,0,182,255" value="116" />
+			<entry class="" argb="255,0,188,255" value="117" />
+			<entry class="" argb="255,0,194,255" value="118" />
+			<entry class="" argb="255,0,200,255" value="119" />
+			<entry class="" argb="255,0,165,204" value="120" />
+			<entry class="" argb="255,0,170,204" value="121" />
+			<entry class="" argb="255,0,218,255" value="122" />
+			<entry class="" argb="255,0,224,255" value="123" />
+			<entry class="" argb="255,0,230,255" value="124" />
+			<entry class="" argb="255,0,236,255" value="125" />
+			<entry class="" argb="255,0,242,255" value="126" />
+			<entry class="" argb="255,0,248,255" value="127" />
+			<entry class="" argb="255,0,255,255" value="128" />
+			<entry class="" argb="255,0,255,248" value="129" />
+			<entry class="" argb="255,0,204,194" value="130" />
+			<entry class="" argb="255,0,204,189" value="131" />
+			<entry class="" argb="255,0,255,230" value="132" />
+			<entry class="" argb="255,0,255,224" value="133" />
+			<entry class="" argb="255,0,255,218" value="134" />
+			<entry class="" argb="255,0,255,212" value="135" />
+			<entry class="" argb="255,0,255,206" value="136" />
+			<entry class="" argb="255,0,255,200" value="137" />
+			<entry class="" argb="255,0,255,194" value="138" />
+			<entry class="" argb="255,0,255,188" value="139" />
+			<entry class="" argb="255,0,204,145" value="140" />
+			<entry class="" argb="255,0,204,140" value="141" />
+			<entry class="" argb="255,0,255,169" value="142" />
+			<entry class="" argb="255,0,255,163" value="143" />
+			<entry class="" argb="255,0,255,157" value="144" />
+			<entry class="" argb="255,0,255,151" value="145" />
+			<entry class="" argb="255,0,255,145" value="146" />
+			<entry class="" argb="255,0,255,139" value="147" />
+			<entry class="" argb="255,0,255,133" value="148" />
+			<entry class="" argb="255,0,255,127" value="149" />
+			<entry class="" argb="255,0,204,97" value="150" />
+			<entry class="" argb="255,0,204,92" value="151" />
+			<entry class="" argb="255,0,255,109" value="152" />
+			<entry class="" argb="255,0,255,103" value="153" />
+			<entry class="" argb="255,0,255,97" value="154" />
+			<entry class="" argb="255,0,255,91" value="155" />
+			<entry class="" argb="255,0,255,84" value="156" />
+			<entry class="" argb="255,0,255,78" value="157" />
+			<entry class="" argb="255,0,255,72" value="158" />
+			<entry class="" argb="255,0,255,66" value="159" />
+			<entry class="" argb="255,0,204,48" value="160" />
+			<entry class="" argb="255,0,204,43" value="161" />
+			<entry class="" argb="255,0,255,48" value="162" />
+			<entry class="" argb="255,0,255,42" value="163" />
+			<entry class="" argb="255,0,255,36" value="164" />
+			<entry class="" argb="255,0,255,30" value="165" />
+			<entry class="" argb="255,0,255,24" value="166" />
+			<entry class="" argb="255,0,255,18" value="167" />
+			<entry class="" argb="255,0,255,12" value="168" />
+			<entry class="" argb="255,0,255,6" value="169" />
+			<entry class="" argb="255,0,204,0" value="170" />
+			<entry class="" argb="255,4,204,0" value="171" />
+			<entry class="" argb="255,12,255,0" value="172" />
+			<entry class="" argb="255,18,255,0" value="173" />
+			<entry class="" argb="255,24,255,0" value="174" />
+			<entry class="" argb="255,30,255,0" value="175" />
+			<entry class="" argb="255,36,255,0" value="176" />
+			<entry class="" argb="255,42,255,0" value="177" />
+			<entry class="" argb="255,48,255,0" value="178" />
+			<entry class="" argb="255,54,255,0" value="179" />
+			<entry class="" argb="255,48,204,0" value="180" />
+			<entry class="" argb="255,53,204,0" value="181" />
+			<entry class="" argb="255,72,255,0" value="182" />
+			<entry class="" argb="255,78,255,0" value="183" />
+			<entry class="" argb="255,85,255,0" value="184" />
+			<entry class="" argb="255,91,255,0" value="185" />
+			<entry class="" argb="255,97,255,0" value="186" />
+			<entry class="" argb="255,103,255,0" value="187" />
+			<entry class="" argb="255,109,255,0" value="188" />
+			<entry class="" argb="255,115,255,0" value="189" />
+			<entry class="" argb="255,97,204,0" value="190" />
+			<entry class="" argb="255,102,204,0" value="191" />
+			<entry class="" argb="255,133,255,0" value="192" />
+			<entry class="" argb="255,139,255,0" value="193" />
+			<entry class="" argb="255,145,255,0" value="194" />
+			<entry class="" argb="255,151,255,0" value="195" />
+			<entry class="" argb="255,157,255,0" value="196" />
+			<entry class="" argb="255,163,255,0" value="197" />
+			<entry class="" argb="255,170,255,0" value="198" />
+			<entry class="" argb="255,176,255,0" value="199" />
+			<entry class="" argb="255,145,204,0" value="200" />
+			<entry class="" argb="255,150,204,0" value="201" />
+			<entry class="" argb="255,194,255,0" value="202" />
+			<entry class="" argb="255,200,255,0" value="203" />
+			<entry class="" argb="255,206,255,0" value="204" />
+			<entry class="" argb="255,212,255,0" value="205" />
+			<entry class="" argb="255,218,255,0" value="206" />
+			<entry class="" argb="255,224,255,0" value="207" />
+			<entry class="" argb="255,230,255,0" value="208" />
+			<entry class="" argb="255,236,255,0" value="209" />
+			<entry class="" argb="255,194,204,0" value="210" />
+			<entry class="" argb="255,199,204,0" value="211" />
+			<entry class="" argb="255,255,255,0" value="212" />
+			<entry class="" argb="255,255,248,2" value="213" />
+			<entry class="" argb="255,255,242,5" value="214" />
+			<entry class="" argb="255,255,235,7" value="215" />
+			<entry class="" argb="255,255,229,10" value="216" />
+			<entry class="" argb="255,255,223,12" value="217" />
+			<entry class="" argb="255,255,216,15" value="218" />
+			<entry class="" argb="255,255,210,17" value="219" />
+			<entry class="" argb="255,204,163,16" value="220" />
+			<entry class="" argb="255,204,158,18" value="221" />
+			<entry class="" argb="255,255,191,25" value="222" />
+			<entry class="" argb="255,255,184,28" value="223" />
+			<entry class="" argb="255,255,178,30" value="224" />
+			<entry class="" argb="255,255,172,33" value="225" />
+			<entry class="" argb="255,255,165,35" value="226" />
+			<entry class="" argb="255,255,159,38" value="227" />
+			<entry class="" argb="255,255,153,40" value="228" />
+			<entry class="" argb="255,255,146,43" value="229" />
+			<entry class="" argb="255,204,112,36" value="230" />
+			<entry class="" argb="255,204,107,38" value="231" />
+			<entry class="" argb="255,255,127,51" value="232" />
+			<entry class="" argb="255,255,121,48" value="233" />
+			<entry class="" argb="255,255,115,46" value="234" />
+			<entry class="" argb="255,255,110,44" value="235" />
+			<entry class="" argb="255,255,104,41" value="236" />
+			<entry class="" argb="255,255,98,39" value="237" />
+			<entry class="" argb="255,255,92,37" value="238" />
+			<entry class="" argb="255,255,86,34" value="239" />
+			<entry class="" argb="255,204,64,25" value="240" />
+			<entry class="" argb="255,204,60,24" value="241" />
+			<entry class="" argb="255,255,69,27" value="242" />
+			<entry class="" argb="255,255,63,25" value="243" />
+			<entry class="" argb="255,255,57,23" value="244" />
+			<entry class="" argb="255,255,52,20" value="245" />
+			<entry class="" argb="255,255,46,18" value="246" />
+			<entry class="" argb="255,255,40,16" value="247" />
+			<entry class="" argb="255,255,34,13" value="248" />
+			<entry class="" argb="255,255,28,11" value="249" />
+			<entry class="" argb="255,204,18,7" value="250" />
+			<entry class="" argb="255,204,13,5" value="251" />
+			<entry class="" argb="255,255,11,4" value="252" />
+			<entry class="" argb="255,255,5,2" value="253" />
+			<entry class="" argb="255,255,0,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-white" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,1" value="1" />
+			<entry class="" argb="255,0,0,2" value="2" />
+			<entry class="" argb="255,0,0,4" value="3" />
+			<entry class="" argb="255,0,0,5" value="4" />
+			<entry class="" argb="255,0,0,6" value="5" />
+			<entry class="" argb="255,0,0,8" value="6" />
+			<entry class="" argb="255,0,0,9" value="7" />
+			<entry class="" argb="255,0,0,10" value="8" />
+			<entry class="" argb="255,0,0,12" value="9" />
+			<entry class="" argb="255,0,0,13" value="10" />
+			<entry class="" argb="255,0,0,14" value="11" />
+			<entry class="" argb="255,0,0,16" value="12" />
+			<entry class="" argb="255,0,0,17" value="13" />
+			<entry class="" argb="255,0,0,18" value="14" />
+			<entry class="" argb="255,0,0,20" value="15" />
+			<entry class="" argb="255,0,0,21" value="16" />
+			<entry class="" argb="255,0,0,23" value="17" />
+			<entry class="" argb="255,0,0,24" value="18" />
+			<entry class="" argb="255,0,0,25" value="19" />
+			<entry class="" argb="255,0,0,27" value="20" />
+			<entry class="" argb="255,0,0,28" value="21" />
+			<entry class="" argb="255,0,0,29" value="22" />
+			<entry class="" argb="255,0,0,31" value="23" />
+			<entry class="" argb="255,0,0,32" value="24" />
+			<entry class="" argb="255,0,0,33" value="25" />
+			<entry class="" argb="255,0,0,35" value="26" />
+			<entry class="" argb="255,0,0,36" value="27" />
+			<entry class="" argb="255,0,0,37" value="28" />
+			<entry class="" argb="255,0,0,39" value="29" />
+			<entry class="" argb="255,0,0,40" value="30" />
+			<entry class="" argb="255,0,0,42" value="31" />
+			<entry class="" argb="255,0,0,43" value="32" />
+			<entry class="" argb="255,0,0,44" value="33" />
+			<entry class="" argb="255,0,0,46" value="34" />
+			<entry class="" argb="255,0,0,47" value="35" />
+			<entry class="" argb="255,0,0,48" value="36" />
+			<entry class="" argb="255,0,0,50" value="37" />
+			<entry class="" argb="255,0,0,51" value="38" />
+			<entry class="" argb="255,0,0,52" value="39" />
+			<entry class="" argb="255,0,0,54" value="40" />
+			<entry class="" argb="255,0,0,55" value="41" />
+			<entry class="" argb="255,0,0,56" value="42" />
+			<entry class="" argb="255,0,0,58" value="43" />
+			<entry class="" argb="255,0,0,59" value="44" />
+			<entry class="" argb="255,0,0,61" value="45" />
+			<entry class="" argb="255,0,0,62" value="46" />
+			<entry class="" argb="255,0,0,63" value="47" />
+			<entry class="" argb="255,0,0,65" value="48" />
+			<entry class="" argb="255,0,0,66" value="49" />
+			<entry class="" argb="255,0,0,67" value="50" />
+			<entry class="" argb="255,0,0,69" value="51" />
+			<entry class="" argb="255,0,0,70" value="52" />
+			<entry class="" argb="255,0,0,71" value="53" />
+			<entry class="" argb="255,0,0,73" value="54" />
+			<entry class="" argb="255,0,0,74" value="55" />
+			<entry class="" argb="255,0,0,75" value="56" />
+			<entry class="" argb="255,0,0,77" value="57" />
+			<entry class="" argb="255,0,0,78" value="58" />
+			<entry class="" argb="255,0,0,80" value="59" />
+			<entry class="" argb="255,0,0,81" value="60" />
+			<entry class="" argb="255,0,0,82" value="61" />
+			<entry class="" argb="255,0,0,84" value="62" />
+			<entry class="" argb="255,0,0,85" value="63" />
+			<entry class="" argb="255,0,0,86" value="64" />
+			<entry class="" argb="255,0,0,88" value="65" />
+			<entry class="" argb="255,0,0,89" value="66" />
+			<entry class="" argb="255,0,0,90" value="67" />
+			<entry class="" argb="255,0,0,92" value="68" />
+			<entry class="" argb="255,0,0,93" value="69" />
+			<entry class="" argb="255,0,0,94" value="70" />
+			<entry class="" argb="255,0,0,96" value="71" />
+			<entry class="" argb="255,0,0,97" value="72" />
+			<entry class="" argb="255,0,0,99" value="73" />
+			<entry class="" argb="255,0,0,100" value="74" />
+			<entry class="" argb="255,0,0,101" value="75" />
+			<entry class="" argb="255,0,0,103" value="76" />
+			<entry class="" argb="255,0,0,104" value="77" />
+			<entry class="" argb="255,0,0,105" value="78" />
+			<entry class="" argb="255,0,0,107" value="79" />
+			<entry class="" argb="255,0,0,108" value="80" />
+			<entry class="" argb="255,0,0,109" value="81" />
+			<entry class="" argb="255,0,0,111" value="82" />
+			<entry class="" argb="255,0,0,112" value="83" />
+			<entry class="" argb="255,0,0,113" value="84" />
+			<entry class="" argb="255,0,0,115" value="85" />
+			<entry class="" argb="255,0,0,116" value="86" />
+			<entry class="" argb="255,0,0,118" value="87" />
+			<entry class="" argb="255,0,0,119" value="88" />
+			<entry class="" argb="255,0,0,120" value="89" />
+			<entry class="" argb="255,0,0,122" value="90" />
+			<entry class="" argb="255,0,0,123" value="91" />
+			<entry class="" argb="255,0,0,124" value="92" />
+			<entry class="" argb="255,0,0,126" value="93" />
+			<entry class="" argb="255,0,0,127" value="94" />
+			<entry class="" argb="255,0,0,128" value="95" />
+			<entry class="" argb="255,0,0,130" value="96" />
+			<entry class="" argb="255,0,2,131" value="97" />
+			<entry class="" argb="255,0,4,132" value="98" />
+			<entry class="" argb="255,0,5,134" value="99" />
+			<entry class="" argb="255,0,7,135" value="100" />
+			<entry class="" argb="255,0,9,136" value="101" />
+			<entry class="" argb="255,0,10,138" value="102" />
+			<entry class="" argb="255,0,12,139" value="103" />
+			<entry class="" argb="255,0,13,141" value="104" />
+			<entry class="" argb="255,0,15,142" value="105" />
+			<entry class="" argb="255,0,17,143" value="106" />
+			<entry class="" argb="255,0,18,145" value="107" />
+			<entry class="" argb="255,0,20,146" value="108" />
+			<entry class="" argb="255,0,21,147" value="109" />
+			<entry class="" argb="255,0,23,149" value="110" />
+			<entry class="" argb="255,0,25,150" value="111" />
+			<entry class="" argb="255,0,26,151" value="112" />
+			<entry class="" argb="255,0,28,153" value="113" />
+			<entry class="" argb="255,0,29,154" value="114" />
+			<entry class="" argb="255,0,31,155" value="115" />
+			<entry class="" argb="255,0,33,157" value="116" />
+			<entry class="" argb="255,0,34,158" value="117" />
+			<entry class="" argb="255,0,36,160" value="118" />
+			<entry class="" argb="255,0,37,161" value="119" />
+			<entry class="" argb="255,0,39,162" value="120" />
+			<entry class="" argb="255,0,41,164" value="121" />
+			<entry class="" argb="255,0,42,165" value="122" />
+			<entry class="" argb="255,0,44,166" value="123" />
+			<entry class="" argb="255,0,45,168" value="124" />
+			<entry class="" argb="255,0,47,169" value="125" />
+			<entry class="" argb="255,0,49,170" value="126" />
+			<entry class="" argb="255,0,50,172" value="127" />
+			<entry class="" argb="255,0,52,173" value="128" />
+			<entry class="" argb="255,0,53,174" value="129" />
+			<entry class="" argb="255,0,55,176" value="130" />
+			<entry class="" argb="255,0,57,177" value="131" />
+			<entry class="" argb="255,0,58,179" value="132" />
+			<entry class="" argb="255,0,60,180" value="133" />
+			<entry class="" argb="255,0,61,181" value="134" />
+			<entry class="" argb="255,0,63,183" value="135" />
+			<entry class="" argb="255,0,65,184" value="136" />
+			<entry class="" argb="255,0,66,185" value="137" />
+			<entry class="" argb="255,0,68,187" value="138" />
+			<entry class="" argb="255,0,69,188" value="139" />
+			<entry class="" argb="255,0,71,189" value="140" />
+			<entry class="" argb="255,0,73,191" value="141" />
+			<entry class="" argb="255,0,74,192" value="142" />
+			<entry class="" argb="255,0,76,193" value="143" />
+			<entry class="" argb="255,0,77,195" value="144" />
+			<entry class="" argb="255,0,79,196" value="145" />
+			<entry class="" argb="255,0,81,198" value="146" />
+			<entry class="" argb="255,0,82,199" value="147" />
+			<entry class="" argb="255,0,84,200" value="148" />
+			<entry class="" argb="255,0,85,202" value="149" />
+			<entry class="" argb="255,0,87,203" value="150" />
+			<entry class="" argb="255,0,89,204" value="151" />
+			<entry class="" argb="255,0,90,206" value="152" />
+			<entry class="" argb="255,0,92,207" value="153" />
+			<entry class="" argb="255,0,94,208" value="154" />
+			<entry class="" argb="255,0,95,210" value="155" />
+			<entry class="" argb="255,0,97,211" value="156" />
+			<entry class="" argb="255,0,98,212" value="157" />
+			<entry class="" argb="255,0,100,214" value="158" />
+			<entry class="" argb="255,0,102,215" value="159" />
+			<entry class="" argb="255,0,103,217" value="160" />
+			<entry class="" argb="255,0,105,218" value="161" />
+			<entry class="" argb="255,0,106,219" value="162" />
+			<entry class="" argb="255,0,108,221" value="163" />
+			<entry class="" argb="255,0,110,222" value="164" />
+			<entry class="" argb="255,0,111,223" value="165" />
+			<entry class="" argb="255,0,113,225" value="166" />
+			<entry class="" argb="255,0,114,226" value="167" />
+			<entry class="" argb="255,0,116,227" value="168" />
+			<entry class="" argb="255,0,118,229" value="169" />
+			<entry class="" argb="255,0,119,230" value="170" />
+			<entry class="" argb="255,0,121,231" value="171" />
+			<entry class="" argb="255,0,122,233" value="172" />
+			<entry class="" argb="255,0,124,234" value="173" />
+			<entry class="" argb="255,0,126,236" value="174" />
+			<entry class="" argb="255,0,127,237" value="175" />
+			<entry class="" argb="255,0,129,238" value="176" />
+			<entry class="" argb="255,0,130,240" value="177" />
+			<entry class="" argb="255,0,132,241" value="178" />
+			<entry class="" argb="255,0,134,242" value="179" />
+			<entry class="" argb="255,0,135,244" value="180" />
+			<entry class="" argb="255,0,137,245" value="181" />
+			<entry class="" argb="255,0,138,246" value="182" />
+			<entry class="" argb="255,0,140,248" value="183" />
+			<entry class="" argb="255,0,142,249" value="184" />
+			<entry class="" argb="255,0,143,250" value="185" />
+			<entry class="" argb="255,0,145,252" value="186" />
+			<entry class="" argb="255,0,146,253" value="187" />
+			<entry class="" argb="255,0,148,255" value="188" />
+			<entry class="" argb="255,0,150,255" value="189" />
+			<entry class="" argb="255,0,151,255" value="190" />
+			<entry class="" argb="255,0,153,255" value="191" />
+			<entry class="" argb="255,0,154,255" value="192" />
+			<entry class="" argb="255,5,156,255" value="193" />
+			<entry class="" argb="255,9,158,255" value="194" />
+			<entry class="" argb="255,13,159,255" value="195" />
+			<entry class="" argb="255,17,161,255" value="196" />
+			<entry class="" argb="255,21,162,255" value="197" />
+			<entry class="" argb="255,25,164,255" value="198" />
+			<entry class="" argb="255,29,166,255" value="199" />
+			<entry class="" argb="255,33,167,255" value="200" />
+			<entry class="" argb="255,37,169,255" value="201" />
+			<entry class="" argb="255,41,170,255" value="202" />
+			<entry class="" argb="255,45,172,255" value="203" />
+			<entry class="" argb="255,49,174,255" value="204" />
+			<entry class="" argb="255,53,175,255" value="205" />
+			<entry class="" argb="255,57,177,255" value="206" />
+			<entry class="" argb="255,61,179,255" value="207" />
+			<entry class="" argb="255,65,180,255" value="208" />
+			<entry class="" argb="255,69,182,255" value="209" />
+			<entry class="" argb="255,73,183,255" value="210" />
+			<entry class="" argb="255,77,185,255" value="211" />
+			<entry class="" argb="255,81,187,255" value="212" />
+			<entry class="" argb="255,85,188,255" value="213" />
+			<entry class="" argb="255,90,190,255" value="214" />
+			<entry class="" argb="255,94,191,255" value="215" />
+			<entry class="" argb="255,98,193,255" value="216" />
+			<entry class="" argb="255,102,195,255" value="217" />
+			<entry class="" argb="255,106,196,255" value="218" />
+			<entry class="" argb="255,110,198,255" value="219" />
+			<entry class="" argb="255,114,199,255" value="220" />
+			<entry class="" argb="255,118,201,255" value="221" />
+			<entry class="" argb="255,122,203,255" value="222" />
+			<entry class="" argb="255,126,204,255" value="223" />
+			<entry class="" argb="255,130,206,255" value="224" />
+			<entry class="" argb="255,134,207,255" value="225" />
+			<entry class="" argb="255,138,209,255" value="226" />
+			<entry class="" argb="255,142,211,255" value="227" />
+			<entry class="" argb="255,146,212,255" value="228" />
+			<entry class="" argb="255,150,214,255" value="229" />
+			<entry class="" argb="255,154,215,255" value="230" />
+			<entry class="" argb="255,158,217,255" value="231" />
+			<entry class="" argb="255,162,219,255" value="232" />
+			<entry class="" argb="255,166,220,255" value="233" />
+			<entry class="" argb="255,170,222,255" value="234" />
+			<entry class="" argb="255,175,223,255" value="235" />
+			<entry class="" argb="255,179,225,255" value="236" />
+			<entry class="" argb="255,183,227,255" value="237" />
+			<entry class="" argb="255,187,228,255" value="238" />
+			<entry class="" argb="255,191,230,255" value="239" />
+			<entry class="" argb="255,195,231,255" value="240" />
+			<entry class="" argb="255,199,233,255" value="241" />
+			<entry class="" argb="255,203,235,255" value="242" />
+			<entry class="" argb="255,207,236,255" value="243" />
+			<entry class="" argb="255,211,238,255" value="244" />
+			<entry class="" argb="255,215,239,255" value="245" />
+			<entry class="" argb="255,219,241,255" value="246" />
+			<entry class="" argb="255,223,243,255" value="247" />
+			<entry class="" argb="255,227,244,255" value="248" />
+			<entry class="" argb="255,231,246,255" value="249" />
+			<entry class="" argb="255,235,247,255" value="250" />
+			<entry class="" argb="255,239,249,255" value="251" />
+			<entry class="" argb="255,243,251,255" value="252" />
+			<entry class="" argb="255,247,252,255" value="253" />
+			<entry class="" argb="255,251,254,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="ocean" interpolate="false">
+		<table>
+			<entry class="" argb="255,54,67,141" value="0" />
+			<entry class="" argb="255,54,67,141" value="1" />
+			<entry class="" argb="255,59,67,153" value="2" />
+			<entry class="" argb="255,63,67,165" value="3" />
+			<entry class="" argb="255,68,67,177" value="4" />
+			<entry class="" argb="255,73,67,189" value="5" />
+			<entry class="" argb="255,77,67,202" value="6" />
+			<entry class="" argb="255,82,66,214" value="7" />
+			<entry class="" argb="255,82,66,214" value="8" />
+			<entry class="" argb="255,87,66,227" value="9" />
+			<entry class="" argb="255,91,65,239" value="10" />
+			<entry class="" argb="255,96,64,251" value="11" />
+			<entry class="" argb="255,100,64,246" value="12" />
+			<entry class="" argb="255,105,63,234" value="13" />
+			<entry class="" argb="255,110,62,222" value="14" />
+			<entry class="" argb="255,114,61,210" value="15" />
+			<entry class="" argb="255,119,60,198" value="16" />
+			<entry class="" argb="255,123,59,186" value="17" />
+			<entry class="" argb="255,127,57,175" value="18" />
+			<entry class="" argb="255,131,56,164" value="19" />
+			<entry class="" argb="255,135,55,153" value="20" />
+			<entry class="" argb="255,139,54,142" value="21" />
+			<entry class="" argb="255,143,53,132" value="22" />
+			<entry class="" argb="255,143,53,132" value="23" />
+			<entry class="" argb="255,147,52,122" value="24" />
+			<entry class="" argb="255,150,51,113" value="25" />
+			<entry class="" argb="255,154,49,104" value="26" />
+			<entry class="" argb="255,157,48,95" value="27" />
+			<entry class="" argb="255,160,47,87" value="28" />
+			<entry class="" argb="255,163,47,79" value="29" />
+			<entry class="" argb="255,165,46,72" value="30" />
+			<entry class="" argb="255,168,45,66" value="31" />
+			<entry class="" argb="255,170,44,59" value="32" />
+			<entry class="" argb="255,172,44,54" value="33" />
+			<entry class="" argb="255,174,44,49" value="34" />
+			<entry class="" argb="255,176,43,44" value="35" />
+			<entry class="" argb="255,177,43,40" value="36" />
+			<entry class="" argb="255,177,43,40" value="37" />
+			<entry class="" argb="255,179,43,37" value="38" />
+			<entry class="" argb="255,180,43,34" value="39" />
+			<entry class="" argb="255,180,44,32" value="40" />
+			<entry class="" argb="255,181,44,31" value="41" />
+			<entry class="" argb="255,181,45,30" value="42" />
+			<entry class="" argb="255,182,46,29" value="43" />
+			<entry class="" argb="255,181,47,30" value="44" />
+			<entry class="" argb="255,181,48,31" value="45" />
+			<entry class="" argb="255,180,50,32" value="46" />
+			<entry class="" argb="255,180,51,34" value="47" />
+			<entry class="" argb="255,179,53,37" value="48" />
+			<entry class="" argb="255,177,55,40" value="49" />
+			<entry class="" argb="255,176,57,44" value="50" />
+			<entry class="" argb="255,174,60,49" value="51" />
+			<entry class="" argb="255,174,60,49" value="52" />
+			<entry class="" argb="255,172,62,54" value="53" />
+			<entry class="" argb="255,170,65,59" value="54" />
+			<entry class="" argb="255,168,68,66" value="55" />
+			<entry class="" argb="255,165,71,72" value="56" />
+			<entry class="" argb="255,163,74,79" value="57" />
+			<entry class="" argb="255,160,78,87" value="58" />
+			<entry class="" argb="255,157,81,95" value="59" />
+			<entry class="" argb="255,154,85,104" value="60" />
+			<entry class="" argb="255,150,88,113" value="61" />
+			<entry class="" argb="255,147,92,122" value="62" />
+			<entry class="" argb="255,143,96,132" value="63" />
+			<entry class="" argb="255,139,100,142" value="64" />
+			<entry class="" argb="255,135,104,153" value="65" />
+			<entry class="" argb="255,131,108,164" value="66" />
+			<entry class="" argb="255,131,108,164" value="67" />
+			<entry class="" argb="255,127,112,175" value="68" />
+			<entry class="" argb="255,123,116,186" value="69" />
+			<entry class="" argb="255,119,120,198" value="70" />
+			<entry class="" argb="255,114,124,210" value="71" />
+			<entry class="" argb="255,110,128,222" value="72" />
+			<entry class="" argb="255,105,132,234" value="73" />
+			<entry class="" argb="255,100,136,246" value="74" />
+			<entry class="" argb="255,96,140,251" value="75" />
+			<entry class="" argb="255,91,144,239" value="76" />
+			<entry class="" argb="255,86,148,226" value="77" />
+			<entry class="" argb="255,82,151,214" value="78" />
+			<entry class="" argb="255,77,154,202" value="79" />
+			<entry class="" argb="255,73,158,189" value="80" />
+			<entry class="" argb="255,68,161,177" value="81" />
+			<entry class="" argb="255,68,161,177" value="82" />
+			<entry class="" argb="255,63,164,165" value="83" />
+			<entry class="" argb="255,59,166,153" value="84" />
+			<entry class="" argb="255,54,169,141" value="85" />
+			<entry class="" argb="255,50,171,129" value="86" />
+			<entry class="" argb="255,46,173,118" value="87" />
+			<entry class="" argb="255,42,175,107" value="88" />
+			<entry class="" argb="255,38,176,96" value="89" />
+			<entry class="" argb="255,34,178,85" value="90" />
+			<entry class="" argb="255,30,179,75" value="91" />
+			<entry class="" argb="255,26,180,65" value="92" />
+			<entry class="" argb="255,23,180,56" value="93" />
+			<entry class="" argb="255,19,180,47" value="94" />
+			<entry class="" argb="255,16,180,38" value="95" />
+			<entry class="" argb="255,13,180,30" value="96" />
+			<entry class="" argb="255,13,180,30" value="97" />
+			<entry class="" argb="255,13,179,22" value="98" />
+			<entry class="" argb="255,8,179,15" value="99" />
+			<entry class="" argb="255,5,178,9" value="100" />
+			<entry class="" argb="255,3,176,2" value="101" />
+			<entry class="" argb="255,1,175,2" value="102" />
+			<entry class="" argb="255,0,173,7" value="103" />
+			<entry class="" argb="255,2,171,12" value="104" />
+			<entry class="" argb="255,3,169,16" value="105" />
+			<entry class="" argb="255,5,166,19" value="106" />
+			<entry class="" argb="255,6,164,22" value="107" />
+			<entry class="" argb="255,6,161,24" value="108" />
+			<entry class="" argb="255,7,158,25" value="109" />
+			<entry class="" argb="255,7,155,26" value="110" />
+			<entry class="" argb="255,8,152,27" value="111" />
+			<entry class="" argb="255,8,152,27" value="112" />
+			<entry class="" argb="255,7,148,26" value="113" />
+			<entry class="" argb="255,7,145,25" value="114" />
+			<entry class="" argb="255,6,141,24" value="115" />
+			<entry class="" argb="255,6,138,22" value="116" />
+			<entry class="" argb="255,5,134,19" value="117" />
+			<entry class="" argb="255,3,131,16" value="118" />
+			<entry class="" argb="255,2,127,12" value="119" />
+			<entry class="" argb="255,0,124,7" value="120" />
+			<entry class="" argb="255,1,120,2" value="121" />
+			<entry class="" argb="255,3,117,2" value="122" />
+			<entry class="" argb="255,5,113,9" value="123" />
+			<entry class="" argb="255,8,110,15" value="124" />
+			<entry class="" argb="255,13,107,22" value="125" />
+			<entry class="" argb="255,13,104,30" value="126" />
+			<entry class="" argb="255,13,104,30" value="127" />
+			<entry class="" argb="255,16,101,38" value="128" />
+			<entry class="" argb="255,19,99,47" value="129" />
+			<entry class="" argb="255,23,97,56" value="130" />
+			<entry class="" argb="255,26,95,65" value="131" />
+			<entry class="" argb="255,30,93,75" value="132" />
+			<entry class="" argb="255,34,91,85" value="133" />
+			<entry class="" argb="255,38,90,96" value="134" />
+			<entry class="" argb="255,42,89,107" value="135" />
+			<entry class="" argb="255,46,88,118" value="136" />
+			<entry class="" argb="255,50,88,129" value="137" />
+			<entry class="" argb="255,54,88,141" value="138" />
+			<entry class="" argb="255,59,88,153" value="139" />
+			<entry class="" argb="255,63,88,165" value="140" />
+			<entry class="" argb="255,68,89,177" value="141" />
+			<entry class="" argb="255,68,89,177" value="142" />
+			<entry class="" argb="255,73,91,189" value="143" />
+			<entry class="" argb="255,77,92,202" value="144" />
+			<entry class="" argb="255,82,94,214" value="145" />
+			<entry class="" argb="255,87,96,227" value="146" />
+			<entry class="" argb="255,91,99,239" value="147" />
+			<entry class="" argb="255,96,102,251" value="148" />
+			<entry class="" argb="255,100,105,246" value="149" />
+			<entry class="" argb="255,105,109,234" value="150" />
+			<entry class="" argb="255,110,113,222" value="151" />
+			<entry class="" argb="255,114,117,210" value="152" />
+			<entry class="" argb="255,119,122,198" value="153" />
+			<entry class="" argb="255,123,127,186" value="154" />
+			<entry class="" argb="255,127,132,175" value="155" />
+			<entry class="" argb="255,131,137,164" value="156" />
+			<entry class="" argb="255,131,137,164" value="157" />
+			<entry class="" argb="255,135,142,153" value="158" />
+			<entry class="" argb="255,139,148,142" value="159" />
+			<entry class="" argb="255,143,154,132" value="160" />
+			<entry class="" argb="255,147,160,122" value="161" />
+			<entry class="" argb="255,150,166,113" value="162" />
+			<entry class="" argb="255,154,173,104" value="163" />
+			<entry class="" argb="255,157,179,95" value="164" />
+			<entry class="" argb="255,160,186,87" value="165" />
+			<entry class="" argb="255,163,192,79" value="166" />
+			<entry class="" argb="255,165,199,72" value="167" />
+			<entry class="" argb="255,168,205,66" value="168" />
+			<entry class="" argb="255,170,212,59" value="169" />
+			<entry class="" argb="255,172,218,54" value="170" />
+			<entry class="" argb="255,172,218,54" value="171" />
+			<entry class="" argb="255,174,225,49" value="172" />
+			<entry class="" argb="255,176,231,44" value="173" />
+			<entry class="" argb="255,177,237,40" value="174" />
+			<entry class="" argb="255,179,243,37" value="175" />
+			<entry class="" argb="255,180,248,34" value="176" />
+			<entry class="" argb="255,180,254,32" value="177" />
+			<entry class="" argb="255,181,251,31" value="178" />
+			<entry class="" argb="255,181,246,30" value="179" />
+			<entry class="" argb="255,182,241,29" value="180" />
+			<entry class="" argb="255,181,237,30" value="181" />
+			<entry class="" argb="255,181,233,31" value="182" />
+			<entry class="" argb="255,180,229,32" value="183" />
+			<entry class="" argb="255,180,226,34" value="184" />
+			<entry class="" argb="255,179,223,37" value="185" />
+			<entry class="" argb="255,179,223,37" value="186" />
+			<entry class="" argb="255,177,220,40" value="187" />
+			<entry class="" argb="255,176,218,44" value="188" />
+			<entry class="" argb="255,174,216,49" value="189" />
+			<entry class="" argb="255,172,215,54" value="190" />
+			<entry class="" argb="255,170,214,59" value="191" />
+			<entry class="" argb="255,168,213,66" value="192" />
+			<entry class="" argb="255,165,213,72" value="193" />
+			<entry class="" argb="255,163,214,79" value="194" />
+			<entry class="" argb="255,160,214,87" value="195" />
+			<entry class="" argb="255,157,216,95" value="196" />
+			<entry class="" argb="255,154,217,104" value="197" />
+			<entry class="" argb="255,150,219,113" value="198" />
+			<entry class="" argb="255,147,222,122" value="199" />
+			<entry class="" argb="255,143,224,132" value="200" />
+			<entry class="" argb="255,143,224,132" value="201" />
+			<entry class="" argb="255,139,228,142" value="202" />
+			<entry class="" argb="255,135,231,153" value="203" />
+			<entry class="" argb="255,131,235,164" value="204" />
+			<entry class="" argb="255,127,239,175" value="205" />
+			<entry class="" argb="255,123,244,186" value="206" />
+			<entry class="" argb="255,119,248,198" value="207" />
+			<entry class="" argb="255,114,253,210" value="208" />
+			<entry class="" argb="255,110,251,222" value="209" />
+			<entry class="" argb="255,105,246,234" value="210" />
+			<entry class="" argb="255,105,246,234" value="211" />
+			<entry class="" argb="255,105,246,234" value="212" />
+			<entry class="" argb="255,105,246,234" value="213" />
+			<entry class="" argb="255,105,246,234" value="214" />
+			<entry class="" argb="255,105,246,234" value="215" />
+			<entry class="" argb="255,105,246,234" value="216" />
+			<entry class="" argb="255,105,246,234" value="217" />
+			<entry class="" argb="255,105,246,234" value="218" />
+			<entry class="" argb="255,105,246,234" value="219" />
+			<entry class="" argb="255,105,246,234" value="220" />
+			<entry class="" argb="255,105,246,234" value="221" />
+			<entry class="" argb="255,105,246,234" value="222" />
+			<entry class="" argb="255,105,246,234" value="223" />
+			<entry class="" argb="255,105,246,234" value="224" />
+			<entry class="" argb="255,105,246,234" value="225" />
+			<entry class="" argb="255,105,246,234" value="226" />
+			<entry class="" argb="255,105,246,234" value="227" />
+			<entry class="" argb="255,105,246,234" value="228" />
+			<entry class="" argb="255,105,246,234" value="229" />
+			<entry class="" argb="255,105,246,234" value="230" />
+			<entry class="" argb="255,105,246,234" value="231" />
+			<entry class="" argb="255,105,246,234" value="232" />
+			<entry class="" argb="255,105,246,234" value="233" />
+			<entry class="" argb="255,105,246,234" value="234" />
+			<entry class="" argb="255,105,246,234" value="235" />
+			<entry class="" argb="255,105,246,234" value="236" />
+			<entry class="" argb="255,105,246,234" value="237" />
+			<entry class="" argb="255,105,246,234" value="238" />
+			<entry class="" argb="255,105,246,234" value="239" />
+			<entry class="" argb="255,105,246,234" value="240" />
+			<entry class="" argb="255,105,246,234" value="241" />
+			<entry class="" argb="255,105,246,234" value="242" />
+			<entry class="" argb="255,105,246,234" value="243" />
+			<entry class="" argb="255,105,246,234" value="244" />
+			<entry class="" argb="255,105,246,234" value="245" />
+			<entry class="" argb="255,105,246,234" value="246" />
+			<entry class="" argb="255,105,246,234" value="247" />
+			<entry class="" argb="255,105,246,234" value="248" />
+			<entry class="" argb="255,105,246,234" value="249" />
+			<entry class="" argb="255,105,246,234" value="250" />
+			<entry class="" argb="255,105,246,234" value="251" />
+			<entry class="" argb="255,105,246,234" value="252" />
+			<entry class="" argb="255,0,0,0" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="red-temperature" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,1,0,0" value="1" />
+			<entry class="" argb="255,2,0,0" value="2" />
+			<entry class="" argb="255,4,0,0" value="3" />
+			<entry class="" argb="255,5,0,0" value="4" />
+			<entry class="" argb="255,7,0,0" value="5" />
+			<entry class="" argb="255,8,0,0" value="6" />
+			<entry class="" argb="255,10,0,0" value="7" />
+			<entry class="" argb="255,11,0,0" value="8" />
+			<entry class="" argb="255,13,0,0" value="9" />
+			<entry class="" argb="255,14,0,0" value="10" />
+			<entry class="" argb="255,15,0,0" value="11" />
+			<entry class="" argb="255,17,0,0" value="12" />
+			<entry class="" argb="255,18,0,0" value="13" />
+			<entry class="" argb="255,20,0,0" value="14" />
+			<entry class="" argb="255,21,0,0" value="15" />
+			<entry class="" argb="255,23,0,0" value="16" />
+			<entry class="" argb="255,24,0,0" value="17" />
+			<entry class="" argb="255,26,0,0" value="18" />
+			<entry class="" argb="255,27,0,0" value="19" />
+			<entry class="" argb="255,28,0,0" value="20" />
+			<entry class="" argb="255,30,0,0" value="21" />
+			<entry class="" argb="255,31,0,0" value="22" />
+			<entry class="" argb="255,33,0,0" value="23" />
+			<entry class="" argb="255,34,0,0" value="24" />
+			<entry class="" argb="255,36,0,0" value="25" />
+			<entry class="" argb="255,37,0,0" value="26" />
+			<entry class="" argb="255,39,0,0" value="27" />
+			<entry class="" argb="255,40,0,0" value="28" />
+			<entry class="" argb="255,42,0,0" value="29" />
+			<entry class="" argb="255,43,0,0" value="30" />
+			<entry class="" argb="255,44,0,0" value="31" />
+			<entry class="" argb="255,46,0,0" value="32" />
+			<entry class="" argb="255,47,0,0" value="33" />
+			<entry class="" argb="255,49,0,0" value="34" />
+			<entry class="" argb="255,50,0,0" value="35" />
+			<entry class="" argb="255,52,0,0" value="36" />
+			<entry class="" argb="255,53,0,0" value="37" />
+			<entry class="" argb="255,55,0,0" value="38" />
+			<entry class="" argb="255,56,0,0" value="39" />
+			<entry class="" argb="255,57,0,0" value="40" />
+			<entry class="" argb="255,59,0,0" value="41" />
+			<entry class="" argb="255,60,0,0" value="42" />
+			<entry class="" argb="255,62,0,0" value="43" />
+			<entry class="" argb="255,63,0,0" value="44" />
+			<entry class="" argb="255,65,0,0" value="45" />
+			<entry class="" argb="255,66,0,0" value="46" />
+			<entry class="" argb="255,68,0,0" value="47" />
+			<entry class="" argb="255,69,0,0" value="48" />
+			<entry class="" argb="255,70,0,0" value="49" />
+			<entry class="" argb="255,72,0,0" value="50" />
+			<entry class="" argb="255,73,0,0" value="51" />
+			<entry class="" argb="255,75,0,0" value="52" />
+			<entry class="" argb="255,76,0,0" value="53" />
+			<entry class="" argb="255,78,0,0" value="54" />
+			<entry class="" argb="255,79,0,0" value="55" />
+			<entry class="" argb="255,81,0,0" value="56" />
+			<entry class="" argb="255,82,0,0" value="57" />
+			<entry class="" argb="255,84,0,0" value="58" />
+			<entry class="" argb="255,85,0,0" value="59" />
+			<entry class="" argb="255,86,0,0" value="60" />
+			<entry class="" argb="255,88,0,0" value="61" />
+			<entry class="" argb="255,89,0,0" value="62" />
+			<entry class="" argb="255,91,0,0" value="63" />
+			<entry class="" argb="255,92,0,0" value="64" />
+			<entry class="" argb="255,94,0,0" value="65" />
+			<entry class="" argb="255,95,0,0" value="66" />
+			<entry class="" argb="255,97,0,0" value="67" />
+			<entry class="" argb="255,98,0,0" value="68" />
+			<entry class="" argb="255,99,0,0" value="69" />
+			<entry class="" argb="255,101,0,0" value="70" />
+			<entry class="" argb="255,102,0,0" value="71" />
+			<entry class="" argb="255,104,0,0" value="72" />
+			<entry class="" argb="255,105,0,0" value="73" />
+			<entry class="" argb="255,107,0,0" value="74" />
+			<entry class="" argb="255,108,0,0" value="75" />
+			<entry class="" argb="255,110,0,0" value="76" />
+			<entry class="" argb="255,111,0,0" value="77" />
+			<entry class="" argb="255,113,0,0" value="78" />
+			<entry class="" argb="255,114,0,0" value="79" />
+			<entry class="" argb="255,115,0,0" value="80" />
+			<entry class="" argb="255,117,0,0" value="81" />
+			<entry class="" argb="255,118,0,0" value="82" />
+			<entry class="" argb="255,120,0,0" value="83" />
+			<entry class="" argb="255,121,0,0" value="84" />
+			<entry class="" argb="255,123,0,0" value="85" />
+			<entry class="" argb="255,124,0,0" value="86" />
+			<entry class="" argb="255,126,0,0" value="87" />
+			<entry class="" argb="255,127,0,0" value="88" />
+			<entry class="" argb="255,128,0,0" value="89" />
+			<entry class="" argb="255,130,0,0" value="90" />
+			<entry class="" argb="255,131,0,0" value="91" />
+			<entry class="" argb="255,133,0,0" value="92" />
+			<entry class="" argb="255,134,0,0" value="93" />
+			<entry class="" argb="255,136,0,0" value="94" />
+			<entry class="" argb="255,137,0,0" value="95" />
+			<entry class="" argb="255,139,0,0" value="96" />
+			<entry class="" argb="255,140,0,0" value="97" />
+			<entry class="" argb="255,141,0,0" value="98" />
+			<entry class="" argb="255,143,0,0" value="99" />
+			<entry class="" argb="255,144,0,0" value="100" />
+			<entry class="" argb="255,146,0,0" value="101" />
+			<entry class="" argb="255,147,0,0" value="102" />
+			<entry class="" argb="255,149,0,0" value="103" />
+			<entry class="" argb="255,150,0,0" value="104" />
+			<entry class="" argb="255,152,0,0" value="105" />
+			<entry class="" argb="255,153,0,0" value="106" />
+			<entry class="" argb="255,155,0,0" value="107" />
+			<entry class="" argb="255,156,0,0" value="108" />
+			<entry class="" argb="255,157,0,0" value="109" />
+			<entry class="" argb="255,159,0,0" value="110" />
+			<entry class="" argb="255,160,0,0" value="111" />
+			<entry class="" argb="255,162,0,0" value="112" />
+			<entry class="" argb="255,163,0,0" value="113" />
+			<entry class="" argb="255,165,0,0" value="114" />
+			<entry class="" argb="255,166,0,0" value="115" />
+			<entry class="" argb="255,168,0,0" value="116" />
+			<entry class="" argb="255,169,0,0" value="117" />
+			<entry class="" argb="255,170,0,0" value="118" />
+			<entry class="" argb="255,172,0,0" value="119" />
+			<entry class="" argb="255,173,0,0" value="120" />
+			<entry class="" argb="255,175,1,0" value="121" />
+			<entry class="" argb="255,176,3,0" value="122" />
+			<entry class="" argb="255,178,5,0" value="123" />
+			<entry class="" argb="255,179,7,0" value="124" />
+			<entry class="" argb="255,181,9,0" value="125" />
+			<entry class="" argb="255,182,11,0" value="126" />
+			<entry class="" argb="255,184,13,0" value="127" />
+			<entry class="" argb="255,185,15,0" value="128" />
+			<entry class="" argb="255,186,17,0" value="129" />
+			<entry class="" argb="255,188,18,0" value="130" />
+			<entry class="" argb="255,189,20,0" value="131" />
+			<entry class="" argb="255,191,22,0" value="132" />
+			<entry class="" argb="255,192,24,0" value="133" />
+			<entry class="" argb="255,194,26,0" value="134" />
+			<entry class="" argb="255,195,28,0" value="135" />
+			<entry class="" argb="255,197,30,0" value="136" />
+			<entry class="" argb="255,198,32,0" value="137" />
+			<entry class="" argb="255,199,34,0" value="138" />
+			<entry class="" argb="255,201,35,0" value="139" />
+			<entry class="" argb="255,202,37,0" value="140" />
+			<entry class="" argb="255,204,39,0" value="141" />
+			<entry class="" argb="255,205,41,0" value="142" />
+			<entry class="" argb="255,207,43,0" value="143" />
+			<entry class="" argb="255,208,45,0" value="144" />
+			<entry class="" argb="255,210,47,0" value="145" />
+			<entry class="" argb="255,211,49,0" value="146" />
+			<entry class="" argb="255,212,51,0" value="147" />
+			<entry class="" argb="255,214,52,0" value="148" />
+			<entry class="" argb="255,215,54,0" value="149" />
+			<entry class="" argb="255,217,56,0" value="150" />
+			<entry class="" argb="255,218,58,0" value="151" />
+			<entry class="" argb="255,220,60,0" value="152" />
+			<entry class="" argb="255,221,62,0" value="153" />
+			<entry class="" argb="255,223,64,0" value="154" />
+			<entry class="" argb="255,224,66,0" value="155" />
+			<entry class="" argb="255,226,68,0" value="156" />
+			<entry class="" argb="255,227,69,0" value="157" />
+			<entry class="" argb="255,228,71,0" value="158" />
+			<entry class="" argb="255,230,73,0" value="159" />
+			<entry class="" argb="255,231,75,0" value="160" />
+			<entry class="" argb="255,233,77,0" value="161" />
+			<entry class="" argb="255,234,79,0" value="162" />
+			<entry class="" argb="255,236,81,0" value="163" />
+			<entry class="" argb="255,237,83,0" value="164" />
+			<entry class="" argb="255,239,85,0" value="165" />
+			<entry class="" argb="255,240,86,0" value="166" />
+			<entry class="" argb="255,241,88,0" value="167" />
+			<entry class="" argb="255,243,90,0" value="168" />
+			<entry class="" argb="255,244,92,0" value="169" />
+			<entry class="" argb="255,246,94,0" value="170" />
+			<entry class="" argb="255,247,96,0" value="171" />
+			<entry class="" argb="255,249,98,0" value="172" />
+			<entry class="" argb="255,250,100,0" value="173" />
+			<entry class="" argb="255,252,102,0" value="174" />
+			<entry class="" argb="255,253,103,0" value="175" />
+			<entry class="" argb="255,255,105,0" value="176" />
+			<entry class="" argb="255,255,107,0" value="177" />
+			<entry class="" argb="255,255,109,0" value="178" />
+			<entry class="" argb="255,255,111,0" value="179" />
+			<entry class="" argb="255,255,113,0" value="180" />
+			<entry class="" argb="255,255,115,0" value="181" />
+			<entry class="" argb="255,255,117,0" value="182" />
+			<entry class="" argb="255,255,119,0" value="183" />
+			<entry class="" argb="255,255,120,0" value="184" />
+			<entry class="" argb="255,255,122,0" value="185" />
+			<entry class="" argb="255,255,124,0" value="186" />
+			<entry class="" argb="255,255,126,0" value="187" />
+			<entry class="" argb="255,255,128,0" value="188" />
+			<entry class="" argb="255,255,130,0" value="189" />
+			<entry class="" argb="255,255,132,0" value="190" />
+			<entry class="" argb="255,255,134,3" value="191" />
+			<entry class="" argb="255,255,136,7" value="192" />
+			<entry class="" argb="255,255,137,11" value="193" />
+			<entry class="" argb="255,255,139,15" value="194" />
+			<entry class="" argb="255,255,141,19" value="195" />
+			<entry class="" argb="255,255,143,23" value="196" />
+			<entry class="" argb="255,255,145,27" value="197" />
+			<entry class="" argb="255,255,147,31" value="198" />
+			<entry class="" argb="255,255,149,35" value="199" />
+			<entry class="" argb="255,255,151,39" value="200" />
+			<entry class="" argb="255,255,153,43" value="201" />
+			<entry class="" argb="255,255,154,47" value="202" />
+			<entry class="" argb="255,255,156,51" value="203" />
+			<entry class="" argb="255,255,158,54" value="204" />
+			<entry class="" argb="255,255,160,58" value="205" />
+			<entry class="" argb="255,255,162,62" value="206" />
+			<entry class="" argb="255,255,164,66" value="207" />
+			<entry class="" argb="255,255,166,70" value="208" />
+			<entry class="" argb="255,255,168,74" value="209" />
+			<entry class="" argb="255,255,170,78" value="210" />
+			<entry class="" argb="255,255,171,82" value="211" />
+			<entry class="" argb="255,255,173,86" value="212" />
+			<entry class="" argb="255,255,175,90" value="213" />
+			<entry class="" argb="255,255,177,94" value="214" />
+			<entry class="" argb="255,255,179,98" value="215" />
+			<entry class="" argb="255,255,181,102" value="216" />
+			<entry class="" argb="255,255,183,105" value="217" />
+			<entry class="" argb="255,255,185,109" value="218" />
+			<entry class="" argb="255,255,187,113" value="219" />
+			<entry class="" argb="255,255,188,117" value="220" />
+			<entry class="" argb="255,255,190,121" value="221" />
+			<entry class="" argb="255,255,192,125" value="222" />
+			<entry class="" argb="255,255,194,129" value="223" />
+			<entry class="" argb="255,255,196,133" value="224" />
+			<entry class="" argb="255,255,198,137" value="225" />
+			<entry class="" argb="255,255,200,141" value="226" />
+			<entry class="" argb="255,255,202,145" value="227" />
+			<entry class="" argb="255,255,204,149" value="228" />
+			<entry class="" argb="255,255,205,153" value="229" />
+			<entry class="" argb="255,255,207,156" value="230" />
+			<entry class="" argb="255,255,209,160" value="231" />
+			<entry class="" argb="255,255,211,164" value="232" />
+			<entry class="" argb="255,255,213,168" value="233" />
+			<entry class="" argb="255,255,215,172" value="234" />
+			<entry class="" argb="255,255,217,176" value="235" />
+			<entry class="" argb="255,255,219,180" value="236" />
+			<entry class="" argb="255,255,221,184" value="237" />
+			<entry class="" argb="255,255,222,188" value="238" />
+			<entry class="" argb="255,255,224,192" value="239" />
+			<entry class="" argb="255,255,226,196" value="240" />
+			<entry class="" argb="255,255,228,200" value="241" />
+			<entry class="" argb="255,255,230,204" value="242" />
+			<entry class="" argb="255,255,232,207" value="243" />
+			<entry class="" argb="255,255,234,211" value="244" />
+			<entry class="" argb="255,255,236,215" value="245" />
+			<entry class="" argb="255,255,238,219" value="246" />
+			<entry class="" argb="255,255,239,223" value="247" />
+			<entry class="" argb="255,255,241,227" value="248" />
+			<entry class="" argb="255,255,243,231" value="249" />
+			<entry class="" argb="255,255,245,235" value="250" />
+			<entry class="" argb="255,255,247,239" value="251" />
+			<entry class="" argb="255,255,249,243" value="252" />
+			<entry class="" argb="255,255,251,247" value="253" />
+			<entry class="" argb="255,255,253,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="16level" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,84,0" value="1" />
+			<entry class="" argb="255,0,84,0" value="2" />
+			<entry class="" argb="255,0,84,0" value="3" />
+			<entry class="" argb="255,0,84,0" value="4" />
+			<entry class="" argb="255,0,84,0" value="5" />
+			<entry class="" argb="255,0,84,0" value="6" />
+			<entry class="" argb="255,0,84,0" value="7" />
+			<entry class="" argb="255,0,84,0" value="8" />
+			<entry class="" argb="255,0,84,0" value="9" />
+			<entry class="" argb="255,0,84,0" value="10" />
+			<entry class="" argb="255,0,84,0" value="11" />
+			<entry class="" argb="255,0,84,0" value="12" />
+			<entry class="" argb="255,0,84,0" value="13" />
+			<entry class="" argb="255,0,84,0" value="14" />
+			<entry class="" argb="255,0,84,0" value="15" />
+			<entry class="" argb="255,0,168,0" value="16" />
+			<entry class="" argb="255,0,168,0" value="17" />
+			<entry class="" argb="255,0,168,0" value="18" />
+			<entry class="" argb="255,0,168,0" value="19" />
+			<entry class="" argb="255,0,168,0" value="20" />
+			<entry class="" argb="255,0,168,0" value="21" />
+			<entry class="" argb="255,0,168,0" value="22" />
+			<entry class="" argb="255,0,168,0" value="23" />
+			<entry class="" argb="255,0,168,0" value="24" />
+			<entry class="" argb="255,0,168,0" value="25" />
+			<entry class="" argb="255,0,168,0" value="26" />
+			<entry class="" argb="255,0,168,0" value="27" />
+			<entry class="" argb="255,0,168,0" value="28" />
+			<entry class="" argb="255,0,168,0" value="29" />
+			<entry class="" argb="255,0,168,0" value="30" />
+			<entry class="" argb="255,0,168,0" value="31" />
+			<entry class="" argb="255,0,255,0" value="32" />
+			<entry class="" argb="255,0,255,0" value="33" />
+			<entry class="" argb="255,0,255,0" value="34" />
+			<entry class="" argb="255,0,255,0" value="35" />
+			<entry class="" argb="255,0,255,0" value="36" />
+			<entry class="" argb="255,0,255,0" value="37" />
+			<entry class="" argb="255,0,255,0" value="38" />
+			<entry class="" argb="255,0,255,0" value="39" />
+			<entry class="" argb="255,0,255,0" value="40" />
+			<entry class="" argb="255,0,255,0" value="41" />
+			<entry class="" argb="255,0,255,0" value="42" />
+			<entry class="" argb="255,0,255,0" value="43" />
+			<entry class="" argb="255,0,255,0" value="44" />
+			<entry class="" argb="255,0,255,0" value="45" />
+			<entry class="" argb="255,0,255,0" value="46" />
+			<entry class="" argb="255,0,255,0" value="47" />
+			<entry class="" argb="255,0,255,84" value="48" />
+			<entry class="" argb="255,0,255,84" value="49" />
+			<entry class="" argb="255,0,255,84" value="50" />
+			<entry class="" argb="255,0,255,84" value="51" />
+			<entry class="" argb="255,0,255,84" value="52" />
+			<entry class="" argb="255,0,255,84" value="53" />
+			<entry class="" argb="255,0,255,84" value="54" />
+			<entry class="" argb="255,0,255,84" value="55" />
+			<entry class="" argb="255,0,255,84" value="56" />
+			<entry class="" argb="255,0,255,84" value="57" />
+			<entry class="" argb="255,0,255,84" value="58" />
+			<entry class="" argb="255,0,255,84" value="59" />
+			<entry class="" argb="255,0,255,84" value="60" />
+			<entry class="" argb="255,0,255,84" value="61" />
+			<entry class="" argb="255,0,255,84" value="62" />
+			<entry class="" argb="255,0,255,84" value="63" />
+			<entry class="" argb="255,0,255,168" value="64" />
+			<entry class="" argb="255,0,255,168" value="65" />
+			<entry class="" argb="255,0,255,168" value="66" />
+			<entry class="" argb="255,0,255,168" value="67" />
+			<entry class="" argb="255,0,255,168" value="68" />
+			<entry class="" argb="255,0,255,168" value="69" />
+			<entry class="" argb="255,0,255,168" value="70" />
+			<entry class="" argb="255,0,255,168" value="71" />
+			<entry class="" argb="255,0,255,168" value="72" />
+			<entry class="" argb="255,0,255,168" value="73" />
+			<entry class="" argb="255,0,255,168" value="74" />
+			<entry class="" argb="255,0,255,168" value="75" />
+			<entry class="" argb="255,0,255,168" value="76" />
+			<entry class="" argb="255,0,255,168" value="77" />
+			<entry class="" argb="255,0,255,168" value="78" />
+			<entry class="" argb="255,0,255,168" value="79" />
+			<entry class="" argb="255,0,255,255" value="80" />
+			<entry class="" argb="255,0,255,255" value="81" />
+			<entry class="" argb="255,0,255,255" value="82" />
+			<entry class="" argb="255,0,255,255" value="83" />
+			<entry class="" argb="255,0,255,255" value="84" />
+			<entry class="" argb="255,0,255,255" value="85" />
+			<entry class="" argb="255,0,255,255" value="86" />
+			<entry class="" argb="255,0,255,255" value="87" />
+			<entry class="" argb="255,0,255,255" value="88" />
+			<entry class="" argb="255,0,255,255" value="89" />
+			<entry class="" argb="255,0,255,255" value="90" />
+			<entry class="" argb="255,0,255,255" value="91" />
+			<entry class="" argb="255,0,255,255" value="92" />
+			<entry class="" argb="255,0,255,255" value="93" />
+			<entry class="" argb="255,0,255,255" value="94" />
+			<entry class="" argb="255,0,255,255" value="95" />
+			<entry class="" argb="255,0,0,255" value="96" />
+			<entry class="" argb="255,0,0,255" value="97" />
+			<entry class="" argb="255,0,0,255" value="98" />
+			<entry class="" argb="255,0,0,255" value="99" />
+			<entry class="" argb="255,0,0,255" value="100" />
+			<entry class="" argb="255,0,0,255" value="101" />
+			<entry class="" argb="255,0,0,255" value="102" />
+			<entry class="" argb="255,0,0,255" value="103" />
+			<entry class="" argb="255,0,0,255" value="104" />
+			<entry class="" argb="255,0,0,255" value="105" />
+			<entry class="" argb="255,0,0,255" value="106" />
+			<entry class="" argb="255,0,0,255" value="107" />
+			<entry class="" argb="255,0,0,255" value="108" />
+			<entry class="" argb="255,0,0,255" value="109" />
+			<entry class="" argb="255,0,0,255" value="110" />
+			<entry class="" argb="255,0,0,255" value="111" />
+			<entry class="" argb="255,128,0,255" value="112" />
+			<entry class="" argb="255,128,0,255" value="113" />
+			<entry class="" argb="255,128,0,255" value="114" />
+			<entry class="" argb="255,128,0,255" value="115" />
+			<entry class="" argb="255,128,0,255" value="116" />
+			<entry class="" argb="255,128,0,255" value="117" />
+			<entry class="" argb="255,128,0,255" value="118" />
+			<entry class="" argb="255,128,0,255" value="119" />
+			<entry class="" argb="255,128,0,255" value="120" />
+			<entry class="" argb="255,128,0,255" value="121" />
+			<entry class="" argb="255,128,0,255" value="122" />
+			<entry class="" argb="255,128,0,255" value="123" />
+			<entry class="" argb="255,128,0,255" value="124" />
+			<entry class="" argb="255,128,0,255" value="125" />
+			<entry class="" argb="255,128,0,255" value="126" />
+			<entry class="" argb="255,128,0,255" value="127" />
+			<entry class="" argb="255,255,0,220" value="128" />
+			<entry class="" argb="255,255,0,220" value="129" />
+			<entry class="" argb="255,255,0,220" value="130" />
+			<entry class="" argb="255,255,0,220" value="131" />
+			<entry class="" argb="255,255,0,220" value="132" />
+			<entry class="" argb="255,255,0,220" value="133" />
+			<entry class="" argb="255,255,0,220" value="134" />
+			<entry class="" argb="255,255,0,220" value="135" />
+			<entry class="" argb="255,255,0,220" value="136" />
+			<entry class="" argb="255,255,0,220" value="137" />
+			<entry class="" argb="255,255,0,220" value="138" />
+			<entry class="" argb="255,255,0,220" value="139" />
+			<entry class="" argb="255,255,0,220" value="140" />
+			<entry class="" argb="255,255,0,220" value="141" />
+			<entry class="" argb="255,255,0,220" value="142" />
+			<entry class="" argb="255,255,0,220" value="143" />
+			<entry class="" argb="255,255,0,180" value="144" />
+			<entry class="" argb="255,255,0,180" value="145" />
+			<entry class="" argb="255,255,0,180" value="146" />
+			<entry class="" argb="255,255,0,180" value="147" />
+			<entry class="" argb="255,255,0,180" value="148" />
+			<entry class="" argb="255,255,0,180" value="149" />
+			<entry class="" argb="255,255,0,180" value="150" />
+			<entry class="" argb="255,255,0,180" value="151" />
+			<entry class="" argb="255,255,0,180" value="152" />
+			<entry class="" argb="255,255,0,180" value="153" />
+			<entry class="" argb="255,255,0,180" value="154" />
+			<entry class="" argb="255,255,0,180" value="155" />
+			<entry class="" argb="255,255,0,180" value="156" />
+			<entry class="" argb="255,255,0,180" value="157" />
+			<entry class="" argb="255,255,0,180" value="158" />
+			<entry class="" argb="255,255,0,180" value="159" />
+			<entry class="" argb="255,255,0,128" value="160" />
+			<entry class="" argb="255,255,0,128" value="161" />
+			<entry class="" argb="255,255,0,128" value="162" />
+			<entry class="" argb="255,255,0,128" value="163" />
+			<entry class="" argb="255,255,0,128" value="164" />
+			<entry class="" argb="255,255,0,128" value="165" />
+			<entry class="" argb="255,255,0,128" value="166" />
+			<entry class="" argb="255,255,0,128" value="167" />
+			<entry class="" argb="255,255,0,128" value="168" />
+			<entry class="" argb="255,255,0,128" value="169" />
+			<entry class="" argb="255,255,0,128" value="170" />
+			<entry class="" argb="255,255,0,128" value="171" />
+			<entry class="" argb="255,255,0,128" value="172" />
+			<entry class="" argb="255,255,0,128" value="173" />
+			<entry class="" argb="255,255,0,128" value="174" />
+			<entry class="" argb="255,255,0,128" value="175" />
+			<entry class="" argb="255,255,0,64" value="176" />
+			<entry class="" argb="255,255,0,64" value="177" />
+			<entry class="" argb="255,255,0,64" value="178" />
+			<entry class="" argb="255,255,0,64" value="179" />
+			<entry class="" argb="255,255,0,64" value="180" />
+			<entry class="" argb="255,255,0,64" value="181" />
+			<entry class="" argb="255,255,0,64" value="182" />
+			<entry class="" argb="255,255,0,64" value="183" />
+			<entry class="" argb="255,255,0,64" value="184" />
+			<entry class="" argb="255,255,0,64" value="185" />
+			<entry class="" argb="255,255,0,64" value="186" />
+			<entry class="" argb="255,255,0,64" value="187" />
+			<entry class="" argb="255,255,0,64" value="188" />
+			<entry class="" argb="255,255,0,64" value="189" />
+			<entry class="" argb="255,255,0,64" value="190" />
+			<entry class="" argb="255,255,0,64" value="191" />
+			<entry class="" argb="255,255,0,0" value="192" />
+			<entry class="" argb="255,255,0,0" value="193" />
+			<entry class="" argb="255,255,0,0" value="194" />
+			<entry class="" argb="255,255,0,0" value="195" />
+			<entry class="" argb="255,255,0,0" value="196" />
+			<entry class="" argb="255,255,0,0" value="197" />
+			<entry class="" argb="255,255,0,0" value="198" />
+			<entry class="" argb="255,255,0,0" value="199" />
+			<entry class="" argb="255,255,0,0" value="200" />
+			<entry class="" argb="255,255,0,0" value="201" />
+			<entry class="" argb="255,255,0,0" value="202" />
+			<entry class="" argb="255,255,0,0" value="203" />
+			<entry class="" argb="255,255,0,0" value="204" />
+			<entry class="" argb="255,255,0,0" value="205" />
+			<entry class="" argb="255,255,0,0" value="206" />
+			<entry class="" argb="255,255,0,0" value="207" />
+			<entry class="" argb="255,220,190,190" value="208" />
+			<entry class="" argb="255,220,190,190" value="209" />
+			<entry class="" argb="255,220,190,190" value="210" />
+			<entry class="" argb="255,220,190,190" value="211" />
+			<entry class="" argb="255,220,190,190" value="212" />
+			<entry class="" argb="255,221,190,190" value="213" />
+			<entry class="" argb="255,221,190,190" value="214" />
+			<entry class="" argb="255,221,190,190" value="215" />
+			<entry class="" argb="255,221,190,190" value="216" />
+			<entry class="" argb="255,221,190,190" value="217" />
+			<entry class="" argb="255,222,190,190" value="218" />
+			<entry class="" argb="255,222,190,190" value="219" />
+			<entry class="" argb="255,222,190,190" value="220" />
+			<entry class="" argb="255,222,190,190" value="221" />
+			<entry class="" argb="255,222,190,190" value="222" />
+			<entry class="" argb="255,223,190,190" value="223" />
+			<entry class="" argb="255,220,220,220" value="224" />
+			<entry class="" argb="255,220,220,220" value="225" />
+			<entry class="" argb="255,220,220,220" value="226" />
+			<entry class="" argb="255,220,220,220" value="227" />
+			<entry class="" argb="255,220,220,220" value="228" />
+			<entry class="" argb="255,220,220,220" value="229" />
+			<entry class="" argb="255,220,220,220" value="230" />
+			<entry class="" argb="255,220,220,220" value="231" />
+			<entry class="" argb="255,220,220,220" value="232" />
+			<entry class="" argb="255,220,220,220" value="233" />
+			<entry class="" argb="255,220,220,220" value="234" />
+			<entry class="" argb="255,220,220,220" value="235" />
+			<entry class="" argb="255,220,220,220" value="236" />
+			<entry class="" argb="255,220,220,220" value="237" />
+			<entry class="" argb="255,220,220,220" value="238" />
+			<entry class="" argb="255,220,220,220" value="239" />
+			<entry class="" argb="255,255,255,255" value="240" />
+			<entry class="" argb="255,255,255,255" value="241" />
+			<entry class="" argb="255,255,255,255" value="242" />
+			<entry class="" argb="255,255,255,255" value="243" />
+			<entry class="" argb="255,255,255,255" value="244" />
+			<entry class="" argb="255,255,255,255" value="245" />
+			<entry class="" argb="255,255,255,255" value="246" />
+			<entry class="" argb="255,255,255,255" value="247" />
+			<entry class="" argb="255,255,255,255" value="248" />
+			<entry class="" argb="255,255,255,255" value="249" />
+			<entry class="" argb="255,255,255,255" value="250" />
+			<entry class="" argb="255,255,255,255" value="251" />
+			<entry class="" argb="255,255,255,255" value="252" />
+			<entry class="" argb="255,255,255,255" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-green-red-yellow" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,2" value="1" />
+			<entry class="" argb="255,0,0,4" value="2" />
+			<entry class="" argb="255,0,0,6" value="3" />
+			<entry class="" argb="255,0,0,8" value="4" />
+			<entry class="" argb="255,0,0,10" value="5" />
+			<entry class="" argb="255,0,0,12" value="6" />
+			<entry class="" argb="255,0,0,14" value="7" />
+			<entry class="" argb="255,0,0,16" value="8" />
+			<entry class="" argb="255,0,0,18" value="9" />
+			<entry class="" argb="255,0,0,20" value="10" />
+			<entry class="" argb="255,0,0,22" value="11" />
+			<entry class="" argb="255,0,0,25" value="12" />
+			<entry class="" argb="255,0,0,27" value="13" />
+			<entry class="" argb="255,0,0,29" value="14" />
+			<entry class="" argb="255,0,0,31" value="15" />
+			<entry class="" argb="255,0,0,33" value="16" />
+			<entry class="" argb="255,0,0,35" value="17" />
+			<entry class="" argb="255,0,0,37" value="18" />
+			<entry class="" argb="255,0,0,39" value="19" />
+			<entry class="" argb="255,0,0,41" value="20" />
+			<entry class="" argb="255,0,0,43" value="21" />
+			<entry class="" argb="255,0,0,45" value="22" />
+			<entry class="" argb="255,0,0,47" value="23" />
+			<entry class="" argb="255,0,0,50" value="24" />
+			<entry class="" argb="255,0,0,52" value="25" />
+			<entry class="" argb="255,0,0,54" value="26" />
+			<entry class="" argb="255,0,0,56" value="27" />
+			<entry class="" argb="255,0,0,58" value="28" />
+			<entry class="" argb="255,0,0,60" value="29" />
+			<entry class="" argb="255,0,0,62" value="30" />
+			<entry class="" argb="255,0,0,64" value="31" />
+			<entry class="" argb="255,0,0,66" value="32" />
+			<entry class="" argb="255,0,3,68" value="33" />
+			<entry class="" argb="255,0,6,70" value="34" />
+			<entry class="" argb="255,0,9,72" value="35" />
+			<entry class="" argb="255,0,12,75" value="36" />
+			<entry class="" argb="255,0,15,77" value="37" />
+			<entry class="" argb="255,0,18,79" value="38" />
+			<entry class="" argb="255,0,21,81" value="39" />
+			<entry class="" argb="255,0,25,83" value="40" />
+			<entry class="" argb="255,0,28,85" value="41" />
+			<entry class="" argb="255,0,31,87" value="42" />
+			<entry class="" argb="255,0,34,89" value="43" />
+			<entry class="" argb="255,0,37,91" value="44" />
+			<entry class="" argb="255,0,40,93" value="45" />
+			<entry class="" argb="255,0,43,95" value="46" />
+			<entry class="" argb="255,0,46,97" value="47" />
+			<entry class="" argb="255,0,50,100" value="48" />
+			<entry class="" argb="255,0,53,100" value="49" />
+			<entry class="" argb="255,0,56,100" value="50" />
+			<entry class="" argb="255,0,59,100" value="51" />
+			<entry class="" argb="255,0,62,100" value="52" />
+			<entry class="" argb="255,0,65,100" value="53" />
+			<entry class="" argb="255,0,68,100" value="54" />
+			<entry class="" argb="255,0,71,100" value="55" />
+			<entry class="" argb="255,0,75,100" value="56" />
+			<entry class="" argb="255,0,78,100" value="57" />
+			<entry class="" argb="255,0,81,100" value="58" />
+			<entry class="" argb="255,0,84,100" value="59" />
+			<entry class="" argb="255,0,87,100" value="60" />
+			<entry class="" argb="255,0,90,100" value="61" />
+			<entry class="" argb="255,0,93,100" value="62" />
+			<entry class="" argb="255,0,96,100" value="63" />
+			<entry class="" argb="255,0,100,100" value="64" />
+			<entry class="" argb="255,0,103,100" value="65" />
+			<entry class="" argb="255,0,106,100" value="66" />
+			<entry class="" argb="255,0,109,100" value="67" />
+			<entry class="" argb="255,0,112,100" value="68" />
+			<entry class="" argb="255,0,115,100" value="69" />
+			<entry class="" argb="255,0,118,100" value="70" />
+			<entry class="" argb="255,0,121,100" value="71" />
+			<entry class="" argb="255,0,125,100" value="72" />
+			<entry class="" argb="255,0,128,100" value="73" />
+			<entry class="" argb="255,0,131,100" value="74" />
+			<entry class="" argb="255,0,134,100" value="75" />
+			<entry class="" argb="255,0,137,100" value="76" />
+			<entry class="" argb="255,0,140,100" value="77" />
+			<entry class="" argb="255,0,143,100" value="78" />
+			<entry class="" argb="255,0,146,100" value="79" />
+			<entry class="" argb="255,0,150,100" value="80" />
+			<entry class="" argb="255,0,150,96" value="81" />
+			<entry class="" argb="255,0,150,93" value="82" />
+			<entry class="" argb="255,0,150,90" value="83" />
+			<entry class="" argb="255,0,150,87" value="84" />
+			<entry class="" argb="255,0,150,84" value="85" />
+			<entry class="" argb="255,0,150,81" value="86" />
+			<entry class="" argb="255,0,150,78" value="87" />
+			<entry class="" argb="255,0,150,75" value="88" />
+			<entry class="" argb="255,0,150,71" value="89" />
+			<entry class="" argb="255,0,150,68" value="90" />
+			<entry class="" argb="255,0,150,65" value="91" />
+			<entry class="" argb="255,0,150,62" value="92" />
+			<entry class="" argb="255,0,150,59" value="93" />
+			<entry class="" argb="255,0,150,56" value="94" />
+			<entry class="" argb="255,0,150,53" value="95" />
+			<entry class="" argb="255,0,150,50" value="96" />
+			<entry class="" argb="255,0,149,46" value="97" />
+			<entry class="" argb="255,0,148,43" value="98" />
+			<entry class="" argb="255,0,148,40" value="99" />
+			<entry class="" argb="255,0,147,37" value="100" />
+			<entry class="" argb="255,0,146,34" value="101" />
+			<entry class="" argb="255,0,146,31" value="102" />
+			<entry class="" argb="255,0,145,28" value="103" />
+			<entry class="" argb="255,0,145,25" value="104" />
+			<entry class="" argb="255,0,144,21" value="105" />
+			<entry class="" argb="255,0,143,18" value="106" />
+			<entry class="" argb="255,0,143,15" value="107" />
+			<entry class="" argb="255,0,142,12" value="108" />
+			<entry class="" argb="255,0,141,9" value="109" />
+			<entry class="" argb="255,0,141,6" value="110" />
+			<entry class="" argb="255,0,140,3" value="111" />
+			<entry class="" argb="255,0,140,0" value="112" />
+			<entry class="" argb="255,7,137,0" value="113" />
+			<entry class="" argb="255,15,135,0" value="114" />
+			<entry class="" argb="255,22,132,0" value="115" />
+			<entry class="" argb="255,30,130,0" value="116" />
+			<entry class="" argb="255,37,127,0" value="117" />
+			<entry class="" argb="255,45,125,0" value="118" />
+			<entry class="" argb="255,52,122,0" value="119" />
+			<entry class="" argb="255,60,120,0" value="120" />
+			<entry class="" argb="255,67,117,0" value="121" />
+			<entry class="" argb="255,75,115,0" value="122" />
+			<entry class="" argb="255,82,112,0" value="123" />
+			<entry class="" argb="255,90,110,0" value="124" />
+			<entry class="" argb="255,97,107,0" value="125" />
+			<entry class="" argb="255,105,105,0" value="126" />
+			<entry class="" argb="255,112,102,0" value="127" />
+			<entry class="" argb="255,120,100,0" value="128" />
+			<entry class="" argb="255,125,93,0" value="129" />
+			<entry class="" argb="255,130,87,0" value="130" />
+			<entry class="" argb="255,135,81,0" value="131" />
+			<entry class="" argb="255,140,75,0" value="132" />
+			<entry class="" argb="255,145,68,0" value="133" />
+			<entry class="" argb="255,150,62,0" value="134" />
+			<entry class="" argb="255,155,56,0" value="135" />
+			<entry class="" argb="255,160,50,0" value="136" />
+			<entry class="" argb="255,165,43,0" value="137" />
+			<entry class="" argb="255,170,37,0" value="138" />
+			<entry class="" argb="255,175,31,0" value="139" />
+			<entry class="" argb="255,180,25,0" value="140" />
+			<entry class="" argb="255,185,18,0" value="141" />
+			<entry class="" argb="255,190,12,0" value="142" />
+			<entry class="" argb="255,195,6,0" value="143" />
+			<entry class="" argb="255,200,0,0" value="144" />
+			<entry class="" argb="255,200,2,0" value="145" />
+			<entry class="" argb="255,201,4,0" value="146" />
+			<entry class="" argb="255,201,6,0" value="147" />
+			<entry class="" argb="255,202,9,0" value="148" />
+			<entry class="" argb="255,202,11,0" value="149" />
+			<entry class="" argb="255,203,13,0" value="150" />
+			<entry class="" argb="255,203,16,0" value="151" />
+			<entry class="" argb="255,204,18,0" value="152" />
+			<entry class="" argb="255,204,20,0" value="153" />
+			<entry class="" argb="255,205,23,0" value="154" />
+			<entry class="" argb="255,205,25,0" value="155" />
+			<entry class="" argb="255,206,27,0" value="156" />
+			<entry class="" argb="255,206,29,0" value="157" />
+			<entry class="" argb="255,207,32,0" value="158" />
+			<entry class="" argb="255,207,34,0" value="159" />
+			<entry class="" argb="255,208,36,0" value="160" />
+			<entry class="" argb="255,208,39,0" value="161" />
+			<entry class="" argb="255,209,41,0" value="162" />
+			<entry class="" argb="255,209,43,0" value="163" />
+			<entry class="" argb="255,210,46,0" value="164" />
+			<entry class="" argb="255,210,48,0" value="165" />
+			<entry class="" argb="255,211,50,0" value="166" />
+			<entry class="" argb="255,211,53,0" value="167" />
+			<entry class="" argb="255,212,55,0" value="168" />
+			<entry class="" argb="255,212,57,0" value="169" />
+			<entry class="" argb="255,213,59,0" value="170" />
+			<entry class="" argb="255,213,62,0" value="171" />
+			<entry class="" argb="255,214,64,0" value="172" />
+			<entry class="" argb="255,214,66,0" value="173" />
+			<entry class="" argb="255,215,69,0" value="174" />
+			<entry class="" argb="255,215,71,0" value="175" />
+			<entry class="" argb="255,216,73,0" value="176" />
+			<entry class="" argb="255,216,76,0" value="177" />
+			<entry class="" argb="255,217,78,0" value="178" />
+			<entry class="" argb="255,217,80,0" value="179" />
+			<entry class="" argb="255,218,83,0" value="180" />
+			<entry class="" argb="255,218,85,0" value="181" />
+			<entry class="" argb="255,219,87,0" value="182" />
+			<entry class="" argb="255,219,89,0" value="183" />
+			<entry class="" argb="255,220,92,0" value="184" />
+			<entry class="" argb="255,220,94,0" value="185" />
+			<entry class="" argb="255,221,96,0" value="186" />
+			<entry class="" argb="255,221,99,0" value="187" />
+			<entry class="" argb="255,222,101,0" value="188" />
+			<entry class="" argb="255,222,103,0" value="189" />
+			<entry class="" argb="255,223,106,0" value="190" />
+			<entry class="" argb="255,223,108,0" value="191" />
+			<entry class="" argb="255,224,110,0" value="192" />
+			<entry class="" argb="255,224,113,0" value="193" />
+			<entry class="" argb="255,225,115,0" value="194" />
+			<entry class="" argb="255,225,117,0" value="195" />
+			<entry class="" argb="255,226,119,0" value="196" />
+			<entry class="" argb="255,226,122,0" value="197" />
+			<entry class="" argb="255,227,124,0" value="198" />
+			<entry class="" argb="255,227,126,0" value="199" />
+			<entry class="" argb="255,228,129,0" value="200" />
+			<entry class="" argb="255,228,131,0" value="201" />
+			<entry class="" argb="255,229,133,0" value="202" />
+			<entry class="" argb="255,229,136,0" value="203" />
+			<entry class="" argb="255,230,138,0" value="204" />
+			<entry class="" argb="255,230,140,0" value="205" />
+			<entry class="" argb="255,231,142,0" value="206" />
+			<entry class="" argb="255,231,145,0" value="207" />
+			<entry class="" argb="255,232,147,0" value="208" />
+			<entry class="" argb="255,232,149,0" value="209" />
+			<entry class="" argb="255,233,152,0" value="210" />
+			<entry class="" argb="255,233,154,0" value="211" />
+			<entry class="" argb="255,234,156,0" value="212" />
+			<entry class="" argb="255,234,159,0" value="213" />
+			<entry class="" argb="255,235,161,0" value="214" />
+			<entry class="" argb="255,235,163,0" value="215" />
+			<entry class="" argb="255,236,166,0" value="216" />
+			<entry class="" argb="255,236,168,0" value="217" />
+			<entry class="" argb="255,237,170,0" value="218" />
+			<entry class="" argb="255,237,172,0" value="219" />
+			<entry class="" argb="255,238,175,0" value="220" />
+			<entry class="" argb="255,238,177,0" value="221" />
+			<entry class="" argb="255,239,179,0" value="222" />
+			<entry class="" argb="255,239,182,0" value="223" />
+			<entry class="" argb="255,240,184,0" value="224" />
+			<entry class="" argb="255,240,186,0" value="225" />
+			<entry class="" argb="255,241,189,0" value="226" />
+			<entry class="" argb="255,241,191,0" value="227" />
+			<entry class="" argb="255,242,193,0" value="228" />
+			<entry class="" argb="255,242,196,0" value="229" />
+			<entry class="" argb="255,243,198,0" value="230" />
+			<entry class="" argb="255,243,200,0" value="231" />
+			<entry class="" argb="255,244,202,0" value="232" />
+			<entry class="" argb="255,244,205,0" value="233" />
+			<entry class="" argb="255,245,207,0" value="234" />
+			<entry class="" argb="255,245,209,0" value="235" />
+			<entry class="" argb="255,246,212,0" value="236" />
+			<entry class="" argb="255,246,214,0" value="237" />
+			<entry class="" argb="255,247,216,0" value="238" />
+			<entry class="" argb="255,247,219,0" value="239" />
+			<entry class="" argb="255,248,221,0" value="240" />
+			<entry class="" argb="255,248,223,0" value="241" />
+			<entry class="" argb="255,249,226,0" value="242" />
+			<entry class="" argb="255,249,228,0" value="243" />
+			<entry class="" argb="255,250,230,0" value="244" />
+			<entry class="" argb="255,250,232,0" value="245" />
+			<entry class="" argb="255,251,235,0" value="246" />
+			<entry class="" argb="255,251,237,0" value="247" />
+			<entry class="" argb="255,252,239,0" value="248" />
+			<entry class="" argb="255,252,242,0" value="249" />
+			<entry class="" argb="255,253,244,0" value="250" />
+			<entry class="" argb="255,253,246,0" value="251" />
+			<entry class="" argb="255,254,249,0" value="252" />
+			<entry class="" argb="255,254,251,0" value="253" />
+			<entry class="" argb="255,255,253,0" value="254" />
+			<entry class="" argb="255,255,255,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-pastel-red" interpolate="false">
+		<table>
+			<entry class="" argb="255,33,0,96" value="0" />
+			<entry class="" argb="255,33,0,96" value="1" />
+			<entry class="" argb="255,32,0,97" value="2" />
+			<entry class="" argb="255,31,0,99" value="3" />
+			<entry class="" argb="255,31,0,100" value="4" />
+			<entry class="" argb="255,30,0,101" value="5" />
+			<entry class="" argb="255,29,0,102" value="6" />
+			<entry class="" argb="255,28,0,104" value="7" />
+			<entry class="" argb="255,27,0,105" value="8" />
+			<entry class="" argb="255,26,0,106" value="9" />
+			<entry class="" argb="255,25,0,107" value="10" />
+			<entry class="" argb="255,24,0,108" value="11" />
+			<entry class="" argb="255,23,0,110" value="12" />
+			<entry class="" argb="255,22,0,111" value="13" />
+			<entry class="" argb="255,21,0,112" value="14" />
+			<entry class="" argb="255,20,0,113" value="15" />
+			<entry class="" argb="255,19,0,115" value="16" />
+			<entry class="" argb="255,17,0,116" value="17" />
+			<entry class="" argb="255,16,0,117" value="18" />
+			<entry class="" argb="255,15,0,118" value="19" />
+			<entry class="" argb="255,14,0,119" value="20" />
+			<entry class="" argb="255,12,0,121" value="21" />
+			<entry class="" argb="255,11,0,122" value="22" />
+			<entry class="" argb="255,13,0,123" value="23" />
+			<entry class="" argb="255,8,0,124" value="24" />
+			<entry class="" argb="255,7,0,125" value="25" />
+			<entry class="" argb="255,5,0,127" value="26" />
+			<entry class="" argb="255,4,0,128" value="27" />
+			<entry class="" argb="255,2,0,129" value="28" />
+			<entry class="" argb="255,1,0,130" value="29" />
+			<entry class="" argb="255,0,0,132" value="30" />
+			<entry class="" argb="255,0,1,133" value="31" />
+			<entry class="" argb="255,0,3,134" value="32" />
+			<entry class="" argb="255,0,5,135" value="33" />
+			<entry class="" argb="255,0,6,136" value="34" />
+			<entry class="" argb="255,0,8,138" value="35" />
+			<entry class="" argb="255,0,13,139" value="36" />
+			<entry class="" argb="255,0,12,140" value="37" />
+			<entry class="" argb="255,0,13,141" value="38" />
+			<entry class="" argb="255,0,15,143" value="39" />
+			<entry class="" argb="255,0,17,144" value="40" />
+			<entry class="" argb="255,0,19,145" value="41" />
+			<entry class="" argb="255,0,21,146" value="42" />
+			<entry class="" argb="255,0,23,147" value="43" />
+			<entry class="" argb="255,0,25,149" value="44" />
+			<entry class="" argb="255,0,27,150" value="45" />
+			<entry class="" argb="255,0,29,151" value="46" />
+			<entry class="" argb="255,0,31,152" value="47" />
+			<entry class="" argb="255,0,33,154" value="48" />
+			<entry class="" argb="255,0,35,155" value="49" />
+			<entry class="" argb="255,0,37,156" value="50" />
+			<entry class="" argb="255,0,39,157" value="51" />
+			<entry class="" argb="255,0,42,158" value="52" />
+			<entry class="" argb="255,0,44,160" value="53" />
+			<entry class="" argb="255,0,46,161" value="54" />
+			<entry class="" argb="255,0,49,162" value="55" />
+			<entry class="" argb="255,0,51,163" value="56" />
+			<entry class="" argb="255,0,53,164" value="57" />
+			<entry class="" argb="255,0,56,166" value="58" />
+			<entry class="" argb="255,0,58,167" value="59" />
+			<entry class="" argb="255,0,60,168" value="60" />
+			<entry class="" argb="255,0,63,169" value="61" />
+			<entry class="" argb="255,0,65,171" value="62" />
+			<entry class="" argb="255,0,68,172" value="63" />
+			<entry class="" argb="255,0,71,173" value="64" />
+			<entry class="" argb="255,0,73,174" value="65" />
+			<entry class="" argb="255,0,76,175" value="66" />
+			<entry class="" argb="255,0,78,177" value="67" />
+			<entry class="" argb="255,0,81,178" value="68" />
+			<entry class="" argb="255,0,84,179" value="69" />
+			<entry class="" argb="255,0,87,180" value="70" />
+			<entry class="" argb="255,0,89,182" value="71" />
+			<entry class="" argb="255,0,92,183" value="72" />
+			<entry class="" argb="255,0,95,184" value="73" />
+			<entry class="" argb="255,0,98,185" value="74" />
+			<entry class="" argb="255,0,101,186" value="75" />
+			<entry class="" argb="255,0,104,188" value="76" />
+			<entry class="" argb="255,0,107,189" value="77" />
+			<entry class="" argb="255,0,110,190" value="78" />
+			<entry class="" argb="255,0,113,191" value="79" />
+			<entry class="" argb="255,0,116,193" value="80" />
+			<entry class="" argb="255,0,119,194" value="81" />
+			<entry class="" argb="255,0,122,195" value="82" />
+			<entry class="" argb="255,0,125,196" value="83" />
+			<entry class="" argb="255,0,128,197" value="84" />
+			<entry class="" argb="255,0,131,199" value="85" />
+			<entry class="" argb="255,0,134,200" value="86" />
+			<entry class="" argb="255,0,138,201" value="87" />
+			<entry class="" argb="255,0,141,202" value="88" />
+			<entry class="" argb="255,0,144,203" value="89" />
+			<entry class="" argb="255,0,148,205" value="90" />
+			<entry class="" argb="255,0,151,206" value="91" />
+			<entry class="" argb="255,0,154,207" value="92" />
+			<entry class="" argb="255,0,158,208" value="93" />
+			<entry class="" argb="255,0,161,210" value="94" />
+			<entry class="" argb="255,0,165,211" value="95" />
+			<entry class="" argb="255,0,168,212" value="96" />
+			<entry class="" argb="255,0,172,213" value="97" />
+			<entry class="" argb="255,0,175,214" value="98" />
+			<entry class="" argb="255,0,179,216" value="99" />
+			<entry class="" argb="255,0,182,217" value="100" />
+			<entry class="" argb="255,0,186,218" value="101" />
+			<entry class="" argb="255,0,190,219" value="102" />
+			<entry class="" argb="255,0,193,221" value="103" />
+			<entry class="" argb="255,0,197,222" value="104" />
+			<entry class="" argb="255,0,201,223" value="105" />
+			<entry class="" argb="255,0,205,224" value="106" />
+			<entry class="" argb="255,0,209,225" value="107" />
+			<entry class="" argb="255,0,212,227" value="108" />
+			<entry class="" argb="255,0,216,228" value="109" />
+			<entry class="" argb="255,0,220,229" value="110" />
+			<entry class="" argb="255,0,224,230" value="111" />
+			<entry class="" argb="255,0,228,232" value="112" />
+			<entry class="" argb="255,0,232,233" value="113" />
+			<entry class="" argb="255,0,234,232" value="114" />
+			<entry class="" argb="255,0,235,230" value="115" />
+			<entry class="" argb="255,0,236,229" value="116" />
+			<entry class="" argb="255,0,238,227" value="117" />
+			<entry class="" argb="255,0,239,225" value="118" />
+			<entry class="" argb="255,0,240,223" value="119" />
+			<entry class="" argb="255,0,241,222" value="120" />
+			<entry class="" argb="255,0,243,220" value="121" />
+			<entry class="" argb="255,0,244,218" value="122" />
+			<entry class="" argb="255,0,245,216" value="123" />
+			<entry class="" argb="255,0,246,214" value="124" />
+			<entry class="" argb="255,0,247,212" value="125" />
+			<entry class="" argb="255,0,249,210" value="126" />
+			<entry class="" argb="255,0,249,208" value="127" />
+			<entry class="" argb="255,0,246,149" value="128" />
+			<entry class="" argb="255,0,244,142" value="129" />
+			<entry class="" argb="255,0,241,135" value="130" />
+			<entry class="" argb="255,0,237,127" value="131" />
+			<entry class="" argb="255,2,232,118" value="132" />
+			<entry class="" argb="255,4,227,111" value="133" />
+			<entry class="" argb="255,5,223,103" value="134" />
+			<entry class="" argb="255,7,218,95" value="135" />
+			<entry class="" argb="255,8,214,88" value="136" />
+			<entry class="" argb="255,13,209,81" value="137" />
+			<entry class="" argb="255,11,205,74" value="138" />
+			<entry class="" argb="255,13,201,67" value="139" />
+			<entry class="" argb="255,14,196,60" value="140" />
+			<entry class="" argb="255,15,192,53" value="141" />
+			<entry class="" argb="255,17,188,47" value="142" />
+			<entry class="" argb="255,18,184,40" value="143" />
+			<entry class="" argb="255,19,180,34" value="144" />
+			<entry class="" argb="255,20,175,28" value="145" />
+			<entry class="" argb="255,21,171,22" value="146" />
+			<entry class="" argb="255,29,167,22" value="147" />
+			<entry class="" argb="255,36,163,23" value="148" />
+			<entry class="" argb="255,42,160,24" value="149" />
+			<entry class="" argb="255,48,156,25" value="150" />
+			<entry class="" argb="255,53,152,26" value="151" />
+			<entry class="" argb="255,58,148,27" value="152" />
+			<entry class="" argb="255,61,144,28" value="153" />
+			<entry class="" argb="255,65,141,28" value="154" />
+			<entry class="" argb="255,68,137,29" value="155" />
+			<entry class="" argb="255,70,133,30" value="156" />
+			<entry class="" argb="255,72,130,30" value="157" />
+			<entry class="" argb="255,73,126,31" value="158" />
+			<entry class="" argb="255,74,123,31" value="159" />
+			<entry class="" argb="255,74,119,32" value="160" />
+			<entry class="" argb="255,74,116,32" value="161" />
+			<entry class="" argb="255,75,116,29" value="162" />
+			<entry class="" argb="255,75,115,28" value="163" />
+			<entry class="" argb="255,76,113,26" value="164" />
+			<entry class="" argb="255,76,112,25" value="165" />
+			<entry class="" argb="255,76,110,23" value="166" />
+			<entry class="" argb="255,77,109,22" value="167" />
+			<entry class="" argb="255,76,104,20" value="168" />
+			<entry class="" argb="255,77,104,18" value="169" />
+			<entry class="" argb="255,78,103,17" value="170" />
+			<entry class="" argb="255,79,102,16" value="171" />
+			<entry class="" argb="255,80,101,15" value="172" />
+			<entry class="" argb="255,81,100,14" value="173" />
+			<entry class="" argb="255,83,99,13" value="174" />
+			<entry class="" argb="255,84,98,12" value="175" />
+			<entry class="" argb="255,85,97,11" value="176" />
+			<entry class="" argb="255,86,96,13" value="177" />
+			<entry class="" argb="255,88,95,9" value="178" />
+			<entry class="" argb="255,89,94,8" value="179" />
+			<entry class="" argb="255,91,93,7" value="180" />
+			<entry class="" argb="255,92,92,6" value="181" />
+			<entry class="" argb="255,91,88,5" value="182" />
+			<entry class="" argb="255,94,88,5" value="183" />
+			<entry class="" argb="255,96,88,4" value="184" />
+			<entry class="" argb="255,98,87,3" value="185" />
+			<entry class="" argb="255,100,86,3" value="186" />
+			<entry class="" argb="255,102,85,2" value="187" />
+			<entry class="" argb="255,104,85,1" value="188" />
+			<entry class="" argb="255,106,84,0" value="189" />
+			<entry class="" argb="255,108,83,0" value="190" />
+			<entry class="" argb="255,109,82,0" value="191" />
+			<entry class="" argb="255,111,80,0" value="192" />
+			<entry class="" argb="255,112,79,0" value="193" />
+			<entry class="" argb="255,113,78,0" value="194" />
+			<entry class="" argb="255,115,76,0" value="195" />
+			<entry class="" argb="255,116,75,0" value="196" />
+			<entry class="" argb="255,117,74,0" value="197" />
+			<entry class="" argb="255,119,73,0" value="198" />
+			<entry class="" argb="255,120,71,0" value="199" />
+			<entry class="" argb="255,121,70,0" value="200" />
+			<entry class="" argb="255,123,69,0" value="201" />
+			<entry class="" argb="255,124,68,0" value="202" />
+			<entry class="" argb="255,125,67,0" value="203" />
+			<entry class="" argb="255,127,66,0" value="204" />
+			<entry class="" argb="255,128,64,0" value="205" />
+			<entry class="" argb="255,129,63,0" value="206" />
+			<entry class="" argb="255,131,61,0" value="207" />
+			<entry class="" argb="255,132,58,0" value="208" />
+			<entry class="" argb="255,133,56,0" value="209" />
+			<entry class="" argb="255,135,54,0" value="210" />
+			<entry class="" argb="255,136,52,0" value="211" />
+			<entry class="" argb="255,137,49,0" value="212" />
+			<entry class="" argb="255,138,47,0" value="213" />
+			<entry class="" argb="255,140,45,0" value="214" />
+			<entry class="" argb="255,141,43,0" value="215" />
+			<entry class="" argb="255,142,41,0" value="216" />
+			<entry class="" argb="255,144,40,0" value="217" />
+			<entry class="" argb="255,145,38,0" value="218" />
+			<entry class="" argb="255,146,36,0" value="219" />
+			<entry class="" argb="255,148,34,0" value="220" />
+			<entry class="" argb="255,149,33,0" value="221" />
+			<entry class="" argb="255,150,31,0" value="222" />
+			<entry class="" argb="255,152,29,0" value="223" />
+			<entry class="" argb="255,153,28,0" value="224" />
+			<entry class="" argb="255,154,26,0" value="225" />
+			<entry class="" argb="255,156,25,0" value="226" />
+			<entry class="" argb="255,157,23,0" value="227" />
+			<entry class="" argb="255,158,22,0" value="228" />
+			<entry class="" argb="255,160,21,0" value="229" />
+			<entry class="" argb="255,161,19,0" value="230" />
+			<entry class="" argb="255,162,18,0" value="231" />
+			<entry class="" argb="255,164,17,0" value="232" />
+			<entry class="" argb="255,165,16,0" value="233" />
+			<entry class="" argb="255,166,14,0" value="234" />
+			<entry class="" argb="255,168,13,0" value="235" />
+			<entry class="" argb="255,169,12,0" value="236" />
+			<entry class="" argb="255,170,11,0" value="237" />
+			<entry class="" argb="255,172,13,0" value="238" />
+			<entry class="" argb="255,173,9,0" value="239" />
+			<entry class="" argb="255,174,8,0" value="240" />
+			<entry class="" argb="255,175,7,0" value="241" />
+			<entry class="" argb="255,177,7,0" value="242" />
+			<entry class="" argb="255,178,6,0" value="243" />
+			<entry class="" argb="255,179,5,0" value="244" />
+			<entry class="" argb="255,181,4,0" value="245" />
+			<entry class="" argb="255,182,4,0" value="246" />
+			<entry class="" argb="255,183,3,0" value="247" />
+			<entry class="" argb="255,185,2,0" value="248" />
+			<entry class="" argb="255,186,2,0" value="249" />
+			<entry class="" argb="255,187,1,0" value="250" />
+			<entry class="" argb="255,189,1,0" value="251" />
+			<entry class="" argb="255,190,0,0" value="252" />
+			<entry class="" argb="255,191,0,0" value="253" />
+			<entry class="" argb="255,193,0,0" value="254" />
+			<entry class="" argb="255,193,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-red" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,1,1" value="1" />
+			<entry class="" argb="255,0,2,2" value="2" />
+			<entry class="" argb="255,0,3,3" value="3" />
+			<entry class="" argb="255,0,4,4" value="4" />
+			<entry class="" argb="255,0,8,8" value="5" />
+			<entry class="" argb="255,0,12,12" value="6" />
+			<entry class="" argb="255,0,16,16" value="7" />
+			<entry class="" argb="255,0,21,21" value="8" />
+			<entry class="" argb="255,0,25,25" value="9" />
+			<entry class="" argb="255,0,29,29" value="10" />
+			<entry class="" argb="255,0,33,33" value="11" />
+			<entry class="" argb="255,0,38,38" value="12" />
+			<entry class="" argb="255,0,42,42" value="13" />
+			<entry class="" argb="255,0,46,46" value="14" />
+			<entry class="" argb="255,0,50,50" value="15" />
+			<entry class="" argb="255,0,55,55" value="16" />
+			<entry class="" argb="255,0,59,59" value="17" />
+			<entry class="" argb="255,0,63,63" value="18" />
+			<entry class="" argb="255,0,67,67" value="19" />
+			<entry class="" argb="255,0,72,72" value="20" />
+			<entry class="" argb="255,0,76,76" value="21" />
+			<entry class="" argb="255,0,80,80" value="22" />
+			<entry class="" argb="255,0,84,84" value="23" />
+			<entry class="" argb="255,0,89,89" value="24" />
+			<entry class="" argb="255,0,93,93" value="25" />
+			<entry class="" argb="255,0,97,97" value="26" />
+			<entry class="" argb="255,0,101,101" value="27" />
+			<entry class="" argb="255,0,106,106" value="28" />
+			<entry class="" argb="255,0,110,110" value="29" />
+			<entry class="" argb="255,0,114,114" value="30" />
+			<entry class="" argb="255,0,118,118" value="31" />
+			<entry class="" argb="255,0,123,123" value="32" />
+			<entry class="" argb="255,0,127,127" value="33" />
+			<entry class="" argb="255,0,131,131" value="34" />
+			<entry class="" argb="255,0,135,135" value="35" />
+			<entry class="" argb="255,0,140,140" value="36" />
+			<entry class="" argb="255,0,144,144" value="37" />
+			<entry class="" argb="255,0,148,148" value="38" />
+			<entry class="" argb="255,0,152,152" value="39" />
+			<entry class="" argb="255,0,157,157" value="40" />
+			<entry class="" argb="255,0,161,161" value="41" />
+			<entry class="" argb="255,0,165,165" value="42" />
+			<entry class="" argb="255,0,169,169" value="43" />
+			<entry class="" argb="255,0,174,174" value="44" />
+			<entry class="" argb="255,0,178,178" value="45" />
+			<entry class="" argb="255,0,182,182" value="46" />
+			<entry class="" argb="255,0,186,186" value="47" />
+			<entry class="" argb="255,0,191,191" value="48" />
+			<entry class="" argb="255,0,195,195" value="49" />
+			<entry class="" argb="255,0,199,199" value="50" />
+			<entry class="" argb="255,0,203,203" value="51" />
+			<entry class="" argb="255,0,208,208" value="52" />
+			<entry class="" argb="255,0,212,212" value="53" />
+			<entry class="" argb="255,0,216,216" value="54" />
+			<entry class="" argb="255,0,220,220" value="55" />
+			<entry class="" argb="255,0,225,225" value="56" />
+			<entry class="" argb="255,0,229,229" value="57" />
+			<entry class="" argb="255,0,233,233" value="58" />
+			<entry class="" argb="255,0,237,237" value="59" />
+			<entry class="" argb="255,0,242,242" value="60" />
+			<entry class="" argb="255,0,246,246" value="61" />
+			<entry class="" argb="255,0,250,250" value="62" />
+			<entry class="" argb="255,0,255,255" value="63" />
+			<entry class="" argb="255,0,255,255" value="64" />
+			<entry class="" argb="255,0,251,255" value="65" />
+			<entry class="" argb="255,0,247,255" value="66" />
+			<entry class="" argb="255,0,243,255" value="67" />
+			<entry class="" argb="255,0,239,255" value="68" />
+			<entry class="" argb="255,0,235,255" value="69" />
+			<entry class="" argb="255,0,231,255" value="70" />
+			<entry class="" argb="255,0,227,255" value="71" />
+			<entry class="" argb="255,0,223,255" value="72" />
+			<entry class="" argb="255,0,219,255" value="73" />
+			<entry class="" argb="255,0,215,255" value="74" />
+			<entry class="" argb="255,0,211,255" value="75" />
+			<entry class="" argb="255,0,207,255" value="76" />
+			<entry class="" argb="255,0,203,255" value="77" />
+			<entry class="" argb="255,0,199,255" value="78" />
+			<entry class="" argb="255,0,195,255" value="79" />
+			<entry class="" argb="255,0,191,255" value="80" />
+			<entry class="" argb="255,0,187,255" value="81" />
+			<entry class="" argb="255,0,183,255" value="82" />
+			<entry class="" argb="255,0,179,255" value="83" />
+			<entry class="" argb="255,0,175,255" value="84" />
+			<entry class="" argb="255,0,170,255" value="85" />
+			<entry class="" argb="255,0,166,255" value="86" />
+			<entry class="" argb="255,0,162,255" value="87" />
+			<entry class="" argb="255,0,158,255" value="88" />
+			<entry class="" argb="255,0,154,255" value="89" />
+			<entry class="" argb="255,0,150,255" value="90" />
+			<entry class="" argb="255,0,146,255" value="91" />
+			<entry class="" argb="255,0,142,255" value="92" />
+			<entry class="" argb="255,0,138,255" value="93" />
+			<entry class="" argb="255,0,134,255" value="94" />
+			<entry class="" argb="255,0,130,255" value="95" />
+			<entry class="" argb="255,0,126,255" value="96" />
+			<entry class="" argb="255,0,122,255" value="97" />
+			<entry class="" argb="255,0,118,255" value="98" />
+			<entry class="" argb="255,0,114,255" value="99" />
+			<entry class="" argb="255,0,110,255" value="100" />
+			<entry class="" argb="255,0,106,255" value="101" />
+			<entry class="" argb="255,0,102,255" value="102" />
+			<entry class="" argb="255,0,98,255" value="103" />
+			<entry class="" argb="255,0,94,255" value="104" />
+			<entry class="" argb="255,0,90,255" value="105" />
+			<entry class="" argb="255,0,85,255" value="106" />
+			<entry class="" argb="255,0,81,255" value="107" />
+			<entry class="" argb="255,0,77,255" value="108" />
+			<entry class="" argb="255,0,73,255" value="109" />
+			<entry class="" argb="255,0,69,255" value="110" />
+			<entry class="" argb="255,0,65,255" value="111" />
+			<entry class="" argb="255,0,61,255" value="112" />
+			<entry class="" argb="255,0,57,255" value="113" />
+			<entry class="" argb="255,0,53,255" value="114" />
+			<entry class="" argb="255,0,49,255" value="115" />
+			<entry class="" argb="255,0,45,255" value="116" />
+			<entry class="" argb="255,0,41,255" value="117" />
+			<entry class="" argb="255,0,37,255" value="118" />
+			<entry class="" argb="255,0,33,255" value="119" />
+			<entry class="" argb="255,0,29,255" value="120" />
+			<entry class="" argb="255,0,25,255" value="121" />
+			<entry class="" argb="255,0,21,255" value="122" />
+			<entry class="" argb="255,0,17,255" value="123" />
+			<entry class="" argb="255,0,13,255" value="124" />
+			<entry class="" argb="255,0,9,255" value="125" />
+			<entry class="" argb="255,0,5,255" value="126" />
+			<entry class="" argb="255,0,0,255" value="127" />
+			<entry class="" argb="255,0,0,255" value="128" />
+			<entry class="" argb="255,4,0,255" value="129" />
+			<entry class="" argb="255,8,0,255" value="130" />
+			<entry class="" argb="255,12,0,255" value="131" />
+			<entry class="" argb="255,16,0,255" value="132" />
+			<entry class="" argb="255,20,0,255" value="133" />
+			<entry class="" argb="255,24,0,255" value="134" />
+			<entry class="" argb="255,28,0,255" value="135" />
+			<entry class="" argb="255,32,0,255" value="136" />
+			<entry class="" argb="255,36,0,255" value="137" />
+			<entry class="" argb="255,40,0,255" value="138" />
+			<entry class="" argb="255,44,0,255" value="139" />
+			<entry class="" argb="255,48,0,255" value="140" />
+			<entry class="" argb="255,52,0,255" value="141" />
+			<entry class="" argb="255,56,0,255" value="142" />
+			<entry class="" argb="255,60,0,255" value="143" />
+			<entry class="" argb="255,64,0,255" value="144" />
+			<entry class="" argb="255,68,0,255" value="145" />
+			<entry class="" argb="255,72,0,255" value="146" />
+			<entry class="" argb="255,76,0,255" value="147" />
+			<entry class="" argb="255,80,0,255" value="148" />
+			<entry class="" argb="255,85,0,255" value="149" />
+			<entry class="" argb="255,89,0,255" value="150" />
+			<entry class="" argb="255,93,0,255" value="151" />
+			<entry class="" argb="255,97,0,255" value="152" />
+			<entry class="" argb="255,101,0,255" value="153" />
+			<entry class="" argb="255,105,0,255" value="154" />
+			<entry class="" argb="255,109,0,255" value="155" />
+			<entry class="" argb="255,113,0,255" value="156" />
+			<entry class="" argb="255,117,0,255" value="157" />
+			<entry class="" argb="255,121,0,255" value="158" />
+			<entry class="" argb="255,125,0,255" value="159" />
+			<entry class="" argb="255,129,0,255" value="160" />
+			<entry class="" argb="255,133,0,255" value="161" />
+			<entry class="" argb="255,137,0,255" value="162" />
+			<entry class="" argb="255,141,0,255" value="163" />
+			<entry class="" argb="255,145,0,255" value="164" />
+			<entry class="" argb="255,149,0,255" value="165" />
+			<entry class="" argb="255,153,0,255" value="166" />
+			<entry class="" argb="255,157,0,255" value="167" />
+			<entry class="" argb="255,161,0,255" value="168" />
+			<entry class="" argb="255,165,0,255" value="169" />
+			<entry class="" argb="255,170,0,255" value="170" />
+			<entry class="" argb="255,174,0,255" value="171" />
+			<entry class="" argb="255,178,0,255" value="172" />
+			<entry class="" argb="255,182,0,255" value="173" />
+			<entry class="" argb="255,186,0,255" value="174" />
+			<entry class="" argb="255,190,0,255" value="175" />
+			<entry class="" argb="255,194,0,255" value="176" />
+			<entry class="" argb="255,198,0,255" value="177" />
+			<entry class="" argb="255,202,0,255" value="178" />
+			<entry class="" argb="255,206,0,255" value="179" />
+			<entry class="" argb="255,210,0,255" value="180" />
+			<entry class="" argb="255,214,0,255" value="181" />
+			<entry class="" argb="255,218,0,255" value="182" />
+			<entry class="" argb="255,222,0,255" value="183" />
+			<entry class="" argb="255,226,0,255" value="184" />
+			<entry class="" argb="255,230,0,255" value="185" />
+			<entry class="" argb="255,234,0,255" value="186" />
+			<entry class="" argb="255,238,0,255" value="187" />
+			<entry class="" argb="255,242,0,255" value="188" />
+			<entry class="" argb="255,246,0,255" value="189" />
+			<entry class="" argb="255,250,0,255" value="190" />
+			<entry class="" argb="255,255,0,255" value="191" />
+			<entry class="" argb="255,255,0,255" value="192" />
+			<entry class="" argb="255,255,0,251" value="193" />
+			<entry class="" argb="255,255,0,247" value="194" />
+			<entry class="" argb="255,255,0,243" value="195" />
+			<entry class="" argb="255,255,0,239" value="196" />
+			<entry class="" argb="255,255,0,235" value="197" />
+			<entry class="" argb="255,255,0,231" value="198" />
+			<entry class="" argb="255,255,0,227" value="199" />
+			<entry class="" argb="255,255,0,223" value="200" />
+			<entry class="" argb="255,255,0,218" value="201" />
+			<entry class="" argb="255,255,0,214" value="202" />
+			<entry class="" argb="255,255,0,210" value="203" />
+			<entry class="" argb="255,255,0,206" value="204" />
+			<entry class="" argb="255,255,0,202" value="205" />
+			<entry class="" argb="255,255,0,198" value="206" />
+			<entry class="" argb="255,255,0,194" value="207" />
+			<entry class="" argb="255,255,0,190" value="208" />
+			<entry class="" argb="255,255,0,186" value="209" />
+			<entry class="" argb="255,255,0,181" value="210" />
+			<entry class="" argb="255,255,0,177" value="211" />
+			<entry class="" argb="255,255,0,173" value="212" />
+			<entry class="" argb="255,255,0,169" value="213" />
+			<entry class="" argb="255,255,0,165" value="214" />
+			<entry class="" argb="255,255,0,161" value="215" />
+			<entry class="" argb="255,255,0,157" value="216" />
+			<entry class="" argb="255,255,0,153" value="217" />
+			<entry class="" argb="255,255,0,149" value="218" />
+			<entry class="" argb="255,255,0,144" value="219" />
+			<entry class="" argb="255,255,0,140" value="220" />
+			<entry class="" argb="255,255,0,136" value="221" />
+			<entry class="" argb="255,255,0,132" value="222" />
+			<entry class="" argb="255,255,0,128" value="223" />
+			<entry class="" argb="255,255,0,124" value="224" />
+			<entry class="" argb="255,255,0,120" value="225" />
+			<entry class="" argb="255,255,0,116" value="226" />
+			<entry class="" argb="255,255,0,112" value="227" />
+			<entry class="" argb="255,255,0,107" value="228" />
+			<entry class="" argb="255,255,0,103" value="229" />
+			<entry class="" argb="255,255,0,99" value="230" />
+			<entry class="" argb="255,255,0,95" value="231" />
+			<entry class="" argb="255,255,0,91" value="232" />
+			<entry class="" argb="255,255,0,87" value="233" />
+			<entry class="" argb="255,255,0,83" value="234" />
+			<entry class="" argb="255,255,0,79" value="235" />
+			<entry class="" argb="255,255,0,75" value="236" />
+			<entry class="" argb="255,255,0,70" value="237" />
+			<entry class="" argb="255,255,0,66" value="238" />
+			<entry class="" argb="255,255,0,62" value="239" />
+			<entry class="" argb="255,255,0,58" value="240" />
+			<entry class="" argb="255,255,0,54" value="241" />
+			<entry class="" argb="255,255,0,50" value="242" />
+			<entry class="" argb="255,255,0,46" value="243" />
+			<entry class="" argb="255,255,0,42" value="244" />
+			<entry class="" argb="255,255,0,38" value="245" />
+			<entry class="" argb="255,255,0,33" value="246" />
+			<entry class="" argb="255,255,0,29" value="247" />
+			<entry class="" argb="255,255,0,25" value="248" />
+			<entry class="" argb="255,255,0,21" value="249" />
+			<entry class="" argb="255,255,0,17" value="250" />
+			<entry class="" argb="255,255,0,13" value="251" />
+			<entry class="" argb="255,255,0,9" value="252" />
+			<entry class="" argb="255,255,0,5" value="253" />
+			<entry class="" argb="255,255,0,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="blue-waves" interpolate="false">
+		<table>
+			<entry class="" argb="255,82,0,214" value="0" />
+			<entry class="" argb="255,82,0,214" value="1" />
+			<entry class="" argb="255,77,1,202" value="2" />
+			<entry class="" argb="255,73,1,189" value="3" />
+			<entry class="" argb="255,68,2,177" value="4" />
+			<entry class="" argb="255,63,2,165" value="5" />
+			<entry class="" argb="255,59,3,153" value="6" />
+			<entry class="" argb="255,54,4,141" value="7" />
+			<entry class="" argb="255,50,4,129" value="8" />
+			<entry class="" argb="255,46,5,118" value="9" />
+			<entry class="" argb="255,42,6,107" value="10" />
+			<entry class="" argb="255,38,6,96" value="11" />
+			<entry class="" argb="255,34,7,85" value="12" />
+			<entry class="" argb="255,30,8,75" value="13" />
+			<entry class="" argb="255,26,9,65" value="14" />
+			<entry class="" argb="255,23,13,56" value="15" />
+			<entry class="" argb="255,19,11,47" value="16" />
+			<entry class="" argb="255,16,12,38" value="17" />
+			<entry class="" argb="255,13,13,30" value="18" />
+			<entry class="" argb="255,13,15,22" value="19" />
+			<entry class="" argb="255,8,16,15" value="20" />
+			<entry class="" argb="255,5,17,9" value="21" />
+			<entry class="" argb="255,3,19,2" value="22" />
+			<entry class="" argb="255,1,20,2" value="23" />
+			<entry class="" argb="255,0,22,7" value="24" />
+			<entry class="" argb="255,2,23,12" value="25" />
+			<entry class="" argb="255,3,25,16" value="26" />
+			<entry class="" argb="255,5,27,19" value="27" />
+			<entry class="" argb="255,6,28,22" value="28" />
+			<entry class="" argb="255,6,30,24" value="29" />
+			<entry class="" argb="255,7,32,25" value="30" />
+			<entry class="" argb="255,7,34,26" value="31" />
+			<entry class="" argb="255,8,35,27" value="32" />
+			<entry class="" argb="255,7,37,26" value="33" />
+			<entry class="" argb="255,7,39,25" value="34" />
+			<entry class="" argb="255,6,41,24" value="35" />
+			<entry class="" argb="255,6,43,22" value="36" />
+			<entry class="" argb="255,5,45,19" value="37" />
+			<entry class="" argb="255,3,46,16" value="38" />
+			<entry class="" argb="255,2,48,12" value="39" />
+			<entry class="" argb="255,0,50,7" value="40" />
+			<entry class="" argb="255,1,51,2" value="41" />
+			<entry class="" argb="255,3,53,2" value="42" />
+			<entry class="" argb="255,5,55,9" value="43" />
+			<entry class="" argb="255,8,56,15" value="44" />
+			<entry class="" argb="255,13,58,22" value="45" />
+			<entry class="" argb="255,13,59,30" value="46" />
+			<entry class="" argb="255,16,60,38" value="47" />
+			<entry class="" argb="255,19,61,47" value="48" />
+			<entry class="" argb="255,23,62,56" value="49" />
+			<entry class="" argb="255,26,63,65" value="50" />
+			<entry class="" argb="255,30,64,75" value="51" />
+			<entry class="" argb="255,34,65,85" value="52" />
+			<entry class="" argb="255,38,66,96" value="53" />
+			<entry class="" argb="255,42,66,107" value="54" />
+			<entry class="" argb="255,46,67,118" value="55" />
+			<entry class="" argb="255,50,67,129" value="56" />
+			<entry class="" argb="255,54,67,141" value="57" />
+			<entry class="" argb="255,59,67,153" value="58" />
+			<entry class="" argb="255,63,67,165" value="59" />
+			<entry class="" argb="255,68,67,177" value="60" />
+			<entry class="" argb="255,73,67,189" value="61" />
+			<entry class="" argb="255,77,67,202" value="62" />
+			<entry class="" argb="255,82,66,214" value="63" />
+			<entry class="" argb="255,87,66,227" value="64" />
+			<entry class="" argb="255,91,65,239" value="65" />
+			<entry class="" argb="255,96,64,251" value="66" />
+			<entry class="" argb="255,100,64,246" value="67" />
+			<entry class="" argb="255,105,63,234" value="68" />
+			<entry class="" argb="255,110,62,222" value="69" />
+			<entry class="" argb="255,114,61,210" value="70" />
+			<entry class="" argb="255,119,60,198" value="71" />
+			<entry class="" argb="255,123,59,186" value="72" />
+			<entry class="" argb="255,127,57,175" value="73" />
+			<entry class="" argb="255,131,56,164" value="74" />
+			<entry class="" argb="255,135,55,153" value="75" />
+			<entry class="" argb="255,139,54,142" value="76" />
+			<entry class="" argb="255,143,53,132" value="77" />
+			<entry class="" argb="255,147,52,122" value="78" />
+			<entry class="" argb="255,150,51,113" value="79" />
+			<entry class="" argb="255,154,49,104" value="80" />
+			<entry class="" argb="255,157,48,95" value="81" />
+			<entry class="" argb="255,160,47,87" value="82" />
+			<entry class="" argb="255,163,47,79" value="83" />
+			<entry class="" argb="255,165,46,72" value="84" />
+			<entry class="" argb="255,168,45,66" value="85" />
+			<entry class="" argb="255,170,44,59" value="86" />
+			<entry class="" argb="255,172,44,54" value="87" />
+			<entry class="" argb="255,174,44,49" value="88" />
+			<entry class="" argb="255,176,43,44" value="89" />
+			<entry class="" argb="255,177,43,40" value="90" />
+			<entry class="" argb="255,179,43,37" value="91" />
+			<entry class="" argb="255,180,43,34" value="92" />
+			<entry class="" argb="255,180,44,32" value="93" />
+			<entry class="" argb="255,181,44,31" value="94" />
+			<entry class="" argb="255,181,45,30" value="95" />
+			<entry class="" argb="255,182,46,29" value="96" />
+			<entry class="" argb="255,181,47,30" value="97" />
+			<entry class="" argb="255,181,48,31" value="98" />
+			<entry class="" argb="255,180,50,32" value="99" />
+			<entry class="" argb="255,180,51,34" value="100" />
+			<entry class="" argb="255,179,53,37" value="101" />
+			<entry class="" argb="255,177,55,40" value="102" />
+			<entry class="" argb="255,176,57,44" value="103" />
+			<entry class="" argb="255,174,60,49" value="104" />
+			<entry class="" argb="255,172,62,54" value="105" />
+			<entry class="" argb="255,170,65,59" value="106" />
+			<entry class="" argb="255,168,68,66" value="107" />
+			<entry class="" argb="255,165,71,72" value="108" />
+			<entry class="" argb="255,163,74,79" value="109" />
+			<entry class="" argb="255,160,78,87" value="110" />
+			<entry class="" argb="255,157,81,95" value="111" />
+			<entry class="" argb="255,154,85,104" value="112" />
+			<entry class="" argb="255,150,88,113" value="113" />
+			<entry class="" argb="255,147,92,122" value="114" />
+			<entry class="" argb="255,143,96,132" value="115" />
+			<entry class="" argb="255,139,100,142" value="116" />
+			<entry class="" argb="255,135,104,153" value="117" />
+			<entry class="" argb="255,131,108,164" value="118" />
+			<entry class="" argb="255,127,112,175" value="119" />
+			<entry class="" argb="255,123,116,186" value="120" />
+			<entry class="" argb="255,119,120,198" value="121" />
+			<entry class="" argb="255,114,124,210" value="122" />
+			<entry class="" argb="255,110,128,222" value="123" />
+			<entry class="" argb="255,105,132,234" value="124" />
+			<entry class="" argb="255,100,136,246" value="125" />
+			<entry class="" argb="255,96,140,251" value="126" />
+			<entry class="" argb="255,91,144,239" value="127" />
+			<entry class="" argb="255,86,148,226" value="128" />
+			<entry class="" argb="255,82,151,214" value="129" />
+			<entry class="" argb="255,77,154,202" value="130" />
+			<entry class="" argb="255,73,158,189" value="131" />
+			<entry class="" argb="255,68,161,177" value="132" />
+			<entry class="" argb="255,63,164,165" value="133" />
+			<entry class="" argb="255,59,166,153" value="134" />
+			<entry class="" argb="255,54,169,141" value="135" />
+			<entry class="" argb="255,50,171,129" value="136" />
+			<entry class="" argb="255,46,173,118" value="137" />
+			<entry class="" argb="255,42,175,107" value="138" />
+			<entry class="" argb="255,38,176,96" value="139" />
+			<entry class="" argb="255,34,178,85" value="140" />
+			<entry class="" argb="255,30,179,75" value="141" />
+			<entry class="" argb="255,26,180,65" value="142" />
+			<entry class="" argb="255,23,180,56" value="143" />
+			<entry class="" argb="255,19,180,47" value="144" />
+			<entry class="" argb="255,16,180,38" value="145" />
+			<entry class="" argb="255,13,180,30" value="146" />
+			<entry class="" argb="255,13,179,22" value="147" />
+			<entry class="" argb="255,8,179,15" value="148" />
+			<entry class="" argb="255,5,178,9" value="149" />
+			<entry class="" argb="255,3,176,2" value="150" />
+			<entry class="" argb="255,1,175,2" value="151" />
+			<entry class="" argb="255,0,173,7" value="152" />
+			<entry class="" argb="255,2,171,12" value="153" />
+			<entry class="" argb="255,3,169,16" value="154" />
+			<entry class="" argb="255,5,166,19" value="155" />
+			<entry class="" argb="255,6,164,22" value="156" />
+			<entry class="" argb="255,6,161,24" value="157" />
+			<entry class="" argb="255,7,158,25" value="158" />
+			<entry class="" argb="255,7,155,26" value="159" />
+			<entry class="" argb="255,8,152,27" value="160" />
+			<entry class="" argb="255,7,148,26" value="161" />
+			<entry class="" argb="255,7,145,25" value="162" />
+			<entry class="" argb="255,6,141,24" value="163" />
+			<entry class="" argb="255,6,138,22" value="164" />
+			<entry class="" argb="255,5,134,19" value="165" />
+			<entry class="" argb="255,3,131,16" value="166" />
+			<entry class="" argb="255,2,127,12" value="167" />
+			<entry class="" argb="255,0,124,7" value="168" />
+			<entry class="" argb="255,1,120,2" value="169" />
+			<entry class="" argb="255,3,117,2" value="170" />
+			<entry class="" argb="255,5,113,9" value="171" />
+			<entry class="" argb="255,8,110,15" value="172" />
+			<entry class="" argb="255,13,107,22" value="173" />
+			<entry class="" argb="255,13,104,30" value="174" />
+			<entry class="" argb="255,16,101,38" value="175" />
+			<entry class="" argb="255,19,99,47" value="176" />
+			<entry class="" argb="255,23,97,56" value="177" />
+			<entry class="" argb="255,26,95,65" value="178" />
+			<entry class="" argb="255,30,93,75" value="179" />
+			<entry class="" argb="255,34,91,85" value="180" />
+			<entry class="" argb="255,38,90,96" value="181" />
+			<entry class="" argb="255,42,89,107" value="182" />
+			<entry class="" argb="255,46,88,118" value="183" />
+			<entry class="" argb="255,50,88,129" value="184" />
+			<entry class="" argb="255,54,88,141" value="185" />
+			<entry class="" argb="255,59,88,153" value="186" />
+			<entry class="" argb="255,63,88,165" value="187" />
+			<entry class="" argb="255,68,89,177" value="188" />
+			<entry class="" argb="255,73,91,189" value="189" />
+			<entry class="" argb="255,77,92,202" value="190" />
+			<entry class="" argb="255,82,94,214" value="191" />
+			<entry class="" argb="255,87,96,227" value="192" />
+			<entry class="" argb="255,91,99,239" value="193" />
+			<entry class="" argb="255,96,102,251" value="194" />
+			<entry class="" argb="255,100,105,246" value="195" />
+			<entry class="" argb="255,105,109,234" value="196" />
+			<entry class="" argb="255,110,113,222" value="197" />
+			<entry class="" argb="255,114,117,210" value="198" />
+			<entry class="" argb="255,119,122,198" value="199" />
+			<entry class="" argb="255,123,127,186" value="200" />
+			<entry class="" argb="255,127,132,175" value="201" />
+			<entry class="" argb="255,131,137,164" value="202" />
+			<entry class="" argb="255,135,142,153" value="203" />
+			<entry class="" argb="255,139,148,142" value="204" />
+			<entry class="" argb="255,143,154,132" value="205" />
+			<entry class="" argb="255,147,160,122" value="206" />
+			<entry class="" argb="255,150,166,113" value="207" />
+			<entry class="" argb="255,154,173,104" value="208" />
+			<entry class="" argb="255,157,179,95" value="209" />
+			<entry class="" argb="255,160,186,87" value="210" />
+			<entry class="" argb="255,163,192,79" value="211" />
+			<entry class="" argb="255,165,199,72" value="212" />
+			<entry class="" argb="255,168,205,66" value="213" />
+			<entry class="" argb="255,170,212,59" value="214" />
+			<entry class="" argb="255,172,218,54" value="215" />
+			<entry class="" argb="255,174,225,49" value="216" />
+			<entry class="" argb="255,176,231,44" value="217" />
+			<entry class="" argb="255,177,237,40" value="218" />
+			<entry class="" argb="255,179,243,37" value="219" />
+			<entry class="" argb="255,180,248,34" value="220" />
+			<entry class="" argb="255,180,254,32" value="221" />
+			<entry class="" argb="255,181,251,31" value="222" />
+			<entry class="" argb="255,181,246,30" value="223" />
+			<entry class="" argb="255,182,241,29" value="224" />
+			<entry class="" argb="255,181,237,30" value="225" />
+			<entry class="" argb="255,181,233,31" value="226" />
+			<entry class="" argb="255,180,229,32" value="227" />
+			<entry class="" argb="255,180,226,34" value="228" />
+			<entry class="" argb="255,179,223,37" value="229" />
+			<entry class="" argb="255,177,220,40" value="230" />
+			<entry class="" argb="255,176,218,44" value="231" />
+			<entry class="" argb="255,174,216,49" value="232" />
+			<entry class="" argb="255,172,215,54" value="233" />
+			<entry class="" argb="255,170,214,59" value="234" />
+			<entry class="" argb="255,168,213,66" value="235" />
+			<entry class="" argb="255,165,213,72" value="236" />
+			<entry class="" argb="255,163,214,79" value="237" />
+			<entry class="" argb="255,160,214,87" value="238" />
+			<entry class="" argb="255,157,216,95" value="239" />
+			<entry class="" argb="255,154,217,104" value="240" />
+			<entry class="" argb="255,150,219,113" value="241" />
+			<entry class="" argb="255,147,222,122" value="242" />
+			<entry class="" argb="255,143,224,132" value="243" />
+			<entry class="" argb="255,139,228,142" value="244" />
+			<entry class="" argb="255,135,231,153" value="245" />
+			<entry class="" argb="255,131,235,164" value="246" />
+			<entry class="" argb="255,127,239,175" value="247" />
+			<entry class="" argb="255,123,244,186" value="248" />
+			<entry class="" argb="255,119,248,198" value="249" />
+			<entry class="" argb="255,114,253,210" value="250" />
+			<entry class="" argb="255,110,251,222" value="251" />
+			<entry class="" argb="255,105,246,234" value="252" />
+			<entry class="" argb="255,100,240,246" value="253" />
+			<entry class="" argb="255,96,234,251" value="254" />
+			<entry class="" argb="255,96,234,251" value="255" />
+		</table>
+	</palette>
+
+	<palette name="green-red-blue" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,36,0" value="1" />
+			<entry class="" argb="255,0,72,0" value="2" />
+			<entry class="" argb="255,0,75,0" value="3" />
+			<entry class="" argb="255,0,79,0" value="4" />
+			<entry class="" argb="255,0,82,0" value="5" />
+			<entry class="" argb="255,0,86,0" value="6" />
+			<entry class="" argb="255,0,90,0" value="7" />
+			<entry class="" argb="255,0,93,0" value="8" />
+			<entry class="" argb="255,0,97,0" value="9" />
+			<entry class="" argb="255,0,100,0" value="10" />
+			<entry class="" argb="255,0,104,0" value="11" />
+			<entry class="" argb="255,0,108,0" value="12" />
+			<entry class="" argb="255,0,117,0" value="13" />
+			<entry class="" argb="255,0,126,0" value="14" />
+			<entry class="" argb="255,0,135,0" value="15" />
+			<entry class="" argb="255,0,144,0" value="16" />
+			<entry class="" argb="255,0,153,0" value="17" />
+			<entry class="" argb="255,0,162,0" value="18" />
+			<entry class="" argb="255,0,171,0" value="19" />
+			<entry class="" argb="255,0,180,0" value="20" />
+			<entry class="" argb="255,0,189,0" value="21" />
+			<entry class="" argb="255,0,198,0" value="22" />
+			<entry class="" argb="255,0,207,0" value="23" />
+			<entry class="" argb="255,0,216,0" value="24" />
+			<entry class="" argb="255,0,225,0" value="25" />
+			<entry class="" argb="255,0,234,0" value="26" />
+			<entry class="" argb="255,0,243,0" value="27" />
+			<entry class="" argb="255,0,252,0" value="28" />
+			<entry class="" argb="255,6,249,0" value="29" />
+			<entry class="" argb="255,12,246,0" value="30" />
+			<entry class="" argb="255,18,243,0" value="31" />
+			<entry class="" argb="255,24,240,0" value="32" />
+			<entry class="" argb="255,30,234,0" value="33" />
+			<entry class="" argb="255,36,228,0" value="34" />
+			<entry class="" argb="255,42,222,0" value="35" />
+			<entry class="" argb="255,48,216,0" value="36" />
+			<entry class="" argb="255,54,210,0" value="37" />
+			<entry class="" argb="255,60,204,0" value="38" />
+			<entry class="" argb="255,66,198,0" value="39" />
+			<entry class="" argb="255,72,192,0" value="40" />
+			<entry class="" argb="255,78,186,0" value="41" />
+			<entry class="" argb="255,84,180,0" value="42" />
+			<entry class="" argb="255,90,174,0" value="43" />
+			<entry class="" argb="255,96,168,0" value="44" />
+			<entry class="" argb="255,102,162,0" value="45" />
+			<entry class="" argb="255,108,156,0" value="46" />
+			<entry class="" argb="255,114,150,0" value="47" />
+			<entry class="" argb="255,120,144,0" value="48" />
+			<entry class="" argb="255,126,138,0" value="49" />
+			<entry class="" argb="255,132,132,0" value="50" />
+			<entry class="" argb="255,138,126,0" value="51" />
+			<entry class="" argb="255,144,120,0" value="52" />
+			<entry class="" argb="255,150,114,0" value="53" />
+			<entry class="" argb="255,156,108,0" value="54" />
+			<entry class="" argb="255,162,102,0" value="55" />
+			<entry class="" argb="255,168,96,0" value="56" />
+			<entry class="" argb="255,174,90,0" value="57" />
+			<entry class="" argb="255,180,84,0" value="58" />
+			<entry class="" argb="255,186,78,0" value="59" />
+			<entry class="" argb="255,192,72,0" value="60" />
+			<entry class="" argb="255,198,66,0" value="61" />
+			<entry class="" argb="255,204,60,0" value="62" />
+			<entry class="" argb="255,210,54,0" value="63" />
+			<entry class="" argb="255,216,48,0" value="64" />
+			<entry class="" argb="255,222,42,0" value="65" />
+			<entry class="" argb="255,228,36,0" value="66" />
+			<entry class="" argb="255,234,30,0" value="67" />
+			<entry class="" argb="255,240,24,0" value="68" />
+			<entry class="" argb="255,243,18,0" value="69" />
+			<entry class="" argb="255,246,12,0" value="70" />
+			<entry class="" argb="255,249,6,0" value="71" />
+			<entry class="" argb="255,252,0,0" value="72" />
+			<entry class="" argb="255,252,0,0" value="73" />
+			<entry class="" argb="255,252,0,0" value="74" />
+			<entry class="" argb="255,252,0,0" value="75" />
+			<entry class="" argb="255,252,0,1" value="76" />
+			<entry class="" argb="255,251,0,3" value="77" />
+			<entry class="" argb="255,250,0,5" value="78" />
+			<entry class="" argb="255,249,0,7" value="79" />
+			<entry class="" argb="255,248,0,9" value="80" />
+			<entry class="" argb="255,248,0,10" value="81" />
+			<entry class="" argb="255,248,0,12" value="82" />
+			<entry class="" argb="255,248,0,14" value="83" />
+			<entry class="" argb="255,248,0,16" value="84" />
+			<entry class="" argb="255,247,0,18" value="85" />
+			<entry class="" argb="255,246,0,20" value="86" />
+			<entry class="" argb="255,245,0,22" value="87" />
+			<entry class="" argb="255,244,0,25" value="88" />
+			<entry class="" argb="255,243,0,27" value="89" />
+			<entry class="" argb="255,242,0,29" value="90" />
+			<entry class="" argb="255,241,0,31" value="91" />
+			<entry class="" argb="255,240,0,34" value="92" />
+			<entry class="" argb="255,240,0,35" value="93" />
+			<entry class="" argb="255,239,0,37" value="94" />
+			<entry class="" argb="255,238,0,39" value="95" />
+			<entry class="" argb="255,237,0,41" value="96" />
+			<entry class="" argb="255,236,0,43" value="97" />
+			<entry class="" argb="255,236,0,45" value="98" />
+			<entry class="" argb="255,236,0,47" value="99" />
+			<entry class="" argb="255,236,0,50" value="100" />
+			<entry class="" argb="255,235,0,52" value="101" />
+			<entry class="" argb="255,234,0,54" value="102" />
+			<entry class="" argb="255,233,0,56" value="103" />
+			<entry class="" argb="255,232,0,59" value="104" />
+			<entry class="" argb="255,231,0,61" value="105" />
+			<entry class="" argb="255,230,0,63" value="106" />
+			<entry class="" argb="255,229,0,65" value="107" />
+			<entry class="" argb="255,228,0,67" value="108" />
+			<entry class="" argb="255,228,0,68" value="109" />
+			<entry class="" argb="255,228,0,70" value="110" />
+			<entry class="" argb="255,228,0,72" value="111" />
+			<entry class="" argb="255,228,0,74" value="112" />
+			<entry class="" argb="255,227,0,76" value="113" />
+			<entry class="" argb="255,226,0,78" value="114" />
+			<entry class="" argb="255,225,0,80" value="115" />
+			<entry class="" argb="255,224,0,83" value="116" />
+			<entry class="" argb="255,223,0,85" value="117" />
+			<entry class="" argb="255,222,0,87" value="118" />
+			<entry class="" argb="255,221,0,89" value="119" />
+			<entry class="" argb="255,220,1,92" value="120" />
+			<entry class="" argb="255,219,1,94" value="121" />
+			<entry class="" argb="255,218,1,96" value="122" />
+			<entry class="" argb="255,217,1,98" value="123" />
+			<entry class="" argb="255,216,0,101" value="124" />
+			<entry class="" argb="255,216,0,102" value="125" />
+			<entry class="" argb="255,216,0,104" value="126" />
+			<entry class="" argb="255,216,0,106" value="127" />
+			<entry class="" argb="255,216,0,108" value="128" />
+			<entry class="" argb="255,215,0,110" value="129" />
+			<entry class="" argb="255,214,0,112" value="130" />
+			<entry class="" argb="255,213,0,114" value="131" />
+			<entry class="" argb="255,212,0,116" value="132" />
+			<entry class="" argb="255,211,0,118" value="133" />
+			<entry class="" argb="255,210,0,120" value="134" />
+			<entry class="" argb="255,209,0,122" value="135" />
+			<entry class="" argb="255,208,0,125" value="136" />
+			<entry class="" argb="255,207,0,127" value="137" />
+			<entry class="" argb="255,206,0,129" value="138" />
+			<entry class="" argb="255,205,0,131" value="139" />
+			<entry class="" argb="255,204,0,134" value="140" />
+			<entry class="" argb="255,204,0,135" value="141" />
+			<entry class="" argb="255,204,0,137" value="142" />
+			<entry class="" argb="255,204,0,139" value="143" />
+			<entry class="" argb="255,204,0,141" value="144" />
+			<entry class="" argb="255,203,0,143" value="145" />
+			<entry class="" argb="255,202,0,145" value="146" />
+			<entry class="" argb="255,201,0,147" value="147" />
+			<entry class="" argb="255,200,0,150" value="148" />
+			<entry class="" argb="255,199,0,152" value="149" />
+			<entry class="" argb="255,198,0,154" value="150" />
+			<entry class="" argb="255,197,0,156" value="151" />
+			<entry class="" argb="255,196,0,159" value="152" />
+			<entry class="" argb="255,196,0,160" value="153" />
+			<entry class="" argb="255,196,0,162" value="154" />
+			<entry class="" argb="255,196,0,163" value="155" />
+			<entry class="" argb="255,196,0,165" value="156" />
+			<entry class="" argb="255,195,0,167" value="157" />
+			<entry class="" argb="255,194,0,169" value="158" />
+			<entry class="" argb="255,193,0,171" value="159" />
+			<entry class="" argb="255,192,0,174" value="160" />
+			<entry class="" argb="255,191,0,176" value="161" />
+			<entry class="" argb="255,190,0,178" value="162" />
+			<entry class="" argb="255,189,0,180" value="163" />
+			<entry class="" argb="255,188,0,183" value="164" />
+			<entry class="" argb="255,187,0,185" value="165" />
+			<entry class="" argb="255,186,0,187" value="166" />
+			<entry class="" argb="255,185,0,189" value="167" />
+			<entry class="" argb="255,184,0,192" value="168" />
+			<entry class="" argb="255,184,0,193" value="169" />
+			<entry class="" argb="255,184,0,195" value="170" />
+			<entry class="" argb="255,184,0,197" value="171" />
+			<entry class="" argb="255,184,0,199" value="172" />
+			<entry class="" argb="255,183,0,201" value="173" />
+			<entry class="" argb="255,182,0,203" value="174" />
+			<entry class="" argb="255,181,0,205" value="175" />
+			<entry class="" argb="255,180,0,208" value="176" />
+			<entry class="" argb="255,179,0,210" value="177" />
+			<entry class="" argb="255,178,0,212" value="178" />
+			<entry class="" argb="255,177,0,214" value="179" />
+			<entry class="" argb="255,176,0,216" value="180" />
+			<entry class="" argb="255,176,0,217" value="181" />
+			<entry class="" argb="255,176,0,219" value="182" />
+			<entry class="" argb="255,176,0,221" value="183" />
+			<entry class="" argb="255,176,0,223" value="184" />
+			<entry class="" argb="255,175,0,225" value="185" />
+			<entry class="" argb="255,174,0,227" value="186" />
+			<entry class="" argb="255,173,0,229" value="187" />
+			<entry class="" argb="255,172,0,232" value="188" />
+			<entry class="" argb="255,171,0,234" value="189" />
+			<entry class="" argb="255,170,0,236" value="190" />
+			<entry class="" argb="255,169,0,238" value="191" />
+			<entry class="" argb="255,168,0,241" value="192" />
+			<entry class="" argb="255,167,0,243" value="193" />
+			<entry class="" argb="255,166,0,245" value="194" />
+			<entry class="" argb="255,165,0,247" value="195" />
+			<entry class="" argb="255,164,0,250" value="196" />
+			<entry class="" argb="255,164,0,251" value="197" />
+			<entry class="" argb="255,164,0,252" value="198" />
+			<entry class="" argb="255,164,0,253" value="199" />
+			<entry class="" argb="255,164,0,255" value="200" />
+			<entry class="" argb="255,163,0,255" value="201" />
+			<entry class="" argb="255,162,0,255" value="202" />
+			<entry class="" argb="255,161,0,255" value="203" />
+			<entry class="" argb="255,160,0,255" value="204" />
+			<entry class="" argb="255,159,0,255" value="205" />
+			<entry class="" argb="255,158,0,255" value="206" />
+			<entry class="" argb="255,157,0,255" value="207" />
+			<entry class="" argb="255,156,0,255" value="208" />
+			<entry class="" argb="255,155,0,255" value="209" />
+			<entry class="" argb="255,154,0,255" value="210" />
+			<entry class="" argb="255,153,0,255" value="211" />
+			<entry class="" argb="255,152,0,255" value="212" />
+			<entry class="" argb="255,152,0,255" value="213" />
+			<entry class="" argb="255,152,0,255" value="214" />
+			<entry class="" argb="255,152,0,255" value="215" />
+			<entry class="" argb="255,152,0,255" value="216" />
+			<entry class="" argb="255,151,0,255" value="217" />
+			<entry class="" argb="255,150,0,255" value="218" />
+			<entry class="" argb="255,149,0,255" value="219" />
+			<entry class="" argb="255,148,0,255" value="220" />
+			<entry class="" argb="255,151,8,255" value="221" />
+			<entry class="" argb="255,154,16,255" value="222" />
+			<entry class="" argb="255,157,24,255" value="223" />
+			<entry class="" argb="255,160,32,255" value="224" />
+			<entry class="" argb="255,163,40,255" value="225" />
+			<entry class="" argb="255,166,48,255" value="226" />
+			<entry class="" argb="255,169,56,255" value="227" />
+			<entry class="" argb="255,172,64,255" value="228" />
+			<entry class="" argb="255,176,72,255" value="229" />
+			<entry class="" argb="255,180,80,255" value="230" />
+			<entry class="" argb="255,184,88,255" value="231" />
+			<entry class="" argb="255,188,96,255" value="232" />
+			<entry class="" argb="255,191,104,255" value="233" />
+			<entry class="" argb="255,194,112,255" value="234" />
+			<entry class="" argb="255,197,120,255" value="235" />
+			<entry class="" argb="255,200,128,255" value="236" />
+			<entry class="" argb="255,203,135,255" value="237" />
+			<entry class="" argb="255,206,142,255" value="238" />
+			<entry class="" argb="255,209,149,255" value="239" />
+			<entry class="" argb="255,212,156,255" value="240" />
+			<entry class="" argb="255,215,164,255" value="241" />
+			<entry class="" argb="255,218,172,255" value="242" />
+			<entry class="" argb="255,221,180,255" value="243" />
+			<entry class="" argb="255,224,188,255" value="244" />
+			<entry class="" argb="255,228,196,255" value="245" />
+			<entry class="" argb="255,232,204,255" value="246" />
+			<entry class="" argb="255,236,212,255" value="247" />
+			<entry class="" argb="255,240,220,255" value="248" />
+			<entry class="" argb="255,243,228,255" value="249" />
+			<entry class="" argb="255,246,236,255" value="250" />
+			<entry class="" argb="255,249,244,255" value="251" />
+			<entry class="" argb="255,252,252,255" value="252" />
+			<entry class="" argb="255,253,253,255" value="253" />
+			<entry class="" argb="255,254,254,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="green-white-exponential" interpolate="false">
+		<table>
+			<entry class="" argb="255,1,0,0" value="0" />
+			<entry class="" argb="255,1,0,0" value="1" />
+			<entry class="" argb="255,1,1,0" value="2" />
+			<entry class="" argb="255,2,2,0" value="3" />
+			<entry class="" argb="255,2,2,1" value="4" />
+			<entry class="" argb="255,2,3,1" value="5" />
+			<entry class="" argb="255,3,4,1" value="6" />
+			<entry class="" argb="255,3,4,1" value="7" />
+			<entry class="" argb="255,4,5,2" value="8" />
+			<entry class="" argb="255,4,6,2" value="9" />
+			<entry class="" argb="255,4,6,2" value="10" />
+			<entry class="" argb="255,5,7,2" value="11" />
+			<entry class="" argb="255,5,8,3" value="12" />
+			<entry class="" argb="255,5,8,3" value="13" />
+			<entry class="" argb="255,6,9,3" value="14" />
+			<entry class="" argb="255,6,10,3" value="15" />
+			<entry class="" argb="255,7,10,4" value="16" />
+			<entry class="" argb="255,7,11,4" value="17" />
+			<entry class="" argb="255,7,12,4" value="18" />
+			<entry class="" argb="255,8,12,5" value="19" />
+			<entry class="" argb="255,8,13,5" value="20" />
+			<entry class="" argb="255,9,14,5" value="21" />
+			<entry class="" argb="255,9,14,5" value="22" />
+			<entry class="" argb="255,9,15,6" value="23" />
+			<entry class="" argb="255,10,16,6" value="24" />
+			<entry class="" argb="255,10,16,6" value="25" />
+			<entry class="" argb="255,10,17,6" value="26" />
+			<entry class="" argb="255,11,18,7" value="27" />
+			<entry class="" argb="255,11,18,7" value="28" />
+			<entry class="" argb="255,12,19,7" value="29" />
+			<entry class="" argb="255,12,20,7" value="30" />
+			<entry class="" argb="255,12,20,8" value="31" />
+			<entry class="" argb="255,13,21,8" value="32" />
+			<entry class="" argb="255,13,22,8" value="33" />
+			<entry class="" argb="255,13,22,8" value="34" />
+			<entry class="" argb="255,14,23,9" value="35" />
+			<entry class="" argb="255,14,24,9" value="36" />
+			<entry class="" argb="255,15,24,9" value="37" />
+			<entry class="" argb="255,15,25,10" value="38" />
+			<entry class="" argb="255,15,26,10" value="39" />
+			<entry class="" argb="255,16,26,10" value="40" />
+			<entry class="" argb="255,16,27,10" value="41" />
+			<entry class="" argb="255,17,28,11" value="42" />
+			<entry class="" argb="255,17,28,11" value="43" />
+			<entry class="" argb="255,17,29,11" value="44" />
+			<entry class="" argb="255,18,30,11" value="45" />
+			<entry class="" argb="255,18,30,12" value="46" />
+			<entry class="" argb="255,18,31,12" value="47" />
+			<entry class="" argb="255,19,32,12" value="48" />
+			<entry class="" argb="255,19,32,12" value="49" />
+			<entry class="" argb="255,20,33,13" value="50" />
+			<entry class="" argb="255,20,34,13" value="51" />
+			<entry class="" argb="255,20,34,13" value="52" />
+			<entry class="" argb="255,21,35,13" value="53" />
+			<entry class="" argb="255,21,36,14" value="54" />
+			<entry class="" argb="255,21,36,14" value="55" />
+			<entry class="" argb="255,22,37,14" value="56" />
+			<entry class="" argb="255,22,38,15" value="57" />
+			<entry class="" argb="255,23,38,15" value="58" />
+			<entry class="" argb="255,23,39,15" value="59" />
+			<entry class="" argb="255,23,40,15" value="60" />
+			<entry class="" argb="255,24,40,16" value="61" />
+			<entry class="" argb="255,24,41,16" value="62" />
+			<entry class="" argb="255,25,42,16" value="63" />
+			<entry class="" argb="255,25,42,16" value="64" />
+			<entry class="" argb="255,25,43,17" value="65" />
+			<entry class="" argb="255,26,44,17" value="66" />
+			<entry class="" argb="255,26,44,17" value="67" />
+			<entry class="" argb="255,26,45,17" value="68" />
+			<entry class="" argb="255,27,46,18" value="69" />
+			<entry class="" argb="255,27,46,18" value="70" />
+			<entry class="" argb="255,28,47,18" value="71" />
+			<entry class="" argb="255,28,48,18" value="72" />
+			<entry class="" argb="255,28,48,19" value="73" />
+			<entry class="" argb="255,29,49,19" value="74" />
+			<entry class="" argb="255,29,50,19" value="75" />
+			<entry class="" argb="255,29,50,20" value="76" />
+			<entry class="" argb="255,30,51,20" value="77" />
+			<entry class="" argb="255,30,52,20" value="78" />
+			<entry class="" argb="255,31,52,20" value="79" />
+			<entry class="" argb="255,31,53,21" value="80" />
+			<entry class="" argb="255,31,54,21" value="81" />
+			<entry class="" argb="255,32,54,21" value="82" />
+			<entry class="" argb="255,32,55,21" value="83" />
+			<entry class="" argb="255,33,56,22" value="84" />
+			<entry class="" argb="255,33,56,22" value="85" />
+			<entry class="" argb="255,33,57,22" value="86" />
+			<entry class="" argb="255,34,58,22" value="87" />
+			<entry class="" argb="255,34,58,23" value="88" />
+			<entry class="" argb="255,34,59,23" value="89" />
+			<entry class="" argb="255,35,60,23" value="90" />
+			<entry class="" argb="255,35,60,23" value="91" />
+			<entry class="" argb="255,36,61,24" value="92" />
+			<entry class="" argb="255,36,62,24" value="93" />
+			<entry class="" argb="255,36,62,24" value="94" />
+			<entry class="" argb="255,37,63,25" value="95" />
+			<entry class="" argb="255,37,64,25" value="96" />
+			<entry class="" argb="255,37,64,25" value="97" />
+			<entry class="" argb="255,38,65,25" value="98" />
+			<entry class="" argb="255,38,66,26" value="99" />
+			<entry class="" argb="255,39,66,26" value="100" />
+			<entry class="" argb="255,39,67,26" value="101" />
+			<entry class="" argb="255,39,68,26" value="102" />
+			<entry class="" argb="255,40,68,27" value="103" />
+			<entry class="" argb="255,40,69,27" value="104" />
+			<entry class="" argb="255,41,70,27" value="105" />
+			<entry class="" argb="255,41,70,27" value="106" />
+			<entry class="" argb="255,41,71,28" value="107" />
+			<entry class="" argb="255,42,72,28" value="108" />
+			<entry class="" argb="255,42,72,28" value="109" />
+			<entry class="" argb="255,42,73,28" value="110" />
+			<entry class="" argb="255,43,74,29" value="111" />
+			<entry class="" argb="255,43,74,29" value="112" />
+			<entry class="" argb="255,44,75,29" value="113" />
+			<entry class="" argb="255,44,76,30" value="114" />
+			<entry class="" argb="255,44,76,30" value="115" />
+			<entry class="" argb="255,45,77,30" value="116" />
+			<entry class="" argb="255,45,78,30" value="117" />
+			<entry class="" argb="255,45,78,31" value="118" />
+			<entry class="" argb="255,46,79,31" value="119" />
+			<entry class="" argb="255,46,80,31" value="120" />
+			<entry class="" argb="255,47,80,31" value="121" />
+			<entry class="" argb="255,47,81,32" value="122" />
+			<entry class="" argb="255,47,82,32" value="123" />
+			<entry class="" argb="255,48,82,32" value="124" />
+			<entry class="" argb="255,48,83,32" value="125" />
+			<entry class="" argb="255,49,84,33" value="126" />
+			<entry class="" argb="255,49,84,33" value="127" />
+			<entry class="" argb="255,49,85,33" value="128" />
+			<entry class="" argb="255,50,86,33" value="129" />
+			<entry class="" argb="255,50,87,34" value="130" />
+			<entry class="" argb="255,50,88,34" value="131" />
+			<entry class="" argb="255,51,90,34" value="132" />
+			<entry class="" argb="255,51,91,35" value="133" />
+			<entry class="" argb="255,52,92,35" value="134" />
+			<entry class="" argb="255,52,94,35" value="135" />
+			<entry class="" argb="255,52,95,35" value="136" />
+			<entry class="" argb="255,54,96,36" value="137" />
+			<entry class="" argb="255,54,98,36" value="138" />
+			<entry class="" argb="255,55,99,36" value="139" />
+			<entry class="" argb="255,56,100,36" value="140" />
+			<entry class="" argb="255,56,102,37" value="141" />
+			<entry class="" argb="255,57,103,37" value="142" />
+			<entry class="" argb="255,58,104,37" value="143" />
+			<entry class="" argb="255,58,106,37" value="144" />
+			<entry class="" argb="255,59,107,38" value="145" />
+			<entry class="" argb="255,60,108,38" value="146" />
+			<entry class="" argb="255,60,110,38" value="147" />
+			<entry class="" argb="255,61,111,38" value="148" />
+			<entry class="" argb="255,62,112,39" value="149" />
+			<entry class="" argb="255,62,114,39" value="150" />
+			<entry class="" argb="255,63,115,39" value="151" />
+			<entry class="" argb="255,64,116,40" value="152" />
+			<entry class="" argb="255,64,118,40" value="153" />
+			<entry class="" argb="255,66,119,40" value="154" />
+			<entry class="" argb="255,68,120,40" value="155" />
+			<entry class="" argb="255,70,122,41" value="156" />
+			<entry class="" argb="255,71,123,41" value="157" />
+			<entry class="" argb="255,73,124,41" value="158" />
+			<entry class="" argb="255,75,126,41" value="159" />
+			<entry class="" argb="255,77,127,42" value="160" />
+			<entry class="" argb="255,79,128,42" value="161" />
+			<entry class="" argb="255,81,130,42" value="162" />
+			<entry class="" argb="255,83,131,42" value="163" />
+			<entry class="" argb="255,85,132,43" value="164" />
+			<entry class="" argb="255,86,134,43" value="165" />
+			<entry class="" argb="255,88,135,43" value="166" />
+			<entry class="" argb="255,90,136,43" value="167" />
+			<entry class="" argb="255,92,138,44" value="168" />
+			<entry class="" argb="255,94,139,44" value="169" />
+			<entry class="" argb="255,96,140,44" value="170" />
+			<entry class="" argb="255,98,142,45" value="171" />
+			<entry class="" argb="255,99,143,45" value="172" />
+			<entry class="" argb="255,101,145,45" value="173" />
+			<entry class="" argb="255,103,146,45" value="174" />
+			<entry class="" argb="255,105,147,46" value="175" />
+			<entry class="" argb="255,107,149,46" value="176" />
+			<entry class="" argb="255,109,150,46" value="177" />
+			<entry class="" argb="255,111,151,46" value="178" />
+			<entry class="" argb="255,113,153,47" value="179" />
+			<entry class="" argb="255,114,154,47" value="180" />
+			<entry class="" argb="255,116,155,47" value="181" />
+			<entry class="" argb="255,118,157,47" value="182" />
+			<entry class="" argb="255,120,158,48" value="183" />
+			<entry class="" argb="255,122,159,47" value="184" />
+			<entry class="" argb="255,124,161,49" value="185" />
+			<entry class="" argb="255,126,162,52" value="186" />
+			<entry class="" argb="255,127,163,55" value="187" />
+			<entry class="" argb="255,129,165,58" value="188" />
+			<entry class="" argb="255,131,166,61" value="189" />
+			<entry class="" argb="255,133,167,64" value="190" />
+			<entry class="" argb="255,135,169,67" value="191" />
+			<entry class="" argb="255,137,170,70" value="192" />
+			<entry class="" argb="255,139,171,73" value="193" />
+			<entry class="" argb="255,141,173,76" value="194" />
+			<entry class="" argb="255,142,174,79" value="195" />
+			<entry class="" argb="255,144,175,82" value="196" />
+			<entry class="" argb="255,146,177,85" value="197" />
+			<entry class="" argb="255,148,178,88" value="198" />
+			<entry class="" argb="255,150,179,90" value="199" />
+			<entry class="" argb="255,152,181,93" value="200" />
+			<entry class="" argb="255,154,182,96" value="201" />
+			<entry class="" argb="255,156,183,99" value="202" />
+			<entry class="" argb="255,157,185,102" value="203" />
+			<entry class="" argb="255,159,186,105" value="204" />
+			<entry class="" argb="255,161,187,108" value="205" />
+			<entry class="" argb="255,163,189,111" value="206" />
+			<entry class="" argb="255,165,190,114" value="207" />
+			<entry class="" argb="255,167,191,117" value="208" />
+			<entry class="" argb="255,169,193,120" value="209" />
+			<entry class="" argb="255,170,194,123" value="210" />
+			<entry class="" argb="255,172,195,126" value="211" />
+			<entry class="" argb="255,174,197,129" value="212" />
+			<entry class="" argb="255,176,198,131" value="213" />
+			<entry class="" argb="255,178,200,134" value="214" />
+			<entry class="" argb="255,180,201,137" value="215" />
+			<entry class="" argb="255,182,202,140" value="216" />
+			<entry class="" argb="255,184,204,143" value="217" />
+			<entry class="" argb="255,185,205,146" value="218" />
+			<entry class="" argb="255,187,206,149" value="219" />
+			<entry class="" argb="255,189,208,152" value="220" />
+			<entry class="" argb="255,191,209,155" value="221" />
+			<entry class="" argb="255,193,210,158" value="222" />
+			<entry class="" argb="255,195,212,161" value="223" />
+			<entry class="" argb="255,197,213,164" value="224" />
+			<entry class="" argb="255,198,214,167" value="225" />
+			<entry class="" argb="255,200,216,170" value="226" />
+			<entry class="" argb="255,202,217,172" value="227" />
+			<entry class="" argb="255,204,218,175" value="228" />
+			<entry class="" argb="255,206,220,178" value="229" />
+			<entry class="" argb="255,208,221,181" value="230" />
+			<entry class="" argb="255,210,222,184" value="231" />
+			<entry class="" argb="255,212,224,187" value="232" />
+			<entry class="" argb="255,213,225,190" value="233" />
+			<entry class="" argb="255,215,226,193" value="234" />
+			<entry class="" argb="255,217,228,196" value="235" />
+			<entry class="" argb="255,219,229,199" value="236" />
+			<entry class="" argb="255,221,230,202" value="237" />
+			<entry class="" argb="255,223,232,205" value="238" />
+			<entry class="" argb="255,225,233,208" value="239" />
+			<entry class="" argb="255,226,234,211" value="240" />
+			<entry class="" argb="255,228,236,213" value="241" />
+			<entry class="" argb="255,230,237,216" value="242" />
+			<entry class="" argb="255,232,238,219" value="243" />
+			<entry class="" argb="255,234,240,222" value="244" />
+			<entry class="" argb="255,236,241,225" value="245" />
+			<entry class="" argb="255,238,242,228" value="246" />
+			<entry class="" argb="255,240,244,231" value="247" />
+			<entry class="" argb="255,241,245,234" value="248" />
+			<entry class="" argb="255,243,246,237" value="249" />
+			<entry class="" argb="255,245,248,240" value="250" />
+			<entry class="" argb="255,247,249,243" value="251" />
+			<entry class="" argb="255,249,250,246" value="252" />
+			<entry class="" argb="255,251,252,249" value="253" />
+			<entry class="" argb="255,253,253,252" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="hardcandy" interpolate="false">
+		<table>
+			<entry class="" argb="255,4,51,116" value="0" />
+			<entry class="" argb="255,4,51,116" value="1" />
+			<entry class="" argb="255,5,58,105" value="2" />
+			<entry class="" argb="255,7,65,94" value="3" />
+			<entry class="" argb="255,9,72,84" value="4" />
+			<entry class="" argb="255,11,79,74" value="5" />
+			<entry class="" argb="255,12,85,64" value="6" />
+			<entry class="" argb="255,14,92,55" value="7" />
+			<entry class="" argb="255,15,99,46" value="8" />
+			<entry class="" argb="255,16,105,38" value="9" />
+			<entry class="" argb="255,17,111,30" value="10" />
+			<entry class="" argb="255,17,117,24" value="11" />
+			<entry class="" argb="255,18,124,18" value="12" />
+			<entry class="" argb="255,18,129,12" value="13" />
+			<entry class="" argb="255,18,135,8" value="14" />
+			<entry class="" argb="255,17,141,5" value="15" />
+			<entry class="" argb="255,16,146,2" value="16" />
+			<entry class="" argb="255,15,152,0" value="17" />
+			<entry class="" argb="255,14,157,0" value="18" />
+			<entry class="" argb="255,13,162,0" value="19" />
+			<entry class="" argb="255,11,167,1" value="20" />
+			<entry class="" argb="255,13,171,3" value="21" />
+			<entry class="" argb="255,8,176,6" value="22" />
+			<entry class="" argb="255,5,180,13" value="23" />
+			<entry class="" argb="255,3,184,14" value="24" />
+			<entry class="" argb="255,1,188,20" value="25" />
+			<entry class="" argb="255,0,191,26" value="26" />
+			<entry class="" argb="255,3,195,33" value="27" />
+			<entry class="" argb="255,5,198,41" value="28" />
+			<entry class="" argb="255,7,201,50" value="29" />
+			<entry class="" argb="255,13,203,59" value="30" />
+			<entry class="" argb="255,12,206,68" value="31" />
+			<entry class="" argb="255,13,208,78" value="32" />
+			<entry class="" argb="255,15,210,88" value="33" />
+			<entry class="" argb="255,17,212,99" value="34" />
+			<entry class="" argb="255,18,213,109" value="35" />
+			<entry class="" argb="255,19,214,120" value="36" />
+			<entry class="" argb="255,19,215,131" value="37" />
+			<entry class="" argb="255,19,216,142" value="38" />
+			<entry class="" argb="255,19,216,153" value="39" />
+			<entry class="" argb="255,19,216,163" value="40" />
+			<entry class="" argb="255,18,216,174" value="41" />
+			<entry class="" argb="255,16,216,184" value="42" />
+			<entry class="" argb="255,14,215,193" value="43" />
+			<entry class="" argb="255,12,215,202" value="44" />
+			<entry class="" argb="255,9,213,211" value="45" />
+			<entry class="" argb="255,5,212,218" value="46" />
+			<entry class="" argb="255,2,210,226" value="47" />
+			<entry class="" argb="255,2,209,232" value="48" />
+			<entry class="" argb="255,6,206,238" value="49" />
+			<entry class="" argb="255,11,204,243" value="50" />
+			<entry class="" argb="255,17,201,247" value="51" />
+			<entry class="" argb="255,23,199,250" value="52" />
+			<entry class="" argb="255,29,195,252" value="53" />
+			<entry class="" argb="255,36,192,253" value="54" />
+			<entry class="" argb="255,42,189,253" value="55" />
+			<entry class="" argb="255,49,185,253" value="56" />
+			<entry class="" argb="255,56,181,251" value="57" />
+			<entry class="" argb="255,64,177,249" value="58" />
+			<entry class="" argb="255,71,172,246" value="59" />
+			<entry class="" argb="255,78,168,241" value="60" />
+			<entry class="" argb="255,85,163,236" value="61" />
+			<entry class="" argb="255,93,158,230" value="62" />
+			<entry class="" argb="255,100,153,224" value="63" />
+			<entry class="" argb="255,106,148,216" value="64" />
+			<entry class="" argb="255,113,142,208" value="65" />
+			<entry class="" argb="255,119,137,200" value="66" />
+			<entry class="" argb="255,125,131,190" value="67" />
+			<entry class="" argb="255,130,125,181" value="68" />
+			<entry class="" argb="255,135,119,171" value="69" />
+			<entry class="" argb="255,139,113,160" value="70" />
+			<entry class="" argb="255,143,106,150" value="71" />
+			<entry class="" argb="255,146,100,139" value="72" />
+			<entry class="" argb="255,149,93,128" value="73" />
+			<entry class="" argb="255,150,87,117" value="74" />
+			<entry class="" argb="255,151,80,106" value="75" />
+			<entry class="" argb="255,152,73,96" value="76" />
+			<entry class="" argb="255,151,67,85" value="77" />
+			<entry class="" argb="255,150,60,75" value="78" />
+			<entry class="" argb="255,148,53,65" value="79" />
+			<entry class="" argb="255,145,46,56" value="80" />
+			<entry class="" argb="255,142,39,47" value="81" />
+			<entry class="" argb="255,138,32,39" value="82" />
+			<entry class="" argb="255,133,25,31" value="83" />
+			<entry class="" argb="255,127,18,24" value="84" />
+			<entry class="" argb="255,121,11,18" value="85" />
+			<entry class="" argb="255,114,4,13" value="86" />
+			<entry class="" argb="255,107,2,9" value="87" />
+			<entry class="" argb="255,99,9,5" value="88" />
+			<entry class="" argb="255,90,16,2" value="89" />
+			<entry class="" argb="255,82,22,0" value="90" />
+			<entry class="" argb="255,73,29,0" value="91" />
+			<entry class="" argb="255,63,36,0" value="92" />
+			<entry class="" argb="255,54,42,1" value="93" />
+			<entry class="" argb="255,44,49,3" value="94" />
+			<entry class="" argb="255,35,55,5" value="95" />
+			<entry class="" argb="255,25,61,9" value="96" />
+			<entry class="" argb="255,16,68,14" value="97" />
+			<entry class="" argb="255,6,74,19" value="98" />
+			<entry class="" argb="255,1,79,25" value="99" />
+			<entry class="" argb="255,13,85,32" value="100" />
+			<entry class="" argb="255,18,91,40" value="101" />
+			<entry class="" argb="255,25,96,48" value="102" />
+			<entry class="" argb="255,32,101,57" value="103" />
+			<entry class="" argb="255,38,106,67" value="104" />
+			<entry class="" argb="255,44,111,76" value="105" />
+			<entry class="" argb="255,48,116,87" value="106" />
+			<entry class="" argb="255,52,120,97" value="107" />
+			<entry class="" argb="255,55,125,108" value="108" />
+			<entry class="" argb="255,56,129,119" value="109" />
+			<entry class="" argb="255,57,133,130" value="110" />
+			<entry class="" argb="255,57,136,140" value="111" />
+			<entry class="" argb="255,56,140,151" value="112" />
+			<entry class="" argb="255,53,143,162" value="113" />
+			<entry class="" argb="255,50,146,172" value="114" />
+			<entry class="" argb="255,45,149,182" value="115" />
+			<entry class="" argb="255,39,151,192" value="116" />
+			<entry class="" argb="255,33,153,201" value="117" />
+			<entry class="" argb="255,25,155,209" value="118" />
+			<entry class="" argb="255,16,157,217" value="119" />
+			<entry class="" argb="255,6,159,225" value="120" />
+			<entry class="" argb="255,3,160,231" value="121" />
+			<entry class="" argb="255,15,161,237" value="122" />
+			<entry class="" argb="255,27,162,242" value="123" />
+			<entry class="" argb="255,40,162,246" value="124" />
+			<entry class="" argb="255,53,162,249" value="125" />
+			<entry class="" argb="255,67,162,252" value="126" />
+			<entry class="" argb="255,81,162,253" value="127" />
+			<entry class="" argb="255,96,162,254" value="128" />
+			<entry class="" argb="255,111,161,253" value="129" />
+			<entry class="" argb="255,126,160,252" value="130" />
+			<entry class="" argb="255,141,159,249" value="131" />
+			<entry class="" argb="255,156,157,246" value="132" />
+			<entry class="" argb="255,170,155,242" value="133" />
+			<entry class="" argb="255,185,153,237" value="134" />
+			<entry class="" argb="255,199,151,231" value="135" />
+			<entry class="" argb="255,212,148,225" value="136" />
+			<entry class="" argb="255,225,146,217" value="137" />
+			<entry class="" argb="255,237,143,209" value="138" />
+			<entry class="" argb="255,248,139,201" value="139" />
+			<entry class="" argb="255,252,136,192" value="140" />
+			<entry class="" argb="255,242,132,182" value="141" />
+			<entry class="" argb="255,234,128,172" value="142" />
+			<entry class="" argb="255,227,124,162" value="143" />
+			<entry class="" argb="255,222,120,151" value="144" />
+			<entry class="" argb="255,217,115,140" value="145" />
+			<entry class="" argb="255,214,111,130" value="146" />
+			<entry class="" argb="255,212,106,119" value="147" />
+			<entry class="" argb="255,212,101,108" value="148" />
+			<entry class="" argb="255,213,95,97" value="149" />
+			<entry class="" argb="255,216,90,87" value="150" />
+			<entry class="" argb="255,220,84,76" value="151" />
+			<entry class="" argb="255,225,79,67" value="152" />
+			<entry class="" argb="255,232,73,57" value="153" />
+			<entry class="" argb="255,240,67,48" value="154" />
+			<entry class="" argb="255,249,61,40" value="155" />
+			<entry class="" argb="255,251,54,32" value="156" />
+			<entry class="" argb="255,239,48,25" value="157" />
+			<entry class="" argb="255,226,42,19" value="158" />
+			<entry class="" argb="255,213,35,14" value="159" />
+			<entry class="" argb="255,198,28,9" value="160" />
+			<entry class="" argb="255,183,22,5" value="161" />
+			<entry class="" argb="255,167,15,3" value="162" />
+			<entry class="" argb="255,150,8,1" value="163" />
+			<entry class="" argb="255,133,1,0" value="164" />
+			<entry class="" argb="255,116,5,0" value="165" />
+			<entry class="" argb="255,98,12,0" value="166" />
+			<entry class="" argb="255,81,19,2" value="167" />
+			<entry class="" argb="255,64,26,5" value="168" />
+			<entry class="" argb="255,47,33,9" value="169" />
+			<entry class="" argb="255,30,40,13" value="170" />
+			<entry class="" argb="255,14,47,18" value="171" />
+			<entry class="" argb="255,1,54,24" value="172" />
+			<entry class="" argb="255,15,61,31" value="173" />
+			<entry class="" argb="255,29,67,39" value="174" />
+			<entry class="" argb="255,42,74,47" value="175" />
+			<entry class="" argb="255,54,81,56" value="176" />
+			<entry class="" argb="255,64,88,65" value="177" />
+			<entry class="" argb="255,73,94,75" value="178" />
+			<entry class="" argb="255,81,101,85" value="179" />
+			<entry class="" argb="255,87,107,96" value="180" />
+			<entry class="" argb="255,91,113,106" value="181" />
+			<entry class="" argb="255,94,120,117" value="182" />
+			<entry class="" argb="255,95,126,128" value="183" />
+			<entry class="" argb="255,95,131,139" value="184" />
+			<entry class="" argb="255,92,137,150" value="185" />
+			<entry class="" argb="255,88,143,160" value="186" />
+			<entry class="" argb="255,82,148,171" value="187" />
+			<entry class="" argb="255,75,154,181" value="188" />
+			<entry class="" argb="255,66,159,190" value="189" />
+			<entry class="" argb="255,55,164,200" value="190" />
+			<entry class="" argb="255,42,168,208" value="191" />
+			<entry class="" argb="255,28,173,216" value="192" />
+			<entry class="" argb="255,13,177,224" value="193" />
+			<entry class="" argb="255,3,181,230" value="194" />
+			<entry class="" argb="255,21,185,236" value="195" />
+			<entry class="" argb="255,40,189,241" value="196" />
+			<entry class="" argb="255,60,193,246" value="197" />
+			<entry class="" argb="255,81,196,249" value="198" />
+			<entry class="" argb="255,103,199,251" value="199" />
+			<entry class="" argb="255,125,202,253" value="200" />
+			<entry class="" argb="255,147,204,253" value="201" />
+			<entry class="" argb="255,170,207,253" value="202" />
+			<entry class="" argb="255,193,209,252" value="203" />
+			<entry class="" argb="255,216,211,250" value="204" />
+			<entry class="" argb="255,239,212,247" value="205" />
+			<entry class="" argb="255,249,214,243" value="206" />
+			<entry class="" argb="255,228,215,238" value="207" />
+			<entry class="" argb="255,207,216,232" value="208" />
+			<entry class="" argb="255,187,216,226" value="209" />
+			<entry class="" argb="255,168,216,218" value="210" />
+			<entry class="" argb="255,151,216,211" value="211" />
+			<entry class="" argb="255,134,216,202" value="212" />
+			<entry class="" argb="255,119,216,193" value="213" />
+			<entry class="" argb="255,106,215,184" value="214" />
+			<entry class="" argb="255,95,214,174" value="215" />
+			<entry class="" argb="255,85,213,163" value="216" />
+			<entry class="" argb="255,77,212,153" value="217" />
+			<entry class="" argb="255,71,210,142" value="218" />
+			<entry class="" argb="255,67,208,131" value="219" />
+			<entry class="" argb="255,65,206,120" value="220" />
+			<entry class="" argb="255,66,203,109" value="221" />
+			<entry class="" argb="255,68,201,99" value="222" />
+			<entry class="" argb="255,72,198,88" value="223" />
+			<entry class="" argb="255,79,194,78" value="224" />
+			<entry class="" argb="255,87,191,68" value="225" />
+			<entry class="" argb="255,98,187,59" value="226" />
+			<entry class="" argb="255,110,184,50" value="227" />
+			<entry class="" argb="255,124,180,41" value="228" />
+			<entry class="" argb="255,140,175,33" value="229" />
+			<entry class="" argb="255,158,171,26" value="230" />
+			<entry class="" argb="255,177,166,20" value="231" />
+			<entry class="" argb="255,197,161,14" value="232" />
+			<entry class="" argb="255,219,156,13" value="233" />
+			<entry class="" argb="255,241,151,6" value="234" />
+			<entry class="" argb="255,245,146,3" value="235" />
+			<entry class="" argb="255,221,140,1" value="236" />
+			<entry class="" argb="255,196,135,0" value="237" />
+			<entry class="" argb="255,171,129,0" value="238" />
+			<entry class="" argb="255,145,123,0" value="239" />
+			<entry class="" argb="255,120,117,2" value="240" />
+			<entry class="" argb="255,95,111,5" value="241" />
+			<entry class="" argb="255,70,104,8" value="242" />
+			<entry class="" argb="255,46,98,12" value="243" />
+			<entry class="" argb="255,23,91,18" value="244" />
+			<entry class="" argb="255,1,85,24" value="245" />
+			<entry class="" argb="255,19,78,30" value="246" />
+			<entry class="" argb="255,39,71,38" value="247" />
+			<entry class="" argb="255,57,64,46" value="248" />
+			<entry class="" argb="255,74,57,55" value="249" />
+			<entry class="" argb="255,89,50,64" value="250" />
+			<entry class="" argb="255,102,44,74" value="251" />
+			<entry class="" argb="255,112,37,84" value="252" />
+			<entry class="" argb="255,121,30,94" value="253" />
+			<entry class="" argb="255,127,23,105" value="254" />
+			<entry class="" argb="255,127,23,105" value="255" />
+		</table>
+	</palette>
+
+	<palette name="haze" interpolate="false">
+		<table>
+			<entry class="" argb="255,167,112,255" value="0" />
+			<entry class="" argb="255,167,112,255" value="1" />
+			<entry class="" argb="255,255,213,254" value="2" />
+			<entry class="" argb="255,254,212,251" value="3" />
+			<entry class="" argb="255,249,210,250" value="4" />
+			<entry class="" argb="255,247,209,249" value="5" />
+			<entry class="" argb="255,245,208,248" value="6" />
+			<entry class="" argb="255,243,206,247" value="7" />
+			<entry class="" argb="255,242,205,246" value="8" />
+			<entry class="" argb="255,240,203,245" value="9" />
+			<entry class="" argb="255,238,202,244" value="10" />
+			<entry class="" argb="255,236,200,243" value="11" />
+			<entry class="" argb="255,234,199,242" value="12" />
+			<entry class="" argb="255,232,198,241" value="13" />
+			<entry class="" argb="255,230,196,240" value="14" />
+			<entry class="" argb="255,228,195,239" value="15" />
+			<entry class="" argb="255,226,193,238" value="16" />
+			<entry class="" argb="255,224,192,237" value="17" />
+			<entry class="" argb="255,222,191,236" value="18" />
+			<entry class="" argb="255,220,189,235" value="19" />
+			<entry class="" argb="255,218,188,234" value="20" />
+			<entry class="" argb="255,216,186,233" value="21" />
+			<entry class="" argb="255,214,185,232" value="22" />
+			<entry class="" argb="255,212,183,231" value="23" />
+			<entry class="" argb="255,210,182,230" value="24" />
+			<entry class="" argb="255,208,181,229" value="25" />
+			<entry class="" argb="255,206,179,228" value="26" />
+			<entry class="" argb="255,204,178,227" value="27" />
+			<entry class="" argb="255,202,176,226" value="28" />
+			<entry class="" argb="255,200,175,225" value="29" />
+			<entry class="" argb="255,198,174,224" value="30" />
+			<entry class="" argb="255,196,172,223" value="31" />
+			<entry class="" argb="255,194,171,222" value="32" />
+			<entry class="" argb="255,192,169,221" value="33" />
+			<entry class="" argb="255,190,168,220" value="34" />
+			<entry class="" argb="255,188,166,219" value="35" />
+			<entry class="" argb="255,186,165,218" value="36" />
+			<entry class="" argb="255,184,164,217" value="37" />
+			<entry class="" argb="255,182,162,216" value="38" />
+			<entry class="" argb="255,180,161,215" value="39" />
+			<entry class="" argb="255,178,159,214" value="40" />
+			<entry class="" argb="255,176,158,213" value="41" />
+			<entry class="" argb="255,174,157,212" value="42" />
+			<entry class="" argb="255,172,155,211" value="43" />
+			<entry class="" argb="255,170,154,210" value="44" />
+			<entry class="" argb="255,168,152,209" value="45" />
+			<entry class="" argb="255,166,151,208" value="46" />
+			<entry class="" argb="255,164,150,207" value="47" />
+			<entry class="" argb="255,162,148,206" value="48" />
+			<entry class="" argb="255,160,147,205" value="49" />
+			<entry class="" argb="255,158,145,204" value="50" />
+			<entry class="" argb="255,156,144,203" value="51" />
+			<entry class="" argb="255,154,142,202" value="52" />
+			<entry class="" argb="255,152,141,201" value="53" />
+			<entry class="" argb="255,150,140,200" value="54" />
+			<entry class="" argb="255,148,138,199" value="55" />
+			<entry class="" argb="255,146,137,198" value="56" />
+			<entry class="" argb="255,144,135,197" value="57" />
+			<entry class="" argb="255,142,134,196" value="58" />
+			<entry class="" argb="255,141,133,195" value="59" />
+			<entry class="" argb="255,139,131,194" value="60" />
+			<entry class="" argb="255,137,130,193" value="61" />
+			<entry class="" argb="255,135,128,192" value="62" />
+			<entry class="" argb="255,133,127,191" value="63" />
+			<entry class="" argb="255,131,125,190" value="64" />
+			<entry class="" argb="255,129,124,189" value="65" />
+			<entry class="" argb="255,127,123,188" value="66" />
+			<entry class="" argb="255,125,121,187" value="67" />
+			<entry class="" argb="255,123,120,186" value="68" />
+			<entry class="" argb="255,121,118,185" value="69" />
+			<entry class="" argb="255,119,117,184" value="70" />
+			<entry class="" argb="255,117,116,183" value="71" />
+			<entry class="" argb="255,115,114,182" value="72" />
+			<entry class="" argb="255,113,113,181" value="73" />
+			<entry class="" argb="255,111,111,180" value="74" />
+			<entry class="" argb="255,109,110,179" value="75" />
+			<entry class="" argb="255,107,109,178" value="76" />
+			<entry class="" argb="255,105,107,177" value="77" />
+			<entry class="" argb="255,103,106,176" value="78" />
+			<entry class="" argb="255,101,104,175" value="79" />
+			<entry class="" argb="255,99,103,174" value="80" />
+			<entry class="" argb="255,97,101,173" value="81" />
+			<entry class="" argb="255,95,100,172" value="82" />
+			<entry class="" argb="255,93,99,171" value="83" />
+			<entry class="" argb="255,91,97,170" value="84" />
+			<entry class="" argb="255,89,96,169" value="85" />
+			<entry class="" argb="255,87,94,168" value="86" />
+			<entry class="" argb="255,85,93,167" value="87" />
+			<entry class="" argb="255,83,92,166" value="88" />
+			<entry class="" argb="255,81,90,165" value="89" />
+			<entry class="" argb="255,79,89,164" value="90" />
+			<entry class="" argb="255,77,87,163" value="91" />
+			<entry class="" argb="255,75,86,162" value="92" />
+			<entry class="" argb="255,73,84,161" value="93" />
+			<entry class="" argb="255,71,83,160" value="94" />
+			<entry class="" argb="255,69,82,159" value="95" />
+			<entry class="" argb="255,67,80,158" value="96" />
+			<entry class="" argb="255,65,79,157" value="97" />
+			<entry class="" argb="255,63,77,156" value="98" />
+			<entry class="" argb="255,61,76,155" value="99" />
+			<entry class="" argb="255,59,75,154" value="100" />
+			<entry class="" argb="255,57,73,153" value="101" />
+			<entry class="" argb="255,55,72,152" value="102" />
+			<entry class="" argb="255,53,70,151" value="103" />
+			<entry class="" argb="255,51,69,150" value="104" />
+			<entry class="" argb="255,49,68,149" value="105" />
+			<entry class="" argb="255,47,66,148" value="106" />
+			<entry class="" argb="255,45,65,147" value="107" />
+			<entry class="" argb="255,43,63,146" value="108" />
+			<entry class="" argb="255,41,62,145" value="109" />
+			<entry class="" argb="255,40,60,144" value="110" />
+			<entry class="" argb="255,38,59,143" value="111" />
+			<entry class="" argb="255,36,58,142" value="112" />
+			<entry class="" argb="255,34,56,141" value="113" />
+			<entry class="" argb="255,32,55,140" value="114" />
+			<entry class="" argb="255,30,53,139" value="115" />
+			<entry class="" argb="255,28,52,138" value="116" />
+			<entry class="" argb="255,26,51,137" value="117" />
+			<entry class="" argb="255,24,49,136" value="118" />
+			<entry class="" argb="255,22,48,135" value="119" />
+			<entry class="" argb="255,20,46,134" value="120" />
+			<entry class="" argb="255,18,45,133" value="121" />
+			<entry class="" argb="255,16,43,132" value="122" />
+			<entry class="" argb="255,14,42,131" value="123" />
+			<entry class="" argb="255,12,41,130" value="124" />
+			<entry class="" argb="255,13,39,129" value="125" />
+			<entry class="" argb="255,8,38,128" value="126" />
+			<entry class="" argb="255,6,36,127" value="127" />
+			<entry class="" argb="255,4,35,126" value="128" />
+			<entry class="" argb="255,4,34,125" value="129" />
+			<entry class="" argb="255,6,32,124" value="130" />
+			<entry class="" argb="255,7,31,123" value="131" />
+			<entry class="" argb="255,9,32,122" value="132" />
+			<entry class="" argb="255,11,33,121" value="133" />
+			<entry class="" argb="255,13,34,120" value="134" />
+			<entry class="" argb="255,15,36,119" value="135" />
+			<entry class="" argb="255,17,37,118" value="136" />
+			<entry class="" argb="255,19,38,117" value="137" />
+			<entry class="" argb="255,21,40,116" value="138" />
+			<entry class="" argb="255,23,41,115" value="139" />
+			<entry class="" argb="255,25,42,114" value="140" />
+			<entry class="" argb="255,27,44,113" value="141" />
+			<entry class="" argb="255,29,45,112" value="142" />
+			<entry class="" argb="255,31,46,111" value="143" />
+			<entry class="" argb="255,33,48,110" value="144" />
+			<entry class="" argb="255,35,49,109" value="145" />
+			<entry class="" argb="255,37,50,108" value="146" />
+			<entry class="" argb="255,39,52,107" value="147" />
+			<entry class="" argb="255,41,53,106" value="148" />
+			<entry class="" argb="255,43,54,105" value="149" />
+			<entry class="" argb="255,45,56,104" value="150" />
+			<entry class="" argb="255,47,57,103" value="151" />
+			<entry class="" argb="255,49,58,102" value="152" />
+			<entry class="" argb="255,51,60,101" value="153" />
+			<entry class="" argb="255,53,61,100" value="154" />
+			<entry class="" argb="255,55,62,99" value="155" />
+			<entry class="" argb="255,57,64,98" value="156" />
+			<entry class="" argb="255,59,65,97" value="157" />
+			<entry class="" argb="255,61,66,96" value="158" />
+			<entry class="" argb="255,63,68,95" value="159" />
+			<entry class="" argb="255,65,69,94" value="160" />
+			<entry class="" argb="255,67,70,93" value="161" />
+			<entry class="" argb="255,69,72,92" value="162" />
+			<entry class="" argb="255,71,73,91" value="163" />
+			<entry class="" argb="255,73,75,90" value="164" />
+			<entry class="" argb="255,75,76,89" value="165" />
+			<entry class="" argb="255,77,77,88" value="166" />
+			<entry class="" argb="255,79,79,87" value="167" />
+			<entry class="" argb="255,81,80,86" value="168" />
+			<entry class="" argb="255,83,81,85" value="169" />
+			<entry class="" argb="255,85,83,84" value="170" />
+			<entry class="" argb="255,87,84,83" value="171" />
+			<entry class="" argb="255,89,85,82" value="172" />
+			<entry class="" argb="255,91,87,81" value="173" />
+			<entry class="" argb="255,93,88,80" value="174" />
+			<entry class="" argb="255,95,89,79" value="175" />
+			<entry class="" argb="255,97,91,78" value="176" />
+			<entry class="" argb="255,99,92,77" value="177" />
+			<entry class="" argb="255,101,93,76" value="178" />
+			<entry class="" argb="255,103,95,75" value="179" />
+			<entry class="" argb="255,105,96,74" value="180" />
+			<entry class="" argb="255,107,97,73" value="181" />
+			<entry class="" argb="255,108,99,72" value="182" />
+			<entry class="" argb="255,110,100,71" value="183" />
+			<entry class="" argb="255,112,101,70" value="184" />
+			<entry class="" argb="255,114,103,69" value="185" />
+			<entry class="" argb="255,116,104,68" value="186" />
+			<entry class="" argb="255,118,105,67" value="187" />
+			<entry class="" argb="255,120,107,66" value="188" />
+			<entry class="" argb="255,122,108,65" value="189" />
+			<entry class="" argb="255,124,109,64" value="190" />
+			<entry class="" argb="255,126,111,63" value="191" />
+			<entry class="" argb="255,128,112,62" value="192" />
+			<entry class="" argb="255,130,113,61" value="193" />
+			<entry class="" argb="255,132,115,60" value="194" />
+			<entry class="" argb="255,134,116,59" value="195" />
+			<entry class="" argb="255,136,117,58" value="196" />
+			<entry class="" argb="255,138,119,57" value="197" />
+			<entry class="" argb="255,140,120,56" value="198" />
+			<entry class="" argb="255,142,121,55" value="199" />
+			<entry class="" argb="255,144,123,54" value="200" />
+			<entry class="" argb="255,146,124,53" value="201" />
+			<entry class="" argb="255,148,125,52" value="202" />
+			<entry class="" argb="255,150,127,51" value="203" />
+			<entry class="" argb="255,152,128,50" value="204" />
+			<entry class="" argb="255,154,129,49" value="205" />
+			<entry class="" argb="255,156,131,48" value="206" />
+			<entry class="" argb="255,158,132,47" value="207" />
+			<entry class="" argb="255,160,133,46" value="208" />
+			<entry class="" argb="255,162,135,45" value="209" />
+			<entry class="" argb="255,164,136,44" value="210" />
+			<entry class="" argb="255,166,137,43" value="211" />
+			<entry class="" argb="255,168,139,42" value="212" />
+			<entry class="" argb="255,170,140,41" value="213" />
+			<entry class="" argb="255,172,141,40" value="214" />
+			<entry class="" argb="255,174,143,39" value="215" />
+			<entry class="" argb="255,176,144,38" value="216" />
+			<entry class="" argb="255,178,145,37" value="217" />
+			<entry class="" argb="255,180,147,36" value="218" />
+			<entry class="" argb="255,182,148,35" value="219" />
+			<entry class="" argb="255,184,149,34" value="220" />
+			<entry class="" argb="255,186,151,33" value="221" />
+			<entry class="" argb="255,188,152,32" value="222" />
+			<entry class="" argb="255,190,153,31" value="223" />
+			<entry class="" argb="255,192,155,30" value="224" />
+			<entry class="" argb="255,194,156,29" value="225" />
+			<entry class="" argb="255,196,157,28" value="226" />
+			<entry class="" argb="255,198,159,27" value="227" />
+			<entry class="" argb="255,200,160,26" value="228" />
+			<entry class="" argb="255,202,161,25" value="229" />
+			<entry class="" argb="255,204,163,24" value="230" />
+			<entry class="" argb="255,206,164,23" value="231" />
+			<entry class="" argb="255,208,165,22" value="232" />
+			<entry class="" argb="255,210,167,21" value="233" />
+			<entry class="" argb="255,211,168,20" value="234" />
+			<entry class="" argb="255,213,169,19" value="235" />
+			<entry class="" argb="255,215,171,18" value="236" />
+			<entry class="" argb="255,217,172,17" value="237" />
+			<entry class="" argb="255,219,173,16" value="238" />
+			<entry class="" argb="255,221,175,15" value="239" />
+			<entry class="" argb="255,223,176,14" value="240" />
+			<entry class="" argb="255,225,177,13" value="241" />
+			<entry class="" argb="255,227,179,12" value="242" />
+			<entry class="" argb="255,229,180,11" value="243" />
+			<entry class="" argb="255,231,181,13" value="244" />
+			<entry class="" argb="255,233,183,9" value="245" />
+			<entry class="" argb="255,235,184,8" value="246" />
+			<entry class="" argb="255,237,185,7" value="247" />
+			<entry class="" argb="255,239,187,6" value="248" />
+			<entry class="" argb="255,241,188,5" value="249" />
+			<entry class="" argb="255,243,189,4" value="250" />
+			<entry class="" argb="255,245,191,3" value="251" />
+			<entry class="" argb="255,247,192,2" value="252" />
+			<entry class="" argb="255,249,193,1" value="253" />
+			<entry class="" argb="255,251,195,0" value="254" />
+			<entry class="" argb="255,251,195,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="mac-style" interpolate="false">
+		<table>
+			<entry class="" argb="255,124,0,255" value="0" />
+			<entry class="" argb="255,124,0,255" value="1" />
+			<entry class="" argb="255,120,0,254" value="2" />
+			<entry class="" argb="255,115,0,255" value="3" />
+			<entry class="" argb="255,111,0,254" value="4" />
+			<entry class="" argb="255,106,0,255" value="5" />
+			<entry class="" argb="255,102,0,254" value="6" />
+			<entry class="" argb="255,97,0,255" value="7" />
+			<entry class="" argb="255,93,0,254" value="8" />
+			<entry class="" argb="255,88,0,255" value="9" />
+			<entry class="" argb="255,84,0,254" value="10" />
+			<entry class="" argb="255,79,0,255" value="11" />
+			<entry class="" argb="255,75,0,254" value="12" />
+			<entry class="" argb="255,70,0,255" value="13" />
+			<entry class="" argb="255,66,0,254" value="14" />
+			<entry class="" argb="255,61,0,255" value="15" />
+			<entry class="" argb="255,57,0,254" value="16" />
+			<entry class="" argb="255,52,0,255" value="17" />
+			<entry class="" argb="255,48,0,254" value="18" />
+			<entry class="" argb="255,43,0,255" value="19" />
+			<entry class="" argb="255,39,0,254" value="20" />
+			<entry class="" argb="255,34,0,255" value="21" />
+			<entry class="" argb="255,30,0,254" value="22" />
+			<entry class="" argb="255,25,0,255" value="23" />
+			<entry class="" argb="255,21,0,254" value="24" />
+			<entry class="" argb="255,16,0,255" value="25" />
+			<entry class="" argb="255,12,0,254" value="26" />
+			<entry class="" argb="255,7,0,255" value="27" />
+			<entry class="" argb="255,3,0,254" value="28" />
+			<entry class="" argb="255,0,2,255" value="29" />
+			<entry class="" argb="255,0,6,254" value="30" />
+			<entry class="" argb="255,0,11,255" value="31" />
+			<entry class="" argb="255,0,15,254" value="32" />
+			<entry class="" argb="255,0,20,255" value="33" />
+			<entry class="" argb="255,0,24,254" value="34" />
+			<entry class="" argb="255,0,29,255" value="35" />
+			<entry class="" argb="255,0,33,254" value="36" />
+			<entry class="" argb="255,0,38,255" value="37" />
+			<entry class="" argb="255,0,42,254" value="38" />
+			<entry class="" argb="255,0,47,255" value="39" />
+			<entry class="" argb="255,0,51,254" value="40" />
+			<entry class="" argb="255,0,56,255" value="41" />
+			<entry class="" argb="255,0,60,254" value="42" />
+			<entry class="" argb="255,0,65,255" value="43" />
+			<entry class="" argb="255,0,69,254" value="44" />
+			<entry class="" argb="255,0,74,255" value="45" />
+			<entry class="" argb="255,0,78,254" value="46" />
+			<entry class="" argb="255,0,83,255" value="47" />
+			<entry class="" argb="255,0,87,254" value="48" />
+			<entry class="" argb="255,0,92,255" value="49" />
+			<entry class="" argb="255,0,96,254" value="50" />
+			<entry class="" argb="255,0,101,255" value="51" />
+			<entry class="" argb="255,0,105,254" value="52" />
+			<entry class="" argb="255,0,110,255" value="53" />
+			<entry class="" argb="255,0,114,254" value="54" />
+			<entry class="" argb="255,0,119,255" value="55" />
+			<entry class="" argb="255,0,122,254" value="56" />
+			<entry class="" argb="255,0,128,255" value="57" />
+			<entry class="" argb="255,0,131,254" value="58" />
+			<entry class="" argb="255,0,137,255" value="59" />
+			<entry class="" argb="255,0,140,254" value="60" />
+			<entry class="" argb="255,0,146,255" value="61" />
+			<entry class="" argb="255,0,149,254" value="62" />
+			<entry class="" argb="255,0,155,255" value="63" />
+			<entry class="" argb="255,0,158,254" value="64" />
+			<entry class="" argb="255,0,164,255" value="65" />
+			<entry class="" argb="255,0,167,254" value="66" />
+			<entry class="" argb="255,0,173,255" value="67" />
+			<entry class="" argb="255,0,176,254" value="68" />
+			<entry class="" argb="255,0,182,255" value="69" />
+			<entry class="" argb="255,0,185,254" value="70" />
+			<entry class="" argb="255,0,191,255" value="71" />
+			<entry class="" argb="255,0,194,254" value="72" />
+			<entry class="" argb="255,0,200,255" value="73" />
+			<entry class="" argb="255,0,203,254" value="74" />
+			<entry class="" argb="255,0,209,255" value="75" />
+			<entry class="" argb="255,0,212,254" value="76" />
+			<entry class="" argb="255,0,218,255" value="77" />
+			<entry class="" argb="255,0,221,254" value="78" />
+			<entry class="" argb="255,0,227,255" value="79" />
+			<entry class="" argb="255,0,230,254" value="80" />
+			<entry class="" argb="255,0,236,255" value="81" />
+			<entry class="" argb="255,0,240,254" value="82" />
+			<entry class="" argb="255,0,245,255" value="83" />
+			<entry class="" argb="255,0,249,254" value="84" />
+			<entry class="" argb="255,0,254,255" value="85" />
+			<entry class="" argb="255,0,254,250" value="86" />
+			<entry class="" argb="255,0,255,247" value="87" />
+			<entry class="" argb="255,0,254,241" value="88" />
+			<entry class="" argb="255,0,255,238" value="89" />
+			<entry class="" argb="255,0,254,232" value="90" />
+			<entry class="" argb="255,0,255,229" value="91" />
+			<entry class="" argb="255,0,254,223" value="92" />
+			<entry class="" argb="255,0,255,220" value="93" />
+			<entry class="" argb="255,0,254,214" value="94" />
+			<entry class="" argb="255,0,255,211" value="95" />
+			<entry class="" argb="255,0,254,205" value="96" />
+			<entry class="" argb="255,0,255,202" value="97" />
+			<entry class="" argb="255,0,254,196" value="98" />
+			<entry class="" argb="255,0,255,193" value="99" />
+			<entry class="" argb="255,0,254,187" value="100" />
+			<entry class="" argb="255,0,255,184" value="101" />
+			<entry class="" argb="255,0,254,178" value="102" />
+			<entry class="" argb="255,0,255,175" value="103" />
+			<entry class="" argb="255,0,254,169" value="104" />
+			<entry class="" argb="255,0,255,166" value="105" />
+			<entry class="" argb="255,0,254,160" value="106" />
+			<entry class="" argb="255,0,255,157" value="107" />
+			<entry class="" argb="255,0,254,151" value="108" />
+			<entry class="" argb="255,0,255,148" value="109" />
+			<entry class="" argb="255,0,254,142" value="110" />
+			<entry class="" argb="255,0,255,139" value="111" />
+			<entry class="" argb="255,0,254,133" value="112" />
+			<entry class="" argb="255,0,255,130" value="113" />
+			<entry class="" argb="255,0,254,125" value="114" />
+			<entry class="" argb="255,0,255,121" value="115" />
+			<entry class="" argb="255,0,254,116" value="116" />
+			<entry class="" argb="255,0,255,112" value="117" />
+			<entry class="" argb="255,0,254,107" value="118" />
+			<entry class="" argb="255,0,255,103" value="119" />
+			<entry class="" argb="255,0,254,98" value="120" />
+			<entry class="" argb="255,0,255,94" value="121" />
+			<entry class="" argb="255,0,254,89" value="122" />
+			<entry class="" argb="255,0,255,85" value="123" />
+			<entry class="" argb="255,0,254,80" value="124" />
+			<entry class="" argb="255,0,255,76" value="125" />
+			<entry class="" argb="255,0,254,71" value="126" />
+			<entry class="" argb="255,0,255,67" value="127" />
+			<entry class="" argb="255,0,254,62" value="128" />
+			<entry class="" argb="255,0,255,58" value="129" />
+			<entry class="" argb="255,0,254,53" value="130" />
+			<entry class="" argb="255,0,255,49" value="131" />
+			<entry class="" argb="255,0,254,44" value="132" />
+			<entry class="" argb="255,0,255,40" value="133" />
+			<entry class="" argb="255,0,254,35" value="134" />
+			<entry class="" argb="255,0,255,31" value="135" />
+			<entry class="" argb="255,0,254,26" value="136" />
+			<entry class="" argb="255,0,255,22" value="137" />
+			<entry class="" argb="255,0,254,17" value="138" />
+			<entry class="" argb="255,0,255,13" value="139" />
+			<entry class="" argb="255,0,254,8" value="140" />
+			<entry class="" argb="255,0,255,4" value="141" />
+			<entry class="" argb="255,1,254,0" value="142" />
+			<entry class="" argb="255,5,255,0" value="143" />
+			<entry class="" argb="255,13,254,0" value="144" />
+			<entry class="" argb="255,14,255,0" value="145" />
+			<entry class="" argb="255,19,254,0" value="146" />
+			<entry class="" argb="255,23,255,0" value="147" />
+			<entry class="" argb="255,28,254,0" value="148" />
+			<entry class="" argb="255,32,255,0" value="149" />
+			<entry class="" argb="255,37,254,0" value="150" />
+			<entry class="" argb="255,41,255,0" value="151" />
+			<entry class="" argb="255,46,254,0" value="152" />
+			<entry class="" argb="255,50,255,0" value="153" />
+			<entry class="" argb="255,55,254,0" value="154" />
+			<entry class="" argb="255,59,255,0" value="155" />
+			<entry class="" argb="255,64,254,0" value="156" />
+			<entry class="" argb="255,68,255,0" value="157" />
+			<entry class="" argb="255,73,254,0" value="158" />
+			<entry class="" argb="255,77,255,0" value="159" />
+			<entry class="" argb="255,82,254,0" value="160" />
+			<entry class="" argb="255,86,255,0" value="161" />
+			<entry class="" argb="255,91,254,0" value="162" />
+			<entry class="" argb="255,95,255,0" value="163" />
+			<entry class="" argb="255,100,254,0" value="164" />
+			<entry class="" argb="255,104,255,0" value="165" />
+			<entry class="" argb="255,109,254,0" value="166" />
+			<entry class="" argb="255,113,255,0" value="167" />
+			<entry class="" argb="255,118,254,0" value="168" />
+			<entry class="" argb="255,123,255,0" value="169" />
+			<entry class="" argb="255,126,254,0" value="170" />
+			<entry class="" argb="255,132,255,0" value="171" />
+			<entry class="" argb="255,135,254,0" value="172" />
+			<entry class="" argb="255,141,255,0" value="173" />
+			<entry class="" argb="255,144,254,0" value="174" />
+			<entry class="" argb="255,150,255,0" value="175" />
+			<entry class="" argb="255,153,254,0" value="176" />
+			<entry class="" argb="255,159,255,0" value="177" />
+			<entry class="" argb="255,162,254,0" value="178" />
+			<entry class="" argb="255,168,255,0" value="179" />
+			<entry class="" argb="255,171,254,0" value="180" />
+			<entry class="" argb="255,177,255,0" value="181" />
+			<entry class="" argb="255,180,254,0" value="182" />
+			<entry class="" argb="255,186,255,0" value="183" />
+			<entry class="" argb="255,189,254,0" value="184" />
+			<entry class="" argb="255,195,255,0" value="185" />
+			<entry class="" argb="255,198,254,0" value="186" />
+			<entry class="" argb="255,204,255,0" value="187" />
+			<entry class="" argb="255,207,254,0" value="188" />
+			<entry class="" argb="255,213,255,0" value="189" />
+			<entry class="" argb="255,216,254,0" value="190" />
+			<entry class="" argb="255,222,255,0" value="191" />
+			<entry class="" argb="255,225,254,0" value="192" />
+			<entry class="" argb="255,231,255,0" value="193" />
+			<entry class="" argb="255,234,254,0" value="194" />
+			<entry class="" argb="255,240,255,0" value="195" />
+			<entry class="" argb="255,243,254,0" value="196" />
+			<entry class="" argb="255,249,255,0" value="197" />
+			<entry class="" argb="255,252,254,0" value="198" />
+			<entry class="" argb="255,255,252,0" value="199" />
+			<entry class="" argb="255,254,247,0" value="200" />
+			<entry class="" argb="255,255,243,0" value="201" />
+			<entry class="" argb="255,254,238,0" value="202" />
+			<entry class="" argb="255,255,234,0" value="203" />
+			<entry class="" argb="255,254,229,0" value="204" />
+			<entry class="" argb="255,255,225,0" value="205" />
+			<entry class="" argb="255,254,220,0" value="206" />
+			<entry class="" argb="255,255,216,0" value="207" />
+			<entry class="" argb="255,254,211,0" value="208" />
+			<entry class="" argb="255,255,207,0" value="209" />
+			<entry class="" argb="255,254,202,0" value="210" />
+			<entry class="" argb="255,255,198,0" value="211" />
+			<entry class="" argb="255,254,193,0" value="212" />
+			<entry class="" argb="255,255,189,0" value="213" />
+			<entry class="" argb="255,254,184,0" value="214" />
+			<entry class="" argb="255,255,180,0" value="215" />
+			<entry class="" argb="255,254,175,0" value="216" />
+			<entry class="" argb="255,255,171,0" value="217" />
+			<entry class="" argb="255,254,166,0" value="218" />
+			<entry class="" argb="255,255,162,0" value="219" />
+			<entry class="" argb="255,254,157,0" value="220" />
+			<entry class="" argb="255,255,153,0" value="221" />
+			<entry class="" argb="255,254,148,0" value="222" />
+			<entry class="" argb="255,255,144,0" value="223" />
+			<entry class="" argb="255,254,139,0" value="224" />
+			<entry class="" argb="255,255,135,0" value="225" />
+			<entry class="" argb="255,254,131,0" value="226" />
+			<entry class="" argb="255,255,126,0" value="227" />
+			<entry class="" argb="255,254,122,0" value="228" />
+			<entry class="" argb="255,255,117,0" value="229" />
+			<entry class="" argb="255,254,113,0" value="230" />
+			<entry class="" argb="255,255,108,0" value="231" />
+			<entry class="" argb="255,254,104,0" value="232" />
+			<entry class="" argb="255,255,99,0" value="233" />
+			<entry class="" argb="255,254,95,0" value="234" />
+			<entry class="" argb="255,255,90,0" value="235" />
+			<entry class="" argb="255,254,86,0" value="236" />
+			<entry class="" argb="255,255,81,0" value="237" />
+			<entry class="" argb="255,254,77,0" value="238" />
+			<entry class="" argb="255,255,72,0" value="239" />
+			<entry class="" argb="255,254,68,0" value="240" />
+			<entry class="" argb="255,255,63,0" value="241" />
+			<entry class="" argb="255,254,59,0" value="242" />
+			<entry class="" argb="255,255,54,0" value="243" />
+			<entry class="" argb="255,254,50,0" value="244" />
+			<entry class="" argb="255,255,45,0" value="245" />
+			<entry class="" argb="255,254,41,0" value="246" />
+			<entry class="" argb="255,255,36,0" value="247" />
+			<entry class="" argb="255,254,32,0" value="248" />
+			<entry class="" argb="255,255,27,0" value="249" />
+			<entry class="" argb="255,254,23,0" value="250" />
+			<entry class="" argb="255,255,18,0" value="251" />
+			<entry class="" argb="255,254,14,0" value="252" />
+			<entry class="" argb="255,255,9,0" value="253" />
+			<entry class="" argb="255,255,5,0" value="254" />
+			<entry class="" argb="255,255,5,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="nature" interpolate="false">
+		<table>
+			<entry class="" argb="255,105,246,234" value="0" />
+			<entry class="" argb="255,105,246,234" value="1" />
+			<entry class="" argb="255,105,246,234" value="2" />
+			<entry class="" argb="255,105,246,234" value="3" />
+			<entry class="" argb="255,105,246,234" value="4" />
+			<entry class="" argb="255,105,246,234" value="5" />
+			<entry class="" argb="255,105,246,234" value="6" />
+			<entry class="" argb="255,105,246,234" value="7" />
+			<entry class="" argb="255,105,246,234" value="8" />
+			<entry class="" argb="255,110,251,222" value="9" />
+			<entry class="" argb="255,114,253,210" value="10" />
+			<entry class="" argb="255,123,244,186" value="11" />
+			<entry class="" argb="255,127,239,175" value="12" />
+			<entry class="" argb="255,131,235,164" value="13" />
+			<entry class="" argb="255,135,231,153" value="14" />
+			<entry class="" argb="255,143,224,132" value="15" />
+			<entry class="" argb="255,147,222,122" value="16" />
+			<entry class="" argb="255,150,219,113" value="17" />
+			<entry class="" argb="255,157,216,95" value="18" />
+			<entry class="" argb="255,160,214,87" value="19" />
+			<entry class="" argb="255,163,214,79" value="20" />
+			<entry class="" argb="255,165,213,72" value="21" />
+			<entry class="" argb="255,170,214,59" value="22" />
+			<entry class="" argb="255,172,215,54" value="23" />
+			<entry class="" argb="255,174,216,49" value="24" />
+			<entry class="" argb="255,176,218,44" value="25" />
+			<entry class="" argb="255,179,223,37" value="26" />
+			<entry class="" argb="255,180,226,34" value="27" />
+			<entry class="" argb="255,180,229,32" value="28" />
+			<entry class="" argb="255,181,237,30" value="29" />
+			<entry class="" argb="255,182,241,29" value="30" />
+			<entry class="" argb="255,181,246,30" value="31" />
+			<entry class="" argb="255,181,251,31" value="32" />
+			<entry class="" argb="255,180,248,34" value="33" />
+			<entry class="" argb="255,179,243,37" value="34" />
+			<entry class="" argb="255,177,237,40" value="35" />
+			<entry class="" argb="255,174,225,49" value="36" />
+			<entry class="" argb="255,172,218,54" value="37" />
+			<entry class="" argb="255,170,212,59" value="38" />
+			<entry class="" argb="255,168,205,66" value="39" />
+			<entry class="" argb="255,163,192,79" value="40" />
+			<entry class="" argb="255,160,186,87" value="41" />
+			<entry class="" argb="255,157,179,95" value="42" />
+			<entry class="" argb="255,154,173,104" value="43" />
+			<entry class="" argb="255,147,160,122" value="44" />
+			<entry class="" argb="255,143,154,132" value="45" />
+			<entry class="" argb="255,139,148,142" value="46" />
+			<entry class="" argb="255,131,137,164" value="47" />
+			<entry class="" argb="255,127,132,175" value="48" />
+			<entry class="" argb="255,123,127,186" value="49" />
+			<entry class="" argb="255,119,122,198" value="50" />
+			<entry class="" argb="255,110,113,222" value="51" />
+			<entry class="" argb="255,105,109,234" value="52" />
+			<entry class="" argb="255,100,105,246" value="53" />
+			<entry class="" argb="255,96,102,251" value="54" />
+			<entry class="" argb="255,87,96,227" value="55" />
+			<entry class="" argb="255,82,94,214" value="56" />
+			<entry class="" argb="255,77,92,202" value="57" />
+			<entry class="" argb="255,68,89,177" value="58" />
+			<entry class="" argb="255,63,88,165" value="59" />
+			<entry class="" argb="255,59,88,153" value="60" />
+			<entry class="" argb="255,54,88,141" value="61" />
+			<entry class="" argb="255,46,88,118" value="62" />
+			<entry class="" argb="255,42,89,107" value="63" />
+			<entry class="" argb="255,38,90,96" value="64" />
+			<entry class="" argb="255,30,93,75" value="65" />
+			<entry class="" argb="255,26,95,65" value="66" />
+			<entry class="" argb="255,23,97,56" value="67" />
+			<entry class="" argb="255,19,99,47" value="68" />
+			<entry class="" argb="255,13,104,30" value="69" />
+			<entry class="" argb="255,13,107,22" value="70" />
+			<entry class="" argb="255,8,110,15" value="71" />
+			<entry class="" argb="255,5,113,9" value="72" />
+			<entry class="" argb="255,1,120,2" value="73" />
+			<entry class="" argb="255,0,124,7" value="74" />
+			<entry class="" argb="255,2,127,12" value="75" />
+			<entry class="" argb="255,5,134,19" value="76" />
+			<entry class="" argb="255,6,138,22" value="77" />
+			<entry class="" argb="255,6,141,24" value="78" />
+			<entry class="" argb="255,7,145,25" value="79" />
+			<entry class="" argb="255,8,152,27" value="80" />
+			<entry class="" argb="255,7,155,26" value="81" />
+			<entry class="" argb="255,7,158,25" value="82" />
+			<entry class="" argb="255,6,164,22" value="83" />
+			<entry class="" argb="255,5,166,19" value="84" />
+			<entry class="" argb="255,3,169,16" value="85" />
+			<entry class="" argb="255,2,171,12" value="86" />
+			<entry class="" argb="255,1,175,2" value="87" />
+			<entry class="" argb="255,3,176,2" value="88" />
+			<entry class="" argb="255,5,178,9" value="89" />
+			<entry class="" argb="255,8,179,15" value="90" />
+			<entry class="" argb="255,13,180,30" value="91" />
+			<entry class="" argb="255,16,180,38" value="92" />
+			<entry class="" argb="255,19,180,47" value="93" />
+			<entry class="" argb="255,26,180,65" value="94" />
+			<entry class="" argb="255,30,179,75" value="95" />
+			<entry class="" argb="255,34,178,85" value="96" />
+			<entry class="" argb="255,38,176,96" value="97" />
+			<entry class="" argb="255,46,173,118" value="98" />
+			<entry class="" argb="255,50,171,129" value="99" />
+			<entry class="" argb="255,54,169,141" value="100" />
+			<entry class="" argb="255,59,166,153" value="101" />
+			<entry class="" argb="255,68,161,177" value="102" />
+			<entry class="" argb="255,73,158,189" value="103" />
+			<entry class="" argb="255,77,154,202" value="104" />
+			<entry class="" argb="255,86,148,226" value="105" />
+			<entry class="" argb="255,91,144,239" value="106" />
+			<entry class="" argb="255,96,140,251" value="107" />
+			<entry class="" argb="255,100,136,246" value="108" />
+			<entry class="" argb="255,110,128,222" value="109" />
+			<entry class="" argb="255,114,124,210" value="110" />
+			<entry class="" argb="255,119,120,198" value="111" />
+			<entry class="" argb="255,127,112,175" value="112" />
+			<entry class="" argb="255,131,108,164" value="113" />
+			<entry class="" argb="255,135,104,153" value="114" />
+			<entry class="" argb="255,139,100,142" value="115" />
+			<entry class="" argb="255,147,92,122" value="116" />
+			<entry class="" argb="255,150,88,113" value="117" />
+			<entry class="" argb="255,154,85,104" value="118" />
+			<entry class="" argb="255,157,81,95" value="119" />
+			<entry class="" argb="255,163,74,79" value="120" />
+			<entry class="" argb="255,165,71,72" value="121" />
+			<entry class="" argb="255,168,68,66" value="122" />
+			<entry class="" argb="255,172,62,54" value="123" />
+			<entry class="" argb="255,174,60,49" value="124" />
+			<entry class="" argb="255,176,57,44" value="125" />
+			<entry class="" argb="255,177,55,40" value="126" />
+			<entry class="" argb="255,180,51,34" value="127" />
+			<entry class="" argb="255,180,50,32" value="128" />
+			<entry class="" argb="255,181,48,31" value="129" />
+			<entry class="" argb="255,182,46,29" value="130" />
+			<entry class="" argb="255,181,45,30" value="131" />
+			<entry class="" argb="255,181,44,31" value="132" />
+			<entry class="" argb="255,180,44,32" value="133" />
+			<entry class="" argb="255,179,43,37" value="134" />
+			<entry class="" argb="255,177,43,40" value="135" />
+			<entry class="" argb="255,176,43,44" value="136" />
+			<entry class="" argb="255,174,44,49" value="137" />
+			<entry class="" argb="255,170,44,59" value="138" />
+			<entry class="" argb="255,168,45,66" value="139" />
+			<entry class="" argb="255,165,46,72" value="140" />
+			<entry class="" argb="255,160,47,87" value="141" />
+			<entry class="" argb="255,157,48,95" value="142" />
+			<entry class="" argb="255,154,49,104" value="143" />
+			<entry class="" argb="255,150,51,113" value="144" />
+			<entry class="" argb="255,143,53,132" value="145" />
+			<entry class="" argb="255,139,54,142" value="146" />
+			<entry class="" argb="255,135,55,153" value="147" />
+			<entry class="" argb="255,127,57,175" value="148" />
+			<entry class="" argb="255,123,59,186" value="149" />
+			<entry class="" argb="255,119,60,198" value="150" />
+			<entry class="" argb="255,114,61,210" value="151" />
+			<entry class="" argb="255,105,63,234" value="152" />
+			<entry class="" argb="255,100,64,246" value="153" />
+			<entry class="" argb="255,96,64,251" value="154" />
+			<entry class="" argb="255,91,65,239" value="155" />
+			<entry class="" argb="255,82,66,214" value="156" />
+			<entry class="" argb="255,77,67,202" value="157" />
+			<entry class="" argb="255,73,67,189" value="158" />
+			<entry class="" argb="255,63,67,165" value="159" />
+			<entry class="" argb="255,59,67,153" value="160" />
+			<entry class="" argb="255,54,67,141" value="161" />
+			<entry class="" argb="255,50,67,129" value="162" />
+			<entry class="" argb="255,42,66,107" value="163" />
+			<entry class="" argb="255,38,66,96" value="164" />
+			<entry class="" argb="255,34,65,85" value="165" />
+			<entry class="" argb="255,30,64,75" value="166" />
+			<entry class="" argb="255,23,62,56" value="167" />
+			<entry class="" argb="255,19,61,47" value="168" />
+			<entry class="" argb="255,16,60,38" value="169" />
+			<entry class="" argb="255,13,58,22" value="170" />
+			<entry class="" argb="255,8,56,15" value="171" />
+			<entry class="" argb="255,5,55,9" value="172" />
+			<entry class="" argb="255,3,53,2" value="173" />
+			<entry class="" argb="255,0,50,7" value="174" />
+			<entry class="" argb="255,2,48,12" value="175" />
+			<entry class="" argb="255,3,46,16" value="176" />
+			<entry class="" argb="255,6,43,22" value="177" />
+			<entry class="" argb="255,6,41,24" value="178" />
+			<entry class="" argb="255,7,39,25" value="179" />
+			<entry class="" argb="255,7,37,26" value="180" />
+			<entry class="" argb="255,7,34,26" value="181" />
+			<entry class="" argb="255,7,32,25" value="182" />
+			<entry class="" argb="255,6,30,24" value="183" />
+			<entry class="" argb="255,6,28,22" value="184" />
+			<entry class="" argb="255,3,25,16" value="185" />
+			<entry class="" argb="255,2,23,12" value="186" />
+			<entry class="" argb="255,0,22,7" value="187" />
+			<entry class="" argb="255,3,19,2" value="188" />
+			<entry class="" argb="255,5,17,9" value="189" />
+			<entry class="" argb="255,8,16,15" value="190" />
+			<entry class="" argb="255,13,15,22" value="191" />
+			<entry class="" argb="255,16,12,38" value="192" />
+			<entry class="" argb="255,19,11,47" value="193" />
+			<entry class="" argb="255,23,13,56" value="194" />
+			<entry class="" argb="255,30,8,75" value="195" />
+			<entry class="" argb="255,34,7,85" value="196" />
+			<entry class="" argb="255,38,6,96" value="197" />
+			<entry class="" argb="255,42,6,107" value="198" />
+			<entry class="" argb="255,50,4,129" value="199" />
+			<entry class="" argb="255,54,4,141" value="200" />
+			<entry class="" argb="255,59,3,153" value="201" />
+			<entry class="" argb="255,63,2,165" value="202" />
+			<entry class="" argb="255,73,1,189" value="203" />
+			<entry class="" argb="255,77,1,202" value="204" />
+			<entry class="" argb="255,82,0,214" value="205" />
+			<entry class="" argb="255,82,0,214" value="206" />
+			<entry class="" argb="255,82,0,214" value="207" />
+			<entry class="" argb="255,82,0,214" value="208" />
+			<entry class="" argb="255,82,0,214" value="209" />
+			<entry class="" argb="255,82,0,214" value="210" />
+			<entry class="" argb="255,82,0,214" value="211" />
+			<entry class="" argb="255,82,0,214" value="212" />
+			<entry class="" argb="255,82,0,214" value="213" />
+			<entry class="" argb="255,82,0,214" value="214" />
+			<entry class="" argb="255,82,0,214" value="215" />
+			<entry class="" argb="255,82,0,214" value="216" />
+			<entry class="" argb="255,82,0,214" value="217" />
+			<entry class="" argb="255,82,0,214" value="218" />
+			<entry class="" argb="255,82,0,214" value="219" />
+			<entry class="" argb="255,82,0,214" value="220" />
+			<entry class="" argb="255,82,0,214" value="221" />
+			<entry class="" argb="255,82,0,214" value="222" />
+			<entry class="" argb="255,82,0,214" value="223" />
+			<entry class="" argb="255,82,0,214" value="224" />
+			<entry class="" argb="255,82,0,214" value="225" />
+			<entry class="" argb="255,82,0,214" value="226" />
+			<entry class="" argb="255,82,0,214" value="227" />
+			<entry class="" argb="255,82,0,214" value="228" />
+			<entry class="" argb="255,82,0,214" value="229" />
+			<entry class="" argb="255,82,0,214" value="230" />
+			<entry class="" argb="255,82,0,214" value="231" />
+			<entry class="" argb="255,82,0,214" value="232" />
+			<entry class="" argb="255,82,0,214" value="233" />
+			<entry class="" argb="255,82,0,214" value="234" />
+			<entry class="" argb="255,82,0,214" value="235" />
+			<entry class="" argb="255,82,0,214" value="236" />
+			<entry class="" argb="255,82,0,214" value="237" />
+			<entry class="" argb="255,82,0,214" value="238" />
+			<entry class="" argb="255,82,0,214" value="239" />
+			<entry class="" argb="255,82,0,214" value="240" />
+			<entry class="" argb="255,82,0,214" value="241" />
+			<entry class="" argb="255,82,0,214" value="242" />
+			<entry class="" argb="255,82,0,214" value="243" />
+			<entry class="" argb="255,82,0,214" value="244" />
+			<entry class="" argb="255,82,0,214" value="245" />
+			<entry class="" argb="255,82,0,214" value="246" />
+			<entry class="" argb="255,82,0,214" value="247" />
+			<entry class="" argb="255,82,0,214" value="248" />
+			<entry class="" argb="255,82,0,214" value="249" />
+			<entry class="" argb="255,82,0,214" value="250" />
+			<entry class="" argb="255,82,0,214" value="251" />
+			<entry class="" argb="255,82,0,214" value="252" />
+			<entry class="" argb="255,0,0,0" value="253" />
+			<entry class="" argb="255,255,255,255" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="pastels" interpolate="false">
+		<table>
+			<entry class="" argb="255,255,0,72" value="0" />
+			<entry class="" argb="255,255,0,72" value="1" />
+			<entry class="" argb="255,255,0,74" value="2" />
+			<entry class="" argb="255,255,0,76" value="3" />
+			<entry class="" argb="255,255,0,78" value="4" />
+			<entry class="" argb="255,255,0,80" value="5" />
+			<entry class="" argb="255,255,0,82" value="6" />
+			<entry class="" argb="255,255,0,84" value="7" />
+			<entry class="" argb="255,255,0,86" value="8" />
+			<entry class="" argb="255,255,0,88" value="9" />
+			<entry class="" argb="255,255,0,90" value="10" />
+			<entry class="" argb="255,255,0,91" value="11" />
+			<entry class="" argb="255,255,0,93" value="12" />
+			<entry class="" argb="255,255,0,95" value="13" />
+			<entry class="" argb="255,255,0,97" value="14" />
+			<entry class="" argb="255,255,0,99" value="15" />
+			<entry class="" argb="255,255,0,101" value="16" />
+			<entry class="" argb="255,255,0,103" value="17" />
+			<entry class="" argb="255,255,0,105" value="18" />
+			<entry class="" argb="255,255,0,107" value="19" />
+			<entry class="" argb="255,255,0,109" value="20" />
+			<entry class="" argb="255,255,0,111" value="21" />
+			<entry class="" argb="255,255,0,113" value="22" />
+			<entry class="" argb="255,255,0,115" value="23" />
+			<entry class="" argb="255,255,0,117" value="24" />
+			<entry class="" argb="255,255,0,119" value="25" />
+			<entry class="" argb="255,255,0,121" value="26" />
+			<entry class="" argb="255,255,0,123" value="27" />
+			<entry class="" argb="255,255,0,125" value="28" />
+			<entry class="" argb="255,255,0,127" value="29" />
+			<entry class="" argb="255,255,0,129" value="30" />
+			<entry class="" argb="255,255,0,131" value="31" />
+			<entry class="" argb="255,255,0,133" value="32" />
+			<entry class="" argb="255,255,0,135" value="33" />
+			<entry class="" argb="255,255,0,137" value="34" />
+			<entry class="" argb="255,255,0,139" value="35" />
+			<entry class="" argb="255,255,0,141" value="36" />
+			<entry class="" argb="255,255,0,142" value="37" />
+			<entry class="" argb="255,255,0,144" value="38" />
+			<entry class="" argb="255,255,0,146" value="39" />
+			<entry class="" argb="255,255,0,148" value="40" />
+			<entry class="" argb="255,255,0,150" value="41" />
+			<entry class="" argb="255,255,0,152" value="42" />
+			<entry class="" argb="255,255,0,154" value="43" />
+			<entry class="" argb="255,255,0,156" value="44" />
+			<entry class="" argb="255,255,0,158" value="45" />
+			<entry class="" argb="255,255,0,160" value="46" />
+			<entry class="" argb="255,255,0,162" value="47" />
+			<entry class="" argb="255,255,0,164" value="48" />
+			<entry class="" argb="255,255,0,166" value="49" />
+			<entry class="" argb="255,255,0,168" value="50" />
+			<entry class="" argb="255,255,0,170" value="51" />
+			<entry class="" argb="255,255,0,172" value="52" />
+			<entry class="" argb="255,255,0,174" value="53" />
+			<entry class="" argb="255,255,0,176" value="54" />
+			<entry class="" argb="255,255,0,178" value="55" />
+			<entry class="" argb="255,255,0,180" value="56" />
+			<entry class="" argb="255,255,0,182" value="57" />
+			<entry class="" argb="255,255,0,184" value="58" />
+			<entry class="" argb="255,255,0,186" value="59" />
+			<entry class="" argb="255,255,0,188" value="60" />
+			<entry class="" argb="255,255,0,190" value="61" />
+			<entry class="" argb="255,255,0,191" value="62" />
+			<entry class="" argb="255,255,0,193" value="63" />
+			<entry class="" argb="255,255,0,195" value="64" />
+			<entry class="" argb="255,255,0,197" value="65" />
+			<entry class="" argb="255,255,0,199" value="66" />
+			<entry class="" argb="255,255,0,201" value="67" />
+			<entry class="" argb="255,255,0,203" value="68" />
+			<entry class="" argb="255,255,0,205" value="69" />
+			<entry class="" argb="255,255,0,207" value="70" />
+			<entry class="" argb="255,255,0,209" value="71" />
+			<entry class="" argb="255,255,0,211" value="72" />
+			<entry class="" argb="255,255,0,213" value="73" />
+			<entry class="" argb="255,255,0,215" value="74" />
+			<entry class="" argb="255,255,0,217" value="75" />
+			<entry class="" argb="255,255,0,219" value="76" />
+			<entry class="" argb="255,255,0,221" value="77" />
+			<entry class="" argb="255,255,0,223" value="78" />
+			<entry class="" argb="255,255,0,225" value="79" />
+			<entry class="" argb="255,255,0,227" value="80" />
+			<entry class="" argb="255,255,0,229" value="81" />
+			<entry class="" argb="255,255,0,231" value="82" />
+			<entry class="" argb="255,255,0,233" value="83" />
+			<entry class="" argb="255,255,0,235" value="84" />
+			<entry class="" argb="255,255,0,237" value="85" />
+			<entry class="" argb="255,255,0,239" value="86" />
+			<entry class="" argb="255,255,0,241" value="87" />
+			<entry class="" argb="255,255,0,242" value="88" />
+			<entry class="" argb="255,255,0,244" value="89" />
+			<entry class="" argb="255,255,0,246" value="90" />
+			<entry class="" argb="255,255,0,248" value="91" />
+			<entry class="" argb="255,255,0,250" value="92" />
+			<entry class="" argb="255,255,0,252" value="93" />
+			<entry class="" argb="255,255,0,254" value="94" />
+			<entry class="" argb="255,253,0,255" value="95" />
+			<entry class="" argb="255,251,0,255" value="96" />
+			<entry class="" argb="255,249,0,255" value="97" />
+			<entry class="" argb="255,247,0,255" value="98" />
+			<entry class="" argb="255,245,0,255" value="99" />
+			<entry class="" argb="255,243,0,255" value="100" />
+			<entry class="" argb="255,241,0,255" value="101" />
+			<entry class="" argb="255,239,0,255" value="102" />
+			<entry class="" argb="255,237,0,255" value="103" />
+			<entry class="" argb="255,235,0,255" value="104" />
+			<entry class="" argb="255,233,0,255" value="105" />
+			<entry class="" argb="255,231,0,255" value="106" />
+			<entry class="" argb="255,229,0,255" value="107" />
+			<entry class="" argb="255,227,0,255" value="108" />
+			<entry class="" argb="255,225,0,255" value="109" />
+			<entry class="" argb="255,223,0,255" value="110" />
+			<entry class="" argb="255,221,0,255" value="111" />
+			<entry class="" argb="255,219,0,255" value="112" />
+			<entry class="" argb="255,217,0,255" value="113" />
+			<entry class="" argb="255,216,0,255" value="114" />
+			<entry class="" argb="255,214,0,255" value="115" />
+			<entry class="" argb="255,212,0,255" value="116" />
+			<entry class="" argb="255,210,0,255" value="117" />
+			<entry class="" argb="255,208,0,255" value="118" />
+			<entry class="" argb="255,206,0,255" value="119" />
+			<entry class="" argb="255,204,0,255" value="120" />
+			<entry class="" argb="255,202,0,255" value="121" />
+			<entry class="" argb="255,200,0,255" value="122" />
+			<entry class="" argb="255,198,0,255" value="123" />
+			<entry class="" argb="255,196,0,255" value="124" />
+			<entry class="" argb="255,194,0,255" value="125" />
+			<entry class="" argb="255,192,0,255" value="126" />
+			<entry class="" argb="255,190,0,255" value="127" />
+			<entry class="" argb="255,188,0,255" value="128" />
+			<entry class="" argb="255,186,0,255" value="129" />
+			<entry class="" argb="255,0,140,255" value="130" />
+			<entry class="" argb="255,0,146,255" value="131" />
+			<entry class="" argb="255,0,152,255" value="132" />
+			<entry class="" argb="255,0,157,255" value="133" />
+			<entry class="" argb="255,0,163,255" value="134" />
+			<entry class="" argb="255,0,169,255" value="135" />
+			<entry class="" argb="255,0,174,255" value="136" />
+			<entry class="" argb="255,0,180,255" value="137" />
+			<entry class="" argb="255,0,186,255" value="138" />
+			<entry class="" argb="255,0,192,255" value="139" />
+			<entry class="" argb="255,0,197,255" value="140" />
+			<entry class="" argb="255,0,203,255" value="141" />
+			<entry class="" argb="255,0,209,255" value="142" />
+			<entry class="" argb="255,0,214,255" value="143" />
+			<entry class="" argb="255,0,220,255" value="144" />
+			<entry class="" argb="255,0,226,255" value="145" />
+			<entry class="" argb="255,0,232,255" value="146" />
+			<entry class="" argb="255,0,237,255" value="147" />
+			<entry class="" argb="255,0,243,255" value="148" />
+			<entry class="" argb="255,0,249,255" value="149" />
+			<entry class="" argb="255,0,255,255" value="150" />
+			<entry class="" argb="255,0,255,249" value="151" />
+			<entry class="" argb="255,0,255,243" value="152" />
+			<entry class="" argb="255,0,255,237" value="153" />
+			<entry class="" argb="255,0,255,232" value="154" />
+			<entry class="" argb="255,0,255,226" value="155" />
+			<entry class="" argb="255,0,255,220" value="156" />
+			<entry class="" argb="255,0,255,214" value="157" />
+			<entry class="" argb="255,0,255,209" value="158" />
+			<entry class="" argb="255,0,255,203" value="159" />
+			<entry class="" argb="255,0,255,197" value="160" />
+			<entry class="" argb="255,0,255,192" value="161" />
+			<entry class="" argb="255,0,255,186" value="162" />
+			<entry class="" argb="255,0,255,180" value="163" />
+			<entry class="" argb="255,0,255,174" value="164" />
+			<entry class="" argb="255,0,255,169" value="165" />
+			<entry class="" argb="255,0,255,163" value="166" />
+			<entry class="" argb="255,0,255,157" value="167" />
+			<entry class="" argb="255,0,255,152" value="168" />
+			<entry class="" argb="255,0,255,146" value="169" />
+			<entry class="" argb="255,0,255,140" value="170" />
+			<entry class="" argb="255,0,255,134" value="171" />
+			<entry class="" argb="255,0,255,129" value="172" />
+			<entry class="" argb="255,0,255,123" value="173" />
+			<entry class="" argb="255,0,255,117" value="174" />
+			<entry class="" argb="255,0,255,112" value="175" />
+			<entry class="" argb="255,0,255,106" value="176" />
+			<entry class="" argb="255,0,255,100" value="177" />
+			<entry class="" argb="255,0,255,94" value="178" />
+			<entry class="" argb="255,0,255,89" value="179" />
+			<entry class="" argb="255,0,255,83" value="180" />
+			<entry class="" argb="255,0,255,77" value="181" />
+			<entry class="" argb="255,0,255,71" value="182" />
+			<entry class="" argb="255,0,255,66" value="183" />
+			<entry class="" argb="255,0,255,60" value="184" />
+			<entry class="" argb="255,0,255,54" value="185" />
+			<entry class="" argb="255,0,255,49" value="186" />
+			<entry class="" argb="255,0,255,43" value="187" />
+			<entry class="" argb="255,0,255,37" value="188" />
+			<entry class="" argb="255,0,255,31" value="189" />
+			<entry class="" argb="255,0,255,26" value="190" />
+			<entry class="" argb="255,0,255,20" value="191" />
+			<entry class="" argb="255,0,255,14" value="192" />
+			<entry class="" argb="255,0,255,9" value="193" />
+			<entry class="" argb="255,0,255,3" value="194" />
+			<entry class="" argb="255,2,255,0" value="195" />
+			<entry class="" argb="255,8,255,0" value="196" />
+			<entry class="" argb="255,13,255,0" value="197" />
+			<entry class="" argb="255,19,255,0" value="198" />
+			<entry class="" argb="255,25,255,0" value="199" />
+			<entry class="" argb="255,30,255,0" value="200" />
+			<entry class="" argb="255,36,255,0" value="201" />
+			<entry class="" argb="255,42,255,0" value="202" />
+			<entry class="" argb="255,48,255,0" value="203" />
+			<entry class="" argb="255,53,255,0" value="204" />
+			<entry class="" argb="255,59,255,0" value="205" />
+			<entry class="" argb="255,65,255,0" value="206" />
+			<entry class="" argb="255,71,255,0" value="207" />
+			<entry class="" argb="255,76,255,0" value="208" />
+			<entry class="" argb="255,82,255,0" value="209" />
+			<entry class="" argb="255,88,255,0" value="210" />
+			<entry class="" argb="255,93,255,0" value="211" />
+			<entry class="" argb="255,99,255,0" value="212" />
+			<entry class="" argb="255,105,255,0" value="213" />
+			<entry class="" argb="255,111,255,0" value="214" />
+			<entry class="" argb="255,116,255,0" value="215" />
+			<entry class="" argb="255,122,255,0" value="216" />
+			<entry class="" argb="255,128,255,0" value="217" />
+			<entry class="" argb="255,133,255,0" value="218" />
+			<entry class="" argb="255,139,255,0" value="219" />
+			<entry class="" argb="255,145,255,0" value="220" />
+			<entry class="" argb="255,151,255,0" value="221" />
+			<entry class="" argb="255,156,255,0" value="222" />
+			<entry class="" argb="255,162,255,0" value="223" />
+			<entry class="" argb="255,168,255,0" value="224" />
+			<entry class="" argb="255,173,255,0" value="225" />
+			<entry class="" argb="255,179,255,0" value="226" />
+			<entry class="" argb="255,185,255,0" value="227" />
+			<entry class="" argb="255,191,255,0" value="228" />
+			<entry class="" argb="255,196,255,0" value="229" />
+			<entry class="" argb="255,202,255,0" value="230" />
+			<entry class="" argb="255,208,255,0" value="231" />
+			<entry class="" argb="255,214,255,0" value="232" />
+			<entry class="" argb="255,219,255,0" value="233" />
+			<entry class="" argb="255,225,255,0" value="234" />
+			<entry class="" argb="255,231,255,0" value="235" />
+			<entry class="" argb="255,236,255,0" value="236" />
+			<entry class="" argb="255,242,255,0" value="237" />
+			<entry class="" argb="255,248,255,0" value="238" />
+			<entry class="" argb="255,254,255,0" value="239" />
+			<entry class="" argb="255,255,250,0" value="240" />
+			<entry class="" argb="255,255,244,0" value="241" />
+			<entry class="" argb="255,255,238,0" value="242" />
+			<entry class="" argb="255,255,233,0" value="243" />
+			<entry class="" argb="255,255,227,0" value="244" />
+			<entry class="" argb="255,255,221,0" value="245" />
+			<entry class="" argb="255,255,215,0" value="246" />
+			<entry class="" argb="255,255,210,0" value="247" />
+			<entry class="" argb="255,255,204,0" value="248" />
+			<entry class="" argb="255,255,198,0" value="249" />
+			<entry class="" argb="255,255,193,0" value="250" />
+			<entry class="" argb="255,255,187,0" value="251" />
+			<entry class="" argb="255,255,181,0" value="252" />
+			<entry class="" argb="255,255,175,0" value="253" />
+			<entry class="" argb="255,255,170,0" value="254" />
+			<entry class="" argb="255,255,170,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="plasma" interpolate="false">
+		<table>
+			<entry class="" argb="255,2,19,7" value="0" />
+			<entry class="" argb="255,2,19,7" value="1" />
+			<entry class="" argb="255,3,20,11" value="2" />
+			<entry class="" argb="255,4,22,15" value="3" />
+			<entry class="" argb="255,5,25,19" value="4" />
+			<entry class="" argb="255,6,29,22" value="5" />
+			<entry class="" argb="255,7,33,26" value="6" />
+			<entry class="" argb="255,8,38,30" value="7" />
+			<entry class="" argb="255,9,44,34" value="8" />
+			<entry class="" argb="255,13,51,39" value="9" />
+			<entry class="" argb="255,11,58,43" value="10" />
+			<entry class="" argb="255,13,65,47" value="11" />
+			<entry class="" argb="255,14,73,51" value="12" />
+			<entry class="" argb="255,15,81,55" value="13" />
+			<entry class="" argb="255,16,89,59" value="14" />
+			<entry class="" argb="255,17,98,63" value="15" />
+			<entry class="" argb="255,18,106,67" value="16" />
+			<entry class="" argb="255,19,115,71" value="17" />
+			<entry class="" argb="255,21,124,75" value="18" />
+			<entry class="" argb="255,22,132,78" value="19" />
+			<entry class="" argb="255,23,140,82" value="20" />
+			<entry class="" argb="255,24,148,86" value="21" />
+			<entry class="" argb="255,25,155,90" value="22" />
+			<entry class="" argb="255,26,162,93" value="23" />
+			<entry class="" argb="255,27,169,97" value="24" />
+			<entry class="" argb="255,28,175,100" value="25" />
+			<entry class="" argb="255,30,180,103" value="26" />
+			<entry class="" argb="255,31,184,107" value="27" />
+			<entry class="" argb="255,32,188,110" value="28" />
+			<entry class="" argb="255,33,191,113" value="29" />
+			<entry class="" argb="255,34,193,116" value="30" />
+			<entry class="" argb="255,35,194,119" value="31" />
+			<entry class="" argb="255,36,195,122" value="32" />
+			<entry class="" argb="255,37,194,125" value="33" />
+			<entry class="" argb="255,38,193,128" value="34" />
+			<entry class="" argb="255,39,191,130" value="35" />
+			<entry class="" argb="255,39,188,133" value="36" />
+			<entry class="" argb="255,40,184,136" value="37" />
+			<entry class="" argb="255,41,180,139" value="38" />
+			<entry class="" argb="255,42,175,141" value="39" />
+			<entry class="" argb="255,43,169,144" value="40" />
+			<entry class="" argb="255,44,162,147" value="41" />
+			<entry class="" argb="255,45,155,150" value="42" />
+			<entry class="" argb="255,46,148,153" value="43" />
+			<entry class="" argb="255,46,140,156" value="44" />
+			<entry class="" argb="255,47,132,159" value="45" />
+			<entry class="" argb="255,48,124,162" value="46" />
+			<entry class="" argb="255,49,115,165" value="47" />
+			<entry class="" argb="255,50,107,169" value="48" />
+			<entry class="" argb="255,51,98,172" value="49" />
+			<entry class="" argb="255,52,89,176" value="50" />
+			<entry class="" argb="255,53,81,180" value="51" />
+			<entry class="" argb="255,54,73,184" value="52" />
+			<entry class="" argb="255,55,65,188" value="53" />
+			<entry class="" argb="255,56,58,192" value="54" />
+			<entry class="" argb="255,57,51,196" value="55" />
+			<entry class="" argb="255,58,44,201" value="56" />
+			<entry class="" argb="255,59,38,205" value="57" />
+			<entry class="" argb="255,60,33,210" value="58" />
+			<entry class="" argb="255,61,29,215" value="59" />
+			<entry class="" argb="255,62,25,220" value="60" />
+			<entry class="" argb="255,63,22,225" value="61" />
+			<entry class="" argb="255,65,20,230" value="62" />
+			<entry class="" argb="255,66,19,235" value="63" />
+			<entry class="" argb="255,67,19,241" value="64" />
+			<entry class="" argb="255,68,19,246" value="65" />
+			<entry class="" argb="255,70,20,251" value="66" />
+			<entry class="" argb="255,71,22,253" value="67" />
+			<entry class="" argb="255,72,25,248" value="68" />
+			<entry class="" argb="255,74,29,243" value="69" />
+			<entry class="" argb="255,75,33,237" value="70" />
+			<entry class="" argb="255,77,38,232" value="71" />
+			<entry class="" argb="255,78,44,227" value="72" />
+			<entry class="" argb="255,79,51,222" value="73" />
+			<entry class="" argb="255,81,58,217" value="74" />
+			<entry class="" argb="255,82,65,212" value="75" />
+			<entry class="" argb="255,84,73,207" value="76" />
+			<entry class="" argb="255,85,81,202" value="77" />
+			<entry class="" argb="255,86,89,198" value="78" />
+			<entry class="" argb="255,88,98,194" value="79" />
+			<entry class="" argb="255,89,107,190" value="80" />
+			<entry class="" argb="255,90,115,186" value="81" />
+			<entry class="" argb="255,92,124,182" value="82" />
+			<entry class="" argb="255,93,132,179" value="83" />
+			<entry class="" argb="255,94,140,176" value="84" />
+			<entry class="" argb="255,95,148,172" value="85" />
+			<entry class="" argb="255,97,155,170" value="86" />
+			<entry class="" argb="255,98,162,167" value="87" />
+			<entry class="" argb="255,99,169,165" value="88" />
+			<entry class="" argb="255,100,175,162" value="89" />
+			<entry class="" argb="255,101,180,160" value="90" />
+			<entry class="" argb="255,102,184,158" value="91" />
+			<entry class="" argb="255,103,188,157" value="92" />
+			<entry class="" argb="255,103,191,155" value="93" />
+			<entry class="" argb="255,104,193,154" value="94" />
+			<entry class="" argb="255,105,194,152" value="95" />
+			<entry class="" argb="255,106,195,151" value="96" />
+			<entry class="" argb="255,107,194,150" value="97" />
+			<entry class="" argb="255,107,193,148" value="98" />
+			<entry class="" argb="255,108,191,147" value="99" />
+			<entry class="" argb="255,108,188,146" value="100" />
+			<entry class="" argb="255,109,184,144" value="101" />
+			<entry class="" argb="255,110,180,143" value="102" />
+			<entry class="" argb="255,110,175,141" value="103" />
+			<entry class="" argb="255,111,169,140" value="104" />
+			<entry class="" argb="255,111,162,138" value="105" />
+			<entry class="" argb="255,112,155,136" value="106" />
+			<entry class="" argb="255,113,148,134" value="107" />
+			<entry class="" argb="255,113,140,132" value="108" />
+			<entry class="" argb="255,114,132,129" value="109" />
+			<entry class="" argb="255,114,124,126" value="110" />
+			<entry class="" argb="255,115,115,123" value="111" />
+			<entry class="" argb="255,116,106,120" value="112" />
+			<entry class="" argb="255,117,98,116" value="113" />
+			<entry class="" argb="255,117,89,113" value="114" />
+			<entry class="" argb="255,118,81,108" value="115" />
+			<entry class="" argb="255,119,73,104" value="116" />
+			<entry class="" argb="255,120,65,99" value="117" />
+			<entry class="" argb="255,121,58,94" value="118" />
+			<entry class="" argb="255,122,51,89" value="119" />
+			<entry class="" argb="255,123,44,83" value="120" />
+			<entry class="" argb="255,124,38,78" value="121" />
+			<entry class="" argb="255,125,33,72" value="122" />
+			<entry class="" argb="255,127,29,65" value="123" />
+			<entry class="" argb="255,128,25,59" value="124" />
+			<entry class="" argb="255,129,22,53" value="125" />
+			<entry class="" argb="255,131,20,46" value="126" />
+			<entry class="" argb="255,132,19,39" value="127" />
+			<entry class="" argb="255,134,19,32" value="128" />
+			<entry class="" argb="255,135,19,25" value="129" />
+			<entry class="" argb="255,137,20,18" value="130" />
+			<entry class="" argb="255,138,22,11" value="131" />
+			<entry class="" argb="255,140,25,5" value="132" />
+			<entry class="" argb="255,142,29,253" value="133" />
+			<entry class="" argb="255,143,33,246" value="134" />
+			<entry class="" argb="255,145,38,239" value="135" />
+			<entry class="" argb="255,147,44,233" value="136" />
+			<entry class="" argb="255,149,51,227" value="137" />
+			<entry class="" argb="255,150,58,221" value="138" />
+			<entry class="" argb="255,152,65,215" value="139" />
+			<entry class="" argb="255,154,73,210" value="140" />
+			<entry class="" argb="255,155,81,205" value="141" />
+			<entry class="" argb="255,157,89,200" value="142" />
+			<entry class="" argb="255,158,98,195" value="143" />
+			<entry class="" argb="255,160,107,191" value="144" />
+			<entry class="" argb="255,161,115,188" value="145" />
+			<entry class="" argb="255,163,124,184" value="146" />
+			<entry class="" argb="255,164,132,181" value="147" />
+			<entry class="" argb="255,166,140,178" value="148" />
+			<entry class="" argb="255,167,148,176" value="149" />
+			<entry class="" argb="255,168,155,174" value="150" />
+			<entry class="" argb="255,169,162,172" value="151" />
+			<entry class="" argb="255,170,169,171" value="152" />
+			<entry class="" argb="255,171,175,170" value="153" />
+			<entry class="" argb="255,172,180,169" value="154" />
+			<entry class="" argb="255,173,184,169" value="155" />
+			<entry class="" argb="255,174,188,168" value="156" />
+			<entry class="" argb="255,174,191,168" value="157" />
+			<entry class="" argb="255,175,193,168" value="158" />
+			<entry class="" argb="255,175,194,168" value="159" />
+			<entry class="" argb="255,176,195,169" value="160" />
+			<entry class="" argb="255,176,194,169" value="161" />
+			<entry class="" argb="255,177,193,169" value="162" />
+			<entry class="" argb="255,177,191,169" value="163" />
+			<entry class="" argb="255,178,188,170" value="164" />
+			<entry class="" argb="255,178,184,170" value="165" />
+			<entry class="" argb="255,178,180,170" value="166" />
+			<entry class="" argb="255,178,175,169" value="167" />
+			<entry class="" argb="255,179,169,169" value="168" />
+			<entry class="" argb="255,179,162,168" value="169" />
+			<entry class="" argb="255,179,155,167" value="170" />
+			<entry class="" argb="255,180,148,166" value="171" />
+			<entry class="" argb="255,180,140,164" value="172" />
+			<entry class="" argb="255,180,132,162" value="173" />
+			<entry class="" argb="255,181,124,160" value="174" />
+			<entry class="" argb="255,181,115,157" value="175" />
+			<entry class="" argb="255,182,106,154" value="176" />
+			<entry class="" argb="255,182,98,150" value="177" />
+			<entry class="" argb="255,183,89,146" value="178" />
+			<entry class="" argb="255,184,81,141" value="179" />
+			<entry class="" argb="255,184,73,136" value="180" />
+			<entry class="" argb="255,185,65,131" value="181" />
+			<entry class="" argb="255,186,58,125" value="182" />
+			<entry class="" argb="255,187,51,119" value="183" />
+			<entry class="" argb="255,188,44,112" value="184" />
+			<entry class="" argb="255,190,38,106" value="185" />
+			<entry class="" argb="255,191,33,98" value="186" />
+			<entry class="" argb="255,192,29,91" value="187" />
+			<entry class="" argb="255,194,25,83" value="188" />
+			<entry class="" argb="255,195,22,75" value="189" />
+			<entry class="" argb="255,197,20,67" value="190" />
+			<entry class="" argb="255,198,19,58" value="191" />
+			<entry class="" argb="255,200,19,50" value="192" />
+			<entry class="" argb="255,202,19,41" value="193" />
+			<entry class="" argb="255,204,20,33" value="194" />
+			<entry class="" argb="255,206,22,24" value="195" />
+			<entry class="" argb="255,208,25,16" value="196" />
+			<entry class="" argb="255,210,29,8" value="197" />
+			<entry class="" argb="255,212,33,255" value="198" />
+			<entry class="" argb="255,214,38,247" value="199" />
+			<entry class="" argb="255,216,44,239" value="200" />
+			<entry class="" argb="255,218,51,232" value="201" />
+			<entry class="" argb="255,220,58,225" value="202" />
+			<entry class="" argb="255,222,65,219" value="203" />
+			<entry class="" argb="255,224,73,213" value="204" />
+			<entry class="" argb="255,225,81,207" value="205" />
+			<entry class="" argb="255,227,89,202" value="206" />
+			<entry class="" argb="255,229,98,197" value="207" />
+			<entry class="" argb="255,231,107,193" value="208" />
+			<entry class="" argb="255,232,115,189" value="209" />
+			<entry class="" argb="255,234,124,186" value="210" />
+			<entry class="" argb="255,236,132,183" value="211" />
+			<entry class="" argb="255,237,140,181" value="212" />
+			<entry class="" argb="255,238,148,179" value="213" />
+			<entry class="" argb="255,239,155,178" value="214" />
+			<entry class="" argb="255,241,162,177" value="215" />
+			<entry class="" argb="255,242,169,177" value="216" />
+			<entry class="" argb="255,242,175,177" value="217" />
+			<entry class="" argb="255,243,180,178" value="218" />
+			<entry class="" argb="255,244,184,179" value="219" />
+			<entry class="" argb="255,245,188,180" value="220" />
+			<entry class="" argb="255,245,191,181" value="221" />
+			<entry class="" argb="255,246,193,183" value="222" />
+			<entry class="" argb="255,246,194,184" value="223" />
+			<entry class="" argb="255,246,195,186" value="224" />
+			<entry class="" argb="255,246,194,188" value="225" />
+			<entry class="" argb="255,246,193,190" value="226" />
+			<entry class="" argb="255,247,191,192" value="227" />
+			<entry class="" argb="255,247,188,193" value="228" />
+			<entry class="" argb="255,247,184,195" value="229" />
+			<entry class="" argb="255,247,180,196" value="230" />
+			<entry class="" argb="255,247,175,197" value="231" />
+			<entry class="" argb="255,247,169,198" value="232" />
+			<entry class="" argb="255,247,162,198" value="233" />
+			<entry class="" argb="255,247,155,198" value="234" />
+			<entry class="" argb="255,247,148,198" value="235" />
+			<entry class="" argb="255,247,140,197" value="236" />
+			<entry class="" argb="255,247,132,195" value="237" />
+			<entry class="" argb="255,247,124,193" value="238" />
+			<entry class="" argb="255,247,115,191" value="239" />
+			<entry class="" argb="255,248,106,188" value="240" />
+			<entry class="" argb="255,248,98,184" value="241" />
+			<entry class="" argb="255,248,89,180" value="242" />
+			<entry class="" argb="255,249,81,175" value="243" />
+			<entry class="" argb="255,250,73,169" value="244" />
+			<entry class="" argb="255,251,65,163" value="245" />
+			<entry class="" argb="255,251,58,156" value="246" />
+			<entry class="" argb="255,252,51,149" value="247" />
+			<entry class="" argb="255,254,44,142" value="248" />
+			<entry class="" argb="255,255,38,133" value="249" />
+			<entry class="" argb="255,254,33,125" value="250" />
+			<entry class="" argb="255,252,29,116" value="251" />
+			<entry class="" argb="255,251,25,107" value="252" />
+			<entry class="" argb="255,249,22,97" value="253" />
+			<entry class="" argb="255,247,20,87" value="254" />
+			<entry class="" argb="255,247,20,87" value="255" />
+		</table>
+	</palette>
+
+	<palette name="prism" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,3,0,0" value="1" />
+			<entry class="" argb="255,7,0,0" value="2" />
+			<entry class="" argb="255,11,0,0" value="3" />
+			<entry class="" argb="255,15,0,0" value="4" />
+			<entry class="" argb="255,19,0,0" value="5" />
+			<entry class="" argb="255,22,0,0" value="6" />
+			<entry class="" argb="255,26,0,0" value="7" />
+			<entry class="" argb="255,30,0,0" value="8" />
+			<entry class="" argb="255,34,0,0" value="9" />
+			<entry class="" argb="255,38,0,0" value="10" />
+			<entry class="" argb="255,41,0,0" value="11" />
+			<entry class="" argb="255,45,0,0" value="12" />
+			<entry class="" argb="255,49,0,0" value="13" />
+			<entry class="" argb="255,53,0,0" value="14" />
+			<entry class="" argb="255,57,0,0" value="15" />
+			<entry class="" argb="255,60,0,0" value="16" />
+			<entry class="" argb="255,64,0,0" value="17" />
+			<entry class="" argb="255,68,0,0" value="18" />
+			<entry class="" argb="255,72,0,0" value="19" />
+			<entry class="" argb="255,76,0,0" value="20" />
+			<entry class="" argb="255,79,0,0" value="21" />
+			<entry class="" argb="255,83,0,0" value="22" />
+			<entry class="" argb="255,87,0,0" value="23" />
+			<entry class="" argb="255,91,0,0" value="24" />
+			<entry class="" argb="255,95,0,0" value="25" />
+			<entry class="" argb="255,98,0,0" value="26" />
+			<entry class="" argb="255,102,0,0" value="27" />
+			<entry class="" argb="255,106,0,0" value="28" />
+			<entry class="" argb="255,110,0,0" value="29" />
+			<entry class="" argb="255,114,0,0" value="30" />
+			<entry class="" argb="255,117,0,0" value="31" />
+			<entry class="" argb="255,121,0,0" value="32" />
+			<entry class="" argb="255,125,0,0" value="33" />
+			<entry class="" argb="255,129,0,0" value="34" />
+			<entry class="" argb="255,133,0,0" value="35" />
+			<entry class="" argb="255,137,0,0" value="36" />
+			<entry class="" argb="255,140,0,0" value="37" />
+			<entry class="" argb="255,144,0,0" value="38" />
+			<entry class="" argb="255,148,0,0" value="39" />
+			<entry class="" argb="255,152,0,0" value="40" />
+			<entry class="" argb="255,156,0,0" value="41" />
+			<entry class="" argb="255,159,0,0" value="42" />
+			<entry class="" argb="255,163,0,0" value="43" />
+			<entry class="" argb="255,167,0,0" value="44" />
+			<entry class="" argb="255,171,0,0" value="45" />
+			<entry class="" argb="255,175,0,0" value="46" />
+			<entry class="" argb="255,178,0,0" value="47" />
+			<entry class="" argb="255,182,0,0" value="48" />
+			<entry class="" argb="255,186,0,0" value="49" />
+			<entry class="" argb="255,190,0,0" value="50" />
+			<entry class="" argb="255,194,0,0" value="51" />
+			<entry class="" argb="255,197,0,0" value="52" />
+			<entry class="" argb="255,201,0,0" value="53" />
+			<entry class="" argb="255,205,0,0" value="54" />
+			<entry class="" argb="255,209,0,0" value="55" />
+			<entry class="" argb="255,213,0,0" value="56" />
+			<entry class="" argb="255,216,0,0" value="57" />
+			<entry class="" argb="255,220,0,0" value="58" />
+			<entry class="" argb="255,224,0,0" value="59" />
+			<entry class="" argb="255,228,0,0" value="60" />
+			<entry class="" argb="255,232,0,0" value="61" />
+			<entry class="" argb="255,235,0,0" value="62" />
+			<entry class="" argb="255,239,0,0" value="63" />
+			<entry class="" argb="255,243,0,0" value="64" />
+			<entry class="" argb="255,247,3,0" value="65" />
+			<entry class="" argb="255,251,7,0" value="66" />
+			<entry class="" argb="255,255,11,0" value="67" />
+			<entry class="" argb="255,251,15,0" value="68" />
+			<entry class="" argb="255,247,19,0" value="69" />
+			<entry class="" argb="255,243,23,0" value="70" />
+			<entry class="" argb="255,239,27,0" value="71" />
+			<entry class="" argb="255,235,31,0" value="72" />
+			<entry class="" argb="255,230,35,0" value="73" />
+			<entry class="" argb="255,226,39,0" value="74" />
+			<entry class="" argb="255,222,43,0" value="75" />
+			<entry class="" argb="255,218,47,0" value="76" />
+			<entry class="" argb="255,214,51,0" value="77" />
+			<entry class="" argb="255,210,55,0" value="78" />
+			<entry class="" argb="255,205,59,0" value="79" />
+			<entry class="" argb="255,201,63,0" value="80" />
+			<entry class="" argb="255,197,67,0" value="81" />
+			<entry class="" argb="255,193,71,0" value="82" />
+			<entry class="" argb="255,189,75,0" value="83" />
+			<entry class="" argb="255,184,79,0" value="84" />
+			<entry class="" argb="255,180,83,0" value="85" />
+			<entry class="" argb="255,176,87,0" value="86" />
+			<entry class="" argb="255,172,91,0" value="87" />
+			<entry class="" argb="255,168,95,0" value="88" />
+			<entry class="" argb="255,164,99,0" value="89" />
+			<entry class="" argb="255,159,103,0" value="90" />
+			<entry class="" argb="255,155,107,0" value="91" />
+			<entry class="" argb="255,151,111,0" value="92" />
+			<entry class="" argb="255,147,115,0" value="93" />
+			<entry class="" argb="255,143,119,0" value="94" />
+			<entry class="" argb="255,138,123,0" value="95" />
+			<entry class="" argb="255,134,127,0" value="96" />
+			<entry class="" argb="255,130,131,0" value="97" />
+			<entry class="" argb="255,126,135,0" value="98" />
+			<entry class="" argb="255,122,139,0" value="99" />
+			<entry class="" argb="255,118,143,0" value="100" />
+			<entry class="" argb="255,113,147,0" value="101" />
+			<entry class="" argb="255,109,151,0" value="102" />
+			<entry class="" argb="255,105,155,0" value="103" />
+			<entry class="" argb="255,101,159,0" value="104" />
+			<entry class="" argb="255,97,163,0" value="105" />
+			<entry class="" argb="255,92,167,0" value="106" />
+			<entry class="" argb="255,88,171,0" value="107" />
+			<entry class="" argb="255,84,175,0" value="108" />
+			<entry class="" argb="255,80,179,0" value="109" />
+			<entry class="" argb="255,76,183,0" value="110" />
+			<entry class="" argb="255,72,187,0" value="111" />
+			<entry class="" argb="255,67,191,0" value="112" />
+			<entry class="" argb="255,63,195,0" value="113" />
+			<entry class="" argb="255,59,199,0" value="114" />
+			<entry class="" argb="255,55,203,0" value="115" />
+			<entry class="" argb="255,51,207,0" value="116" />
+			<entry class="" argb="255,46,211,0" value="117" />
+			<entry class="" argb="255,42,215,0" value="118" />
+			<entry class="" argb="255,38,219,0" value="119" />
+			<entry class="" argb="255,34,223,0" value="120" />
+			<entry class="" argb="255,30,227,0" value="121" />
+			<entry class="" argb="255,26,231,0" value="122" />
+			<entry class="" argb="255,21,235,0" value="123" />
+			<entry class="" argb="255,17,239,0" value="124" />
+			<entry class="" argb="255,13,243,0" value="125" />
+			<entry class="" argb="255,9,247,0" value="126" />
+			<entry class="" argb="255,5,251,3" value="127" />
+			<entry class="" argb="255,0,255,7" value="128" />
+			<entry class="" argb="255,0,251,11" value="129" />
+			<entry class="" argb="255,0,247,15" value="130" />
+			<entry class="" argb="255,0,243,19" value="131" />
+			<entry class="" argb="255,0,239,23" value="132" />
+			<entry class="" argb="255,0,235,27" value="133" />
+			<entry class="" argb="255,0,231,30" value="134" />
+			<entry class="" argb="255,0,227,34" value="135" />
+			<entry class="" argb="255,0,223,38" value="136" />
+			<entry class="" argb="255,0,219,42" value="137" />
+			<entry class="" argb="255,0,215,46" value="138" />
+			<entry class="" argb="255,0,211,50" value="139" />
+			<entry class="" argb="255,0,207,54" value="140" />
+			<entry class="" argb="255,0,203,57" value="141" />
+			<entry class="" argb="255,0,199,61" value="142" />
+			<entry class="" argb="255,0,195,65" value="143" />
+			<entry class="" argb="255,0,191,69" value="144" />
+			<entry class="" argb="255,0,187,73" value="145" />
+			<entry class="" argb="255,0,183,77" value="146" />
+			<entry class="" argb="255,0,179,81" value="147" />
+			<entry class="" argb="255,0,175,85" value="148" />
+			<entry class="" argb="255,0,170,88" value="149" />
+			<entry class="" argb="255,0,166,92" value="150" />
+			<entry class="" argb="255,0,162,96" value="151" />
+			<entry class="" argb="255,0,158,100" value="152" />
+			<entry class="" argb="255,0,154,104" value="153" />
+			<entry class="" argb="255,0,150,108" value="154" />
+			<entry class="" argb="255,0,146,112" value="155" />
+			<entry class="" argb="255,0,142,115" value="156" />
+			<entry class="" argb="255,0,138,119" value="157" />
+			<entry class="" argb="255,0,134,123" value="158" />
+			<entry class="" argb="255,0,130,127" value="159" />
+			<entry class="" argb="255,0,126,131" value="160" />
+			<entry class="" argb="255,0,122,135" value="161" />
+			<entry class="" argb="255,0,118,139" value="162" />
+			<entry class="" argb="255,0,114,142" value="163" />
+			<entry class="" argb="255,0,110,146" value="164" />
+			<entry class="" argb="255,0,106,150" value="165" />
+			<entry class="" argb="255,0,102,154" value="166" />
+			<entry class="" argb="255,0,98,158" value="167" />
+			<entry class="" argb="255,0,94,162" value="168" />
+			<entry class="" argb="255,0,90,166" value="169" />
+			<entry class="" argb="255,0,85,170" value="170" />
+			<entry class="" argb="255,0,81,173" value="171" />
+			<entry class="" argb="255,0,77,177" value="172" />
+			<entry class="" argb="255,0,73,181" value="173" />
+			<entry class="" argb="255,0,69,185" value="174" />
+			<entry class="" argb="255,0,65,189" value="175" />
+			<entry class="" argb="255,0,61,193" value="176" />
+			<entry class="" argb="255,0,57,197" value="177" />
+			<entry class="" argb="255,0,53,200" value="178" />
+			<entry class="" argb="255,0,49,204" value="179" />
+			<entry class="" argb="255,0,45,208" value="180" />
+			<entry class="" argb="255,0,41,212" value="181" />
+			<entry class="" argb="255,0,37,216" value="182" />
+			<entry class="" argb="255,0,33,220" value="183" />
+			<entry class="" argb="255,0,29,224" value="184" />
+			<entry class="" argb="255,0,25,227" value="185" />
+			<entry class="" argb="255,0,21,231" value="186" />
+			<entry class="" argb="255,0,17,235" value="187" />
+			<entry class="" argb="255,0,13,239" value="188" />
+			<entry class="" argb="255,0,9,243" value="189" />
+			<entry class="" argb="255,0,5,247" value="190" />
+			<entry class="" argb="255,0,0,251" value="191" />
+			<entry class="" argb="255,0,0,255" value="192" />
+			<entry class="" argb="255,0,0,251" value="193" />
+			<entry class="" argb="255,0,0,247" value="194" />
+			<entry class="" argb="255,0,0,243" value="195" />
+			<entry class="" argb="255,0,0,239" value="196" />
+			<entry class="" argb="255,0,0,235" value="197" />
+			<entry class="" argb="255,0,0,231" value="198" />
+			<entry class="" argb="255,0,0,227" value="199" />
+			<entry class="" argb="255,0,0,223" value="200" />
+			<entry class="" argb="255,0,0,219" value="201" />
+			<entry class="" argb="255,0,0,215" value="202" />
+			<entry class="" argb="255,0,0,211" value="203" />
+			<entry class="" argb="255,0,0,207" value="204" />
+			<entry class="" argb="255,0,0,203" value="205" />
+			<entry class="" argb="255,0,0,199" value="206" />
+			<entry class="" argb="255,0,0,195" value="207" />
+			<entry class="" argb="255,0,0,191" value="208" />
+			<entry class="" argb="255,0,0,187" value="209" />
+			<entry class="" argb="255,0,0,183" value="210" />
+			<entry class="" argb="255,0,0,179" value="211" />
+			<entry class="" argb="255,0,0,175" value="212" />
+			<entry class="" argb="255,0,0,170" value="213" />
+			<entry class="" argb="255,0,0,166" value="214" />
+			<entry class="" argb="255,0,0,162" value="215" />
+			<entry class="" argb="255,0,0,158" value="216" />
+			<entry class="" argb="255,0,0,154" value="217" />
+			<entry class="" argb="255,0,0,150" value="218" />
+			<entry class="" argb="255,0,0,146" value="219" />
+			<entry class="" argb="255,0,0,142" value="220" />
+			<entry class="" argb="255,0,0,138" value="221" />
+			<entry class="" argb="255,0,0,134" value="222" />
+			<entry class="" argb="255,0,0,130" value="223" />
+			<entry class="" argb="255,0,0,126" value="224" />
+			<entry class="" argb="255,0,0,122" value="225" />
+			<entry class="" argb="255,0,0,118" value="226" />
+			<entry class="" argb="255,0,0,114" value="227" />
+			<entry class="" argb="255,0,0,110" value="228" />
+			<entry class="" argb="255,0,0,106" value="229" />
+			<entry class="" argb="255,0,0,102" value="230" />
+			<entry class="" argb="255,0,0,98" value="231" />
+			<entry class="" argb="255,0,0,94" value="232" />
+			<entry class="" argb="255,0,0,90" value="233" />
+			<entry class="" argb="255,0,0,85" value="234" />
+			<entry class="" argb="255,0,0,81" value="235" />
+			<entry class="" argb="255,0,0,77" value="236" />
+			<entry class="" argb="255,0,0,73" value="237" />
+			<entry class="" argb="255,0,0,69" value="238" />
+			<entry class="" argb="255,0,0,65" value="239" />
+			<entry class="" argb="255,0,0,61" value="240" />
+			<entry class="" argb="255,0,0,57" value="241" />
+			<entry class="" argb="255,0,0,53" value="242" />
+			<entry class="" argb="255,0,0,49" value="243" />
+			<entry class="" argb="255,0,0,45" value="244" />
+			<entry class="" argb="255,0,0,41" value="245" />
+			<entry class="" argb="255,0,0,37" value="246" />
+			<entry class="" argb="255,0,0,33" value="247" />
+			<entry class="" argb="255,0,0,29" value="248" />
+			<entry class="" argb="255,0,0,25" value="249" />
+			<entry class="" argb="255,0,0,21" value="250" />
+			<entry class="" argb="255,0,0,17" value="251" />
+			<entry class="" argb="255,0,0,13" value="252" />
+			<entry class="" argb="255,0,0,9" value="253" />
+			<entry class="" argb="255,0,0,5" value="254" />
+			<entry class="" argb="255,0,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="rainbow" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,4,0,3" value="1" />
+			<entry class="" argb="255,9,0,7" value="2" />
+			<entry class="" argb="255,13,0,10" value="3" />
+			<entry class="" argb="255,18,0,14" value="4" />
+			<entry class="" argb="255,22,0,19" value="5" />
+			<entry class="" argb="255,27,0,23" value="6" />
+			<entry class="" argb="255,31,0,28" value="7" />
+			<entry class="" argb="255,36,0,32" value="8" />
+			<entry class="" argb="255,40,0,38" value="9" />
+			<entry class="" argb="255,45,0,43" value="10" />
+			<entry class="" argb="255,50,0,48" value="11" />
+			<entry class="" argb="255,54,0,53" value="12" />
+			<entry class="" argb="255,58,0,59" value="13" />
+			<entry class="" argb="255,61,0,63" value="14" />
+			<entry class="" argb="255,64,0,68" value="15" />
+			<entry class="" argb="255,68,0,72" value="16" />
+			<entry class="" argb="255,69,0,77" value="17" />
+			<entry class="" argb="255,72,0,81" value="18" />
+			<entry class="" argb="255,74,0,86" value="19" />
+			<entry class="" argb="255,77,0,91" value="20" />
+			<entry class="" argb="255,79,0,95" value="21" />
+			<entry class="" argb="255,80,0,100" value="22" />
+			<entry class="" argb="255,82,0,104" value="23" />
+			<entry class="" argb="255,83,0,109" value="24" />
+			<entry class="" argb="255,85,0,113" value="25" />
+			<entry class="" argb="255,84,0,118" value="26" />
+			<entry class="" argb="255,86,0,122" value="27" />
+			<entry class="" argb="255,87,0,127" value="28" />
+			<entry class="" argb="255,88,0,132" value="29" />
+			<entry class="" argb="255,86,0,136" value="30" />
+			<entry class="" argb="255,87,0,141" value="31" />
+			<entry class="" argb="255,87,0,145" value="32" />
+			<entry class="" argb="255,87,0,150" value="33" />
+			<entry class="" argb="255,85,0,154" value="34" />
+			<entry class="" argb="255,84,0,159" value="35" />
+			<entry class="" argb="255,84,0,163" value="36" />
+			<entry class="" argb="255,84,0,168" value="37" />
+			<entry class="" argb="255,83,0,173" value="38" />
+			<entry class="" argb="255,79,0,177" value="39" />
+			<entry class="" argb="255,78,0,182" value="40" />
+			<entry class="" argb="255,77,0,186" value="41" />
+			<entry class="" argb="255,76,0,191" value="42" />
+			<entry class="" argb="255,71,0,195" value="43" />
+			<entry class="" argb="255,70,0,200" value="44" />
+			<entry class="" argb="255,68,0,204" value="45" />
+			<entry class="" argb="255,66,0,209" value="46" />
+			<entry class="" argb="255,60,0,214" value="47" />
+			<entry class="" argb="255,58,0,218" value="48" />
+			<entry class="" argb="255,55,0,223" value="49" />
+			<entry class="" argb="255,53,0,227" value="50" />
+			<entry class="" argb="255,46,0,232" value="51" />
+			<entry class="" argb="255,43,0,236" value="52" />
+			<entry class="" argb="255,40,0,241" value="53" />
+			<entry class="" argb="255,36,0,245" value="54" />
+			<entry class="" argb="255,33,0,250" value="55" />
+			<entry class="" argb="255,25,0,255" value="56" />
+			<entry class="" argb="255,21,0,255" value="57" />
+			<entry class="" argb="255,16,0,255" value="58" />
+			<entry class="" argb="255,12,0,255" value="59" />
+			<entry class="" argb="255,4,0,255" value="60" />
+			<entry class="" argb="255,0,0,255" value="61" />
+			<entry class="" argb="255,0,4,255" value="62" />
+			<entry class="" argb="255,0,8,255" value="63" />
+			<entry class="" argb="255,0,16,255" value="64" />
+			<entry class="" argb="255,0,21,255" value="65" />
+			<entry class="" argb="255,0,25,255" value="66" />
+			<entry class="" argb="255,0,29,255" value="67" />
+			<entry class="" argb="255,0,38,255" value="68" />
+			<entry class="" argb="255,0,42,255" value="69" />
+			<entry class="" argb="255,0,46,255" value="70" />
+			<entry class="" argb="255,0,51,255" value="71" />
+			<entry class="" argb="255,0,55,255" value="72" />
+			<entry class="" argb="255,0,63,255" value="73" />
+			<entry class="" argb="255,0,67,255" value="74" />
+			<entry class="" argb="255,0,72,255" value="75" />
+			<entry class="" argb="255,0,76,255" value="76" />
+			<entry class="" argb="255,0,84,255" value="77" />
+			<entry class="" argb="255,0,89,255" value="78" />
+			<entry class="" argb="255,0,93,255" value="79" />
+			<entry class="" argb="255,0,97,255" value="80" />
+			<entry class="" argb="255,0,106,255" value="81" />
+			<entry class="" argb="255,0,110,255" value="82" />
+			<entry class="" argb="255,0,114,255" value="83" />
+			<entry class="" argb="255,0,119,255" value="84" />
+			<entry class="" argb="255,0,127,255" value="85" />
+			<entry class="" argb="255,0,131,255" value="86" />
+			<entry class="" argb="255,0,135,255" value="87" />
+			<entry class="" argb="255,0,140,255" value="88" />
+			<entry class="" argb="255,0,144,255" value="89" />
+			<entry class="" argb="255,0,152,255" value="90" />
+			<entry class="" argb="255,0,157,255" value="91" />
+			<entry class="" argb="255,0,161,255" value="92" />
+			<entry class="" argb="255,0,165,255" value="93" />
+			<entry class="" argb="255,0,174,255" value="94" />
+			<entry class="" argb="255,0,178,255" value="95" />
+			<entry class="" argb="255,0,182,255" value="96" />
+			<entry class="" argb="255,0,187,255" value="97" />
+			<entry class="" argb="255,0,195,255" value="98" />
+			<entry class="" argb="255,0,199,255" value="99" />
+			<entry class="" argb="255,0,203,255" value="100" />
+			<entry class="" argb="255,0,208,255" value="101" />
+			<entry class="" argb="255,0,216,255" value="102" />
+			<entry class="" argb="255,0,220,255" value="103" />
+			<entry class="" argb="255,0,225,255" value="104" />
+			<entry class="" argb="255,0,229,255" value="105" />
+			<entry class="" argb="255,0,233,255" value="106" />
+			<entry class="" argb="255,0,242,255" value="107" />
+			<entry class="" argb="255,0,246,255" value="108" />
+			<entry class="" argb="255,0,250,255" value="109" />
+			<entry class="" argb="255,0,255,255" value="110" />
+			<entry class="" argb="255,0,255,246" value="111" />
+			<entry class="" argb="255,0,255,242" value="112" />
+			<entry class="" argb="255,0,255,238" value="113" />
+			<entry class="" argb="255,0,255,233" value="114" />
+			<entry class="" argb="255,0,255,225" value="115" />
+			<entry class="" argb="255,0,255,220" value="116" />
+			<entry class="" argb="255,0,255,216" value="117" />
+			<entry class="" argb="255,0,255,212" value="118" />
+			<entry class="" argb="255,0,255,203" value="119" />
+			<entry class="" argb="255,0,255,199" value="120" />
+			<entry class="" argb="255,0,255,195" value="121" />
+			<entry class="" argb="255,0,255,191" value="122" />
+			<entry class="" argb="255,0,255,187" value="123" />
+			<entry class="" argb="255,0,255,178" value="124" />
+			<entry class="" argb="255,0,255,174" value="125" />
+			<entry class="" argb="255,0,255,170" value="126" />
+			<entry class="" argb="255,0,255,165" value="127" />
+			<entry class="" argb="255,0,255,157" value="128" />
+			<entry class="" argb="255,0,255,152" value="129" />
+			<entry class="" argb="255,0,255,148" value="130" />
+			<entry class="" argb="255,0,255,144" value="131" />
+			<entry class="" argb="255,0,255,135" value="132" />
+			<entry class="" argb="255,0,255,131" value="133" />
+			<entry class="" argb="255,0,255,127" value="134" />
+			<entry class="" argb="255,0,255,123" value="135" />
+			<entry class="" argb="255,0,255,114" value="136" />
+			<entry class="" argb="255,0,255,110" value="137" />
+			<entry class="" argb="255,0,255,106" value="138" />
+			<entry class="" argb="255,0,255,102" value="139" />
+			<entry class="" argb="255,0,255,97" value="140" />
+			<entry class="" argb="255,0,255,89" value="141" />
+			<entry class="" argb="255,0,255,84" value="142" />
+			<entry class="" argb="255,0,255,80" value="143" />
+			<entry class="" argb="255,0,255,76" value="144" />
+			<entry class="" argb="255,0,255,67" value="145" />
+			<entry class="" argb="255,0,255,63" value="146" />
+			<entry class="" argb="255,0,255,59" value="147" />
+			<entry class="" argb="255,0,255,55" value="148" />
+			<entry class="" argb="255,0,255,46" value="149" />
+			<entry class="" argb="255,0,255,42" value="150" />
+			<entry class="" argb="255,0,255,38" value="151" />
+			<entry class="" argb="255,0,255,34" value="152" />
+			<entry class="" argb="255,0,255,25" value="153" />
+			<entry class="" argb="255,0,255,21" value="154" />
+			<entry class="" argb="255,0,255,16" value="155" />
+			<entry class="" argb="255,0,255,12" value="156" />
+			<entry class="" argb="255,0,255,8" value="157" />
+			<entry class="" argb="255,0,255,0" value="158" />
+			<entry class="" argb="255,4,255,0" value="159" />
+			<entry class="" argb="255,8,255,0" value="160" />
+			<entry class="" argb="255,12,255,0" value="161" />
+			<entry class="" argb="255,21,255,0" value="162" />
+			<entry class="" argb="255,25,255,0" value="163" />
+			<entry class="" argb="255,29,255,0" value="164" />
+			<entry class="" argb="255,33,255,0" value="165" />
+			<entry class="" argb="255,42,255,0" value="166" />
+			<entry class="" argb="255,46,255,0" value="167" />
+			<entry class="" argb="255,51,255,0" value="168" />
+			<entry class="" argb="255,55,255,0" value="169" />
+			<entry class="" argb="255,63,255,0" value="170" />
+			<entry class="" argb="255,67,255,0" value="171" />
+			<entry class="" argb="255,72,255,0" value="172" />
+			<entry class="" argb="255,76,255,0" value="173" />
+			<entry class="" argb="255,80,255,0" value="174" />
+			<entry class="" argb="255,89,255,0" value="175" />
+			<entry class="" argb="255,93,255,0" value="176" />
+			<entry class="" argb="255,97,255,0" value="177" />
+			<entry class="" argb="255,101,255,0" value="178" />
+			<entry class="" argb="255,110,255,0" value="179" />
+			<entry class="" argb="255,114,255,0" value="180" />
+			<entry class="" argb="255,119,255,0" value="181" />
+			<entry class="" argb="255,123,255,0" value="182" />
+			<entry class="" argb="255,131,255,0" value="183" />
+			<entry class="" argb="255,135,255,0" value="184" />
+			<entry class="" argb="255,140,255,0" value="185" />
+			<entry class="" argb="255,144,255,0" value="186" />
+			<entry class="" argb="255,153,255,0" value="187" />
+			<entry class="" argb="255,157,255,0" value="188" />
+			<entry class="" argb="255,161,255,0" value="189" />
+			<entry class="" argb="255,165,255,0" value="190" />
+			<entry class="" argb="255,169,255,0" value="191" />
+			<entry class="" argb="255,178,255,0" value="192" />
+			<entry class="" argb="255,182,255,0" value="193" />
+			<entry class="" argb="255,187,255,0" value="194" />
+			<entry class="" argb="255,191,255,0" value="195" />
+			<entry class="" argb="255,199,255,0" value="196" />
+			<entry class="" argb="255,203,255,0" value="197" />
+			<entry class="" argb="255,208,255,0" value="198" />
+			<entry class="" argb="255,212,255,0" value="199" />
+			<entry class="" argb="255,221,255,0" value="200" />
+			<entry class="" argb="255,225,255,0" value="201" />
+			<entry class="" argb="255,229,255,0" value="202" />
+			<entry class="" argb="255,233,255,0" value="203" />
+			<entry class="" argb="255,242,255,0" value="204" />
+			<entry class="" argb="255,246,255,0" value="205" />
+			<entry class="" argb="255,250,255,0" value="206" />
+			<entry class="" argb="255,255,255,0" value="207" />
+			<entry class="" argb="255,255,250,0" value="208" />
+			<entry class="" argb="255,255,242,0" value="209" />
+			<entry class="" argb="255,255,238,0" value="210" />
+			<entry class="" argb="255,255,233,0" value="211" />
+			<entry class="" argb="255,255,229,0" value="212" />
+			<entry class="" argb="255,255,221,0" value="213" />
+			<entry class="" argb="255,255,216,0" value="214" />
+			<entry class="" argb="255,255,212,0" value="215" />
+			<entry class="" argb="255,255,208,0" value="216" />
+			<entry class="" argb="255,255,199,0" value="217" />
+			<entry class="" argb="255,255,195,0" value="218" />
+			<entry class="" argb="255,255,191,0" value="219" />
+			<entry class="" argb="255,255,187,0" value="220" />
+			<entry class="" argb="255,255,178,0" value="221" />
+			<entry class="" argb="255,255,174,0" value="222" />
+			<entry class="" argb="255,255,170,0" value="223" />
+			<entry class="" argb="255,255,165,0" value="224" />
+			<entry class="" argb="255,255,161,0" value="225" />
+			<entry class="" argb="255,255,153,0" value="226" />
+			<entry class="" argb="255,255,148,0" value="227" />
+			<entry class="" argb="255,255,144,0" value="228" />
+			<entry class="" argb="255,255,140,0" value="229" />
+			<entry class="" argb="255,255,131,0" value="230" />
+			<entry class="" argb="255,255,127,0" value="231" />
+			<entry class="" argb="255,255,123,0" value="232" />
+			<entry class="" argb="255,255,119,0" value="233" />
+			<entry class="" argb="255,255,110,0" value="234" />
+			<entry class="" argb="255,255,106,0" value="235" />
+			<entry class="" argb="255,255,102,0" value="236" />
+			<entry class="" argb="255,255,97,0" value="237" />
+			<entry class="" argb="255,255,89,0" value="238" />
+			<entry class="" argb="255,255,85,0" value="239" />
+			<entry class="" argb="255,255,80,0" value="240" />
+			<entry class="" argb="255,255,76,0" value="241" />
+			<entry class="" argb="255,255,72,0" value="242" />
+			<entry class="" argb="255,255,63,0" value="243" />
+			<entry class="" argb="255,255,59,0" value="244" />
+			<entry class="" argb="255,255,55,0" value="245" />
+			<entry class="" argb="255,255,51,0" value="246" />
+			<entry class="" argb="255,255,42,0" value="247" />
+			<entry class="" argb="255,255,38,0" value="248" />
+			<entry class="" argb="255,255,34,0" value="249" />
+			<entry class="" argb="255,255,29,0" value="250" />
+			<entry class="" argb="255,255,21,0" value="251" />
+			<entry class="" argb="255,255,17,0" value="252" />
+			<entry class="" argb="255,255,12,0" value="253" />
+			<entry class="" argb="255,255,8,0" value="254" />
+			<entry class="" argb="255,255,0,0" value="255" />
+		</table>
+	</palette>
+
+	<palette name="red-purple" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,0" value="1" />
+			<entry class="" argb="255,3,0,0" value="2" />
+			<entry class="" argb="255,6,0,0" value="3" />
+			<entry class="" argb="255,10,0,0" value="4" />
+			<entry class="" argb="255,13,0,0" value="5" />
+			<entry class="" argb="255,17,0,0" value="6" />
+			<entry class="" argb="255,20,0,0" value="7" />
+			<entry class="" argb="255,24,0,1" value="8" />
+			<entry class="" argb="255,27,0,1" value="9" />
+			<entry class="" argb="255,30,0,1" value="10" />
+			<entry class="" argb="255,33,0,1" value="11" />
+			<entry class="" argb="255,36,0,2" value="12" />
+			<entry class="" argb="255,39,0,2" value="13" />
+			<entry class="" argb="255,42,0,2" value="14" />
+			<entry class="" argb="255,45,0,2" value="15" />
+			<entry class="" argb="255,48,0,2" value="16" />
+			<entry class="" argb="255,51,0,2" value="17" />
+			<entry class="" argb="255,54,0,2" value="18" />
+			<entry class="" argb="255,57,0,2" value="19" />
+			<entry class="" argb="255,60,0,3" value="20" />
+			<entry class="" argb="255,63,0,3" value="21" />
+			<entry class="" argb="255,66,0,3" value="22" />
+			<entry class="" argb="255,69,0,3" value="23" />
+			<entry class="" argb="255,72,0,4" value="24" />
+			<entry class="" argb="255,75,0,4" value="25" />
+			<entry class="" argb="255,78,0,4" value="26" />
+			<entry class="" argb="255,81,0,4" value="27" />
+			<entry class="" argb="255,84,0,4" value="28" />
+			<entry class="" argb="255,85,0,5" value="29" />
+			<entry class="" argb="255,86,0,6" value="30" />
+			<entry class="" argb="255,87,0,7" value="31" />
+			<entry class="" argb="255,88,0,9" value="32" />
+			<entry class="" argb="255,90,0,9" value="33" />
+			<entry class="" argb="255,92,0,10" value="34" />
+			<entry class="" argb="255,94,0,11" value="35" />
+			<entry class="" argb="255,96,0,12" value="36" />
+			<entry class="" argb="255,97,0,13" value="37" />
+			<entry class="" argb="255,98,0,14" value="38" />
+			<entry class="" argb="255,99,0,15" value="39" />
+			<entry class="" argb="255,100,0,17" value="40" />
+			<entry class="" argb="255,102,0,17" value="41" />
+			<entry class="" argb="255,104,0,18" value="42" />
+			<entry class="" argb="255,106,0,18" value="43" />
+			<entry class="" argb="255,108,0,19" value="44" />
+			<entry class="" argb="255,109,0,20" value="45" />
+			<entry class="" argb="255,110,0,22" value="46" />
+			<entry class="" argb="255,111,0,23" value="47" />
+			<entry class="" argb="255,112,0,25" value="48" />
+			<entry class="" argb="255,114,0,25" value="49" />
+			<entry class="" argb="255,116,0,26" value="50" />
+			<entry class="" argb="255,118,0,26" value="51" />
+			<entry class="" argb="255,120,0,27" value="52" />
+			<entry class="" argb="255,121,0,28" value="53" />
+			<entry class="" argb="255,122,0,29" value="54" />
+			<entry class="" argb="255,123,0,30" value="55" />
+			<entry class="" argb="255,124,0,32" value="56" />
+			<entry class="" argb="255,126,0,32" value="57" />
+			<entry class="" argb="255,128,0,33" value="58" />
+			<entry class="" argb="255,130,0,33" value="59" />
+			<entry class="" argb="255,132,0,34" value="60" />
+			<entry class="" argb="255,133,0,35" value="61" />
+			<entry class="" argb="255,134,0,36" value="62" />
+			<entry class="" argb="255,135,0,37" value="63" />
+			<entry class="" argb="255,136,0,39" value="64" />
+			<entry class="" argb="255,138,1,39" value="65" />
+			<entry class="" argb="255,140,2,40" value="66" />
+			<entry class="" argb="255,142,3,40" value="67" />
+			<entry class="" argb="255,144,4,41" value="68" />
+			<entry class="" argb="255,145,4,42" value="69" />
+			<entry class="" argb="255,146,4,43" value="70" />
+			<entry class="" argb="255,147,4,44" value="71" />
+			<entry class="" argb="255,148,4,46" value="72" />
+			<entry class="" argb="255,150,4,46" value="73" />
+			<entry class="" argb="255,152,4,47" value="74" />
+			<entry class="" argb="255,154,4,48" value="75" />
+			<entry class="" argb="255,156,4,49" value="76" />
+			<entry class="" argb="255,157,4,50" value="77" />
+			<entry class="" argb="255,158,4,51" value="78" />
+			<entry class="" argb="255,159,4,52" value="79" />
+			<entry class="" argb="255,160,4,54" value="80" />
+			<entry class="" argb="255,162,5,54" value="81" />
+			<entry class="" argb="255,164,6,53" value="82" />
+			<entry class="" argb="255,166,7,53" value="83" />
+			<entry class="" argb="255,168,8,52" value="84" />
+			<entry class="" argb="255,169,8,54" value="85" />
+			<entry class="" argb="255,170,8,56" value="86" />
+			<entry class="" argb="255,171,8,58" value="87" />
+			<entry class="" argb="255,172,8,60" value="88" />
+			<entry class="" argb="255,174,8,60" value="89" />
+			<entry class="" argb="255,176,8,61" value="90" />
+			<entry class="" argb="255,178,8,62" value="91" />
+			<entry class="" argb="255,180,8,63" value="92" />
+			<entry class="" argb="255,181,8,64" value="93" />
+			<entry class="" argb="255,182,8,65" value="94" />
+			<entry class="" argb="255,183,8,66" value="95" />
+			<entry class="" argb="255,184,8,68" value="96" />
+			<entry class="" argb="255,185,8,69" value="97" />
+			<entry class="" argb="255,186,8,70" value="98" />
+			<entry class="" argb="255,187,8,71" value="99" />
+			<entry class="" argb="255,188,8,73" value="100" />
+			<entry class="" argb="255,189,8,74" value="101" />
+			<entry class="" argb="255,190,8,75" value="102" />
+			<entry class="" argb="255,191,8,76" value="103" />
+			<entry class="" argb="255,192,8,77" value="104" />
+			<entry class="" argb="255,193,8,78" value="105" />
+			<entry class="" argb="255,194,8,79" value="106" />
+			<entry class="" argb="255,195,8,80" value="107" />
+			<entry class="" argb="255,196,8,82" value="108" />
+			<entry class="" argb="255,198,9,82" value="109" />
+			<entry class="" argb="255,200,10,83" value="110" />
+			<entry class="" argb="255,202,11,83" value="111" />
+			<entry class="" argb="255,204,12,84" value="112" />
+			<entry class="" argb="255,205,12,85" value="113" />
+			<entry class="" argb="255,206,12,86" value="114" />
+			<entry class="" argb="255,207,12,87" value="115" />
+			<entry class="" argb="255,208,12,89" value="116" />
+			<entry class="" argb="255,209,12,90" value="117" />
+			<entry class="" argb="255,210,12,91" value="118" />
+			<entry class="" argb="255,211,12,92" value="119" />
+			<entry class="" argb="255,212,12,94" value="120" />
+			<entry class="" argb="255,213,12,95" value="121" />
+			<entry class="" argb="255,214,12,96" value="122" />
+			<entry class="" argb="255,215,12,97" value="123" />
+			<entry class="" argb="255,216,12,98" value="124" />
+			<entry class="" argb="255,217,12,99" value="125" />
+			<entry class="" argb="255,218,12,100" value="126" />
+			<entry class="" argb="255,219,12,101" value="127" />
+			<entry class="" argb="255,220,12,103" value="128" />
+			<entry class="" argb="255,222,12,103" value="129" />
+			<entry class="" argb="255,224,12,104" value="130" />
+			<entry class="" argb="255,226,12,105" value="131" />
+			<entry class="" argb="255,228,12,106" value="132" />
+			<entry class="" argb="255,229,13,107" value="133" />
+			<entry class="" argb="255,230,14,108" value="134" />
+			<entry class="" argb="255,231,15,109" value="135" />
+			<entry class="" argb="255,232,16,110" value="136" />
+			<entry class="" argb="255,233,16,111" value="137" />
+			<entry class="" argb="255,234,16,112" value="138" />
+			<entry class="" argb="255,235,16,113" value="139" />
+			<entry class="" argb="255,236,16,115" value="140" />
+			<entry class="" argb="255,237,16,116" value="141" />
+			<entry class="" argb="255,238,16,117" value="142" />
+			<entry class="" argb="255,239,16,118" value="143" />
+			<entry class="" argb="255,240,16,119" value="144" />
+			<entry class="" argb="255,241,16,120" value="145" />
+			<entry class="" argb="255,242,16,121" value="146" />
+			<entry class="" argb="255,243,16,122" value="147" />
+			<entry class="" argb="255,244,16,124" value="148" />
+			<entry class="" argb="255,246,16,124" value="149" />
+			<entry class="" argb="255,248,16,125" value="150" />
+			<entry class="" argb="255,250,16,125" value="151" />
+			<entry class="" argb="255,252,16,126" value="152" />
+			<entry class="" argb="255,252,17,127" value="153" />
+			<entry class="" argb="255,252,18,129" value="154" />
+			<entry class="" argb="255,252,19,131" value="155" />
+			<entry class="" argb="255,252,20,133" value="156" />
+			<entry class="" argb="255,252,20,134" value="157" />
+			<entry class="" argb="255,252,20,136" value="158" />
+			<entry class="" argb="255,252,20,138" value="159" />
+			<entry class="" argb="255,252,20,140" value="160" />
+			<entry class="" argb="255,252,21,141" value="161" />
+			<entry class="" argb="255,252,22,143" value="162" />
+			<entry class="" argb="255,252,23,144" value="163" />
+			<entry class="" argb="255,252,24,146" value="164" />
+			<entry class="" argb="255,252,24,147" value="165" />
+			<entry class="" argb="255,252,24,149" value="166" />
+			<entry class="" argb="255,252,24,151" value="167" />
+			<entry class="" argb="255,252,24,153" value="168" />
+			<entry class="" argb="255,252,25,154" value="169" />
+			<entry class="" argb="255,252,26,156" value="170" />
+			<entry class="" argb="255,252,27,157" value="171" />
+			<entry class="" argb="255,252,28,159" value="172" />
+			<entry class="" argb="255,252,30,160" value="173" />
+			<entry class="" argb="255,252,32,161" value="174" />
+			<entry class="" argb="255,252,34,162" value="175" />
+			<entry class="" argb="255,252,36,164" value="176" />
+			<entry class="" argb="255,252,38,165" value="177" />
+			<entry class="" argb="255,252,40,166" value="178" />
+			<entry class="" argb="255,252,42,167" value="179" />
+			<entry class="" argb="255,252,44,169" value="180" />
+			<entry class="" argb="255,252,46,170" value="181" />
+			<entry class="" argb="255,252,48,172" value="182" />
+			<entry class="" argb="255,252,50,173" value="183" />
+			<entry class="" argb="255,252,52,175" value="184" />
+			<entry class="" argb="255,252,54,176" value="185" />
+			<entry class="" argb="255,252,56,177" value="186" />
+			<entry class="" argb="255,252,58,178" value="187" />
+			<entry class="" argb="255,252,60,180" value="188" />
+			<entry class="" argb="255,252,61,181" value="189" />
+			<entry class="" argb="255,252,62,183" value="190" />
+			<entry class="" argb="255,252,63,184" value="191" />
+			<entry class="" argb="255,252,64,186" value="192" />
+			<entry class="" argb="255,252,66,187" value="193" />
+			<entry class="" argb="255,252,68,188" value="194" />
+			<entry class="" argb="255,252,70,189" value="195" />
+			<entry class="" argb="255,252,72,191" value="196" />
+			<entry class="" argb="255,252,74,192" value="197" />
+			<entry class="" argb="255,252,76,193" value="198" />
+			<entry class="" argb="255,252,78,194" value="199" />
+			<entry class="" argb="255,252,80,196" value="200" />
+			<entry class="" argb="255,252,82,197" value="201" />
+			<entry class="" argb="255,252,84,199" value="202" />
+			<entry class="" argb="255,252,86,200" value="203" />
+			<entry class="" argb="255,252,88,202" value="204" />
+			<entry class="" argb="255,252,90,203" value="205" />
+			<entry class="" argb="255,252,92,204" value="206" />
+			<entry class="" argb="255,252,94,205" value="207" />
+			<entry class="" argb="255,252,96,207" value="208" />
+			<entry class="" argb="255,252,98,208" value="209" />
+			<entry class="" argb="255,252,100,209" value="210" />
+			<entry class="" argb="255,252,102,210" value="211" />
+			<entry class="" argb="255,252,104,212" value="212" />
+			<entry class="" argb="255,252,107,213" value="213" />
+			<entry class="" argb="255,252,110,214" value="214" />
+			<entry class="" argb="255,252,113,215" value="215" />
+			<entry class="" argb="255,252,116,217" value="216" />
+			<entry class="" argb="255,252,119,218" value="217" />
+			<entry class="" argb="255,252,122,219" value="218" />
+			<entry class="" argb="255,252,125,220" value="219" />
+			<entry class="" argb="255,252,128,221" value="220" />
+			<entry class="" argb="255,252,131,222" value="221" />
+			<entry class="" argb="255,252,134,223" value="222" />
+			<entry class="" argb="255,252,137,224" value="223" />
+			<entry class="" argb="255,252,140,226" value="224" />
+			<entry class="" argb="255,252,143,227" value="225" />
+			<entry class="" argb="255,252,146,228" value="226" />
+			<entry class="" argb="255,252,149,229" value="227" />
+			<entry class="" argb="255,252,152,230" value="228" />
+			<entry class="" argb="255,252,155,231" value="229" />
+			<entry class="" argb="255,252,158,232" value="230" />
+			<entry class="" argb="255,252,161,233" value="231" />
+			<entry class="" argb="255,252,164,235" value="232" />
+			<entry class="" argb="255,252,167,236" value="233" />
+			<entry class="" argb="255,252,170,237" value="234" />
+			<entry class="" argb="255,252,173,238" value="235" />
+			<entry class="" argb="255,252,176,239" value="236" />
+			<entry class="" argb="255,252,180,240" value="237" />
+			<entry class="" argb="255,252,184,241" value="238" />
+			<entry class="" argb="255,252,188,242" value="239" />
+			<entry class="" argb="255,252,192,243" value="240" />
+			<entry class="" argb="255,252,197,243" value="241" />
+			<entry class="" argb="255,252,202,244" value="242" />
+			<entry class="" argb="255,252,207,245" value="243" />
+			<entry class="" argb="255,252,212,246" value="244" />
+			<entry class="" argb="255,252,217,246" value="245" />
+			<entry class="" argb="255,252,222,247" value="246" />
+			<entry class="" argb="255,252,227,248" value="247" />
+			<entry class="" argb="255,252,232,249" value="248" />
+			<entry class="" argb="255,252,237,249" value="249" />
+			<entry class="" argb="255,252,242,250" value="250" />
+			<entry class="" argb="255,252,247,251" value="251" />
+			<entry class="" argb="255,252,252,252" value="252" />
+			<entry class="" argb="255,252,252,252" value="253" />
+			<entry class="" argb="255,253,253,253" value="254" />
+			<entry class="" argb="255,254,254,254" value="255" />
+		</table>
+	</palette>
+
+	<palette name="std-gamma-II" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,0,5" value="1" />
+			<entry class="" argb="255,0,0,10" value="2" />
+			<entry class="" argb="255,0,0,15" value="3" />
+			<entry class="" argb="255,0,0,20" value="4" />
+			<entry class="" argb="255,0,0,26" value="5" />
+			<entry class="" argb="255,0,0,31" value="6" />
+			<entry class="" argb="255,0,0,36" value="7" />
+			<entry class="" argb="255,0,0,41" value="8" />
+			<entry class="" argb="255,0,0,46" value="9" />
+			<entry class="" argb="255,0,0,52" value="10" />
+			<entry class="" argb="255,0,0,57" value="11" />
+			<entry class="" argb="255,0,0,62" value="12" />
+			<entry class="" argb="255,0,0,67" value="13" />
+			<entry class="" argb="255,0,0,72" value="14" />
+			<entry class="" argb="255,0,0,78" value="15" />
+			<entry class="" argb="255,0,0,83" value="16" />
+			<entry class="" argb="255,0,0,88" value="17" />
+			<entry class="" argb="255,0,0,93" value="18" />
+			<entry class="" argb="255,0,0,98" value="19" />
+			<entry class="" argb="255,0,0,104" value="20" />
+			<entry class="" argb="255,0,0,109" value="21" />
+			<entry class="" argb="255,0,0,114" value="22" />
+			<entry class="" argb="255,0,0,119" value="23" />
+			<entry class="" argb="255,0,0,124" value="24" />
+			<entry class="" argb="255,0,0,130" value="25" />
+			<entry class="" argb="255,0,0,135" value="26" />
+			<entry class="" argb="255,0,0,140" value="27" />
+			<entry class="" argb="255,0,0,145" value="28" />
+			<entry class="" argb="255,0,0,150" value="29" />
+			<entry class="" argb="255,0,0,156" value="30" />
+			<entry class="" argb="255,0,0,161" value="31" />
+			<entry class="" argb="255,0,0,166" value="32" />
+			<entry class="" argb="255,0,0,171" value="33" />
+			<entry class="" argb="255,0,0,176" value="34" />
+			<entry class="" argb="255,0,0,182" value="35" />
+			<entry class="" argb="255,0,0,187" value="36" />
+			<entry class="" argb="255,0,0,192" value="37" />
+			<entry class="" argb="255,0,0,197" value="38" />
+			<entry class="" argb="255,0,0,202" value="39" />
+			<entry class="" argb="255,0,0,208" value="40" />
+			<entry class="" argb="255,0,0,213" value="41" />
+			<entry class="" argb="255,0,0,218" value="42" />
+			<entry class="" argb="255,0,0,223" value="43" />
+			<entry class="" argb="255,0,0,228" value="44" />
+			<entry class="" argb="255,0,0,234" value="45" />
+			<entry class="" argb="255,0,0,239" value="46" />
+			<entry class="" argb="255,0,0,244" value="47" />
+			<entry class="" argb="255,4,0,249" value="48" />
+			<entry class="" argb="255,9,0,255" value="49" />
+			<entry class="" argb="255,14,0,250" value="50" />
+			<entry class="" argb="255,19,0,245" value="51" />
+			<entry class="" argb="255,23,0,239" value="52" />
+			<entry class="" argb="255,28,0,234" value="53" />
+			<entry class="" argb="255,33,0,228" value="54" />
+			<entry class="" argb="255,38,0,223" value="55" />
+			<entry class="" argb="255,42,0,218" value="56" />
+			<entry class="" argb="255,47,0,212" value="57" />
+			<entry class="" argb="255,52,0,207" value="58" />
+			<entry class="" argb="255,57,0,201" value="59" />
+			<entry class="" argb="255,61,0,196" value="60" />
+			<entry class="" argb="255,66,0,190" value="61" />
+			<entry class="" argb="255,71,0,185" value="62" />
+			<entry class="" argb="255,76,0,180" value="63" />
+			<entry class="" argb="255,81,0,174" value="64" />
+			<entry class="" argb="255,81,0,169" value="65" />
+			<entry class="" argb="255,81,0,163" value="66" />
+			<entry class="" argb="255,81,0,158" value="67" />
+			<entry class="" argb="255,81,0,152" value="68" />
+			<entry class="" argb="255,81,0,147" value="69" />
+			<entry class="" argb="255,81,0,142" value="70" />
+			<entry class="" argb="255,81,0,136" value="71" />
+			<entry class="" argb="255,80,0,131" value="72" />
+			<entry class="" argb="255,80,0,125" value="73" />
+			<entry class="" argb="255,80,0,120" value="74" />
+			<entry class="" argb="255,80,0,114" value="75" />
+			<entry class="" argb="255,80,0,109" value="76" />
+			<entry class="" argb="255,80,0,104" value="77" />
+			<entry class="" argb="255,80,0,98" value="78" />
+			<entry class="" argb="255,79,0,93" value="79" />
+			<entry class="" argb="255,84,0,87" value="80" />
+			<entry class="" argb="255,89,0,82" value="81" />
+			<entry class="" argb="255,94,0,76" value="82" />
+			<entry class="" argb="255,99,0,71" value="83" />
+			<entry class="" argb="255,104,0,66" value="84" />
+			<entry class="" argb="255,109,0,60" value="85" />
+			<entry class="" argb="255,114,0,55" value="86" />
+			<entry class="" argb="255,119,0,49" value="87" />
+			<entry class="" argb="255,124,0,44" value="88" />
+			<entry class="" argb="255,129,0,38" value="89" />
+			<entry class="" argb="255,134,0,33" value="90" />
+			<entry class="" argb="255,139,0,28" value="91" />
+			<entry class="" argb="255,144,0,22" value="92" />
+			<entry class="" argb="255,149,0,17" value="93" />
+			<entry class="" argb="255,154,0,11" value="94" />
+			<entry class="" argb="255,159,0,6" value="95" />
+			<entry class="" argb="255,164,0,0" value="96" />
+			<entry class="" argb="255,169,0,0" value="97" />
+			<entry class="" argb="255,174,0,0" value="98" />
+			<entry class="" argb="255,180,0,0" value="99" />
+			<entry class="" argb="255,185,0,0" value="100" />
+			<entry class="" argb="255,190,0,0" value="101" />
+			<entry class="" argb="255,196,0,0" value="102" />
+			<entry class="" argb="255,201,0,0" value="103" />
+			<entry class="" argb="255,206,0,0" value="104" />
+			<entry class="" argb="255,212,0,0" value="105" />
+			<entry class="" argb="255,217,0,0" value="106" />
+			<entry class="" argb="255,222,0,0" value="107" />
+			<entry class="" argb="255,228,0,0" value="108" />
+			<entry class="" argb="255,233,0,0" value="109" />
+			<entry class="" argb="255,255,0,0" value="110" />
+			<entry class="" argb="255,255,0,0" value="111" />
+			<entry class="" argb="255,255,0,0" value="112" />
+			<entry class="" argb="255,255,0,0" value="113" />
+			<entry class="" argb="255,255,5,0" value="114" />
+			<entry class="" argb="255,255,10,0" value="115" />
+			<entry class="" argb="255,255,16,0" value="116" />
+			<entry class="" argb="255,255,21,0" value="117" />
+			<entry class="" argb="255,255,27,0" value="118" />
+			<entry class="" argb="255,255,32,0" value="119" />
+			<entry class="" argb="255,255,37,0" value="120" />
+			<entry class="" argb="255,255,43,0" value="121" />
+			<entry class="" argb="255,255,48,0" value="122" />
+			<entry class="" argb="255,255,54,0" value="123" />
+			<entry class="" argb="255,255,59,0" value="124" />
+			<entry class="" argb="255,255,64,0" value="125" />
+			<entry class="" argb="255,255,70,0" value="126" />
+			<entry class="" argb="255,255,75,0" value="127" />
+			<entry class="" argb="255,255,81,0" value="128" />
+			<entry class="" argb="255,255,85,4" value="129" />
+			<entry class="" argb="255,255,90,9" value="130" />
+			<entry class="" argb="255,255,95,14" value="131" />
+			<entry class="" argb="255,255,100,19" value="132" />
+			<entry class="" argb="255,255,105,24" value="133" />
+			<entry class="" argb="255,255,109,28" value="134" />
+			<entry class="" argb="255,255,114,33" value="135" />
+			<entry class="" argb="255,255,119,38" value="136" />
+			<entry class="" argb="255,255,124,43" value="137" />
+			<entry class="" argb="255,255,129,48" value="138" />
+			<entry class="" argb="255,255,134,53" value="139" />
+			<entry class="" argb="255,255,138,57" value="140" />
+			<entry class="" argb="255,255,143,62" value="141" />
+			<entry class="" argb="255,255,148,67" value="142" />
+			<entry class="" argb="255,255,153,72" value="143" />
+			<entry class="" argb="255,255,158,77" value="144" />
+			<entry class="" argb="255,255,163,82" value="145" />
+			<entry class="" argb="255,255,163,77" value="146" />
+			<entry class="" argb="255,255,163,71" value="147" />
+			<entry class="" argb="255,255,163,65" value="148" />
+			<entry class="" argb="255,255,163,59" value="149" />
+			<entry class="" argb="255,255,163,53" value="150" />
+			<entry class="" argb="255,255,163,47" value="151" />
+			<entry class="" argb="255,255,163,41" value="152" />
+			<entry class="" argb="255,255,163,36" value="153" />
+			<entry class="" argb="255,255,163,30" value="154" />
+			<entry class="" argb="255,255,163,24" value="155" />
+			<entry class="" argb="255,255,163,18" value="156" />
+			<entry class="" argb="255,255,163,12" value="157" />
+			<entry class="" argb="255,255,163,6" value="158" />
+			<entry class="" argb="255,255,163,0" value="159" />
+			<entry class="" argb="255,255,163,0" value="160" />
+			<entry class="" argb="255,255,163,0" value="161" />
+			<entry class="" argb="255,255,163,0" value="162" />
+			<entry class="" argb="255,248,163,0" value="163" />
+			<entry class="" argb="255,240,163,0" value="164" />
+			<entry class="" argb="255,232,163,0" value="165" />
+			<entry class="" argb="255,225,163,0" value="166" />
+			<entry class="" argb="255,217,163,0" value="167" />
+			<entry class="" argb="255,209,163,0" value="168" />
+			<entry class="" argb="255,202,163,0" value="169" />
+			<entry class="" argb="255,194,163,0" value="170" />
+			<entry class="" argb="255,186,163,0" value="171" />
+			<entry class="" argb="255,179,163,0" value="172" />
+			<entry class="" argb="255,171,163,0" value="173" />
+			<entry class="" argb="255,163,163,0" value="174" />
+			<entry class="" argb="255,168,163,0" value="175" />
+			<entry class="" argb="255,173,163,0" value="176" />
+			<entry class="" argb="255,178,169,3" value="177" />
+			<entry class="" argb="255,183,175,6" value="178" />
+			<entry class="" argb="255,188,181,9" value="179" />
+			<entry class="" argb="255,193,187,12" value="180" />
+			<entry class="" argb="255,198,193,16" value="181" />
+			<entry class="" argb="255,203,199,19" value="182" />
+			<entry class="" argb="255,209,205,22" value="183" />
+			<entry class="" argb="255,214,212,25" value="184" />
+			<entry class="" argb="255,219,218,29" value="185" />
+			<entry class="" argb="255,224,224,32" value="186" />
+			<entry class="" argb="255,229,230,35" value="187" />
+			<entry class="" argb="255,234,236,38" value="188" />
+			<entry class="" argb="255,239,242,41" value="189" />
+			<entry class="" argb="255,244,248,45" value="190" />
+			<entry class="" argb="255,249,255,48" value="191" />
+			<entry class="" argb="255,255,255,51" value="192" />
+			<entry class="" argb="255,255,255,54" value="193" />
+			<entry class="" argb="255,255,255,58" value="194" />
+			<entry class="" argb="255,255,255,61" value="195" />
+			<entry class="" argb="255,255,255,64" value="196" />
+			<entry class="" argb="255,255,255,67" value="197" />
+			<entry class="" argb="255,255,255,71" value="198" />
+			<entry class="" argb="255,255,255,74" value="199" />
+			<entry class="" argb="255,255,255,77" value="200" />
+			<entry class="" argb="255,255,255,80" value="201" />
+			<entry class="" argb="255,255,255,83" value="202" />
+			<entry class="" argb="255,255,255,87" value="203" />
+			<entry class="" argb="255,255,255,90" value="204" />
+			<entry class="" argb="255,255,255,93" value="205" />
+			<entry class="" argb="255,255,255,96" value="206" />
+			<entry class="" argb="255,255,255,100" value="207" />
+			<entry class="" argb="255,255,255,103" value="208" />
+			<entry class="" argb="255,255,255,106" value="209" />
+			<entry class="" argb="255,255,255,109" value="210" />
+			<entry class="" argb="255,255,255,112" value="211" />
+			<entry class="" argb="255,255,255,116" value="212" />
+			<entry class="" argb="255,255,255,119" value="213" />
+			<entry class="" argb="255,255,255,122" value="214" />
+			<entry class="" argb="255,255,255,125" value="215" />
+			<entry class="" argb="255,255,255,129" value="216" />
+			<entry class="" argb="255,255,255,132" value="217" />
+			<entry class="" argb="255,255,255,135" value="218" />
+			<entry class="" argb="255,255,255,138" value="219" />
+			<entry class="" argb="255,255,255,142" value="220" />
+			<entry class="" argb="255,255,255,145" value="221" />
+			<entry class="" argb="255,255,255,148" value="222" />
+			<entry class="" argb="255,255,255,151" value="223" />
+			<entry class="" argb="255,255,255,154" value="224" />
+			<entry class="" argb="255,255,255,158" value="225" />
+			<entry class="" argb="255,255,255,161" value="226" />
+			<entry class="" argb="255,255,255,164" value="227" />
+			<entry class="" argb="255,255,255,167" value="228" />
+			<entry class="" argb="255,255,255,171" value="229" />
+			<entry class="" argb="255,255,255,174" value="230" />
+			<entry class="" argb="255,255,255,177" value="231" />
+			<entry class="" argb="255,255,255,180" value="232" />
+			<entry class="" argb="255,255,255,183" value="233" />
+			<entry class="" argb="255,255,255,187" value="234" />
+			<entry class="" argb="255,255,255,190" value="235" />
+			<entry class="" argb="255,255,255,193" value="236" />
+			<entry class="" argb="255,255,255,196" value="237" />
+			<entry class="" argb="255,255,255,200" value="238" />
+			<entry class="" argb="255,255,255,203" value="239" />
+			<entry class="" argb="255,255,255,206" value="240" />
+			<entry class="" argb="255,255,255,209" value="241" />
+			<entry class="" argb="255,255,255,213" value="242" />
+			<entry class="" argb="255,255,255,216" value="243" />
+			<entry class="" argb="255,255,255,219" value="244" />
+			<entry class="" argb="255,255,255,222" value="245" />
+			<entry class="" argb="255,255,255,225" value="246" />
+			<entry class="" argb="255,255,255,229" value="247" />
+			<entry class="" argb="255,255,255,232" value="248" />
+			<entry class="" argb="255,255,255,235" value="249" />
+			<entry class="" argb="255,255,255,238" value="250" />
+			<entry class="" argb="255,255,255,242" value="251" />
+			<entry class="" argb="255,255,255,245" value="252" />
+			<entry class="" argb="255,255,255,248" value="253" />
+			<entry class="" argb="255,255,255,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="steps" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,0,42,0" value="1" />
+			<entry class="" argb="255,0,85,0" value="2" />
+			<entry class="" argb="255,0,127,0" value="3" />
+			<entry class="" argb="255,0,170,0" value="4" />
+			<entry class="" argb="255,0,212,0" value="5" />
+			<entry class="" argb="255,0,255,0" value="6" />
+			<entry class="" argb="255,0,246,0" value="7" />
+			<entry class="" argb="255,0,236,0" value="8" />
+			<entry class="" argb="255,0,226,0" value="9" />
+			<entry class="" argb="255,0,216,0" value="10" />
+			<entry class="" argb="255,0,206,0" value="11" />
+			<entry class="" argb="255,0,197,0" value="12" />
+			<entry class="" argb="255,0,187,0" value="13" />
+			<entry class="" argb="255,0,177,0" value="14" />
+			<entry class="" argb="255,0,167,0" value="15" />
+			<entry class="" argb="255,0,157,0" value="16" />
+			<entry class="" argb="255,0,148,0" value="17" />
+			<entry class="" argb="255,0,138,0" value="18" />
+			<entry class="" argb="255,0,128,0" value="19" />
+			<entry class="" argb="255,0,118,0" value="20" />
+			<entry class="" argb="255,0,108,0" value="21" />
+			<entry class="" argb="255,0,99,0" value="22" />
+			<entry class="" argb="255,0,89,0" value="23" />
+			<entry class="" argb="255,0,79,0" value="24" />
+			<entry class="" argb="255,0,69,0" value="25" />
+			<entry class="" argb="255,0,59,0" value="26" />
+			<entry class="" argb="255,0,50,0" value="27" />
+			<entry class="" argb="255,0,40,0" value="28" />
+			<entry class="" argb="255,0,30,0" value="29" />
+			<entry class="" argb="255,0,20,0" value="30" />
+			<entry class="" argb="255,0,10,0" value="31" />
+			<entry class="" argb="255,0,0,0" value="32" />
+			<entry class="" argb="255,0,0,8" value="33" />
+			<entry class="" argb="255,0,0,16" value="34" />
+			<entry class="" argb="255,0,0,24" value="35" />
+			<entry class="" argb="255,0,0,32" value="36" />
+			<entry class="" argb="255,0,0,41" value="37" />
+			<entry class="" argb="255,0,0,49" value="38" />
+			<entry class="" argb="255,0,0,57" value="39" />
+			<entry class="" argb="255,0,0,65" value="40" />
+			<entry class="" argb="255,0,0,74" value="41" />
+			<entry class="" argb="255,0,0,82" value="42" />
+			<entry class="" argb="255,0,0,90" value="43" />
+			<entry class="" argb="255,0,0,98" value="44" />
+			<entry class="" argb="255,0,0,106" value="45" />
+			<entry class="" argb="255,0,0,115" value="46" />
+			<entry class="" argb="255,0,0,123" value="47" />
+			<entry class="" argb="255,0,0,131" value="48" />
+			<entry class="" argb="255,0,0,139" value="49" />
+			<entry class="" argb="255,0,0,148" value="50" />
+			<entry class="" argb="255,0,0,156" value="51" />
+			<entry class="" argb="255,0,0,164" value="52" />
+			<entry class="" argb="255,0,0,172" value="53" />
+			<entry class="" argb="255,0,0,180" value="54" />
+			<entry class="" argb="255,0,0,189" value="55" />
+			<entry class="" argb="255,0,0,197" value="56" />
+			<entry class="" argb="255,0,0,205" value="57" />
+			<entry class="" argb="255,0,0,213" value="58" />
+			<entry class="" argb="255,0,0,222" value="59" />
+			<entry class="" argb="255,0,0,230" value="60" />
+			<entry class="" argb="255,0,0,238" value="61" />
+			<entry class="" argb="255,0,0,246" value="62" />
+			<entry class="" argb="255,0,0,255" value="63" />
+			<entry class="" argb="255,0,0,0" value="64" />
+			<entry class="" argb="255,7,0,5" value="65" />
+			<entry class="" argb="255,15,0,10" value="66" />
+			<entry class="" argb="255,23,0,15" value="67" />
+			<entry class="" argb="255,31,0,21" value="68" />
+			<entry class="" argb="255,39,0,26" value="69" />
+			<entry class="" argb="255,47,0,31" value="70" />
+			<entry class="" argb="255,55,0,37" value="71" />
+			<entry class="" argb="255,63,0,42" value="72" />
+			<entry class="" argb="255,70,0,47" value="73" />
+			<entry class="" argb="255,78,0,53" value="74" />
+			<entry class="" argb="255,86,0,58" value="75" />
+			<entry class="" argb="255,94,0,63" value="76" />
+			<entry class="" argb="255,102,0,69" value="77" />
+			<entry class="" argb="255,110,0,74" value="78" />
+			<entry class="" argb="255,118,0,79" value="79" />
+			<entry class="" argb="255,126,0,85" value="80" />
+			<entry class="" argb="255,134,0,89" value="81" />
+			<entry class="" argb="255,142,0,94" value="82" />
+			<entry class="" argb="255,151,0,98" value="83" />
+			<entry class="" argb="255,159,0,103" value="84" />
+			<entry class="" argb="255,168,0,108" value="85" />
+			<entry class="" argb="255,176,0,112" value="86" />
+			<entry class="" argb="255,184,0,117" value="87" />
+			<entry class="" argb="255,193,0,121" value="88" />
+			<entry class="" argb="255,201,0,126" value="89" />
+			<entry class="" argb="255,210,0,131" value="90" />
+			<entry class="" argb="255,218,0,135" value="91" />
+			<entry class="" argb="255,226,0,140" value="92" />
+			<entry class="" argb="255,235,0,144" value="93" />
+			<entry class="" argb="255,243,0,149" value="94" />
+			<entry class="" argb="255,252,0,154" value="95" />
+			<entry class="" argb="255,0,0,0" value="96" />
+			<entry class="" argb="255,1,0,0" value="97" />
+			<entry class="" argb="255,2,0,0" value="98" />
+			<entry class="" argb="255,3,0,0" value="99" />
+			<entry class="" argb="255,4,0,0" value="100" />
+			<entry class="" argb="255,5,0,0" value="101" />
+			<entry class="" argb="255,6,0,0" value="102" />
+			<entry class="" argb="255,7,0,0" value="103" />
+			<entry class="" argb="255,8,0,0" value="104" />
+			<entry class="" argb="255,9,0,0" value="105" />
+			<entry class="" argb="255,10,0,0" value="106" />
+			<entry class="" argb="255,11,0,0" value="107" />
+			<entry class="" argb="255,12,0,0" value="108" />
+			<entry class="" argb="255,14,0,0" value="109" />
+			<entry class="" argb="255,16,0,0" value="110" />
+			<entry class="" argb="255,18,0,0" value="111" />
+			<entry class="" argb="255,20,0,0" value="112" />
+			<entry class="" argb="255,23,0,0" value="113" />
+			<entry class="" argb="255,25,0,0" value="114" />
+			<entry class="" argb="255,27,0,0" value="115" />
+			<entry class="" argb="255,29,0,0" value="116" />
+			<entry class="" argb="255,32,0,0" value="117" />
+			<entry class="" argb="255,34,0,0" value="118" />
+			<entry class="" argb="255,36,0,0" value="119" />
+			<entry class="" argb="255,38,0,0" value="120" />
+			<entry class="" argb="255,41,0,0" value="121" />
+			<entry class="" argb="255,44,0,0" value="122" />
+			<entry class="" argb="255,47,0,0" value="123" />
+			<entry class="" argb="255,50,0,0" value="124" />
+			<entry class="" argb="255,53,0,0" value="125" />
+			<entry class="" argb="255,56,0,0" value="126" />
+			<entry class="" argb="255,59,0,0" value="127" />
+			<entry class="" argb="255,63,0,0" value="128" />
+			<entry class="" argb="255,66,0,0" value="129" />
+			<entry class="" argb="255,69,0,0" value="130" />
+			<entry class="" argb="255,72,0,0" value="131" />
+			<entry class="" argb="255,75,0,0" value="132" />
+			<entry class="" argb="255,78,0,0" value="133" />
+			<entry class="" argb="255,82,0,1" value="134" />
+			<entry class="" argb="255,85,0,1" value="135" />
+			<entry class="" argb="255,89,0,1" value="136" />
+			<entry class="" argb="255,93,0,1" value="137" />
+			<entry class="" argb="255,97,0,1" value="138" />
+			<entry class="" argb="255,101,0,1" value="139" />
+			<entry class="" argb="255,105,0,1" value="140" />
+			<entry class="" argb="255,108,0,1" value="141" />
+			<entry class="" argb="255,112,0,1" value="142" />
+			<entry class="" argb="255,116,0,1" value="143" />
+			<entry class="" argb="255,120,0,1" value="144" />
+			<entry class="" argb="255,124,0,1" value="145" />
+			<entry class="" argb="255,128,1,1" value="146" />
+			<entry class="" argb="255,131,1,1" value="147" />
+			<entry class="" argb="255,135,1,1" value="148" />
+			<entry class="" argb="255,139,1,1" value="149" />
+			<entry class="" argb="255,143,1,1" value="150" />
+			<entry class="" argb="255,147,1,1" value="151" />
+			<entry class="" argb="255,151,1,1" value="152" />
+			<entry class="" argb="255,155,1,1" value="153" />
+			<entry class="" argb="255,159,1,1" value="154" />
+			<entry class="" argb="255,163,1,1" value="155" />
+			<entry class="" argb="255,167,1,1" value="156" />
+			<entry class="" argb="255,171,1,1" value="157" />
+			<entry class="" argb="255,175,1,1" value="158" />
+			<entry class="" argb="255,178,1,1" value="159" />
+			<entry class="" argb="255,181,1,1" value="160" />
+			<entry class="" argb="255,185,1,1" value="161" />
+			<entry class="" argb="255,188,1,1" value="162" />
+			<entry class="" argb="255,192,1,1" value="163" />
+			<entry class="" argb="255,195,1,1" value="164" />
+			<entry class="" argb="255,198,1,1" value="165" />
+			<entry class="" argb="255,202,1,1" value="166" />
+			<entry class="" argb="255,205,1,1" value="167" />
+			<entry class="" argb="255,209,1,1" value="168" />
+			<entry class="" argb="255,212,1,1" value="169" />
+			<entry class="" argb="255,216,1,2" value="170" />
+			<entry class="" argb="255,218,1,2" value="171" />
+			<entry class="" argb="255,220,1,2" value="172" />
+			<entry class="" argb="255,223,1,2" value="173" />
+			<entry class="" argb="255,225,1,2" value="174" />
+			<entry class="" argb="255,227,1,2" value="175" />
+			<entry class="" argb="255,230,1,2" value="176" />
+			<entry class="" argb="255,232,1,2" value="177" />
+			<entry class="" argb="255,234,1,2" value="178" />
+			<entry class="" argb="255,237,1,2" value="179" />
+			<entry class="" argb="255,239,1,2" value="180" />
+			<entry class="" argb="255,241,1,2" value="181" />
+			<entry class="" argb="255,244,2,2" value="182" />
+			<entry class="" argb="255,244,2,2" value="183" />
+			<entry class="" argb="255,245,2,2" value="184" />
+			<entry class="" argb="255,246,2,2" value="185" />
+			<entry class="" argb="255,247,2,2" value="186" />
+			<entry class="" argb="255,247,2,2" value="187" />
+			<entry class="" argb="255,248,2,2" value="188" />
+			<entry class="" argb="255,249,2,2" value="189" />
+			<entry class="" argb="255,250,2,2" value="190" />
+			<entry class="" argb="255,250,2,2" value="191" />
+			<entry class="" argb="255,251,2,2" value="192" />
+			<entry class="" argb="255,252,2,2" value="193" />
+			<entry class="" argb="255,253,2,2" value="194" />
+			<entry class="" argb="255,254,1,2" value="195" />
+			<entry class="" argb="255,254,1,2" value="196" />
+			<entry class="" argb="255,254,3,2" value="197" />
+			<entry class="" argb="255,254,5,2" value="198" />
+			<entry class="" argb="255,254,8,2" value="199" />
+			<entry class="" argb="255,254,10,2" value="200" />
+			<entry class="" argb="255,254,12,2" value="201" />
+			<entry class="" argb="255,254,15,2" value="202" />
+			<entry class="" argb="255,254,17,2" value="203" />
+			<entry class="" argb="255,254,19,2" value="204" />
+			<entry class="" argb="255,254,22,2" value="205" />
+			<entry class="" argb="255,254,24,2" value="206" />
+			<entry class="" argb="255,254,26,2" value="207" />
+			<entry class="" argb="255,254,29,2" value="208" />
+			<entry class="" argb="255,254,31,2" value="209" />
+			<entry class="" argb="255,254,33,2" value="210" />
+			<entry class="" argb="255,254,36,2" value="211" />
+			<entry class="" argb="255,254,36,2" value="212" />
+			<entry class="" argb="255,254,38,3" value="213" />
+			<entry class="" argb="255,254,40,4" value="214" />
+			<entry class="" argb="255,254,42,5" value="215" />
+			<entry class="" argb="255,255,45,7" value="216" />
+			<entry class="" argb="255,255,48,9" value="217" />
+			<entry class="" argb="255,255,51,12" value="218" />
+			<entry class="" argb="255,255,54,14" value="219" />
+			<entry class="" argb="255,255,58,17" value="220" />
+			<entry class="" argb="255,255,61,20" value="221" />
+			<entry class="" argb="255,255,64,23" value="222" />
+			<entry class="" argb="255,255,67,27" value="223" />
+			<entry class="" argb="255,255,70,30" value="224" />
+			<entry class="" argb="255,255,73,34" value="225" />
+			<entry class="" argb="255,255,77,39" value="226" />
+			<entry class="" argb="255,255,82,44" value="227" />
+			<entry class="" argb="255,255,87,49" value="228" />
+			<entry class="" argb="255,255,92,55" value="229" />
+			<entry class="" argb="255,255,96,60" value="230" />
+			<entry class="" argb="255,255,100,65" value="231" />
+			<entry class="" argb="255,255,104,71" value="232" />
+			<entry class="" argb="255,255,108,76" value="233" />
+			<entry class="" argb="255,255,113,82" value="234" />
+			<entry class="" argb="255,255,119,89" value="235" />
+			<entry class="" argb="255,255,125,97" value="236" />
+			<entry class="" argb="255,255,131,104" value="237" />
+			<entry class="" argb="255,255,138,112" value="238" />
+			<entry class="" argb="255,255,144,120" value="239" />
+			<entry class="" argb="255,255,151,128" value="240" />
+			<entry class="" argb="255,255,157,136" value="241" />
+			<entry class="" argb="255,255,164,145" value="242" />
+			<entry class="" argb="255,255,171,153" value="243" />
+			<entry class="" argb="255,255,178,162" value="244" />
+			<entry class="" argb="255,255,185,171" value="245" />
+			<entry class="" argb="255,255,193,180" value="246" />
+			<entry class="" argb="255,255,200,189" value="247" />
+			<entry class="" argb="255,255,208,198" value="248" />
+			<entry class="" argb="255,255,215,207" value="249" />
+			<entry class="" argb="255,255,223,217" value="250" />
+			<entry class="" argb="255,255,229,224" value="251" />
+			<entry class="" argb="255,255,235,232" value="252" />
+			<entry class="" argb="255,255,242,239" value="253" />
+			<entry class="" argb="255,255,248,247" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="stern-special" interpolate="false">
+		<table>
+			<entry class="" argb="255,0,0,0" value="0" />
+			<entry class="" argb="255,18,1,1" value="1" />
+			<entry class="" argb="255,36,2,3" value="2" />
+			<entry class="" argb="255,54,3,5" value="3" />
+			<entry class="" argb="255,72,4,7" value="4" />
+			<entry class="" argb="255,90,5,9" value="5" />
+			<entry class="" argb="255,108,6,11" value="6" />
+			<entry class="" argb="255,127,7,13" value="7" />
+			<entry class="" argb="255,145,8,15" value="8" />
+			<entry class="" argb="255,163,9,17" value="9" />
+			<entry class="" argb="255,181,10,19" value="10" />
+			<entry class="" argb="255,199,11,21" value="11" />
+			<entry class="" argb="255,217,12,23" value="12" />
+			<entry class="" argb="255,235,13,25" value="13" />
+			<entry class="" argb="255,254,14,27" value="14" />
+			<entry class="" argb="255,249,15,29" value="15" />
+			<entry class="" argb="255,244,16,31" value="16" />
+			<entry class="" argb="255,239,17,33" value="17" />
+			<entry class="" argb="255,234,18,35" value="18" />
+			<entry class="" argb="255,229,19,37" value="19" />
+			<entry class="" argb="255,223,20,39" value="20" />
+			<entry class="" argb="255,218,21,41" value="21" />
+			<entry class="" argb="255,213,22,43" value="22" />
+			<entry class="" argb="255,208,23,45" value="23" />
+			<entry class="" argb="255,203,24,47" value="24" />
+			<entry class="" argb="255,197,25,49" value="25" />
+			<entry class="" argb="255,192,26,51" value="26" />
+			<entry class="" argb="255,187,27,53" value="27" />
+			<entry class="" argb="255,182,28,55" value="28" />
+			<entry class="" argb="255,177,29,57" value="29" />
+			<entry class="" argb="255,172,30,59" value="30" />
+			<entry class="" argb="255,166,31,61" value="31" />
+			<entry class="" argb="255,161,32,63" value="32" />
+			<entry class="" argb="255,156,33,65" value="33" />
+			<entry class="" argb="255,151,34,67" value="34" />
+			<entry class="" argb="255,146,35,69" value="35" />
+			<entry class="" argb="255,140,36,71" value="36" />
+			<entry class="" argb="255,135,37,73" value="37" />
+			<entry class="" argb="255,130,38,75" value="38" />
+			<entry class="" argb="255,125,39,77" value="39" />
+			<entry class="" argb="255,120,40,79" value="40" />
+			<entry class="" argb="255,115,41,81" value="41" />
+			<entry class="" argb="255,109,42,83" value="42" />
+			<entry class="" argb="255,104,43,85" value="43" />
+			<entry class="" argb="255,99,44,87" value="44" />
+			<entry class="" argb="255,94,45,89" value="45" />
+			<entry class="" argb="255,89,46,91" value="46" />
+			<entry class="" argb="255,83,47,93" value="47" />
+			<entry class="" argb="255,78,48,95" value="48" />
+			<entry class="" argb="255,73,49,97" value="49" />
+			<entry class="" argb="255,68,50,99" value="50" />
+			<entry class="" argb="255,63,51,101" value="51" />
+			<entry class="" argb="255,58,52,103" value="52" />
+			<entry class="" argb="255,52,53,105" value="53" />
+			<entry class="" argb="255,47,54,107" value="54" />
+			<entry class="" argb="255,42,55,109" value="55" />
+			<entry class="" argb="255,37,56,111" value="56" />
+			<entry class="" argb="255,32,57,113" value="57" />
+			<entry class="" argb="255,26,58,115" value="58" />
+			<entry class="" argb="255,21,59,117" value="59" />
+			<entry class="" argb="255,16,60,119" value="60" />
+			<entry class="" argb="255,11,61,121" value="61" />
+			<entry class="" argb="255,6,62,123" value="62" />
+			<entry class="" argb="255,0,63,125" value="63" />
+			<entry class="" argb="255,64,64,127" value="64" />
+			<entry class="" argb="255,65,65,129" value="65" />
+			<entry class="" argb="255,66,66,131" value="66" />
+			<entry class="" argb="255,67,67,133" value="67" />
+			<entry class="" argb="255,68,68,135" value="68" />
+			<entry class="" argb="255,69,69,137" value="69" />
+			<entry class="" argb="255,70,70,139" value="70" />
+			<entry class="" argb="255,71,71,141" value="71" />
+			<entry class="" argb="255,72,72,143" value="72" />
+			<entry class="" argb="255,73,73,145" value="73" />
+			<entry class="" argb="255,74,74,147" value="74" />
+			<entry class="" argb="255,75,75,149" value="75" />
+			<entry class="" argb="255,76,76,151" value="76" />
+			<entry class="" argb="255,77,77,153" value="77" />
+			<entry class="" argb="255,78,78,155" value="78" />
+			<entry class="" argb="255,79,79,157" value="79" />
+			<entry class="" argb="255,80,80,159" value="80" />
+			<entry class="" argb="255,81,81,161" value="81" />
+			<entry class="" argb="255,82,82,163" value="82" />
+			<entry class="" argb="255,83,83,165" value="83" />
+			<entry class="" argb="255,84,84,167" value="84" />
+			<entry class="" argb="255,85,85,169" value="85" />
+			<entry class="" argb="255,86,86,171" value="86" />
+			<entry class="" argb="255,87,87,173" value="87" />
+			<entry class="" argb="255,88,88,175" value="88" />
+			<entry class="" argb="255,89,89,177" value="89" />
+			<entry class="" argb="255,90,90,179" value="90" />
+			<entry class="" argb="255,91,91,181" value="91" />
+			<entry class="" argb="255,92,92,183" value="92" />
+			<entry class="" argb="255,93,93,185" value="93" />
+			<entry class="" argb="255,94,94,187" value="94" />
+			<entry class="" argb="255,95,95,189" value="95" />
+			<entry class="" argb="255,96,96,191" value="96" />
+			<entry class="" argb="255,97,97,193" value="97" />
+			<entry class="" argb="255,98,98,195" value="98" />
+			<entry class="" argb="255,99,99,197" value="99" />
+			<entry class="" argb="255,100,100,199" value="100" />
+			<entry class="" argb="255,101,101,201" value="101" />
+			<entry class="" argb="255,102,102,203" value="102" />
+			<entry class="" argb="255,103,103,205" value="103" />
+			<entry class="" argb="255,104,104,207" value="104" />
+			<entry class="" argb="255,105,105,209" value="105" />
+			<entry class="" argb="255,106,106,211" value="106" />
+			<entry class="" argb="255,107,107,213" value="107" />
+			<entry class="" argb="255,108,108,215" value="108" />
+			<entry class="" argb="255,109,109,217" value="109" />
+			<entry class="" argb="255,110,110,219" value="110" />
+			<entry class="" argb="255,111,111,221" value="111" />
+			<entry class="" argb="255,112,112,223" value="112" />
+			<entry class="" argb="255,113,113,225" value="113" />
+			<entry class="" argb="255,114,114,227" value="114" />
+			<entry class="" argb="255,115,115,229" value="115" />
+			<entry class="" argb="255,116,116,231" value="116" />
+			<entry class="" argb="255,117,117,233" value="117" />
+			<entry class="" argb="255,118,118,235" value="118" />
+			<entry class="" argb="255,119,119,237" value="119" />
+			<entry class="" argb="255,120,120,239" value="120" />
+			<entry class="" argb="255,121,121,241" value="121" />
+			<entry class="" argb="255,122,122,243" value="122" />
+			<entry class="" argb="255,123,123,245" value="123" />
+			<entry class="" argb="255,124,124,247" value="124" />
+			<entry class="" argb="255,125,125,249" value="125" />
+			<entry class="" argb="255,126,126,251" value="126" />
+			<entry class="" argb="255,127,127,253" value="127" />
+			<entry class="" argb="255,128,128,255" value="128" />
+			<entry class="" argb="255,129,129,251" value="129" />
+			<entry class="" argb="255,130,130,247" value="130" />
+			<entry class="" argb="255,131,131,243" value="131" />
+			<entry class="" argb="255,132,132,238" value="132" />
+			<entry class="" argb="255,133,133,234" value="133" />
+			<entry class="" argb="255,134,134,230" value="134" />
+			<entry class="" argb="255,135,135,226" value="135" />
+			<entry class="" argb="255,136,136,221" value="136" />
+			<entry class="" argb="255,137,137,217" value="137" />
+			<entry class="" argb="255,138,138,213" value="138" />
+			<entry class="" argb="255,139,139,209" value="139" />
+			<entry class="" argb="255,140,140,204" value="140" />
+			<entry class="" argb="255,141,141,200" value="141" />
+			<entry class="" argb="255,142,142,196" value="142" />
+			<entry class="" argb="255,143,143,192" value="143" />
+			<entry class="" argb="255,144,144,187" value="144" />
+			<entry class="" argb="255,145,145,183" value="145" />
+			<entry class="" argb="255,146,146,179" value="146" />
+			<entry class="" argb="255,147,147,175" value="147" />
+			<entry class="" argb="255,148,148,170" value="148" />
+			<entry class="" argb="255,149,149,166" value="149" />
+			<entry class="" argb="255,150,150,162" value="150" />
+			<entry class="" argb="255,151,151,158" value="151" />
+			<entry class="" argb="255,152,152,153" value="152" />
+			<entry class="" argb="255,153,153,149" value="153" />
+			<entry class="" argb="255,154,154,145" value="154" />
+			<entry class="" argb="255,155,155,141" value="155" />
+			<entry class="" argb="255,156,156,136" value="156" />
+			<entry class="" argb="255,157,157,132" value="157" />
+			<entry class="" argb="255,158,158,128" value="158" />
+			<entry class="" argb="255,159,159,124" value="159" />
+			<entry class="" argb="255,160,160,119" value="160" />
+			<entry class="" argb="255,161,161,115" value="161" />
+			<entry class="" argb="255,162,162,111" value="162" />
+			<entry class="" argb="255,163,163,107" value="163" />
+			<entry class="" argb="255,164,164,102" value="164" />
+			<entry class="" argb="255,165,165,98" value="165" />
+			<entry class="" argb="255,166,166,94" value="166" />
+			<entry class="" argb="255,167,167,90" value="167" />
+			<entry class="" argb="255,168,168,85" value="168" />
+			<entry class="" argb="255,169,169,81" value="169" />
+			<entry class="" argb="255,170,170,77" value="170" />
+			<entry class="" argb="255,171,171,73" value="171" />
+			<entry class="" argb="255,172,172,68" value="172" />
+			<entry class="" argb="255,173,173,64" value="173" />
+			<entry class="" argb="255,174,174,60" value="174" />
+			<entry class="" argb="255,175,175,56" value="175" />
+			<entry class="" argb="255,176,176,51" value="176" />
+			<entry class="" argb="255,177,177,47" value="177" />
+			<entry class="" argb="255,178,178,43" value="178" />
+			<entry class="" argb="255,179,179,39" value="179" />
+			<entry class="" argb="255,180,180,34" value="180" />
+			<entry class="" argb="255,181,181,30" value="181" />
+			<entry class="" argb="255,182,182,26" value="182" />
+			<entry class="" argb="255,183,183,22" value="183" />
+			<entry class="" argb="255,184,184,17" value="184" />
+			<entry class="" argb="255,185,185,13" value="185" />
+			<entry class="" argb="255,186,186,9" value="186" />
+			<entry class="" argb="255,187,187,5" value="187" />
+			<entry class="" argb="255,188,188,0" value="188" />
+			<entry class="" argb="255,189,189,3" value="189" />
+			<entry class="" argb="255,190,190,7" value="190" />
+			<entry class="" argb="255,191,191,11" value="191" />
+			<entry class="" argb="255,192,192,15" value="192" />
+			<entry class="" argb="255,193,193,19" value="193" />
+			<entry class="" argb="255,194,194,22" value="194" />
+			<entry class="" argb="255,195,195,26" value="195" />
+			<entry class="" argb="255,196,196,30" value="196" />
+			<entry class="" argb="255,197,197,34" value="197" />
+			<entry class="" argb="255,198,198,38" value="198" />
+			<entry class="" argb="255,199,199,41" value="199" />
+			<entry class="" argb="255,200,200,45" value="200" />
+			<entry class="" argb="255,201,201,49" value="201" />
+			<entry class="" argb="255,202,202,53" value="202" />
+			<entry class="" argb="255,203,203,57" value="203" />
+			<entry class="" argb="255,204,204,60" value="204" />
+			<entry class="" argb="255,205,205,64" value="205" />
+			<entry class="" argb="255,206,206,68" value="206" />
+			<entry class="" argb="255,207,207,72" value="207" />
+			<entry class="" argb="255,208,208,76" value="208" />
+			<entry class="" argb="255,209,209,79" value="209" />
+			<entry class="" argb="255,210,210,83" value="210" />
+			<entry class="" argb="255,211,211,87" value="211" />
+			<entry class="" argb="255,212,212,91" value="212" />
+			<entry class="" argb="255,213,213,95" value="213" />
+			<entry class="" argb="255,214,214,98" value="214" />
+			<entry class="" argb="255,215,215,102" value="215" />
+			<entry class="" argb="255,216,216,106" value="216" />
+			<entry class="" argb="255,217,217,110" value="217" />
+			<entry class="" argb="255,218,218,114" value="218" />
+			<entry class="" argb="255,219,219,117" value="219" />
+			<entry class="" argb="255,220,220,121" value="220" />
+			<entry class="" argb="255,221,221,125" value="221" />
+			<entry class="" argb="255,222,222,129" value="222" />
+			<entry class="" argb="255,223,223,133" value="223" />
+			<entry class="" argb="255,224,224,137" value="224" />
+			<entry class="" argb="255,225,225,140" value="225" />
+			<entry class="" argb="255,226,226,144" value="226" />
+			<entry class="" argb="255,227,227,148" value="227" />
+			<entry class="" argb="255,228,228,152" value="228" />
+			<entry class="" argb="255,229,229,156" value="229" />
+			<entry class="" argb="255,230,230,159" value="230" />
+			<entry class="" argb="255,231,231,163" value="231" />
+			<entry class="" argb="255,232,232,167" value="232" />
+			<entry class="" argb="255,233,233,171" value="233" />
+			<entry class="" argb="255,234,234,175" value="234" />
+			<entry class="" argb="255,235,235,178" value="235" />
+			<entry class="" argb="255,236,236,182" value="236" />
+			<entry class="" argb="255,237,237,186" value="237" />
+			<entry class="" argb="255,238,238,190" value="238" />
+			<entry class="" argb="255,239,239,194" value="239" />
+			<entry class="" argb="255,240,240,197" value="240" />
+			<entry class="" argb="255,241,241,201" value="241" />
+			<entry class="" argb="255,242,242,205" value="242" />
+			<entry class="" argb="255,243,243,209" value="243" />
+			<entry class="" argb="255,244,244,213" value="244" />
+			<entry class="" argb="255,245,245,216" value="245" />
+			<entry class="" argb="255,246,246,220" value="246" />
+			<entry class="" argb="255,247,247,224" value="247" />
+			<entry class="" argb="255,248,248,228" value="248" />
+			<entry class="" argb="255,249,249,232" value="249" />
+			<entry class="" argb="255,250,250,235" value="250" />
+			<entry class="" argb="255,251,251,239" value="251" />
+			<entry class="" argb="255,252,252,243" value="252" />
+			<entry class="" argb="255,253,253,247" value="253" />
+			<entry class="" argb="255,254,254,251" value="254" />
+			<entry class="" argb="255,255,255,255" value="255" />
+		</table>
+	</palette>
+
+	<palette name="MDT1" interpolate="false">
+		<table>
+			<entry class="C21" argb="255,255,255,255" value="6000" />
+			<entry class="C20" argb="255,226,246,246" value="5000" />
+			<entry class="C19" argb="255,201,232,232" value="4000" />
+			<entry class="C10" argb="255,179,231,217" value="3500" />
+			<entry class="C9" argb="255,179,227,205" value="3000" />
+			<entry class="C8" argb="255,173,221,193" value="2500" />
+			<entry class="C7" argb="255,96,214,136" value="2000" />
+			<entry class="C6" argb="255,54,198,24" value="1500" />
+			<entry class="C5" argb="255,110,213,37" value="1000" />
+			<entry class="C4" argb="255,138,138,11" value="500" />
+			<entry class="C17" argb="255,163,163,10" value="250" />
+			<entry class="C11" argb="255,0,204,255" value="0" />
+			<entry class="C18" argb="255,0,204,255" value="-250" />
+			<entry class="C3" argb="255,0,153,255" value="-500" />
+			<entry class="C2" argb="255,0,51,255" value="-1000" />
+			<entry class="C1" argb="255,51,0,255" value="-1500" />
+			<entry class="C0" argb="255,0,0,204" value="-2000" />
+			<entry class="C12" argb="255,0,51,153" value="-2500" />
+			<entry class="C13" argb="255,0,0,102" value="-3000" />
+			<entry class="C16" argb="255,6,6,73" value="-3500" />
+			<entry class="C15" argb="255,4,22,40" value="-4000" />
+			<entry class="C14" argb="255,0,0,0" value="-10896" />
+		</table>
+	</palette>
+
+	<palette name="MDT2" interpolate="false">
+		<table>
+			<entry class="C21" argb="255,255,255,255" value="6000" />
+			<entry class="C20" argb="255,226,246,246" value="5000" />
+			<entry class="C19" argb="255,201,232,232" value="4000" />
+			<entry class="C10" argb="255,179,231,217" value="3500" />
+			<entry class="C9" argb="255,179,227,205" value="3000" />
+			<entry class="C8" argb="255,173,221,193" value="2500" />
+			<entry class="C7" argb="255,96,214,136" value="2000" />
+			<entry class="C6" argb="255,32,175,83" value="1500" />
+			<entry class="C5" argb="255,90,199,14" value="1000" />
+			<entry class="C4" argb="255,110,138,11" value="500" />
+			<entry class="C17" argb="255,147,163,10" value="250" />
+			<entry class="C11" argb="255,0,204,255" value="0" />
+			<entry class="C18" argb="255,0,204,255" value="-250" />
+			<entry class="C3" argb="255,0,153,255" value="-500" />
+			<entry class="C2" argb="255,30,74,251" value="-1000" />
+			<entry class="C1" argb="255,51,0,255" value="-1500" />
+			<entry class="C0" argb="255,0,0,219" value="-2000" />
+			<entry class="C12" argb="255,15,15,168" value="-2500" />
+			<entry class="C13" argb="255,15,15,153" value="-3000" />
+			<entry class="C16" argb="255,17,17,128" value="-3500" />
+			<entry class="C15" argb="255,14,16,108" value="-4000" />
+			<entry class="C22" argb="255,4,6,78" value="-5000" />
+			<entry class="C23" argb="255,0,0,68" value="-6000" />
+			<entry class="C24" argb="255,0,0,58" value="-7000" />
+			<entry class="C14" argb="255,0,0,0" value="-8000" />
+		</table>
+	</palette>
+	
+	<palette name="CLASIFICACION" interpolate="false">
+		<table>
+			<entry class="C18" argb="255,0,102,255" value="18" />
+			<entry class="C17" argb="255,153,0,255" value="17" />
+			<entry class="C16" argb="255,153,0,153" value="16" />
+			<entry class="C15" argb="255,204,153,255" value="15" />
+			<entry class="C14" argb="255,204,80,17" value="14" />
+			<entry class="C13" argb="255,255,175,0" value="13" />
+			<entry class="C12" argb="255,255,153,102" value="12" />
+			<entry class="C11" argb="255,204,255,51" value="11" />
+			<entry class="C10" argb="255,204,204,0" value="10" />
+			<entry class="C9" argb="255,153,153,0" value="9" />
+			<entry class="C8" argb="255,204,0,102" value="8" />
+			<entry class="C7" argb="255,0,153,51" value="7" />
+			<entry class="C6" argb="255,51,204,0" value="6" />
+			<entry class="C5" argb="255,231,231,12" value="5" />
+			<entry class="C4" argb="255,12,118,119" value="4" />
+			<entry class="C3" argb="255,174,177,7" value="3" />
+			<entry class="C2" argb="255,67,97,69" value="2" />
+			<entry class="C1" argb="255,4,126,4" value="1" />
+		</table>
+	</palette>
+</palettes>

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/palettes.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_zh.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_zh.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_zh.properties	(revision 10281)
@@ -0,0 +1,691 @@
+#Translations for language [en]
+#Thu Sep 28 13:19:48 CEST 2006
+(escala_maxima)=(\u6700\u5927\u6bd4\u4f8b)
+(escala_minima)=(\u6700\u5c0f\u6bd4\u4f8b)
+1\:=
+_(Simbolo_unico)=(\u552f\u4e00\u7b26\u53f7)
+__proyeccion_actual=\u76ee\u524d\u6295\u5f71\:
+__redimensionar_texto_escala=\u5c06\u6b63\u6587\u8c03\u6574\u5230\u89c6\u56fe\u6bd4\u4f8b
+__seleccion_de_fuente=\u5b57\u7b26\u9009\u62e9
+A0=A0
+A1=A1
+A2=A2
+A3=A3\
+A4=A4
+abajo=\u5411\u4e0b
+abrir=\u6253\u5f00
+abrir_plantilla=\u6253\u5f00\u6a21\u677f
+abrir_proyecto=\u6253\u5f00\u9879\u76ee
+abrir_tooltip=\u6253\u5f00\u5df2\u6709\u7684\u9879\u76ee
+Abrir_una_capa=\u6253\u5f00\u56fe\u5c42
+Accion_Predefinida=\u9884\u5b9a\u4f5c\u7528
+aceptar=\u786e\u5b9a
+Aceptar=\u786e\u5b9a
+acerca_de=\u5173\u4e8e...
+activar=\u6fc0\u6d3b
+activar_regla=\u6fc0\u6d3b\u6807\u5c3a
+activos=\u6fc0\u6d3b
+add_delete_edit_fields=\u5b57\u6bb5\u53ef\u52a0\u5165\uff0c\u5220\u9664 \u6216 \u91cd\u547d\u540d
+add_rows=\u52a0\u884c
+adjust_transparency=\u8bbe\u7f6e\u900f\u660e
+agrupacion=\u7ec4\u5408
+agrupar=\u96c6\u5408
+agrupar_capas=\u96c6\u5408\u56fe\u5c42
+agrupar_graficos=\u96c6\u5408\u56fe\u8868
+agrupar_linea=\u5c06\u7ebf\u6761\u548c\u56fe\u7247\u5408\u5e76
+Ajustar_transparencia=\u8c03\u6574\u900f\u660e
+ajustes_linea_grafica=\u56fe\u7ebf\u8bbe\u7f6e
+Al_leer_la_leyenda=\u6b63\u5728\u8bfb\u53d6\u56fe\u4f8b\u4e2d
+alias=\u522b\u53f7
+align_center=\u5411\u4e2d\u5bf9\u9f50
+align_down=\u5411\u4e0b\u5bf9\u9f50
+align_left=\u5411\u5de6\u5bf9\u9f50
+align_right=\u5411\u53f3\u5bf9\u9f50
+align_to_layout_center=\u5411\u9875\u9762\u4e2d\u95f4\u5bf9\u9f50
+align_to_layout_down=\u5411\u9875\u9762\u4e0b\u9762\u5bf9\u9f50
+align_to_layout_left=\u5411\u9875\u9762\u5de6\u8fb9\u5bf9\u9f50
+align_to_layout_right=\u5411\u9875\u9762\u53f3\u8fb9\u5bf9\u9f50
+align_to_layout_up=\u5411\u9875\u9762\u4e0a\u9762\u5bf9\u9f50
+align_to_layout_vertical_center=\u5411\u9875\u9762\u5782\u7ebf\u4e2d\u95f4\u5bf9\u9f50
+align_up=\u5411\u4e0a\u5bf9\u9f50
+align_vertical_center=\u5411\u5782\u7ebf\u4e2d\u95f4\u5bf9\u9f50
+alineamiento=\u5bf9\u9f50\:
+alinear=\u5bf9\u9f50
+alinear_graficos=\u5bf9\u9f50\u56fe\u7247
+alta=\u9ad8
+alto=\u9ad8\u5ea6
+altura=\u9ad8\u5ea6\:
+Altura_fija_de_texto=\u56fa\u5b9a\u6587\u672c\u7684\u9ad8\u5ea6
+ambito=\u8303\u56f4
+Anadir=\u6dfb\u52a0
+Anadir_al_conjunto=\u6dfb\u52a0\u5230\u7cfb\u5217\u91cc
+Anadir_capa=\u6dfb\u52a0\u56fe\u5c42
+Anadir_Capa=\u6dfb\u52a0\u56fe\u5c42
+anadir_tag=\u6dfb\u52a0\u6807\u8bb0
+Anadir_todos=\u6dfb\u52a0\u5168\u90e8
+ancho=\u5bbd\u5ea6
+ancho_alto=\u5bbd\u5ea6 X \u9ad8\u5ea6
+anchura=\u5bbd\u5ea6\:
+Aplicar=\u8fd0\u7528
+Archivo=\u6587\u4ef6
+arriba=\u4e0a\u9762
+ascending_order=\u4e0a\u5347\u987a\u5e8f
+ascending_order_tooltip=\u6309\u9009\u62e9\u7684\u5b57\u6bb5\u4e0a\u5347\u987a\u5e8f\u6392\u5217
+Atributo=\u7279\u6027
+automatico=\u81ea\u52a8
+Ayuda=\u5e2e\u52a9
+back=\u540e\u9000
+background_color=\u80cc\u666f\u989c\u8272
+baja=\u4f4e
+Bajar_capa=\u628a\u56fe\u5c42\u5411\u4e0b\u79fb
+bandas=\u6ce2\u6bb5
+barra=\u6bd4\u4f8b\u5c3a\:
+base=\u57fa\u7840
+base_datos=\u6570\u636e\u5e93
+bmp=BMP \u6587\u4ef6
+Bold=\u7c97\u4f53
+borra_seleccion=\u5220\u9664\u5df2\u9009\u7684
+borrador=\u8349\u7a3f
+borrar=\u5220\u9664
+box=\u6846\u5b50
+brillo=\u4eae\u5ea6
+brillo_y_contraste=\u4eae\u5ea6\u548c\u5bf9\u6bd4\u5ea6
+browse=\u6d4f\u89c8
+cajetin=\u6846\u5b50
+Calcular_intervalos=\u8ba1\u7b97\u8ddd\u79bb
+calidad=\u8d28\u91cf
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=\u628a\u5df2\u9009\u90e8\u5206\u7684\u9ad8\u5ea6\u66f4\u6539\u6210\u548c\u6700\u9ad8\u7684\u90a3\u90e8\u5206\u4e00\u81f4\u3002
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=\u628a\u5df2\u9009\u90e8\u5206\u7684\u5bbd\u5ea6\u66f4\u6539\u6210\u548c\u6700\u5bbd\u7684\u90a3\u90e8\u5206\u4e00\u81f4\u3002
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=\u628a\u5df2\u9009\u90e8\u5206\u7684\u5927\u5c0f\u66f4\u6539\u6210\u548c\u6700\u5927\u7684\u90a3\u90e8\u5206\u4e00\u81f4\u3002
+Cambio_Color=\u66f4\u6539\u989c\u8272
+cambio_nombre=\u91cd\u547d\u540d
+campo=\u5b57\u6bb5
+Campo=\u5b57\u6bb5
+campo_altura_texto=\u6587\u672c\u5b57\u6bb5\u7684\u9ad8\u5ea6\:
+Campo_de_clasificacion=\u5b57\u6bb5\u5206\u7ea7
+Campo_de_etiquetado=\u6807\u7b7e\u5b57\u6bb5
+Campos=\u5b57\u6bb5
+cancel=\u53d6\u6d88
+Cancel=\u53d6\u6d88
+cancelar=\u53d6\u6d88
+Cancelar=\u53d6\u6d88
+Capa=\u56fe\u5c42
+Capas=\u56fe\u5c42
+Capas_del_localizador=\u641c\u7d22\u5668\u7684\u56fe\u5c42
+Centimetros=\u5398\u7c73
+cerrar=\u5173\u95ed
+Cerrar=\u5173\u95ed
+change=\u66f4\u6539
+change_before=\u5728\u5bf9\u8c61\u4e4b\u524d
+change_behind=\u5728\u5bf9\u8c61\u4e4b\u540e
+change_height=\u66f4\u6539\u9ad8\u5ea6
+change_width=\u66f4\u6539\u5bbd\u5ea6
+circulo=\u5706\u5f62
+clave=\u5bc6\u7801
+coincidir_tamanyo=\u4f7f\u5927\u5c0f\u76f8\u914d
+colocar_a_margenes=\u653e\u5728\u4e0e\u8fb9\u8ddd\u6709\u5173\u3002
+colocar_alrededor_seleccionados=\u653e\u5728\u5df2\u9009\u56fe\u7247\u7684\u5468\u56f4\u3002
+colocar_alrededor_todos=\u653e\u5728\u6240\u6709\u56fe\u7247\u7684\u5468\u56f4\u3002
+colocar_delante=\u79fb\u5230\u6700\u4e0a\u9762
+colocar_detras=\u79fb\u5230\u5e95\u5c42
+color=\u989c\u8272\:
+Color_final=\u989c\u8272(\u81f3)\:
+Color_inicio=\u989c\u8272(\u4ece)\:
+color_texto=\u6587\u672c\u989c\u8272\:
+comentarios=\u8bf4\u660e
+comenzar_edicion=
+configurar=\u914d\u7f6e
+configurar_localizador=\u914d\u7f6e\u641c\u7d22\u5668
+Configurar_localizador=\u914d\u7f6e\u641c\u7d22\u5668 ...
+confirmar_borrar=\u8fd9\u4e2a\u5143\u4ef6\u5c06\u88ab\u5220\u9664\uff0c\u540c\u610f\u5417?
+conflicto_de_nombres_de_mapas_al_pegar=\u60a8\u6b63\u5728\u7c98\u8d34\u5728\u76ee\u524d\u9879\u76ee\u4e0a\u5df2\u6709\u7684\u5730\u56fe\u3002
+conflicto_de_nombres_de_tablas_al_pegar=\u60a8\u6b63\u5728\u7c98\u8d34\u5728\u76ee\u524d\u9879\u76ee\u4e0a\u5df2\u6709\u7684\u8868\u683c\u3002
+conflicto_de_nombres_de_vistas_al_pegar=\u60a8\u6b63\u5728\u7c98\u8d34\u5728\u76ee\u524d\u9879\u76ee\u4e0a\u5df2\u6709\u7684\u89c6\u56fe\u3002
+conflito_de_nombres_de_tablas_al_pegar=\u5728\u7c98\u8d34\u65f6\u8868\u683c\u547d\u540d\u53d1\u751f\u51b2\u7a81
+conservar_escala_visualizacion=\u4fdd\u6301\u89c6\u56fe\u6bd4\u4f8b
+consulta=\u67e5\u8be2
+Contengan=\u5305\u62ec
+contraste=\u5bf9\u6bd4\u5ea6
+coor_geograficas=\u5730\u7406\u5750\u6807
+copiar=\u590d\u5236
+copy=\u590d\u5236
+cortar=\u526a\u5207
+creation_date=\u521b\u5efa\u65e5\u671f
+Crucen_con=\u4e8e .. \u4ea4\u53c9
+cuando_activo=\u6fc0\u6d3b\u65f6
+cut=\u526a\u5207
+Dado_un_campo_de_atributos=\u5df2\u77e5\u7684\u7279\u6027\u5b57\u6bb5
+datum=\u8d44\u6599
+debera_introducir_nombres_para_las_vistas_a_pegar=\u4f60\u9700\u8981\u7ed9\u89c6\u56fe\u8f93\u5165\u65b0\u540d\u79f0
+debera_introducir_nombres_para_los_mapas_a_pegar=\u4f60\u9700\u8981\u7ed9\u5730\u56fe\u8f93\u5165\u65b0\u547d\u540d
+default_projection=\u9ed8\u8ba4\u6295\u5f71
+default_value=\u9ed8\u8ba4\u503c
+dehacer=\u53d6\u6d88
+delete_field=\u5220\u9664\u5b57\u6bb5
+Derecha=\u53f3
+Derecho=\u53f3\u8fb9
+desagrupar=\u53d6\u6d88\u7ec4\u5408
+desagrupar_capas=\u628a\u56fe\u5c42\u53d6\u6d88\u7ec4\u5408
+desagrupar_graficos=\u628a\u56fe\u7247\u53d6\u6d88\u7ec4\u5408
+descending_order=\u4e0b\u964d\u987a\u5e8f
+descending_order_tooltip=\u6309\u9009\u62e9\u7684\u5b57\u6bb5\u4e0b\u964d\u987a\u5e8f\u6392\u5217
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>\u60a8\u8981\u662f\u5bf9\u56fe\u5c42\u7684\u6240\u6709\u7279\u6027\u4f7f\u7528\u5171\u540c\u503c\u7684\u8bdd\uff0c\u5c06\u8981\u4fdd\u6301\u9ed8\u8ba4\u503c\u3002\u5982\u679c\u60a8\u8981\u5b9a\u5236\u6807\u7b7e\u8bf7\u9009\u62e9\u6709\u5173\u5b57\u6bb5\u3002</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>\u6b64\u5de5\u5177\u5c06\u53ef\u4ee5\u521b\u5efa\u57fa\u4e8e\u5df2\u6709\u56fe\u5c42\u7684\u65b0\u865a\u62df\u5c42\uff0c\u8fd9\u6837\u5c31\u5141\u8bb8\u60a8\u5236\u4f5c\u9ad8\u7ea7\u6807\u7b7e\u3002 \u6539\u53d8\u5df2\u9009\u56fe\u5c42\u89c6\u56fe\uff0c\u663e\u793a\u5b57\u6bb5\u6570\u636e\u4e4b\u4e00\u3002</HTML>
+desde_arriba=\u4ece\u4e0a\:
+desde_izquierda=\u4ece\u5de6\:
+desea_borrar_el_documento=\u786e\u5b9e\u8981\u628a\u5df2\u9009\u7684\u6587\u6863\u5220\u9664\u4e86\u5417?
+desea_borrar_la_capa=\u786e\u5b9e\u8981\u628a\u6fc0\u6d3b\u7684\u56fe\u5c42\u5220\u9664\u4e86\u5417?
+desea_continuar=\u8981\u7ee7\u7eed\u5417?
+deshacer=\u53d6\u6d88
+desplaza_los_elementos_seleccionados_a_la_derecha=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u53f3\u8fb9\u3002
+desplaza_los_elementos_seleccionados_a_la_izquierda=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u5de6\u8fb9\u3002
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=\u5c06\u5df2\u9009\u90e8\u5206\u5728X\u8f74\u4e0a\u79fb\u5230\u4e2d\u95f4\u3002
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=\u5c06\u5df2\u9009\u90e8\u5206\u5728Y\u8f74\u4e0a\u79fb\u5230\u4e2d\u95f4\u3002
+desplaza_los_elementos_seleccionados_hacia_abajo=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u4e0b\u9762\u3002
+desplaza_los_elementos_seleccionados_hacia_arriba=\u5c06\u5df2\u9009\u90e8\u5206\u79fb\u5230\u4e0a\u9762\u3002
+Desplazamiento=\u624b\u5f62\u5de5\u5177
+desviacion_tipica=\u6807\u51c6\u5dee
+distance_units=\u6d4b\u91cf\u5355\u4f4d
+distribuir=\u5206\u914d\:
+distribuir_elementos_sobre_todo_el_layout=\u5c06\u6240\u6709\u90e8\u5206\u6392\u5217\u5728\u6574\u4e2a\u9875\u9762\u3002
+distributes_down=\u6392\u5217\u5230\u4e0b\u9762
+distributes_horizontal=\u6c34\u5e73\u5730\u6392\u5217
+distributes_left=\u6392\u5217\u5230\u5de6\u8fb9
+distributes_right=\u6392\u5217\u5230\u53f3\u8fb9
+distributes_to_layout_down=\u4ece\u9875\u9762\u4e0b\u9762\u6392\u5217
+distributes_to_layout_horizontal=\u4ece\u9875\u9762\u6c34\u5e73\u5730\u6392\u5217
+distributes_to_layout_left=\u4ece\u9875\u9762\u5de6\u8fb9\u6392\u5217
+distributes_to_layout_right=\u4ece\u9875\u9762\u53f3\u8fb9\u6392\u5217
+distributes_to_layout_up=\u4ece\u9875\u9762\u4e0a\u9762\u6392\u5217
+distributes_to_layout_vertical=\u4ece\u9875\u9762\u5782\u76f4\u5730\u6392\u5217
+distributes_up=\u6392\u5217\u5230\u4e0a\u9762
+distributes_vertical=\u5782\u76f4\u5730\u6392\u5217
+distribuye_el_espacio_entre_los_elementos_en_horizontal=\u628a\u7a7a\u95f4\u5728\u90e8\u5206\u4e2d\u6c34\u5e73\u5730\u6392\u5217\u3002
+distribuye_el_espacio_entre_los_elementos_en_vertical=\u628a\u7a7a\u95f4\u5728\u90e8\u5206\u4e2d\u5782\u76f4\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u4e0b\u5f80\u4e0a\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u4e0a\u5f80\u4e0b\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u53f3\u5f80\u5de6\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u5de6\u5f80\u53f3\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u6c34\u5e73\u7ebf\u4e0a\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=\u5c06\u5df2\u9009\u7684\u90e8\u5206\u4ece\u5782\u76f4\u7ebf\u4e0a\u8ddd\u79bb\u76f8\u7b49\u5730\u6392\u5217\u3002
+divisiones_izquierda=\u5de6\u8fb9\u7684\u95f4\u9694
+documentos_existentes=\u5df2\u5b58\u7684\u6587\u6863
+draw_text_only=\u53ea\u5199\u6b63\u6587
+driver=\u9a71\u52a8\u7a0b\u5e8f
+Dxffiles=DXF \u6587\u4ef6
+edicion=\u7248\u672c
+editable=\u53ef\u7f16\u8f91\u7684
+Editar_leyenda=\u7f16\u8f91\u6837\u5f0f
+editar_vertices=\u7f16\u8f91\u9876\u70b9
+el_numero_maximo_de_intervalos_para_este_campo_es=\u5728\u8fd9\u4e2a\u5b57\u6bb5\u91cc\u7684\u6700\u5927\u95f4\u9694\u6570\u662f
+Elegir_Color=\u9009\u62e9\u989c\u8272
+Elegir_Fuente=\u9009\u62e9\u5b57\u4f53
+elemento_ya_existe=\u5143\u4ef6\u5df2\u5b58\u5728
+Elementos_seleccionados_de_la_capa=\u56fe\u5c42\u5df2\u9009\u7684\u9879\u76ee
+Eliminar=\u5220\u9664
+eliminar_capa=\u5220\u9664\u56fe\u5c42
+eliminar_columna=\u5220\u9664\u5217
+eliminar_extremos=\u5220\u9664\u8fb9\u7f18
+eliminar_fila=\u5220\u9664\u884c
+en_el_mapa=\u5728\u8bbe\u8ba1\u56fe\:
+En_metros=\u5398\u7c73
+En_pixels=\u50cf\u7d20
+en_unidades=\u5355\u4f4d
+Encuadre=\u624b\u5f62\u5de5\u5177
+Encuadre_Vista=\u624b\u5f62\u5de5\u5177
+enlace_vivo=\u6d3b\u52a8\u94fe\u63a5
+Enlazar_a_fichero_de_texto=\u8fde\u63a5\u5230\u6587\u672c\u6587\u6863
+Enlazar_a_ficheros_de_imagen=\u8fde\u63a5\u5230\u56fe\u50cf\u6587\u6863
+equal_intervals=\u8ddd\u79bb\u76f8\u7b49
+Error_exportando_SLD=\u8f93\u51fa SLD \u65f6\u51fa\u9519
+Error_guardando_la_leyenda=\u5b58\u56fe\u4f8b\u65f6\u51fa\u9519
+Error_guardando_la_plantilla=\u5b58\u6a21\u677f\u65f6\u51fa\u9519
+escala=\u6bd4\u4f8b
+Escala=\u6bd4\u4f8b
+escala_desconocida=\u672a\u77e5\u6bd4\u4f8b
+escala_maxima=\u6700\u5927\u6bd4\u4f8b
+Escala_Maxima=\u6700\u5927\u6bd4\u4f8b
+escala_minima=\u6700\u5c0f\u6bd4\u4f8b
+Escala_Minima=\u6700\u5c0f\u6bd4\u4f8b
+escala_usuario=\u7528\u6237\u6307\u5b9a\u7684\u6bd4\u4f8b
+espaciado_horizontal=\u6805\u683c\u6c34\u5e73\u7a7a\u95f4
+espaciado_vertical=\u6805\u683c\u5782\u76f4\u7a7a\u95f4
+espacio=\u7a7a\u95f4\:
+estadisticas=\u7edf\u8ba1
+este_por_debajo_de_=\u5728...\u4e0b
+este_por_encima_de=\u5728...\u4e0a
+Esten_contenidos_en=\u5305\u542b\u5728...\u4e2d
+Etiqueta=\u6807\u7b7e
+Etiquetados=\u6807\u7b7e
+etiquetas=\u6807\u7b7e\:
+Etiquetas_estandar=\u6807\u51c6\u6807\u8bb0
+Examinar=\u6d4f\u89c8
+export=\u8f93\u51fa
+exportar=\u8f93\u51fa
+exportar_pdf=\u8f93\u51fa\u6210 PDF
+exportar_ps=\u8f93\u51fa\u6210 PS
+extension=\u6269\u5c55\u540d
+Extent=\u56fe\u5c42\u6846\u67b6
+extents_no_coincidentes=\u6269\u5c55\u540d\u4e0d\u4e00\u81f4\u3002
+factor_zoom_incorrecto=\u7f29\u653e\u56e0\u5b50\u4e0d\u6b63\u786e
+fallo_capas=\u8fdb\u5165\u56fe\u5c42\u65f6\u51fa\u9519\u3002  \u4e0b\u5217\u56fe\u5c42\u5c06\u4ece\u9879\u76ee\u4e2d\u5220\u9664\u6389\u3002
+fichero=\u6587\u4ef6
+Fichero=\u6587\u4ef6
+fichero_existe=\u6587\u4ef6\u5df2\u5b58\u5728
+fichero_incorrecto=\u65e0\u6548\u7684\u6587\u4ef6
+fichero_ya_existe_seguro_desea_guardarlo=\u6587\u4ef6\u5df2\u5b58\u5728\uff0c\u60a8\u8981\u7ee7\u7eed\u5417?
+field_already_exists=\u5b57\u6bb5\u5df2\u5b58\u5728
+field_decimal_count=\u5c0f\u6570\u70b9\u4f4d\u6570
+field_default_value=\u9ed8\u8ba4\u503c
+field_length=\u957f\u5ea6
+field_manager=\u5b57\u6bb5\u7ba1\u7406\u5668
+field_name=\u5b57\u6bb5\u547d\u540d
+field_type=\u6837\u5f0f
+filtro=\u7b5b\u9009
+finish=\u5b8c\u6210
+Font=\u5b57\u4f53
+formato=\u683c\u5f0f
+Formato_de_numero_erroneo=\u6570\u5b57\u683c\u5f0f\u65e0\u6548
+formato_incorrecto=\u65e0\u6548\u7684\u683c\u5f0f
+fuente=\u5b57\u4f53
+General=\u57fa\u672c\u8bbe\u7f6e
+georeferenciado=\u5730\u7406\u53c2\u8003
+gestion_encuadre=\u653e\u5927\u7ba1\u7406\u5668
+grados=\u89d2\u5ea6\:
+Grados=\u89d2\u5ea6
+Graficos=\u56fe\u7247
+grosor_linea=\u7ebf\u6761\u5bbd\u5ea6\:
+group=\u5408\u5e76
+group_graphic_line=\u56fe\u7247\u7ebf\u6761\u5408\u5e76
+grupo=\u7ec4
+guardado=\u5b58\u76d8\u5728
+guardar=\u5b58\u76d8
+Guardar=\u5b58\u76d8
+guardar_cambios=\u8981\u5b58\u76d8\u8fd9\u4e9b\u66f4\u6539\u5417?
+guardar_como=\u53e6\u5b58\u4e3a...
+guardar_como_plantilla=\u53e6\u5b58\u4e3a\u6a21\u677f
+Guardar_el_zoom_actual=\u5b58\u76d8\u76ee\u524d\u7684\u7f29\u653e
+Guardar_leyenda=\u4fdd\u5b58\u56fe\u4f8b
+guardar_proyecto=\u4fdd\u5b58\u9879\u76ee
+guardar_tooltip=\u4fdd\u5b58\u9879\u76ee\u4fee\u6539
+Habilitar_etiquetado=\u663e\u793a\u6807\u7b7e
+Hiperenlace=\u8d85\u7ea7\u8fde\u63a5
+horizontal=\u6c34\u5e73\u7684
+horizontal_space=\u6c34\u5e73\u7684\u7a7a\u95f4
+Identificar_Resultados=\u786e\u8ba4\u7ed3\u679c
+Igual_que_la_impresora=\u8ddf\u6253\u5370\u673a\u4e00\u81f4
+igual_todos_lados=\u5411\u6bcf\u8fb9\u4e00\u81f4\u5730\u79fb\u52a8\u3002
+imagen=\u56fe\u7247
+importar=\u8f93\u5165
+Imprimir=\u6253\u5370
+Indexando=\u7d22\u5f15...
+Indexando_espacialmente=\u56fe\u5c42\u7a7a\u95f4\u7d22\u5f15
+indexar_campos=\u5b57\u6bb5\u7d22\u5f15
+Inferior=\u4e0b
+info=\u4fe1\u606f
+informacion=\u4fe1\u606f
+Informacion=\u4fe1\u606f
+Inicializando=\u542f\u52a8\u4e2d
+initial_warning=<html><b>\u6ce8\u610f\!</b><br>\u5f00\u53d1\u7248\u3002 \u53ef\u80fd\u542b\u6709\u91cd\u8981\u9519\u8bef\uff0c\u5e76\u4e14\u5c06\u4f1a\u628a\u5df2\u7f16\u8f91\u597d\u7684\u6587\u4ef6\u4f24\u5bb3\u3002<br><br>\u5411\u60a8\u4eec\u63a8\u8350\u6700\u65b0\u7a33\u5b9a\u7684\u7248\u672c\u3002</html>
+insert_row=\u63d2\u5165\u884c
+Insertar=\u63d2\u5165
+insertar_cajetin=\u63d2\u5165\u6805\u683c
+insertar_circulo=\u63d2\u5165\u5706\u5f62
+insertar_columna=\u63d2\u5165\u5217
+insertar_escala=\u63d2\u5165\u6bd4\u4f8b
+insertar_fila=\u63d2\u5165\u884c
+insertar_imagen=\u63d2\u5165\u56fe\u7247
+insertar_leyenda=\u63d2\u5165\u56fe\u4f8b
+insertar_linea=\u63d2\u5165\u7ebf\u6761
+insertar_norte=\u63d2\u5165\u5317\u65b9
+insertar_poligono=\u63d2\u5165\u591a\u8fb9\u5f62
+insertar_polilinea=\u63d2\u5165\u6298\u7ebf
+insertar_punto=\u63d2\u5165\u6807\u70b9
+insertar_rectangulo=\u63d2\u5165\u65b9\u5f62
+insertar_texto=\u63d2\u5165\u6587\u5b57
+insertar_vista=\u63d2\u5165\u89c6\u56fe
+Intersecten_con=\u4e8e...\u4ea4\u53c9
+Intervalo=\u95f4\u9694
+Intervalos=\u95f4\u9694
+introduce_nombre=\u8bf7\u8f93\u5165\u65b0\u540d\u79f0
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=\u8bf7\u7ed9\u65b0\u5efa\u6ce8\u89e3\u5c42\u8f93\u5165\u65b0\u540d\u79f0
+introduzca_nuevo_nombre_para_la_vista=\u8bf7\u7ed9\u65b0\u5efa\u89c6\u56fe\u8f93\u5165\u65b0\u540d\u79f0
+invert_selection=\u8f6c\u5316\u9009\u62e9
+Italic=\u659c\u4f53
+Izquierda=\u5de6
+Izquierdo=\u5de6\u8fb9
+join=\u8054\u63a5
+jpg=JPEG \u6587\u4ef6
+kilometros=\u516c\u91cc
+Kilometros=\u516c\u91cc
+leyenda=\u56fe\u4f8b
+Leyenda=\u56fe\u4f8b
+leyenda_campo_unido=\u60a8\u5728\u56fe\u4f8b\uff08\u548c/\u6216 \u6807\u7b7e\uff09\u4e0a\u4f7f\u7528\u4e00\u4e2a\u5408\u5e76\u7684\u5b57\u6bb5\u3002\u8bf7\u5728\u53d6\u6d88\u5408\u5e76\u4e4b\u524d\u66f4\u6539\u56fe\u4f8b\u3002
+Leyenda_Por_Defecto=\u9ed8\u8ba4\u56fe\u4f8b
+linea=\u7ebf\u6761
+linea_grafica=\u56fe\u7247\u7ebf\u6761
+lineal_directo=\u76f4\u63a5\u7ebf\u6027
+link=\u94fe\u63a5
+Link=\u94fe\u63a5
+localizador=\u5b9a\u4f4d\u5668
+locked_element=\u5143\u7d20\u88ab\u9501\u5b9a
+locked_element_it_cannot_be_deleted=\u5143\u7d20\u88ab\u9501\u5b9a\u3002\n\u65e0\u6cd5\u5220\u9664\u5b83\u3002
+locked_element_it_cannot_be_renamed=\u5143\u7d20\u88ab\u9501\u5b9a\u3002\n\u65e0\u6cd5\u91cd\u547d\u540d\u3002
+m/pixel=\u7c73/\u50cf\u7d20
+malla_activada=\u6fc0\u6d3b\u6805\u683c
+manage_fields=\u66f4\u6539\u8868\u683c\u7684\u7ed3\u6784
+mantener_intervalo=\u4fdd\u6301\u5dee\u8ddd
+map_units=\u5730\u56fe\u5355\u4f4d
+mapa=\u5730\u56fe
+Mapa=\u5730\u56fe
+mapas=\u5730\u56fe
+marco=\u6846\u67b6
+marco_vista=\u89c6\u56fe\u6846\u67b6
+margenes=\u8fb9\u8ddd\:
+mas_de_100_simbolos=\u6709100\u591a\u4e2a\u7b26\u53f7\u4e00\u822c\u5728\u5730\u56fe\u4e0a\u4e0d\u4f1a\u663e\u793a\u4fe1\u606f
+max_length_is=\u6700\u5927\u957f\u5ea6\u662f
+maximo=\u6700\u5927\u503c
+MDIFrame.quiere_salir=\u9000\u51fa gvSIG?
+MDIFrame.salir=\u9000\u51fa
+media=\u5e73\u5747\u503c
+medir_area=\u9762\u79ef\u6d4b\u91cf
+medir_distancias=\u8ddd\u79bb\u6d4b\u91cf
+metadatos=\u5143\u6570\u636e
+metros=\u7c73
+Metros=\u7c73
+Milimetros=\u6beb\u7c73
+Millas=\u82f1\u91cc
+minimo=\u6700\u5c0f\u503c
+modificar=\u66f4\u6539
+modification_date=\u66f4\u6539\u65e5\u671f
+mostrar_escala_numerica=\u663e\u793a\u6570\u5b57\u6bd4\u4f8b
+Mostrar_siempre=\u59cb\u7ec8\u663e\u793a
+mostrar_unidades=\u663e\u793a\u5355\u4f4d
+move_elements=\u90e8\u5206\u79fb\u52a8
+Muestra_atributos=\u663e\u793a\u5df2\u9009\u56fe\u5c42\u7684\u7279\u6027\u3002
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=\u4f7f\u7528\u6bcf\u4e2a\u5355\u503c\u56fe\u7684\u7b26\u53f7\u663e\u793a\u56fe\u5c42\u5143\u7d20
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=\u4f7f\u7528\u591a\u79cd\u989c\u8272\u5e76\u6839\u636e\u67d0\u4e00\u4e2a\u5b57\u6bb5\u7279\u6027\u663e\u793a\u56fe\u5c42\u5143\u7d20
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=\u4f7f\u7528\u552f\u4e00\u7b26\u53f7\u663e\u793a\u56fe\u5c42\u6240\u6709\u5143\u7d20
+natural_intervals=\u81ea\u7136\u5212\u5206 (Natural Break)
+navegacion=\u6d4f\u89c8
+navegacion_vista=\u5728\u89c6\u56fe\u4e0a\u6d4f\u89c8
+necesita_una_capa_activa=\u9700\u8981\u4e00\u5c42\u6fc0\u6d3b\u7684\u56fe\u5c42
+necesita_una_capa_vectorial_activa=\u9700\u8981\u4e00\u5c42\u6fc0\u6d3b\u7684 Vectorial \u56fe\u5c42
+new_field=\u65b0\u5efa\u5b57\u6bb5
+new_field_properties=\u65b0\u5efa\u5b57\u6bb5\u5c5e\u6027
+next=\u524d\u8fdb
+ninguna_impresora_configurada=\u65e0\u6253\u5370\u673a\u8bbe\u7f6e
+Nivel_de_transparencia=\u900f\u660e\u5ea6
+no=\u820d\u5f03
+no_activos=\u672a\u6fc0\u6d3b
+No_de_intervalos=\u95f4\u9694\u6570
+No_ha_sido_posible_realizar_la_operacion=\u64cd\u4f5c\u65e0\u6cd5\u8fd0\u884c\u3002
+No_mostrar=\u4e0d\u663e\u793a\u56fe\u5c42\u5f53\u56fe\u4f8b
+No_mostrar_la_capa_cuando_la_escala=\u4e0d\u663e\u793a\u56fe\u5c42\u5f53\u56fe\u4f8b
+no_se_pegaran_las_tablas=\u4e0d\u4f1a\u7c98\u8d34\u4efb\u4f55\u8868\u683c
+no_se_pegaran_las_vistas_del_conflicto=\u4e0d\u4f1a\u7c98\u8d34\u6709\u51b2\u7a81\u7684\u89c6
+No_se_pudo_obtener_la_tabla_de_la_capa=\u65e0\u6cd5\u4ece\u56fe\u5c42\u4e2d\u63d0\u53d6\u8868\u683c
+no_visibles=\u83ab\u663e\u793a
+nombre=\u6587\u4ef6\u540d
+Nombre=\u6587\u4ef6\u540d
+nombre_no_valido=\u6587\u4ef6\u540d\u65e0\u6548
+Nombre_que_se_le_dara_al_zoom=\u7ed9\u7f29\u653e\u7684\u540d\u79f0
+nombre_sesion=\u540d\u79f0
+normal=Normal
+north=\u5317\u65b9
+Nueva_tabla=\u65b0\u5efa\u8868\u683c
+nuevo=\u65b0\u5efa
+Nuevo_conjunto=\u65b0\u5efa\u7cfb\u5217
+nuevo_nombre_para_el_mapa=\u7ed9\u56fe\u5c42\u8f93\u5165\u65b0\u540d\u79f0
+nuevo_proyecto=\u65b0\u5efa\u9879\u76ee
+nuevo_tooltip=\u5236\u9020\u65b0\u9879\u76ee
+num_bandas=\u5e26\u6570
+num_columnas=\u5217\u6570
+num_filas=\u884c\u6570
+Num_intervalos=\u95f4\u9694\u6570
+numero_decimales_mostrar=
+numero_incorrecto=\u65e0\u6548\u6570\u636e
+ok=\u786e\u5b9a
+opacidad=\u4e0d\u900f\u660e\u5ea6
+operacion_cancelada=\u53d6\u6d88\u4efb\u52a1
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=\u65b9\u5411\:
+origen_de_datos=\u6570\u636e\u6765\u6e90
+Origen_de_datos=\u6570\u636e\u6765\u6e90
+Origen_de_Datos=\u6570\u636e\u6765\u6e90\:
+owner=\u6240\u6709\u8005
+paste=\u7c98\u8d34
+paste_elements=\u7c98\u8d34\u90e8\u5206
+path=\u8def\u5f84
+pdf=
+pegar=\u7c98\u8d34
+pegar_mapas=\u7c98\u8d34\u5730\u56fe
+pegar_vistas=\u7c98\u8d34\u89c6\u56fe
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=\u5141\u8bb8\u5229\u7528\u67d0\u5b57\u6bb5\u7684\u6570\u503c\u7ed9\u5730\u56fe\u5143\u7d20\u5b89\u7f6e\u6807\u7b7e\u3002
+Personalizado=\u81ea\u5b9a\u4e49
+personalizar_margenes=\u81ea\u5b9a\u4e49\u8fb9\u8ddd
+Pies=\u82f1\u5c3a
+pila_de_comandos=\u547d\u4ee4\u8868
+pixeles=\u50cf\u7d20
+pixels=\u50cf\u7d20
+Plain=\u6b63\u5e38
+plantilla=\u6a21\u677f
+please_insert_new_field_name=\u8bf7\u7ed9\u5b57\u6bb5\u8f93\u5165\u65b0\u540d\u79f0
+png=PNG \u6587\u4ef6
+poligono=\u591a\u8fb9\u5f62
+polilinea=\u6298\u7ebf
+poner_capas_a=\u5c06...\u6dfb\u52a0\u56fe\u5c42
+por_debajo_de=\u5728...\u4e0b\u9762\:
+por_encima_de=\u5728...\u4e0a\u9762\:
+Por_favor_active_la_capa=\u8bf7\u6fc0\u6d3b\u56fe\u5c42
+posicion_linea=\u7ebf\u6761\u7684\u4f4d\u7f6e
+precision=\u7cbe\u786e\u5ea6
+preparar_pagina=\u9875\u9762\u8bbe\u7f6e
+Preparar_pagina=\u9875\u9762\u8bbe\u7f6e
+presentacion=\u6f14\u793a
+previsualizacion=\u9884\u89c8
+Previsualizacion=\u9884\u89c8
+Previsualizacion_de_simbolo=\u7b26\u53f7\u9884\u89c8
+projection=\u6295\u5f71
+propiedad=\u5c5e\u6027
+propiedades=\u5c5e\u6027
+propiedades_cajetin=\u65b9\u6846\u5c5e\u6027
+propiedades_capa=\u56fe\u5c42\u5c5e\u6027
+propiedades_de_la_capa=\u56fe\u5c42\u5c5e\u6027
+Propiedades_escala_grafica=\u6bd4\u4f8b\u5c3a\u5c5e\u6027
+propiedades_grafico=\u56fe\u7247\u5c5e\u6027
+propiedades_mapa=\u5730\u56fe\u5c5e\u6027
+propiedades_marco_imagenes=\u56fe\u7247\u6846\u67b6\u5c5e\u6027
+propiedades_marco_leyenda=\u56fe\u4f8b\u6846\u67b6\u5c5e\u6027
+propiedades_marco_vista=\u89c6\u56fe\u6846\u67b6\u5c5e\u6027
+propiedades_raster=Raster \u5c5e\u6027
+propiedades_sesion=\u5c5e\u6027
+propiedades_tabla=\u8868\u683c\u5c5e\u6027
+Propiedades_texto=\u6587\u5b57\u5c5e\u6027
+propiedades_vista=\u89c6\u56fe\u5c5e\u6027
+Proyecciones=\u6295\u5f71
+ps=
+puerto=\u8fde\u63a5\u53e3
+Pulgadas=\u82f1\u5bf8
+punto=\u6807\u70b9
+quantile_intervals=\u5206\u4f4d\u6570 \uff08Quantile\uff09
+quiere_continuar=\u60a8\u8981\u7ee7\u7eed\u5417?
+Quitar=\u5220\u9664
+Quitar_capa=\u5220\u9664\u56fe\u5c42
+quitar_enlaces=\u5220\u9664\u94fe\u63a5
+Quitar_todos=\u5168\u90e8\u5220\u9664
+quitar_uniones=\u5220\u9664\u5408\u5e76
+rango_de_escalas=\u6bd4\u4f8b\u503c\u57df
+Rango_de_escalas=\u6bd4\u4f8b\u503c\u57df
+realce=\u589e\u5f3a
+realmente_desea_guardar=\u786e\u5b9a\u8981\u5b58\u76d8\u5417?
+recargar=\u91cd\u8f7d
+recorte_colas=\u4fee\u526a\u5c3e\u90e8
+recorte_vista=Cut to view
+rectangulo=\u65b9\u5f62
+recuento=\u91cd\u6570
+Recuperar_leyenda=\u8f7d\u5165\u56fe\u4f8b
+Recuperar_y_eliminar_otros_zoom=\u6062\u590d\u4ee5\u53ca\u5220\u9664\u53e6\u5916\u7684\u7f29\u653e
+reference_system=\u53c2\u8003\u7cfb\u7edf
+refrescar=\u5237\u65b0
+registros_seleccionados_total=\u5171\u9009\u5b9a\u8bb0\u5f55
+rehacer=\u6062\u590d
+rellenar_marco_vista=\u5145\u586b\u89c6\u56fe\u6846\u67b6
+relleno=\u5145\u586b\:
+remove_elements=\u5220\u9664\u90e8\u5206
+remove_fields=\u5220\u9664\u5b57\u6bb5
+remove_row=\u5220\u9664\u884c
+remove_rows=\u5220\u9664\u884c
+rename_field=\u5b57\u6bb5\u91cd\u65b0\u547d\u540d
+renombrar=\u91cd\u547d\u540d
+reproyectar_aviso=\u56fe\u5c42\u6295\u5f71\u8ddf\u89c6\u56fe\u6295\u5f71\u4e0d\u4e00\u81f4\u3002\n\u6ce8\u610f\: \u5c06\u4f1a\u5728\u4e00\u4e9b\u8f6c\u6362\u65f6\u4e0d\u7cbe\u786e\u3002\n\u8bf7\u9605\u8bfb\u8bf4\u660e
+reproyectar_pregunta=\u60a8\u8981\u91cd\u65b0\u6295\u5f71\u5417?
+resolucion_resultado=\u51b3\u8bae\u7ed3\u679c\:
+resto_valores=\u5176\u4ed6\u503c
+restore_palette=\u56de\u590dpalette
+rotation_field=\u65cb\u8f6c\u5b57\u6bb5
+salir=\u9000\u51fa
+salir_tooltip=\u9000\u51fa
+salvar_raster=\u53e6\u5b58\u4e3a Raster
+Sample=\u793a\u4f8b
+Se_superponen_a=\u5728...\u4e0a\u9762
+Sean_disjuntos_a=disjoint as
+Sean_iguales_a=\u8ddf...\u4e00\u6837
+seleccion=\u9009\u62e9
+seleccion_fuente=\u5b57\u4f53\u9009\u62e9
+Seleccion_por_capa=\u6839\u636e\u56fe\u5c42\u9009\u62e9
+selecciona_sistema_de_referencia=\u53c2\u8003\u7cfb\u7edf\u9009\u62e9
+Seleccionar=\u9009\u62e9
+seleccionar_capas=\u56fe\u5c42\u9009\u62e9
+seleccionar_capas_raster=Raster \u56fe\u5c42\u9009\u62e9
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+Seleccionar_del_conjunto=Select from set
+Seleccionar_fichero=\u6587\u4ef6\u9009\u62e9
+seleccionar_por_poligono=\u591a\u8fb9\u5f62\u9009\u62e9
+seleccionar_por_punto=\u6807\u70b9\u9009\u62e9
+seleccionar_por_rectangulo=\u65b9\u5f62\u9009\u62e9
+seleccionar_todos=\u9009\u62e9\u5168\u90e8
+seleccione_campo_enlace=\u9009\u62e9\u8fde\u63a5\u5b57\u6bb5
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u7684\u6b63\u6587\u89d2\u5ea6\u7684\u5b57\u6bb5</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u989c\u8272\u7684\u5b57\u6bb5</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>\u9009\u62e9\u5728\u65b0\u5efa\u865a\u62df\u5c42\u4e0a\u663e\u793a\u7684\u6b63\u6587\u5b57\u6bb5\u3002</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u5b57\u7b26\u7684\u5b57\u6bb5C</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>\u9009\u62e9\u4fdd\u5b58\u6807\u7b7e\u9ad8\u5ea6\u7684\u5b57\u6bb5</HTML>
+seleccione_fecha=\u9009\u62e9\u65e5\u671f...
+seleccione_tabla_a_enlazar=\u9009\u62e9\u8fde\u63a5\u8868\u683c
+seleccione_tabla_origen=\u9009\u62e9\u8054\u63a5\u7684\u6765\u6e90\u8868\u683c
+selection_color=\u9009\u62e9\u989c\u8272
+selection_up=\u5c06\u5df2\u9009\u7684\u79fb\u5230\u6700\u4e0a\u9762
+separator=\u5206\u9694\u7b26
+Servidor=\u670d\u52a1\u5668
+Shapefile=Shapefile
+show_this_dialog_next_startup=\u5c06\u6b64\u63d0\u793a\u5728\u4e0b\u6b21\u542f\u52a8\u65f6\u663e\u793a
+si=\u786e\u5b9a
+siempre=\u59cb\u7ec8
+simbolo=\u7b26\u53f7
+Simbolo=\u7b26\u53f7
+Simbolo_unico=\u552f\u4e00\u7b26\u53f7
+Simbologia=\u6807\u7b7e
+simplificar_leyenda=\u7b80\u5316\u56fe\u4f8b
+simplify=\u7b80\u5316
+sin_titulo=\u672a\u547d\u540d
+sincronizar_color_borde_relleno=\u628a\u8fb9\u6846\u4e0e\u5145\u586b\u7684\u989c\u8272\u6539\u53d8\u6210\u4e00\u81f4\:
+Size=\u5927\u5c0f
+sobre_la_barra=\u5728\u6bd4\u4f8b\u5c3a\u4e0a
+Solo_para_capas_vectoriales=\u53ea\u53ef\u7528\u5728 Vectorial \u56fe\u5c42
+start_edition=\u5f00\u59cb\u7f16\u8f91
+statistics=\u7edf\u8ba1
+stop_edition=\u7ed3\u675f\u7f16\u8f91
+Style=\u98ce\u683c
+Subir_capa=\u5c06\u56fe\u5c42\u5f80\u4e0a\u79fb
+suma=\u603b\u8ba1
+Superior=\u4e0a
+Tabla=\u8868\u683c
+Tabla_de_Atributos=\u7279\u6027\u8868
+tablas=\u8868\u683c
+Tablas=\u8868\u683c
+tag=\u6807\u7b7e
+tamano=\u5927\u5c0f\:
+tamano_metros=\u5927\u5c0f\uff08\u7c73\uff09
+tamano_pagina=\u9875\u9762\u5927\u5c0f
+tamano_posicion=\u5927\u5c0f/\u4f4d\u7f6e
+tamanyo_borde=\u8fb9\u6846\u5927\u5c0f
+tamanyo_fuente=\u5b57\u5934\u5927\u5c0f
+tamanyo_pagina=\u9875\u9762\u5927\u5c0f
+tamPixX=X\u50cf\u7d20\u5927\u5c0f
+tamPixY=Y\u50cf\u7d20\u5927\u5c0f
+terminar=\u5b8c\u6210
+terminar_edicion=\u5b8c\u6210\u7f16\u8f91
+texto=\u6b63\u6587
+this_table_is_not_self_editable=\u4e0d\u53ef\u7f16\u8f91\u7684\u8868\u683c
+tipo_dato=\u6570\u636e\u7c7b\u578b
+tipo_de_intervalo=\u95f4\u9694\u7c7b\u578b
+tipo_de_leyenda=\u56fe\u4f8b\u7c7b\u578b
+tipo_fichero_proyecto=gvSIG \u6587\u4ef6(*.GVP)
+tipo_linea=\u7ebf\u6761\u7c7b\u578b\:
+tipo_relleno=\u5145\u586b\u7c7b\u578b\:
+tipo_simbolo=\u7b26\u53f7\u7c7b\u578b\:
+tipos_de_documentos=\u6587\u6863\u7c7b\u578b
+titulo=\u9879\u76ee\u7ba1\u7406\u5668
+titulo_fframetext=\u6b63\u6587\u5b57\u6bb5\u6807\u9898
+to_annotation=\u53d8\u6362\u6210\u6ce8\u89e3\u5c42
+to_palette=\u53d8\u6362\u6210 palette
+tooltip_copiar_al_portapapeles=\u590d\u5236\u5230\u526a\u8d34\u677f\u4e0a
+tooltip_cortar_al_portapapeles=\u526a\u5207\u5230\u526a\u8d34\u677f\u4e0a
+tooltip_pegar_desde_el_portapapeles=\u4ece\u526a\u8d34\u677f\u91cc\u7c98\u8d34
+Toquen=\u4e0e...\u63a5\u89e6
+transparencia=\u900f\u660e\u5ea6
+Transparencia=\u900f\u660e\u5ea6
+transparencia_pixel=\u6bcf\u4e2a\u50cf\u7d20\u7684\u900f\u660e\u5ea6
+ungroup=\u53d6\u6d88\u5408\u5e76
+unidades=\u5355\u4f4d\:
+untitled=\u672a\u547d\u540d
+url=URL
+Usar_indice_espacial=\u4f7f\u7528\u7a7a\u95f4\u7d22\u5f15
+usar_marco=\u4f7f\u7528\u6846\u67b6
+usar_titulo=\u4f7f\u7528\u6807\u9898
+usuario=\u7528\u6237
+utilizar_margenes_impresora=\u4f7f\u7528\u6253\u5370\u8fb9\u8ddd
+vacia=\u7a7a\u7684
+Valor=\u6570\u636e
+Valores=\u6570\u636e
+Valores_unicos=\u5355\u503c\u56fe
+varianza=\u65b9\u5dee
+Ventana=\u7a97\u53e3
+ventana_proyecto=\u9879\u76ee\u7a97\u53e3
+Ver=\u663e\u793a
+ver_tabla_atributos=\u67e5\u770b\u7279\u6027\u8868
+ver_tags=
+ver_tooltip=\u663e\u793a\u9879\u76ee\u7a97\u53e3
+vertical=\u5782\u76f4\u7684
+vertical_space=\u5782\u76f4\u7a7a\u95f4
+visible=\u660e\u663e\u7684
+visibles=\u660e\u663e\u7684
+Vista=\u89c6\u56fe
+vistas=\u89c6\u56fe
+visualizacion=\u89c6\u56fe\u4e2d
+Visualizacion=\u89c6\u56fe\u4e2d
+visualizar_cuadricula=\u663e\u793a\u6805\u683c
+warning=\u6ce8\u610f
+xmax=X \u8f74\u6700\u5927
+xmin=X \u8f74\u6700\u5c0f
+Yardas=\u7801
+ymax=Y \u8f74\u6700\u5927
+ymin=Y \u8f74\u6700\u5c0f
+zone=\u533a\u57df
+Zoom_a_la_capa=\u56fe\u5c42\u653e\u5927
+Zoom_Acercar=\u653e\u5927
+Zoom_Alejar=\u7f29\u5c0f
+Zoom_Completo=\u5168\u90e8\u7f29\u653e
+Zoom_Completo_Vista=\u5168\u90e8\u7f29\u653e
+zoom_in_factor=\u653e\u5927\u56e0\u5b50
+Zoom_Mas=\u653e\u5927
+Zoom_Mas_Vista=\u89c6\u56fe\u6846\u67b6\u653e\u5927
+Zoom_Menos=\u7f29\u5c0f
+Zoom_Menos_Vista=\u89c6\u56fe\u6846\u67b6\u7f29\u5c0f
+zoom_out_factor=\u7f29\u5c0f\u56e0\u5b50
+Zoom_pixel=\u7f29\u653e\u5230 Raster \u56fe\u5f62\u5206\u8fa8\u7387
+Zoom_Previo=\u4ee5\u524d\u7f29\u653e
+Zoom_Real=1\:1 \u7f29\u653e
+Zoom_Select=\u7f29\u653e\u5df2\u9009

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_zh.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/about.htm
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/about.htm	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/about.htm	(revision 10281)
@@ -0,0 +1,28 @@
+<html>
+  <head>
+    <title>Extesión del Piloto de Raster</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+<table width="60%" border="0">
+  <tr>
+    <td width="64%"><img src="images/logo_horiz_bicolor_gva.png" width="329" height="50"></td>
+    <td width="36%"><div align="right"><img src="images/logoIver.png" width="87" height="50"></div></td>
+  </tr>
+  <tr>
+    <td colspan="2"><font face="Arial, Helvetica, sans-serif">&copy; Copyright
+      Generalitat Valenciana, IVER T.I and other contributors 2005.</font></td>
+  </tr>
+</table>
+  <h3>Extesión del Piloto de Raster</h3>
+  <p>Aplicaci&oacute;n ganadora del concurso de raster. Incorpora funcionalidades de:</p> 
+  <ul>
+     <li>histograma</li> 
+     <li>paletas de color</li> 
+     <li>recorte de raster</li>
+     <li>apertura de nuevos formatos</li>
+  </ul>
+  <p><br><br><b> Build Number: #build.number#</b></p>
+  </body>
+</html>
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/about.htm
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_en.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_en.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_en.properties	(revision 10281)
@@ -0,0 +1,711 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(maximum scale)
+(escala_minima)=(minimum scale)
+1\:=
+_(Simbolo_unico)=(Unique symbols)
+__proyeccion_actual=Current projection\:
+__redimensionar_texto_escala=Resize the text to the view scale
+__seleccion_de_fuente=Font selection
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Down
+abrir=Open
+abrir_plantilla=Open template
+abrir_proyecto=Open project
+abrir_tooltip=Open an existing project
+Abrir_una_capa=Open layer
+Accion_Predefinida=Predefined action
+aceptar=Accept
+Aceptar=Accept
+acerca_de=About...
+activar=Activate
+activar_regla=Activate ruler
+activos=Active
+add_delete_edit_fields=The fields can be added, deleted or renamed
+add_layer=Add layer
+add_rows=Add rows
+adjust_transparency=Set transparency
+agrupacion=Grouping
+agrupar=Group
+agrupar_capas=Group layers
+agrupar_graficos=Group graphics
+agrupar_linea=Group graphic line with graphics
+Ajustar_transparencia=Adjust transparency
+ajustes_linea_grafica=Graphic line settings
+Al_leer_la_leyenda=Reading legend
+alias=Alias
+align_center=Align center
+align_down=Align down
+align_left=Align left
+align_right=Align right
+align_to_layout_center=Align in the center of the layout
+align_to_layout_down=Align in the bottom of the layout
+align_to_layout_left=Align in the left of the layout
+align_to_layout_right=Align in the right of the layout
+align_to_layout_up=Alinear arriba del layout
+align_to_layout_vertical_center=Align in the vertical center of the layout
+align_up=Align top
+align_vertical_center=Align in the vertical center
+alineamiento=Alignment\:
+alinear=Align
+alinear_graficos=Align graphics
+alta=High
+alto=Height
+altura=Height\:
+Altura_fija_de_texto=Fixed text height
+ambito=Scope
+Anadir=Add
+Anadir_al_conjunto=Add to set
+Anadir_capa=Add layer
+Anadir_Capa=Add layer
+anadir_tag=Add tag
+Anadir_todos=Add all
+ancho=Width
+ancho_alto=Width x Height
+anchura=Width\:
+Aplicar=Apply
+Archivo=File
+arriba=Up
+ascending_order=Ascending order
+ascending_order_tooltip=Sort by selected field in ascending order
+Atributo=Attribute
+automatico=Automatic
+Ayuda=Help
+back=Previous
+background_color=Background color
+baja=Low
+Bajar_capa=Move layer down
+bandas=Bands
+barra=Bar\:
+base=base
+base_datos=Data base
+bmp=BMP files
+Bold=Bold
+borra_seleccion=Clear selection
+borrador=Draft
+borrar=Delete
+box=box
+brillo=Brightness
+brillo_y_contraste=Brightness and contrast
+browse=Browse
+cajetin=Box
+Calcular_intervalos=Compute intervals
+calidad=Quality
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Change the selected elements' height to match the highest one.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Change the selected elements' width to match the widest one.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Change the selected elements' size to match the biggest one.
+Cambio_Color=Change color
+cambio_nombre=Rename
+campo=Field
+Campo=Field
+campo_altura_texto=Text field heigth\:
+Campo_de_clasificacion=Classification field
+Campo_de_etiquetado=Labelling field
+Campos=Fields
+cancel=Cancel
+Cancel=Cancel
+cancelar=Cancel
+Cancelar=Cancel
+Capa=Layer
+Capas=Layers
+Capas_del_localizador=Locator layers
+Centimetros=Centimeters
+cerrar=Close
+Cerrar=Close
+change=Change
+change_before=Bring forward
+change_behind=Send backward
+change_height=Change height
+change_width=Change width
+circulo=Circle
+clave=Code
+close=Close
+coincidir_tamanyo=Match size
+colocar_a_margenes=Place with reference to margins.
+colocar_alrededor_seleccionados=Place around the graphics selected.
+colocar_alrededor_todos=Place around all the graphics.
+colocar_delante=Bring to front
+colocar_detras=Place back
+color=Color\:
+Color_final=End color\:
+Color_inicio=Begin color
+color_texto=Text color\:
+comentarios=Comments
+comenzar_edicion=Start edition
+compleja=Complex
+configurar=Configure
+configurar_localizador=Configure locator map
+Configurar_localizador=Configure locator ...
+confirmar_borrar=The element will be removed. Are you sure?
+conflicto_de_nombres_de_mapas_al_pegar=You are trying to paste maps whose names already exist in the current project
+conflicto_de_nombres_de_tablas_al_pegar=You are trying to paste tables whose names already exist in the current project
+conflicto_de_nombres_de_vistas_al_pegar=You are trying to paste views whose names already exist in the current project
+conflito_de_nombres_de_tablas_al_pegar=Table name conflict when pasting
+conservar_escala_visualizacion=Maintain viewing scale
+consulta=Query
+Contengan=Contain
+contraste=Contrast
+coor_geograficas=Geographic coordinates
+copiar=Copy
+copy=Copy
+cortar=Cut
+creation_date=Creation date
+Crucen_con=Cross over
+cuando_activo=When active
+cut=Cut
+Dado_un_campo_de_atributos=Given a attribute field
+datum=Datum
+debera_introducir_nombres_para_las_vistas_a_pegar=You will need to write new names for the views
+debera_introducir_nombres_para_los_mapas_a_pegar=You will need to write new names for the maps
+default_projection=Default projection
+default_value=Default Value
+dehacer=Undo
+delete_field=Delete field
+Derecha=Right
+Derecho=Right
+desagrupar=Ungroup
+desagrupar_capas=Ungroup layers
+desagrupar_graficos=Ungroup graphics
+descending_order=Descending order
+descending_order_tooltip=Sort by selected field in descending order
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Keep the default values to use the values which are shared by all the attributes of the layer. Select the fields which store the values in order to customize the label aspect.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>A new virtual layer can be created using this tool, based on an already existing layer which allows to perform advanced labeling. It changes the visualization of the<br> selected layer showing the value of one of its fields.</HTML>
+desde_arriba=From top\:
+desde_izquierda=From left\:
+desea_borrar_el_documento=\u00bfDo you really want to delete the selected documents?
+desea_borrar_la_capa=Do you really want to delete the active layers?
+desea_continuar=\u00bfDo you want to continue?
+deshacer=Undo
+desplaza_los_elementos_seleccionados_a_la_derecha=Shift the selected layers to the right
+desplaza_los_elementos_seleccionados_a_la_izquierda=Shift the selected layers to the left
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=Shift the selected elements to the center on the X axis.
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=Shit the selected elements to the center on the Y axis.
+desplaza_los_elementos_seleccionados_hacia_abajo=Shift the selected elements to the bottom.
+desplaza_los_elementos_seleccionados_hacia_arriba=Shift the selected elements to the top.
+Desplazamiento=Panning
+desviacion_tipica=Standard deviation
+distance_units=Measuring units
+distribuir=Distributing\:
+distribuir_elementos_sobre_todo_el_layout=Arrange the elements over the whole Layout
+distributes_down=Arrange from the bottom
+distributes_horizontal=Arrange elements horizontally
+distributes_left=Arrange from the left
+distributes_right=Arrange from the right
+distributes_to_layout_down=Arrange from the bottom of the layout
+distributes_to_layout_horizontal=Arrange horizontally the layout
+distributes_to_layout_left=Arrange from the left of the layout
+distributes_to_layout_right=Arrange from the right of the layout
+distributes_to_layout_up=Arrange from the top of the layout
+distributes_to_layout_vertical=Arrange vertically the layout
+distributes_up=Arrange from the top
+distributes_vertical=Arrange vertically
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Arrange horizontally the space between elements.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Arrange vertically the space between the elements.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Arrange the selected elements in an equidistant way from bottom to top.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Arrange the selected elements in an equidistant way from top to bottom.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Arrange the selected elements in an equidistant way from right to left.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Arrange the selected elements in an equidistant way from left to right.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Arrange horizontally the selected elements in an equidistant way.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Arrange vertically the selected items in an equidistant way.
+divisiones_izquierda=Divisions to the left
+documento=Document
+documentos_existentes=Existing documents
+draw_text_only=Draw text only
+driver=Driver
+Dxffiles=DXFFiles
+edicion=Edition
+editable=Editable
+Editar_leyenda=Edit style
+editar_vertices=Edit vertex
+el_numero_maximo_de_intervalos_para_este_campo_es=The maximum number of intervals for this field is
+Elegir_Color=Select color
+Elegir_Fuente=Select font
+elemento_ya_existe=The element already exists
+Elementos_seleccionados_de_la_capa=Selected items of a layer
+Eliminar=Delete
+eliminar_capa=Delete layer
+eliminar_columna=Remove column
+eliminar_extremos=Remove edges
+eliminar_fila=Remove row
+en_el_mapa=In the layout\:
+En_metros=In meters
+En_pixels=In pixels
+en_unidades=in units
+Encuadre=Zoom Manager
+Encuadre_Vista=View frame pan
+enlace_vivo=Active link
+Enlazar_a_fichero_de_texto=Link to text files
+Enlazar_a_ficheros_de_imagen=Link to image files
+equal_intervals=Equal intervals
+Error_exportando_SLD=Error exporting SLD
+Error_guardando_la_leyenda=Error saving legend
+Error_guardando_la_plantilla=Error saving the template
+escala=Scale
+Escala=Scale
+escala_desconocida=Unknown scale
+escala_maxima=Maximum scale
+Escala_Maxima=Maximum scale
+escala_minima=Minimum scale
+Escala_Minima=Minimum scale
+escala_usuario=Scale specified by the user
+espaciado_horizontal=Horizontal grid spacing
+espaciado_vertical=Vertical grid spacing
+espacio=Space\:
+estadisticas=Statistics
+este_por_debajo_de_=To be under
+este_por_encima_de=To be over
+Esten_contenidos_en=Contained in
+Etiqueta=Label
+Etiquetados=Labelling
+etiquetas=Lables\:
+Etiquetas_estandar=Standard labels
+Examinar=Browse
+export=Export
+exportar=Export
+exportar_pdf=Export to pdf
+exportar_ps=Export to ps
+extension=Extension
+Extent=Extent
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+factor_zoom_incorrecto=Incorrect zoom factor.
+fallo_capas=Layer access error.  The following layers will be deleted from the proyect.
+family=Family
+fichero=file
+Fichero=File
+fichero_existe=Selected file already exists as layer band
+fichero_incorrecto=Invalid file
+fichero_ya_existe_seguro_desea_guardarlo=The file already exists, do you want to continue?
+field_already_exists=Field already exists
+field_decimal_count=Decimal count
+field_default_value=Default value
+field_length=Length
+field_manager=Field Manager
+field_name=Field name
+field_type=Type
+filtro=Filter
+finish=Finish
+Font=Font
+formato=Format
+Formato_de_numero_erroneo=Incorrect number format
+formato_incorrecto=Invalid format
+fuente=Font
+General=General
+georeferenciado=Georeferenced
+gestion_encuadre=Zoom Manager
+grados=Degrees\:
+Grados=Degrees
+Graficos=Graphics
+grosor_linea=Line width\:
+group=Group
+group_graphic_line=Group graphic line
+grupo=group
+guardado=Saved in
+guardar=Save
+Guardar=Save
+guardar_cambios=Save changes?
+guardar_como=Save as...
+guardar_como_plantilla=Save as template
+Guardar_el_zoom_actual=Save current zoom
+Guardar_leyenda=Save legend
+guardar_proyecto=Save project
+guardar_tooltip=Save changes to project
+Habilitar_etiquetado=Enable labelling
+Hiperenlace=Hyperlink
+horizontal=Horizontal
+horizontal_space=Horizontal space
+Identificar_Resultados=Identify results
+Igual_que_la_impresora=Same as printer
+igual_todos_lados=Equal displacement for all sides.
+imagen=Image
+Implimir=Print
+importar=Import
+Imprimir=Print
+Indexando=Indexing...
+Indexando_espacialmente=Spatially indexing the layer
+indexar_campos=Index fields
+Inferior=Lower
+info=Information
+informacion=Information
+Informacion=Information
+Inicializando=Initializing
+initial_warning=<html><b>WARNING\!</b><br>Development version. It might have important errors and even provocate damages in the edited files.<br><br>The last stable version of gvSIG is recommended for daily work.</html>
+insert_row=Insert row
+Insertar=Insert
+insertar_cajetin=Insert grid
+insertar_circulo=Insert circle
+insertar_columna=Insert column
+insertar_escala=Insert scale
+insertar_fila=Insert row
+insertar_imagen=Insert image
+insertar_leyenda=Insert legend
+insertar_linea=Insert line
+insertar_norte=Insert north
+insertar_poligono=Insert polygon
+insertar_polilinea=Insert polyline
+insertar_punto=Insert point
+insertar_rectangulo=Insert rectangle
+insertar_texto=Insert text
+insertar_vista=Insert view
+Intersecten_con=Intersected with
+Intervalo=Interval
+Intervalos=Intervals
+introduce_nombre=Type the new name
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Insert the name of the new annotation layer
+introduzca_nuevo_nombre_para_la_vista=Write the new name for the view
+invalid_value_for_gap=Invalid value for gap
+invert_selection=Invert selection
+Italic=Italic
+Izquierda=Left
+Izquierdo=Left
+join=Join
+jpg=JPEG files
+kilometros=Kilometers
+Kilometros=Kilometers
+leyenda=Legend
+Leyenda=Legend
+leyenda_campo_unido=You are using a field of the union either in the legend or in the labelling. Please, change the legend before removing the union.
+Leyenda_Por_Defecto=Default legend
+linea=Line
+linea_grafica=Graphic line
+lineal_directo=Direct linear
+link=Link
+Link=Link
+localizador=Locator
+locked_element=Locked element
+locked_element_it_cannot_be_deleted=Locked element.\nIt cannot be deleted.
+locked_element_it_cannot_be_renamed=Locked element.\nIt cannot be removed.
+m/pixel=metros/pixel
+malla_activada=Active grid
+manage_fields=Manage fields
+mantener_intervalo=Keep interval
+map_units=Map units
+mapa=Map
+Mapa=Map
+mapas=Maps
+marco=Frame
+marco_vista=Framework of the view
+margenes=Margins\:
+mas_de_100_simbolos=More than 100 symbols usually do not give any information in a map
+max_length_is=Max length is
+maximo=Maximum
+MDIFrame.quiere_salir=Exit gvSIG?
+MDIFrame.salir=Exit
+media=Mean
+medir_area=Measure area
+medir_distancias=Measure distances
+metadatos=Metadatos
+metros=Meters
+Metros=Meters
+Milimetros=Milimeters
+Millas=Miles
+minimo=Minimum
+modificar=modify
+modification_date=Modification date
+mostrar_escala_numerica=Show numeric scale.
+Mostrar_siempre=To show always
+mostrar_unidades=Show units
+move_elements=Move elements
+Muestra_atributos=Show attributes of selected layers.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Show the layers features using a each unique value symbol
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Show the layers features using a range of color according to values of a attribute field
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Show all the items of a layer using the same symbol
+natural_intervals=Natural intervals
+navegacion=Navigation
+navegacion_vista=Navegation in a view
+necesita_una_capa_activa=Needs an active layer
+necesita_una_capa_vectorial_activa=Needs an active vectorial layer
+new_field=New field
+new_field_properties=New field properties
+next=Next
+ninguna_impresora_configurada=No printer set
+Nivel_de_transparencia=Transparency level
+no=No
+no_activos=Not active
+No_de_intervalos=Nr of intervals
+no_es_posible_aplicar_leyenda_vacia=It's imposible to apply empty legend.
+No_ha_sido_posible_realizar_la_operacion=Unable to perform operation.
+No_mostrar=Do not show the layer when the scale
+No_mostrar_la_capa_cuando_la_escala=Don't show the layer when the scale
+no_se_pegaran_las_tablas=There will not be any pasted table
+no_se_pegaran_las_vistas_del_conflicto=The conflicting views will not be pasted
+No_se_pudo_obtener_la_tabla_de_la_capa=It was not possible to retrieve from the layer
+no_visibles=Not visible
+nombre=Name
+Nombre=Name
+nombre_no_valido=Invalid name
+Nombre_que_se_le_dara_al_zoom=Name for the zoom
+nombre_sesion=Session name
+none=none
+none_selected=None selected
+normal=Normal
+north=North
+Nueva_tabla=New table
+nuevo=New
+Nuevo_conjunto=New set
+nuevo_nombre_para_el_mapa=Write the new name for the layer
+nuevo_proyecto=New project
+nuevo_tooltip=Create a new project
+num_bandas=Band count
+num_columnas=Number of columns
+num_filas=Number of rows
+Num_intervalos=Number of Intervals
+numero_decimales_mostrar=Number of decimals
+numero_incorrecto=Invalid value
+ok=Ok
+opacidad=Opacity
+operacion_cancelada=Cancelled operation
+options.layout.paper_properties.landscaped=Lands scaped
+options.layout.paper_properties.paper_direction=Paper direction
+options.layout.paper_properties.portrait=Portrait
+options.layout.paper_properties.title=Properties
+options.view.default_map_overview_back_color=Default map overview back color
+options.view.default_selection_color=Default selection color
+options.view.default_view_back_color=Default view back color
+options.view.invisible_new_layers=Add new layers in invisible mode
+options.view.keep_scale_on_resizing=Keep scale on resizing
+orientacion=Orientation\:
+origen_de_datos=Data origin
+Origen_de_datos=Data origin
+Origen_de_Datos=Data origin\:
+owner=Owner
+paste=Paste
+paste_elements=Paste elements
+path=Path
+pdf=Pdf
+pegar=Paste
+pegar_mapas=Pasta maps
+pegar_vistas=Paste views
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Allows to set label of the map elements with the value of a particular field
+Personalizado=Custom
+personalizar_margenes=Customize margins
+Pies=Feet
+pila_de_comandos=commands stack
+pixeles=pixels
+pixels=pixels
+Plain=Regular
+plantilla=template
+please_insert_new_field_name=Please insert new field name.
+png=PNG files
+poligono=Polygon
+polilinea=polyline
+poner_capas_a=Set layers as
+por_debajo_de=below\:
+por_encima_de=above\:
+Por_favor_active_la_capa=Please, activate the layer
+posicion_linea=Position of the line
+precision=Precision
+preparar_pagina=Prepare page
+Preparar_pagina=Prepare page
+presentacion=Presentation
+previsualizacion=Preview
+Previsualizacion=Preview
+Previsualizacion_de_simbolo=Symbol preview
+projection=Projection
+propiedad=Oroperty
+propiedades=Properties
+propiedades_cajetin=Box properties
+propiedades_capa=Layer properties
+propiedades_de_la_capa=Layer properties
+Propiedades_escala_grafica=Properties of the scale bar
+propiedades_grafico=Graphic properties
+propiedades_mapa=Map properties
+propiedades_marco_imagenes=Properties of Image framework
+propiedades_marco_leyenda=Properties of legend framework
+propiedades_marco_vista=Properties of view framework
+propiedades_raster=Raster properties
+propiedades_sesion=Session properties
+propiedades_tabla=Table properties
+Propiedades_texto=Properties of text
+propiedades_vista=View properties
+Proyecciones=Projections
+ps=Ps
+puerto=Port
+Pulgadas=Inches
+punto=Point
+quantile_intervals=Quantile interval
+quiere_continuar=Would you like to continue?
+Quitar=Remove
+Quitar_capa=Remove layer
+quitar_enlaces=Remove links
+Quitar_todos=Remove all
+quitar_uniones=Remove joins
+rango_de_escalas=Scale range
+Rango_de_escalas=Rank of scales
+realce=Enhance
+realmente_desea_guardar=Would you really like to save?
+recargar=Reload
+recorte_colas=Tail trimming
+recorte_vista=Cut to view
+rectangulo=Rectangle
+recuento=Recount
+Recuperar_leyenda=Load legend
+Recuperar_y_eliminar_otros_zoom=Recover and delete other zoom
+reference_system=Reference System
+refrescar=Refresh
+registros_seleccionados_total=Total of selected records
+rehacer=Redo
+rellenar_marco_vista=Fill view framework
+relleno=Fill\:
+remove_elements=Remove elements
+remove_fields=Remove fields
+remove_row=Remove row
+remove_rows=Remove rows
+rename_field=Rename field
+renombrar=Rename
+reproyectar_aviso=The layer projection is not the same as the views projection.\nATENTION\: It can be unaccurate with some transformations.\nPlease read docs
+reproyectar_pregunta=Do you want to reproject?
+resolucion_resultado=Resolution of the result\:
+resto_valores=Other values
+restore_palette=Restore palette
+rotation_field=Rotation field
+salir=Exit
+salir_tooltip=Exit
+salvar_raster=Save as raster
+Sample=Sample
+Se_superponen_a=Over
+Sean_disjuntos_a=disjoint as
+Sean_iguales_a=same as
+seleccion=Selection
+seleccion_fuente=Font selection
+Seleccion_por_capa=Selection by Layer
+selecciona_sistema_de_referencia=Choose reference system
+Seleccionar=Select
+seleccionar_capas=Select Layers
+seleccionar_capas_raster=Select raster layers
+Seleccionar_de_las_capas_activas_los_elementos_que=Select items from active layers that are\:
+Seleccionar_del_conjunto=Select from set
+Seleccionar_fichero=Select file
+seleccionar_por_poligono=Select by polygon
+seleccionar_por_punto=Select by point
+seleccionar_por_rectangulo=Select by rectangle
+seleccionar_todos=Select all
+seleccione_campo_enlace=Select field to use for link
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the slope of the label\u0092s text</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s color</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Choose the text field which should be used to show the new virtual layer.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s font</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Choose the field used to store the label\u0092s height</HTML>
+seleccione_fecha=Select date...
+seleccione_tabla_a_enlazar=Select table to link
+seleccione_tabla_origen=Select origin table of the join
+selection_color=Color selection
+selection_up=Move selection to top
+separator=Separator
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=Show this dialog on next startup
+si=yes
+siempre=Always
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Unique symbols
+Simbologia=Symbols
+simplificar_leyenda=Simplify legend
+simplify=Simplify
+sin_titulo=Untitled
+sincronizar_color_borde_relleno=Sincronize color of stroke and fill\:
+Size=Size
+sobre_la_barra=On the scale bar
+Solo_para_capas_vectoriales=Only for vector layers
+start_edition=Start edition
+statistics=Statistics
+stop_edition=Finish edition
+Style=Style
+Subir_capa=Move layer up
+suma=Sum
+Superior=Upper
+symbol_selector=Symbol selector
+Tabla=Table
+Tabla_de_Atributos=Table of attributes
+tablas=Tables
+Tablas=Tables
+tag=tag
+tamano=Size\:
+tamano_metros=Size in meters
+tamano_pagina=Page Size
+tamano_posicion=size/position
+tamanyo_borde=Border size
+tamanyo_fuente=Font size
+tamanyo_pagina=Page size
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+terminar=Terminate
+terminar_edicion=Terminate edition
+texto=Text
+this_table_is_not_self_editable=Table not editable
+tipo_dato=Data type
+tipo_de_intervalo=Interval type
+tipo_de_leyenda=Type of legend
+tipo_fichero_proyecto=gvSIG project file(*.GVP)
+tipo_linea=Stroke\:
+tipo_relleno=Fill\:
+tipo_simbolo=Type of symbol\:
+tipos_de_documentos=Document types
+titulo=Project manager
+titulo_fframetext=Text field title
+to_annotation=Transform to annotation layer
+to_palette=Change to palete
+tooltip_copiar_al_portapapeles=Copy to clipboard
+tooltip_cortar_al_portapapeles=Cut to clipboard
+tooltip_pegar_desde_el_portapapeles=Paste from clipboard
+Toquen=in contact with
+transparencia=Transparency
+Transparencia=Transparency
+transparencia_pixel=Transparency per pixel
+ungroup=Ungroup
+unidades=Units\: 
+Unidades=Units\: 
+untitled=Untitled
+url=url
+Usar_indice_espacial=Use spatial index
+usar_marco=Use frame
+usar_titulo=Use title
+usuario=User
+utilizar_margenes_impresora=Use printer margins
+vacia=Empty
+Valor=Value
+Valores=Values
+Valores_unicos=Unique values
+varianza=Variance
+Ventana=Window
+ventana_proyecto=Project window
+Ver=Show
+ver_error_capa=Show errors
+ver_tabla_atributos=See table of attributes
+ver_tags=Show tags
+ver_tooltip=Show project window
+vertical=Vertical
+vertical_space=Vertical space
+visible=Visible
+visibles=Visible
+Vista=View
+vistas=Views
+visualizacion=Viewing
+Visualizacion=Visualization
+visualizar_cuadricula=Visualize grid
+warning=Warning
+xmax=Maximum X
+xmin=Minimum X
+Yardas=Yards
+ymax=Maximum Y
+ymin=Minimum Y
+zone=Zone
+Zoom_a_la_capa=Zoom to layer
+Zoom_Acercar=Zoom in
+Zoom_Alejar=Zoom out
+Zoom_Completo=Full extent
+Zoom_Completo_Vista=View frame full extent
+zoom_in_factor=Zoom in factor
+Zoom_Mas=Zoom In
+Zoom_Mas_Vista=Zoom In view frame
+Zoom_Menos=Zoom out
+Zoom_Menos_Vista=View frame zoom out
+zoom_out_factor=Zoom out factor
+Zoom_pixel=Zoom to raster resolution
+Zoom_Previo=Previous zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom to selection

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_en.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_gl.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_gl.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_gl.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__proyeccion_actual=Proxecci\u00f3n actual\:
+__redimensionar_texto_escala=Redimensionar o texto a escala coa vista.
+__seleccion_de_fuente=Selecci\u00f3n de fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Abaixo
+abrir=Abrir
+abrir_plantilla=Abrir modelo
+abrir_proyecto=Abrir proxecto
+abrir_tooltip=Abre un proxecto existente
+Abrir_una_capa=Abrir capa
+Accion_Predefinida=Acci\u00f3n predefinida
+aceptar=Aceptar
+Aceptar=Aceptar
+acerca_de=Acerca de...
+activar=Activate
+activar_regla=Activar regra
+activos=Activos
+add_delete_edit_fields=
+add_layer=Engadir capa
+add_rows=
+adjust_transparency=Axustar transparencia
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar li\u00f1a gr\u00e1fica con gr\u00e1ficos
+Ajustar_transparencia=Axustar transparencia
+ajustes_linea_grafica=Axustes de li\u00f1a gr\u00e1fica
+Al_leer_la_leyenda=\u00d3 l\u00e9r a lenda
+alias=Alias
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Ali\u00f1amento\:
+alinear=Ali\u00f1ar
+alinear_graficos=Ali\u00f1ar gr\u00e1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Altura fixa do texto
+ambito=\u00c1mbeto
+Anadir=Engadir
+Anadir_al_conjunto=Engadir ao conxunto
+Anadir_capa=Engadir capa
+Anadir_Capa=Engadir capa
+anadir_tag=
+Anadir_todos=Engadir todos
+ancho=Largo
+ancho_alto=Ancho alto
+anchura=Largo\:
+Aplicar=Aplicar
+Archivo=Arquivo
+arriba=Arriba
+ascending_order=Orde ascendente
+ascending_order_tooltip=Ordena polo campo seleccionado en orde ascendente
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Axuda
+back=Anterior
+background_color=C\u00f3r de fondo
+baja=Baixa
+Bajar_capa=Baixar capa
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de datos
+bmp=Arquivos de tipo bmp
+Bold=
+borra_seleccion=Borra selecci\u00f3n
+borrador=Borrador
+borrar=Borrar
+box=
+brillo=Brillo
+brillo_y_contraste=Brillo e Contraste
+browse=Examinar
+cajetin=
+Calcular_intervalos=Calcular intervalos
+calidad=Calidade
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Cambio c\u00f3r
+cambio_nombre=Cambio de nome
+campo=Campo
+Campo=Campo
+campo_altura_texto=Campo de altura de texto\:
+Campo_de_clasificacion=Campo de clasificaci\u00f3n
+Campo_de_etiquetado=Campo de etiquetado
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Capas do localizador
+Centimetros=Cent\u00edmetros
+cerrar=Pechar
+Cerrar=Pechar
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=C\u00edrculo
+clave=Clave
+close=Pechar
+coincidir_tamanyo=
+colocar_a_margenes=Colocar con referencia a marxes.
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar ao redor de t\u00f3dolos gr\u00e1ficos
+colocar_delante=Colocar diante
+colocar_detras=Colocar detr\u00e1s
+color=Cor\:
+Color_final=Cor final
+Color_inicio=Cor de inicio
+color_texto=Cor do texto
+comentarios=Comentarios
+comenzar_edicion=
+compleja=
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador
+confirmar_borrar=Seguro que desexa borrar o elemento?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Conservar escala de visualizaci\u00f3n
+consulta=Consulta
+Contengan=Conte\u00f1an
+contraste=Contraste
+coor_geograficas=Coordenadas xeogr\u00e1ficas
+copiar=
+copy=Copiar
+cortar=
+creation_date=Data de creaci\u00f3n
+Crucen_con=Crucen con
+cuando_activo=Cando activo
+cut=
+Dado_un_campo_de_atributos=Dado un campo de atributos
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=Desfacer
+delete_field=Borrar campo
+Derecha=Dereita
+Derecho=Dereito
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Orde descendente
+descending_order_tooltip=Ordena polo campo seleccionado en orde descendente
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Dende arriba\:
+desde_izquierda=Dende a esquerda
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=Desfacer
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Desprazamento
+desviacion_tipica=Desviaci\u00f3n t\u00edpica
+distance_units=Unidades de medida
+distribuir=Distribu\u00edr\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divisi\u00f3ns \u00e1 esquerda
+documento=
+documentos_existentes=Documentos existentes
+draw_text_only=
+driver=Driver
+Dxffiles=Arquivos .DXF
+edicion=Edici\u00f3n
+editable=
+Editar_leyenda=Editar lenda
+editar_vertices=Editar v\u00e9rtices
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00famero m\u00e1ximo de intervalos para este campo \u00e9
+Elegir_Color=Elixir Cor
+Elegir_Fuente=Elixir fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Elementos seleccionados da capa
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=
+eliminar_extremos=Eliminar extremos
+eliminar_fila=
+en_el_mapa=No mapa\:
+En_metros=En metros
+En_pixels=En pixels
+en_unidades=
+Encuadre=Encadre
+Encuadre_Vista=Encadre sobre a vista
+enlace_vivo=Ligaz\u00f3n viva
+Enlazar_a_fichero_de_texto=Ligar a arquivo de texto
+Enlazar_a_ficheros_de_imagen=Ligar a arquivos de imaxe
+equal_intervals=Intervalos iguais
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Erro ao gardar a lenda
+Error_guardando_la_plantilla=
+escala=Escala
+Escala=Escala
+escala_desconocida=
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada polo usuario
+espaciado_horizontal=Espaciado horizontal da malla
+espaciado_vertical=Espaciado vertical da malla
+espacio=Espazo\:
+estadisticas=Estat\u00edsticas
+este_por_debajo_de_=Estea por debaixo de
+este_por_encima_de=Estea por riba de
+Esten_contenidos_en=Estean contidos en
+Etiqueta=Etiqueta
+Etiquetados=Etiquetados
+etiquetas=Etiquetas
+Etiquetas_estandar=Etiquetas est\u00e1ndar
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extensi\u00f3n
+Extent=Extent
+extents_no_coincidentes=Extensi\u00f3ns non coincidentes
+factor_zoom_incorrecto=
+fallo_capas=Erro accedendo \u00e1s capas. As seguintes capas van ser eliminadas do proxecto
+family=
+fichero=
+Fichero=Arquivo
+fichero_existe=Arquivo existe
+fichero_incorrecto=Arquivo incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtro
+finish=Rematar
+Font=Fonte
+formato=Formato
+Formato_de_numero_erroneo=
+formato_incorrecto=Formato incorrecto
+fuente=Fonte
+General=Xeral
+georeferenciado=
+gestion_encuadre=Xesti\u00f3n de Encadre
+grados=Graos\:
+Grados=Graos
+Graficos=Gr\u00e1ficos
+grosor_linea=Grosor de li\u00f1a\:
+group=Agrupar
+group_graphic_line=
+grupo=
+guardado=Gardado en
+guardar=Gardar
+Guardar=Gardar
+guardar_cambios=\u00bfQuere gardar os cambios?
+guardar_como=Gardar como
+guardar_como_plantilla=Gardar como dese\u00f1o
+Guardar_el_zoom_actual=Gardar o zoom
+Guardar_leyenda=Gardar lenda
+guardar_proyecto=Gardar proxecto
+guardar_tooltip=Gardar os cambios ao proxecto
+Habilitar_etiquetado=Habilitar etiquetado
+Hiperenlace=Hiperligaz\u00f3n
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual que a impresora
+igual_todos_lados=Desprazamento igual por t\u00f3dolos lados
+imagen=Imaxe
+Implimir=
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexando...
+Indexando_espacialmente=Indexando espacialmente a capa
+indexar_campos=
+Inferior=Inferior
+info=Informaci\u00f3n
+informacion=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+Inicializando=Inicializando
+initial_warning=
+insert_row=Inserir fila
+Insertar=Insertar
+insertar_cajetin=Inserir cadro de rotulaci\u00f3n
+insertar_circulo=Insertar c\u00edrculo
+insertar_columna=
+insertar_escala=Insertar escala
+insertar_fila=
+insertar_imagen=Insertar imaxe
+insertar_leyenda=Insertar lenda
+insertar_linea=Insertar li\u00f1a
+insertar_norte=Insertar norte
+insertar_poligono=Insertar pol\u00edgono
+insertar_polilinea=Inserir polili\u00f1a
+insertar_punto=Insertar punto
+insertar_rectangulo=Insertar rect\u00e1ngulo
+insertar_texto=Insertar texto
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten con
+Intervalo=Intervalo
+Intervalos=Intervalos
+introduce_nombre=Introduce o novo nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Empalmar
+jpg=Arquivos JPEG
+kilometros=Kil\u00f3metros
+Kilometros=Kil\u00f3metros
+leyenda=Lenda
+Leyenda=Lenda
+leyenda_campo_unido=Estase a utilizar un campo da uni\u00f3n na lenda (e/ou etiquetado). Cambie a lenda antes de quitar a uni\u00f3n, por favor.
+Leyenda_Por_Defecto=Lenda por defecto
+linea=Li\u00f1a
+linea_grafica=Li\u00f1a gr\u00e1fica
+lineal_directo=Lineal directo
+link=Ligazon
+Link=Ligaz\u00f3n
+localizador=Localizador
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=
+mantener_intervalo=Manter intervalo
+map_units=Unidades de mapa
+mapa=
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco da vista
+margenes=M\u00e1rxenes\:
+mas_de_100_simbolos=M\u00e1is de 100 s\u00edmbolos non adoitan aportar informaci\u00f3n nun plano
+max_length_is=
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=Est\u00e1 seguro de que quere sa\u00edr?
+MDIFrame.salir=Sa\u00edr
+media=Media
+medir_area=Medir \u00c1rea
+medir_distancias=Medir distancias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Millas
+minimo=M\u00ednimo
+modificar=
+modification_date=\u00daltima data de modificaci\u00f3n
+mostrar_escala_numerica=
+Mostrar_siempre=Amosar sempre
+mostrar_unidades=Amosar unidades
+move_elements=
+Muestra_atributos=Amosa os atributos das capas seleccionadas
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Amosa os elementos da capa empregando un s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Amosa os elementos da capa empregando unha gama de cores en funci\u00f3n do valor dun determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Amosa todolos elementos dunha capa empregando o mesmo s\u00edmbolo
+natural_intervals=Intervalos naturais
+navegacion=Navegaci\u00f3n
+navegacion_vista=Navegaci\u00f3n vista
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=Necesita unha capa vectorial activa
+new_field=Novo campo
+new_field_properties=
+next=Seguinte
+ninguna_impresora_configurada=Ningunha impresora configurada
+Nivel_de_transparencia=Nivel de transparencia
+no=Non
+no_activos=Non activos
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=Non amosar a capa cando a escala
+No_mostrar_la_capa_cuando_la_escala=Non amosar a capa cando a escala
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=Non se puido obter a t\u00e1boa da capa
+no_visibles=Non visibles
+nombre=Nome
+Nombre=Nome
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nome que se lle dar\u00e1 ao zoom
+nombre_sesion=Nome da sesi\u00f3n
+none=
+none_selected=Ning\u00fan seleccionado
+normal=Normal
+north=Norte
+Nueva_tabla=Nova t\u00e1boa
+nuevo=Novo
+Nuevo_conjunto=Novo conxunto
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Novo proxecto
+nuevo_tooltip=Crea un novo proxecto
+num_bandas=N\u00famero de bandas
+num_columnas=N\u00famero de columnas
+num_filas=
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=
+ok=Aceptar
+opacidad=Opacidade
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientaci\u00f3n\:
+origen_de_datos=Origen de dades
+Origen_de_datos=Orixe dos datos
+Origen_de_Datos=Orixe dos datos\:
+owner=Propietario
+paste=Pegar
+paste_elements=
+path=Ruta
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa c\u00f3 valor dun determinado campo
+Personalizado=Persoalizado
+personalizar_margenes=
+Pies=P\u00e9s
+pila_de_comandos=P\u00eda de comandos
+pixeles=p\u00edxeles
+pixels=pixels
+Plain=
+plantilla=
+please_insert_new_field_name=
+png=Arquivos png
+poligono=Pol\u00edgono
+polilinea=polili\u00f1a
+poner_capas_a=
+por_debajo_de=por debaixo de\:
+por_encima_de=por riba de\:
+Por_favor_active_la_capa=Por favor active a capa
+posicion_linea=Posici\u00f3n da li\u00f1a
+precision=
+preparar_pagina=Prepara p\u00e1xina
+Preparar_pagina=Prepara p\u00e1xina
+presentacion=Presentaci\u00f3n
+previsualizacion=Previsualizaci\u00f3n
+Previsualizacion=Previsualizaci\u00f3n
+Previsualizacion_de_simbolo=
+propiedad=
+propiedades=Propiedades
+propiedades_cajetin=Propiedades da cadro de rotulaci\u00f3n
+propiedades_capa=Propiedades da capa
+propiedades_de_la_capa=Propiedades da capa
+Propiedades_escala_grafica=Propiedades da escala gr\u00e1fica
+propiedades_grafico=Propiedades del gr\u00e1fico
+propiedades_mapa=Propiedades do mapa
+propiedades_marco_imagenes=Propiedades do marco de imaxes
+propiedades_marco_leyenda=Propiedades do marco de lenda
+propiedades_marco_vista=Propiedades do marco de vista
+propiedades_raster=Propiedades do raster
+propiedades_sesion=Propiedades da sesi\u00f3n
+propiedades_tabla=Propiedades da t\u00e1boa
+Propiedades_texto=Propiedades do texto
+propiedades_vista=Propiedades da vista
+Proyecciones=
+ps=
+puerto=Porto
+Pulgadas=Pulgadas
+punto=Punto
+quantile_intervals=Intervalos cuantiles
+quiere_continuar=Est\u00e1 seguro de que quere continuar?
+Quitar=Quitar
+Quitar_capa=Quitar capa
+quitar_enlaces=Quitar ligaz\u00f3ns
+Quitar_todos=Quitar todos
+quitar_uniones=Quitar uni\u00f3ns
+rango_de_escalas=Rango de escalas
+Rango_de_escalas=Rango de escalas
+realce=Realce
+realmente_desea_guardar=Realmente desexa gardar?
+recargar=
+recorte_colas=Recorte colas
+recorte_vista=Recorte a vista
+rectangulo=Rect\u00e1ngulo
+recuento=Reconto
+Recuperar_leyenda=Recuperar lenda
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zooms
+refrescar=Refrescar
+registros_seleccionados_total=Total rexistros seleccionados
+rehacer=Refacer
+rellenar_marco_vista=Rechear marco da vista
+relleno=Reenchido\:
+remove_elements=
+remove_fields=
+remove_row=Elimina fila
+remove_rows=
+rename_field=
+renombrar=Renomear
+reproyectar_aviso=A proxecci\u00f3n da capa non \u00e9 igual que a da vista\nAVISO\: Pode ser inexacto con algunhas transformaci\u00f3ns.\nPor favor, lea a documentaci\u00f3n
+reproyectar_pregunta=Desexa reproxectar?
+resolucion_resultado=Resoluci\u00f3n do resultado\:
+resto_valores=Resto de valores
+restore_palette=
+rotation_field=
+salir=Sa\u00edr
+salir_tooltip=Sa\u00edr
+salvar_raster=Gardar a raster xeoreferenciado
+Sample=Exemplo
+Se_superponen_a=Sobrep\u00f3\u00f1ense a
+Sean_disjuntos_a=sexan disxuntos a
+Sean_iguales_a=sexan iguais a
+seleccion=Selecci\u00f3n
+seleccion_fuente=Selecci\u00f3n de fonte
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar das capas activas os elementos que\:
+Seleccionar_del_conjunto=Seleccionar do conxunto
+Seleccionar_fichero=Seleccionar arquivo
+seleccionar_por_poligono=
+seleccionar_por_punto=Seleccionar por punto
+seleccionar_por_rectangulo=Seleccionar por rect\u00e1ngulo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccionar o campo polo que ligar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccione unha data...
+seleccione_tabla_a_enlazar=Seleccione a t\u00e1boa a ligar
+seleccione_tabla_origen=Selecciona a t\u00e1boa de orixe da join
+selection_color=Cor da selecci\u00f3n
+selection_up=
+separator=
+Servidor=Servidor
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=
+simbolo=
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbolox\u00eda
+simplificar_leyenda=
+simplify=
+sin_titulo=Sen t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar a cor do bordo coa de reenchido\:
+Size=
+sobre_la_barra=Sobre a barra
+Solo_para_capas_vectoriales=S\u00f3 para capas vectoriais
+start_edition=Comenzar edici\u00f3n
+statistics=Estat\u00edsticas
+stop_edition=Rematar edici\u00f3n
+Style=Estilo
+Subir_capa=Subir capa
+suma=Suma
+Superior=Superior
+symbol_selector=
+Tabla=T\u00e1boa
+Tabla_de_Atributos=T\u00e1boa de atributos
+tablas=T\u00e1boas
+Tablas=Taules
+tag=tag
+tamano=Tama\u00f1o\:
+tamano_metros=Tama\u00f1o en metros\:
+tamano_pagina=Tama\u00f1o da p\u00e1xina\:
+tamano_posicion=tama\u00f1o/posici\u00f3n
+tamanyo_borde=Tam\u00f1o do bordo
+tamanyo_fuente=Tama\u00f1o da fonte
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Texto
+this_table_is_not_self_editable=
+tipo_dato=Tipo dato
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de lenda
+tipo_fichero_proyecto=Arquivo de proxecto gvSIG (*.GVP)
+tipo_linea=Tipo de Li\u00f1a\:
+tipo_relleno=Tipo de Reenchido\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Xestor de proxectos
+titulo_fframetext=T\u00edtulo do campo de texto
+to_annotation=Transforma a capa de anotaci\u00f3ns
+to_palette=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=toquen
+transparencia=Transparencia
+Transparencia=Transparencia
+transparencia_pixel=Transparencia por p\u00edxel
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+untitled=Sen t\u00edtulo
+url=
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Empregar marco
+usar_titulo=Empregar t\u00edtulo
+usuario=Usuario
+utilizar_margenes_impresora=Empregar m\u00e1rxenes de impresora
+vacia=Baleira
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varianza
+Ventana=Fiestra
+ventana_proyecto=Vent\u00e1 de proxecto
+Ver=Ver
+ver_error_capa=
+ver_tabla_atributos=Ver T\u00e1boa de atributos
+ver_tags=
+ver_tooltip=Amosa a vent\u00e1 de proxecto
+vertical=Vertical
+vertical_space=
+visible=Visible
+visibles=Vis\u00edbeis
+Vista=Vista
+vistas=Vistas
+visualizacion=Visualizaci\u00f3n
+Visualizacion=Visualizaci\u00f3n
+visualizar_cuadricula=Visualizar malla
+warning=Aviso
+xmax=xmax
+xmin=xmin
+Yardas=Yardas
+ymax=ymax
+ymin=ymin
+Zoom_a_la_capa=Zoom \u00e1 capa
+Zoom_Acercar=Zoom acercar
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre a vista
+zoom_in_factor=
+Zoom_Mas=Zoom m\u00e1is
+Zoom_Mas_Vista=Zoom m\u00e1is sobre a vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre a vista
+zoom_out_factor=
+Zoom_pixel=Zoom pixel
+Zoom_Previo=Zoom previo
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom ao seleccionado

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_gl.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_ca.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_ca.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_ca.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e0xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=
+_(Simbolo_unico)=(S\u00edmbol \u00fanic)
+__proyeccion_actual=Projecci\u00f3 actual\:
+__redimensionar_texto_escala=Redimensione el text a escala amb la vista
+__seleccion_de_fuente=Selecci\u00f3 de font
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Avall
+abrir=Obrir
+abrir_plantilla=Obrir plantilla
+abrir_proyecto=Obrir projecte
+abrir_tooltip=Obri un projecte existent
+Abrir_una_capa=Obrir una capa
+Accion_Predefinida=Acci\u00f3 predefinida
+aceptar=Acceptar
+Aceptar=Acceptar
+acerca_de=Sobre...
+activar=Activar
+activar_regla=Activar regla
+activos=Actius
+add_delete_edit_fields=
+add_layer=Afegir capa
+add_rows=
+adjust_transparency=Ajustar transpar\u00e8ncia
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capes
+agrupar_graficos=Agrupar gr\u00e0fics
+agrupar_linea=Agrupar l\u00ednia gr\u00e0fica amb gr\u00e0fics
+Ajustar_transparencia=Ajustar transpar\u00e8ncia
+ajustes_linea_grafica=Ajustos de l\u00ednia gr\u00e0fica
+Al_leer_la_leyenda=En llegir la llegenda
+alias=\u00c0lies
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alineament\:
+alinear=Alinear
+alinear_graficos=Alinear gr\u00e0fics
+alta=Alta
+alto=Alt
+altura=Altura\:
+Altura_fija_de_texto=Altura fixa de text
+ambito=\u00c0mbit
+Anadir=Afegir
+Anadir_al_conjunto=Afegir al conjunt
+Anadir_capa=Afegir capa
+Anadir_Capa=Afegir capa
+anadir_tag=
+Anadir_todos=Afegir tots
+ancho=Ample
+ancho_alto=Amplada al\u00e7ada
+anchura=Ampl\u00e0ria\:
+Aplicar=Aplicar
+Archivo=Fitxer
+arriba=Amunt
+ascending_order=Orde ascendent
+ascending_order_tooltip=S'ordena pel camp seleccionat en orde ascendent
+Atributo=Atribut
+automatico=Autom\u00e0tic
+Ayuda=Ajuda
+back=Anterior
+background_color=Color de fons
+baja=Baixa
+Bajar_capa=Baixar capa
+bandas=Bandes
+barra=Barra
+base=base
+base_datos=Base de dades
+bmp=Fitxers de tipus bmp
+Bold=
+borra_seleccion=Esborrar selecci\u00f3
+borrador=Esborrany
+borrar=Esborrar
+box=
+brillo=Brillantor
+brillo_y_contraste=Brillantor i contrast
+browse=Examinar
+cajetin=
+Calcular_intervalos=Calcular intervals
+calidad=Qualitat
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Canvi color
+cambio_nombre=Canvi de nom
+campo=Camp
+Campo=Camp
+campo_altura_texto=Camp d'altura de text\:
+Campo_de_clasificacion=Camp de classificaci\u00f3
+Campo_de_etiquetado=Camp d'etiquetat
+Campos=Camps
+cancel=Cancel\u00b7lar
+Cancel=Cancel\u00b7lar
+cancelar=Cancel\u00b7lar
+Cancelar=Cancel\u00b7lar
+Capa=Capa
+Capas=Capes
+Capas_del_localizador=Capes del localitzador
+Centimetros=Cent\u00edmetres
+cerrar=Tancar
+Cerrar=Tancar
+change=
+change_before=
+change_behind=
+change_height=
+change_width=Cambiar ampl\u00e0ria
+circulo=Cercle
+clave=Clau
+close=Tancar
+coincidir_tamanyo=
+colocar_a_margenes=Col\u00b7locar amb refer\u00e8ncia a m\u00e0rgens.
+colocar_alrededor_seleccionados=Col\u00b7locar al voltant dels gr\u00e0fics seleccionats.
+colocar_alrededor_todos=Col\u00b7locar al voltant de tots els gr\u00e0fics.
+colocar_delante=Col\u00b7locar davant
+colocar_detras=Col\u00b7locar darrere
+color=Color\:
+Color_final=Color final\:
+Color_inicio=Color d'inici
+color_texto=Color del text\:
+comentarios=Comentaris
+comenzar_edicion=
+compleja=
+configurar=Configurar
+configurar_localizador=Configurar localitzador
+Configurar_localizador=Configurar localitzador ...
+confirmar_borrar=Est\u00e0 segur que desitja esborrar l'element?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Conservar escala de visualitzaci\u00f3
+consulta=Consulta
+Contengan=Ontinguen
+contraste=Contrast
+coor_geograficas=Coordenades geogr\u00e0fiques
+copiar=Copiar
+copy=Copiar
+cortar=Retallar
+creation_date=Data de creaci\u00f3
+Crucen_con=Encreuen amb
+cuando_activo=Si est\u00e0 Actiu
+cut=Retallar
+Dado_un_campo_de_atributos=Donat un camp d'atributs
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=Desfer
+delete_field=Esborrar el camp
+Derecha=Dreta
+Derecho=Dret
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e0fics
+descending_order=Orde descendent
+descending_order_tooltip=S'ordena pel camp seleccionat en orde descendent
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Des de Dalt\:
+desde_izquierda=Des de l'esquerra\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=Desfer
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Despla\u00e7ament
+desviacion_tipica=Desviaci\u00f3 t\u00edpica
+distance_units=Unitats de mesura
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divisions a l'esquerra
+documento=
+documentos_existentes=Documents existents
+draw_text_only=
+driver=Driver
+Dxffiles=Fitxers .DXF
+edicion=Edici\u00f3
+editable=
+Editar_leyenda=Editar legenda
+editar_vertices=Editar v\u00e8rtex
+el_numero_maximo_de_intervalos_para_este_campo_es=El nombre m\u00e0xim d'intervals per a este camps \u00e9s
+Elegir_Color=Elegir color
+Elegir_Fuente=Elegir font
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=elements seleccionats de la capa
+Eliminar=Eliminar
+eliminar_capa=Eliminar capa
+eliminar_columna=
+eliminar_extremos=Eliminar extrems
+eliminar_fila=
+en_el_mapa=En el mapa\:
+En_metros=En metres
+En_pixels=En pixels
+en_unidades=
+Encuadre=Enquadre
+Encuadre_Vista=Enquadre sobre la vista
+enlace_vivo=Enlla\u00e7 viu
+Enlazar_a_fichero_de_texto=Enlla\u00e7ar a fitxer de text
+Enlazar_a_ficheros_de_imagen=Enlla\u00e7ar a fitxers d'imatge
+equal_intervals=Intervals iguals
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Error guardant la llegenda
+Error_guardando_la_plantilla=
+escala=Escala
+Escala=Escala
+escala_desconocida=
+escala_maxima=Escala m\u00e0xima
+Escala_Maxima=Escala m\u00e0xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada per l'usuari
+espaciado_horizontal=Espaiat horitzontal de la malla
+espaciado_vertical=Espaiat vertical de la malla
+espacio=Espai\:
+estadisticas=Estad\u00edstiques
+este_por_debajo_de_=Que estiga por davall de
+este_por_encima_de=Que estiga per damunt de
+Esten_contenidos_en=Estiguen continguts en
+Etiqueta=Etiqueta
+Etiquetados=Etiquetats
+etiquetas=Etiquetes
+Etiquetas_estandar=Etiquetes est\u00e0ndard
+Examinar=Examinar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extensi\u00f3
+Extent=Extensi\u00f3
+extents_no_coincidentes=Extensions no coincidents
+factor_zoom_incorrecto=
+fallo_capas=Fallada en l'acc\u00e9s a les capes. Les capes seg\u00fcents seran eliminades del projecte.
+family=
+fichero=
+Fichero=Fitxer
+fichero_existe=Hi ha fitxer
+fichero_incorrecto=Fitxer incorrecte
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtre
+finish=Finalitzar
+Font=Font
+formato=Format
+Formato_de_numero_erroneo=
+formato_incorrecto=Format incorrecte
+fuente=Font
+General=General
+georeferenciado=
+gestion_encuadre=Gesti\u00f3 d'Enquadres
+grados=Graus\:
+Grados=Graus
+Graficos=Gr\u00e0fics
+grosor_linea=Gruix de l\u00ednia\:
+group=Agrupar
+group_graphic_line=
+grupo=
+guardado=Guardat en
+guardar=Guardar
+Guardar=Guardar
+guardar_cambios=Vol guardar els canvis?
+guardar_como=Guardar com a...
+guardar_como_plantilla=Guardar com a plantilla
+Guardar_el_zoom_actual=Guardar el zoom
+Guardar_leyenda=Guardar llegenda
+guardar_proyecto=Guardar projecte
+guardar_tooltip=Guarda els canvis del projecte
+Habilitar_etiquetado=Habilitar etiquetat
+Hiperenlace=Hiperenlla\u00e7
+horizontal=Horitzontal
+horizontal_space=
+Identificar_Resultados=Identificar resultats
+Igual_que_la_impresora=Igual que la impressora
+igual_todos_lados=Despla\u00e7ament igual per tots els costats.
+imagen=Imatge
+Implimir=
+importar=Importar
+Imprimir=Imprimir
+Indexando=S'est\u00e0 indexant...
+Indexando_espacialmente=S'est\u00e0 indexant espacialment la capa
+indexar_campos=
+Inferior=Inferior
+info=Informaci\u00f3
+informacion=Informaci\u00f3
+Informacion=Informaci\u00f3
+Inicializando=Inicialitzant
+initial_warning=
+insert_row=Inserix fila
+Insertar=Inserir
+insertar_cajetin=Inserir caixet\u00ed
+insertar_circulo=Insertar cercle
+insertar_columna=
+insertar_escala=Insertar escala
+insertar_fila=
+insertar_imagen=Insertar imatge
+insertar_leyenda=Insertar llegenda
+insertar_linea=Insertar l\u00ednia
+insertar_norte=Insertar nord
+insertar_poligono=Insertar pol\u00edgon
+insertar_polilinea=Inserir polil\u00ednia
+insertar_punto=Insertar punt
+insertar_rectangulo=Insertar rectangle
+insertar_texto=Insertar text
+insertar_vista=Insertar vista
+Intersecten_con=Intersecten amb
+Intervalo=Interval
+Intervalos=Intervals
+introduce_nombre=Introdu\u00efx el nou nom
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=
+Izquierda=Esquerra
+Izquierdo=Esquerre
+join=Unir
+jpg=Fitxers JPEG
+kilometros=Kil\u00f2metres
+Kilometros=Kil\u00f2metres
+leyenda=Llegenda
+Leyenda=Llegenda
+leyenda_campo_unido=S'est\u00e0 utilitzant un camp de la uni\u00f3 en la llegenda (i/o etiquetatge). Canvie la llegenda abans de llevar la uni\u00f3, per favor.
+Leyenda_Por_Defecto=Llegenda per defecte
+linea=L\u00ednia
+linea_grafica=L\u00ednia gr\u00e0fica
+lineal_directo=Lineal directe
+link=Enlla\u00e7
+Link=Enlla\u00e7
+localizador=localitzador
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Malla activada
+manage_fields=
+mantener_intervalo=Mantindre interval
+map_units=Unitats de mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapes
+marco=Marc
+marco_vista=Marc de la vista
+margenes=M\u00e0rgens\:
+mas_de_100_simbolos=M\u00e9s de 100 s\u00edmbols no solen aportar informaci\u00f3 en un pla
+max_length_is=
+maximo=M\u00e0xim
+MDIFrame.quiere_salir=Est\u00e0 segur que vol eixir?
+MDIFrame.salir=Eixir
+media=Media
+medir_area=Mesurar \u00e1rea
+medir_distancias=Mesurar dist\u00e0ncies
+metadatos=Metadatos
+metros=Metres
+Metros=Metres
+Milimetros=Mil\u00b7l\u00edmetres
+Millas=Milles
+minimo=M\u00ednim
+modificar=
+modification_date=\u00daltima data de modificaci\u00f3
+mostrar_escala_numerica=
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unitats
+move_elements=
+Muestra_atributos=Mostra els atributs de les capes seleccionades.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra els elements de la capa usant un s\u00edmbol per cada valor \u00fanic
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra els elements de la capa usant una gamma de colors en funci\u00f3 del valor d'un determinat camp d'atributs
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra tots els elements d'una capa usant el mateix s\u00edmbol
+natural_intervals=Intervals naturals
+navegacion=Navegaci\u00f3
+navegacion_vista=Navegaci\u00f3 vista
+necesita_una_capa_activa=Necessita una capa activa
+necesita_una_capa_vectorial_activa=Necessita una capa vectorial activa
+new_field=Nou camp
+new_field_properties=
+next=Seg\u00fcent
+ninguna_impresora_configurada=Cap impressora configurada
+Nivel_de_transparencia=Nivell de transpar\u00e8ncia
+no=No
+no_activos=No actius
+No_de_intervalos=Nr. d'intervals
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=No mostrar la capa quan l'escala
+No_mostrar_la_capa_cuando_la_escala=No mostrar la capa quan l'escala
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=No s'ha pogut obtindre la taula de la capa
+no_visibles=No visibles
+nombre=Nom
+Nombre=Nom
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nom que se li donar\u00e0 al zoom
+nombre_sesion=Nom de la sessi\u00f3
+none=
+none_selected=Cap seleccionat
+normal=Normal
+north=Nord
+Nueva_tabla=Nova taula
+nuevo=Nou
+Nuevo_conjunto=Nou conjunt
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Nou projecte
+nuevo_tooltip=Crea un nou projecte
+num_bandas=Nombre de bandes
+num_columnas=Nombre de columnes
+num_filas=Nombre de files
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=N\u00famero incorrecte
+ok=D'acord
+opacidad=Opacitat
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientaci\u00f3\:
+origen_de_datos=Origen de dades
+Origen_de_datos=Origen de dades
+Origen_de_Datos=Origen de les dades\:
+owner=Propietari
+paste=Apegar
+paste_elements=
+path=Ruta
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permet etiquetar els elements del mapa amb el valor d'un determinat camp
+Personalizado=Personalitzat
+personalizar_margenes=
+Pies=Peus
+pila_de_comandos=Pila de comandaments
+pixeles=p\u00edxels
+pixels=pixels
+Plain=Normal
+plantilla=plantilla
+please_insert_new_field_name=
+png=Fitxers png
+poligono=Pol\u00edgon
+polilinea=polil\u00ednia
+poner_capas_a=Posar capes a
+por_debajo_de=per davall de\:
+por_encima_de=per damunt de\:
+Por_favor_active_la_capa=Per favor active la capa
+posicion_linea=Posici\u00f3 de la l\u00ednia
+precision=
+preparar_pagina=Preparar p\u00e0gina
+Preparar_pagina=Preparar p\u00e0gina
+presentacion=Presentaci\u00f3
+previsualizacion=Previsualitzaci\u00f3
+Previsualizacion=Previsualitzaci\u00f3
+Previsualizacion_de_simbolo=Previsualitzaci\u00f3 de s\u00edmbol
+propiedad=
+propiedades=Propietats
+propiedades_cajetin=Propietats del caixet\u00ed
+propiedades_capa=Propietats de la capa
+propiedades_de_la_capa=Propietats de la capa
+Propiedades_escala_grafica=Propietats de l'escala
+propiedades_grafico=Propietats gr\u00e0fic
+propiedades_mapa=Propietats del mapa
+propiedades_marco_imagenes=Propietats del marc d'im\u00e0tgens
+propiedades_marco_leyenda=Propietats del marc de la llegenda
+propiedades_marco_vista=Propietats del marc de la vista
+propiedades_raster=Propietats del raster
+propiedades_sesion=Propietats de la sessi\u00f3
+propiedades_tabla=Propietats de la taula
+Propiedades_texto=Propietats del text
+propiedades_vista=Propietats de la vista
+Proyecciones=
+ps=
+puerto=
+Pulgadas=Polsades
+punto=Punt
+quantile_intervals=Intervals quantils
+quiere_continuar=Est\u00e0 segur que vol continuar?
+Quitar=Llevar
+Quitar_capa=Llevar capa
+quitar_enlaces=LLevar enlla\u00e7os
+Quitar_todos=Llevar tots
+quitar_uniones=Llevar unions
+rango_de_escalas=Rang d'escales
+Rango_de_escalas=Rang d'escales
+realce=Relleu
+realmente_desea_guardar=Realment desitja guardar?
+recargar=
+recorte_colas=Retall de cues
+recorte_vista=Retall a vista
+rectangulo=Rectangle
+recuento=Recompte
+Recuperar_leyenda=Recuperar llegenda
+Recuperar_y_eliminar_otros_zoom=Recuperar i eliminar altres zooms
+refrescar=Refrescar
+registros_seleccionados_total=Total registres seleccionats
+rehacer=Refer
+rellenar_marco_vista=Reomplir marc de la vista
+relleno=Farciment\:
+remove_elements=
+remove_fields=
+remove_row=Eliminia fila
+remove_rows=
+rename_field=
+renombrar=Renomenar
+reproyectar_aviso=La projecci\u00f3 de la capa no \u00e9s igual que la de la vista.\nAVISO\: pot ser inexacte amb algunes transformaciones.\nPer favor, llija la documentaci\u00f3
+reproyectar_pregunta=Vol reprojectar-la?
+resolucion_resultado=Resoluci\u00f3 del resultat\:
+resto_valores=Resta de valors
+restore_palette=
+rotation_field=
+salir=Eixir
+salir_tooltip=Eixir
+salvar_raster=Salvar el raster georeferenciat
+Sample=Exemple
+Se_superponen_a=Se superposen a
+Sean_disjuntos_a=siguen disjunts a
+Sean_iguales_a=siguen iguals a
+seleccion=Selecci\u00f3
+seleccion_fuente=Selecci\u00f3 de font
+Seleccion_por_capa=Selecci\u00f3 per capa
+selecciona_sistema_de_referencia=Seleccioneu sistema de refer\u00e8ncia
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capes
+seleccionar_capas_raster=Seleccionar capes r\u00e0ster
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccione de les capes actives els elements que\:
+Seleccionar_del_conjunto=Seleccionar del conjunt
+Seleccionar_fichero=Seleccionar fitxer
+seleccionar_por_poligono=
+seleccionar_por_punto=Seleccionar per punt
+seleccionar_por_rectangulo=Seleccionar per rectangle
+seleccionar_todos=Seleccionar tots
+seleccione_campo_enlace=Seleccioneu el camp a trav\u00e9s del qual cal enlla\u00e7ar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccione una data...
+seleccione_tabla_a_enlazar=Seleccioneu la taula que cal enlla\u00e7ar
+seleccione_tabla_origen=Seleccioneu la taula d'origen de la uni\u00f3
+selection_color=Color de la selecci\u00f3
+selection_up=
+separator=
+Servidor=Servidor
+Shapefile=Shapefile
+show_this_dialog_next_startup=
+si=
+siempre=Sempre
+simbolo=S\u00edmbol
+Simbolo=S\u00edmbol
+Simbolo_unico=S\u00edmbol \u00fanic
+Simbologia=Simbologia
+simplificar_leyenda=
+simplify=
+sin_titulo=Sense t\u00edtol
+sincronizar_color_borde_relleno=Sincronitzar el color de la vora amb el del farciment\:
+Size=Dimensi\u00f3
+sobre_la_barra=Sobre la barra
+Solo_para_capas_vectoriales=Sols per a capes vectorials
+start_edition=Comen\u00e7ar l'edici\u00f3
+statistics=Estad\u00edstiques
+stop_edition=Acabar l'edici\u00f3
+Style=Estil
+Subir_capa=Pujar capa
+suma=Suma
+Superior=Superior
+symbol_selector=
+Tabla=Taula
+Tabla_de_Atributos=Taula d'Atributs
+tablas=Taules
+Tablas=Taules
+tag=tag
+tamano=Dimensi\u00f3\:
+tamano_metros=Dimensi\u00f3 en metres
+tamano_pagina=Dimensi\u00f3 de p\u00e0gina\:
+tamano_posicion=dimensi\u00f3/posici\u00f3
+tamanyo_borde=Grand\u00e0ria de la vora
+tamanyo_fuente=Grand\u00e0ria de font
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=
+this_table_is_not_self_editable=
+tipo_dato=Tipus de dada
+tipo_de_intervalo=Tipus d'interval
+tipo_de_leyenda=Tipus de llegenda
+tipo_fichero_proyecto=Fitxer de projecte gvSIG (*.GVP)
+tipo_linea=Tipus de L\u00ednia\:
+tipo_relleno=Tipus de Farciment\:
+tipo_simbolo=Tipus de s\u00edmbol\:
+tipos_de_documentos=Tipus de documents
+titulo=Gestor de projectes
+titulo_fframetext=T\u00edtol del camp de text
+to_annotation=Transformar a capa d'anotacions
+to_palette=Canviar a paleta
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=toquen
+transparencia=Transpar\u00e8ncia
+Transparencia=Transpar\u00e8ncia
+transparencia_pixel=Transpar\u00e8ncia per p\u00edxel
+ungroup=Desagrupar
+unidades=Unitats\:
+Unidades=Unitats\:
+untitled=Sense t\u00edtol
+url=
+Usar_indice_espacial=Usar \u00edndex espacial
+usar_marco=Usar marc
+usar_titulo=Usar t\u00edtol
+usuario=Usuari
+utilizar_margenes_impresora=Utilitzar m\u00e0rgens de la impressora.
+vacia=Buida
+Valor=Valor
+Valores=Valors
+Valores_unicos=Valors \u00fanics
+varianza=Varian\u00e7a
+Ventana=Finestra
+ventana_proyecto=Finestra de projecte
+Ver=Veure
+ver_error_capa=
+ver_tabla_atributos=Veure Taula d'atributs
+ver_tags=
+ver_tooltip=Mostra la finestra de projecte
+vertical=Vertical
+vertical_space=
+visible=Visible
+visibles=Visibles
+Vista=Vista
+vistas=Vistes
+visualizacion=Visualitzaci\u00f3
+Visualizacion=Visualitzaci\u00f3
+visualizar_cuadricula=Visualitzeu malla
+warning=Av\u00eds
+xmax=X m\u00e0xima
+xmin=X m\u00ednima
+Yardas=Lardes
+ymax=Y m\u00e0xima
+ymin=Y m\u00ednima
+Zoom_a_la_capa=Zoom a la capa
+Zoom_Acercar=Zoom acostar
+Zoom_Alejar=Zoom allunyar
+Zoom_Completo=Zoom complet
+Zoom_Completo_Vista=Zoom complet sobre la vista
+zoom_in_factor=
+Zoom_Mas=Zoom m\u00e9s
+Zoom_Mas_Vista=Zoom m\u00e9s sobre la vista
+Zoom_Menos=Zoom menys
+Zoom_Menos_Vista=Zoom menys sobre la vista
+zoom_out_factor=
+Zoom_pixel=Zoom a la resoluci\u00f3 del raster
+Zoom_Previo=Zoom previ
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom a la part seleccionada

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_ca.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_pt.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_pt.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_pt.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+(escala_maxima)=(escala m\u00e1xima)
+(escala_minima)=(escala m\u00ednima)
+1\:=
+_(Simbolo_unico)=(S\u00edmbolo \u00fanico)
+__proyeccion_actual=Projec\u00e7\u00e3o actual\:
+__redimensionar_texto_escala=Redimensionar o texto de acordo com a escala da vista
+__seleccion_de_fuente=Selec\u00e7\u00e3o da fonte
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Abaixo
+abrir=Abrir
+abrir_plantilla=Abrir molde
+abrir_proyecto=Abrir projecto
+abrir_tooltip=Abrir um projecto existente
+Abrir_una_capa=Abrir uma capa
+Accion_Predefinida=Ac\u00e7\u00e3o predefinida
+aceptar=Aceitar
+Aceptar=Aceitar
+acerca_de=Sobre...
+activar=Activate
+activar_regla=Activar r\u00e9gua
+activos=Activos
+add_delete_edit_fields=
+add_layer=Adicionar capa
+add_rows=
+adjust_transparency=Configurar transpar\u00eancia
+agrupacion=
+agrupar=Agrupar
+agrupar_capas=Agrupar capas
+agrupar_graficos=Agrupar gr\u00e1ficos
+agrupar_linea=Agrupar linha gr\u00e1fica com gr\u00e1ficos
+Ajustar_transparencia=Ajustar transpar\u00eancia
+ajustes_linea_grafica=Ajustes de linha gr\u00e1fica
+Al_leer_la_leyenda=Ao ler a legenda
+alias=Ali\u00e1s
+align_center=
+align_down=
+align_left=
+align_right=
+align_to_layout_center=
+align_to_layout_down=
+align_to_layout_left=
+align_to_layout_right=
+align_to_layout_up=
+align_to_layout_vertical_center=
+align_up=
+align_vertical_center=
+alineamiento=Alinhamento\:
+alinear=Alinhar
+alinear_graficos=Alinhar gr\u00e1ficos
+alta=Alta
+alto=Alto
+altura=Altura\:
+Altura_fija_de_texto=Tamanho fixo de texto
+ambito=\u00c2mbito
+Anadir=Adicionar
+Anadir_al_conjunto=Adicionar ao conjunto
+Anadir_capa=Adicionar capa
+Anadir_Capa=Adicionar capa
+anadir_tag=
+Anadir_todos=Adicionar todos
+ancho=Largura
+ancho_alto=Largura X altura
+anchura=Grossura\:
+Aplicar=Aplicar
+Archivo=Ficheiro
+arriba=Acima
+ascending_order=Ordem ascendente
+ascending_order_tooltip=Ordenar segundo o campo seleccionado por ordem ascendente
+Atributo=Atributo
+automatico=Autom\u00e1tico
+Ayuda=Ajuda
+back=Anterior
+background_color=Cor de fundo
+baja=Baixa
+Bajar_capa=Mover capa para baixo
+bandas=Bandas
+barra=Barra\:
+base=base
+base_datos=Base de dados
+bmp=Ficheiros do tipo bmp
+Bold=Negrito
+borra_seleccion=Apagar selec\u00e7\u00e3o
+borrador=Rascunho
+borrar=Apagar
+box=
+brillo=Brightness
+brillo_y_contraste=
+browse=
+cajetin=
+Calcular_intervalos=Calcular intervalos
+calidad=Qualidade
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=
+Cambio_Color=Mudar de cor
+cambio_nombre=Mudar de nome
+campo=Campo
+Campo=Campo
+campo_altura_texto=Altura do campo de texto\:
+Campo_de_clasificacion=Campo de classifica\u00e7\u00e3o
+Campo_de_etiquetado=Campo da etiqueta
+Campos=Campos
+cancel=Cancelar
+Cancel=Cancelar
+cancelar=Cancelar
+Cancelar=Cancelar
+Capa=Capa
+Capas=Capas
+Capas_del_localizador=Localizador de capas
+Centimetros=Cent\u00edmetros
+cerrar=Fechar
+Cerrar=Fechar
+change=
+change_before=
+change_behind=
+change_height=
+change_width=
+circulo=C\u00edrculo
+clave=Senha
+close=Fechar
+coincidir_tamanyo=
+colocar_a_margenes=Colocar com referencia \u00e0s margens
+colocar_alrededor_seleccionados=Colocar ao redor dos gr\u00e1ficos seleccionados.
+colocar_alrededor_todos=Colocar ao redor de todos os gr\u00e1ficos.
+colocar_delante=Colocar \u00e0 frente
+colocar_detras=Colocar atr\u00e1s
+color=Cor\:
+Color_final=Cor final\:
+Color_inicio=Cor inicial
+color_texto=Cor do texto\:
+comentarios=Coment\u00e1rios
+comenzar_edicion=
+compleja=
+configurar=Configurar
+configurar_localizador=Configurar localizador
+Configurar_localizador=Configurar localizador ...
+confirmar_borrar=Aceita apagar o elemento ?
+conflicto_de_nombres_de_mapas_al_pegar=
+conflicto_de_nombres_de_tablas_al_pegar=
+conflicto_de_nombres_de_vistas_al_pegar=
+conflito_de_nombres_de_tablas_al_pegar=
+conservar_escala_visualizacion=Manter escala de vis\u00e3o
+consulta=Consulta
+Contengan=Contenham
+contraste=Contrast
+coor_geograficas=Coordenadas geogr\u00e1ficas
+copiar=
+copy=
+cortar=
+creation_date=Data de cria\u00e7\u00e3o
+Crucen_con=Cruzem com
+cuando_activo=Quando activo
+cut=
+Dado_un_campo_de_atributos=Dado de um campo de atributos
+debera_introducir_nombres_para_las_vistas_a_pegar=
+debera_introducir_nombres_para_los_mapas_a_pegar=
+default_projection=
+default_value=
+dehacer=
+delete_field=
+Derecha=Direita
+Derecho=Direito
+desagrupar=Desagrupar
+desagrupar_capas=
+desagrupar_graficos=Desagrupar gr\u00e1ficos
+descending_order=Ordem descendente
+descending_order_tooltip=Ordenar segundo o campo seleccionado por ordem descendente
+descripcion_de_configuracion_capa_de_anotaciones=
+descripcion_de_crear_capa_de_anotaciones=
+desde_arriba=Desde cima\:
+desde_izquierda=Desde a esquerda\:
+desea_borrar_el_documento=
+desea_borrar_la_capa=
+desea_continuar=
+deshacer=
+desplaza_los_elementos_seleccionados_a_la_derecha=
+desplaza_los_elementos_seleccionados_a_la_izquierda=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=
+desplaza_los_elementos_seleccionados_hacia_abajo=
+desplaza_los_elementos_seleccionados_hacia_arriba=
+Desplazamiento=Movimenta\u00e7\u00e3o
+desviacion_tipica=Desvia\u00e7\u00e3o t\u00edpica
+distance_units=Unidades de medida
+distribuir=Distribuir\:
+distribuir_elementos_sobre_todo_el_layout=
+distributes_down=
+distributes_horizontal=
+distributes_left=
+distributes_right=
+distributes_to_layout_down=
+distributes_to_layout_horizontal=
+distributes_to_layout_left=Distribuye izquierda del layout
+distributes_to_layout_right=
+distributes_to_layout_up=
+distributes_to_layout_vertical=
+distributes_up=
+distributes_vertical=
+distribuye_el_espacio_entre_los_elementos_en_horizontal=
+distribuye_el_espacio_entre_los_elementos_en_vertical=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=
+divisiones_izquierda=Divis\u00f5es para a esquerda
+documento=
+documentos_existentes=Documentos existentes
+draw_text_only=
+driver=Driver
+Dxffiles=Ficheiros dxf
+edicion=
+editable=Editav\u00e9l
+Editar_leyenda=Editar legenda
+editar_vertices=
+el_numero_maximo_de_intervalos_para_este_campo_es=O n\u00famero m\u00e1ximo de intervalos para este campo s\u00e3o
+Elegir_Color=Seleccionar cor
+Elegir_Fuente=Seleccionar fonte
+elemento_ya_existe=
+Elementos_seleccionados_de_la_capa=Elementos seleccionados da capa
+Eliminar=Remover
+eliminar_capa=Remover capa
+eliminar_columna=
+eliminar_extremos=Remover extremos
+eliminar_fila=
+en_el_mapa=No mapa\:
+En_metros=Em metros
+En_pixels=Em pixels
+en_unidades=
+Encuadre=Zooms
+Encuadre_Vista=Enquadrar vista
+enlace_vivo=Hiperliga\u00e7\u00e3o viva
+Enlazar_a_fichero_de_texto=Hiperliga\u00e7\u00e3o para ficheiros de texto
+Enlazar_a_ficheros_de_imagen=Hiperliga\u00e7\u00e3o para ficheiros de imagem
+equal_intervals=Intervalos iguais
+Error_exportando_SLD=
+Error_guardando_la_leyenda=Erro ao guardar a legenda
+Error_guardando_la_plantilla=
+escala=Escala
+Escala=Escala
+escala_desconocida=
+escala_maxima=Escala m\u00e1xima
+Escala_Maxima=Escala m\u00e1xima
+escala_minima=Escala m\u00ednima
+Escala_Minima=Escala m\u00ednima
+escala_usuario=Escala especificada pelo usu\u00e1rio
+espaciado_horizontal=Espa\u00e7o horizontal da malha
+espaciado_vertical=Espa\u00e7o vertical da malha
+espacio=Espa\u00e7o\:
+estadisticas=Estat\u00edsticas
+este_por_debajo_de_=Esteja por debaixo de
+este_por_encima_de=Esteja por em cima de
+Esten_contenidos_en=Estejam dentro de
+Etiqueta=Etiqueta
+Etiquetados=Etiquetas
+etiquetas=Etiquetas\:
+Etiquetas_estandar=Etiquetas padr\u00e3o
+Examinar=Procurar
+export=Exportar
+exportar=Exportar
+exportar_pdf=Exportar a pdf
+exportar_ps=Exportar a ps
+extension=Extens\u00e3o
+Extent=Extens\u00e3o
+extents_no_coincidentes=A extens\u00e3o da imagem seleccionada n\u00e3o coincide com a imagem de origem.
+factor_zoom_incorrecto=
+fallo_capas=Erro ao aceder \u00e0s capas. As siguientes capas v\u00e3o ser eliminadas do projecto
+family=
+fichero=
+Fichero=Ficheiro
+fichero_existe=O ficheiro seleccionado j\u00e1 existe como banda da capa
+fichero_incorrecto=Ficheiro incorrecto
+fichero_ya_existe_seguro_desea_guardarlo=
+field_already_exists=
+field_decimal_count=
+field_default_value=
+field_length=
+field_manager=
+field_name=
+field_type=
+filtro=Filtro
+finish=Terminar
+Font=Fonte
+formato=Formato
+Formato_de_numero_erroneo=
+formato_incorrecto=Formato incorrecto
+fuente=Fonte
+General=Geral
+georeferenciado=
+gestion_encuadre=Gest\u00e3o de enfoque
+grados=Graus\:
+Grados=Graus
+Graficos=Gr\u00e1ficos
+grosor_linea=Grossura da linha\:
+group=Agrupar
+group_graphic_line=
+grupo=
+guardado=Guardado em
+guardar=
+Guardar=Guardar
+guardar_cambios=Guardar as altera\u00e7\u00f5es?
+guardar_como=Guardar como...
+guardar_como_plantilla=Guardar como molde
+Guardar_el_zoom_actual=Guardar zoom actual
+Guardar_leyenda=Guardar legenda
+guardar_proyecto=Guardar projecto
+guardar_tooltip=Guardar as altera\u00e7\u00f5es do projeto
+Habilitar_etiquetado=Activar etiquetas
+Hiperenlace=Hiperliga\u00e7\u00e3o
+horizontal=Horizontal
+horizontal_space=
+Identificar_Resultados=Identificar resultados
+Igual_que_la_impresora=Igual \u00e0 impressora
+igual_todos_lados=Igual em todos os lados.
+imagen=Imagem
+Implimir=
+importar=Importar
+Imprimir=Imprimir
+Indexando=Indexing...
+Indexando_espacialmente=
+indexar_campos=
+Inferior=Abaixo
+info=Informa\u00e7\u00e3o
+informacion=Informa\u00e7\u00e3o
+Informacion=Informa\u00e7\u00e3o
+Inicializando=A iniciar
+initial_warning=
+insert_row=
+Insertar=Inserir
+insertar_cajetin=
+insertar_circulo=Inserir c\u00edrculo
+insertar_columna=
+insertar_escala=Inserir escala
+insertar_fila=
+insertar_imagen=Inserir imagem
+insertar_leyenda=Inserir legenda
+insertar_linea=Inserir linha
+insertar_norte=Inserir rosa-dos-ventos
+insertar_poligono=Inserir pol\u00edgono
+insertar_polilinea=
+insertar_punto=Inserir ponto
+insertar_rectangulo=Inserir rect\u00e2ngulo
+insertar_texto=Inserir texto
+insertar_vista=Inserir vista
+Intersecten_con=Intersectam com
+Intervalo=Intervalo
+Intervalos=Intervalos
+introduce_nombre=Introduzir novo nome
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=
+introduzca_nuevo_nombre_para_la_vista=
+invalid_value_for_gap=
+invert_selection=
+Italic=It\u00e1lico
+Izquierda=Esquerda
+Izquierdo=Esquerdo
+join=Uni\u00e3o
+jpg=Ficheiros jpeg
+kilometros=Quil\u00f3metros
+Kilometros=Quil\u00f3metros
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Se est\u00e1 a utilizar um campo da uni\u00e3o na legenda (e/ou etiquetas). Mude a legenda antes de retirar a uni\u00e3o, por favor.
+Leyenda_Por_Defecto=Legenda por defeito
+linea=Linha
+linea_grafica=Linha gr\u00e1fica
+lineal_directo=Lineal direito
+link=Hiperliga\u00e7\u00e3o
+Link=Hiperliga\u00e7\u00e3o
+localizador=Locator
+locked_element=
+locked_element_it_cannot_be_deleted=
+locked_element_it_cannot_be_renamed=
+m/pixel=metros/pixel
+malla_activada=Malha activada
+manage_fields=
+mantener_intervalo=Manter intervalo
+map_units=Unidades do mapa
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapas
+marco=Marco
+marco_vista=Marco da vista
+margenes=Margens\:
+mas_de_100_simbolos=Mais de 100 s\u00edmbolos n\u00e3o contribuem para uma clara informa\u00e7\u00e3o de um mapa.
+max_length_is=
+maximo=M\u00e1ximo
+MDIFrame.quiere_salir=Fechar gvSIG?
+MDIFrame.salir=Fechar
+media=M\u00e9dia
+medir_area=Medir \u00e1rea
+medir_distancias=Medir dist\u00e2ncias
+metadatos=Metadatos
+metros=Metros
+Metros=Metros
+Milimetros=Mil\u00edmetros
+Millas=Milhas
+minimo=M\u00ednimo
+modificar=
+modification_date=Data de modifica\u00e7\u00e3o
+mostrar_escala_numerica=
+Mostrar_siempre=Mostrar sempre
+mostrar_unidades=Mostrar unidades
+move_elements=
+Muestra_atributos=Mostrar atributos das capas seleccionadas.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Mostra os elementos da capa usando um s\u00edmbolo por cada valor \u00fanico
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Mostra os elementos da capa usando uma gama de cores em fun\u00e7\u00e3o do valor de um determinado campo de atributos
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Mostra todos os elementos de uma capa usando o mesmo s\u00edmbolo
+natural_intervals=Intervalos naturais
+navegacion=Navega\u00e7\u00e3o
+navegacion_vista=Vista modo navega\u00e7\u00e3o
+necesita_una_capa_activa=
+necesita_una_capa_vectorial_activa=
+new_field=
+new_field_properties=
+next=Seguinte
+ninguna_impresora_configurada=Nenhuma impressora configurada
+Nivel_de_transparencia=N\u00edvel de transpar\u00eancia
+no=No
+no_activos=N\u00e3o activos
+No_de_intervalos=N\u00ba de intervalos
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=
+No_mostrar=N\u00e3o mostrar a capa quando a escala
+No_mostrar_la_capa_cuando_la_escala=N\u00e3o mostrar a capa quando a escala
+no_se_pegaran_las_tablas=
+no_se_pegaran_las_vistas_del_conflicto=
+No_se_pudo_obtener_la_tabla_de_la_capa=
+no_visibles=N\u00e3o vis\u00edvel
+nombre=Nome
+Nombre=Nome
+nombre_no_valido=
+Nombre_que_se_le_dara_al_zoom=Nome para o zoom
+nombre_sesion=Nome da sess\u00e3o
+none=
+none_selected=Nenhum seleccionado
+normal=Normal
+north=Norte
+Nueva_tabla=Nova tabela
+nuevo=Novo
+Nuevo_conjunto=Novo conjunto
+nuevo_nombre_para_el_mapa=
+nuevo_proyecto=Novo projecto
+nuevo_tooltip=Criar novo projecto
+num_bandas=N\u00famero de bandas
+num_columnas=
+num_filas=
+Num_intervalos=
+numero_decimales_mostrar=
+numero_incorrecto=
+ok=Aceitar
+opacidad=Opacidade
+operacion_cancelada=
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orienta\u00e7\u00e3o\:
+origen_de_datos=Origem de dados
+Origen_de_datos=Origem dos dados
+Origen_de_Datos=Origem dos dados\:
+owner=Propriet\u00e1rio
+paste=Paste
+paste_elements=
+path=Rota
+pdf=
+pegar=
+pegar_mapas=
+pegar_vistas=
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Permite etiquetar os elementos do mapa com o valor de um determinado campo
+Personalizado=Personalizado
+personalizar_margenes=
+Pies=P\u00e9s
+pila_de_comandos=
+pixeles=pixels
+pixels=pixels
+Plain=
+plantilla=
+please_insert_new_field_name=
+png=Ficheiros png
+poligono=
+polilinea=
+poner_capas_a=
+por_debajo_de=Por debaixo de\:
+por_encima_de=Por em cima de\:
+Por_favor_active_la_capa=
+posicion_linea=Posi\u00e7\u00e3o da linha
+precision=
+preparar_pagina=Preparar p\u00e1gina
+Preparar_pagina=Preparar p\u00e1gina
+presentacion=Apresenta\u00e7\u00e3o
+previsualizacion=
+Previsualizacion=Pr\u00e9-visualizar
+Previsualizacion_de_simbolo=Pr\u00e9-visualiza\u00e7\u00e3o do s\u00edmbolo
+propiedad=
+propiedades=Propriedades
+propiedades_cajetin=
+propiedades_capa=
+propiedades_de_la_capa=
+Propiedades_escala_grafica=Propriedades da escala
+propiedades_grafico=Propriedades gr\u00e1ficas
+propiedades_mapa=Propriedades do mapa
+propiedades_marco_imagenes=Propriedades do marco das imagens
+propiedades_marco_leyenda=Propriedades do marco da legenda
+propiedades_marco_vista=Propriedades do marco da vista
+propiedades_raster=Propiedades da cobertura
+propiedades_sesion=Propriedades da sess\u00e3o
+propiedades_tabla=Propriedades de tabela
+Propiedades_texto=Propriedades do texto
+propiedades_vista=Propriedades da vista
+Proyecciones=
+ps=
+puerto=Porta
+Pulgadas=Polegadas
+punto=Ponto
+quantile_intervals=Intervalos quartis
+quiere_continuar=Tem a certeza de que quer continuar?
+Quitar=Remover
+Quitar_capa=Remover capa
+quitar_enlaces=Remover hiperliga\u00e7\u00f5es
+Quitar_todos=Remover todos
+quitar_uniones=Remover uni\u00f5es
+rango_de_escalas=Amplitude de escalas
+Rango_de_escalas=Amplitude de escalas
+realce=Realce
+realmente_desea_guardar=
+recargar=
+recorte_colas=Recorte de filas
+recorte_vista=Recortar a vista
+rectangulo=Rect\u00e2ngulo
+recuento=Recontar
+Recuperar_leyenda=Recuperar legenda
+Recuperar_y_eliminar_otros_zoom=Recuperar e eliminar outros zooms
+refrescar=Actualizar
+registros_seleccionados_total=Total de registos seleccionados
+rehacer=
+rellenar_marco_vista=Preencher espa\u00e7o da vista
+relleno=Preencher\:
+remove_elements=
+remove_fields=
+remove_row=
+remove_rows=
+rename_field=
+renombrar=Mudar de nome
+reproyectar_aviso=A projec\u00e7\u00e3o da capa n\u00e3o \u00e9 a mesma da que a vista.\nAVISO\: Isto pode gerar imprecis\u00e3o com algumas transforma\u00e7\u00f5es.\nPor favor, leia a documenta\u00e7\u00e3o
+reproyectar_pregunta=Deseja voltar a projectar?
+resolucion_resultado=Resolu\u00e7\u00e3o do resultado\:
+resto_valores=Resto de valores
+restore_palette=
+rotation_field=
+salir=Fechar
+salir_tooltip=Fechar
+salvar_raster=Guardar como raster
+Sample=Exemplo
+Se_superponen_a=Se sobrep\u00f5em a
+Sean_disjuntos_a=sejam disjuntos a
+Sean_iguales_a=sejam iguais a
+seleccion=Selec\u00e7\u00e3o
+seleccion_fuente=Selec\u00e7\u00e3o de fonte
+Seleccion_por_capa=
+selecciona_sistema_de_referencia=
+Seleccionar=Seleccionar
+seleccionar_capas=Seleccionar capas
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Seleccionar as capas activas dos elementos que\:
+Seleccionar_del_conjunto=Seleccionar o conjunto
+Seleccionar_fichero=Seleccionar ficheiro
+seleccionar_por_poligono=
+seleccionar_por_punto=Seleccionar por ponto
+seleccionar_por_rectangulo=Seleccioar por rect\u00e2ngulo
+seleccionar_todos=Seleccionar todos
+seleccione_campo_enlace=Seleccione o campo a juntar
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=
+seleccione_el_campo_color_de_la_capa_de_anotaciones=
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=
+seleccione_fecha=Seleccionar uma data...
+seleccione_tabla_a_enlazar=Seleccione a tabela a juntar
+seleccione_tabla_origen=Seleccione a tabela de origem do join
+selection_color=Cor de selec\u00e7\u00e3o
+selection_up=
+separator=
+Servidor=Servidor
+Shapefile=Ficheiro shp
+show_this_dialog_next_startup=
+si=
+siempre=
+simbolo=
+Simbolo=S\u00edmbolo
+Simbolo_unico=S\u00edmbolo \u00fanico
+Simbologia=Simbologia
+simplificar_leyenda=
+simplify=
+sin_titulo=Sem t\u00edtulo
+sincronizar_color_borde_relleno=Sincronizar a cor do borde com a de preenchimento\:
+Size=Tamanho
+sobre_la_barra=Sobre a barra
+Solo_para_capas_vectoriales=S\u00f3 para capas (vectoriais)
+start_edition=
+statistics=Estat\u00edsticas
+stop_edition=
+Style=Estilo
+Subir_capa=Mover capa para cima
+suma=Soma
+Superior=Superior
+symbol_selector=
+Tabla=Tabela
+Tabla_de_Atributos=Tabela de atributos
+tablas=Tabelas
+Tablas=Tabelas
+tag=tag
+tamano=Tamanho\:
+tamano_metros=Tamanho em metros
+tamano_pagina=Tamanho da p\u00e1gina
+tamano_posicion=Tamanho e posi\u00e7\u00e3o
+tamanyo_borde=Tamanho do borde
+tamanyo_fuente=Tamanho da fonte
+tamanyo_pagina=
+tamPixX=
+tamPixY=
+terminar=
+terminar_edicion=
+texto=Texto
+this_table_is_not_self_editable=
+tipo_dato=Tipo de dado
+tipo_de_intervalo=Tipo de intervalo
+tipo_de_leyenda=Tipo de legenda
+tipo_fichero_proyecto=Ficheiros de projecto gvSIG (*.gvp)
+tipo_linea=Tipo de linha\:
+tipo_relleno=Tipo de preenchimento\:
+tipo_simbolo=Tipo de s\u00edmbolo\:
+tipos_de_documentos=Tipos de documentos
+titulo=Gestor de projectos
+titulo_fframetext=T\u00edtulo do campo de texto
+to_annotation=
+to_palette=
+tooltip_copiar_al_portapapeles=
+tooltip_cortar_al_portapapeles=
+tooltip_pegar_desde_el_portapapeles=
+Toquen=toquem
+transparencia=Transpar\u00eancia
+Transparencia=Transpar\u00eancia
+transparencia_pixel=
+ungroup=Desagrupar
+unidades=Unidades\:
+Unidades=Unidades\:
+untitled=Sem t\u00edtulo
+url=
+Usar_indice_espacial=Usar \u00edndice espacial
+usar_marco=Usar marco
+usar_titulo=Usar t\u00edtulo
+usuario=Usu\u00e1rio
+utilizar_margenes_impresora=Utilizar m\u00e1rgens da impressora.
+vacia=Vazia
+Valor=Valor
+Valores=Valores
+Valores_unicos=Valores \u00fanicos
+varianza=Varia\u00e7\u00e3o
+Ventana=Janela
+ventana_proyecto=Janela de projecto
+Ver=Ver
+ver_error_capa=
+ver_tabla_atributos=Ver tabela de atributos
+ver_tags=
+ver_tooltip=Ver janela de projecto
+vertical=Vertical
+vertical_space=
+visible=Vis\u00edvel
+visibles=Vis\u00edveis
+Vista=Vista
+vistas=Vis\u00f5es
+visualizacion=Visualiza\u00e7\u00e3o
+Visualizacion=Visualiza\u00e7\u00e3o
+visualizar_cuadricula=Visualizar malha
+warning=
+xmax=X m\u00e1xima
+xmin=X m\u00ednima
+Yardas=Jardas
+ymax=Y m\u00e1xima
+ymin=Y m\u00ednima
+Zoom_a_la_capa=
+Zoom_Acercar=Zoom aproximar
+Zoom_Alejar=Zoom afastar
+Zoom_Completo=Zoom completo
+Zoom_Completo_Vista=Zoom completo sobre a vista
+zoom_in_factor=
+Zoom_Mas=Zoom mais
+Zoom_Mas_Vista=Zoom mais sobre a vista
+Zoom_Menos=Zoom menos
+Zoom_Menos_Vista=Zoom menos sobre a vista
+zoom_out_factor=
+Zoom_pixel=Zoom \u00e0 resolu\u00e7\u00e3o do raster
+Zoom_Previo=Zoom anterior
+Zoom_Real=Zoom 1\:1
+Zoom_Select=Zoom \u00e0 selec\u00e7\u00e3o

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_pt.properties
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/config.xml
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/config.xml	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/config.xml	(revision 10281)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="com.iver.cit.gvsig"/>
+	<libraries library-dir="."/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="com.iver.cit.gvsig.pilotoraster.PilotoRasterModule" 
+			description="Extensión encargada de añadir los menús para el piloto de raster."
+			active="true" 
+			priority="1">
+		</extension>
+	    <extension class-name="com.iver.cit.gvsig.pilotoraster.RasterAbout"
+		   description="Extensión encargada de abrir una ventana con la información relativa al programa."
+		   active="true">
+        </extension>
+	</extensions>
+</plugin-config>
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/config.xml
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_cs.properties
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_cs.properties	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_cs.properties	(revision 10281)
@@ -0,0 +1,707 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+(escala_maxima)=(maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko)
+(escala_minima)=(minim\u00e1ln\u00ed m\u011b\u0159\u00edtko)
+1\:=
+_(Simbolo_unico)=(Unik\u00e1tn\u00ed symboly)
+__proyeccion_actual=Aktu\u00e1ln\u00ed projekce\:
+__redimensionar_texto_escala=Zm\u011bna velikosti textu dle zobrazovac\u00edho m\u011b\u0159\u00edtka
+__seleccion_de_fuente=V\u00fdb\u011br p\u00edsma
+A0=A0
+A1=A1
+A2=A2
+A3=A3
+A4=A4
+abajo=Dol\u016f
+abrir=Otev\u0159\u00edt
+abrir_plantilla=Otev\u0159\u00edt \u0161ablonu
+abrir_proyecto=Otev\u0159\u00edt projekt
+abrir_tooltip=Otev\u0159\u00edt existuj\u00edc\u00ed projekt
+Abrir_una_capa=Otev\u0159\u00edt vrstvu
+Accion_Predefinida=P\u0159eddefinovan\u00e1 akce
+aceptar=Budi\u017e
+Aceptar=Budi\u017e
+acerca_de=O programu...
+activar=Activate
+activar_regla=Aktivace prav\u00edtka
+activos=Aktivn\u00ed
+add_delete_edit_fields=Atribut m\u016f\u017ee b\u00fdt vlo\u017een, smaz\u00e1n nebo p\u0159ejmenov\u00e1n.
+add_layer=P\u0159idat vrstvu
+add_rows=P\u0159idej z\u00e1znam
+adjust_transparency=Nastaven\u00ed pr\u016fhlednosti
+agrupacion=Seskupen\u00ed
+agrupar=Seskupit
+agrupar_capas=Seskupen\u00ed vrstev
+agrupar_graficos=Seskupen\u00ed prvk\u016f
+agrupar_linea=Seskupen\u00ed lini\u00ed s grafick\u00fdmi prvky
+Ajustar_transparencia=Nastavit pr\u016fhlednost
+ajustes_linea_grafica=Nastaven\u00ed lini\u00ed
+Al_leer_la_leyenda=na\u010d\u00edt\u00e1n\u00ed legendy
+alias=Alias
+align_center=Zarovnej na st\u0159ed
+align_down=Zarovnej dol\u016f
+align_left=Zarovnej vlevo
+align_right=Zarovnej vpravo
+align_to_layout_center=Zarovnej na st\u0159ed mapy
+align_to_layout_down=Zarovnej k spodn\u00edmu okraji mapy
+align_to_layout_left=Zarovnej k lev\u00e9mu okraji mapy
+align_to_layout_right=Zarovnej k prav\u00e9mu okraji mapy
+align_to_layout_up=Zarovnej k horn\u00edmu okraji mapy
+align_to_layout_vertical_center=Zarovnej na vektik\u00e1ln\u00ed st\u0159ed mapy
+align_up=Zarovnej nahoru
+align_vertical_center=Zarovnej na vektik\u00e1ln\u00ed st\u0159ed
+alineamiento=Zarovn\u00e1n\u00ed\:
+alinear=Zarovn\u00e1n\u00ed
+alinear_graficos=Zarovnat prvek
+alta=Vysok\u00fd
+alto=V\u00fd\u0161ka
+altura=V\u00fd\u0161ka\:
+Altura_fija_de_texto=Pevn\u00e1 v\u00fd\u0161ka textu
+ambito=Rozsah
+Anadir=P\u0159idat
+Anadir_al_conjunto=P\u0159idat do mno\u017einy
+Anadir_capa=P\u0159idat vrstvu
+Anadir_Capa=P\u0159idat vrstvu
+anadir_tag=P\u010didej tag
+Anadir_todos=P\u0159idat v\u0161e
+ancho=\u0160\u00ed\u0159ka
+ancho_alto=\u0160\u00ed\u0159ka X v\u00fd\u0161ka
+anchura=\u0160\u00ed\u0159ka\:
+Aplicar=Pou\u017e\u00edt
+Archivo=Soubor
+arriba=Nahoru
+ascending_order=Vzestupn\u00e9 po\u0159ad\u00ed
+ascending_order_tooltip=Se\u0159adit podle zvolen\u00e9 polo\u017eky vzestupn\u011b
+Atributo=Atribut
+automatico=Automaticky
+Ayuda=N\u00e1pov\u011bda
+back=P\u0159edchoz\u00ed
+background_color=Barva pozad\u00ed
+baja=Spodn\u00ed
+Bajar_capa=P\u0159esun vrstvy dol\u016f
+bandas=Okraje
+barra=Sloupec\:
+base=base
+base_datos=Datab\u00e1ze
+bmp=BMP soubory
+Bold=Tu\u010dn\u00fd
+borra_seleccion=Vymazat vybran\u00e9
+borrador=Koncept
+borrar=Smazat/Zru\u0161it
+box=box
+brillo=Jas
+brillo_y_contraste=Jas a kontrats
+browse=Vyhledej
+cajetin=Box
+Calcular_intervalos=V\u00fdpo\u010det intervalu
+calidad=Kvalita
+cambiar_el_alto_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_alto=Zm\u011b\u0148 v\u00fd\u0161ku vybran\u00e9ho elementu na v\u00fd\u0161ku nejvy\u0161\u0161\u00edho elementu.
+cambiar_el_ancho_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_ancho=Zm\u011b\u0148 \u0161\u00ed\u0159ku vybran\u00e9ho elementu na \u0161\u00ed\u0159ku nej\u0161i\u0159\u0161\u00edho elementu.
+cambiar_el_tamano_de_los_elementos_seleccionados_hasta_coincidir_con_el_mas_grande=Zm\u011b\u0148 velikost vybran\u00e9ho elementu na velikost nejv\u011bt\u0161\u00edho elementu.
+Cambio_Color=Zm\u011bna barvy
+cambio_nombre=Zm\u011bna n\u00e1zvu
+campo=Pole
+Campo=Pole
+campo_altura_texto=V\u00fd\u0161ka textov\u00e9ho pole\:
+Campo_de_clasificacion=Kl\u00ed\u010dov\u00e1 polo\u017eka
+Campo_de_etiquetado=Popisn\u00e9 pole
+Campos=Pole
+cancel=Zru\u0161it
+Cancel=Zru\u0161it
+cancelar=Zru\u0161it
+Cancelar=Zru\u0161it
+Capa=Vrstva
+Capas=Vrstvy
+Capas_del_localizador=Lokalizace vrstev
+Centimetros=Centimetry
+cerrar=Zav\u0159\u00edt
+Cerrar=Zav\u0159\u00edt
+change=
+change_before=P\u0159en\u00e9st do pop\u0159ed\u00ed
+change_behind=Poslad do pozad\u00ed
+change_height=Zm\u011bnit v\u00fd\u0161ku
+change_width=Zm\u011bnit \u0161\u00ed\u0159ku
+circulo=Kru\u017enice
+clave=K\u00f3d
+close=zav\u0159\u00edt
+coincidir_tamanyo=Srovnej velikost
+colocar_a_margenes=Um\u00edstit s referenc\u00ed k okraji
+colocar_alrededor_seleccionados=Um\u00edstit kolem vybran\u00e9 polo\u017eky
+colocar_alrededor_todos=Um\u00edstit kolem v\u0161ech polo\u017eek
+colocar_delante=P\u0159en\u00e9st dop\u0159edu
+colocar_detras=P\u0159en\u00e9st do pozad\u00ed
+color=Barva\:
+Color_final=Koncov\u00e1 barva\:
+Color_inicio=Po\u010d\u00e1te\u010dn\u00ed barva
+color_texto=Barva textu\:
+comentarios=Koment\u00e1\u0159e
+comenzar_edicion=Zahaj editaci
+compleja=
+configurar=Konfigurace
+configurar_localizador=Konfikurace mapy lok\u00e1toru
+Configurar_localizador=Konfigurace lok\u00e1toru
+confirmar_borrar=Prvek bude odstran\u011bn. Jste si jist\u00fd?
+conflicto_de_nombres_de_mapas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit mapu jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflicto_de_nombres_de_tablas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit tabulku jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflicto_de_nombres_de_vistas_al_pegar=Pokou\u0161\u00edte se vlo\u017eit pohled jeji\u017e jm\u00e9no u\u017e v tomto projektu existuje
+conflito_de_nombres_de_tablas_al_pegar=konflikt se jm\u00e9nem tabulek p\u0159i vkl\u00e1d\u00e1n\u00ed
+conservar_escala_visualizacion=Nastaven\u00ed zobrazovac\u00edho m\u011b\u0159\u00edtka
+consulta=Query
+Contengan=Obsahuje
+contraste=Contrast
+coor_geograficas=Geografick\u00e9 sou\u0159adnice
+copiar=Kop\u00edrovat
+copy=Kop\u00edrovat
+cortar=P\u0159esu\u0148
+creation_date=Datum vytvo\u0159en\u00ed
+Crucen_con=P\u0159ek\u0159\u00ed\u017een\u00fd s
+cuando_activo=Kdy\u017e je aktivn\u00ed
+cut=Vyst\u0159ihnout
+Dado_un_campo_de_atributos=Zadan\u00fd atribut
+debera_introducir_nombres_para_las_vistas_a_pegar=Mus\u00edte napsat nov\u00e9 n\u00e1zvy pohled\u016f
+debera_introducir_nombres_para_los_mapas_a_pegar=Mus\u00edte napsat nov\u00e9 n\u00e1zvy map
+default_projection=
+default_value=Implicitn\u00ed hodnota
+dehacer=Zp\u011bt
+delete_field=Smazat polo\u017eku
+Derecha=Prav\u00e1 strana
+Derecho=Prav\u00fd
+desagrupar=Odskupit
+desagrupar_capas=Odskupit vrstvy
+desagrupar_graficos=Odskupit prvky
+descending_order=Sestupn\u00e9 po\u0159ad\u00ed
+descending_order_tooltip=Se\u0159adit podle zvolen\u00e9 polo\u017eky sestupn\u011b
+descripcion_de_configuracion_capa_de_anotaciones=<HTML>Nechte implicitn\u00ed hodnoty, kter\u00e9 jsou sd\u00edlen\u00e9 v\u0161emi atributy vrstvy. Zvolte pole, kter\u00e1 obsahuj\u00ed hodnoty pro \u00fapavu popisu.</HTML>
+descripcion_de_crear_capa_de_anotaciones=<HTML>Nov\u00e1 virtu\u00e1ln\u00ed vrstva m\u016f\u017ee b\u00fdt vytvo\u0159ena pomoc\u00ed tohoto n\u00e1stroje na z\u00e1klad\u011b existuj\u00edc\u00ed vrstvy, kter\u00e1 umo\u017e\u0148uje pokro\u010dil\u00e9 popisy. Zm\u011bn\u00ed se zobrazen\u00ed <br> zvolen\u00e9 vrstvy na zobrazen\u00ed hodnot sv\u00fdch polo\u017eek.</HTML>
+desde_arriba=Shora\:
+desde_izquierda=Z leva\:
+desea_borrar_el_documento=Opravdu chcete smazat vybran\u00e9 dokumenty?
+desea_borrar_la_capa=Opravdu chcete smazat vybran\u00e9 vrstvy?
+desea_continuar=Chcete pokra\u010dovat?
+deshacer=Zp\u011bt
+desplaza_los_elementos_seleccionados_a_la_derecha=P\u0159esunout zvolen\u00e9 vrstvy doprava
+desplaza_los_elementos_seleccionados_a_la_izquierda=P\u0159esunout zvolen\u00e9 vrstvy doleva
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_x=P\u0159esunout zvolen\u00e9 prvky doprost\u0159ed osy X
+desplaza_los_elementos_seleccionados_al_centro_por_el_eje_y=P\u0159esunout zvolen\u00e9 prvky doprost\u0159ed osy Y
+desplaza_los_elementos_seleccionados_hacia_abajo=P\u0159esunout zvolen\u00e9 prvky dospodu
+desplaza_los_elementos_seleccionados_hacia_arriba=P\u0159esunout zvolen\u00e9 prvky nahoru
+Desplazamiento=P\u0159em\u00edst\u011bn\u00ed
+desviacion_tipica=Standardn\u00ed odchylka
+distance_units=Jednotky vzd\u00e1lenosti
+distribuir=Rozm\u00edstit\:
+distribuir_elementos_sobre_todo_el_layout=Uspo\u0159\u00e1dej elementy p\u0159es celou mapu.
+distributes_down=Uspo\u0159\u00e1dej ze spodu
+distributes_horizontal=Uspo\u0159\u00e1dej elementy horizont\u00e1ln\u011b
+distributes_left=Uspo\u0159\u00e1dej zleva
+distributes_right=Uspo\u0159\u00e1dej zprava
+distributes_to_layout_down=Uspo\u0159\u00e1dej ze spodu mapy
+distributes_to_layout_horizontal=Uspo\u0159\u00e1dej mapu horizont\u00e1ln\u011b
+distributes_to_layout_left=Uspo\u0159\u00e1dej mapu z leva
+distributes_to_layout_right=Uspo\u0159\u00e1dej mapu z prava
+distributes_to_layout_up=Uspo\u0159\u00e1dej mapu shora
+distributes_to_layout_vertical=Uspo\u0159\u00e1dej mapu vertik\u00e1ln\u011b
+distributes_up=Uspo\u0159\u00e1dej shora
+distributes_vertical=Uspo\u0159\u00e1dej vertik\u00e1ln\u011b
+distribuye_el_espacio_entre_los_elementos_en_horizontal=Uspo\u0159\u00e1dej horizont\u00e1ln\u011b mezery mezi elementy.
+distribuye_el_espacio_entre_los_elementos_en_vertical=Uspo\u0159\u00e1dej vertik\u00e1ln\u011b mezery mezi elementy.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_abajo_hacia_arriba=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b ze spodu nahoru.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_arriba_hacia_abajo=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b shora dolu.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_derecha_a_izquierda=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b zprava do leva.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_de_izquierda_a_derecha=Uspo\u0159\u00e1dej vybran\u00e9 elementy rovnom\u011brn\u011b zleva do prava.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_horizontal=Uspo\u0159\u00e1dej rovnom\u011brn\u011b vybran\u00e9 elementy v horizont\u00e1ln\u00edm sm\u011bru.
+distribuye_los_elementos_seleccionados_de_forma_equidistante_y_vertical=Uspo\u0159\u00e1dej rovnom\u011brn\u011b vybran\u00e9 elementy ve vertik\u00e1\u00edln\u00edm sm\u011bru.
+divisiones_izquierda=D\u011blen\u00ed doleva
+documento=
+documentos_existentes=Existuj\u00edc\u00ed dokumenty
+draw_text_only=Vykresl\u00ed jenom text
+driver=Ovlada\u010d
+Dxffiles=DXF soubory
+edicion=Editace
+editable=Editovateln\u00fd
+Editar_leyenda=Upravit styl
+editar_vertices=Edituj vrchol
+el_numero_maximo_de_intervalos_para_este_campo_es=Maxim\u00e1ln\u00ed po\u010det interval\u016f pro tuto polo\u017eku je
+Elegir_Color=Select Barva
+Elegir_Fuente=Vybrat p\u00edsmo
+elemento_ya_existe=Element u\u017e existuje
+Elementos_seleccionados_de_la_capa=Vybran\u00e9 polo\u017eky z vrstvy
+Eliminar=Smazat
+eliminar_capa=Smazat vrstvu
+eliminar_columna=Odstra\u0148 sloupec
+eliminar_extremos=Odstranit hrany
+eliminar_fila=Odstra\u0148 z\u00e1znam
+en_el_mapa=Ve vrstv\u011b\:
+En_metros=V metrech
+En_pixels=V pixelech
+en_unidades=v jednotk\u00e1ch
+Encuadre=Zoom
+Encuadre_Vista=Zobrazit posunova\u010d
+enlace_vivo=Aktivn\u00ed odkaz
+Enlazar_a_fichero_de_texto=Odkaz na textov\u00e9 soubory
+Enlazar_a_ficheros_de_imagen=Odkaz na soubory s obr\u00e1zky
+equal_intervals=Shodn\u00e9 intervaly
+Error_exportando_SLD=Chyba p\u0159i exportu do SLD
+Error_guardando_la_leyenda=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed legendy
+Error_guardando_la_plantilla=Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed \u0161ablony
+escala=M\u011b\u0159\u00edtko
+Escala=M\u011b\u0159\u00edtko
+escala_desconocida=Nezn\u00e1m\u00e9 m\u011b\u0159\u00edtko
+escala_maxima=Maxim\u00edln\u00ed m\u011b\u0159\u00edtko
+Escala_Maxima=Maxim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+escala_minima=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+Escala_Minima=Minim\u00e1ln\u00ed m\u011b\u0159\u00edtko
+escala_usuario=M\u011b\u0159\u00edtko specifikov\u00e1no u\u017eivatelem
+espaciado_horizontal=Velikost horizont\u00e1ln\u00ed m\u0159\u00ed\u017eky
+espaciado_vertical=Velikost vertik\u00e1ln\u00ed m\u0159\u00ed\u017eky
+espacio=Mezera\:
+estadisticas=Statistika
+este_por_debajo_de_=B\u00fdt pod
+este_por_encima_de=B\u00fdt nad
+Esten_contenidos_en=Obsa\u017een\u00fd v
+Etiqueta=Popis
+Etiquetados=Popisov\u00e1n\u00ed
+etiquetas=Popisky\:
+Etiquetas_estandar=Standardn\u00ed popisky
+Examinar=Proch\u00e1zet
+export=Exportovat
+exportar=Exportovat
+exportar_pdf=Exportovat jako pdf
+exportar_ps=Exportovat jako ps
+extension=Roz\u0161\u00ed\u0159en\u00ed
+Extent=Oblast
+extents_no_coincidentes=Zvolen\u00e1 hranice nesouhlas\u00ed s p\u016fvodn\u00edm obr\u00e1zkem.
+factor_zoom_incorrecto=Chybn\u00e1 \u00farove\u0148 zv\u011bt\u0161en\u00ed.
+fallo_capas=Chyba  p\u0159\u00edstupu k vrstv\u011b.  N\u00e1sleduj\u00edc\u00ed vrstvy budou vymaz\u00e1ny z projektu.
+family=
+fichero=soubor
+Fichero=Soubor
+fichero_existe=Zvolen\u00fd soubor ji\u017e existuje jako vrstva
+fichero_incorrecto=Chybn\u00fd soubor
+fichero_ya_existe_seguro_desea_guardarlo=Soubor u\u017e existuje, chcete pokra\u010dovat?
+field_already_exists=Polo\u017eka ji\u017e existuje
+field_decimal_count=Des\u00edtkov\u00fd po\u010det
+field_default_value=Implicitn\u00ed hodnota
+field_length=D\u00e9lka
+field_manager=Spr\u00e1vce polo\u017eek
+field_name=N\u00e1zev polo\u017eky
+field_type=Typ
+filtro=Filtr
+finish=Konec
+Font=P\u00edsmo
+formato=Form\u00e1t
+Formato_de_numero_erroneo=Neplatn\u00e9 \u010d\u00edslo form\u00e1tu
+formato_incorrecto=Chybn\u00fd form\u00e1t
+fuente=P\u00edsmo
+General=Obecn\u00fd
+georeferenciado=Georeferencovan\u00fd
+gestion_encuadre=Spr\u00e1va z\u00e1znamu pracovn\u00edch oblast\u00ed
+grados=Stupn\u011b
+Grados=Stupn\u011b
+Graficos=Prvky
+grosor_linea=\u0161\u00ed\u0159ka \u010d\u00e1ry\:
+group=Seskupit
+group_graphic_line=Seskupit grafick\u00e9 linie
+grupo=skupina
+guardado=Ulo\u017een do
+guardar=Ulo\u017eit
+Guardar=Ulo\u017eit
+guardar_cambios=Ulo\u017eit zm\u011bny?
+guardar_como=Ulo\u017eit jako...
+guardar_como_plantilla=Ulo\u017eit jako \u0161ablonu
+Guardar_el_zoom_actual=Ulo\u017eit aktu\u00e1ln\u00ed v\u00fd\u0159ez
+Guardar_leyenda=Ulo\u017eit styl
+guardar_proyecto=Ulo\u017eit projekt
+guardar_tooltip=Ulo\u017eit zm\u011bny do projektu
+Habilitar_etiquetado=Povolit popisov\u00e1n\u00ed
+Hiperenlace=Hyperlink
+horizontal=Horizont\u00e1ln\u00ed
+horizontal_space=Horizont\u00e1ln\u00ed mezera
+Identificar_Resultados=Identifikovat v\u00fdsledky
+Igual_que_la_impresora=Stejn\u00e9 jako tisk\u00e1rna
+igual_todos_lados=Stejn\u00fd posun pro v\u0161echny strany
+imagen=Obr\u00e1zek
+Implimir=
+importar=Import
+Imprimir=Tisk
+Indexando=Indexing...
+Indexando_espacialmente=Prostorov\u00e1 indexace vrstvy
+indexar_campos=
+Inferior=Ni\u017e\u0161\u00ed
+info=Informace
+informacion=Informace
+Informacion=Informace
+Inicializando=Initializace
+initial_warning=<html><b>WAROV\u00c1N\u00cd\!</b>V\u00fdvojov\u00e1 verze. M\u016f\u017ee obsahovat z\u00e1va\u017en\u00e9 chyby a zp\u016fsobit po\u0161kozen\u00ed editovan\u00fdch soubor\u016f.<br><br>Pro b\u011b\u017enou pr\u00e1ci je doporu\u010dov\u00e1na posledn\u00ed stabiln\u00ed verze gvSIG.</html>
+insert_row=Vlo\u017e z\u00e1znam
+Insertar=Vlo\u017eit
+insertar_cajetin=Vlo\u017e grid
+insertar_circulo=Vlo\u017eit kru\u017enici
+insertar_columna=Vlo\u017e atribut
+insertar_escala=Vlo\u017eit m\u011b\u0159\u00edtko
+insertar_fila=Vlo\u017e \u0159\u00e1dek
+insertar_imagen=Vlo\u017eit obr\u00e1zek
+insertar_leyenda=Vlo\u017eit legendu
+insertar_linea=Vlo\u017eit linii
+insertar_norte=Vlo\u017eit sever
+insertar_poligono=Vlo\u017eit polygon
+insertar_polilinea=Vlo\u017e l\u00ednie
+insertar_punto=Vlo\u017eit bod
+insertar_rectangulo=Vlo\u017eit obd\u00e9ln\u00edk
+insertar_texto=Vlo\u017eit text
+insertar_vista=Vlo\u017eit pohled
+Intersecten_con=Protnut\u00e9 s
+Intervalo=Interval
+Intervalos=Intervaly
+introduce_nombre=Zadat nov\u00fd n\u00e1zev.
+introduzca_el_nombre_de_la_nueva_capa_de_anotaciones=Vlo\u017ete n\u00e1zev nov\u00e9 vrstvy pozn\u00e1mek
+introduzca_nuevo_nombre_para_la_vista=Napi\u0161te nov\u00fd n\u00e1zev pohledu
+invalid_value_for_gap=
+invert_selection=
+Italic=Kurz\u00edva
+Izquierda=Vlevo
+Izquierdo=Vlevo
+join=spojit
+jpg=JPEG soubor
+kilometros=Kilometr\u016f
+Kilometros=Kilometr\u016f
+leyenda=Legenda
+Leyenda=Legenda
+leyenda_campo_unido=Pou\u017e\u00edv\u00e1te stejnou polo\u017eku bu\u010f v legend\u011b nebo popisc\u00edch. Pros\u00edm zm\u011b\u0148te \nlegendu p\u0159ed odebr\u00e1n\u00edm spojen\u00ed.
+Leyenda_Por_Defecto=Implicitn\u00ed legenda
+linea=Linie
+linea_grafica=Linie
+lineal_directo=P\u0159\u00edmo line\u00e1rn\u00ed
+link=Propojit
+Link=Odkaz
+localizador=Locator
+locked_element=Uzam\u010den\u00fd element
+locked_element_it_cannot_be_deleted=Uzam\u010den\u00fd element.\nNelze smazat.
+locked_element_it_cannot_be_renamed=Uzam\u010den\u00fd element.\nNelze odstranit.
+m/pixel=metros/pixel
+malla_activada=Aktivovat grid
+manage_fields=Spravovat polo\u017eky
+mantener_intervalo=Zachovat interval
+map_units=Mapov\u00e9 jednotky
+mapa=Mapa
+Mapa=Mapa
+mapas=Mapy
+marco=R\u00e1mec
+marco_vista=Framework pro zobrazen\u00ed
+margenes=Okraje\:
+mas_de_100_simbolos=V\u00edce ne\u017e 100 symbol\u016f obvykle nevn\u00e1\u0161\u00ed do mapy \u017e\u00e1dn\u00e9 informace
+max_length_is=
+maximo=Maximum
+MDIFrame.quiere_salir=Ukon\u010dit gvSIG?
+MDIFrame.salir=Konec
+media=V\u00fdznam
+medir_area=M\u011b\u0159it plochy
+medir_distancias=M\u011b\u0159it vzd\u00e1lenosti
+metadatos=Metadatos
+metros=Metry
+Metros=Metry
+Milimetros=Milimetry
+Millas=M\u00edle
+minimo=Minimum
+modificar=upravit
+modification_date=Datum zm\u011bny
+mostrar_escala_numerica=Sobrazit \u010d\u00edselnou \u0159adu.
+Mostrar_siempre=Zobrazit v\u017edy
+mostrar_unidades=Zobrazen\u00ed jednotek
+move_elements=P\u0159esunout prvky
+Muestra_atributos=Zobrazit atributy vybran\u00fdch vrstev.
+muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico=Zobraz prvky vrstvy, kter\u00e9 maj\u00ed jedine\u010dnou hodnotu symbolu
+Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos=Zobraz prvky vrstvy, kter\u00e9 maj\u00ed rozsah barev podle hodnot atribut\u016f
+Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo=Zobraz v\u0161echny prvky vrstvy, kter\u00e9 maj\u00ed stejn\u00fd symbol
+natural_intervals=P\u0159irozen\u00e9 intervaly
+navegacion=Navigace
+navegacion_vista=Navigace v pohledu
+necesita_una_capa_activa=Aktivn\u00ed vrstva je pot\u0159ebn\u00e1
+necesita_una_capa_vectorial_activa=
+new_field=Nov\u00fd atribut
+new_field_properties=Vlastnosti nov\u00e9ho atributu
+next=Dal\u0161\u00ed
+ninguna_impresora_configurada=Nen\u00ed nastavena \u017e\u00e1dn\u00e1 tisk\u00e1rna
+Nivel_de_transparencia=\u00darov\u011b\u00f2 pr\u016fhlednosti
+no=No
+no_activos=Neaktivn\u00ed
+No_de_intervalos=Po\u010det interval\u016f
+no_es_posible_aplicar_leyenda_vacia=
+No_ha_sido_posible_realizar_la_operacion=Nen\u00ed mo\u017en\u00e9 vykonat operaci
+No_mostrar=Nezobrazit vrstvu v p\u0159\u00edpad\u011b m\u011b\u0159\u00edtka
+No_mostrar_la_capa_cuando_la_escala=Ezobrazovat vrstvu, kdy\u017e je m\u011b\u0159\u00edtko
+no_se_pegaran_las_tablas=Nebude vlo\u017eena \u017e\u00e1dn\u00e1 tabulka
+no_se_pegaran_las_vistas_del_conflicto=Pohled zp\u016fsobuj\u00edc\u00ed konflikt nebude vlo\u017een
+No_se_pudo_obtener_la_tabla_de_la_capa=Nebylo mo\u017en\u00e9 z\u00edskat z vrstvy
+no_visibles=Nevidiln\u00e9
+nombre=Jm\u00e9no
+Nombre=Jm\u00e9no
+nombre_no_valido=\u0160patn\u00e9 jm\u00e9no
+Nombre_que_se_le_dara_al_zoom=N\u00e1zev pro zoom
+nombre_sesion=N\u00e1zev sezen\u00ed
+none=
+none_selected=Nic nezvoleno
+normal=Normal
+north=Sever
+Nueva_tabla=Nov\u00e1 tabulka
+nuevo=Nov\u00fd
+Nuevo_conjunto=Nov\u00e1 skupina
+nuevo_nombre_para_el_mapa=Zadejte n\u00e1zev nov\u00e9 vrstvy
+nuevo_proyecto=Nov\u00fd projekt
+nuevo_tooltip=Vytvo\u0159it nov\u00fd projekt
+num_bandas=Okrajov\u00e9 hodnoty
+num_columnas=Po\u010det sloupc\u016f
+num_filas=Po\u010det \u0159\u00e1dk\u016f
+Num_intervalos=Po\u010det interval\u016f
+numero_decimales_mostrar=
+numero_incorrecto=Neplatn\u00e1 hodnota
+ok=Budi\u017e
+opacidad=Stupe\u0148 pr\u016fsvitnosti
+operacion_cancelada=Zru\u0161 operaci
+options.layout.paper_properties.landscaped=
+options.layout.paper_properties.paper_direction=
+options.layout.paper_properties.portrait=
+options.layout.paper_properties.title=
+options.view.default_map_overview_back_color=
+options.view.default_selection_color=
+options.view.default_view_back_color=
+options.view.invisible_new_layers=
+options.view.keep_scale_on_resizing=
+orientacion=Orientace\:
+origen_de_datos=P\u016fvod dat
+Origen_de_datos=P\u016fvod dat
+Origen_de_Datos=Vznik dat\:
+owner=Vlastn\u00edk
+paste=Paste
+paste_elements=Vlo\u017eit element
+path=Cesta
+pdf=
+pegar=Vlo\u017eit
+pegar_mapas=Vlo\u017eit mapy
+pegar_vistas=Vlo\u017eit podled
+Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo=Mo\u017en\u00ed nastavit popisek mapov\u00fdch prvk\u016f hodnotou jednotliv\u00fdch pol\u00ed
+Personalizado=U\u017eivatelsky
+personalizar_margenes=
+Pies=Stopy
+pila_de_comandos=z\u00e1sobn\u00edk p\u0159\u00edkaz\u016f
+pixeles=pixely
+pixels=pixels
+Plain=Pravideln\u00fd
+plantilla=\u0161ablona
+please_insert_new_field_name=Prosim vlo\u017ete nov\u00e9 jm\u00e9no atributu.
+png=PNG soubory
+poligono=Polygon
+polilinea=l\u00ednie
+poner_capas_a=Nastav  vrstvu jako
+por_debajo_de=pod\:
+por_encima_de=nad\:
+Por_favor_active_la_capa=
+posicion_linea=Pozice linie
+precision=P\u0159esnost
+preparar_pagina=P\u0159ipravit str\u00e1nku
+Preparar_pagina=P\u0159ipravit str\u00e1nku
+presentacion=Prezentace
+previsualizacion=Preview
+Previsualizacion=N\u00e1hled
+Previsualizacion_de_simbolo=N\u00e1hled symbol\u016f
+propiedad=Vlastnost
+propiedades=Vlastnosti
+propiedades_cajetin=
+propiedades_capa=Vlastnosti vrstvy
+propiedades_de_la_capa=Vlastnosti vrstvy
+Propiedades_escala_grafica=Vlastnosti m\u011b\u0159\u00edtka
+propiedades_grafico=Nastaven\u00ed grafiky
+propiedades_mapa=Nastaven\u00ed mapy
+propiedades_marco_imagenes=Vlastnosti obrazov\u00e9ho r\u00e1mu
+propiedades_marco_leyenda=Vlastnosti r\u00e1mu legendy
+propiedades_marco_vista=Vlastnosti r\u00e1mu pohledu
+propiedades_raster=Vlastnosti rastru
+propiedades_sesion=Vlastnosti sezen\u00ed
+propiedades_tabla=Vlastnosti tabulky
+Propiedades_texto=Vlastnosti textu
+propiedades_vista=Vlastnosti pohledu
+Proyecciones=Projekce
+ps=
+puerto=Port
+Pulgadas=Palce
+punto=Bod
+quantile_intervals=Interval kvantilu
+quiere_continuar=Chcete pokra\u010dovat?
+Quitar=Odstranit
+Quitar_capa=Odstranit vrstvu
+quitar_enlaces=Odebrat spojen\u00ed
+Quitar_todos=Odstranit v\u0161e
+quitar_uniones=odebrat spojen\u00ed
+rango_de_escalas=Rozsah m\u011b\u0159\u00edtka
+Rango_de_escalas=Velikost m\u011b\u0159\u00edtka
+realce=vylep\u0161en\u00ed
+realmente_desea_guardar=Upravdu si p\u0159ejete ulo\u017eit?
+recargar=Nahraj znovu
+recorte_colas=O\u0159ez fronty
+recorte_vista=Vy\u0159\u00edznout dle pohledu
+rectangulo=Obd\u00e9ln\u00edk
+recuento=p\u0159epo\u010det
+Recuperar_leyenda=Nahr\u00e1t legendu
+Recuperar_y_eliminar_otros_zoom=Obnovit a zru\u0161it p\u0159ibl\u00ed\u017een\u00ed
+refrescar=Obnovit
+registros_seleccionados_total=Celkem zvolen\u00fdch z\u00e1znam\u016f
+rehacer=Znovu
+rellenar_marco_vista=Zaplnit r\u00e1m pohledu
+relleno=Zaplnit\:
+remove_elements=Odstra\u0148 element
+remove_fields=Odstra\u0148 atribut
+remove_row=Odstra\u0148 z\u00e1znam
+remove_rows=Odstra\u0148 z\u00e1znamy
+rename_field=P\u0159ejmenuj atribut
+renombrar=P\u0159ejmenovat
+reproyectar_aviso=Projekce vrstvy se neshoduje s projekc\u00ed pohledu.\nUpozorn\u011bn\u00ed\: N\u011bkter\u00e9 transformace mohou b\u00fdt nep\u0159esn\u00e9.\nPros\u00edm prostudujte dokumentaci
+reproyectar_pregunta=Chcete p\u0159ev\u00e9st projekci?
+resolucion_resultado=Rozli\u0161en\u00ed v\u00fdsledku\:
+resto_valores=Ostatn\u00ed hodnoty
+restore_palette=Obnov paletu
+rotation_field=Atribut oto\u010den\u00ed
+salir=Konec
+salir_tooltip=Konec
+salvar_raster=Ulo\u017eit jako rastr
+Sample=Vzor
+Se_superponen_a=P\u0159es
+Sean_disjuntos_a=rozpojit jako
+Sean_iguales_a=stejn\u00e9 jako
+seleccion=V\u00fdb\u011br
+seleccion_fuente=Vybrat font
+Seleccion_por_capa=V\u00fdb\u011br podle vrstvy
+selecciona_sistema_de_referencia=Vyber prostorov\u00fd referen\u010dn\u00ed syst\u00e9m
+Seleccionar=Vybrat
+seleccionar_capas=Vybrat vrstvu
+seleccionar_capas_raster=
+Seleccionar_de_las_capas_activas_los_elementos_que=Vybrat polo\u017eky z aktivn\u00edch vrstev kter\u00e9 jsou\:
+Seleccionar_del_conjunto=Vybrat ze sady
+Seleccionar_fichero=Vybrat soubor
+seleccionar_por_poligono=
+seleccionar_por_punto=Vybrat po bodech
+seleccionar_por_rectangulo=Vybrat obd\u00e9ln\u00edkem
+seleccionar_todos=Vybrat v\u0161e
+seleccione_campo_enlace=Zvolte propojovac\u00ed polo\u017eku
+seleccione_el_campo_angulo_de_la_capa_de_anotaciones=<HTML>Vyber atribut pou\u017e\u00edvan\u00fd pro ulo\u017een\u00ed \u00faklonu textov\u00e9ho popisku</HTML>
+seleccione_el_campo_color_de_la_capa_de_anotaciones=<HTML>Vyberte polo\u017eku pro ulo\u017een\u00ed barvy popisu</HTML>
+seleccione_el_campo_de_texto_que_desea_que_se_utilize_para_mostrar_la_nueva_capa_virtual=<HTML>Vyberte textov\u00e9 pole, kter\u00e9 by m\u011blo b\u00fdt pou\u017eito k zobrazen\u00ed nev\u00e9 virtu\u00e1ln\u00ed vrstvy.</HTML>
+seleccione_el_campo_fuente_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed fontu p\u00edsma.</HTML>
+seleccione_el_campo_tamano_de_la_capa_de_anotaciones=<HTML>Zvolte polo\u017eku pro ulo\u017een\u00ed velikosti popisu.</HTML>
+seleccione_fecha=Vybrat datum...
+seleccione_tabla_a_enlazar=Zvolte tabulku k propojen\u00ed
+seleccione_tabla_origen=Zvolte p\u016fvodn\u00ed tabulku spojen\u00ed
+selection_color=Vybrat barvu
+selection_up=P\u0159esu\u0148 v\u00fdb\u011br nahoru??? 
+separator=
+Servidor=Server
+Shapefile=Shapefile
+show_this_dialog_next_startup=Zobraz tento dialog p\u0159i dal\u0161\u00edm startu
+si=ano
+siempre=V\u017edy
+simbolo=Symbol
+Simbolo=Symbol
+Simbolo_unico=Jedine\u010dn\u00fd symbol
+Simbologia=Symboly
+simplificar_leyenda=Zjednodu\u0161 legendu
+simplify=Zjednodu\u0161
+sin_titulo=Nepojmenovan\u00fd
+sincronizar_color_borde_relleno=Sjednotit barvu obrysu a v\u00fdpln\u011b\:
+Size=Velikost
+sobre_la_barra=Na sloupci s m\u011b\u0159\u00edtkem
+Solo_para_capas_vectoriales=Jen pro vektory
+start_edition=Zahaj editaci
+statistics=Statistika
+stop_edition=Ukon\u010di editaci
+Style=Styl
+Subir_capa=P\u0159esunout vrstvu v\u00fd\u0161e
+suma=Sou\u010det
+Superior=Vy\u0161\u0161\u00ed
+symbol_selector=
+Tabla=Tabulka
+Tabla_de_Atributos=Tabulka atribut\u016f
+tablas=Tabulky
+Tablas=Tabulky
+tag=tag
+tamano=Velikost\:
+tamano_metros=Velikost v metrech
+tamano_pagina=Velikost str\u00e1nky
+tamano_posicion=Velikost a um\u00edst\u011bn\u00ed
+tamanyo_borde=Velikost okraje
+tamanyo_fuente=Velikost p\u00edsma
+tamanyo_pagina=Velikost str\u00e1nky
+tamPixX=Velikost pixlu X
+tamPixY=Velikost pixlu Y  
+terminar=Ukon\u010di
+terminar_edicion=Ukon\u010di editaci
+texto=Text
+this_table_is_not_self_editable=Tabulka nen\u00ed editovateln\u00e1
+tipo_dato=Datov\u00fd typ
+tipo_de_intervalo=Druh intervalu
+tipo_de_leyenda=Druh legendy
+tipo_fichero_proyecto=Soubor projektu gvSIG(*.GVP)
+tipo_linea=Druh obrysu\:
+tipo_relleno=V\u00fdpl\u0148\:
+tipo_simbolo=Druh symbolu\:
+tipos_de_documentos=Druhy dokument\u016f
+titulo=Spr\u00e1vce projektu
+titulo_fframetext=N\u00e1zev textov\u00e9ho pole
+to_annotation=Zm\u011b\u0148 na vrstvu popisk\u016f
+to_palette=Zm\u011b\u0148 na paletu
+tooltip_copiar_al_portapapeles=Zkop\u00edruj do schr\u00e1nky
+tooltip_cortar_al_portapapeles=P\u0159em\u00edsti do schr\u00e1nky
+tooltip_pegar_desde_el_portapapeles=Vlo\u017e ze schr\u00e1nky
+Toquen=dot\u00fdkaj\u00edc\u00ed se s
+transparencia=Pr\u016fhlednost
+Transparencia=Pr\u016fhlednost
+transparencia_pixel=Pr\u016fhlednost po pixlech
+ungroup=Odskupit
+unidades=Jednotky\:
+Unidades=Jednotky\:
+untitled=Nepojmenovan\u00fd
+url=url
+Usar_indice_espacial=Pou\u017e\u00edt prostorov\u00fd index
+usar_marco=Pou\u017e\u00edt r\u00e1mec
+usar_titulo=Pou\u017e\u00edt n\u00e1zev
+usuario=U\u017eivatel
+utilizar_margenes_impresora=Pou\u017e\u00edt okraje tisk\u00e1rny
+vacia=Pr\u00e1zdn\u00fd
+Valor=Hodnota
+Valores=Hodnoty
+Valores_unicos=Jednoduch\u00e9 hodnoty
+varianza=Odchylka
+Ventana=Okno
+ventana_proyecto=Okno projektu
+Ver=Pohled
+ver_error_capa=
+ver_tabla_atributos=Zkontrolujte tabulku atribut\u016f
+ver_tags=
+ver_tooltip=Uk\u00e1zat okno projektu
+vertical=Vertik\u00e1ln\u00ed
+vertical_space=Vertik\u00e1ln\u00ed mezera
+visible=Viditeln\u00fd
+visibles=Viditeln\u00fd
+Vista=Pohled
+vistas=Pohledy
+visualizacion=Zobrazit
+Visualizacion=Zobrazit
+visualizar_cuadricula=Zobrazit grid
+warning=Varov\u00e1n\u00ed
+xmax=maximum X
+xmin=minimum X
+Yardas=Yardy
+ymax=maximum Y
+ymin=minimum Y
+Zoom_a_la_capa=P\u0159ibli\u017e na vrstvu
+Zoom_Acercar=P\u0159ibl\u00ed\u017eit
+Zoom_Alejar=Odd\u00e1lit
+Zoom_Completo=Zobraz v\u0161e
+Zoom_Completo_Vista=Zobrazit r\u00e1m ve full extent
+zoom_in_factor=P\u0159ibl\u00ed\u017eit
+Zoom_Mas=Zoom In
+Zoom_Mas_Vista=Zoom in v r\u00e1mu pohledu
+Zoom_Menos=Odd\u00e1lit
+Zoom_Menos_Vista=Zoom out v r\u00e1mu pohledu
+zoom_out_factor=\u00darove\u0148 zv\u011bt\u0161en\u00ed
+Zoom_pixel=Zoom na rozli\u0161en\u00ed rastru
+Zoom_Previo=P\u0159edchoz\u00ed zoom
+Zoom_Real=1\:1 Zoom
+Zoom_Select=Zoom na v\u00fdb\u011br

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/config/text_cs.properties
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png	(revision 10281)
@@ -0,0 +1,409 @@
+‰PNG
+
+
+IHDRI2Ñ)sBIT|dˆ	pHYsÒÝ~ütEXtCreation Time09/02/04&!®! tEXtSoftwareMacromedia Fireworks MX»‘*$zprVWxœí•]’ã4Ç[Ñz°Õ‰G=ÞŒ3�{€¹“Ÿ¹Ž/Ã¨Ü…0ü»Ûa¡*¡(ž¨¢¶}÷§”_~ûùWú‰¾~(W<×ëÇ†wûXñ®Wë½Z¹^7<×m»®x×ÍÚ›•m[ñlëºZmµ²¾ãYßñ}§ ‚ ‚ÿ¹;x……Q„&­£V“ö ^PXK`c"ì�ÚÂWˆÊQ¬CÛ²°/ÁÛ{?Ÿ>çŽ»Œ5qØž¦Vþ5Z•‹x)�ÒâãÜLt3É­·ÚñRRmjµ)_¸ëÞ'Ù÷ÍïògbH¢~Æ¾MW™é(í@KóÕ:C¦ÃðÃ”ÍÖª&S~Åw1¹Äo…’hË_½V¶å�üã!�,6ý.*µUHÖ¶˜uŒËŸ1>Òé<Sïò5¬>S#uƒi~¡TÝÔ%‘ÖXT}âÚÈ:vÝü3¿d7µ®©gš²L²Ÿ¤¼P¾xÆ,˜\‡fCÜ
+ŒøVð?¬ÀNËYå#Ÿùÿ3¢oêÃ”ªÊ>W¬:¢ö*¦û|‹?É	m$—EEÛÃÁâ®y¹Ù¯FègÊ>kz�c×i2-Ó,ê�TÍ„‹,šü£Û¯ÊÀÐr÷?-2iº�†=þ+ßä×s^àÌR§òýäÜ�¹3_j¼Ø“µYþÍüÂÃ<Á©æWF4”û^˜Ç2‰”=þz‚Û-ÿ4|"C¥ô
+�§S»{éÓØ}Ÿ-Ù`ÿdòéM�Œ.^ô‹/~’.£Ž¶›-üF´Í­É¾r‡öõÍw¹ë€nüNó_Ï¶fœ*Œhàªû=ñ©È	ž)¨ŽU�8×}«„h«pdÄóÏâÀ¶•Mõ‹Êv©wåçO�‰Wú»
+þ3=¾ãþ†Ì°Þä3
+¿(÷møÛ~^)ß.R¶'mõZ-ûü¿®µÌò‰÷ÔË*~$MÝ4KÿEóy±óZžÕy~Ô4~ðè’–¡>MB¾÷ºg%r=ç^/¸¼é
+)Ü†*ÉsøŽãÓø¤×?ë^Mƒ.ØFï5=Kl÷¸ý �Š~TWõù\üôSa—°�¡‡Tû\AœæáÉÝñà.ó—*~úqï 	‘­é6®Cð�û_P’
+LZÛÿô|¬¦ž÷?Iû7éAAAAAAAAAAAAü¿ù©t{QÌ¸ÝeHmkBFúÞÊþ)¤3¡òmkTSxœí][WÛH¶ÖtO:�’tŸÕóp^Xë¬³ÎS÷H²|{ÄÛt¸-CH¿dÉOÈ¡;ÇË?v~Ãùgï]U²T*]12
++HVéRõí½¿}©’ÙÓ¸™µú;Ó™1ïÿz0�™£ÒdXUç'Ýw¦Ïß±ÍÛ½¦;+™õygoàÎÊú¼¿k»³ª9ïÛGSho´á.ý›÷ºÝ›Y£¿v¶W3mMj#í½ÖÓ&Ú9ìMµ³ùÞÁ>´ü
+ZÎ¡ÅÐ~‚Ö©ö'œq¦miÛpô>ÿ{g°u´+hÏûÍÃ!>lû€ž¹mOg¥ImÞhîaÿûûÐØÀagÞ°wé$»Emv‡6�.l¼¡ÍÎ¿Án‹>÷tR«Á6}:xÀÚ½é¬^™7
+::`wØì!ûì~l³·=„+æ© XWApŸÕo9P=å@_ó�îh Óí%
+²öŸévÙaã6Ë|Ü÷$0n'0n=Í¸õôvØ¸
+õ¸mû·é¬R™Û½Cì¦ÄN¯ÁZl¾íuùg¶M‡ØsŽX°r´OÚ)´]k“XåP‚¤§i4J
+Ò¨Æ@*™AõPÂdÀà¦Ñ�Á…[\ÐÈ…ðÁ?@Ï8@
+¢�©6âðlpx:pü’T©­çwPë)�TÖ¡EY†jƒÝ¸ ·ªáZ¹«Ô†ƒ5R
+öeH®}ög86Nt)¤{kn\ºt_†¤{ËË2¾µßË-ã
+>ämî%¬¿?ÃàOùÐŸñ¡/ ‰,vÃ7ÚŠÅ†Kí‰Ã­Y1GTæð8‹Œ‰àóÃa¯ˆáà@Hë@ö‚6|fž2S¥ñ¸uŽŒ9Œ£~™Lä/°!jO�Í&ÇfÔáŒ"¿žïûÂñYó©ÌGØ¿Ð.âÃ%n"F)5)º•=t(ë2>Æ�‹¸[,ÕL†LÉgF"ÞxªcDmÄp˜,ÉñéqÔhæä‰,‚ïCë�;`£¾Ü/—ÓŒø;>â·@×Ê±V%%—ü@œ«ÇK£5—<Z
+‚)îkä2t¡Þ¿Nñ¬V™!`%D^¤3Fqˆ&š,qr>Ðï 
+dàéÂß€�{èGä¹‡È)Å=#ÐoÇKÖ¼ä	�ß—T¤ÇõÁ0GJ��h¯:ÊnÏ˜®¥±•ì$8"àô™—Qàurî,áâZ)¼�+¼º¼”°x:Âa!·™„
+‚a‰JÂ§ØAœ˜ç;naÇ|ÛçRBE¦Ç·ýnÈã�}ŒI³€J—…’JfFuÂ},^Œ°R¾kÐ4'†L6“Ë‡©i˜*Ñ@ŒÌìVçEae“Á‰S0¿ò˜®²±Cü…<kžø<žS\™3ÿJcZf�ó/E²IÆÅw†®d\d B…%3:*ÍŒ´ß³(G*xÒ9(5>¤#ÈÈÃ#!î!Õðôý$Ähé68=õ"7Gû=¡hQc ÕHäz} é·Õ!‹aÄÌE©DXwD˜ÌtZä²: 2:‚lZTâÆ$:óIBˆiÒùrk)3==E8.Ô#HlîËÓ]T?ºžRû>ñ1¨ŠvöŽ”i¯õ.ÜNŽ'%~­X8£6É€Î&G§É‰Æ&Â�²°�Qž¤)–Ü
+¡(’‚tHt¸žœyú"#!fÈ³óêRaþ8D*ºŠT(ˆI[præ‚ßñ�úŠÿ?¨Ã^0šR´{–À¥ÕœÕÐT<Á™Ôu¤²¶5Ð¨H‡¼‚s2}æSì>gQþÙÔÀ-Eê‰ˆ­{±JZ|œ¼Õbô¨Iø”$O#Ü±Èˆ¦B~Æ`Î—`ØfÎùçŽ«¢ŽíëVj˜ž{‘ý'È˜ÂÔ¨–©ñ$.±9Ê¨ÖïcKh<¼§È%<¥Ô?©PŸÃ×ç¾Ùg*œ^ûÔ	ó4½{Áó•˜™\¿F¦ÚXd”%ÇÃ„–ØQÉvD�ˆ’á"¤t$-¦ëžî]S�ˆ3Wi¼˜(ÞŠ’¿áLn[òçfZ–Ì4HÞ!„†Jó„Vn0.¦ãv(|ÁyK
+4á	'M…çˆ]ŒÆu–D_y|S,
+tüúä%r‘;‘l–YS¦ßú$a‚‰tÆ«$ro›’,šý�Z/�”•oJ�ÒÜ�ü¤›$Ì‹È<""òO]ôZäåŠ�þ¡ÏÐtfh•/±²¢Ï™æBû(ù@\‹r®¹X^ÇõF*�²Åp¬
+ÎÉ`o%ˆº
+D–†¦žyìls>;„S…%\4"fþ'„š›ñÌ\Î;»’A¥XPéžë}Û‹IF£ÊÕ¨Ê\–-)è¦Xp�’ èw„P<A¹(U¥Y ”f-¿‡–J]¤à[�™‹@$1Âð!B.LÊÐ¢‘SU-LTT¸­@X$Ì(K,ñšªÂ£vè™Rœ%q]ê.ŠëB‡pÛéˆ+ÄŽÀRQmOÖ©&»N°¹’Êæ¤.µÑééUŠ�#7´bêbXÔ`	îôÙÂÜú‚ÍyCJVU®‹84ÎÉ÷}¦QÄŽO8N%­™£_M³D$MI¨Œ$š®ª’^NÆèà²x}1`H=Úü?t¥~¤[#Æn$+ÈH©ÆDeYF¾±oxú”f;± 4	ÍøËã¯äÍç�ôE/Ê)UÒÎ>tD´'v:bçXìû’
+uÃÂ$°^{Ü{FSåY3UuõöZCSÁ¾TÕQç“˜‹0é{ù¦�=¤X/­1Âñkª&­ž\†1•Ó×Ï$PêQÅ¡ÆôÂK¢.ÈÇœ‚nðéòx”«Êr-.Œ£ÒšrÑær>Ì•²È¥+vìp¤›„É�“c*Žh½å½y€º�+±·hQêIüì·ÒzØ‚‹´ •’A’8—RÏpÑ
+8e>£Wó™R�Ç2�ôŠÂ?_
+¶,ÁF¬_ŒBvÓ§mRÒ¾E¹lf}£…Ö1zpZÉiV†Ù-¾ÎßUÓÆ4�AÄÎq#XÄîñ˜Ð–ƒÄO\�E«¨¡¥e~OSïžùC3ÒJå-ÕkÁ*¥«Œ—Ô5p=üÊÀ¢>Éƒoÿ\sÐÓj™Áˆ¾aÞê6of-ÿêk—°´©š^Ò[Bä†ôNÊGB÷(²…£Ùbci1Šk±1´vIÁZý&�Òï³6ŠÉç-.ÀzÂ×ðc.)õÅßrÙ’¯/ÐÖöºò:2ò^1sê»ö½¤så9‘/‡£r�´ßÁ¨Å)­ö1@}°Ãn¾ûí¾4Öb/…éôoîk2DcÛÞa›~ûû9o!šð_Ë?)éòU
+S*Å}¦ñËësôÂÊãoÉ'°R!°,Ûäë2#-æÛ$±mzÂQ�s”âœ|¢t
+Qfåºg{X¦ÅPÂÐ»¾®h;ŠiË'2«Y‘-¼¬Coð.–Ê¹¼¾,ŽEÏ'¦r!¦<bêQ81ò½�åò€R?Š8žOLÕBLyÄÔ"DÆB‹ãGÇó‰©Vˆ)‹˜^p1íòwY>•ù½Õ.ÕG‰gäb½b!>åBlÐÜÞ•7;ãzà/=;“�æÐ¨P­y�=ZÇ'ZÝ'ga‹9[´äÖ¸VÏõ–V¨LBžkqü(âx>1M
+1åÉ°z‹‚¡²¯{1Ÿ¿í(¦-ŸÈÜ@�6<Å™hC­I28¥B¦˜Š"·%´çë�Û¦áƒ°Õ4ŸJ�OVàÓ€¾bÞ¦Rd½Üäz‰-CzWöšV€ãDŸ_3+ju(ÕPm|M?›µE«YwªÁV«¼hVäk+q—Vc.5äÉñøº¿;Ì¥¯}D* ½£©qZ P‹R`Œ‹NuÓq‚xãwÇ.4ëò•²ïòA«‚ú•uŸÞ¿ð´×�:è’5z7ŽîGÔñ8�—ø�U,œ®çjî7Éé
+�×«4N7Ý}VÐš�ý1zE/¶ÆRõ¦^µ*†dq%o´ÃqmT6Ö¼ÖÊÈœå@&îx8‡1]MV%Žç\6‰bDï0|Ö>&¹á°‚ó7ÊŽÊò9*'Æ‹á	I¿^G¾Ú>YßWMZÿ™B.€Ö9@¾¯ä€¶D©T*IÏ<�¨éµ°¢yN®R‘9Ü§ixaUj¬–ýpUÔ|ƒ—¹ÕÔfò€»¿jïeÓ·÷ÜHÞK‰c½T‡x&
+GËÄŸ(‡åaihDàX©„´Àq<Á%(»ZZ¶|ÐÝ_5°ð9œ£DÄeÑýáo*ªLwŸUAó2M›^ºÁs¹8çìKc#½(^¥r6wõ�U'p»´€œÖÍÑÚhè$:2õÒ(ýxölëUceÏÆÄr­r”=;“‘nDÙsøÆ†Ü£Ttô »¿j›Ã…¿ôVÁµvÈ_Fþ�LLf]wÊõ(—«”Í-î³Œjïn«y3Ûmù&+'Õ­)E»hÀïúê41ç5ñ&M”ùnÏ¾™5wvñ×‚pWsé­IÌ�ö Êc«¨ñkq‚¥¹sgý•çGà˜|×¾X<�/Ïao‚C¤È¯ûF«jeéš])‡^¦7aK3Üüš¿hzàŠ5:Î(iÆk¾àÖ;3xï—¾3÷iu×5M±Uà—ÞU†t{� €ÞBÙøUOµÿ‚~»šÎ~wØ¤÷½þàd�x�C×¯Áõºï§¤¹.J<âïàú~ä;<§;œñê‹ªÿ¾«¥+mz5gL£P]éë¹„Ý.ÿÞÖ+øiQ~¶<vù.ëô||ö!ÜëLùµO ·ÈõW’î=¤>Ótê�Mkú®}š|ÂkñÊ?ó~7ù‹8´&êÊ5ïÊ·ô6Îµvqæó€%íÓ÷LìiM~ök3°l­hüèš©ýûˆîá±1ýá€«BCªLgVá·-øi.õo¡³²uÈ(/Î”Çò
+öHÒÇm"QÔFñ]Öçd­WÞýK�+6èÛŒ® ‰Ž:_~Ââ[¢Ô²ø–p’G±¸Êë¡ïü’Ä	ÿúù;hU‹lcBÊKn#‡pý`Æ¾˜ç#`wAüu	Çü²<‚óØ«küI›€å”þŽþ…¶ZB÷E­'¢ÎÀÑkœ££‘ýOúÚxºTðtÁÓO<ý¨yz=ÌÓšù•1µU0uÁÔSLý¨™ZDÔ6<�¿'ÿ•ñ´Ì¸O<]ðtÁÓ�‹§EuºE0®¿2Ž–£àè‚£Ž.8úqqô÷áXšŸOË€èÞã¯Œ¹Í‚¹æ.˜»`îGÍÜ¢
+Ò�Æ§âˆ¾.ž®<]ðtÁÓO?žV°L±F¯àè‚£ÿ­9Ú(8ú^8šýá½ü]¬Ñ+xºàé‚§ž~Ø<]¬Ñ+˜º`ê‚©¦~èL]¬Ñ+xºàé‚§ž~Ø<]¬Ñ+8ºàè‚£Ž~¸]¬Ñ+˜»`î‚¹æ~lÌ]¬Ñ+xºàé‚§ž~<Ý„vä&Ÿ­y_5ÈxzñUÑïg-“³ãm]¶TGŠ„“uÜ]­küŒ¡7µ¥èøz ÏI+Qýç²/H]0¿%ñ¶ÿÜ(>¨ÆàÖÀŒá>4ð;²2ä^8?³Æ‰º·ÔjXEòá�]Ãj™5¹W¶²‡¯c›\Çüþ_Ž?Ÿyñ§ÃØò+‹>‹ún}ÑgTôiJ(GGŸò¹w{ÊOx¼±çKúxÆ*ˆç}Â}²¡[ð4Öt1¦-æá
+ž^=O’<}7<]*xúžxútmvªàé§œ§¹IyZ‡´ûâÞy¹ªÙ$ó²QðòWÍË;~®¥æeë�ó²•š—óTo¿�~•3r³£=^n^ÙbÝæ£†oE«âf5‹µzÒGÔípröX¹àä‚“C¬\.89'‡kÇ_7+¿ØÕ�Œý¥6?K¯û¾·hÑ¶jžNÏŠQV}76—52,§Šºš�öeÂ�îÙÃsPNb$5²R—fmÐòæcëôïû°þ%~K:�ÜhäC™ÛÍÊ¶eÎ¡.±'rl~,8?¿ä‹¹]UåÀ7ï–¨�ÐÓ1øøÏ4Â-ŸÜÅ_#ß&ÞA]îz¼sÒ¼dù£ü,hwÉ£$zi…¼m�øuõ5dÿ1F«Kò¿€ÏS>Rä´K†ÁGí_ÃŽ0Â’4æ
+Ž�FQñžóå{øüAFÆÇÁkN¹
+^õ-úõ�gSÏ®S>é…ïüôOYƒvÄ3ùþFÊÑObjîÁ»O"3ŽWwÿ ‰¿°eFá+_©ý¦ã¤'¾TâœæiÏh„Ÿ#çHjD†û“¾êÞÉ8.z¼NÕ¿
+4âŸ¶©Ä"ùIë$ägqøO`šœå’ý3–{–~IL…Y&öóÚcô„ÿëÝí	1ÏþNm—-Mo—Ñ6e—Š§dbí•K/&çÑ�öw9ÚÔ~ÆŸ\^VF6’‡f¼=5¾Ûq|Èåâò:ecQ-”9Ý—3$ÎŸ0ŽA�7†
+ôÞÓ}/¨
+iÿ#éþi®Z¢gÒ’õÅhe¸/·"õ$²î¡ÊPž‚œ?QÍ¥þ%&ã\óÕeÝq$¥‰KP-ŠÜF”‡8”á×¥¸õÛ	T¨æCëÈ&÷¢Ë¯øœ9Fdh][¤sg9b»58‚,wC¾.˜x\Pzp\°¯ã�7èy(Æ!Û»àqóÕ¼Ý@Û½ÁÍì¤»ƒûÛÌÇÌr™Å9C!6_ê=7ñÁRïû\xÛ¥ÞuUìöZëÐXþùÖ"?“–\St¾$m{Ún>8mÿ�ª"×„fä×ÿó0jë)—²×Âè:Œkš+_QU<»wÝ€+Îè\�ñ$]Q×¦W¥�ßùßsÍ•1›ä™®??Qåd¬U³¨Ê¬&c~x£wŠžèà¿æ¯Xä¶ø`ÝÂôêåW·X—êaû.ªE•¢¨RUŠû©R<.Ãï{˜xŒüŠçßÂSlñÊò6ôãVÏsð3úÆüÆØÊ!~ÁÖ¢w{üü\¦™„t³¸wÃÏ¯¥ÑO)ïÆ(~‹âß“¹¿–Ë:�”Í=‰õ yjü.Í•ë$—pwa¿ì›ãÑI˜1¯ÖW¾ õ
+W¤+(…!]Iz~/2ø«7Å$°øœuÚ\âË›Y¹øÃŠPšÄ$¨ó.\Eè¯ï5ñÎÞ§þ‡ß/ËŠ¼ù€‘ßT!cÇ­Õhü+­MójWt‡XPÈd9±ºîÅê¥'�¿Iòø'åÝ[Uø1¹PDñÿ:KD —ä—Z%þÙ[ÿð=ŒïgbåèŸÊ½èÀS>G~IkÏ½uêÁ£Ùå>"i¢§Áõ%Ìï°U[a¿S]q¦Ü#4²÷Å~jÜ7‚GoÅ„¸FÃ¤ÿe^«¨Se¼²<±ºcUØ�%p¯,¨–ÄKèç9­¼e-[ÞŠ¦¼LôLÖöL?r&ü¤–
+÷TŽ‚ï&¯ú�j�Y¼§ïŠ¾WcÜwÿp
+ôÌN×ÿsýuÜûŽ=üž"ý/äsv4¶îìì[<CÂÕ>»\;ýëÑG³ÕÅù}t�ò°	iãj\å5pu…òµÅ³ø›}Æm�<ü}åQã¾®È"£5bŒK6'»2ÙŒéØýÌå…ÇûÐdò’03#[0F>quòÁù„û�OÒØïCV?P]iÊcF9å{ŸÈÇ\¤õlQù¸cùTA*è�-Ú3èw…¢Õ2ùêû‰CåÑÞ™Dæû6ˆdÞÛÜÌ;ÝéÌuKôoÞbŸtøW¯Ï[=OrÏ(raß0„{,ç†Þ :Šlé7‡3}Þ4¦¸ÙmÑÆÞŸÎLø4˜ÎŒy«ß¤Sú}ÖÖÁÍ|pÒ¸™±'~ÑÉ�¶
+cxs3{Û;™Î*ú¼Ã·û7¸‰;{ÐõÁ^>Õ*¦S¯á°'­%Üe¾{Ò»™µöØë�n{ÝëRç{Û„k÷;ÝÃ¦lü#ŒÝ˜o÷ºlcÓf{‡mš´±á.8³‰´ñžúü—Þ¯Ð©lmöñ�mzxE»µ‡hýbÃ9e¶»ìã±e·G·³»ø©ká¦É6]›Ð>xG½éÚ6Ž¢3ØÇ:ƒ™X“”UõÚR±t~Ò¢îœìS_ýý!»7'ÍmÜì[73øÝŸÓÆeƒmtiÛžJQžÓ”u°Ý¥¶ýhÛ?hB�À»ïçîö;Pß7mÀQŸ
+Ždû,ó‚üÀj:6ìïêÍ=çNõzï±ó›w»û ûí›ÙÉa‹ÖS°Mpu©‰aÕ™ž”L¦'µ€šÔG5ÝÁ#âCiñ¡êºL�æÇ{0šcÖMÔ@¾#‡†°¶Àp3%ùÄsß#ØÚ¥·ð{Èf°‡é6o÷›7³öá	‚Ö>|G>™õŸë5«jkÃA@¦ÍèÆÐñ®k½·›ôÈvó
+c"üŸ:ð vówh}ÚÛ¤ÿ�”“t¸mkBSxœ]NË
+ƒ0Ì©ßÑOˆ–Úx¬ñLÚâƒjo*¼
+¹,ûïM´"ta™���eTHK>ƒ‡­ä(v+<E¬Á?˜‹Zƒwñ±L*
+«f¶Qf]úW(;i@^;Q‘
+VnJé@ÞÔÈ�pÒ“·í#ñPU‹Ä¥µðÄùxá‰T„Ê´÷t‰²Â_°GkÓRŠ¹úëê5£Xûªñ§‰…SÀp#léNÂaWBÿÄp«/¼×[0\8BdmkBTúÎÊþ†*˜xœí\-“ä¸²5,hjhh(*((h(*(hhj((h*hhèÿö”²]³{ïôÌ�èr¿È³±»Óíªš:™R*?µÄ—×mÛ†¦iLÌ€¹ü¹;¾1¦‚uÔ£šÒG?oÛ^`ËÃ	®€ò^zCÁË.ËÒ<F�å[Æ5oð½û…8ä44–ø§_VdÄ$áñÜ”‹ÈöM—‡UúÙ\Þ™á3¬þEM1eÿ*Ä£°˜šf%Lðšn./ŠÉe°(‡úã%˜msŸeóèÇ´Íð•®u<4ª
+”¨@ÿ¼è²fòºÀ3�ü™>®ˆ‚V;åôës¬¾ÿ	Çzll"Ë±,zâ¿/®ïZeC}„ðaÛ—²7”3a¾³eZòzÂçRû’nºBÿ˜ASš¬²cß,@?.¸È½àÔqa¶æciËï¼ùÚþÛ†û_¡!)â£ä¾€=M	µì^°‘cdC_¹š´_Hx%	'« €`€~3çÇ»V52•ðÚÏ²û=¶Zæ³õ!F–ìí¼‚n÷B7‰…¨Ó"�òÔõøÊ7.ØÓp¬[92¦¼’òöQr_@^Ç	`	3Ø$€B¾l…	š4V´qû¾­«C©4nò¡È0VÓ±¡íCâ�?Jîåê#Ûñ¥“j†‰$P¾:|} F|¥¥¸Ç÷"žÙj£ÙHÆKp[lÐ]¢m´~–ÝïQ\ºbÂ‚UÖ¨b¹{Oü~ÿ™vFÑ8²€(üSt©Øº!Ã&à3žö4$Ÿæ÷;¤¢u³ÇBkFG¯éu§ÑÛ+Žq<ð¨?=8ØÖu?b(+c˜ày!¤m¥ªËáùüÃëeÈí³×oû©|ÿ%TúôÙÓ+ÿzå`Å¨\ÎƒâÏ(€@B|y^ñ#¤þËðêÊv…¥z÷Õ�u«+ý}òÆ[í«¸žÒRÎ§‚$kÓë¾¾
+Éòø#iŠnn�KÓÅž\¤Ÿ1Ô‹!�a„E°h°ÿ:–Gà"û_�ÎÑzø>&ÿZ_õî«·]qnÀý9‚OÈ¾ˆa›Añ	ÏAŒtÍRÎƒMäõæÁ\£NVµßOæ�_ü¥zgY…}‰ñq�¹¸v‡·í@*–[�|ÀôéŸDóo×¡ªÕù3×�Çó‚míŽ™<þ±´]ÿ*/­�PB�° Òµ$™Ÿo«½ðÝ‚R×´°­úÿ§0GTN÷3J\ðÈß9KÔèt:þ{‰÷�?ÿ
+Uw;øÃGœ=ó?g`üñ¥=û6iE¿/åªÿ×D¿Î°[V½Ûãý¿[ÊJ»bÓ5§¹‚åì‡ãxŸÜ~Ô¿>½»@ÇÜžü0³1r’,£¹X!vø(¹/W1ìüÖ#Ñ%QüÇv½Øÿ3³é>Ôw†‰ýKuJÅ
+¢cœjðˆ1b‘@|<T#¸wžyVk^Šƒ7&·^¹�-“�‘œ}
+ŒY<xU
+y³øçû?ÅÍµ@?PÄGWá¶@B#Àb¹xó: sGô›¡¼”ŸÖ´TýƒRYS�Ï+‹g½«~]1é“Ÿâ1ÏñtËí×cî¥¬:sÛlôá¿ñf‰�ÿ¥?gk]ùú±ïœõòæ»+í96½êÿñË”ð�R
+/£-—�V�çÏ_pþd¼·«êCÐ3	|ºê%Ý1í9rq€ù¶é”~¼ýc:†Üzøî¨ÿw½…-/7Êà\÷þ-ÆÿG¦3c­q/ØF—Gý=,þwèÄgZ>~ÕÓC" y£š>¦,�Ö8ãMÈ5H,§ã^"å€˜°.”Bù‹áVTûwý·5î0{¾wgrè
+¶ÓVYÝ*çÇlÿãßö@,Ûºå�iÜõOiÌ÷øü¯¤o˜9žÞƒâ€ñN#]f¾ÃúH¤¥Üÿ»Ö�PœgZîu~Ø	ê�Ðtf.�V®f¿ÿ×ÀrZÖ[²‰�?ü*Œ†�êüÛ
+Xðëw¤Õp¾ªƒý.,þÀ¹SüúûSŽ. ëNB¾,ÅÎ•Å”ºóU¡øvQ�Ã¦"[g3�êe~„ÍSvÊOÑ¿ÆèåÏ|÷ž©Ì‰°o¯Â	°­šËZw
+8_ÇœÛ0{‚Çþøôoœ†²gùÆËµž3…°okê�"†ñ1#âQK¡MC™ô"t¼ïlØíŠ’+ÿ}[\qƒjªì†ÑôvpA‘²+'K¬sæÎ9}í3%.,.ÑgX}È?ç©kjµ#ºAs¡·fv‡õZÕ}"þÔ±ò
+è8{€ÍT°ˆ¾ŸÑŸ�ùç¹c74ÙNE±œÙ5qÅèIöì™Û‹ËÕ°uÄ¼y¯¸|ç…-ñøs~Ïuù:É‡	+½ïÃ1Ö�‡¤{;Xw¶Â`æÄÌ�Œ\@9XBŸäö ò0w×¡oÇ6»U:Œ‹›ÐœåüU�YëÌT{  Ê_)ó�¥±²G,`†�Ò&Ï©}	¨~<´øv{q{n5+h
+ñW÷#çŠÎn?,„c¯@¬Ía¶Õ½ÆO0˜0ü«¯#s9v°!F÷Ú•F€¥ÿ•�\_‹àÛ†B‹·hÅy�+=’À:þþ+Z7m¡ç	1ž�í=C™ƒŠ¹škœòõïöÅDð©ïôT2üvBìdA…NÔô”ßzxÍq¬ÁŽí`uptîwg‘#æÕÁ)K[Fª'Ôq£Ø7Óùcì¸ƒ1w{ën�]ó‚MÜ-Ô8ÞÞ¡)¿•òö–Üƒ%—SpŽ+FßÅãoÁê§ìçJ={SÈ¶ìBÁÀ["§å©¼½7·v£µJk6�Å¾�Éß!÷”&Êà²Úv*~ÀÊ-R^üÃ�N{zË…cÓ– ‘k‰�;Å¾›ÏŸ¢¦=ƒáæ¶JÿÌö5‚|þXþéH34Æyë5™ƒj_Šôß—øøgô?r¾:ôöjî”ÈÖý’êñÃD£C9ãMÏñB€°`c>Æ·V36}ˆÖ—�}{óØ�Y»šøw¬Þp²/ý)�Ù>’‘çlI‹Æ!	2ýòÉ�œÿõ—�ƒ2u­uÓÕÜ^=T.)Ùç¹Ièm8äÊÂ&ˆe‹L¼Þ~4nÎ*ÙóûŸN¨[;xÅ°‘é¿œþ¶­©
+x<ë¡í±¦)M…„ôø¼ÇZado®ñaO°ïg_+{åÜêv_4o‚�ß7ÓJc÷_ÿÂgA—ïŒðWw+7…PM`¡Ž˜s2bÛÁ'îTÊØ"ÜÌµsô¥NùüMÁÔžZc]ÿÈ¢êß¨¦¨¶�1çå!4ãÁÚÆ�ÃqìKƒ8gÒóÛóÒëÚûªØû%Ðþá1NÌ=÷·SÖË7-–EñÔëkí:`à#øPJ|¼ÿ³eWö?©iàÖfò‡Ëš ûz z‡Í~uþi Õ1§�çš7ò‡á�¾DÔöaz¿Å¶’êã¼˜e#òT¿ï{>ÿ=´Çj8!!	@§#†D ÿ÷K�~X7x3DA†» >ÍïwÈ+$xUÜ7JüGe©ðøÇUXây<óø‚7pòŒ�¡W<yüDÈþ„øÇcùü´/ÀÆE1þÂß·�-˜Gˆ�Wv	hþe™µÓ®(v§¿ÿÃüæã«f0ÐñI©~
+N~à4`Âá°µúDÁÆbÁ»Ø}mô£0ÿTË
+2€5G�ü7€��‚æÖ—CMQ£Ä~vÍATŠ²å<Á|ÈóÏ¿ÚÝ»u§µ^¶yÔ¯¢Ï×ÈÞ„ó�XÔßIÛ^¥FÖ G;£5˜(Ñ0JÓöŸÍr�êcÏn?ÀRƒêB—÷À·ãYN†v�.	ØÑ7*f†!ñ§9­˜)B‘þ”ÞÔêtömsÏŠÊÛF;Â¦“0°²ì&ïõ`–'EaÁkŽ:Ðñ¤Î¾mÞÃ`ÎNHµÖr8dÀ»ó" Nþ€EOü#Ý+uú…?e±.­YÎ¾ujüÑË»ÖMªÝØsÎ¶ntüåâBÂ´ÈM?ñÍèÓ>[«¼|ÿ£°e;m…�-Û¯‰›À"¶±6ì
+î©Î~ÚhLf‹3”ÑÚµ]‰¨"RÖÇ÷tÔÎ~g´\n£ò?þ´d{ŽÈsÀ4¼Sö®�hhq ZªžC9éñþ_µÓ–m|á:ëÎnØÿé�ÑåQmñu8öHN7þ&ži„Çó?{4ÉªCÌF½~w:ölÿÉÑ‡[r,Ï:Ûbó¼U¦h_Ãá°Ÿ£tõ>œ”Ïÿ\äÙhæ¨ëYìãS<à�®Ì†Aþâ_jwí±æØ<]ùbØ<¤´<>ÿ{:¨ÝRoø¡ o©÷ØýÂ!1�ByuzpÎ©tp�ëÈæ÷H4ŒcûøX¯¸~ÓÐåW´ýú¼Åsà‹{ ^cd˜®F©ãq$†ç€@€¯Çó7úœèÀ²Vº	€W€Ÿ&¾Î ¦	»ÝD#ŽønsÖÍè·©/fOÃÇ{�Ñ…kè.œ“­PõäËš>Ôû=&hïn§u«Th
+i.›ðoó÷<ÞÜržomú>Å›.É¸¥ŽvM}3®ÕãÀûNfn‰á†ÈúÆöññ?œÒ4Ô‹5«%Ýªù¶z;º$¦þûe}[í°Ç_tånƒ[¿€}|þ's¥£0çáëØ­
+Fœ�=¥âj˜%€:î!Ðí¡Qr¥ôãëßkíYêzÔÿšb½ÍmÛHÿŠl\]yŠ¬hÞ;ù|v`F”VTRá'ð·"m¢9Hî¯Ö;xE_gÞW·¼ÍÄSÎ žùëY;kÚ~ˆ�ç¿mó­Vi÷óæ.HsCjØcñ³=ÜÒ:-ñ]t‡Þ­zzF}Óãý_îx&è	oòãöNòpfŒ‹Gì�%	¸³S‚$°á!w+Ÿç3ê·�¯ÿ8l+@;æâ¹åêð$ f7÷Ù�\Ic?-·N‰ÂŸ¨éÔ?ª_
+Ð/ôüûoœo4†¼eÏ¶X2@ò|ý(*;pF¸Ì,÷V‘Ú§ÞÜ…ÓBîñþßgêó¢£]¡ÁªyÝ}Óƒ"÷§¶�‡w«G¯öåâå$o+ÇæôœÀlB—°QËãûŸÎ1'\ë×I0@ýÛÁà_kÜÏSÔŠ©¶îº7ÖV•ê9Þ—ZÖÈò#úÿó)�}ºµíj¤
+¬zt�Î‡/Ã7^Fw:Ï:s˜L1ŸR0&ðxÿ—.+"þ%º}Ye™Ñrÿ†Bö—Ln«¬öæêvoµO‡èGCË¤ÇíðM4þxºq0;iÀ¿##0×ômævtu·é6Cà:»�ýE¶ßÃâïÁW�âYoøú*ô^‡õLÿbEÐÙ�Æ?¬©7ŸÖÊ°±óÙ9î`@
+å‚Ããù£+GµŽØC×B�áhÝYñ(\zY1lkmËñÿMZ¯ãàj7?âþC˜ô+_ò¾šîx=g8îGB· E¸ýµ3ýê »ÃTZoY£XÝéý¥ïgôg€¤6îlèÆzø1 ­kÏüwsExÝý9Ÿz^q$æL“®aèåÜ/�@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ ÁÿüE£ÕÛÕ]Fo(?mkBTúÎÊþœ€ xœí|TUYšn¿é·fzÞêéÕ=ýÞê5ë½5oz^WW•¥¥eFDŒf0çœ°Å¬˜1 ˜³¥˜PÀ,Ä²$/9ÃåÞû½ï“o@ª×šµ^8Õ_Å=gŸ³Ã¿ÿüï8ýc¶´ša±f3]cK
+ÌtŸ·¢?éö_‹Å">+<oïKíÛÒ;„N¥gÌâ[­FhóJ³M[yLš÷Ù‚ÙÑ3Ò]‹I|·öºÃñÛ´³~Öº�EìÃ1(KÓ¾µt4.³ÙvÜŸ±Xø²YØ^à{Â"®Û"ÝaâíxñÝü¶Yþm¶¡Ÿãñ	k¡¬™ý¶Â¾´ð~­©Ø³EÚfm,¶»ËÁ[÷g±8^K-ýú*ó2·ù¬ã¾?·�ì_³ÝÓŸßG¼?�êòÊ±]`¶H{Cäu‹‘ï‹YÜ+\6ˆ2Ã,®m›}YdÔ¬¯}ùb�÷­ß'ÍAƒÍ¼4(ð¶5Y¯U»ùNä›ö5U÷Õž5²ÿüç®ÙöÕ0ƒó»½Ö²Œ—×Ì¬è
+‰nœ€ZÙi\Ÿç�üú‰|«ööy@ÙÖmìýþl—*}È Õd_¶«ûk·<àëkr¸?µke¿/ëvöÇ/Œ§éu*Šg-@å¥(˜Êh1”ÀÔP/¶c<o‚,”!Šú_º÷ùõ«ª®Ç³ÄW8zâ4¶îØƒ°ð#ˆ½}Ÿå6s`G÷6oÛ‹Ð½²m76o
+ÅÆÍ;±iëN¬Û¸ƒ_“žÍÏ/ vûñòUŠÃ¹[¯K~AÂÂ"-í�Ü¦¤ävíÞÏûÜµ;ë7í ¾¶nÃ†Í;°|å:œ¿xFc+oŸ™“‹¡aØ²}vÓ3‡ŽáÆÍ8¼yóµ5uŸ]5¼z•ŒÇQWßi½íÓÒRö8ÂÇuÿ~¼Ýõk›þšª«�ç7i?ÿ5²=†¢bÿa”®Å‡±SQû0^nmý*sk3a—Ÿë‹ÁÓ„ç˜2}>Ü½†Ã•úéï9ýÜ†¢—³'FŒžˆÛwâmžY»a¾üº=ã‡é³bñâU˜;,^�Ùó–aÉ²`|úTÆÛ&$¾Ä÷=\±pqššŒ6k`�'â' ·³._‰–¯½}—A×<Ñ­—FŒ™„ààMX½.AÁ‰þ;±lÙjœˆ<‹ææÞ>îÎ}>§~ƒáæ1C†�Á ¡cà=x$¦ÎX€k×cÐÚÚ*öíx}Ø¸Ø~îÔÙ™öpªpÍ¤µgÔ:$5í=¼‡ŒÂWßöDèîp‰*6ïÔüVéa	J·íBV?ovìEsV.¿Öøü>ø Àg,š^¼Tž7¶ )9e§O£tý6³?V—][Néãfì}8¹xó5‰Ž¹‡w9È¤¾Þ¾KÇésWáÜo¾ïîÂù]
+[¶…âëo{cîÂPXTŒÆ¦fâ�zŽ
+
+Mü·Ôoâ‹Wpé?ýÜ‡âÎ]Û½¤–ý<Ix·Ã}[¾–ž™¯A£Ð«ï@\ŒŠá|ÞÜÒLØB47rº·´4Ëó»ÿà\©O7O„8Š¢â¤Ñ
+?|}ú
+Ä÷ÝÜ°yëÒmË~ƒ¡ŒöË"tìâ‚}û�X/¡ðÓ¢Ø¸©oßÃwôdôèãMr*Bla§ißˆv½Y¶•-¨{”€’Ö *òG¹yk‰AþûãìÅÈvsM5Þ¼EõS¼t
+¦ÌBŽÓ´dg‹Ý
+6#T<&é–4’ƒ¼G`À Hy�jwîOŸ½€“ëP¸zú"ùuš<÷Í[wãëN}°pÉ
+TW×Ú}V"é‹—É0p:÷ô Y±uµõ�_d÷ÿÀ3Úçý©Ïk×ãäkÙð<½]Ñ>z`·O5<xø˜ä™Ïõë75÷¢oÄ¡½çëN½qâä9«qkåÑ«W¯‰ŸÇÐ¾óÆÔ©i�µhî[CjÚ[ø�ž‚NžØ._·ÇóÜƒ“ì6Ñ`h%ý‘?y>ÎXÓÇ¾*åÛö ÇË-Y™¼MËÇ�È÷ŸN8%+7¢ê|êãÀT^‰²}GQw_X“)ÐãÏ¹óñ¿¾ê‚KW”µÑÚÚÂ>9s.
+_ü[„í?$_aôïØ‡øñ‡d#Ø÷
+’’^ÝFÃ…hÑ›dÍå«Ñ¶�Äç%`ôgüY5¶ôÌlxý�ˆn7coÛ{�?~Fïðáï¹téŠÍýƒG"I—à2âí»÷òü­ÇsõZßG‡ø /¯ÀN[ÒÞ¼ãôïå<P‘ÒÕ6€ˆï+Ñ“ÖÚ:”ï;„‚acQ²yÊB#PŠü€i¨ †�‘äl¡ÿdv…¡áA[vÁ@vƒ†'	¨¿ûˆÿmma­­
+Ü¾û]º¹’~ŸCY…f|Öô/.þˆ{$·+hoI°yk(¾éäÌé_.^WÛÐêy¾"»�Éí„Œv£ý§!/¿ÈÎÊ)Ï$>O‚ÑåÇK×äkýG“ìŒ˜Ø;ö–^OŸ&r[Æ�è¦Ð_™_~A!Í­ƒ;Î«ö‡z
+Lä;„’líÝw¼Év`{éFÌm›9ª�Ù¬~$ÿýù/€uüÇ"þ‡÷i|ý–’�¨8~dOå�›ŠÆ§ÏÐ”‘‰Â‘Q/�ÉiøH²¾æô�¨?Ãž0T^�Fk]0jcâÐ Éj³3R ±±	ó­àòûØñ3šy+ã´ŠX�:„èÿUG'®X#Û[Zß_Ko¢›÷ Ñ|téá†ÈSì¾W‚ÄÉèK6è…‹Wåké
+ÿÇ´ƒÿ™íÍøŸÉÿKQ}•XCyy9fÎY‚N]]±/üˆ<nµ./%Ý?ŽønþÂ•˜97�hê…5ë¶Øð“˜á7j2z:y‘uÔfM¤ÿ3ž7IûQòåÍ&”>�Òà²çÒ`ÌÌAcÊŒŸ†ê—y›OQ²~3ŒYÙ(\²µ÷î ‰Ú˜*ªP{9Ãýa¬ª„ê¥šQæäæcÈðq|&Ñsê1)‹’É¢&…¿MäSíôÿÒ TUÖ8\L–»“þ_Kë6wÁròÜ0Ô7€ø9Çª¥–þÎdwœ¿ ðezFÙ£ˆ¶‹þ¸ý7Làÿ¨«Vs*«ªÉ_	Âwß÷#>Uëi@¢ÿ�›·IÞx!áùÆÇÏò¾Ç�ü**úèpÎœþ"ÿï
+;¬z¯­þ·@ÚsâE’­ôî:š?cî|5�ó½•'ÎàÓ†-h*(@áœe(YºU§.¢š|ßÿY¨Š½§ôÀ_lcAB'·nÝçö8óÝÞ§gÉc³�chmF9ÞDcÜ²MÐÿÌçnâ¶¾²?¬åÆÓg/áì>×¢c¸Nv÷ôÃ·]úb·lOHëhKÿsâžgÀÆêI2¤·Ë`ÄpûŸhïF{à¢F¾‹ëHü2o¡@ÿHÑTÍšcèžä3’¯ÕØˆg4�þd+÷÷öCBB¢jÜZ�ø¿{oOâÿãŽhb|&±/9Î[R€â µ0�o[8g)È’¡¹¥«6½ÏÀ˜Ÿ�<²3J‚‚QsíŠ¦Ì�!â0,ê0¨EŽ�.EE£W/"øC^¾j]¬ãfyhâcÜþßƒ¿’ÿ·œÆÒj6)7T²L‚Ä—IèKô¿rM°ûØžéÜ­?¼†ŒFrJšêQ¥&3˜üWÓŸë¢¿3³ÿbnÉ}*9eÜ�üwõF~§~¼xY¼g’†ùu“æ�þïG²â©ô6Ù^fþØÒåk°hi0ÿ]D¶8³ëX<áÙÛŽ@æòÿö†rØNŠÓZ äŸÌ¤¿«®Æ¢tåz�™„úO4íë3ÒQ²}Luµ\VÉ÷®¾‹Ì.N(;z²æ²Xdº[Ûå§Ï]¢½9€Ûa†²r8…ŸùÈ4²!$„Ñ¿–‘þwd#H4yöâ%úö‚3g_öqÂ3²Ç Ó÷.
+^¯zF¡ÿs3†ó?ªä?Ñß›ù}àÖíûÇ-õËü?&ûÝø’yE»N~iò•ý'ÌDé>1–Î€Å ‡ù�—}8f»-\¼’ÇŸ®FCCƒ¼jHM}ËùŸéŠ�»ÃTëig�$v‘ÖÚhDCâ+Tœ<ÃÁ£dœ‚¹¡­¤Ï‰¿ën	ó6’�h®­EýÓÒ“È6¸dC{i[ËãˆƒÇI÷Ç„)sQQYåxU6Žu!dK(:|çŒiäÏ'&&áÝûò{2ð:õR^¿Ay…âS$<gÒ7§Eú3™·vÃv¾öžÞ#‰ÖÉbK…�_pú_º¬òÿDûÏÙuù¢‡y¼:ñ¹€�'P¿ihå±_á÷¸ÿ?ŒÛÖ>g%­çôÙKI‡õ&=ñØîüoÆÜ¡¾ãú�[òµã¤'˜ý9ˆ|36O{�Êìfÿ‘Œ
+Ý®¹gíÿ	×T¶ak+ñó-²áo£&þÞ~ñ5É÷
+¨}•„ÔÿükBÃH?”àíoÿŒŠ°hH{�’y‹aáqiAÖËÖw*ÍŠ(öNôÿŽ|¿€I³QU]ƒ¶Á~ž�Ùÿ]{{sÌkð(1®Ê�Ùgýqåê
+¹=ãg÷Á8{î¢|�é„Á¤W»/’ŒµŽQ<M|N¶ž¢oªãýÝiÏxx
+GòÅ<¼|¹~îÝwÆŒ�ˆÂÂR¹ý£GO…X6É€s?
+òšÅ'YÜkÙý_ü¹ßGf“¢¿$;ÇD:mÍú­êã�Ü¼Bù~NÎx
+Ã}Ð8‘ÕkËà
+‹ÿOö$9aíÿ«õ¨6þ'˜ÚT]¿‰Â±SPN¾~®Û Áïß�‚q3PLövñš
+È!ß¢,ü ]ß�²MÛa}0“_fa<&1çm½¶‡Ž£kOwÎÿ•¢Ü³¾6ååU´®Q¦Š„lÙ…]\0vü,8‰sç/Gq¿îØ‰ÓÈý ØŒ—�Uò_x3°~ãV²‘½9
+KkÂà)ÙWÞ¾<>-çÿ!c‰žÃ±1d®ßŒÅ•ë7ˆ?cIND#.î.ê¥üûÏƒl\¯‘˜8Ûv…cÕê¸’,êð�vî‰�sƒŠnèSYYIza®eŠ-ÆŒ£9wëå‰ƒ‡NÙ]5ÉþcòÍšþš:a…•8�Y’-¨ˆ8Ž’YKQyôªAÉ‚@”;	Ã¦(^Œ
+ZËÒ5ÉN\‡Öâreì’0[ø^à—¤ ƒá�Éò¿mú3~i@È¶P6Adë™ÄøÅâÿ/;ôÄâ¥+Ñ,ÚÿÖ ­é³ç/áB6ø™³5×“SR‰wGs9¹dÙj—�€É¦»­ã<þK>ø=2[
+÷Èþc>ÎàaÄ³~$#¼¹M>jì4zþ©ƒñ
+cËÉÍã>*[+U>–sêÔ¥fÎ	$ýY­™ÿó%ú3;aoøa¨Á&ÏÌx*-^nH|‰Òu›Pu�PŸðœËƒ2ò¡[ˆ›’^Ã@t©8}^ÃÝ’lKi\Ú>Ùœºtw#Þ�AzÚ±þgPM6Æœ?àË¯{’¾˜)óË–m‚ý?oÑr»þ¿z-Yþ‡å~Îžå¿E™/ó¯z‘,s'ð,QÉg%¾¤g˜ý§òÿ3Dú÷éëåÐÿSûw‰þ.$w
+óÇòÃÓû¶‹3Ù¬ä³6J{VY+µŸÃl6f%Î¨Ìç*ég7v#»‚ÙÖÀä¿Àÿždÿ´Z“öÕT‘,k�í"êi>…c'¡…öfí­[¨ˆ<ƒ¢‹Ð"æ-’ö—}~öo«âŠ°ÿÀQ.ÿ}GMDA¡uVë‡×ÔÖðucóe¶ž”/åñÿo�ho,SéûñŸ/’àâAößy‰ÿ•zŒìÌÈãÂƒ1gþ2ÔÔ¹¤ÄçÏÑ‡ì¼3çUþŸ”ÿé«öÿÃýû�ù0p$nÝyˆØØÛèN2Ù…ç!ï‹cQbZò
+Ð4Ön
+…÷°QÈ–òh*(È/Àp’
+�{¸cÓ!­­šû©bü—Åÿvï=hó|{ éÑTŸ½ŒæÜ¨ö
+d6¤¼E¦“;
+ç"—ìÃ�ÃøD~xÉæíâÒ‹uyBA° ùñÊ»/\ºÆ}ÆsYÙ9âœíÓ®ªºŠ|�`Ú/d//æñpýç/ü�dˆ”°¿·%úŸ’ô¿<¡Ï“§/àûžýyl=6NàëD²ÿú�ž¾ Žÿg°üïh¾Wbâ>ÿgôwuâ¿1ŒŸ1qê<|ó]ò?¶�,WçþMòx˜½ãã;+×nvøîààÍèÐÑ‰äßªø—ð|šèÿ3½¦ŽÿÿÔ:¦’­iÿþ
+rûôGŽ§ª£o£ˆlÁ�KV¡‰|.–'4’ý^0}ªO)9L9fcÖTÖÊýG]¹Áy‹ÅÆÙXÛ[5Ù—®âôŸ1w‰Lÿ-bþoqàJjS+¾Ã~�ÕsËq‚“*ûO�°þlÿ#~búrö¼@’9uHJJ†;ÑMmÿ¿WÇÛCÿ{�ùžböÿå(ÁÿÛAþ8‹=â/ç³-rìIXƒwï2HoÂ¾ˆC¨%ýWn(ã¹ù´UU(«¨Æ¦�Ýü=£¦£°¨DÓï›·ÿ÷ þß³O«ÿ…þÚÞfÒMUQ7PH´.Y„æwé¨ºy•ûÂ°zŠÉî0Õ7Èí�ŸÊðaÄ84<|ÈvŸ´Íá°˜6Óm}\‡’
+¦ø°öê“ÿ3ú3ù?eæÿ‡â+âÿEDIÿ;ª¡³•ÿJ\AŠ�<‹îÔ£íÙ—‘ArÉÓÛ�ì?Å�TçcoÝms
+hâÿ¢y™’ŸÑ±³+‚×‡Èö¬˜®proÒKþ31ŽptÀŒ?“Ó{,ý=d¸?<h/º{�ÀE•ŒbÀìÿc¦òø«‰³·¾mAsfò‰ßëcãd¹ÝD~ç§à�(
+Z‹,�Á(ß³Ÿ_7fçòœOÝ³ç( qUGÇÊ<oRÅFÕ´aöéŸqä{Àµë±mŽE­ÿÕôgüÿ
+ñ?“eåâüìÓ_à5ýÍ6kQYYò«˜_2kÞ2£d~ýÅKJþ�ÙÞäÿ9¹´Oÿ?xOú(�ÿIôg½î
+Gçnn<†“WP$ŽIÏæ­{áJ>fÄ�ã8~ü,Ž�qè=‰ðˆ£ü÷é30qÒÎã+ˆ.MM-òóLÿûŠúß:ÿÛž=ÐJ6yÑì%¨‹¨\+«D!ÙGdƒÖlFñòuhÎúSc5Š–®@ÅÑ³h!¹U0m6;Ã`c“&HäJ¸º¦cÉ·íø½+6‡„Êµlöø¿¦¦šè/èÿi³Uöß–Ý<ÿ?O•ÿwdÿIô—â?Ò>±Î…?yžûh^CÆmFs^¿w_ñó¤ø?³ÿnµ+ÿ/Ömøâ¢*�ÌžeqÁn4§óªü¶—‡ùùcÖœ%0¥ZEûûzë¶½<:iÚ\U>�Éÿtâ¡þ't�ÖþsœS×BYØâå¥ÿV3¡P´rªÏGÁ°;¥?¬‘‡V²~+*#ÏÃø±Ù=ÝPyFÈ¯sÐ¬µé™·gß!ž÷ë?•çA�$ÿýg’þWü¿Ýäÿ‰ö¿ÌÿöçÅb;Ìæ>#Çÿ¬ë„„•µäcÎâ: Ÿ·}ô8QnÅí¿ÁdÿõÒNùOþŸÛÒÃ¥ÈhëgzëÛï\0~òÔÖ)õk¯’RxÍèQU]„ƒmÍs†,‡á;jRR”ú9Vÿ)ù¡»ÿ6û¿æn<ÙýÏÅ_‘I�M^€ÿÉ¨<uŸ‚6àÓ^ò?>•¢îj4
+¦ÎAé¢ÈŸ6�¢mcVÉ~õÞc²Ôƒü¢.Ý]ñàáñ¾SÆQMþX`Ð:.ÿ&N—y"„ÇzóØ@Yy™Êm4Ëò]òªŸ’_Ïì¿È3çUý¨sJŸç.Dñ˜ ë?Nÿ‡ñŠ�‘™I2Aðcbúkõ‰2G–ÿëGú¿?Éÿ¨KZ>gû¡§ó@tííÁcÑ\¾ÃíE¦#Õ`¯.êå«dÒ/CÈÎ÷&Ù¦ä™üÁó¿\OªÞ"æäÌøœhxõšlú(˜›…˜Xmb2>®@Ñ„©(Y¾%kCÐò±ùc'‘.X�Ò�ÛQ¸ùÃÆ¡pÆB¹7V\h‘“L
+0Ù»yË.òázñgY™RÛ•oVQU‰™ó–ðÚ×`ò‡¤šr&ûXýÇÜ�¨”ü?~�í­�Hû¶¯*ÿ#Õ"hi&îqò¥XÎµs7Wî·Ç«â+é™<×Ð›è¦Ž½Û‚ÿ}øˆÛ¹nžÃq1J[ÿW\\ŒÒ�Ì†_µfé5aÌ«7lƒïÈ‰¨¬n;.Î ®®Si­YLiñ²•\¯2È&[mlÀLk?pLûßìŸ�5&'Á°÷ LäUœ>‡"²ùK—o@�Ï4“Œª:wÅ«7‘ÜßFí 4h#
+fÎG®û@Ô«d¦E<3&ÿVm¼¢¢bŒ&ùß¡³V’?›W è0æ;æ~(äu¾Ýº»“ß=’×_KÀêá¿ìÐóÉþ«'¿šÙ…,NÞjj…‘l„c«LSËur¤È»µFÊ}ÿ˜|w®çï?TòßBýÇ(^W}ó.·EX
+8Ã–#—MFU,†ÅÿX
+ãçµüÏàôÙ‹ÜGwvD:;ƒç†óÇÜ…+ÐbjÑ´µwF�Á¡#'ñ]Wò)äõa¹PÁÿóÀ¶ûøØXÍp¯SoFKs¯YoêiïN_‚b’³ev�¯ÿ	Uq÷�ö‹ÿŠ/4åæ¡dÅdvíƒâ%ÁÈ¥k…3à#ÙˆRÌß"Öý´uö69õ-í÷	dÇôáþÎ†��dçž"›v<ŽÀ—_u…ñá“„—šç‚VmÄï¿èÀýkæu�«èÿëxmáº–!ÖwÅ?J ùáŒcÇ•|‰ÍÙù?äÿÐzÍ'|ñoqCeç¿%»ŠÉTÆ³ÃGMäý-X„‹—ó:ô©3çaÓ–�¨ªÎöÜ¼‡¯;öâ}Ÿ=+ØCêók…d+±üÞÿg'„’MHLÄŸþµ#Ž�8Û&mÔðäés²œñUÇî$“›4)ù5étîê7wL™¾Óf.ÄD²'�&O›�Ñã¦´ùÞ&ÒßÅ>` Ý[I~¬¥µ‘8Ù„’�{�òwÿ„‚ÑSÐj¨@ña	Ùgå.¡xÎb4ñ=hel+Lb.Èžm&]ûð!GŽŸÄ,ò9xùÁ™xÕÕk¦M_Ä÷wFF–Í³×oÄaùÊ
+´Þ¡X·qÖ’ý¹vã6ž_[¼	C¶ós!Œ¨…üÜ³­¤~­ëËÄ?ä÷§¦¾Ãvòc¤ú4ådgF<†äSmß†m»ördïÞv�|™]d·�ä|Ì ;'[·ïÃ†Í»øù-@ªïúi!yÁj¡Øx‰ÄÓ„gØ±3\7äñiÇ¬û>|äÉÉ]xòä™p�Æyàð	ì�ÀþýG±sWvï;€ôÿ}aGxÎƒåOÛ³‘äù�õ·ïãý¿~ƒ�ë6
+ã –."þJùÙß¡hq°ÐØ(æ2d™Ò"æ~DûOÊØÔwñžäßM$—ØY½÷$¿²híaý€Ye×µì�ÿUþû¶y�õ3¶ñ‚vôìðš]ZZ§å¬Ö¦½ýÿ´qŠ•<Go„¹§› ÇŒ…EÈu€´¿ÿo(s‘æºä“}™ü³ÿ‚òc'4Cbþ’�¥3`Ÿ)ÊíÚœ�Y›JZ·qkõŒZà[ù(Bêš‰nÚ:¿¶Æ¬–/J‡êw)×lÁj­ÚîÍ¶Ÿvî³pÈ›çýÕçtZ
+ó‘Kú­ò‚³hÎÎFú7=�öë/P-žc2–”"—ì–”þêŸ¾{¶Èü&ŸþUí{œk‘×ÞluÕÑÞ×Æ’ì·‘ÚÙÖžHt1ÿ
+¼eä\‡ø­qøPÎP«â_°‘,c–ª&íƒ"/GD3O¾MLPrÏ
+Ô%'ãÍïþéÿã/¨�â_uOŸ!ý¿ÿé¿ÿ+ê^q�¦¤4¼ÿÃ_ÉS£ óÌâþ³HýIß½�ÖDMUßÖ2V~ÞîB¨yÕöì»VÆ«žVíM‹êžÌj6úÉÚO°ßÖkhgMí>÷¹÷¶Ë¤Ïìo‹pÞÓ$Ë|šÈiÎjÍjÎ\Ä›_ý™_~ÇãºªnDãÍoþˆL²7[ÄºmVüîFÅ	!^%ë}‹¢KÔ2êsst´Fí‘½Ž¾%a÷^Û Ý_¶2GéCý^Çcùi´Ôø¡6ãúä“]{ËÖþ’ê¿ØyÝwùY=\`,þÄïÅë_þ¹=]yÍƒòSh_ü²{³kÂ¨ŽüÅäW˜+Ê!s—6¤þ™•û�ÛÌììk}}�æ~©Á€ƒ‡N <â˜M}óeïÜ{€/[ž�u½/Ç•¢câ°sw8?û+�‰œ‘ääT\#ß!úæ-~Æ\\*Ì?ˆôDÎHïc1…¸[w‘••µ¼a�™�ƒ+×bø™¼ÄÄ—â³Âý¬ì\Ü¸‹k×n"Óê¬‹W°Ã¤W)6t)+¯äµ„ì¼q{ éu*®GÇâáÃÇh5·ÚÜg¹ãòò
+ÍµwïÓ5Ò¸µ¦E—"íç¿AžÏ˜ª+ù�Ò�P¼þ§Aùâ&1ÏRF>à›_ü¹¾ã`ªb÷e'"I/4‘>ýd†Z6›ec,…|+ï¡£Ð¹{?L˜�bq¿	c­àßièÜÕßwë�é3ir¬>ÇwÄ$î¿ÖÐ˜C÷D`äèIš¹=y’Èã®,?¼nÃvy,þÁÎÎuîÞ�»õÃ®Ð0ÍsÌó?SÃaÐØÜw�áÚ˜¼,gÔ¡³ºõê�Y³¤ú¡¿‘çx­¸ßÈIèO~ø-Õ™qgœEþò
+òa­!úÆmt¥µY¿~»Í={°vÃôrò†sß�˜8©oÓ5÷¯\½N~æ5�aß#‘mñ|ž©©‘øx!^ÿìQ4k!ùüÂýÒe«‘ú÷¿EÑì…´Q„µ)]µ‘Úý
+SÈ¨, zžËj³˜ûUÛCfÅœ0yÆL‡ÁP‰ÚÚ:Z3öN¡íµk±èJtýæ=Þgg¡wßÁ8~B©-a1N–ÿ¦“’ˆ_Ùù¦‘c´ôgßbî7‘çYª*+åúYFÿEK‚0wÁ2|údà}«eûÊà�¼¶ÖØª:Oæ—6¡¿†þÊJî?Œ¡¾þ<7TÉÏ2(µ…ÇH'²ò|Ú¿£ÆNÇò å¬	£ÿÌ9K‰þ›lè¹�üt7Oó4™Œ6÷­ayÐLž>9y6|<fÏ
+DcƒRËz"ò4ŽÓÖ
+³x€âŸC°Øè?•"ìT$‘o÷iµ8ÞÚzäKôþ%[…¸�‰æZ0‹®ý%�A*Ù.~›HuæS]—SRlàß28{Þ6Ê`ó–ÝüL”ð
+`öüðC�Â#ÕÕ5BŽŽö;;G²vãvŒ›0SóŽCGNÃ…ÖïîƒGšëŒþËˆc'LÇ�—®“\êf¤q¯ÝÂû6µç‰YÌÔÃ{$ŽEžÕ\ú:ÉiyòÒÓ³5w��<ËÏ˜±¼±ß˜É$‹¶ÉÏ±š­9s@Ð*m�WCC-¦ÏZŠiÄ‡£ÇLãgÄ?,:uúþ·Sö”¿}ÃàÖí»ˆ�ÓžWåçÂDÓÂ,ú.’ic*-AÁè©H!9P"Ð›�	MïÒ—öÅ¯P%ÆÑ[Ê
+ÈàGíþe!ûøÙ!aþfÅTùïÒRßóüöƒx-m$Xµ&„h¾Æá]L>.X¼R¾ÏèÏr›¬&�É=¶N¬Ž\
+¬žkâ”y<?tùZŒ|½¥¥	«×oáßï`u3,?qÄ‚×†`<Ñ_¨1Pì®&Nÿ8)�WdÆ	’ÿß÷rÇ¶?Ž�Õ<Çä?Û‡¬”é¨Uþ¢‰dåœy�X¹ZËÿ¹dgy‰¨ËÑ|n7njéfØM�&äÜÄ?áuö¾o £¿âµJZ:,¤gI¤ü§_¡lŸp†ˆ�ÏøÓ×xóÛß£ö–0.éî,·AHùÇß¡V:ã*’\ñ�•³€ìZý=|ìêRÛwîãºÝ$Êài3–r½,Auu5’ü8E{pßþ£ü\ÿø©"ýe?XØ'l]XíUžÈCì=‹Wcþâå(.ýÄ¿Ý£†Õk6cÂ¤Ù6cbçxû"òÔy›{,Ìr/oÓÓÉŽm€z¯GÒÞ`çXýÇºõ;4Ï±ó¼ì{UAÁZú³œ!;“térFûOÇŽ]ûí®“X®dê´ùüoöý±î½<QZª®©°õ½öî?(‘INÏ~–I`ÄŸÖmÅ›?}…
+‘çëbïãÝ?ÿééˆ1žÞHþáû?|‰�¤[¥îLrÄ6±hI0†úà~üS~,!:(ºŠÙöÝzº“ý~qw ·ó ²]®Ë÷««jxÝ“sïÓ3y�Ôÿiêi’ÝýùäÇ=zšÞå‰4Ñb9¯EKWaþÂå0Ðú(ß€å—ýˆO33? T%?Ù÷%Ø9ž�»#ð‘ö{}ƒRûqÃ}' 3#‡ï9µÈôûÞÄ‘cgà9h$2³€ÉÿÙsléâÔ9ž:ÜŸ×Nsém“ÿ¬]ê›tþ]VÁt–ö|ÑÝû
+þ7„Zm>r³EÔŠþ®½‹\¿TÇ	5e‡O å~ƒ,g4¿t^Õ�Q¨¼,ÕJJV…:ªðfAáGŒŸ8î|ynªÔ Øÿ¬¾gÍºí¼6ØÝË�?¬ÑÔ¶±ó‚É9x8’ÿ˜0£ÆMÖÌó&í�a#Æó3_7ï’sëŒþëÈ^`¶“!GÅóÊ¬ß´ÝHw²Ü;s$ó9ùŒãºÜÅm0ŸË÷˜Þïîä‰!>c¹,×ØÿÄÿÃÈ6ÌËË#;Öaì[<âýç�Xî_‚Æ¦&º¶œì�õä•p;päØ©ªïÙ6Go?>'ßå¼§zM¬aßþÃ2Mxô×,Åè„ïA	9…w[ˆ‡jï=„ÙH¼JXFsMùù/‘ÝÍ
+Æœ\¡Q³QÖ)â¿ò;­ýf¶?ïÞ‹çgä”½*ôgl5ãÞ½Ç¼.¨Éêl³ØÙë·ï…˜ÔËçÉ¸Çõ¸òî*’±Ô†ÕnXT5~fòÿ“RÒpõz®’ŸÁjÏÕqzö-’ËWoâÊ•š¸{.ööCîã³:N¦;$`>þeòïY>òqÂÕ7ÔÀùý6�ÃØjÄ³Ä$<}ú\>ëÉ|öÝÃ—É¯åw5ýcoÞÅû÷Â7¶òòòGÏ3_Å!XÀ¿a}ãnÅ= ¹×Ê×Û‚7|ý”3Ÿf™6’®�¶ªÉ*2/ü2‘ì¬<~Å![Ñœ‘©º/ò¹Å"ÿm5�Ã³;6qç8¸'½ÅúªM¿mNÜÞ½öÕCþTøü+-vþ¶wíoéÇÜÞÇÿ&°K‡ÿÀþtø?trÿÿ
+Š¾”å¦Y­?tø¿~¦£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£Ž:ê¨£ŽÿáÿìpŒ” `$kmkBTúÎÊþœ€0xœí|÷SUY³èû;î«Wu«îß�™oÇ,*‚ 9‹’£FÄ˜1'Ì9�:*ˆ 
+1 s&È"Iäœ~Ýkç}èW÷—[««Z<;¬Ð½:®^Áh4‚š_ÚûÍ5á¯Q÷œòÛhPÞ¥ÛF£A¾¯ïÇ\Ÿú±™Žµ`ý=ƒê9é¯A|G¯úº¥öú{M{O¡ŸêŽØ�B+…Âx
+†ïVæ£aêa³2j¨o‰Çæ×†–÷C/(têµH#�ÿFíêŸ7Š<ø–ÿØ:‘(¡ô)ÑMÝ–¥qkï5×ôïééL´ÓÊ^5H¿�&s~›[3¦ãžé57û¿xÛúœ}ucµ=M´ôù¯�céé9A†ú~G«´ŽUý¨åÆÌzÐþÕ½`a¼2]4m«yAcþ.ŽG;Ni¬}ƒ¢CLx¯thÂÿ^ƒò>£…(´&{
+=ÂU=×=ß»¡³«º»¿#öÀ÷Þ^íUÍhæn�ÛîÅç{Q�±¿ˆô~w÷7èèè„öŽ.Öæ·oÝÐMˆ×-6jB#}Ÿý£—}´eY®¥ûz¾þ˜¼×·.î›Úpí:5…{Åe�²4
+vï;�MÍìZKK+¬[¿
+fÌZó-‡ä¥k`qò*X™¶	Ö¬Û
+ËV¬‡Ä¤T˜;/.^³æ,†ÓgÎiÆZö Öâ³oßUkúËÊÊ…øü|o¶=a*,NYK—¯ƒÔåk!	Ïš»f'¦BÌÔÙ°~Ã6øúµÝ*¹¸F?~ÊæRQYm_;¬>/�“hòøÙ(º[Œkî›<úööv(¼yÞ¿¯5¡§=zY9— ¤ì®kK¶]¢ë•ë…pùÚM(¸|²/\‚ó9ùpþBœ:�	'N�…gO_È¯—””ÃÕk…ÐÓÓ£êß²ÿD/–—WBá­»ÐÑÙ¥³ù÷Nþ�ÿøm(¸{Â›wuìZCC#ò~xxCpÈ4ˆŒŽ…àðiàà2lÇy�ƒ“‡N…�°©„÷=½CàÀ�ãšv·nß¿ü6Žÿõ·<6‚#‡O€·O¶™Ñq®î“X»vŽ^à3!"'ÇChxøø…³õõåËW+sÚ>zôŒwò÷	H³›š>-A×·˜1{!L‹›Íx.ÁÕk·`ÐP;ØwàXý®ñMðÛ609&ÞW×‰W{u²(ŒãAÅ#pC:;¸øÃÿŒ†IÁ101(<}CÀ~¼'üu*C[7$ÎO…Q¶ÎPùè‰Ò’ù7àú›??ü" îÃgñ¢QôúÌ/?}ö¼æ�3™90x¸#L
+šïÞ×‰íôàZýõ
+Íl-´}mƒšÚ�›�#m]!×ÆçúFöLSS44¶ þî5½§¤Á�Ž°aóv
+ŒÐÑÞ
+��ÍÈÓ6hýòZÛÚaó¶Ý0ÚÎ
+\=àæ­{¨û±ÿÖVhhÆv»ºúäAåÃ§¸^Cà·�£P—»´&+€º©œýP§¥k®oÝ¾þý?þ€ÕkÓÑF©ã•ÿ�>üõ�Q<ž=%^×úv—–Ã˜qî0Îudd]„ÚÚ:xõú5¼zõ^¾zOPö‰¦í�í°$u
+üŸÿÉ©«¡³³³OÐXç$&ƒßÄ¨­ù¯òO2³. œyhÞÉÈÌ…¡#œ`b`$¼Óéj5ô O,ZCmœaÎ¼dO	ýÐÚˆŠI€1ö?s|mï0K	9#Ç¸€÷„0xþâ¥i«ý°£Ÿ>}‚ÉSgÁ€ÁöH·U²Î4×–ÔÞÙ¬f32³/Ê÷¿ÿ‹RV²u4ez"|úÜ ™›ÊšX¿a;ü1È"cfÀë7ï,öIðm“�³8£¨xøØê|ºº; -m#AÙëà×nÜ6iOÿ·÷{Ì[°y
+uuÅ{½lìµu`Â¤øcˆ�¦Ÿ3gs°�ñ(ÿQ(ÿ5fF"Ìµ»»}�0l”3Úæ%&cQÃÍ›Eà„:ÎÁÙe:nÞ.¶:×½ŽÂpl×ÇýüÅk«ÏZ‚N”ò)†Œ ¹DCuM�ÉøôcMY–†òàÉäN‚††&�Œ›±îàäæyù×MÞWÇº$ÿÿ_½~kuŒ•ÈsGwpñdþ‚ÕùttÀòë`Œ�ŽÅý¢¥Ð‚:Ót,Ú’øï…ºåƒt•ý»jÍ&2Òe,\Ó�Ìÿàhôw,ó¿õ°ÄËò/ÀÆM;qÜnàáŠk×ÖoÜnVü¥±ï;xŒñßoR¤¬CNžÎ`~„�­ä\µúlÒrò”Y?¾÷(1×õë7aã}Œuô†­é{t1=ýO‘âÿïm!jÊL_WåhÿI÷;yN‚ÒûVŸ¥x(eÙZÔ¡žàâˆcr…¬ìKò}s±€c©ÄùKÁõuµâ»Ö£
+Ÿ0)
+†�v†•«7iÞ9“‘#è”küïD2iáò>åŸž‹š<-Yk0†fãScç2?Â8üŒíÂøÿâå«t1Â=ªb:dÐ°q«l°úÆ+ìÇÃ'ví9¬¹¾ã
+'÷‰Ìn�¶sgòd¨õ:ãÿ”ésQÇ~4?:‘F$ÿ¨SœÐÏ).µ.ÿäO-Å8‹Ö¢§o(®iWŒ³"/›4íª×ñòßÝ'Þ¾}/?—‡²@rh?ÞÎ¢¿§†³Pg:	ò_­�wÔs•ù�üœ9g‘jì_ù7é]gœãu´W—ò¯"/ìÁ?}#+z�ôÿ°QN0! šùA?
+ÒüÛ;Ú1ž\†¾»£fŒæžÍ<wõª\Ì»"ßklh�I!Ñ°~S:äáõa6Ž(K¨“ž½Ôµ!ñßik¶À€?ÇÂÔ¸D‹ü— eÞÞÅ—ÙÿÒ2ëòOþÞbôûh�ÎAys÷‚£ÆÃÉS™šy¨�ñÁ2ö¬Ú—#Ý?rŒ+ÆFÑ�¸¥yç‡ù¯“…Âx._¹Ê|9²©¯_Wãºó;\{—TtÖÃžýG˜þŸ¤µÿÖò,z�žÙ¾s?ÃþÐÿðá“ÙgÉÇ[Œ>ÞXäÅÿ<ªzÆìóå«7 ú}58ºøÁ`\ïgNgš™¯Ð'ñÿwä?Ùÿ7¢ÌYoYyê?&ÿw‹ï[�ñnR
+„„OÇ¸±
+ãÔEè»Ù£nM€¯m_´ó»#ûŸ„úŠôh­èÿP<1yêLÔ#Ì/Ò¯eòÿ™ÏÔûŸ´`9ãÓìÄÅÚþÅgÈŽ’F¹„úú
+=aÆ¬…Œ>©+Ö²5dö86£]Ùº­|X¥¹÷£y¼3™Ù0ÎyÎ×
+ró.ëÚÆÙÜÜ�aS íÔ—6%·�ù¾ë<dk„r¿
+
+K’W¢?¦Ž¿”þÖŠþ_Pèô]ÚšÛ+#™§
+Ùóâóü7Š{*dÿÉÏ¢|HÏwdcŒB±Éß‘£§4ïH9Ë^¦ÿ—¡­�”ýßG�Ÿ€�8Ê Ú´$ô{´¹”þò_ëÿ/Ö<!Ñµ¡±\<&Aê²5òüãXÿ9høbìQW÷ÌÁþÇÀõ�SMC‰~ýÉåKp¿¼üü#aèÈñh?×êüaœ¯_¿c>øöôý ì‡××oÚžx½A´±4®?‡ÚCxt<4Ô›÷_Èþ“þ‰˜Ž¾‹©�Só¿×öxôÿÜ¼‚Ð¬´:#ÊG‘üS^èÊR;Æ±	ó`ÆƒdO?~ªWè#¾CùÇ$ä¿êIÝ.*Æ>ýÁuð’Ô•&nø¿Æ#¨ó\/_¿ÁuæçT~*åÒ†bŒ=ãÁ»÷ÊÌÎõ€Èò[Fÿ+46°\ÃÜy©h»�!fÚ,hmý¢~’ýK~	ùB×®+1u+Æ¤&¯�¯åÜ`±—“ÛD¨¨Ðê%©½µèã@ù'=ýü…õØ¥¬¬é€òï×
+ï0¿òK[ÓAÔÛ×¯L†ùogòOü¯®dùÔé,°ïÃF;ÁŽ�LÚ'þ“ü{û…Ê±<åBÇ9ù¡öBßv‹É;ý×ÿÈÿ…zþ@íg�¿Èr¸÷ËÊ×^¢ŸíŒ~õqü¯³féBr6Úý\÷ã'Ï¬ÒÐë°Wlï8úJ.àë55ZŸ†r¤É©ià€zþÉãçòõâ’2‹±Ö¹óJ.ˆ|VŸ	aLìÃ6M×£È”ÿÐÈX³ò¯†*P6ƒp
+BÊpXÄ4�Š¶c*xù£�ž?
+rÝÙÙÁò¿d%]ÞØØq3æ2ÿÆuHuµ”ãx@ù¿Ä$!ÿS#Æÿ—¯ãZ÷eüß½ï�É˜úËæÿ‘ýÇ8�ög„Ù+4' xÅÝ7ê>(~0ù
+.…_·�¹óSØˆ`ü?‚âÿ€(™†?êûUz<÷âe\ó¾Ì¿/¼Y¤i§±±	¼P¦Â"§ktåF�QÎ)',A'®yÚû€ö+næ|“}ê�ø/Åÿ}ù1>õð	F¿r"Ë;,Ãø~qr,IIC�•Œ1ë:hjnaÏv ÿ'ñ_í—_È-`yÕÑˆÛ¶ï£J£ÓÚ&þSþWz'ùï€þ�½£ÆÙÚ=‚â¿èÿÏš»X"U3°ÿ’Í¤Ø›ô§~öÙ9yÚ±½ÚÓÒÃ~Êÿ�tb>Â3•ýÙýSŠ³Hž†b›ë7îuªÏŸ¿‚QKoÞºSóÎŠU!"&:º$?Oè›üIÚÇ =PSýA7.”ÿuÿC#b5ù?K{…”StF©X¤ùìô(Én¯A§äÿëùßŠ¶bjìƒ¾à8g?ô#»Dm�ý÷E?JÒÿW0–qÀ8†b°�šŒégø?gžÄÚ^æYRzŸÙµì‹ù&-�¿å�º}8Ú­œì<™>�ˆÿ£lÝX¬ûð‘6/Þß5 n�ìi<ÊëôiŸ±Y”)‚¹ù0z¬;\½®ÄÁ�è·úL‡èçdmÝC?�ì?Ù†[7ïšô»n}:‹o¢bfjòçæô×CÊÿŠö¿¢ò‘ÕùHü'™y§‹Ëo• ~ó´™+VoRé”ô}XþWÌE\½vƒíqÙ�ó‚ƒ‡L÷3(þ“ã•ÿ/NïtFÒ0yýV}™A3êÙ˜é³á�Á¶°%}¯¸æµü§ü„»7í‹˜Ò¥?þŸÁ¨Õƒ{öÁ6�Áõ­Z~(§êˆ¶�|U	ŠîÞ‡6.¨§$¿Ui‹ötÂ£â`à ±°aó.]¾ãÿµäÿ	üWçÍÅ-åÁQôÿKËûÊÿt!ÿQÿãø«kµqÅ†‰IÉ0×±«W0\/lœ�ì?òŸìm�ðNaámsØ¢ýßÐ
+ÿûÈÿJüŽ~•žÿÄOŠù"£ä:
+=lÚ²ihÁaÓàÍkí>ñßåŸüÿ§Ï•|Ì�è£d	Åwˆ&äPÞ£àr!»ö¹þ3¸¸O‚C»j_ùà‘ã¬v ®VŸÙ|HÆ¢ƒq`ƒ|·÷{/¬JÛ�…è)³,ìŸ)ó¸�1åH§—–÷•ÿí`ü'¡Æd\Â^â8ôë(®›¿hÛï4 üÏMø/å¾ŠŠî±|,í#ìÜsÐ¤ÊÿIùsû¿’n¡õ¨�ÿ¤y}üô™íO‹K‚÷¸îš¡îã'6†uŸ ¡©	=…1žŒÅø%OÜ›‘Þß½÷Ë+„L�×oß©ú¶\7j:N£Ì{Ê#¸{ pg>Á5Œ…üiËö£¤œ	é�‹—A\|’Å¶ïÜ)AÿÉ›Å6Uºød
+ÙÿA¶LGôµÿW†þÿ8'VçP\fê©�ø?g^
+ã¿^þÙ¸
+$ë)lÿšÖ4ùyÄÿI[|ø(ðÿ	Ž—ü�Ñv�¶n«I;ÒþÏ�èÉÿ—ôdIÉ¶ÏK15­ƒà°é,®¡‡ôJÊ�—o0>£Ñ¿Õ°›å]ÿßˆ{èÖömûdÓ£c˜üSž¯¹¥:QVKï+²×ØÔÂú
+�†zà$:|ýä°}%ú{ôøYF7;íQå\PrŠTOÃøÿçÿ½|e~ïJ¿Ä—~ð_°ÿæå_òùV>o¤+åd)~ zIŠÁÔû¿mmí0c
+²¯sæ-ÑÕTöÍIþÍê‘-™g³ÁíÐ¶ûáÌÙópòtœøûœ8™Éö+Nœ<ãï©Óç°¼LÒÂer}Á®=‡Øø&FÁË—?¿ÿK ÔQ4ß¶}Û‹ ú4Ê=­B_‰rcõ�ÊZÑÝrÔ£~¸^§°<yxT,„GO‡°Éq1y&Ä ^Ÿ›“§°µ¿hñJ¤…@C²·T9p¨Ëÿõ•ÿ©Àø�|qZKÅeÖóÿÖô¿Z'nßy€íwR­Þ¹ó—`9Î1×³:×º~c:[»$—¯u¶·¿ò¯ÝÿQç�°jÕˆFÚµôQ§¹s×VÂöùUû.$ÿ”Óðˆ”ùÏ|ºŸ-DÇ|÷^)ÓÙNn“X="ù´O×ÙÝ-�};®YŠ=ŠKË0ÞïÁX¡�ÅÍ­­ÐÔÔÊä‡öb·¥ïf9eOôÝÞ¼y/½k7lGû/äÿ^¾4Í]ªÿÿ°ê	óÅ(G^r¿oýoÉÿSéòqí�ü õÝDÔ¹1ÓæÂÇ�ÊÞW~þVáì:nÝ*Ò¼6#†�ü¿j³üÆÎê?Ìð¿©©™ùIèP=¥ú=û
+oßEÿÇ‡Õgü}&C¾ž¾sŒ þcüÿBUÿÕ_þ›Ög‹y~´%×Qþƒr>cì<a3ÅâóT{N~tô”™ÐmÁo• ì~%8!ý†£½½v]¨/5¢®¡½UòÿÂ£âMì¿œ%�öÿ1¶ï6œÜýûQÿCú)‹‰¤ü¯Ôª2]až»v„a(ß¾¡8GwÔ÷I¢ÿ'<X[W‡óey£'34ôÊÈDÿÏÆ‰Õ¡š—q<h�æ/XÆòjþßFßh$Ú„Ãh;•¹„â¤þ>}n„¸„yðÏ?G³Úi[Ò÷ ~r†@\»¯Þ¼ÑOiÅ*½ÌAKkD _ÆÚ{ƒƒ“?òÏã‚›òýú–V˜‰±É¥']�µt£¾¡ÛŠÅ±ÛÂ>)�Fõ_k73Ÿ2ŒñÿH{"Õ¾Œô¿ÊÊ'à„ñ¿³ÇDõÊ^nG‡`ÿ=Ñ¾×|PÇÿê3JÂØ¨ÖÇÛ?ŒéŠ	b¦ÏBùÿ¬é{Á¢•ð'Ú©„Ù‹5´¤:ˆÁ#™ÞPÇÉúüñŸÙä?ùlÞº°Ï‡úesõ	è/Q­ïïƒÆ@lÂhmò©{Åø"å_+úÿGrÀæ€^K[»•Ù>Ú›Œr^§ª	¸q»u‘\¸X ëGéW¢1í+-IY�¶~LO˜#Spã¦]Ìÿ�˜œ€ñ­æ}eÂzª¨ ü�?¸z0{#ß7Ty'¨þ7q~
+Ë¼¯Q·kzÆŠàø‰3,¾"?ZÜ\Uíƒh{=Cða9±Þ^å!ùk‡ŒeòÿÎìy‰ÿ],=xÄx˜9{!»ÖÓó�ñ1ç®œ7ÐžTj¦Ð9‡!#0žò•k`ˆÿÄ#òÿ^›æÿú
+ùo;ŠÝp�®]¿UÓÖæ­{X�ÇKYo›ÚlõùÊŸŒ±'Âªë}ušXÿ�ñ_m­ùz	ÊPç“ý'ÿ¯²ÒzýogWÚÔeÂ>Ïû¾kYIÞƒB&£~BÙš‘$¯sõs”g8Är/)1Ì±¿ÎÂÿü÷ßÙÚ�ö/Z[ÃÞ‰>Pl|"üïÂ¸*ž]£}ž1cÝ`^RŠ&oj^n•<1ùdÿö¿~…
+„³;v€ü6�½áÉÓ§â»ÿ:ï	Þ¢M£x‹üÎc�Û6°|ITt<ÎeË›Z9~+¯gŒµ0
+¶¦ïb×R—®�ÿûËp¶w´qË.¶˜�“Ù
+Ð·Ê�cÇOCá
+Áç¢œÕqG]·zÍV8}6ã£8Åb¥8rìÜCŸ•hÕõ­‹ÕŸØ;xÁ;3zÅ]2Ñ–ÿ¿_‡£EÈù_õþ<í¤£^Zz_nîQÕSôm÷bÜ{šÙù/5ï”>¾£¬_Ê»Š¶z7ÆÀBžôÓ§Ï°
+õyQQ)heÞ”v´µµAæù\X·q'Û›¤÷îW<„�{ NACCƒÉ»ÿÊè@=:=v6ØÚ»Ã•k…òuò�#"§êrb–Ïy´´~�™èûŒãÄÎlÚºƒñÔË7ŒÉ5ÙvÊïÐšsõ
+`çZââç°g«ž<Çx.œèDÊËÑÞ‚+Ê8½;l¤#Ú+¡>·epéò4�¬â¥Þ®héÓÒÒS¦ÎB6yS/=%ÌK|µ×`P7 ›¡ð¬d¾%4wŽFNU(k§_ü3sOÙÏ•Ú±üz€òºtÆ¦‹íí	ûÖý�ùšm_[å1(çÀÍ�™|©¨óž¿z-Ôà3ŸêáÆ,¯ß¼eþ?í+Ð_†xí>û–ùÕFèîúÆl
+{ÇCñ	!í¼y÷žå,?××‹ã1²Z_Úû§Z4Kþ¯~œ”÷¢õ"}+@>¬÷Idý®×Ñ¦¾¶Q\?ê¸Ã¨ZSò«f¨ù×FjíŽð®Ö'Ö³Ñjs–Î`iç!=«÷ù-û¦}ô~t›“Mëú_K#Uôa”ÎêZû!ý*êõÙr�}VÖ™†ûš¶ÍÑKzO^öš>¥^MÉ'ßû1Ïo“ÕmnI˜\”bW£y:±®Mig‰žFqÑA­3Í�× =
+z[Ä¾±F
+ý-ñM¿ž…kfÕŒRû¼ÁÒ-¥5[ŒÂ˜Í�IÏX�¬­ÐN’sµ<1·^÷¨¿ã¢Z«fô¼¹ú.eÄz;dÉ75ÓžæŽQ×¾%™îÃYa¨¥qé}ºm×´==ý•v,ëFYÌªgqŒf›5ü Î5m]5@óO˜UºwMn[‘ƒåùHç²-ƒé7C¬A×Dþåkšo
+�qëÖ](ºWÂ®=ªz…7o«ÎÐ¡¦¶2³rà"ÆW®ÝiíÒû%¥ep>;.\È‡�ŸëAtÖ.ûTj{”µøäÙ3¸�WY91.y¨™kÝ§�¯`lrô¤X§/¼SõøœË¹ó ¿àºxÖU¸WSSÃê{ÏŸ¿•Oäþ¾õ|ƒ›…w ªJØÃ}úìÞº£û¾‚B£
+›¶Ãí»Å²Ü~þÔÀb ‹?gã\ïSW|…}Ûáj!‹‰îcŒ_%²WÐëôû\ÖEÈÍÍ‡÷5Ú\k7Æ{7nAN^>ääàœ>ƒš•�ŸÀ¶{Y�¢Á`ê«¨ÿÒ™üËW®«Î.ƒÊŸ¶ÿ >÷ÐÑÞ	‘‘ñàéÄòü7¦cÜ1MóÑô?ÿ9‚åÿhM
+ôýª©òÀ8&(l<×íáÝ-.c9Ÿ9s“•ýGq,Ûvî‡QvîðËï#aöìdyŒToœ¸`)îÀ¾Oðø±²ïNûY¿°aç!lí<!/ÿš|/÷RËÓûú…Ã8G_kJ@õ›!¡SÙ™m‚»÷Chä4hW�í ZAúîÃpŒÅFâ\Ówî•c¦›…ÅxÍ��
+¦œÿœ¹å÷(Žöò
+†;·ï±ßT{¾rõÍšZ¾b=¶ëÌè<)0T(uÒM-->�ÕÈý1h,\º¨œ_ý€k*|rË=ûDÃçÏÖóLåå�ÀÃ;nÝQŸ»Vü	g� ä­RûÚÑÞQ3`„­+ÜÆñ§oßÏø¨~&;;†ÇÎW4°ýÓ^yy&Ì\Àââ§/^Á¯F›|câÈ±“ì³Ÿ457Éã Ø¼mxú1¹iAHº”Î‹RÇŽŸauºò÷ð6ý¦3Ã´o÷øÉáž¨s©†kÂÄH¨zúæÍO…è˜ò»tö…¾[²nƒð½‡í»BHx,´µ+{ÑtnmÐH–'¡³SlmzšÖ$ÅðT_»uûhlj’iðåÓÃ+D¦ùäi³aÅê�þ§.MÎ	¼zÃm\`çn¥†ŸöibãæP_ß(ž•ætãÆm2ÌîÜ-�6”Ié[%–ô=ñßÝ3n™?wOù†/ª³ä´×=uË‘/\²öì?*ÔG·)Ïäæ^†Á8¢{Iy%¨ý’ú¦ÕUP­|Î…<ù½o=Ý°`ñJˆŒŠgû„Òù.ñ]ªpõœ§NŸÓÔD�Ç9zÃ¬ÄdvöEýÁùœ<°µ÷ÔÌƒ uëÄ€ÉP†c‰›½âfÌ‡.‘ÿtÖ‚öé×oj)÷CûCííÊ÷‚Žÿüè¬ÒGýYN�´§Dõú�<£Ù$:¿@ö‚`ZÜ<Xµf‹ø-Dá¡¥+×A0ê›HªÝ<|ä„Üzss+;›O5?/]Õè^:7L{w´6ôõæ€Îzy‡BQQ	˜ÁÍ;˜ÑBšÊÉâ”Õ0×-í;Åà_5ÿIÿÿöçX\W¬VZ
+s‘G#F:Á¸ñ>�œºJSoKkÙåžjAfÏK†£Ç¤³k=w Ú9úàüÜ‘‡åÑÒÚ&bàŸöÈÏhV§ ¬ùÌ¬\VÓÖÔ¤Ôr\Ì»Ìr±vh¼üBP^ŸÊ÷(÷‹v]�ÿÝ{‰üWê6mÙÉtF÷7åû!j¿™l+Õ6=þ·†´dŸ¼ÑæP½ãÿÚM_pUÚ<Äœ|‘Ï©èO|–ïQ}R0Ž�ö#\ÜüM¾=•ŽròËo6°(%�}MM=P�©'ÎýŽ8=ÿÝ½C4º½íDôØ¶}/«‡ ïQýt›Zÿç^dç¸î•”2¨}â¿«G áçr4c#»H5C§NŸg4Y´d¥æ>õé�c¥ý
+é|…:Wqíú-V/@ºÒ¨ò{2Ïå²ow4êùŸý“I¬¦‡ÎÂ«¡e7õ=}ß‡`ÿÁ¿ <2¾¶+öÿúš$;úšk	èÛEŒÿÇ$þKóDþOˆDV¨ëˆM˜�ö£˜&žY¾jŒw™È|ˆ½ºïe5573=¸×í5«Ï,Hp&#}%7³uÊêµPþà!®ýPy-êÁÕS+ÿdÿÃ"ã`ßþÃlíÐy6:·ûå‹ÂÿóØ'Õn)>¥Â‹Ys–°=§YsÁ´øyì;~�?Fµ³tƒÕ¢nVç3iïßÛ7}šhin–çE~(}/‹ò©~‘°u§úû§$ÿôm„&ñ›uÒüIÿö<Ž6Ö	ù¡ì³“ž£³Sâ’Øw&ÈnEâºÿ¦úVPuu
+ÛC]˜¼^¾zÇòèj»ûžÂöjÔý¾Âq:¹N€}‡ŽAÆÞþá&gLR–¯ƒpì�¾iFõÒ·žš1~ :ÎM[v1´½S±It–úéÓçì,Â8Ô•‡KvC/ÿÂoÒÿžè‹Jú_Ÿ£ZL=ÿi÷ÒŒÎ—�}‹�KÔ<C1	Õh+5ÎJî�lÖüE©pûÎ]vFýF¡pN‚Öð²k`:ÊÕ£:ryÊh%ÁÎÝÙùG_”�µ(/­i¿}&ò‡üª[º_®=@q�½£§ŠÿÂuŠ­Â0–¡zò7–¯Ø€ëM‰ï2²²Qo¸³ºIjwŸ\¯ð˜bKGªÓÅ8iï¾#Ù¢üzHøTù»v’¿J{kô�D7�‰L÷º >¬ªz!÷K@òO5†¥eå¬æF}Ö�ôXT®¡IlÏ—Î‡J@5ÑäŸQ}3¯¦FªÓÇ~‘ÿÙ¹ñ»wKMæFP€±aO·²æ‰>?}*ÄmTÂMŒE{z_ã=ÊENî%ø*®	µ]»W|çô}“.¸�{EþÆÕÇ_¹v�}÷†€ö¨0®V›æ	úÓ¹èïd <ß+)WåÌ,7@ß+©®V×¥÷iO%'¯º»ºA
+4Î«7î°š=²ÉÓ¸ÔPõø9;«JzRnÕ¨Í\×Ô~bçÖž?WŸé4²¶n`ûB�¢‘éwiyô ^£ïždaÌ)MnÕÈôÑµ}¸¼‚, õHõg7nÝfôËÂX«ºV¡Ñ÷ÞV/˜s±€­“¾ c¬‚«7P§šæbÔÐWþÒÜOÓ{ýNNé^µôž¥|—QÕŸ…wûŠywIéÏ(eüÍåêL7'@Í[³ãRç-åûK?ý˜ÿKžåÀ�ÿ�ápäÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räÈ‘#GŽ9räøßÿ?/¦ÂÒB ÀmkBTúÎÊþœøxœí\‡WÙžÞ¿dÏÙ³ûöíž�7Ï0FÉ9ƒ ˆ"(*¨ˆbsÃèŒ3&@³(æ1‹q	bDDF‰Ýßþî­®êªîjÄÝÓöîóþÎùèîª[·ŠûÝ_º¡`„–b4Ú>¦sª›ë�&ôì½ûZ××ezƒé8û4ôø™¤û°kºzô\$ÿô‹¶í™¨Ûò%­ê•.1êr¦®Oÿæë´ç»Ëº¤:l÷7q4Göåß`»
+4:ówƒ¡Ë¦�°æÅ¨{Üÿ–ÐžƒéZó§A±=é=æ\-ŽæÈ®ü3ioï@ÍË:<{öÏ_Ô¢±é�¶ÝŒ¶í¾žÎZ~×3~’½>`Ý×tçzþŒ:âhŽìÊÿõ·1wÞ„G% $b$ÂÂG!!ivíÚƒºW
+æö3µoåƒ*äç ää¼ÿðÁº¥ÕíK¶¥”ê¿vý&:»lÛ&¬®ÃGŽáÞ6ëÓþ6âmó[üºÿ®]+µªW-Ì^�=w‘žåŽr­ô@Í‘]ù÷ðEï~n
+�EÊ¤ˆ‹WÏ ì‰	)éxüä¹©É¤¶Úž»ßöqBäðÑ¨®©é¶áê^ÕcØðDªw*·1–¢æö•õŒÀ˜qSÐÒòQSFÏ0¹_^‰!C}‘5i·ÏÁê—„Äq“ÑÚÑauïOˆ£9²+ÿ}¸cÅêMxVý­­mxÓØ„ò�‘‘µ”xvFêÔ9èì4ÇÊ»ò
+Ñ‹ú³O«ŸkÊ²M/]¾†~½©oÅ¿¯MG
+–ms]}FŒ�oz;ãÈ±ãªó¶¹ª¨|wÏ0|?¹îyYîýQŸ€(vñ¥>SÑmYq4GvånÖb�¾ÉRÿú5×—~ƒ¼°iËvtuI} 7¿�úŒé"õ™Jym~(ÙŠ¼ü"röƒÓPâô¤¦¬¥^¿¢û�MžŠ^ß¹ò>Ç}‹Q
+<ö�Ú{UVVÁÝ;ó®Ô<»eÝ…Eáê‚þƒ½°ïÀ!«ÿõâhŽìÊÿ�»÷-þ]Æ�Ä5ãìÛÞC0Ÿô«£ÃÌŸþî“ˆêç5šö–¿ËD­^».¬Ý½±`áròÃÖú¬ð_ÿ	dûÝ¼Âàâˆ=Te´ùšüYQñž>áT÷*+Òä2­­­<¾quÆ z¦>7p4Gvåß`ÐæÓja¹À©ÓçñîÝ{å˜™ÿ1¨~¡å_]Gýë7OúìêÊ‘8.õõ
+:÷2Ùòÿñc&SÙ0¸RˆOœˆ¦ÆfSËXß¬ÿLÿ³µú¯.SWW�qÉÓÈO„ÂÅ-#RðæM£UùnÄÑÙ•©­Ì}Àdruúƒô[�Yä¾Ää·Wà…Ä¤T„ÄÂ/0J‰íÕu³Øœ	ÓÿDÒÿ!®ð	Œæ¾zó�ÛÍw×±œÒÿùú¯.Ë|ÌÈ	H¦Ø6,r$ñÃ¹ó—ðâhŽìÎ¿vL¥ûœHöÿjûÏ¯´àgùªÄÄ&¡äÔ9ŒJLÁßûÅ®ÜÕ˜­\VºßËÚ:Œ9©é?i:õƒ@ŠÙ†áÉSmŒ©¾WYY×ÿ‹VY�“eå±¡‘£põÚMÌœ=ÿñ7'ä¬ß"Æ-ø—þvBîÖ>]’ÜÝ…øn §.ÿr¹¶¶v¤¦ÍBæ¼ehkoG&Å˜ŒÿdÊ'?¼gcê>&}¯}Y‡à�hªÿW/9o¿(tòÁúM[mŽ0þ™ÿÏ^¼ÆŠ4þ”sNL�‰ÑcSé™Z±‘êúÏ^.˜>ë{tuZç£6ÄÑ}þeùôxHçßƒçõÏŸëçÿu¯ëCùöÖŸóøï¢¢Ü®†ÆâÅz÷|ù²–û‹Ÿ~Îåý'eò8SÌæîB1êš+äîÀâ?¦ÿó³W¨Î™ûáƒ�àåNùË6þ{ÏžBêS¾§ç þ¦­ÓfLèhŽìÎÿçÌíå›ô?Šüÿÿ/×sþâ%ŠãCP\|Šÿ¾uë6Cb(®ÂÅK×4eý¯{… °8¬Y·™ÿ>sî<·ÿûR|·��¦›˜ôáÃÇðò‹ óæü_ÍãÑ#%tÏ`\¸(Ýóúõ›¡{ô¥<pwÁ~ÝÿO§8š#ûò¯»w'fþµú¯¾~ùÊÇàÑã'ü7›Wˆ‹O¦¸Ñ
+9~Rb
+IÌþŸñ¿6gÿý±å#¦¦gÂih ü‡ó±$È—™.­ªzoßaÈÊÖÿÙøÃ6Þ?Ê)NdÒÔÔŒ´ô¹è;Ð³3³5emù»nÚîšÿ¿'’o²ÿ‘ÃÈÿ¿Pµ�t¾±±	Ñdfe,„ÁÛ±ñÃÅËÖRìíƒØQã(ÖoPÕ(•©!û£ðÏäÆÍ;ðŽ!nAÈ˜»��A©Ÿ³¼¼’üƒ~þ×E÷Nž41#Æ¢©ù­r|ËÖäü‘@1AKëGÕóëÏ;þÛõÿ>{>T�Æ¡<�\Aºæå‰�ùE¦¶•Ž=v’ë¢‡_nÜ¾«ªQÖÿZÒÿX·þGåLWW'æ�žöàÉç'Îž¿¨©“ÅŒÿùªñ?ùÿ)ðnž!X¹j=™iüˆÉ‘âêJ9éü~¿Üê:àhŽì®ÿŸÓdûÏâ¿êjYÿ
+Š5¿@þ�ùÜó”ÿ«¥¼¬Ñ	0Ô‡Ž+ÇÕù_`èÅÿËr‹úJ@ÈpröÇÔéß£åc«r®ì~%Å,ÿ_K)úõ0¹ø�ï¿¬9~ï~"†�¡s~Ø¶s�æœ�vp4GvçÿsDæ?’¸d~]sÞ°zÝ&xùÃóš—Ò£·5¼nÀø”ièC×²9ó ¾™6NÄÆgÍ"�[“³ýùP½‘8tø¨r¶¼¬ŠôŸò¿…ÖöåšM��×
+¦y'žïÑN¾ˆù¦�Î~˜2-­µ>@GÍ‘}ù7ªWG@iu›MmÇ„åÿýióy†¦ñí[„G'"--ò<+ãÐtƒå+×ÁÉ%aÃQõè©æž,þgëV¯ÝË'bk‚Ãby,˜BùüŸc0¹Ïì¿w„•þ$1!yÒgg¡Ë ç‘ê-(ü®¡ˆŠ«Ä¨Úÿ[³¦ÐÑÙ•ë5V‹ßZ¨7þ#óÏæ’˜^íÓŸcc1¼?Åsƒ]üQ´ÿˆ†¶þ(€rDÉþ[�õþôK.ïwl¼·°HªÿÅl¾({±vü·¢âÜÈÇ³±­Hu]¼t~”SxøF äÔÍ}¤ïš‹Í‘}õßjŽÝöz&»ò$ûOñŸzþ—IÑ¯GàÅc9=imëàqw'_¬XµA£æ/k_ñø�å‡ÚûJý‘Íõ‡GÆñõ£ÇLBÙæÜ,â?&{÷@ß~n¸yç.ô¤þu#†�H"{â‡e+rº�ƒã9²3ÿ¶E¯ìÌÛ+�ÿóø_�ÿ°Št—Ùèì%«±nÝFjÛ
+XE~xùÊõÜ¯/¤ãa‘£0xh&M™¥™W¬­«§ø�åÿÚøONø»(ÁØ•G}�lÀºÇ¡ÃÇùý½ý£4ãÿŒËÅK× wwnÿYì°le–ÏK–å`åê�X´dBè9Ü½#)?LÂÓjs«#ŽæèðoûØÊ	”ùŸØ1þ›šš7:þÁ±Hž<ƒô|_ËÅ0v|GÒ„4ŒŸÊóCŠånÜ2ë'Ó)þÿÁâŽæŸ5uˆ9ßöÊë)9u�a#5ü³1Ö·X,‘9o_K2iÊ¤N›ƒÉô=}zfÎÉÂä´ÙôÑ|núDÉYÝû™ÄÑÙ�ý5õÒÚêú×rÈ¢·þƒÉ�[w¸Þ±«€�÷|øØ‚�míü³³³ƒóÒÙÙ‰«×oòõ`‡øbýÆ­ÊšÉþÇaãæ_´ì[ôÃ}äcØ8’/ù–O¸y‡aéòåü£ÇOùšÆŸ·çr[ÀÆŒØ8‚ö³åUd;†ñµI;w©ó@«9PGsôEô_ýW5ÄŽ_¶ïBbRŠ²Ö�ó?À�çÿjÿŸ·{×¥‡�äxÚ<æÂ÷ì˜üø{²ùÉ§“÷ÆÔôÊç[øq–ÿ‡ÇaÓæmê¶·ê“ÌÎ°µ!,Îô&Òo°7ù—
+Jù½…È?P¬y]õ¿É0óú±µ
+#É^±X†­mkkSÊ¿"ýgq”Ô¾]2ó&ò
+|ü6)9
+ù¦~£˜™IÅ\ÿUã?LæÎ[Æ×øÈë%1(LüuvtbAö*ôìCíŸBù¹4ü²®–Û…µk·àSr€|¿«G0|c1Ø9+TüOŸ=añd³¬®Ó®M7`5Å ìaýî^Y¹ùYµþÐÑÙ•ÿ­¿äAãï¸=–8<~ò4åj~ˆ•Bú)�£°ñæÿÙüŸ<ÿÓüîÂ‡�¢K;oÔÉ-˜ì?XÌí¿§O$N’gRÃÆÿB(þ[gÿYËû÷-HI™g· z¾_2ak
+ââ' k�<Ðý¸æåË¥|ý¨“kvæ¨\}©£9²+ÿnžaÈÍ+DCC#÷ÅŒ«VòÛ§Î\äóõŒë}Ìcn¹¤ÿlMpÅÏLãÿ—¯Ý ›ë�½Eê9UƒÎ˜šdžRÞÆâ3–,]¾–«©}‰`òÿlmNw"ûæââ“|M7ó#ËV¬ãÇ>|‚ �Xî;l*l+¯“Ž¿¦¸&zÄX²Ü‡(y kÃ×¡ÿ½ú»q]6|fg.Döâ•HHJ%nü0ÈÙë6°ùsûý²#ÿþ_á<OžVóc«(·c:TVñÐÔî&ž4ëüšzæÌ]ˆ¿R=£Rðîý{ÔÔ½âs9ËT±œžÈ6¥¹ùÅô³ñÏÿÖLùÿ/;òñÙó‹WK•Òj[nÙÙº÷q)éø—¿ôAìÈ$¾æ].§GsdWþOŸ¿ˆ™Ù”·
+çyÏÍ"1wþüvñŠ…?gc§ûáäâË÷	Éö?‹Ê²õ:m¦5â¼ýŒ¶æÔ¤ïÈ¦°5ž1qcy?ªoxƒpÊÉ7nú¶DŠÌÌ1\ñ‰Ó¼ŽM?H×ÌÍÊ&¿”€†FÓ|¯ÑÉÙ˜ÛÇ¶íùÔÿÙ•hœ>{^¯Œ£9²+ÿLX¾öäé3>&_õè1Åõ–k.OŽÆ¦FãW?Žövi.®¦¦–l©)Þâs�Öo°\ïÃöU=|Ìëúðá_�Çò‰††?aÓo›¹tuøs¿¥–Å¯,­¡<Ò\V¿u…ïß5SÎXÍóFíºð¯Ãþÿï¥»}¸	ÊzR9'Ô[2Úø®S’ÏGií’Ú.HsNê<^¾§ÑâÖ¶î£é<Žæèòo[i¤¶4Ø</•éù:IäúÔù�™3m_2(ç´ëÇ`>f4×¢Ä VýJk‡ŒãVÅÏ‘�ù·Íé§éÔêS÷ë­ç,}³VÔÏ¥¾‰ùCgè½/B=ö£ŸX>ÏµEÍÑÔÿ/+œ#Ý÷�t×ñ¤èÂ¨¤´¸RgZß³û5îÖ6ÃáÙ•¹ß¿yó'NžÁñ§pøè)Ü¾û»²Þ’�–œ>‹‡ŽàÊ•RSN Õ«†7oP@ù¿yM�$lÿå9Ê1JoÞ…¡Ó€ßÿ—¯\7SGŸl˜íÎÙ°ÏžW+u²¿·oßÅ�ƒÅ›_ÀŸošL™ëïèèä{Ò×­ÛŒ{eÖ{»¯—ÞÆ¡CÇù^Ö:eºCÜ»WIÇKP|òŽ?�úú×°´#ÿ8ú"úçn†ºúóñ >ý¼�‘¹Pg{æÙº‹°añðˆÂòÍä™d?åsÿú×^øñ§šögyggsûMo›±tÙ¾/”�Ë5äæíÅw½ñ÷>n|Ýž,,“˜“¹ÎCùÜà”©s‰£zå<Û°pÉJâ'BPH**+5Ï6uÚ\¸
+â×Ç�ž€UÒE]»déZôà	7ïpòVæ,ü˜£9²3ÿRüÃÞÏq¿¬’Ïá¬Y¿…¯ã6šÆÃÊˆÿ>ýÜqîâ>ÆoÊÓ$aózKVäP;F uZ¦æ}Œÿ„¤4ü­�+JoÜäëÀÇ%§SûKñ{{{;bGŒÃÌÌh~÷MMo•q8ÅøÓÒ¿Gú¬,Ü«(çý h¿y,’ííôð	ÅñâÓüºØøñÈÌÒ¾drÚ,¤¥g¢¢ê¾éåŒBÓ¥l×¶mßMýÇ¥·îðœTÇm8š£/¢ÿL˜~zøDð}šj)¯x€þƒ¼qòÔ9üðãvþî‡ÆFs®ÌÖäŽŸFz�ŽˆèDÍ¾ ÆbÒxR½ó­ÄÒëøü_§i?ÓaÆOhx?~lñDLŸ1SÒ3pîÒe¾¶äÐ‘ãÊY6ç5"	õJ}qmÎ&DF%*×2I¥º§�
+¸yë.ç=|ô„ê,pøH	œ\üùü£$V±ƒ£9úbü7P;ºû„aûŽÝšãeå•ðˆ†�Ï0xû…S–¨Ú
+|'~ÌD‚«W(é¹y]ã?&n,^Í×~¥ÏÌÂÄI3Íû¹ íãpõ�³K ×i³IŸ—?AdÃ�‘µˆôÜÜï~üy'F�oy÷®Eù«äLÒgdñ=d^aø~Þ4’�P8pð_ðâÅKó]¿BÿÏ„ñïáŽ»ö*íÏù!ý÷ñÆ÷L°}_Mkðåv*Úw±#Çc÷Þƒðò�ÄÞ‚ƒJ�lŽ%<j4òwñušA¤ç©iŠý—5ñÙ³ˆ!?�0n>¶š×øÏ˜5Ÿ¯÷cqg‹²V[:WH±BTÌX%®[±j#Ÿ—T?ãß/(ý©í7­KU�C:Ê×£>aó]VŽæèòÿ†ÏÁÈú¯ì¥)€�¤#?mËåó«y{‹Lí(}°9WÏ‡ÇŠ!ç-X®¼ï‹Í©„ÿ;wàÊõR>×”:5ƒÇ_LØ{á**¢¶öfÍÉFHx<šß¾ShššžÅ÷�Ë¢VM¶nÏË7[é¹nÞùa‘ñX½f“æJ£x„ígŸ&MÇÕz&ûIÿÙ;ŠÔüµúO1�·_væj÷Å0þû9yñ}[Yó—s[ßÑÑÎÏ±X->a"éöjÔÕ½Bö¢U‰Íc	&Ìþ³ý€;w �®		Iþ8CñÿÊÃ6oÙÿàh¾—£€|ˆz®`:Å~sæ,RÊ[ŽWmÝžO_¶Ÿ+š?WÍKµ§þ3=³ç,ÀeŠí{çŽó.«Îƒ³[ñ/Ùÿ¯nÿ¯JXü{¢ä4>|¤ik[³=[¬°ýû§Î\@ss?×ÒÒB¿ãs9LX,P°ï?.ÕÙŠ³gé|•t¾”òñ«×JUïŠ1àEM-_Óóû½2í
+¸Vzƒ¿·Q*oæ^½Fñêµ(>~Š¿»N:©ü¡üÿnÞ¸�VÊe�ŸDÅƒ*Í-ž’ß9|ìÞ·˜ßeùµê¿¶í­¾è”±šåëY•ª_¶Þ3du�j¼¨'wÑ™"Ð/óiq4GŽá_ˆ,ŽæHðïXq4G‚ÇŠ£9èþ¥\ªä°×mkBTúÎÊþèžhxœí��‘)…ˆq Ä‰8âDÈ^éê>×»gI@ÏÏþX¯jjg»iÐƒž——Á`0ƒÁ`0ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù�]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzü�ÏªÿÇß¯_¿þ~î
+:ûsMeÑò#M”Ï3YŸ#=÷2û»QžÛ›ÇßÐ™¦‰ïŒ[\s=E�ó8´}E>¤GÈ©éTîø Ú²Ê×Tªg-Ÿñ}×þúÌ¬üVfÖÿé�¼�Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~�<Vrvº@>Ê!?÷U�ýù�ÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+í‘¹^edÔç½üLo+[\Å-ö§k»ïä
+döW‡ïÍú(}Ýý�ê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}ÐŸuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õÆ‡dºÐr2ùÉ_ÇCú‡ÿï²¨ü:—©ôéºƒÁ`0:8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq�{bUþêÙŸÖq˜�Â©Î®è¸âmï!«Æ¶«g*ÎªòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ	çU¥?)ÿV>­Ò“ó†Î)úçx�…|œYé¬Ò�Æ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖÊ½VÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x
+ûëØÉÇ÷â)/ˆOSÎy²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0ƒÁ
+Ä¾ˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{â¬¿wÖ&Ýúõ™û3®Q×”�øN¬ðQev×	�]¨¯Æ·ºö¯gcH¯úËžçîi½�÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>�+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªü�ò\ÆªÌêúŽ¼ÄUÆ¬ìß�·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈR��Èôï|GW~•—î×w«2«ë;òfz<AÇ�‘ßŠgìì_éçlùú§ËyÐýŽÏÒþžÅâ³ò=¯�³„U™Õõy3=ž ÿ•[ô6_íû¹Úÿ3]Uý_ËîìïôªÿkÞ]ÿ¯æ]ÿ×²«2«ë;òÞjÿ€Ž->†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyÅ¬|E7þkúªÌêúŽ¼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=�Î‘}NŸÍå»�Î…ùžü>åuåWy­d¬Ê¬®¯ÒdzƒÁ`0*èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì�˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,�,^�qF/XÅûv8º.Ö©gá×3}íÈ¸âOPùì�~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+ãŠ<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑ�p�™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Ò×•þ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ�³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ	veO\k^8Ö”�¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñÑ˜
+mKãè«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõìq�³:£¿ÏE=Ð
+z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u(K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ�4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû�;=Ý·åòxÚëpû;o@>ú›”È˜éT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â
+½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîÇºÛôã{-âƒoô½ÜSd×•_ËžïÎ×ƒÊþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞj�Ýêºï%Z�[~_Ë¯déÖ®·¤ñ²+�œÖñô¹Ìw]Ùÿ7ƒÁ`0ø» ë]ÏÜkÙíIŒu�¾+e§L]«ïÎÖ‚ïoA^�ç°î;=GR¡³?œévì¯±Ö;<÷ôy‚· o�$Nî1ç´ˆ=:ß¥PîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^�]ËQ¹NÐ�1qŽG¹�¥w>Ã¹{å•á<Fªõóó�ÎÁVþŸr²2½nÙÞloÿØ�Ø§Ç|±m¶o›¶'âqbì­í¢Ó‹Ëîr�`eìêef±ÿ�è6
+0¨lz’ŸsAÞ_²¼«°îÒx7±Öì·£*îU}�î­R®%ó+½¸¿C®¬ü¿Û_ç	·ÚŸ~I\ýQö×~±küy©Ï#_·ÿjo~DyUåÀ®^ªúž`5ÿ£žpŒºåûk¹î‡oµ?:¤ÕË®ýÉCÇµ¹îwÙÉ®üŸËë>?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0î…lý·Še€·ô®ùŽg:…®×ºñ¶Š�ž`W×÷,3ËOã?«½‘]—¾\9ûP�ø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý�3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁ�hùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄÏ½®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=�é2ôl�BÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ	VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—º�ŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[Ç½×;ƒ÷…±ÿ`l?ƒÁ`0ƒÁ`0ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿cÂ¾#öÙé>·,Ïjoð­òw{õÕ†ú‡ÖÝ²‡Lûù=«mWèêòÈ2u_¤ö�¬ÿ8Ø¯–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿs�üy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇ�kþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”æ‘½Û�öàýðtLàœS6Ÿq`CÿíÌjfý´3–#ËéÜ°³?zÕ1ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝu�Êþê7m1‹è™Q]ßPW�Vç2ûS®Žåz]Ï¥zŸÒs�ý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ÑÎSŸ
+µmkBTúÎÊþèŽÀxœí��‘Û8FSHI!)$�¤�’FRHn�›wóîHÉY¯Ûx3žÕê‡¤¢�úùs†a†a†a†axI¾ÿþÛïÇ�ÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ªÃû�¼Ïâöð–þ¹»¶ŽÕo'®GW
+{>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚÏ±Úoù“v�[iZ_Õ±aÏJÎ�þ/:ùþüù×6õOÿ-¹”�92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwïèyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄiÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægH�ð–ö¾»–÷ó�üÏØñ�|†yž÷u¾Ä.½•üÿ†þó\þô³aÏÃ¦ŽM&ýwéÛÃäké#�Ï�ú$?Î]ùMço¤Œ\�ýÈ¾,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœôØgX #ìvçQç´“ög·Ú÷Bž™òîìÙ™^Êßuô¨ã�®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎß˜ò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û	ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}<GÈcåK„•¿1}ˆ¼§uåñxæLzÞ¦UþÃ0Ã0ÃPc[ì›ü<>¿g\=ö€c¿¶}ñ³M¾‹½ÃüÃgggÓêüàÖ	èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=Ç§H¿PÆîÛgçsì·ã/ÇhØ‘ñI
+ÇtýÜ~×{‘òçún^§}�¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅÿçZòï|~à¹_%/Ï,Îôp\€ËÉ¹yÎ°çZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌÜ¯5Ý»\í[½ãy|ÞÙÃçõÄ�8�ÔÏÝøŸgäû¿ËÊ±L{ä?Ã0Ã0ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒ�üÇøü\Sþã|<®)ÿb|��ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eû�î)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu
+ŸÁ¦lÛ+6»úßv´î›<™†×Ã¯‡
+¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï‘GÊßëŽ±š×Äzt�¸^vßä2)?;WmÆrõ5�üoäcö³ŸþIzì?ú¾˜�‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ý�üÓÔÅ"Ñ¯Ñí¤ô
+¹Ý1üÖóäÁñGg×ÿí{+Ò�·’×lûw<ý=}GÝ½ìÚFÆ¨�^ú)õ��¶ìzIpäG¿•ü¯ãKì¬ÖœÎ{Í{ÙÉßeÈïûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì?Ã0Ã0°š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç
+½?Þ‚‘�}¶¡åœXùçwíÅ¶‘ÚvÌ?ßå°ß©ð÷Dðÿ��ùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo	9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({Î±ß¯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç
+_[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´�L“øÇ<²?ç<n¢�Ñ¯n!ÿÂ>=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0×‹¼#ÿ5žßàøzæÇÑ�™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷UO7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý�~Îs.ãÚyœÑÿ�mƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä?Ã0Ã0Ã0Ã0Ã0Ã0Ã0¼.ÄP—~þ*ÖÎ1@G\âŸ¿äÜKÊðÞßrKXÿ˜µs2â±(ß¥òçºŽJëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽ�òwx‰ìb÷)“¿ëî¸_ÊK|•�‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òÏ±Qï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ	\áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ý�ûJY¹¯Z÷­Êêµ¢`%·Œ
+íÒ¤l9�…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡D�ç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+Ã‘Þ…Nþ9£àÝÀ}•{BÆž#t¯é˜×xî�ãÕ­s�XÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oêGý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f�™ògL˜ëz�/¯+Ø½[{Ž™ßºrðÝCôM®Y×q¦~áè[»{�y‹¼£®òÍy	cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú xfmkBTúÎÊþè‰¸xœíÚ�mê0†aa‘ÒAX„A¤‹t®NußêÓ©~¢…÷‘"B~ÇÇv‚Íñ(I’$I’ôßçççñããcºÔþ¿ ïãžiß#ýGªûÙl6Óåp8ßÞÞ¾Öó½s•×[ªØo·Ûïò¸uú�–ñßív?–RŸuß¯êþ+Äf¿ßÕžÔ�ú^û¨|¯}õÉñµŸm³4ë3�™¥ÕÏ­uò�ñ!½ZÈù¥9RÇUšÕþYæø×½åB,zÿÏñô‹Ä"ûÉ|~Ô>Ž/|çÜR×ªïõYçÌžE™®Gß”ë™·L?—:fV²\êº¯ÿ¾Pv³ø¿¿¿¿#R>œÓÛc¦‘± N°¿Òb�úÇñ=­ú¬Øð^Fz=öyN¦I}ê².ç3ðÙã?3‹¶�þœÌ¥Ã*Çª7Ù§’‡Úžé§ÜÆµ2~£zœí»öWúÄ°ÖgÏŽ#�¼ÿä¶g±&þ‰2ãyK;ÏwÊž2Ìv�m“¶—ï£¾"ßG³ýg’±Ê¼d~g÷»´<‹[ÅŸXÛlk=�þ^Ðû“ìk³íÍžGy\¯×‡ìÏ3Múœ^&}É<ýæßA—ºUüK•Q¾VÙö÷ökêIÆ�÷	Ò¢NqÎ9ñÏãè“¸iöü-yÖç¿$I’^Ó½æy3Ý¿2—üÛä8È=Ê°~Í~×ôßS—Z{¾Žßc5f2³^#ãßÇ6òwþè7ÿÒXã&}ý2Ÿ£vÄ<fÛ—Ò}Ÿ]k–Ö¨]sìlÌi–çK1_–s\—1�\§¾pNŽ³gÉ¹WÖÃe[ö	ÌÝ¬ÙßË:ó™ã‰µ�ñfÆšú¸Ríï÷XÛ2­,»úÌ˜±p­üŽ~La¼’í¤Ë\÷Rž¯Ñã’õmÔþk£¬™�ïF}—ó¸µÐFç[³ÿÔ}Q~Ùçõÿ6ä<˜Ë¨Ï«Ì²Ê4ûµFåÛÿÁ1£í£ø�ò|�þü?'þyüìý!Ë‰uæfø$žùŸŒ5ûÏ½¯þÌË9b=º§ŒA/Ÿü>»VîÍ3±=Û3ßóÚ£<_ëñïó(ò”ë…¾Žþ“¾Œú¼vÿ9÷Å>ú
+þG@S¿À³¶Ç¿÷99Gy*þü"¯QúöÿYž¯u*þùl§z;É{-½ÊØ/Žå9v«ý§Ê=÷Q–¼_çs˜>œc)ç,kæ:‰gÎQžÊÿ­%†Ô�,SæÌFñåùšwAæÛòž2v´í¼WÊcÔWql¦×¯×ãÙÛÁšýì[º¯ÜÇ}ð,éñÍgùè7ç÷óF×êû¨}.2Ë˜ãóÚ³<÷¶vKãz~Æ_’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$IÒþ-ÝfàXWBAmkBTúÎÊþè’8xœíÖÑ‰ƒPP±±±±q¹��‰Ù%ùtÃ9ðPgÆ¯«OÏ€á8Žsß÷—zjé½›ÿkŽû[×õÇñœ¦éqLŽY½–™š­ZÖ²,�ë¬a~}†¸·äX’o2L®•yŸ©üKÏüz÷—ìzž%µþ.×uòí'ÿríqÙç{þõ]Ÿçù%ÿôäÿ}’míûu¾mÛÓ;ß÷ùŸú�ëùÕ3�^ýÛ§–UúÞqí|à±0….È6˜ IDATxœ¤�w|œG™ø¿ó¾ÛÕ‹euËE–‹l¹Û±'NLz…\
+pÀq”ã€ãwGŽkGowÀ ôN!qz!Ý]–eÙ–,Ëê½K»Úú¾óûã-ûîj%;Ü|>ö®ö�wæ™gfž>Ï)¥$C‘H¤Ô�‚” „BAè]�@¢£R
+„H³£»>ŠÈÔUj¿R"„)�&è€0ÿ9 ”‘Ò¤n÷iÕµÚ“R"ìöæ‰’éaôŸü®¤üJføS¾[p))ÏSëH¤ÔB]7` &µ�K)Îwt]GQ”ŒÏ,l8Ç•ú\O‡ñ	 RÆbý�¡Xø0Þ7êdÆ_zŸãëÍ•ÅßKÂ‘Ä±±æ„°Æ"ìß…˜?�õ±X¿IÜÁüµ�Ä«·Ö>4æÐu	#×‘R˜c±Z7ö·µ{—>?‹•Ôu�>¶…ß2â*µ=)U„ÐÍ9‘&L™×Ñ|ø%ÛkÎ²`Ë�@EÁ zB$�f':‰"%Ý¨aNR7¦U K„4„¾øÒ�$�IT,$+8�¨ñ=Iç0	º=aíáxH[(ó7§b"TI{O17)ïf.Âd:ÆD“­;ê‹K˜4i¿“ÎÛ2ñº…~³¤çÕÍ¼ÉS	¤®ã1ˆˆ–Ò–˜Ç”Œ�fÔ™Ï`ìZB•:Ÿ—F ÓÇsiïY›ÐIûo£M‘±½d©kÌÂ“õ<uŒ]×SÖ3€®[8&�KïO (‹¯'1H‡)Q¤0¶ƒý³®ù¸²~Kâ!óúZè}G×Xëx±wœ}¤2I‹Y™™ù¹XÉÄp-Fw)E,$IÚ€
+K.TP€:ŠTl$ ã Ð¤)‘Šƒ€*Æo³ çÂ2¤ÅñR	—4‰òÂ¸I.fc­È”Í:ÈáQR$µt©Ð†ëb%9ˆK¨:_"[xLóŸ¿éåÍŽKJ�r)‚@Æ¾¬’*iZcHÎÑ›m÷â›Bnm´‹m$™&å:$E˜éø›ÿ‰-y.¯�s„£mH2öùŒSÚu/¾“Ò¨sü)ššÕÖÚUŠô%L¹SZŒZYx\)ë9uO'a’ó¤¿L¤(u�Z’còS"Qìß#ÎV¿—Îhm#’è Qóe	ó‡bC±”-±Ò�
+­Å—yWYLdNQ¥Žrñ:õeÃL�©­tÕÀBâÿUÍ“è&nŒwš†K�ÏýÓÕ€‹©
+fãHLSHb—Š«¤…!Óæ¶ŠU_ÓAUÌNŒŽ�¦Ä,ÑP7R7ú×õ‰„D.@¢ºTE¸J£…IéY¢i&6¥%	h	
+MÓ�\ª©VH�×ë!c£éÈ¹Fr)ï9M0™ÚZçÉºÎ¶ßüæ´IyÏRÿoÓ"dN¸“°¦6‹Å'�£¨.²³³)ÈÏIŽ×Ö&3õ“i/-Æ¼“CZˆ`eÒÒÇ;|ú"{Ç)4-c¦² ‘46¹A¸"Í§˜|ðGø®ÙKîÞËÑ¤†š•ƒÈ2m—&Ñ’ÎhÿoJ#aÙQ¦¦C´µµq¦µ•±±q²Y¬\µœÍ
+)YR4o`Ï>ÿg›Nã÷yˆD"È¸D:B…D\âñ¸xÏ»ßAÉ’"zzzùãc¸|÷n¶niXT³>{zû9ðø“ìÝ{9õõká7¿ûBQ‘z‚`(‚¡FE!
+±iÓî¸õfÜní:yüñ§H$$>¯¯ÏCUE9Ëª«©®ª$'7û¢“d•ÆÆ&Ž=ÉÛï»‹ì,˜œ41å‘?=ÎØØWìÞÉUW]1é88|ä8O>õåK¹ó­·STXÀÔÔ4?øáÏèëÆðâñxÐ5
+À�KU‰FcÌÎ‘Râñ¸	‡#ì¾luçíX‹óxS3/<÷wÝu5Ëªìþþô§'yñ•7ø} 
+¸ËíÁír#‘„ÃsÄbq„pœ�auírþæƒï%;;kAézœÖÖfƒ!|>+V,'';pÌ’ÈÙsíLON²uË&<˜…8Þx’šeË¨®®˜‡ggii9CGWåe¥lÙÜ`2ÈDÐ§¦¦9ÞtÒ�†´8‘h)’ðÜº®³¥a#uuµ àèÑÌg¹âòËp»ÝfÿóMÎ1�8qŠÙÐÛ¶n"à÷9`NÚ`�;ÁãžæÌÙv4-�"ùE¹ì»bo¹v?¥K‹�y4DNÚÎµsüØ	Š—³{÷N²³Rç"e}é’c�MèºÎÖ­›P•ÌÒ§‚`(ÄŸÿü255+ØP¿fA<;…šé™^xáU*Ê—²sçöðº®ñò+ÉÎÎfû¶M$5‡KJ±üj–6=Åð~�ÙGÅßÑ…ž@ïê'ØßGÑÞIÎÞ+Lý>Uý•‰( @uÛ*òb$òà¡£üè'¿¤§·MÓP-®�G©(/åýï{û¯¹"a‡ç7¿y”ªêr–×T’íÏ&–ˆ¡ºTâq
+¿ßk³ó�¡~ù«?ÐÝÕÏúuëðùÜœ¨NÝ=½üúw ¼¢Ü&’“Süá‘Ç‰'t–-«`ÍªU—B"¡á÷ûÑã‘¹ˆi§ƒÎÎnùãÕ�×í&+àE—ÆÄ•——qËM×qÃõûq¹\ó…G‘RòÜ‹¯ðÛß<ÂÖí[ØºeR×jº}Ñ¨?2:ÎO>GWW¹ÙÙ&‘\ŒÛBgW7¿{ø�¬Z¹’kßrE…$	úúèìê%7;�W!–Ð#‹ãv¹XZRŒ ë‚`0È†õkÍ
+`^ý?ýÙ¯©¨(5‰¤A<§§¦ééì¥ 0‰Ž®KÆFÇ	…#(
+äçå’ŸŸG".	ƒ¢ë‹Û‘ÅÅñã'ùÅ/‡êVøÔ'>ÆÕû®°ûÌ\Ñxœü1±X„�ÖãñxÀá#'øô?þóÁ÷ò×ï½/ùF†‰zò©gøù¯þÀ®í›ùìgÿ‰êªr@3÷†…wŽ®î^¾ñÍï�%ÈÏÎÂåR‘ŠaÿŒDÂƒ3¼ï½ï¦nM-‘X”ßýáO:t˜ï|ûël¬_›Q"t]‡ßþöa.t÷òÍ¯‰€ßg
+í†Ï@ê’‡ÿø8~ÿÇLLNSYQFUe3³3tvvsæt+o:Æ?|êïX±Üš38xäßøÆwX½º–5ëêæI'^†GGùÊ×¾Í’â<6oÚ8O“rîµP0Ä÷üeå•ü÷7¾@ àO©gµíÜ£}ýC|ã[ßáê}W.J$#‘=ô3¼¾†Ïíæ’µ6Òˆ¤“�Y
+öØ~B||”¥_þ¹·Þ„wÕrÂG	~å[L}ëAÜ�¾m[
+ñ9#zº�à™Sh(¼÷N\+kLõØhÕÙ›õ÷SÏ¼Ä¾ôUrs²ùØG?ÌŠËp)‚x<FSsßÿþùÌ?ÿ+ºü,×îßg·àóºQUA]ÝJ>ýÉ�QTTˆ¦%P„ŠP~“*Š ;;‡“§Nóú‡¸æê+lÄŸó¹–ªºðù³q»¼Éß\
+¹¹yLÏ¹ëÎ¿âÖ›÷£›’¤i ECªð¸\ø¼^„ªpÇí7qÛ-7095Ãkoá×¿ú-M'Z8}¶�O}âÃ¸Ô…'mllœŽŽn¤P8tø([·l@8<Ô©ž;
+øYäæ,ÈžÒ7ºËí!;;�¬¬[E/,ÌåßÿõŸˆ'4:^Ÿ‡éé_øÒ7hjnaã†µüóg>…ÇíF×ut‰!:æwddŒ¬œ†FFSæÿÎ;ßÊM7_�Ûí2ìÌBåÇ?ù�üñq²²røû¿û0;vl!ž#¡K~ŸoA™£¢aS¿ä�Ý]´w\0ˆä¢6qæÌÙsì¿ú*²¿åÌYÆÇ'›BÓtTS²m{&Á’¨H¡¹ápØ¬—n+3¾Çâqfƒ³¸½>î}Ç]ìÜÖ@$1µA<§¬t)š–Àçó3<2ÎÃ?JíÊü~ÿEmpqÍ –¶®h›Í�>þßùß†¸÷ž;¹ëÎÛYZRÄ\8Ìðè¿øåï8pàI¾õ?ÿË×¾ü9\.ƒÀ©Â…¢zÐu�®éóútÂÔÑÑIWW‘H˜ÉÉ)–.]‚åm7Øæ¡PPXÌá£�¼øÒËÜ|ãõXf›ôv­ïªâÂãö#ö?p\èblršÙž^:Îw°~íš7eúp!¥½œ¥I(Sœ
+¾v9>Mñý÷“ÿÎ;H�âß¾…šßý”��|ŠþOÿËý‘Þ~æ^x•x_?‰Éqâm(¸÷ÃÓ-AG1¬•)ö7AËéVþûþ—¬ì,>ÿ¹hØ¸!ÀukëX^SÎÿ{àó|ùëß¥¤d	›6Öƒ]
+P\ªBNv6~Ÿð¦¼oí
+E(x½F'¦ùýeçö-dçdáÜÌIÛ¤9	ª¡èOœ�L£u~ž·ÛÅb¹f}ªËK©(3þÕ¯]MUY	_þê·ùå¯GyY	ïºïnÜ©¤·w€�Á!²²œ<ÑB,3TBÇ²<¢èºÁè¤nsâL!HÎ¢  )ã 5ã7ÅM~¾;¥žÏã#7'‡DBÇívÛ¦�Ôbô92:Îàà~¿�®®>‚¡9²³ü€ �å%�•:_yy¹hšŽÇãaéÒ"¼7^OÞ<¼,V––°ti1=}ôõõ�Çq»Ýóê9%”ãMMÌÎÎ²zÍJûy"‘`xd„ìÜlºººŸ`i‰¡~Ú0Ë¡ª¢âVÝøs]Ì·³[ð{<T··ÛÍÊË¨¨(_p<ª"Èò¹ÉÏËçÕ×²ïÈ^ö]¹'¥½yš�ÔP]*ªª"Ì4‰†@¡`�_ýúa¦g‚Ü|Ã~>ü7ï±%7ŸÏKaA>÷‘÷144ÀÁCÇøþC?çƒýN£-ª¢ ("%"$Õye¨ó]]½¸Ü*“Ó=ÞÄÍ7¾CÍwF¤ûS‰?+€KUyîùW¸êÊ+È0m~f'²ˆ´ü$:( ¨óqœl[ÐÚzŽh8J"¡ÑÚvŽõk×ðfŠ"MH3%!a†ò$†Ç˜øÉ/Ñ§‚ä\s9ÿêÿÐó¾¿%v¾€âÏ|we}ùf~ó(®Òro¹†ò/þ'¹wßE¬·M1½~ŽÍ,„B8åû?ø1�]xÿûî·	¤3dt.Û¹�½ÿ]\h?Ç¯2Go¨
+HÃ)‹Å,9æIü«’›“Åé³m<ÿç—¬iŸ©EJ‰¦iÉ¿E’ŒÆâñ‹"Ø¥ºl)5	£QnºñZî»ï¯È
+dó³Ÿÿ†3g[í>�.@_ÿ‘HŸ×ËÈø8ƒƒÃ‹ök½¯(*�'å÷…|uV8ŠAØ3áÃç²œt"uA¦¶k¼ßÖzŽþ¾!<:{8ÑÔÂB¸ƒ0éº4‰Ú|	áR$€ÜÜlŠ‹‹ð¸]´·_`hxt|öF3Ûk>Ù‚ÏçcMí*»ÎÔÔ½½CäååÓÝÓMSS‹=6«-«I)%š®¥´Ÿ©Øó".—±6Ò×Ez‘Ä~€xBãégžgjfÖn/“©H˜!BÎ½d1ÑŸþü7t÷öQ³¬š·½õ¶ÕÖ˜c�’%K¸ã¶[ˆFÂŒ� ;„FË“îÀ2ŸbÍïðÈ0n�‡x<Acã‰S‰÷Ökš¦SPP@ÓÉSxâ9‹z‚Ô1ôÜTœZ]ºsÍ)4D"š[ÎÕå¦»«Á¹Y¨˜áàVÐ,HÅøÉÚÜ€6<ÈèÏ~Æø·Dj:®âB‚/½n‘—‡Bÿ–Mäî¿šxW7s¯G-* °y-B7&Ê"fIàŒÏ×ß8ÌÁCÇiØXÏ{v.
+èU{wòÐƒßæž»ÞfƒîtZ8cÿlÆ“¾�¥Äëñ PøÝÃ�ÑÝÓ¿hŸ�¦k$L>Y,Nvñ
+«("©–9Þ·`»î-ûXV]Íôô-gÛŒ~…3¶N i��ÝD£q|~¡¹§ÍºiÿG<�˜_t‘ˆÅG–É+žþÝ*G�5ŽÌá÷û˜››ãðá£�¡ûtïe2~ðÍ¿?‹††u~úú8k2Ÿ…`��™e ˜õkë¨]¹Âþ½¥å4��]dge�Åi;w.mM%y‰n!j†HgÑtÃkÕ_¬H	ÝˆÈÍÍã�ƒGxùå×Së¤KØÒŒ~’‡FÇÆ9q¢Uu±mK7¬µß·ê€{ÃÆz¾ö•ÿäŸø[Üîôñˆy¼.	ƒ`dt‚sç:P„ ÐÝÛÏØØø¼±9÷ª®1ªŠê6ÁäŒ£ÎükŸè‹¬“©©FFÆP·ê¢©¹…ÉÉ©ëg*v„”"Íè{Ý�ôÐ"ÛÕ•ÄNŸ'kÇ&²ï¸%Ç»r%á¦FÿýKä^=._€Ps#®uµ|ì ih33ˆâ|£mÝˆ§LRG8ðÄ3Dbqn¸îZ–¦ Z�®›±PRRVVÎ¾«¯ °¨Àš†Tã÷ûm�çbN�Š +;‹öóxåÕ7ÇŽF¸‹s¤Òþ·x‰F£Æ˜g¼a’Ûfüå¢I�Ñ‘qF÷ÆçØÄ$ÇŽ7²usÕU•„ÃaŽmLñôe+¤®§H’RÁä	�X\ÒL¶‘„qaIÂá§Ï´rùž]ìÙ½�p8ÌùŽNÆÆ3m–$³Kg|o®0Ô¯­£¤¤˜H$ÆÑã'}cddŒáÑ16lX�ËAŽo"+;@íª´D‚¾þAB¡9Þô¥¦šðºTWFõ’8JzzÅE�Q˜‘º®ã6|/½ô
+£c6,VÛ)ˆÅc)šPã‰“Œ�OðûY³¦Ö\É
+¦,�”’ªÊ2ö_s%99Ù,¶Ö�«´¶¶ÑÛ×ÏŠåÕdebxdlÞ»7‹B"ÃëõÐ~¾ƒßüþ³Ö"�ßé)©ctlœÙàukj)*Ê£½½“æSgK¦¢èÒˆ3œ6¡(]cö‰×ˆ_fÉý÷Qö/ÿ�lFÿë«ä¼íV²ö]Áìáƒ(¹ü;6êhÅW_‡¿ªK|þeFøÜÕ€E ÈTayph„®îòrsiØ´qÞàŒÍœ$7ÉH}Ý€UFîð\$þ’È‹kq]cÇöMÔ®\ŽyômíE�” S±D¾	)G�Ô�w,ÂhÃ(ª¯×‹�’¸©v¥Ø�ãÇšèéëãž»ï`ûÖÍ¡p®½ƒ��Á‹tÂÜ\™àš_ÝŠ‡[HÝN+R¦µ�J°ÇÆ'ä-û÷Ñ°q=‰Dœ‰©iÆ'§lRÓ4ô‚•/¥XÓ²|E
++jªA*ŒŽN,P×¨ÜÜr†‰ÉI–-«´Ÿ��MÑØt’ýW_ÁÍ7ì'‹Òq¡›þþÁ´6¬o:‰„fŒEŽßZcŠÇãèºQ_¹È8…�Äq
+
+òYµbù>rœ^xÙ‡E¨Rpf2JçoÇO‹ÅðzÜæÛ0%¥b=E•v4–6™B7-æk}?tä(y9yÜ}×å308LSS3Vè’…7«MÓˆ†#lÙÚ@MMŠââÑÇž¤³«7¥ž³hšÍÑ‰«4ž8I8<Ç»î»›ÚU+˜šž¡¹¹)µyí-T!g–mtò®¿œ¬[®Ã·©\
+Ã_ü*…ï¾�¼¿º·?E(h^D ôÔ‹DZZ	þù%&ù
+ßÿÜù6à‰p8:Î_`f&HV–ßt¸$é4[b¶ÒˆÝ´ÎØê¦
++Áçõâó{“}9Ú±Š®K¢±(›·läî;o£ ¿€Î®žyþE:2>'y—Ö¢
+ÊET*»ESÝvª”Öq3tiÛ{Š
+ïXÿIÚÏ_ /·€M×²nM-þœ£“ôš6ßÅ:7Â©’Ž¥¿„ð,X„H‘ö’6Jcœmm­ÌÌYº´„Õ«jÉÉÉgldŒÎ�ƒ,
+f­(¤àL’kf�‰&+�EUU.Ÿ‹áá‘Œ6\!‰D‚ã'špû½,«©¶Ÿ
+315Ã¦†
+¬[»šÜÜ\zú8Õ|j¸“{(‹ÙvÆ…% $¬	íâ6Ž�—›Ã;ï»‡ËkG<÷üŸ	ÎÎ¤ÚíMl°<¯×k‡ÞLMá=Š¢’››Cyi©Ž‘<6šç	()õb±8ý}¬¨]É•{wSUiÄ—<x„9['õSÂìÌÛ·nåö[n"à0=5Ã�'ŸYtÎ-ÿ†óo«DcqŽ;A~~>›7­§ºª¡ªôö÷ÏóÌ/Vaª³ºéaÒT�ÙGcôs_bøëß¥ä“%kßfïQbç/à©©B•m|<.”\?Á§_À·gùo¹ÊD¶•ô"U:™
+†ˆEcx½n|>OÊ�ŸI¢™†T¡ KÓó,\Wò]s£¥„ó¸V ë{öìdëÖ
+¸T7Ï<ó"M'Mƒ¼LUì3ßÎI1¥‰–°l•Ö1²Ôwã8&Ò8án/:
++
+HBK05=�¢@uUµÝž¥’ëRÒ?8HmíJ|~?•Uägç	Gé´mª>a¨uº~q“�;k‹.L£Z*kuÚƒ‰¸Æ~ƒÂ‚|Š‹
+¨Y^ÅÆú:Æ'¦8tô8áð|Éû�*ææÂD"áØ.Å³mÙ‹–––�È¢¯�iÄÍšŸÙÙY.tõ°¼¢’Êò2ûùÀàzB£¸°�²ò2Ö®YMdnŽ“§ÎžK…ËúTC*ŒF"6‘tª¡N"uÒp:,$xJS}²ˆV(dýúµìßw9y¹Yœnmç‘GŸJ�EÉ¾¤4lË9èèg|b
+·ËÅ’%E”—YDÒƒ™#Á’$Ó÷c²¦tÌ²o«ÞäÌ£cÔTUâõxØ´a99Ùô295C&‡œD’Ð�@ú}WîfÕªe¸½^}ô'›O§ÕNšc[fÒgà$îÝ]=œ;wžíÛ6áõú(*Ì#/+@k{ƒ#©&ŸÅ±b8?LÇ¼4²ùèšFðÈ¡k=GÁ�·Ø¶Ån,ÔÝ…ÌË"ç¶›qWVRþ•ÿÀ¿{7ÃÿñE¼»wRüÁ÷¡+¦ò&Œ‰6Î}&‰EÑt�ììì”¸´Œj pfa‘6R…n|ÓµªÍMLbly‹¬Eiœ¥c.d,ð›nº–¥%KâáGMyÕFNÚbIþ.Ð´8.—ew²¸YÇ€¢˜’‘’Ú¸¹˜»zúho?ÏÚµu44¬³ql�³¯o�óç;©¬06pYi	•å¥Ä¢QŽ?ÉÜÜœýŽ³èºybJÄIïé_êqK¥Lo))ýÃÔÌ'›[Øº¥�ââ"[¶4 …Î©–³LNNfnÛ<Äàv»ñz½óž¿øWÔ,#?'‡X,nÛpÓËääS3³lmØHnv¶M<›O�&Ëç¥²²—ËÅÆúuxÜnz†l»¤±U¬M«¨jš„=M»=.a¬%·'s™E´,›¡¦K&&'¸úš+Y¿n
+‰„Æ�§ŸOñÞÛ.73[W8&a2óééYB¡9t$ùù¹d›§½’Düâ6`‹œf²ÉZí´µµ34<BE¹ç¹bÅ2òór™™™¥«»'¥®Ý®¢ º<ƒA¼^o{ëMü^B¡(�>öqK ‘Ø†ËåBQ•y^oßíç:ˆÆlX¿Î„cKKŠåÕ×f|'ÓQ„H†ýØ¡¦ºŽ§t	îº•x®ºœÈùNô¹‰©Iú?ð1d÷ ¥Ÿü8z(‚
+ëéfòç¿£äÓ§è=÷!Á°AÚ‡ý­Í“`vfMÓðz½ñZÜÌ’(“*+BÇ¥º˜œšáèÑ&Î¶ž£åô9šO�ådóiÆ'&í÷¥4¬®—íÜÁÎ�[ðù¼4oáè±&GŸF-ÍT÷\.OÊ#PÝ^ÚÛ;8|¤‘#G�¯½~ˆ“Í-$âIÎf/aLª»‘Qhrj’‡~ü+fgƒ¼÷þw�ŸŸgNŠbŸM?}º•‰‰Ijk�ø=EQhØT�Çã¡½ý<íç;S&9‰6ãïô´h—â˜ùËJ2ñÀÔô‘p„M›lØª*+ðû|gBôôdlÅEºuiR$Žu¦³zõ*jjªB¡¿�3lÆjàÜù¢sÖÕ¯1™¤ÂôÌ,ÇŽ5²~Ã:ŠM‡bUUþ€�¡¡ú†2Ž_·{2ófsÚš±˜±–t�©é Á`ˆ™ÙYffƒLÏÌ2š—dB0Tù¬@€½Wì!77@Oo/�<òxg)ÌÆšÿh$Š¦Y»rr²M9")y¾9KLj¨�s~:NÀ`u�±f‹ŠŠÉÏÏ'Òx¢ÙaÿL}?‰#¸lÇÖ­Y�Ëíâè‘&Ž9îÄd²O©¤�HçéêíÇëuS¼Ä˜ÃÕ«kY¾¢tAssÎ’jæK�;—a¨Ç” M$A|lwñ\Y>úÞý!â�]d½õF&ò¼õkñmXC{ý^JÿãSøöîÂWR@î�7˜àëèByƒtcÁ
+aH6 $Ãóbƒ6l‘ÎŒ(†�|�lzûù÷ÏÙT-�þ§gÆùÔßœÛn½1ÙŽÐm#¹"×_5Ç��`htŒ‡ùÛ¶5˜ÜÛì‰×ëÂëux*Í9ðú|<và)}ì)Eàñx™œ§º¢Œ/}ñTV\Ô­((Š‚¦ëDM,
+ÑÕÕËw¾÷Ï>ûŸúû³÷ò]É^¥t©qäX#yy¬·�úI®Ø½“ßýö1¦§gNžbq.TE1³%¡ãv;ˆ¼ÙÆ‚*ú%”ÌŽýÔMvº¥TW&Ï;WWUPX�Ïøø]ìÚ¹u~ÛL"¡i$I3A&Õ/S1¹Ž’ì¬k×ÔòÆÁ#Œ�O1;;K^^®U]—¼ñÆŒ}rÓ IDATEPZ²Än£­íÃC£Üs÷Ûìß–ÕTQR\LwOG�7±qãºÌ&)Ê|í#½¨ª‚Ûí!—|ÿÁó�‹¸fDl„æ‚,).âsÿöÏ”–.1UyÅÖö_}%¯¾ö*ÇšÎðÔ3/pËÍ×SUUždTæ¦÷x<¶¢iÉ4vyyyÂË÷›bœC°$8+T
+`rrŠÆÆfêë×±|ù2**ÊY»v5ç;.pøè1î½ÃÊw¢ÍÊ_kÀÏÛï½“ÖsÌC<ùÔsìÚ¹-%ú!‘H�Ð){Ö*šÔ9}¦•âÂÊÊJÈÏÏeÍšU:ÔÈððs‘0Ÿ?ÍÄ6.!“'nt‹XºŒä
+Ó¿zÿU{ð¯\N¬·ÏGÈ¿çýŒ>ø¾uµèŠ òÒë¸JËÀ<ºd„tÎ]è†cH¤Ú	…—©–,>A]“LNMÏáóù(..´m�‘È…ËØ»gyy9hºDÓhZœ�ë“­èržÍqûÖÍlßÞÀÓÏ¾ÌÉ“-=z‚Û·`³:]š^;—0
+þ×ì»œ�×¢iª¢‹%Èø)(Èµ*’Ð4C2Tž|ò9zû†™™šæ�71:>ÎG?úA>ð�ûQTÕ±á‚335CGÇV®ZIUyÒ~TYUNaQ>ã““tw'c=S7+¦‰c>Fÿ¯¾›L\×m²³¦æÓdådQZš$>••elÚ°ŽÇŸxŽÍÍÜtã~[zvÂ–Ð¸ÍÓ(V—j“´ŒeO.+[J ËÏðè(:{¨¬¬°Û™œœ¤ùÔiÊË–R^‘tbôáóûØÔ�<ýU]UA}ý:.tvÑÔ|ŠÙÙ¹¹ÙóÔ4)�@xKkXfÕåBQ2ž °°€¥KŠ‰%˜Ãá9
+
+sð˜ÌÙy¬Ôê§¨(Ÿ®»ŽS-ç˜ž�åÑÇžä#~Ÿ-};½Æ–Lb†UI9·ÿ‡žÝ´�Œ215Í�ë×˜§·ÀåRiØ°ž—^~�áÑQzûûçIaJñN86oªgÓÆu<óü+œj9Ë+¯dß•—ÛÛ3)}&Û±Æs®ý­­mÜxý5äåæ`­ÐŠŠR¼^#£ãœïèbãúµ)k+ÓZsISR³|ÜRQìy×_ƒÞ?BìÄiòß~7B�iiÃÍäà‰éiòÿö=ÄÛÎ�k,ùðß"¼¤ÔQ-Ên‰©–­Ã‘k/Ýû¼È0‰òÃÿ”ƒo£¾~
+ÿþoÿdÇ™ÅcQJK
+y÷;ïÂëËlÃ²�â°Z¿ß|Óõ9z‚ñ‰i~ÿ‡ÇØP¿¿ß8¬¸T´„NÔá@0è½$	sÙ®íöñ°…Š4™�ÏëeltŒ?ýé‰„NÍ²*xàÓì»ò²dÓi“395ÃlpŽÝ»—ár[„Z¢ª.V®¬æôéVNœlfbòf
+òRÞµø¼®Ï¶Í¤î¼éb/R“éI�nÚ¶ÇÆ&8}¦•
+ë×RV–$>>Ÿ�Ý»wñÜ‹/ÓÚÚN{û¶oß<_º¡ºëö&¸T§�“QknéÒ%dgû™�
+qäè	öìÞaKVãã“Œ�OpÕ•»&œ>ÝFiy	%K­ã–¿ÏËÆ�ëxú™èdfz–ÜÜìT"c¢9‹§Äÿe‚] ˆÅb¨.…w¿ë^vlßl–›£�fÚ9”ô.¿â2âiÎ¶µó§Osùå—±¹a½�GE¤&üUCX‘RÂEà»–
+�Óáã³^› �±¬ªÂlßø}EM5¹¹¹ô
+
+1Ð?›ÒÞ5º3¢AU]Üù¶[in9ÃØø�x–�;¶™¹ ™Š0‰k§[Î‰EØ¹skŠ¤¹¬zÅ%EpüøI6šZ:œøP˜X!-5
+„Ëƒos=¢´ò³ñ®ZGÎÝw"	D"AÑG>H n5JVÞuu¨eEfã†�@W$RªBbœçL�)¥/¶8±Ôt�¾þ!Îµ_ ·ßq¬H(¡×4Âá¨ÕjJûÖX
+{�´ÓJ
+ÓC·©a×\}BÆúæSIOš†Jæ<6foAñxæãdNO·Ä¨'‘\ÃuìÜ¹�pdŽeË*¹lÇf‹˜:9dwo333ÔTWÙõÀðXoÙº�×C{ÇÎœ9kÃë„]`Ji¡4ÿgé(IK‰ÀÊÙÙÕE0â²ËvÌSê×¯[Cye%ã�Ø09‰€Ëí"K‹FíßÞŒ-ÕÙ^míJª*+‘HÎœiM±K¶Ÿï@…�Ž|ããã4žh¦´´Ÿ'ÕLQUYAaa“StuuÛpYã7L:"E’L‡+ùÝÌ@Ž°Í9†*i¨âj†ÌãÖ±J^N6ï¼ïÜ.•H8ÊO>K2ŽX ë:ªª:lá˜¾ÌÌ	#ÞLqâXˆä¾8zì8^Ÿ—+U[—†}~É’"Š‹
+ˆGã=zÂÞ¦éR`êëlÙÜÀ5W_I"¡Ñræ,Ï?ÿ‚nCRM?–ÐÕÝKYEkÖÔš�öÝººZV­¨AJ8y²…ˆ�ˆdáµeÊæ*ÎÔV—±©irn¸�‚;nÃå.²vmÇ·j%‘¶6ˆÇ‰�
+£.-!üêaâ¦A"�tL„ù‰Ðì
+äDˆ¢(D£QææBéS@
+w0ã½rórñùü)ÆfÅ\ó�¦ÊŒS?Ö’Ž†›¯¿–‚ü\Âá¿øÕï“I×Hè:ZÚâÐQ!@éý&%VÅ¼#(�±¦®–·ì»¿ßÏ‘c�¼~ð =ƒ¨Ù„¬Éõõcø³|Ô®ª±1aµ»¹~
+•e%LNÍp¬ñ¤íÁ´Š®ãˆ”s·Nþ’“,Î6’ßmÔˆäbíêÀçõ±¾nµQÇñnAQ¥%ÅDÂ:º{2ºë¦}Ê™XÄ‚ýb„2ÉlX²³²ØP¿·Ka|b‚Ù`r­9Ö„ÏëIÉy®½›¡ÁvïØj^‘�”–—Qºt	ÓÓ3>Þ”‹®K4=ó‘Xëo'1Jèš�3Å`ò‹cÞ…ißv–Í
+õlnØ€pððq^~õ°ù†Ãb
+!.Õ…¢¿-—Èùæe§é i+4~Ó1‰¢"ì,T–9`rzš×gýêZÛÆkØG¡xI1+–Wã÷x9}¶ƒö]foIó€‘iÈ¹÷�g7^
+e¥EÌ…"<óü+Œ›Ç
+u4=máp„Žö.–/«¦°°ÐD¡Át<.•-›Öáóx¦p(‰'{ü:Îë%Ý-¾@.ñó]D;»>ÌÜ«¯!
+Š÷ô1ò�ï2öÍÑÂs¸WÔ0ñð#Xîy!-‚k(}:F*,çº)..Æãñ033KÔ”¤sÇ9¸ƒuŽw!û‰*œ§.²‰ÌÕ‘´×IVÖÖp÷=o%
+ÓÚvžƒ‡Ž%›R„�&ÊþÑ‚ã�Í	aœ¿Ö´W\±‡µkV366Áë� é	›(:áŸ˜˜âdã	6oj`åÊ•óÚ¬ª®býºµÄÃa:»ºH$Œ�–î%DdÊ^I—&±e:á­ë:§[N“Ÿ›Cee¹‚]
+òrY[·!Žm¤»«wÞœ
+a8Âœ!@óÆµLÂ3Ç¡(‚Õ«kñûLLÎÐÖÖÀÈèG�6²ti	eŽøÈÖsgÉÉö³ÕT“ÐK*+ÊŒ2ªÂñ�Œ;Î"KëŒ´ ãxæÙ.±Îm-Vì˜Û4\~ÞñŽ»ñ{<„B!ž~æ9ó¬~ÒmeÉq»]†
+®K;9‹3=¢±ÇæŸ%BMY-�î®>ÙsùNÛæé¾öì6üÃÃCœ´½Ë&ñÕ%‰D‚LY“êV×róÍ7‹Ehk;Ï‹/¼bŒGU‘r¾ã·»»Ÿ¶¶vêVÕf”ÈËËËñû}ŒOLÒq¡ÓîÇiªqÂ±8‘¼|3G�Ð~ý­Œ|ú³}áÄû,¯Añz)û×(¸íV
+>ðnâ]]Lÿê·fÖØUc¡be“â´KUQT]×‰DÏ‚"ç‘/Ã”!p¹]¸”¤¡<S±¹¢ý²�A\n¸~?•åeÌÎyü‰§™™
+âv»ñ¹\üŽ X’Î%FìKfM×‰„Â~êëëP…cG[8ÕÒê€19¶‘‘&§'(]ZÌìì,ã£cŒ��3:1ÁÄÔcÓø„Ketl’±q#î0iS±¤Ã¶c;m³¦ãÈ:š˜ùyòÓˆPH5m `dtŒ³­mxý~†FÆ›d`h˜ÁÁa†›˜ ¿0—@–�þ¡AÎut¤Àcxµx<ž”3çV�K#ò¤Ü©TVº¿Ïƒ®KN4�àtKC44ÔÛ'¾t)9w®ƒÚÚU”W”¥5j¤7Û³{'y¹
+Ž0ì ’FZ2Ã	™HÄçIöv+NüKƒP^üì¶“¸Î/ë×²¹¡žHxŽææ3üùå×QT‡mÍ\Vùùù¤”LO[Y„’í[Ä<] I±u§I™fŒgç;:ÉÍÍa÷îÌ	p·nÝÂÒ¥%$4�Î]æ`’p*ŠbÚ‹�~£�+ö\FUE)3ÓAž|ú9¦¦§ñš¹EÓñw²é3³ÓlÙššvÑjwõê:òòrˆ„ç8q¢ÅN2’É‹$BÔÃQfž~16NñM·RðþwîêCïº€gy5‰ñÜëëP³ŒÔø¥ÿñ¯ôôïqW•Ø»×péIÃªµ±,¼.U‹ë¶”iB„f¼¥ñÜ¹ø¤Ã–—*…Î/¶óFImÛ+’äsÛ­7ð½ÊÉæ3<ùôólÙ²Uö™j»ÓitIŽÅ8·­ˆd^Ê+¯ÜÃë¯ãBG|ì	6Ô¯3“#$yVßÀ‰„ä©'^àÈë�F+ayÞŒˆ�`(Dii)ãc“>|”Ê·Þ’ìØÌ†­ÁììLòç¤qŸN\ÍÇaòÓ¹YœÏz{†¢Œ�·óŸ~·Ûg¤VÓ4$:ªK%œ#/?ŸÙÐ]]=vŸ€|oyhm¢<“.Šó4Ø‹‹
+XZ²„©é­mç™œš¢»»E\uÕÛL099MWw?ŠPøñÏ~cæA•$ô.Å…Ûå¡ ŸßÏää�zY¿¶Î€KOr}bž®v_ŠÌîœ�ôY‘f«wÝw7ç;:çÙg_äÊ+v““—�Þ§ÛGð*++Yº´„¡áQFGG‰Fcö½A©¶ÕTXÓ½¾3�¯¢v÷ö
+ÎñÐO~MnÀK$&q¹4MÃår1355…Ë¥ÒÓÛÇl0h&Ï°ö¾@w¤›K¶/©­]Áí·ßÂçœ?ßÅ+¯dÓ¦
+¸Ýî8t]§£«]~ýÛGxå•ƒÄb1¤©ƒÛ­�FG£x½Yœ<ÙBOß5ÕÉsûéeA"ïëeæQôw$píµÆÆðz™9tØp”´·2õ£ŸRôÑïè$z¾“âO|Œñïþˆøl˜Ü›®CÐ0¯žVüš±ª«+ÈÉÎfpxŒÞÞ>6™^¹Le%ƒ-ÆœN“p&ôÌœ;9‰©ê¾“p›�qëÍ×óÂ¯Òz®�W_;„®ë¸Ü;Û¹YÍŽµÔ/áÌ­å”±KC{vï »»—�§èëdYUEÊ:ÞØŒÇãå–›¯Ççõ¢éqMCQ´X�ÇƒÏçáùç_¡µý�'OqÓ�×ÙG<u)
+â$%�@òŽ—¿Ì›iá0•Ë¦ý4ï7êëéE‚Ûo»‰²¥KHè–7Õ
+ŠÖP/¾ô*MÍg¸ÐÙÃ\8b{,¥¦v3-aãý/u2X1¸………44Ôs¶í<ãc´µu008Dyy)Ë–%ÏkŸ;×ÉèÈ8%K‹xã�C†Ú*$R((¸p+Õå"'+‡ñ‰I<ÌþköâóÉ�ZÕe„re²µ:áw¹\³ÅV»Áû"Ï¥A(7l\ÇþýWóãŸþŠsíxê™QL§�…²œœ,V,¯¦édÃÃãô÷š–´½À|bnïEK
+MÛ�ÓÓ3455“——Ëàà�á°}ímR»�Â¢|‚¡9ÚÛ;hkï`ÛËË-±öJ¦¢*‚}Wíå©g^àtK�=ñ>¿OÚ©¬xBcph˜êª
+|^]]=èzE5²'yT�êvQ]YNk['ƒÃ£´µ¶SS]itæˆí6$’jQ1êŠÈ€ÏF²+7�Øô2'ï²Ëˆ
+Ž=ß…«¢�éˆí–þãß3üÍÿ&v®ƒ¢Þ� 	ÃVi„$Èªªª ;7›Xï §O·ró
+oA¨Ê<©Á­H"ÐW)“î`[ä¿Ø&r\½�á½NÚ4
+
+ò¹fÿ•tvwÓÕÝKoo	]PX˜Ì¼-±l¤dô`¦	óî’¤zÖ×‘ŸŸÃÈð‡eYU…
+ûØøGŽ¡®v9ï}ÏÛMûN2¹‡³ô÷s¼éCCCŒ��Ù®Å�"�Ó>ÎÊþ„2)aXcs"ÓøålÛ9JJ‹yç»î!‘»Æ'&8|ìºèíé5.¼„ª ¥m)ÍH‰7oÌ«Á˜·oÛÂÿô$Ñxœ#ÇNp¦õ•U•ŽKÅ$���D£>þ±°¡~#‘pÐ@HÍ°é©ªÊC?ú)�¿î¢¥åƒƒC,_^mä+t{'™L2Rþô5­˜R~&àB%Õ�iç»×]»�gŸ{‘à\„Ç<I(&/7/EÀØX¿–O>ÏøØ8¬X±Ì„)¹÷¬O]JÆÌtlÎìó–©ÀYÎ_è¢­­�èý¼ãÞ·�GQºžÀëv›·p
+Ž5žä¿¾ð5FÇ&9xð([6m´µ;!Ä<¢ç$Þ•¥¼íö[èìì¦¿oˆGþø¡P�#-]__?gÏ¶qï½oã=ïz»M|±™‘ÑÖ¹ö|ü“�ÇNë3uo,h“tæã]W‹6c�SÕqåçá]¾¥0ÏÚ:\¥K˜zè§¨Þ<*¾üybý½„Ž5Qú¯0óð™þÓf':Šžä&YYYì4ïÆi9}š±‰ÔÜxÎïº”¶ÝAuœ�ŠyjG&7ìBL×‰&«m)�9�'·Üt+V,cfz†Ð\„D<–šPšY™eÑdŸö0%NÓ‰`•íÛ¶ÐÐ°žH$Æ“Ï¼Àl0šÒÓÓËÈÈÛ¶mIö½À¹ÚÒÒ%¨ªÂÌÌlJRS]—0
+¦…ÔiL�”-Ì÷35&&¦8Ùr–¢¢bGøLfÖoXGQQ>CCCœ<•L>�ÅŒEé´y½	b>�¸š–”,!?/MÓxñÅ—éí`ÍšÕxM8šNWw7uu«hØ¸¿ÏMAAùäåQX˜GNN�€�Ý»/£ ?Ÿ‘±1ºº»Í¾t‰ �kÒ�‚f‚SùPÓ#?Ò‹°\6iIT,	Ð(:«V.ç†k¯!47ÇØøCƒCÆc¦ƒ`}ýZòór™‹„éí´á3¿õ¬½!žx’zà_èêéudH°\·µu�••ÍžÝÛq¹T²ü>ü^7Yþ.—‚ÇcHµõkë¨¬¨0ì’��D¢V²¹¯XyV_×\}9u«W153KgWÁ`(…	;ÞD4gÍêÕ¦�Ó°sŸÖw•ššj––�Æè¸Ðe;�“xH–E7ž5kq;î/q)dïÙƒÌxWQ>Bu1òÝIŒ“½qÁW_eâkßÆ]¿Ÿ¨)QìsÜ–MÃ¥ª\wí>JJŠik¿À™³çLdX^Z'Ì*n�a{gÍÜŒNã±ë
+\ó»4UM‹xjæ÷„nµ¯;œVr_(,ÈáÆë÷›ÜÄ��ª“f›RâLIgõgþ•ü.1C7Îòóó¸|×²r²8ÛÖÎÙ¶óö³žþA¼>¿yý¥ÕqºãÂ€iÝº:
+òsålk²
+L¯¥”:Ñh8åw#»Œž"ÝcS�B€PPS�éÄëlëyúzXW·
+ŸÇ�äâ¦××i;®«­eMí*ffƒtvõÛýišqs•Ku¡XQÒ)Ef’§¦1YKŠ.,,$/7‡D,A(Åï÷²iã[â›œ
+ÒÕ×ÇúuIÂiÀêŒ0æ¯ººœ²ÒbBá(ÝI›ª*„qJËÆUjP¼… „ždÖó‹Lã/†%œª�^oºéZÊJ—
+Íáv{Hh1¬P8‰¤¢¼œµkêƒ<ÒÈÔô´ñÌæ#¤×¬K�CGyõàQzzûMð“p9g¿µí<+VT³ÜN7§8 W±œ’>Ÿ�Ò¥¥(B06>•L"$R×ˆ¥9qÓƒ»óóó¹ýö›ñyÜ(Š·êI�ãXcKŠ‹©­µ2ÌûŸÓ1êó¸ÙT¿]×ij>Í¹Ž&¬ó—‹IW~‰ó}èÑ 0{¤‰Éß?Zwe5ÑŽnòÿö~"‡Ž0úÍÿ%ÔÒŠ« ˜hgŠâÅ¿±Þ0,k˜jqª³jår®ºb‘p„ÇŸxŽ±±I¬óÙæv@ÓÌÎÎ�F©©©A5Õ\EB £
+ÕVù@CˆÔ+TÅ¸ÜÊd…%�ÓÉ
+që-7²{÷v¦&'L© ‰S0œ1ªSZp©r¿s³‰žFTvíÚÆªå•D#QxÚv`5�l¡0?�ŠÊÔË¡R%@ã³nu-+W® 4äØ‰F¦g'M àÇíñ
+¹ŽÓ$€‘ÐÄ4{¤Ø…ãÚ„4uÑù	Ä”T¢tôX�€Ÿ-¦�É2ÆÛ’¿£þ’âBVÕ®DAOÏ3SAn!SC°ŽÓ9s&ÇþfJ^nuuµ†¨BUe9«kWÛÏÏœ>Ã`ÿ«W×ÚcuÆÙ:Çî÷¨¬¬ÄårÑx¼ÑtÒ
+ÜnŸaP„Q`�ôrÈG\7Ò+€ãn]7�Iq]
+ƒ¡kš$é×HªŽ–º†ëÎ;n!ž#�£*jŠ™àí÷ÞIaA>‡åá?À�âTc¯è€y‘×³Ïÿ™Ó§ÛØ¾e;«VahÖt®Å™ÙgÎœ¡vUMJ²[‘ÉË]n6®CQƒƒ#45�6«¤T“ÞºEÊþ}{YW·šPhÖ ®&�ˆÆb
+³aãzJ–˜÷…;J
+Uv]¶“üü<Æ'&9ÑxÊÆ‘qKÃ%¨ÛFC±É1d,ÁÄ¯~ËÌÏ�ªÐgBüÕmøêV0þýŸgy9ÌEIÌN¢…¦(¸ï³S�T¥¹Y,œÀ+ŠÂ;ßq76®ã¹^à[ÿó ÝVvR—tvõñýüœÆ#Í”—•ðö{ïL:NÐÑ´8Š¢àñùÐ4�DB#¡	â	I,ž@ÚMG“Z!KM;/LBî÷y¹é†ý¸]*Áàœ!Ý`Án]
+ñ„N"‘ 7þÅbqâñ¸™ÖÉ„ÑLªk|¦NZYY×]·Ÿ¬@€W^=HÛ¹‚¡'Ž7SV^FV¶?¥~*±2ÚÏÎÎbÇö-¨ŠBggCÃÆ)–X,F,C�`0D,7“ÁÆ‰ÆbÄb	¢±ÔÔþš¦¡%âó¤›¤�Êþ]7p­™„=OÐ~þUÕ¬\¹Ü„ÓŒtxE�†s¦¬´¯ÇCkë9ÚÍP k|2MõrÎÓ_R„€-[6âóy‰'4jkWPVZb??qü�@vÒ6êk’`Û%+ ¦¦Šœìl.\è¶O<E£Q�a^³`½Ÿ
+‡ÑF"ÃºÏçIÎ³0/¬sEU5˜ŒnF£ít¦	pÍ¾½,«®0ò”ªI­ÀBß†ú:î¹ëñ¿úõøÅ/fllÒ0ÑˆD5žñ5¾óÝ�Æxë7R^f‡ë¦_À §Fƒ-gÎ222Æòå5¨u[%wz©Á8“½téæ"aŽ7ž°ë+
+)&©LEJ�ìì7ß|-�€ŸX<nïñÞž~¦§f¨_¿&eÀó×�Q¿¶vK–ž‹044’<ãž¢±-v* Ï„ˆ¶œcä{áŽi,ýçO<yšÑo|“x$Bù·¿N¤ù³O=MöÞ«ˆœiÁ]]�wíz—í0+BŠ”¸5'E¯¨(ãÓÿðq>ÿù¯ðØ�§8qâ$—íÙAII	]]]œhl¦«³‹åË—óÀgþ�:Çmv³3A‚³!NŸiç3Ÿý^¯×H6¡º‰E#$ú›¿fuí
+b‘8³S3D#f²×y^^áàÍ°kçvîØÆc�?™r"H×4&''	G¢üøg¿àÅ—^2³³ø`(Èòš>ô¡÷“Ÿ“M4fll—Ë…fð÷�›eïÞÝüþ÷âÄÉžñÏìÜ±™æ“§¸ãöñ¨©q‚éª‡UÖ­­CJ�¶sçèîê¥®v‘H„©ÉIbQ�gžy‘¶sçQA\K›P—ÌÍ…¸ïwsãõûˆDãŒŒNPT8f‡bŽ-«O‹ËÁ\(ÄÔä8AÓ–::6FË©SìÜ±ŸyÌÎ"¶I“—Óö+–/#;;‹ÖÖ6^~é5¶mm �399Iv–×z•ÆÈþÂ²zõ*|~ƒƒÃ”——cE\$§šOQ]YÅòeËì>3áÝZ3›6mäáGÐÛÛÏ/¾Ìúuk‰F#D"‡GùíÃdÅòeF0³Ä¢QÂá0Õ••ì½ò2¤sss$txâ©çikoGKhXg·ã‰8uµ+�³ÇŠB$a.rœg_xœ¥¥%ÜùÖÛ9~â?I1YãºÿÝï ‹óÐ�Áw¾÷#;ð+WÖøèìê¥í\;R—¼ó¾»xÛí7ÚmÇâq3•[È-:xð(R6Ôo°»±{²]·	`Í²*Ö­]Í#|‚³­íÌƒ T‚Á�ãxñÅloÏžÝ<ýü‹<úØsD£Æ¾zåõƒQf%+Æi›DÛ¸3™]V€¼¼<&''9ÙÜÌØø8%K–B¼Á‹I5?utWq.ê[ö¡å�{í^Šÿë_þÔŒ>ðŸ”á‹£à IDAT}ëKx
+
+ˆ�Œ‘{ÿ;ˆ½òþk„’ä$šTQ­P˜´Ù•R²iÃ:¾òÅãÅ—_åøÑ“¼öÊAÂ±.�‹•UËyë·°÷ò]¬^½*åÝ]»¶¡K#7^"5®tP‰˜†×íÂð˜×eJj–UòîwÞmgr.œÔ°cz½7ï{Ï}TUU°bùr»Ï¥K—pÿ»î!Ž"R1sN**ªËEh6ÄÒ¥Å¸Ì±º®–wÝw/±xÜVåÀäÈBP²¤˜wÞw7õõkÉ
+�ºä£ù û¯¹Ò†/]åKÇáêÚ•|øoÞÏèø(ÙfÜjUU%wÞy¡`ŸÇC$Fu»HÄx=>Z‚HxŽ3_"65¬çÿ}ò#ääd“ofN±¢	œ]ºÝ.n¹ùV×­b¥™KUî|ë-lÛ¶Õq×	6ì©86~[SWËG?òÎŸïfãÆµ€d×®í9ÙY,).6ßÅörþ¥áK%K
+¨©,c.´Óg	¡0>>Š®ÇÙ±cªj
+ÉtO¹õ}åŠêÖ¬bÚÌÂ
+�W�CII!^¯�^|…ç¤‘Jšc˜�™eãú:ö^y~_€‚‚<b	�×^�W^}
+‰b„”Œ��qûm7°sç6Ü.…¹”•-±/*Kg>éžé}ûöråå»ÐdÜ¾¾Á€]i81>ô�ûY»v5Ï>ûgZZÎp¼Ñ´W¸zß¼åš«ØsÙœ#;`IQ>Eyv»3ÓS4lX—Ô �ë6SŒu›\GÆzÞ±u3/¿ò:ñxŒ±±	²²³ÉÏËqDÌ/Ò¶Á
+rs³¸þÚý;ÖD±y9`ç…V¬\Æó8lÒ¼G
+~¬øÙµ}ÍÍ§˜��áTË®Ùwå¼~…\D‡Ñã1³sÄ›èýàÇÈ½ÿÊ?û¤Ÿ~€±¯‘âOþ3_ýwˆGÁí…X< †ÄcJ!è©š!)N{X—™D¢1F†‡™›ÿÿöÎ;¼ª*ëÿŸsnËÍM/7=$�@ �„* ‚‚
+ýéŒ:Ž:–×Ñ×2:£ƒŠ:vPqD°â82Ê¨XÆ
+D¤w	-!	¡¤�@z»7É½ç¼œ~�™çýçý=ìçááæœ³ÛÚk¯½öÚkv§ƒÔ”dË�dÙ¸?zš¶)Y’-7u¬.þ!;#ëE¥ÿw!¥úª?ëWà…xù„ÒætÄ$HBì�Ú¡€­Z5k÷¹:$ëS?Ñ•åÓr}Ú`6-håôEÄþwRmÍ1|~?iiÉ„……�¬Äd©ª­Á›G¤'JÝeh¦ýÓSF¦îX=í]]„»\¤§¥r¼±�ææV=¢¡"$4I¦hS‡“¬Ì4ºý½TÕÖZ„¨èæÈôt÷�7!8ÑÐŒßï'%Ù«^“íK„Ðv666âïî%%9Q´ëæ´Pÿ.RU]M ¨Øå�tP­·Ê]¬æ–[p:í$'%ât†QSs§ÓAbbÈ’j¯ÖÛ¦ÐÕïï¦ªºAHIN ÌFum=žp·
+tÜÏ Ëj[EƒG«ªˆ‹�!**‚ªê:lv;i)I†9ò”¼"ÓÑÞNý‰@"6&š¸8#«¾ÀËr@–±¡Ý"`W"ƒ$±Ó[]Cõïþ›Î-;Hž?‡„ÛoAêè¢úö{iúp)ÿxƒØ[nÖç·,+1sl#»¤éßÊ?s'´‰pÒ¹c¬@šò,ô+€N’_ÒæuHø6MÓ5¯x2JbÙ4É5¿¶_²�˜·EV›ŒQèÑ û”§¡&	ýËZkm!ehû�Ó¤’‰¥­m
+m›Œ¤£A+ÅK*EkV�~þ�MBîtÆÏD0ÑKÆXM4šSñÏIÆ¬2cßwa
+ÕÖúÖqºÀ!§Ï»ýoïþóŠkæq@2ÿ;Éº²[é ñ»ºCS1eûçM+ŸœŠ>Ê¢Z|p%‡¤÷IáQ³�°±ÿ·.²'«ÇJ_QB@Pã[KØôl=5G9rý4²Gz©ÿ˜�cHuÍ¢õ«•ˆá¤¼üÑS§RýÀø6mW‹WdCAÝ	
+šš,‚:¹tÙ©¶O9l•0»[(¹Ì˜wÆê$ XC‰×Ÿ�V2y�›·­
+ °ušKEÓ ˜Á‚­±lÌåÉHF›Ð±û�‘´6+µ¬“µµþÓ�HÚI½©Ï'�–ºôŸÀ†y;"`$ý©}'#)L§º{èyÕÅHßpiuÂ ¡IË§öE6Ó@V´1´çFÛ•fX0¡AÙ´13×¨oÜú%“ÙkA�èÊÞ­ï¶MF½Md�îÏ#@/Góm­PÿGã™V»µL•FHýn#Í}0œ©Açã“Æ²1òFÖægÿõhuY
+uÎ
+ê¶Wãi�èZy†7ÆP|³|°ÑçÌY-üÜGàêsNûH©GÖë4—%`ö]í$Q°¡]“‚ž†&º~ÜÀñû¦sÝ\ƒ‘öæË8<.êî~�ŽíÛp$'‘òâl\Ô?;› ¯SQÊEtíP”•­¶¬7D(:eUBZo¥(�4ÏzeH™”ÚVÈÐC#Ó©÷¡Má>†ÖôP}Gëw¦î‡ñCk§â¨°hF?E}‚ŠÚÀÉ¡ŽÚVAÔ¯ÀüY©m£>0÷¾è?V�C6Z`9
+¥�’EÐûjÐÜÄüÚ$”­M7ÊÑõzÔ	¬mÑCµYYFÔ˜W•¤º@UÀðÔzT¡h¡¥²Š¦hÍÎj„DÕõ6aŒ’ hÐ\‚Þ,Ä¾ÚœÖ×Ðò:i;3-Ìüe(jsMZ¬â®c¦ÿ©Í+V�"˜o«àåEs
+[ÀÊ?¿¬¨ß†~#ë�ÎôZ0ÓÂz*®Íet“�â¯«ÑÞpRE¬©­fA:û¬rFÇ�3}&Ê(ørUüûËè>ZMDQ/Ï&ÐÖLí�÷ÒSRFÄ„³HúÛ\�»{=GŽ6²€Œ%oÑ½w/­Ÿ,Ó+Ö;¡2„ †šož<‚i£'˜'�uòÇòfA©½,
+½ê¥ÙÄ­RczU+Õ+)„ù$S[Ì¿ûö#¤Rë ôÃÌÖí@h¾“¯ðJþ“h�rè"ÂÄÛpˆ@2=³hýT£­º®¦
+k3½¬˜êÕ%”ÚFÁD#�Z±ê{CsZ™Z[#ü¯§çP!êý µS´ä7Ê¶ôG}®Ãœ	‚²@«ýúÍ²ðêÉ@ÐêÏßO�Ê@¸†Pê_Àþ²µÆj6ûNö÷mŸöÊÊ­°¾y4¡ØÏ¸ê—9Ô§‚ÑMùÑæ‘ÑGƒç^]8Ô÷‚L¨¯¦íé§f>­Ùûz++©üõut|½’ÈK§>a,B|<ÍŸ|N÷–mx¦LÆ3n,¶ô4Z—¼O×†�Dœî¢œ	)ø7mÆ3q,¢Û
+‚æ”©	JåŸ1@Pqè0ï/ý„*È”…ÓéÔß×Ÿ8ÁÒ¥Ÿ²mÛÏ$%'¥wº§§—5k×ÓÔÔJjj2{öî§¤´œ¬j‡|ýÍw|½â{v;i©Éƒ»wïeÛÎb***	$&&¨“\`çÏÅT¬$#=Ýt"§ÄªYõÃdY&>>Vo§ @ùÁJÖoØBå¡Ã475“’’¬RÅÁClÞ²•ÒÒrDÑF||¬Nü`0È–­Ûi8Þ@rr’eP›Y¿~Á D|üIÙ¦ôóî=ìØ¾‹ººzÒ2RUDxƒÖ���ø|~ØEIé~Þµ‡ÌŒtljŒ�`0ÈÆ�[©9vŒŒô4öî+¡ô@©©)ª£°LuÍ1~øñ'©æhU
+³3õ5aûŽ�ìØ±‹ŠŠCDÅDáñX&A{[;kÖmÄ×å#É›ˆ ó”(cëŽŸ))-££Í¯àUÁX[_Ç»ï-eI9fár9�}ûËØ¸e;‡âPenw‘‘Ê	iuu
+7ogÿ¾ø»{INJDç=½½lÜ°…ŽŽ.¼ÞJ”³¿ô©)É:-´v·êG¾ør² 8kÀñúFÖmØLyÅAJTÐÙÞ®Ž»@KK+6nÅî&""‚�›¶ÒÜÜB’×«L@vïÞÏ¦Í;¨¬<„Ëí"&*Zãî?6mcoI	ee•Dx"‰Œôè‹Äîý%|üÉÔÖÖ1dpNÈ"k5	47·²aãf<ºçƒ¦k™¿mjjeíú�TT¤ä@%]¾¼‰	‚@k[k7lbÏÞ}4«sÎêÏ(ÐÐÔÄW_C„'Â·Èï÷³~ÃfN46“âõ²gï>V&==MÝ‚tù»øø“/YóÓF’Sˆ‰Vh!»~.fËÖŸ©9VGtt´rˆ«Ù�ÞÞ|ø)k~\‡'*‚$µÍ-·nû™;Š)?xˆ¨¨("#´0ºAöî-gÛŽ�<|ˆòòCDG)§ëf`—µ]€˜˜HÔ´©4¿öwjÿ8�ôÅóI¸ã÷HÍmÔ?÷Çî}ˆôwÃ5ÈÇë¨t&5=Fæ›/}Óoè•}tUV�&°eõš“zè€Hñž{ruuÇÉÏÊ…SÏÇã‰@ ±±‰^x•µë6#
+"»Š÷ðÄcèà
+~¿ŸE‹–àpŠ,Z0�Õ?®cÓ¦­œ7i¢Þ¹�·òÒË‹¨¯o £½“Ñ£”Ð¦Á`€/—¯dùŠU ¹ñú«6tˆ.‚>ÿbGŽT1~ü8Kd¶Þ@�yórÝõW““3Ð²‚nÜ´�—^Y„;ÌÎèÂŒ]¤ÒÆ�[YüîR¼	ñ´4·0ãá{¹pÊdzz¼÷þÇÄÄÄ2rT!æ´eËf=ó<—_v)�?þ¿”–/ÿžï¾]�Ý&0 ;�ü3Ã‡
+Ñß¯ß°‰`PæÊ+/×ûúýªŸøæ»ÕŒ?k¬9ÕÓÝËâÅïÓØÜÄGKßæ»o`ç®}ª÷Èöî+å±'f£¸‚L=ÿeªðÁÒÏÙ±³˜˜è("?þœ§žx�Á9hð¾Ò2žxr6çNœÀìçW„�*¸V­^ÏÇŸ|AScO�ÊèÑøýÝ¼üÊ›¬Y³PÜG†©}[ùÍ÷ücÉ‡$&Ä�$ð—GþLª4m÷Þ^{ýïxÜnZÛÚ¹ç�·q¥=Óïëáo_Baápòó‡°zÍZ6oÙÎèQ#uZƒAþñîRÞ~{	¢ÍŽ+ÌÉøqc°‰"TòÌs/!Ø:::˜:y£F+×H«kŽñúkã¡")ÉË;K–2 3�áÃ‡éæ˜/—­dÅÊðzãp»Ý<òð}zà±Î.?oýýŸ¬¬ÄßÕÍóÏ<AjêŽÕç¥—ß`çÎÝä
+Îáì	cðz“Tú}þ?r¤š×æ¿ÉC3¦ëÁ·4�	óBp´ª†çgÏC´»hmíà’‹&1,o.—‹šÚcÌyq>QQ‘twù˜<yÍ¸cëÖnâÑÇgñÐæŽÛÿKïöö¿ó-­m,ùÇBV¬üžÃGª7fv‡Y€Ï>[Î«óÓÛÓKjj2”«�22Ÿ|úë×o&:6šAÙÙ<úÈŸðz÷­Þ@€æ¾ÂŠ?"?ü¸–9/<EÞ�!zÛ>üð3vì(&*6Š�>ùŒ'}€Á¹9HA™¯¾^É§_|MT´‡®Nóæ<ƒ×«,¤fÚˆ¢v²)KØ¢¢Hž=“øÛo¡õ³Ï©{ôIzø>’î¾ƒ¶ï~ î©g  aúŸH˜q?íÿZFíô¿ u´ó�„V·JœAÛÂÊ(Û?”ß¯¼º�Ø¨hV.ûó_û+^oš}jãÆmlX¿•Å‹ç³äý…ì+©`ÕëtÂËÈ8Ý.öî;ÀÁƒ‡p8Âú(Z?®]Oltë×,çOwßªßhkkcâøQ¬Xö!·Ýz3}ŒÌ[BmëoÝH™·F]íÌNçÝÅyöÙÇ_;Õ–%Én·“¹óž!>1‘W¯)ÅŠ#©¥Ò²2Â#¢¨¨8H0ØÛç}hòû|ä
+Ëañ;ioóñæ¢ÅøºüúûÖÖ6Z[ÛBL cé¿„,ˆœhnaÇŽbœ.·Úã›Þî^"Ýá,xõ¯¼³xÔÉ5¦�9/Î¢¸xÅÅû0§²²rÜaŽ­¢³«ÃBÉ` H\L«¿ûœ'Ÿ¼_‚ŽŽÖ®^Ç}¼“Ußü‹ììL�xÜ~ÛÍL¿ï.‚‰…æ2éÜñh+t0$2ÂÃ¬gÿÂ¨QÃùú«oñ©1M4#†f{‘%Éd°/+¯dÑÛïrÃM×ñõ²¹õ¿nD¹‰*1v\!{ó%’½	ÜzËõ<úèƒ†mSPÎZµk¨ê,°Ð!�“›Í‹sŸãÈÑZ6mÞf‹
+'¸æª+ønå¿˜|ÞD�þe¥åìß³�E^äí¿½‚Ç£iF'7ÇÈ’2?Ì¦*Å.9lh.¼„ŒÌ�7]ÍƒüQG×€æ¦î½÷N®¾æWlÞ´MSQ
+
+”–$sÀ ö•–ÓÕeÆ
+»ÃÅá#5”——£Dý6)==¬\¹š)SÏfíš/¹`Ê$V‚D·¿›qãG1ûùÇØ¹sk7t*--gÍOxòÑûùjùDÆDñÞŸkTTÚ&õ2jÌ^œ3“]»öQ\¬\?m6þð‡ßsÏ]·âïòóúk/0zT¡nö1k’¢,Û”sHAT4¾07I3&æ†9¾ðMN<û<I�Í âÒKh\ð'^ž@Âô»‰½ùFš—¼Çñgæ€, †¹••J�±™ŒÒ2AõæF]Ý	N44qÙe—�˜Kdd„z×Uùv_Éòò‡�—›MÞ 
+‡QZfo�ÁnˆŽˆbëö]445àpZ!–’¼É457³³x1±±¦hƒàp…ÑÔÒÂÚõ[hkëŒç¢Í®ÜÉ–­X‘¢Ýnñ·ÔËsºðûýlÝú3Ç�7*åiŸ‰¢ÍŽ¯ËGPè‘µa´	¶>6™®®vÊË38'›žÞ 5µV(§þ’(
+ˆ�Áo~s9?ïQn2¨)%%™ÔÔ$kAT`Í(4‚€Í!éñðõ7«q†)àÈæIn³Ù�™�»vsèh5&k¤²U• £½—Ë¡£~ôôvSRz�AÙØì6…F-Ûf³Y³v#GŽVëÏ‘Ñ‘ìØµ»ÃŽÛíÖ•˜èè(¼‰‰Øl6ÒÓ’•wš—‚zÅÏßå£«§‡0·ÛXúÁ&ê8Ÿ¢v›ˆhZvîø™¬Œt®úõ¥ÄÄD©”²ÃÂ\¤¥¦àr¹Hˆ�#^‹¥‚×È.èî¤Jl›*DÕE×nC•[O6»ÍêŒ€;<œšÚz¶ï(V¯¹ªp~q±¸=6oÞ†ÓéÄãñ¨Ãv»¢(`mØB}s] ât:HKSL*	±±ÄÆÆèHF‚ b·ÛéõwÓÝÝƒÍ¥`&ãààÁC”EMÍ1šTD/£™¤ÄxV|û£r¯]4TAñ&'RVRNÃ‰ÄÄÐn"
+Zy  ±±	p:·ŸÝ{öŸ�È¨qEÄÄD3vÔ”–«oU[°ÍŽ,t¶w(¬nÅä 1ÑÑ$$Ä#Š6ÒR’	s©öH+�DÅv(#)Œ#�èM"mÞ,®¿�c3gSÿÂ+é!cþ\cÆPýÐS´|ô)¶Ø’^zšÈK.§~Î\ç,@îí”‹ê²‹×z›q:m¤¤Xcïj©Ëç#2Ò­oM¢##ðûý–o|]ÝŒ›0šúã�ÔTÕôÁv¼ò×ÓÈÊÊä¾é�ñÅòoLo$ÂÂœ9RË[oÿ“òŠr} •¤}ô_2‚~rl¼s:�46·òÁ‡Ÿ²iÓ64Ý•¶¾Nwß3Q–¹ö·¿¶´A
+Av�úú&Ž=Ê%O%2ÊÃ^Sˆ‡“%å¤O™ii)J(\üÓ…Láâ‹.è“O?ÑËY’;f$�
+'(+;ˆËfÉ#ÚEü½_~ñ5ß®\…²åæÍ¶ÍÛyä/³¸lÚTÎžx–ž¯µ¥ƒe\xáÒÒSÙ]¬Æ9$=¯Ï×ÃÂEo³qó�ÊQQ‘L¿ïü´z·Þv/�M-Š¬jOÁ`¬·Í&ÒÖÞÆŒŸ¢úh¸ëÂTa¤ˆAuÅû"Ç‰‰Š">.KQýVRë5ßí7Ê-‡dæ�Ê›È�½eÌ˜ñ$g�Í´‹§š¾•ñDxØ³w¯Ï_DKs«þjÄða\sõ¯xûí˜5û%|ê¼8™&)#)Ø	¡n.ý¤@ ÉrŸ_+;>.–ysòÅË¹ùÆk‰��ÕiU[{Œ@ —©çO¢±©‰cu
+–ü>Ÿ�s'MäÈá*šô[H»�;n»‰–Övnùý}ìÙ[b¡¤Ëíbû¶=<õØl&OÏ¤s~êìêÄá°ãVï¾‡{"ðwûÕµH‘ÑÆæÍÛyø‘™\6m*çœ=^=|Óx'úKíÜÄœD�F=¶ÐÎXd°%%“¾hñwßEÝ_ž¢aÁ"ìi©xëu<Y™ÔÜ3�öïWáŒO$sñ|<\DÍÌgèX¾B©JU£¼æÎ¡­2	‰qt´uRYYE):*‚¦Æf}Eihh5�d|>£F� >.–šÚ:CRÝ<âãbyyî3\qÙE,XðGªªÕ×6:Ú»=ª€w¿Î„	ãtâ(íVZª]Áô$D] +©Ï×EFZ2óæÍäšk® Ï)¥( ˆ6ò‡å3Øt÷\SíCåHU�Í-ÈØhïì¢ô@9¿˜Ôm @ýñã‚ˆÓ¢]kÛJóÄÕNK­'²’IÞFÏ§xÏ~\.§I×†Þ@7án'�?þwßu«Ú~ã}l|íí>ŠŠF£×YüÇŽÕ#Úløºü”ªðpš›M0 :ÊÃÒ÷þÎ
+×]­–¦x\vÙEÌ›7“šcµ|üÉgÈ’ÉƒAåÛ>bB›M@t8œ“£ñÒJU=_´ˆÝáD–Õü¡¤ø¸XN4ë !`>15ÑR¯Xù!É€ €ð‚z‹&(«e«“S‚¸„ºººÉËËÅ›d€mÈ²LsS#—\<•wßYHZš»à�wßÆÌ™³vÝzV­Z£¶K~ãô3�(§H‚`pgœ�K²„=ÌILLL™¤Ö£|µk×nz{$‡ÍN¥	Q©¯»§‡œìL²³3)«¨Äf·›%‰¡C‡ðÎÛóIÏHåå×ê‚zº{ÈÍÀ_ŸŠÇ¹Ÿ˜˜X½ÞØX%Dm§Š­ÐÚÒ® Haõ2ˆ‹�¦½ÓÇˆÂ|bc¢±pŠ È9tÎš’¨ÅYå€]±1	Q‘¤¿:‡”™�S?w>M}JXQ©‹^G”Ejï�A×ÏÅØR¼¤½6Wbí››APÐ!¡ùu�@r²—áÃX¶ìÖ¬ÛDumÝ=†¦XTT@eåQ¾Yõ#ßýðûKJYd
+ê#ôƒ²ÂéïîÁç×´&åä«âàaZ[ÛÈ˜M{»�ööNQ$�ÀŽHo·5ìƒ,@§ÏGyùaê�›VDAqhohl¦öØq:»ºŒ<’€ ‰8�@Í1 (K¸\.~wÝUlÚº•òŠJS™¢	úÊHG«jðû|üó½¤åÓ’‚, ‹"{öàƒ¥Ÿ2fl!11‘FÍn4jÒÐ‰°L!ªËædâÙã8q¼AYùÍóNRÆ2k@qq1˜cª%™¬ì&NÅ÷?¬¥³Ëo:¨¢»§›¥}LYy‡Õyj{T¿7»Í†¤Úa•ƒ?»Š÷’‘™FrJ2
+
+�VÍHP´¹P_×`@"*:†ë®»’uë7±}û.=‹ÝnÃí	c_Iå‡Ø»w?¢(àt;’óÏ;‡¦ÖÞ|ëm*¡¾þ„5ò¤²døçi$r»�øºÚÙµwû”S[W‡ÇãV½ÏT[YP"%5™É“Æ³~ÃfZZŒ8D‚ *·Ä÷àï1v'N4PZZFFF.»“&5œ…L»6A‘æ«­ý9„„”ƒ²	¯Uë(´vvò«_]‚Óéä³e_écpðàj�ÕñáÇâówQRz€ž-£âUè•¸à‚Iœ8Þ ’@Vé SZZ�Óé 33�¦†vzUÀ
+Y†@@"--…	ÆîvëžcÇŒ¤¹¹™¯V|ËŽ]{Ù´yg�e¢�²Ë˜=€‰ãGóÃêutú|ê\V»f
+2¨�kÈß"²¢=‰r@ñEåÚ™ !ÛíxŸ˜Aæ‚y´~ºŒÖïVqñy$Î™…ÿÐj§?LwÉAÜC“<ï9ÜgOTé-!êšŠ¶‚Î§¾ïN¢£#y~öKÌœõ-­“LžtÓ.¹ˆW^}ƒy/½ÆÄ	£¹tÚEF'EMïìì"oH.i)IˆX¯Jüòò
+þ<ãqÞ]ú1W\~y&pŒ˜˜hŠ÷”pë�÷ñÉ¿>·°ŒÃáâhÍ1î¹÷ÞYò¾Á>‚€3ÌÅªÕ?qãÍ·³g¯q áñ„SS_ÏŒ¿<ÉÜ—¨‚GÝn"n—ƒ©çO¤½½�ï¿_ƒYâØí‚%\ˆÏïgçöb.�v!_ŸÃ¯®˜F{{'N¨ãý¥ððpªªªyô±Y8lþt÷ízHÖ“9ÛDG?'6›ˆ(Ú80›üaƒ	ôöZTQ´a·Û,&Ã¦+áæ7W_Îæ-;tÁÙ¾}'ãÏËóçqÓ
+¿¥§§›#G«Ð‡Óá £ËÇ�·ÜÉëo¼¥âI
+‚ï,ù�éÓ§³­“Ë.�†(š.ãt„ÞôP¸Îaw0²p8™™é¬üæ}Kîæ¢‹Îã@é~zø	JKË™xöXõ°BéÜÿÝlßº‹û¦?Ì²å+­¾”²„Ý®ØØLÕ’5`cF�»¸àWJIDATä‹Ï–óèc³èö÷páÔô±Åþé°\uåe”(gÍÚ
+–þ$zøö»5\÷»ÿfë6C¸·wv2÷•7xüÉçÉÈLeêÔó,c×÷¦�„Ía”&AÝ'ÉJà.K¤E5½Œ,ÎÀìl¾ÿ~
+½½=Ê6U’()-cÊù“xsÁ+\tÁví.¡K? pÚ{ì¨‘…ŠÛ—IëEXóÓ:þû®ûØ¶}¿»î*"£´à`6;H½²PY�•ÜY™éüöÚ«øèãOyêég‰ŠŽàÚk¯ÒiŠy:Òãáš«¯`Ëæ�lß®B³'×Øí†OfsÅöôÓO=
+ˆŠQnÌ(ë²¬ØÌqåæàÉ†äóáHOÂS˜�]i|ïüÛv9å\<gOÀ��…lWN±EYP„.‚'J'~tT$Ó.™Jff:…#†‘;h ºÅ
+"Š6Î>{<22˜tîDn¼á·ŠQUk´(’””H~ÁPâÉLK£`øP²³2õ&&$�œ’ÄÅœÇ
+×]¥ƒ�ŠDÇD3lè`F�,¢ `ÞÄx�y"£¢>,�qcFRX8\w'ˆOHdÌ¨Œ*AÁð|"UÄ�'œÁƒ1fôH†/ ##Uß–…‡»œ3�á#ò^P@rR¢â³)*v¼ØØXò†’šœ¤2c‡ÍÁäÉÉÎ@ZJ™™é$'%êFú¾Ì
+‘QÍÌÄ³Æq×]·*[4UI<™QßÁÐ¼\r³bSQÀQ >!Ž¼!y¤§%3(;“ÁƒsÈÎÊÐiæ"77‹aCrqº\ÆŠ‰Ž¦ (#‹
+È�EfF*		qÈ’Œ$8çì	äæ$9ÉË€i$y½D« ÀyyC(*ÁÈ¢BÒSS‡ÓFVV:ii©ÜuÇÍä
+ÑÐ””ºÃÃ”;�¼ÜKà+W˜‹Ì™Œ,, hD>11‘dd¤©ßÍÂØ1cÈÌLçª«þ—M»P�(*ÝÈœÃùçŸGzZ
+£G�TÁ”ºm6o¢—¡Cs‰‹‹ÕÍ¢(pî¹ÈHOgX^.wÝq+ƒe¢Ùd¢£¢š—ËÈ‘…ÌÎ"3=o’WQ)D‘Do#)*N~þ`¢£EFzHKO¡ `(·ßvIÞDmVésËü¿Ãå ==�¡CrUþ9ùv[m¤¦$Q8<Ÿ¸8ÃÛÄáp(.LùC)Q@jj*IÞ8\.>ŸŸØ¸XÎ™8Ž™¤¥¥��ÇÐ!98l6‘$oùùyx40‹üaƒ
+?I’SRHIIáúk¯dÊùçXœÍ£c¢6,O™3ºM×YWXÀ�Ü†ã¶ßß¨¸9é›#�ØØ
+†
+¡°h8YYdd¤‘¯S!,ÌMNn6C‡ÆépZ|Gµ$È²$Ë²¶UFG60!ˆ„ÍtaHœÁöNÚ>ûÝ1â®ü5.
+ÕåA@¹ò¨:K*«v8‹ÔÔ“æM/Òw^G'BÈSÁ”[q4µn!û–ú®o´¸ÿ�dÞür[´ßý=ûOêQ ±N#»ZÆÉn>'ý³ï§§×ÞÐË}FÕTèIøDã)%õ“÷šÒ?ÍŒúôÓ×~ê7nFY9QCÊ1’ÅP¨lóÀ‚­j­ýdt8U:Mšÿ»ßêŸž"OŸ~œº|ë[MÆ„ò�é«“L�~Y"´\NÅŽ¦oNZŽ‘N	•vªZÁ¿3GÎ¤3éL:“þ¯¤ÿ/É0
+Ÿ�gÒ™t&ýÿ–þC!©L˜Ä’|Z!VÏ¤3éL:“þ/¥ÿmÐµë{04ÁIEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logo_horiz_bicolor_gva.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logoIver.png
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logoIver.png	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logoIver.png	(revision 10281)
@@ -0,0 +1,161 @@
+‰PNG
+
+
+IHDRW2)ñG…sBIT|dˆ	pHYs.#.#x¥?vtEXtCreation Time09/02/04&!®! tEXtSoftwareMacromedia Fireworks MX»‘*${prVWxœíXá’›6ÆgÎJk“ØÉq¹;¹H˜“+ìÂÞ‰ßy¿L Ã»ô
+šî®$ä’œn:öLG`„�ø´«ÝÕÊýóçßÑ—èËWDÇ×®ë¨ÔÑÕu':¾ž D{jÛöÔµ¶ÔµtkÛŽ¶išÓ©i»¦=5TÏ
+Ýš&‚£‰¢¨í¢öµmÔtQsŠš6¢wð"¢[@@@@@@@@@@@@@@@@ÀÿñŠóÍâjôÀ®¸æë+Ño4W™âJóøô+ ùIì
+ü@‹'ª@o/O¿FÉQv¼—.Î�ì™B)/>¨|ÅÑþpŽç_k'?Œa_$—ægÜŠ?ZÔ—÷€�Vfà¬/?ÿä€
+­?ã²N/O�0S ¯">˜@Z–Ù^ÔW¢‡õïƒÌ�}3¿=‚16»5²/³EÄäí¨jÚuˆ7ð§µT9?X 9û8Àl•¬_ˆLør|H™zG°Ô±¦Qb¨lIíÞºÝÄs—'03´ u-=G�:	S#­ùÎà¥4/�oùiÃ	+fùíjyJý’ª~Âú'Š~,ÖgUŽ¯rP[CŠýØlí<\G?ììÅŸâ¤±2$yÏÅAŠGmó$J¸Þ:ë8ÿ£¹z.QJâg½BS7¶Ã.—B¹BˆCUâj�©»YÔž$,Iœ©¾h«?à¯PÅ–2íÕH2Ô¨˜’«'ÊR„¨�…Lï·”°ýñ>ê­Ž>Äzmøñc¯ÜÌÔAßxWå; 7ô¶ò‡µ¤t’¥^bó¥ùêOøíü“ÄgƒÇW¥ÉOÄ±–©™×øŽ´Qæ¿ü¶;½¥W‡¯ýÕ€ÄàÉL€,¤Y…ìÙo– }Ô?´ølé
+Ò;�=ÄŸÞÿÌ™1”Iô–}±2«5(ãåNJRAŠèÀ/
+�BÌÀ§Ó(-O4õvF«Gd'?,s ´=Ú˜ƒçð3¾üµëè".hQJ3÷%¤¥‹%ì´ÍT8—	¼u7?Ä½— óª{zd}HOÐïQ×B"7¥¨f£f£<ÃÈtŽ»6ø •cÅõ‹ xþ“Ý`ð3ìŽÈŽ,LrÇ]ŸžH{Õ™ç¤€pX@�(¹Ñ¿;E¹;ÔÅñÁé8–ùÎ*à¡—ß×ü§óR…ØgÆÊ•ÙŸ•¢”UqÜÉ‡�ýÎAþ]p§k‡ÿ ä³ÕÆíÆŒîá‡ãnšLò†j‚õá€Û&6ùÐëùGþO6Î'îlÏÍÄû‹¿ÍN’½<Ü­¹Ž“~íð•ÿl±6¾…CP¦Ø†ÿ�ÿfheÞgÐ,4í
+é-ë¿�¶ÎJ\
+°løx®ÝßËÉÿSñ
+û5Ö'Ÿq¾ €;oðæ7*p�øˆ–
+¿[û÷ˆÞ>mÖ«%ëÍšv¬&=£gˆ²®Å}eùýÖ¿±ÿ¿[ÍÃjA‰O¾ÕäÀ2Jà,µÖ¥‰�Ë­Àø›þÈpzòkåÏmö4¨Ú€›3ODiüÐl“µ“ã�¬Ž;ìž’gœ×Nþ9màwvÓ×Ñ3›™
+K¥ˆ2ÏöY'ÚÈ=:eßJ·sX7½6r1[Ä‹ÛÞØÂ1Ãº\lq{³L¥1-´	`§ƒÂ6Y™®çŽö+·>¦âÌÒ…ÉµR”bÛ:°1zæÏJïK€ÀK•{lùÄqu°)¹í§LÍ=ùÕ µ·ÔjT£žÇ§aµ£f¦¹¿•[�îzP1�pt)5}þG=¦±ë—ÙÕ¤Ï`˜túÉ?‘fª5•n °žŒËÞß ÿÉ'‡’Ž1Ôõ„½W÷âÏLháÜÝ]Y½Pþ^»I{þ€€€€€€€€€€€€€€€€€€€€€€€ÿÿÈÑ…ò¤@ÎqHmkBFúÞÊþ)¤3¡ëmkTSxœí][sÛF–Æ$ãØ’eÙN¶2û¢ª­­}JÁÛ#)Š¤bRbJ–óâ/°8‘%�D+ñ²øcç7ìØsN7@ Ñ¸Š)¬²¢qéþÎ9ß¹tƒê¾©ßÎ›ýýé\[ô=šÎõQa2¬ŒÊ‹³Î¾=WïØæíaÃžWÊ‹öáÀžÕEÿÀ´çvÌ“)´×[p›þ-z�Îí¼Þƒ_ûµÁÍ\ÙR†ÊHy¯ô”‰r	{SåbqxÔ…–¿AË%´hÊOÐ:Uþ„3.”=¥Ggðù'Ø»€­¥Ü@ËxÑoñaµ#zfÍœÎ“Ê¢Þ8Äþ×»]èlà°µ¨›t’Ù¤6³M›z‡ÖßÐfÿˆßà IŸû:©Yg›><bÍÞt^--êƒ:°»Lö�.»ÛÖ†pÅ"Û2r êª&èk>Ð}å
+dz¥\£DAÖÞ3½Ã.ZlÜz‘�Û`ãžøÆmùÆ­&·š\À·&·iþ6�—J³wŒÝ´à€³Ó«³“o{þ™m“!öœ#Ö¬,å“rm3e©R�Ô �F‰AUHÝ¯R˜4<À42¸p+�ú£éU†îxzÆª
+L•‡g‡ÃÓ†ã×¤Jh½¼/€RXOa$³ž-J3TìÆ¸ÃP5ÛÈ<X©6¤¬–h°/ríÃ°?Ã±q¬H Ý;sãÊ¥û2 Ý;X”ñ�ý^fïð!×`¸×0°:üþƒ?çCÆ‡¾„$j°Ø
+ÏhK.µÇ·bDQ™gÀã42&‚CÌ}‡½"†ƒi qX²ÿ´á3ó”ÑÀè25ˆÆE«rdôaõ‹È¤"¢öØìrlöA.(òûàú¾/Ÿ-�Ê|„ý+å*:\â&¢“‚¦éC‡¢Ê€!ãC`ì¨è�»ÅBEgÈ´qj$¢�§<f@TF‡ÉŠŸE�zFžH#ø>´Ið—‘Öª«ñj™1Éˆ¿ã#~0“Žµ,(¹à¢\=^ê­¾âÑRLq_=“¡;êý+PàÏò!`ÚP€ÀÉ‹T†Á(ŠÑDã%N®ÃƒúD�<Yøë³s—½ˆ<w9§¸gúm¹©À–›<¡3@âû’ˆô¸>húHªí•Gé
+Àà“Åu¢06â‚GÝÉ8}¦Ç¥G8‹Ï�\l#�7°o€./!,®ŽpXÈmÆ¡‚`˜Ž¿D%aŽÓÙAœ˜çtvÚÜÂNù¶Ï¤„ŠL�oû�€	FûÔ“¦•,.6
+%•L�ê„ûX¼a¥|=Ö> ©O&™t&—%“Ó0U0Â�éé­Î�ÂŠ:‚!¥`^åÑmi	bŸ8øyÖ,ñ¹?<§¸2cþ•Ä´ô
+ç_ŠdãŒ‹îmÁ¸È@Ú„
+JjtTš)¿§QŽDð$sPr|HG�‘‡1FBÜCªáÀÓ÷’£¥»àôÔ�Ü,å÷˜¢E…�Te ‘ëõ€¤ÞU‡†3©aÝaÒ“i‘[ÈrÐ‘ÉÐqÈ¦I%nLò 3Ÿ„˜&]®¶Æ‘0ÓST€£B=‚Ää¾<ùÐ�êG‡‚Àsjïƒª(×‘aïHšöêQïÒídˆqbáÕŠe€ã £U&)ÐÙåè48"áØ„R¶ÑŠ“$Å’;�ãD(’¤ m®'®¾ˆH83äY‰yU©0 UF*Ä$­XsÁïøÀ�=Åÿäá/M)Ú½ˆáÒrÆjh"žàLj[BÙƒÛúhÔð¥CnAˆ9™>ó)fŸ³(ÿŒlªá–"õXÄ¶ÝX%)>VÖj1zÔ8|
+‚§qÜ±“	MüŒÆœ/ÁPcÎùçŽ£$�í«Fb˜ž»‘ý'È˜‚
+Ô¨’©ñ$*±YÒ¨Ö
+ï#Kh<¼§È%8¥Ô?vR¡>‡¯Ï}³Ìd8½ö¨æhz‚æ+	0Ó¹~�t´±“	PþZÎŽH¶ãdˆ(.BJG’bºíêÞŒ‚Dœá¸IâÅœâ­Sò×¬É]KþÜL‹‚™úÉ£ „P“iž£Uší�‹é¸ˆ_p@Þ’MxÂISá¢@›cû�±­ÑWŸÆ‹¯>¹	„XäŽG$]†¥W¤é7…>q˜`"�2Á*8¹7†Mq	Íþ‡­ÈJ›J�·1¥@anÈ
+~’M¦€ÅÉ\""òO\ôZæå:;ýc�¡©ÌÐJ!^0deEŸ3Í•òQð�¸åR±±¼Žë�d8jEƒáXòœ•ÂÞJRUˆ,
+M<óØ®q>uv§J4¸pD–ÌüO5-
+6£™¹˜uv%…J± Ò<ÅÖûjËIF­ÌÕ¨Ì\–ZRÐv\˜dÁI8JA¿#„¢	ÚÏE‰*ÍBIÖâðð{hÈÔE¾Õˆ¹D‚C 4"äÂ„-gªª‰‰Š—¡á‹3JKFÂB¼&«ðÈ:G¦eI\—úÇËâº£C¸m·�+œKIµ=^§plcs™Í	3\r£S“«!DnhDÔÅ°¨Á:Üé9d:æÖwØœç0¤deéºˆ@ã’|ßgŠ�Øñ	Ç© 42ÔàËI–ˆ$)	ü1€@ÓeYÒËÉ\šo/©G‹B€?¢‡.Õ�dËcœ±kñ
+2’ê‡6‘Y––mì;®ƒ>§ÙN,M3þâøKYóy-y‘Ç�r
+¥¤³m'ÚsvÚÎÎ©³CìK6Ô	VãÀzírïM•§ÍTåUÔ»k
+M{RUKžKL"R,Â¤ïæ›öb½¤ÆtÇgT;Œ[=¹
+c*&¯Ÿ	 TÃŠCŒé…›D]‘�9ÝàÓåÑHW•eZ\E¥é¢!Ìå<è>*e‘KÇÙ1ƒ‘n&?rLN©T8¢õ–7ôæê®ÄÞ£E¨'Ñ³ßRëa.’‚TˆIà\J=ƒEDÃç”ùŒ^ÅcJ=ËøÒ+
+ÿ<5ØŠ¿²~1Ù]�¶ýIIûå²©õ�¤XÇèÂiÄ§Y)f·ø:}T–LÓtpvNëþ"v�Ç„¦$¶yâzê$°’ZRæw5õþ™?0#-UÞBµâ¯RÚÒxI^Wƒ¯,ë“<øöÎ0'=-ŒèÍNãvÞô®¾¶	K“ª)à%Ý%D6axDï¤|$tOB[8šM6–&£¸&Có€¬ÙoÐ)ý>k£˜|Ñôæ¬'|
+?æ’B_¼-'¡-Ùúm-·+¯¡##÷“1§¾™ç%�×‰Œx9•k¤üFí¼�Òl�ÔGûìæ‡°ßêáKcMöR˜Jÿž&ÍiâoŒaÛ;lSï~-ã-œ&ü×ôNJÚ|UÃ”JqŸiü¢Àú½ òx[²	¬�,�Àv¹Àú€ÌF‹ùöAl»®pdçœ$8'›(­\”iD¹íÚ–i1”ðô¶§„ë´�D´e™‘‹,�È–^Ö¢7x—Kål^_vŽŸ„Ï&¦b.¦,bêQ81ò¼�eó€Ò9~r<›˜Ê¹˜²ˆ©IˆŒ]<q,�Ÿ„Ï&¦J.¦4bzÁÅtÀßeùDTæõV/¸`dgœÄž‘MˆÕ\ˆi„ø”±Ns{7îìŒí.€¿víL<šM@£\@i´åöhŸhuŸ˜…-[Ä,lÙ’MXã\XY<×[Z¡2	x®åñ“�ãÙÄ4ÉÅ”%Ãê-†nÈ¾íÆ|Þ¶“ˆ¶l"³}=Úqg¢•Éàœ
+™ÎÌ £(bûIL{¶Þi°mh›
+Ý÷©àûdø>
+è+ -*EfÑË]®—Ø2¤weg´'ú¼šY’«C¡‚jãiúY¯,[õªUö·Åeë°$^[Šº´q©&öH4ˆÇ×ýØa&…xí!*PåM�ÓÒ‰Z|c\vb¨ê–åÀ¿=¶¡ÙßX¯xŸZÔ¯¨ûôþ…ð0 ÝTA—ô°ÑÛQt?¢ŽG�¼Â‡¬`Çéº®vé~ãœ®ã£z•Äé&»ÏºÚò°?F¯èÅ–À²ÞTËFI,®àŽv8®ŒŠþÆŠÛZé­$ÈÄGã ¦ëéÂºÄñœ‹Ã$QŒè†ÏÊÇ874BðcÞFÑQGeEx1ü/ éÕëPÃ—ÛÇ#ëûºIëß!SÈÐ6Èó•Ðk#¥R©$è™«µT4×É•J"‡{4
+/,�å¢®’œoð2»œØL6¸ûëö^&}{Ï­à½¤8VUˆgÂp4tü	ÃqX†ZŽ¥RP@KÇü‘‚€²«$eË�îþºù€…ÏÁ%$.ïxQe²û¬š—>hZôÒ
+ž“ÈE9gOêEñ*™³¹¯‡¬;�; ä´nŽÖF»@ÇÑ‘®F�èÇµgmX-kÃ0{Ö&†mÃìÙšŒT-Ìžƒ7ÖÄ%¢£�îþºmþ^Ñ[3å˜¿Œü!ž˜ôªj«a.W*›;ÜgÕÞƒfãv~ÐôLVNªCZSŠvQ‡ß·ôÕiÎœ×Ä�4P=óvÞØ?À_oÂÅ¦·&1:„(�­¢Æ¯eÄ	–Æþ)œõWž�cò\ûbù4¾<‡½	‘"¿î¥¬…k@¤ z
+˜ÞL„-Ípókþ¢¨¾+¶ è¸ ¤¯ù‚[÷Lÿ½_zÎìÒê®M±Uà×îUšp{�À‡ÞRÙøUO•ÿ‚~ÛŠÊ~|wØ¥÷½þàd�x�×oÁõªç§ Ø.mJ<¢ï`{~Ä;<§;\ðê‹¬ÿž«…+Mz5gL£�]éé¹€ÝÿÞÖøiR|¶8vñ.Ûô||ö1ÜëLùµO ·Èõ7‚î=¤>Ótê�IkúfÍð?áµóÊ?ó~7ø‹X´&ìÊ-÷Ê·ô6ÎL99ó¹Ï’ºô=‡JƒŸýßÊl[KŠ?ª¢+?Á>â…{xlL8 ÇÊÐÂ�*Ò™eø­A~Zý[ê¬h"ÊË3Å±|ƒ=ô±F$ŠÚè|—õ%Yë�{ÿ‚ïŠú6£H¢ÃÎŸ°ü–(¹,¾%œÄQ,¯r{è9¿ pÂÿ€~þZÕ$Û˜P…òšÛÈ1\˜±/æùØ]]Ã1¯,Oàü#öêÒ.`9¥¿c�á‚­ÖŸÐ}Që‰¨Spôçèßhd¿Á“¾6ž.ä<�ótÎÓ9O?jžÞò´¢eLmäL�3uÎÔ9S?j¦v"jžÀß“ÿÊxZdÜœ§sžÎy:çéÇÅÓNuºI0f_G‹Œ‘stÎÑ9Gçý¸8úû`,ÍÏ§e@tïñWÆÜzÎÜ9sçÌ�3÷£fn§
+Ò�Æ§âˆ¾.ž.å<�ótÎÓ9O?ž–°L¾F/çèœ£ÿ­9ZË9úA8šýá½ì�¯ÑËy:çéœ§sžÞlžÎ×èåL�3uÎÔ9So:SçkôržÎy:çéœ§7›§ó5z9Gç�stÎÑ›ËÑù½œ¹sæÎ™;gîÇÆÜù½œ§sžÎy:çéMàé´#7ylÍýªAÆÓË¯Š~ï;k•œmë¢¥ZB$¯ãèjU1àg½©¬DÇ·}}Ž[‰ê=—}Aê’ù
+�·½ç†ñA9¿ `¡�ß‘•!÷Âù©5Î©»qK]£†•þØ5¬’ZÃ�{E+Û|Ûå:æõÿbüùÌ�?-Æ–_Yô™×wóè3�>Ã¢O]@9<úÏ½�ØS|Âã�=_Ò×À3VA<÷èî“
+Ý�§±¦‹1m>—óôúyZô(çéûáéBÎÓÄÓç ‹h³S	O?å<ÍõHÈÓÚ¤ÝWÎË¥@Í&ž—µœ—¿j^Þìø¹’˜—�
+çe#1/g©Þ~ý*¦äf1F{¼Ü¼²ÅºÍGßŠ–ÅÍr>vfÔŽèIQ·×ÀÉécåœ“sN~±r1çäTœ¬Ý¬üÒgW{42ö—Ú¼,½íùÞ¢eÛºy:9+†YõýØ\Ú8H|,°œ2êhÚ—?ªksxÏA99#©�•Ú4kƒ–·H{ ßõ/öX’iäŽO#7en7-Û9‡ÚÄžÈ±eø1àüì’Ïçve•Ï¼[¬î@OÇàã?Ó÷<rwþy�xu¹ãòÎM@óâå�ò3 Ý&�ª‘ü5è¥ð¶âÔ1ÔÔ�1üÇ­*Èÿ~ü>OùH‘GÐ.•Q;ÂKÐ˜8EÄ{Î—ïáóeû¯9ç^ÔÕ·è×ž}L=›%|ÒÏùÉŸ²íˆf*âýµ„£ŸDÔÜýwŸ„f¯BîþAqþÂjX”†¯x¥lô»ŒãžøRŠs’§=÷¡|Ž˜#É*ìOúÊ{'â¸ì¡ÿ:Yÿ^HÐˆ~Ú®‹ø'mû�ŸáÇá?�iêp–MöÏXî=Xú51f™ØÏ™Ëè	ÿ×½Ûbž=ü�Ø.—ZšÜ.Ãm Ì.%OIÅÚ?*×nLÎ£!åïb´©üŒ?¸¼¬Œl<$Í<xzªù|9¶ãø�Ë'ÄåUÊÆ0¢J sº/.gH\>A&?o%è½§û^Q~jÿ#áþI®Z¡§Ò’íåhe¸¯¶"õ$´î!ËPž‚œ?QÍ¥þ%"ãÜòÔeÝq(%‰KP
+ŠÜF”‡X”áW…¸õÛòU¨æCëÈ&¢Ë¯øœ9Fdh]{¤sb»-8‚,wK¾.˜¸\PØ8.XŽ×rÇë÷<ã�í]ñ¸ùfÑê ­Þàv~ÖÙÇ?ŒýŽmËcz±ÈŽâŽ˜¡›¯ôž;Ëø`¥÷}îxÛ•Þu]ìöZiÓXþùÖ"?“–Ì(º\‘¶�]m×7NÛ ªÈŒÐôc€üú.~m=çò�÷Z]qMrå+ªŠ§÷®;pÅ�ë2ž +òÚôº4ð;ï{®™2f�<“Æõç'ªœŒ•’$cvª2ëÉ˜ŸùÞè�¢'Úü·¼‹Ìï¯[ènÝ¢¸qu‹m¡n´ï¼J‘W)ò*E^¥x˜*Åà2ü¾‡‰ËÈ¯xþíxŠ=^Y®A?>aõ<?£o,ÀoŒ­,âçl
+z·ÇËÏEšIH6‹{?üüZý”ònŒâ÷(n±ñ=™ð›A¹lÓHÙÜ“³$K�ß¦¹r•$bî6ì=s<*É3æõúÊ´^á†t¥0¤+IÏDug ˜–Ÿ³ ®A›M<`¸3+N.¾YJƒ˜uÞ†«ýµà½å|†³»Ôÿàûei‘×7ù]ò0vœÑZ�Æ¿RZ4¯vCw°ˆ™¬&VWÝX½°qòø› �RÞ½GQ…“+Iÿ�³œäšü²E«Ä?»ë¾‡ñýL¬þSzxÊçÈ¯iMà¥»NÝ4½ÜG$Mô4¸¾„ù¶j+èwÊkÎ”{„&Cö¡ØOŽûŽÿè�˜×hèô¿ÈkUªŒ—–ç¬îX—vD	<(Ê%ñúyI+oYËž»¢)+ú=“±ÁžéGÎ„ŸäRážÊ’ðàýäU?P
+r)‹÷”ãÝÐ÷j¬‚[£î¬�~ƒÙ‰ïú#®ŸE½ïèÓÃï)ÒÿB>g_aëÎ¾À¾Á3$\ísÀµÓ»^}4[]œÝGW(›�æ1®ÆU^CW—(_+P<‹¿ÙgÜVÉÃ?TŽ6î‡àŠ42Ú"Æ¸fs²k“Í˜Ž=Ì\^p¼›&“—„±33²cÄ±á×'œOxùÄ�ý!dõÕ•¦<¶1a”S¾÷‰|ÌÌ'­gËÊÇ=Ë§RAolÐžF¿K­ÉW?L*ŽöÞ$²èš ’E¯6¸�×÷;Ó¹mèß¢É>©ð¯Z]4{®äžQäÂ¾a%8vYÎ¼AuÚÒoçê¢9¨OqsÐ¤�Ù�Îuø4˜ÎµE³ß Sú}ÖÖÆÍbpV¿�³'~ÑÉ‘Rƒ1¼¹�¿í�Mç%uÑæÛ�ùÜD…�Cèúà°Ÿ*%ÝªVpØƒ³æ
+î²88ëÝÎ›]êî~§�›^‡>õj„kç;ÝÃ¦
+lü#Œ][Ôz¶1iSÛg›mL¸ËÎlà-¼§ºø¥÷ët^,ÁÖd�Ù¦‡0µš‡¸ùÅÄs,Ø°�¼Ý/f� ìôèvf?uÌÜ4Ø¦cÚGï¨7ÓÄQ´]¼ =�‰5HÉPUÿ -KgMêÎY—ú:èw‡ìJÜœ5j¸9ê·sø˜.hc³�Æ6ª°�mÏ¥(.hÊ:¨u¨­{mÝ£ô¬±ópîÔÞ�ú¾iáNúlp$Û'`™Wä®PÓ±¡»O¨7iœûÔë¼Çþl>ètA1º­ÛùÙq“ÖS°�u©I±ÌÔ¤ 35©xµ¤0)U•"»Åâôº|Êž]ëíwäµp•ÕXgŠþÆ?Bã�xîy[ ô~ÙÃ4ö05åÃ­~ãvÞ:>CdZÇïhcÂ§âÏ¥ªQ4ŠðéûTÒU}ÑbÌ¢©øW7€É[
+zp«ñ†‘þ‡Omx\«qŠ=6‰)ŽÍiÁÿ6óù4TZG¶µmkBSxœ]NË‚0ìÉïð
+Fà*•GC«†–ÞiÂÍÄ¤—Íþ»-HBœd3;»;›‘Uj!¯Ù¶‚ Ø-tçgá1Â’kAb�)žU3¹ƒ´p.óŠNX§ÎBZO·njáI\äÈŽ0Ò“·«=	PªyÅ„³°ÌûXå™�¸,,´×|Ž²Ð_°[ëÒRŠ¥oúµzL�PÔÜ½Òü<ÁaLâ1ò“Uñ¶"¦¸â¹[XìÓZdmkBTúÎÊþ†*˜xœí\-“ä¸²5,hjhh(*((h(*(hhj((h*hhèÿö”²]³{ïôÌ�èr¿È³±»Óíªš:™R*?µÄ—×mÛ†¦iLÌ€¹ü¹;¾1¦‚uÔ£šÒG?oÛ^`ËÃ	®€ò^zCÁË.ËÒ<F�å[Æ5oð½û…8ä44–ø§_VdÄ$áñÜ”‹ÈöM—‡UúÙ\Þ™á3¬þEM1eÿ*Ä£°˜šf%Lðšn./ŠÉe°(‡úã%˜msŸeóèÇ´Íð•®u<4ª
+”¨@ÿ¼è²fòºÀ3�ü™>®ˆ‚V;åôës¬¾ÿ	Çzll"Ë±,zâ¿/®ïZeC}„ðaÛ—²7”3a¾³eZòzÂçRû’nºBÿ˜ASš¬²cß,@?.¸È½àÔqa¶æciËï¼ùÚþÛ†û_¡!)â£ä¾€=M	µì^°‘cdC_¹š´_Hx%	'« €`€~3çÇ»V52•ðÚÏ²û=¶Zæ³õ!F–ìí¼‚n÷B7‰…¨Ó"�òÔõøÊ7.ØÓp¬[92¦¼’òöQr_@^Ç	`	3Ø$€B¾l…	š4V´qû¾­«C©4nò¡È0VÓ±¡íCâ�?Jîåê#Ûñ¥“j†‰$P¾:|} F|¥¥¸Ç÷"žÙj£ÙHÆKp[lÐ]¢m´~–ÝïQ\ºbÂ‚UÖ¨b¹{Oü~ÿ™vFÑ8²€(üSt©Øº!Ã&à3žö4$Ÿæ÷;¤¢u³ÇBkFG¯éu§ÑÛ+Žq<ð¨?=8ØÖu?b(+c˜ày!¤m¥ªËáùüÃëeÈí³×oû©|ÿ%TúôÙÓ+ÿzå`Å¨\ÎƒâÏ(€@B|y^ñ#¤þËðêÊv…¥z÷Õ�u«+ý}òÆ[í«¸žÒRÎ§‚$kÓë¾¾
+Éòø#iŠnn�KÓÅž\¤Ÿ1Ô‹!�a„E°h°ÿ:–Gà"û_�ÎÑzø>&ÿZ_õî«·]qnÀý9‚OÈ¾ˆa›Añ	ÏAŒtÍRÎƒMäõæÁ\£NVµßOæ�_ü¥zgY…}‰ñq�¹¸v‡·í@*–[�|ÀôéŸDóo×¡ªÕù3×�Çó‚míŽ™<þ±´]ÿ*/­�PB�° Òµ$™Ÿo«½ðÝ‚R×´°­úÿ§0GTN÷3J\ðÈß9KÔèt:þ{‰÷�?ÿ
+Uw;øÃGœ=ó?g`üñ¥=û6iE¿/åªÿ×D¿Î°[V½Ûãý¿[ÊJ»bÓ5§¹‚åì‡ãxŸÜ~Ô¿>½»@ÇÜžü0³1r’,£¹X!vø(¹/W1ìüÖ#Ñ%QüÇv½Øÿ3³é>Ôw†‰ýKuJÅ
+¢cœjðˆ1b‘@|<T#¸wžyVk^Šƒ7&·^¹�-“�‘œ}
+ŒY<xU
+y³øçû?ÅÍµ@?PÄGWá¶@B#Àb¹xó: sGô›¡¼”ŸÖ´TýƒRYS�Ï+‹g½«~]1é“Ÿâ1ÏñtËí×cî¥¬:sÛlôá¿ñf‰�ÿ¥?gk]ùú±ïœõòæ»+í96½êÿñË”ð�R
+/£-—�V�çÏ_pþd¼·«êCÐ3	|ºê%Ý1í9rq€ù¶é”~¼ýc:†Üzøî¨ÿw½…-/7Êà\÷þ-ÆÿG¦3c­q/ØF—Gý=,þwèÄgZ>~ÕÓC" y£š>¦,�Ö8ãMÈ5H,§ã^"å€˜°.”Bù‹áVTûwý·5î0{¾wgrè
+¶ÓVYÝ*çÇlÿãßö@,Ûºå�iÜõOiÌ÷øü¯¤o˜9žÞƒâ€ñN#]f¾ÃúH¤¥Üÿ»Ö�PœgZîu~Ø	ê�Ðtf.�V®f¿ÿ×ÀrZÖ[²‰�?ü*Œ†�êüÛ
+Xðëw¤Õp¾ªƒý.,þÀ¹SüúûSŽ. ëNB¾,ÅÎ•Å”ºóU¡øvQ�Ã¦"[g3�êe~„ÍSvÊOÑ¿ÆèåÏ|÷ž©Ì‰°o¯Â	°­šËZw
+8_ÇœÛ0{‚Çþøôoœ†²gùÆËµž3…°okê�"†ñ1#âQK¡MC™ô"t¼ïlØíŠ’+ÿ}[\qƒjªì†ÑôvpA‘²+'K¬sæÎ9}í3%.,.ÑgX}È?ç©kjµ#ºAs¡·fv‡õZÕ}"þÔ±ò
+è8{€ÍT°ˆ¾ŸÑŸ�ùç¹c74ÙNE±œÙ5qÅèIöì™Û‹ËÕ°uÄ¼y¯¸|ç…-ñøs~Ïuù:É‡	+½ïÃ1Ö�‡¤{;Xw¶Â`æÄÌ�Œ\@9XBŸäö ò0w×¡oÇ6»U:Œ‹›ÐœåüU�YëÌT{  Ê_)ó�¥±²G,`†�Ò&Ï©}	¨~<´øv{q{n5+h
+ñW÷#çŠÎn?,„c¯@¬Ía¶Õ½ÆO0˜0ü«¯#s9v°!F÷Ú•F€¥ÿ•�\_‹àÛ†B‹·hÅy�+=’À:þþ+Z7m¡ç	1ž�í=C™ƒŠ¹škœòõïöÅDð©ïôT2üvBìdA…NÔô”ßzxÍq¬ÁŽí`uptîwg‘#æÕÁ)K[Fª'Ôq£Ø7Óùcì¸ƒ1w{ën�]ó‚MÜ-Ô8ÞÞ¡)¿•òö–Üƒ%—SpŽ+FßÅãoÁê§ìçJ={SÈ¶ìBÁÀ["§å©¼½7·v£µJk6�Å¾�Éß!÷”&Êà²Úv*~ÀÊ-R^üÃ�N{zË…cÓ– ‘k‰�;Å¾›ÏŸ¢¦=ƒáæ¶JÿÌö5‚|þXþéH34Æyë5™ƒj_Šôß—øøgô?r¾:ôöjî”ÈÖý’êñÃD£C9ãMÏñB€°`c>Æ·V36}ˆÖ—�}{óØ�Y»šøw¬Þp²/ý)�Ù>’‘çlI‹Æ!	2ýòÉ�œÿõ—�ƒ2u­uÓÕÜ^=T.)Ùç¹Ièm8äÊÂ&ˆe‹L¼Þ~4nÎ*ÙóûŸN¨[;xÅ°‘é¿œþ¶­©
+x<ë¡í±¦)M…„ôø¼ÇZado®ñaO°ïg_+{åÜêv_4o‚�ß7ÓJc÷_ÿÂgA—ïŒðWw+7…PM`¡Ž˜s2bÛÁ'îTÊØ"ÜÌµsô¥NùüMÁÔžZc]ÿÈ¢êß¨¦¨¶�1çå!4ãÁÚÆ�ÃqìKƒ8gÒóÛóÒëÚûªØû%Ðþá1NÌ=÷·SÖË7-–EñÔëkí:`à#øPJ|¼ÿ³eWö?©iàÖfò‡Ëš ûz z‡Í~uþi Õ1§�çš7ò‡á�¾DÔöaz¿Å¶’êã¼˜e#òT¿ï{>ÿ=´Çj8!!	@§#†D ÿ÷K�~X7x3DA†» >ÍïwÈ+$xUÜ7JüGe©ðøÇUXây<óø‚7pòŒ�¡W<yüDÈþ„øÇcùü´/ÀÆE1þÂß·�-˜Gˆ�Wv	hþe™µÓ®(v§¿ÿÃüæã«f0ÐñI©~
+N~à4`Âá°µúDÁÆbÁ»Ø}mô£0ÿTË
+2€5G�ü7€��‚æÖ—CMQ£Ä~vÍATŠ²å<Á|ÈóÏ¿ÚÝ»u§µ^¶yÔ¯¢Ï×ÈÞ„ó�XÔßIÛ^¥FÖ G;£5˜(Ñ0JÓöŸÍr�êcÏn?ÀRƒêB—÷À·ãYN†v�.	ØÑ7*f†!ñ§9­˜)B‘þ”ÞÔêtömsÏŠÊÛF;Â¦“0°²ì&ïõ`–'EaÁkŽ:Ðñ¤Î¾mÞÃ`ÎNHµÖr8dÀ»ó" Nþ€EOü#Ý+uú…?e±.­YÎ¾ujüÑË»ÖMªÝØsÎ¶ntüåâBÂ´ÈM?ñÍèÓ>[«¼|ÿ£°e;m…�-Û¯‰›À"¶±6ì
+î©Î~ÚhLf‹3”ÑÚµ]‰¨"RÖÇ÷tÔÎ~g´\n£ò?þ´d{ŽÈsÀ4¼Sö®�hhq ZªžC9éñþ_µÓ–m|á:ëÎnØÿé�ÑåQmñu8öHN7þ&ži„Çó?{4ÉªCÌF½~w:ölÿÉÑ‡[r,Ï:Ûbó¼U¦h_Ãá°Ÿ£tõ>œ”Ïÿ\äÙhæ¨ëYìãS<à�®Ì†Aþâ_jwí±æØ<]ùbØ<¤´<>ÿ{:¨ÝRoø¡ o©÷ØýÂ!1�ByuzpÎ©tp�ëÈæ÷H4ŒcûøX¯¸~ÓÐåW´ýú¼Åsà‹{ ^cd˜®F©ãq$†ç€@€¯Çó7úœèÀ²Vº	€W€Ÿ&¾Î ¦	»ÝD#ŽønsÖÍè·©/fOÃÇ{�Ñ…kè.œ“­PõäËš>Ôû=&hïn§u«Th
+i.›ðoó÷<ÞÜržomú>Å›.É¸¥ŽvM}3®ÕãÀûNfn‰á†ÈúÆöññ?œÒ4Ô‹5«%Ýªù¶z;º$¦þûe}[í°Ç_tånƒ[¿€}|þ's¥£0çáëØ­
+Fœ�=¥âj˜%€:î!Ðí¡Qr¥ôãëßkíYêzÔÿšb½ÍmÛHÿŠl\]yŠ¬hÞ;ù|v`F”VTRá'ð·"m¢9Hî¯Ö;xE_gÞW·¼ÍÄSÎ žùëY;kÚ~ˆ�ç¿mó­Vi÷óæ.HsCjØcñ³=ÜÒ:-ñ]t‡Þ­zzF}Óãý_îx&è	oòãöNòpfŒ‹Gì�%	¸³S‚$°á!w+Ÿç3ê·�¯ÿ8l+@;æâ¹åêð$ f7÷Ù�\Ic?-·N‰ÂŸ¨éÔ?ª_
+Ð/ôüûoœo4†¼eÏ¶X2@ò|ý(*;pF¸Ì,÷V‘Ú§ÞÜ…ÓBîñþßgêó¢£]¡ÁªyÝ}Óƒ"÷§¶�‡w«G¯öåâå$o+ÇæôœÀlB—°QËãûŸÎ1'\ë×I0@ýÛÁà_kÜÏSÔŠ©¶îº7ÖV•ê9Þ—ZÖÈò#úÿó)�}ºµíj¤
+¬zt�Î‡/Ã7^Fw:Ï:s˜L1ŸR0&ðxÿ—.+"þ%º}Ye™Ñrÿ†Bö—Ln«¬öæêvoµO‡èGCË¤ÇíðM4þxºq0;iÀ¿##0×ômævtu·é6Cà:»�ýE¶ßÃâïÁW�âYoøú*ô^‡õLÿbEÐÙ�Æ?¬©7ŸÖÊ°±óÙ9î`@
+å‚Ããù£+GµŽØC×B�áhÝYñ(\zY1lkmËñÿMZ¯ãàj7?âþC˜ô+_ò¾šîx=g8îGB· E¸ýµ3ýê »ÃTZoY£XÝéý¥ïgôg€¤6îlèÆzø1 ­kÏüwsExÝý9Ÿz^q$æL“®aèåÜ/�@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ �@ ÁÿüE£ÕÛÕ]FovmkBTúÎÊþæ„xœíœXTWÚÇcAz‘>}P¬`!(ÂÚ	RD£«Æ^¢~k7É&ÆŽˆR{�Ù$¦lŒ›Õ¬ÉM±'šØÀ†KVVc÷¿ï{`qPH–Ì'žó<?ï0·Ì½çÎ[Î9WÜ—»0—³/cæ†/ÑìOË`HÉÇ°ôMØ}ôLÙ~Ü¥3îÞ;^–J‹â1 œ–w‘µñ[4’U¿l¨úçB“˜%}Ö÷ÏÆ˜ŒOpáò/eÇÊòÈbmm«¨?pûÎLX¸	Šð7`ßc>Ô¤½:q1‘MR<ž]Dû¦£íˆe("ûPršl�(ÖÖ¶júSÉzï[(Ú½Ï~Y0¤’îI9Ôî¡MY]R.êt�‡vÊÄ±‚Bqžl-ÖÖ¶JúŸ½TŒ�ÁKàÐ#£Dûþ9Ñô_mr>§#"n8~>º¦ê­¶kk[%ý§¯ÿ‚ü}N‰ÍO²¬½Ð?±d«L[ƒ§‚ŸÅ«/Oª©z«-ÅÚÚVIÿ�ÁKÉÏsÿÎ­TûûH[
+—N“ÒØ„Ó'
+kªîjC±¶¶UÒßH9ž&‘cý<Ò7û‘úk¬€oÌ+pwuÅ¶-›kªîjC±¶¶UÒtæ§”ãQŒ—TÕþ¿~Q“àbWïo|·¦ê®6kk[%ý8qþ)¹pï»º”G´�Älh®‡2¬7ÜêâŸ[¶ÔTÝÕ†bmm«¤?—q7Sþ7úäÜûb½ò¨B•º
+ºÄ…ðòõƒQ¯ÆÑ£Çj¢ÞjK±¶¶UÔÿ.._ÃÓ£–£Nd:ù�%ÔÏ´ªÔÕPXŠ€ÐØ×U`ÌØq¸sçNÍÔ\í(ÖÖ¶júß½-6Eþ�?[E§éðKY
+ùyÍ€U¤9m­‡!a>ü[u€c=Bš4AAaaMÔYm*ÖÖ¶Šú—ýƒÂÂDöŠ:�}àØ~"<£ÿ¿./À/´<¼¼aGý¾EËØ¾ã«ÿ}mÕ¾bmm«hÿKŠy¨øB¦ÿåÏhÑ,žnpu¬�FNõdÂÄ^À©S§þ—uT›‹µµ­–þËÅŸÎ`××Ûñù¿¶â›o¾Á™3ç~k}<iÅÚÚVKÿ£GŽ`ûöíØ¹s'víÞ�ƒÀ±‚?~…Ø³gŽÐ17nÜÀW_}%Ž«Þ¿›®qóæÍ‡VÐ]2:ûöí{èõvìØ�ï¾ûîW	`©üòË/øâ‹/°uëVlÛ¶íWÁõtðàA\ºt	·oß®ì§¬­mµô>|8ìíía4a0îÃßßõë×GÿþýQ\\ŒÎ�;ÃÍÍ
+���ËçûøøÀÛÛ[ÔÓÃÊ�Ä9|lÅëèõz˜L&888à•W^ÇWo¾ÑòÑÔ¦Äý«Tª_…V«×CBBrssqöìÙŠ?emm«¥ÿˆ#àää$ž‹õ.ëlgg‡øøx‘ó¥§§£^½z�eX¿
+à�7Þx¨B\oü›¬µ¥ßäzæ¶ô°þåÚ
+œ½XŒÂ³?£ è"ŠÎãö�{Úó§»"¸1Ç¸…hÞ¼9üüüÄýÿZ¸�k4xxx aÃ†
+
+Â†
+[ýG�WWWñÜïÊ,tJLLÇ:tH<;÷ÞWñøÆ�ÃÙÙ]»vöÖRaßÀöÄÝÝý¾ß2%×pttBJrRÙ9çÿ}Ÿí.Dö‡;1nÑ'ˆí]t¿­†.G“ÁKœ–‹æC– jÊ[xqégøöPÑ½¼[2VÁþ¬E‹âÞ+ÞwuáûæûäÏ\?ÜæËµkk[-ýGŽ	ñ,Ü÷ÊÃÏéèè(l÷%¦_¿~BcÞgéx®_¥R‰½{÷ZÔÿðáÃ¢ùúú–]ÃD‹-ûµ/å¶X½f>Þ]„Ás>BÓÁypí•�úÝæ¢^Ô4Œžû™pê�
+—>Ypé�	gÚo÷ÇtØDÎ„{÷tLÉÙŠ·îùèãÇO 9éÏ÷Vñ¾ËÃ6ÉÛ3¾WKu#î—¾		õÁíáôéÓµVsL———'|³ÙVWvNVV–Eý×¯_Oñ†�¨[“‰Ï1• × @çCPsøwŽÃWÃ=6v1sáÒk><ãÁ/1ª”P§­…–ÐX	}Újh­�6u4¥c–}Â¦ó,$½þ®ß¼%~—ý?ÛÿÊôçççgâ˜„ñòòB£F�„¶|ŽÙÞY:�Û
+×É{ï½WkõçøŸ÷_ö�åûoy¸xzz"..®ÔÿÞ+ü÷°aÃÈoÚ•œË¿éo„Ií�€ &ÐuI:.†rÐ:xÅç@Õ?š¤\hRW@5ð-hHoCâ|DO„*¬Ü´-ÑÐ/õ‚úÂñ�ó J]Z6‡¡IÉÅS‘³‘2)×®ãÅi•éÏÏ®ÓéÄþuëÖáý÷ßÇÆ�ÅgŽA›6m*ž·2;Àp,0wîÜZ¯?—�
+¿WYàöÁ}‰ã…ò¥¨¨HØKî_ÁÁä?Éj} ïmb6TƒÞ†:eé—UBÊR¨ÒÖ‹ùGÿnca�„—¯7œlmàëæ€§CC�ß#Ÿ‹G§¤)ðë¿D¬_V±þÔn”)+¡ÐõÄŒ×^ÂÕ+WjQ³ßâý–æ68gä˜Ô;T¦ÿ›o¾ùDèÏý‚ó(¶á–ê‚m%Ç”ì+Ê—?ü�¾§üÑ„ ƒÔNôÝ&@C}[5€ú8¯Cáv@¶\=`qé0>“?�îõàçf‡ˆá˜1}:¾ùúk\¸p±4¿‹M_ì£!Þñ÷Ö²°_pj3­B±wÏ.tìØQÄÿ–žS­V£eË–8sæ*–ë×¯#22RøƒŠõÄsŒÀú—ú<kk[ãús=Ì—òyß³�(_Æ�Wú>$@£©1ô½_%»¾Žüv4	‹H³<(Ó6@—°þˆƒ�¯ìë)(&T’ßŠOÿù)®_»þ€>'ºŒ¨ÉàØ#£d-#Ïcòš…Aká‡&F?|¶u"""©ÿùóç¸þÏ?ÿŒ6mÚˆ˜ b=ñ¹œqòøÒÿmk\.<nÀ}œý½%Àm£Y³fæ˜ÅÅÿAxøÓP{»Sÿ€®ï›Póš~ß„ú½*‰ü>Åt1ãÉøÃ±®z­
+“&OÆþýûÐ„Ë¥â«X¹y/üS³a3º²uä;’ó £xÁCˆvmZ`ß¾ýèÐ¡ÃCõgûëÖ­û~ã
+ù�Y³f‰öÌ~­|=™s^ôíÛW¯^}bôÿøã�Eœg)dØ7p�±¯à²iÓ&xy¸"@¯„¾ûŸÉ×¿sßú"åÀÕ0F�€¿·3lŸÂ ç†à»ï¿·¨ûÁÂŸ0ký—hýü2("gÁ±çÒ>Ÿúþb¨JÛÒso# rØ`ðà!¸|¹­[·®4þãûe-Ç�‡©S§bÊ”)3fbbbD¿ç¿ü³šÇ.x<Œm!�/”kkû»èÏý"<<\ÄÅìï-µŽG�-ŽéÅáÜ°’…6êþ‹ËÅyË…=Ð©üÐÈÅÌ¿ï·nR¿ëÇ"d¾ó
+b_y�4^„z]gÃ¾û|ø’¿×•®aT%Q~ÈëÒÖÀØe(ü¼\àâä€-[¶ˆ¾Ùâ!ù¿9ÿã¸†ëƒmoÙçsÛ(«(­'Î8&dWanÔÚÚþ.ús™6mšÈ{-éÏ×ãºëÐ±õ½ËèÕ=>jè„Þ+EŸ/ÑŒúlÚ:ÂºÃ«¾sf¼†›‚*ºŒ··Ä¤œ-è8v|úeÂ¶Û<ØFÏ‡[ßL(KsÃ¤<¨¨ýðúT-Û�~3)Oˆ‚—sC4¨_3fÌ÷zâÄ‰‡Æ,å1�õšŸ£|Ý˜Ç‡*raÅÚÚþnúóüûî–âb�FK6µ	Òçg Œbpß6ñ"ŸS±vâ½²Õ”ã±ÝÖµî‰€ð¾6ó}DO}±™¨5[Œù¹õÎ€_|IN§IÎc@ªk)v\KyÂjh“²`ìþTM;ÃÅÑ¶u”³‡`åÊUe÷Êö¹*ú›è™¹=3–|›yî£]»vÂ¶=zô‰ÕŸÇø£ºu+6ÀtÑ‡0é)ÏÓzÁ¨ñ‚¶Ï_…­Ws|V¶Æ�ßA ž¼D¬7³íž!ÆmÜûdˆ<^Ÿší€åÔnV‹wPÔ”'j¨½cgÀ¿ëóÐR_÷VéàØà)¸Ù?…vmÃ0g^:NVX¯RýùyµÔ·Ù§qœÈý¼bÿ7�ÿóüÇ}ü™çÈŸ$ýË¿œ¹pìmëQ\§†É B NIš«àoD@ã¦ðoÑÊ°ÐvE¶?§l|æþwÌè»¤¥P¦RÛàµÆƒVk(~_-ÛˆØ™PGM€¦]"|w€§Ÿ.ÎpwjƒÒ‘íÃ1í¥—°õ³­¸xéÒí´ªúûÓ=·¥<�ç¯"(ß
+ƒ··—èïmAP©�àùñöíÛ÷¤è_~ŽýÀ÷û©~à­#ßØºí“ �]ï×¡‰§|<y±xwH�º¢ä]Ã
+ï‰±:¶ý(†��
+M÷—áÛi(¼ZõD#ck¸zéHk¸;ÛAéÝMƒè‰Æ�ÆòeË(7ü×®]³¨yÕõç>ŠWçäàö-zÖ;”ÞºŽôysàéå-žÑ’�ãØ�×O¼ûnÙ;1ÖÖ¶fõ'éyŒô³=…x}Í—8ãfÃ7ntÂ/¯†’òn1O“¼\øw1¶GßÍq¿°ÿæµæÙ¢Ïë{NC Qg[¸9Ô‡Î×­[„ ¶w¼0q"rr²°…ú7Ïãß©Ö‚�»êo*�{(õS&£ÁF5ÜëaÃš¥âøŸþ};<‹Å×‘ß�â\ÇJã\ö¼Ž¦tìØÚÚÖxÿ?ûóè)æR„ÿ
+¢æA™¼¢dŽ&y±R¼3Ày˜:•c³|êÛó #}
+ÑãE§J"_Ÿ�SfxÞÎ7!†ð~X0ëUüã“MØ½gÎž=÷›ÿ³�;æùÿBÖ¿%T~¤¿¿�ü”
+&­Lä¯ŒôwH(T-¢�89ç|ŠæC–Á�bÏýgîbÕò<ÔoÐÀâ\0×ç9Ï<ó.^¼øDèäô%xÆ.@Ã^ÙÐSŸÖ¦®¤¸|	´ñ™ã½m·‰0tLƒ±mw›?�À &TçZ¨AßiÅyœÿç‹ù=óxÏí:÷ÎÂËË¿øm‚WR~*:‰V!Áðõñ¦¸¤9­º@ÿL"ùªÑÐô™.æŸtVÁ¹Oås`ßc!ÜâòñÜø×ÝµT*uYNX±ÿs¼Èy!¯
+ü�u´Šþû�žAäÄuh•2Þm’àÙ$�ôMÜ¦ÿ’˜_Ï± 
+ÔßŒ”rŸ#;ËýÍ=êçþFm†s?Šïø=dòªÄ<4ŒÉ@Û‘+‘÷Án>uÿùåÆóÈ+·nßÁÕë7qñòUj§ñõ§±qû¼˜³†nãá×}ÙžLhR–��ZE¾j
+””W¨Ri›ºVŒAk­…žâOCr6Ü|Œ1ù£yËVBcKúsþËc�›7o~"ô¿rí:®P�6
+…-)·oÝ�ºtM‡¹Ÿ˜óÁÒkš‚EðWAßu4zf‘ïX
+=k‘Pj’ràÚ;
+¢çBE1aç	«1dÎß1méç˜óÖä|¸K>Ùƒü�w#çƒ�HÿÛvL_û%¦æoÃðùÿ@âëÑmòz´ºŒìÊ"4ê•;º–}÷tÒ—ìû¦T~¿i¥È)Ub-É
+hy¾ žüT÷?CÙ.îþmáàæƒºuë .îYÊ	¢îËË¯c»Àã`K–,y,õçø¥ü¸—ó:\‹ù?ùÕM›þŽ�>ú'NœÄ©S§Ñ²U+1æcž½G¹kSû0ùëà¯õF—Ä1hØñ%x%­„að½ØPGm@›œ+ÖñÔ�N‡MÄ("fÂ&rêt™ƒº]‰.³Åg›ÈÙ´&íŠÎ3Åú¯]Yï¸>›¯²+¤5�-ð¸°:�òËÔ¥³¦ÃÐ‹b’ÈáÐ·î}pkýáéÜnv6hbðC�¨N˜úÒT|¾íst¡|�×|š×€–‡ëŽóÀ±cÇ²­²¶¶ÕÒŸçUmmm¡×ë #;VÎmx~#66öý-Ùä	&ˆkñy¯e†çQø�²v­Cqátæe.„k³°}z<ãrDî ¦~ªN^)bJ]Ê2jKE¼ ¤öáKø�¦>ä+|è;?Š%Uœg°ÆJß_¸º´•tn>´	¡£˜DÙu<”O'Ã7¤3<Ô�áÖÈ�œàëá#Å�AÿûyºbèàAøü_Ÿ‰|�×Œ˜Ïï±�·ÔOØð8h§N�pîÜ9kk[-ýÏœ*À�=_ãÐ÷{àð�½Ø¿ë+?ò€Ö–Ê�ëÿÁ¾�;,^«â5ÏÑïšË±ý;0zès	muhô‘ÏC×ë5èâæ@Ÿ-åŠÚ¤<1ö+¶”Sh“‹±!]B´q³¡ïóWþø¢?ŸI€X›„Âßà£’b>¥š¼Ð)Ô„þ½"ñâ„ç±,';>ÿgNÅù¢ã8yŒ×+YŽ5®_Äé‚Ã8w²àAèYÎž<VZO·­­m•õç|õÇ“—ðõ‘óØWp{-°¯ð"ö;�o,z$»�þ$Ž·t�û®I”]óðYúî<~(*ÆÆÍÛ0`È…p¬e X’×„‡›¶E`³pÊÓˆ¦í`jSpL_˜Œzi|ÑXí� µ'‚(îä84¨i(ÚvêŽ„�#ñâŒ¬x÷clÛuß�¸„§.cÿñKØ[z¿|?¼ÝuäÜƒÏvèŒx6qÿ|\Ìçòç]GŸþå—ëˆ·Šüæ,ØÅ.‚]Ÿ…•Ó·
+<ìüJ®Ù�é“	Ç¸lh†½
+ý˜�àšºö}fÁ!f2»P|IDŒ€SoK>;FŽ‚S—ÑÄ8E�#&À1zÅ”/Ã!vìãÁžâJ�!ë¡õ>Œc>€~Ä;ð´®ä;èyöY(¨Ò³>òyÑ5À”–cmm«¡ÿ
+´·–ôŸEl}³­GŸ,(ze–ÜGÒr((S {°Š�DÚ[D¹íÀ·J>›·iëèXÚ¦Ò6…ÎM¦v�´Š„|(žÍ-½þÂz/ª�ûÏFý¾‹”šgmm«¬ÿÕk71y1¨®¨žúçY™Å°!ß)Èç+éïDÞV�þf‹óîí+ý›¿¯¡û¶I,¹¶kR.Bÿ´ÜÚÚVSê3Ñ%Ïb®+Iµ°áöJ>Å™Ú_«ÇN²¥Ñó¥þ¿…Rý�ÈÆ<^ú_GäÒ?f>èÞÈ^J~d÷í©þ<ésË!+¬­m•õçqÜhêÿö1éÐÓ3hù�	IµÑ	r¡KÌAóÇC‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰¤6ñ_"?Ö±×mkBTúÎÊþè~`xœí��‘)…ˆq Ä‰8âDÈ^éê>×»gI@ÏÏþX¯jjg»iÐƒž——Á`0ƒÁ`0ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù�]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzü�ÏªÿÇß¯_¿þ~î
+:ûsMeÑò#M”Ï3YŸ#=÷2û»QžÛ›ÇßÐ™¦‰ïŒ[\s=E�ó8´}E>¤GÈ©éTîø Ú²Ê×Tªg-Ÿñ}×þúÌ¬üVfÖÿé�¼�Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~�<Vrvº@>Ê!?÷U�ýù�ÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+í‘¹^edÔç½üLo+[\Å-ö§k»ïä
+döW‡ïÍú(}Ýý�ê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}ÐŸuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õÆ‡dºÐr2ùÉ_ÇCú‡ÿï²¨ü:—©ôéºƒÁ`0:8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq�{bUþêÙŸÖq˜�Â©Î®è¸âmï!«Æ¶«g*ÎªòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ	çU¥?)ÿV>­Ò“ó†Î)úçx�…|œYé¬Ò�Æ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖÊ½VÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x
+ûëØÉÇ÷â)/ˆOSÎy²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0ƒÁ
+Ä¾ˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{â¬¿wÖ&Ýúõ™û3®Q×”�øN¬ðQev×	�]¨¯Æ·ºö¯gcH¯úËžçîi½�÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>�+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªü�ò\ÆªÌêúŽ¼ÄUÆ¬ìß�·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈR��Èôï|GW~•—î×w«2«ë;òfz<AÇ�‘ßŠgìì_éçlùú§ËyÐýŽÏÒþžÅâ³ò=¯�³„U™Õõy3=ž ÿ•[ô6_íû¹Úÿ3]Uý_ËîìïôªÿkÞ]ÿ¯æ]ÿ×²«2«ë;òÞjÿ€Ž->†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyÅ¬|E7þkúªÌêúŽ¼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=�Î‘}NŸÍå»�Î…ùžü>åuåWy­d¬Ê¬®¯ÒdzƒÁ`0*èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì�˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,�,^�qF/XÅûv8º.Ö©gá×3}íÈ¸âOPùì�~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+ãŠ<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑ�p�™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Ò×•þ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ�³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ	veO\k^8Ö”�¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñÑ˜
+mKãè«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõìq�³:£¿ÏE=Ð
+z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u(K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ�4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû�;=Ý·åòxÚëpû;o@>ú›”È˜éT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â
+½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîÇºÛôã{-âƒoô½ÜSd×•_ËžïÎ×ƒÊþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞj�Ýêºï%Z�[~_Ë¯déÖ®·¤ñ²+�œÖñô¹Ìw]Ùÿ7ƒÁ`0ø» ë]ÏÜkÙíIŒu�¾+e§L]«ïÎÖ‚ïoA^�ç°î;=GR¡³?œévì¯±Ö;<÷ôy‚· o�$Nî1ç´ˆ=:ß¥PîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^�]ËQ¹NÐ�1qŽG¹�¥w>Ã¹{å•á<Fªõóó�ÎÁVþŸr²2½nÙÞloÿØ�Ø§Ç|±m¶o›¶'âqbì­í¢Ó‹Ëîr�`eìêef±ÿ�è6
+0¨lz’ŸsAÞ_²¼«°îÒx7±Öì·£*îU}�î­R®%ó+½¸¿C®¬ü¿Û_ç	·ÚŸ~I\ýQö×~±küy©Ï#_·ÿjo~DyUåÀ®^ªúž`5ÿ£žpŒºåûk¹î‡oµ?:¤ÕË®ýÉCÇµ¹îwÙÉ®üŸËë>?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0î…lý·Še€·ô®ùŽg:…®×ºñ¶Š�ž`W×÷,3ËOã?«½‘]—¾\9ûP�ø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý�3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁ�hùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄÏ½®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=�é2ôl�BÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ	VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—º�ŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[Ç½×;ƒ÷…±ÿ`l?ƒÁ`0ƒÁ`0ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿cÂ¾#öÙé>·,Ïjoð­òw{õÕ†ú‡ÖÝ²‡Lûù=«mWèêòÈ2u_¤ö�¬ÿ8Ø¯–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿs�üy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇ�kþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”æ‘½Û�öàýðtLàœS6Ÿq`CÿíÌjfý´3–#ËéÜ°³?zÕ1ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝu�Êþê7m1‹è™Q]ßPW�Vç2ûS®Žåz]Ï¥zŸÒs�ý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢3ÏÛF
+µmkBTúÎÊþè~xœí��‘Û8FSHI!)$�¤�’FRHn�›wóîHÉY¯Ûx3žÕê‡¤¢�úùs†a†a†a†axI¾ÿþÛïÇ�ÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ªÃû�¼Ïâöð–þ¹»¶ŽÕo'®GW
+{>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚÏ±Úoù“v�[iZ_Õ±aÏJÎ�þ/:ùþüù×6õOÿ-¹”�92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwïèyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄiÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægH�ð–ö¾»–÷ó�üÏØñ�|†yž÷u¾Ä.½•üÿ†þó\þô³aÏÃ¦ŽM&ýwéÛÃäké#�Ï�ú$?Î]ùMço¤Œ\�ýÈ¾,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœôØgX #ìvçQç´“ög·Ú÷Bž™òîìÙ™^Êßuô¨ã�®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎß˜ò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û	ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}<GÈcåK„•¿1}ˆ¼§uåñxæLzÞ¦UþÃ0Ã0ÃPc[ì›ü<>¿g\=ö€c¿¶}ñ³M¾‹½ÃüÃgggÓêüàÖ	èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=Ç§H¿PÆîÛgçsì·ã/ÇhØ‘ñI
+ÇtýÜ~×{‘òçún^§}�¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅÿçZòï|~à¹_%/Ï,Îôp\€ËÉ¹yÎ°çZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌÜ¯5Ý»\í[½ãy|ÞÙÃçõÄ�8�ÔÏÝøŸgäû¿ËÊ±L{ä?Ã0Ã0ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒ�üÇøü\Sþã|<®)ÿb|��ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eû�î)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu
+ŸÁ¦lÛ+6»úßv´î›<™†×Ã¯‡
+¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï‘GÊßëŽ±š×Äzt�¸^vßä2)?;WmÆrõ5�üoäcö³ŸþIzì?ú¾˜�‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ý�üÓÔÅ"Ñ¯Ñí¤ô
+¹Ý1üÖóäÁñGg×ÿí{+Ò�·’×lûw<ý=}GÝ½ìÚFÆ¨�^ú)õ��¶ìzIpäG¿•ü¯ãKì¬ÖœÎ{Í{ÙÉßeÈïûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì?Ã0Ã0°š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç
+½?Þ‚‘�}¶¡åœXùçwíÅ¶‘ÚvÌ?ßå°ß©ð÷Dðÿ��ùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo	9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({Î±ß¯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç
+_[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´�L“øÇ<²?ç<n¢�Ñ¯n!ÿÂ>=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0×‹¼#ÿ5žßàøzæÇÑ�™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷UO7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý�~Îs.ãÚyœÑÿ�mƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä?Ã0Ã0Ã0Ã0Ã0Ã0Ã0¼.ÄP—~þ*ÖÎ1@G\âŸ¿äÜKÊðÞßrKXÿ˜µs2â±(ß¥òçºŽJëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽ�òwx‰ìb÷)“¿ëî¸_ÊK|•�‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òÏ±Qï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ	\áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ý�ûJY¹¯Z÷­Êêµ¢`%·Œ
+íÒ¤l9�…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡D�ç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+Ã‘Þ…Nþ9£àÝÀ}•{BÆž#t¯é˜×xî�ãÕ­s�XÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oêGý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f�™ògL˜ëz�/¯+Ø½[{Ž™ßºrðÝCôM®Y×q¦~áè[»{�y‹¼£®òÍy	cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú ÄPfmkBTúÎÊþè}ÀxœíÚ�mê0†aa‘ÒAX„A¤‹t®NußêÓ©~¢…÷‘"B~ÇÇv‚Íñ(I’$I’ôßçççñããcºÔþ¿ ïãžiß#ýGªûÙl6Óåp8ßÞÞ¾Öó½s•×[ªØo·Ûïò¸uú�–ñßív?–RŸuß¯êþ+Äf¿ßÕžÔ�ú^û¨|¯}õÉñµŸm³4ë3�™¥ÕÏ­uò�ñ!½ZÈù¥9RÇUšÕþYæø×½åB,zÿÏñô‹Ä"ûÉ|~Ô>Ž/|çÜR×ªïõYçÌžE™®Gß”ë™·L?—:fV²\êº¯ÿ¾Pv³ø¿¿¿¿#R>œÓÛc¦‘± N°¿Òb�úÇñ=­ú¬Øð^Fz=öyN¦I}ê².ç3ðÙã?3‹¶�þœÌ¥Ã*Çª7Ù§’‡Úžé§ÜÆµ2~£zœí»öWúÄ°ÖgÏŽ#�¼ÿä¶g±&þ‰2ãyK;ÏwÊž2Ìv�m“¶—ï£¾"ßG³ýg’±Ê¼d~g÷»´<‹[ÅŸXÛlk=�þ^Ðû“ìk³íÍžGy\¯×‡ìÏ3Múœ^&}É<ýæßA—ºUüK•Q¾VÙö÷ökêIÆ�÷	Ò¢NqÎ9ñÏãè“¸iöü-yÖç¿$I’^Ó½æy3Ý¿2—üÛä8È=Ê°~Í~×ôßS—Z{¾Žßc5f2³^#ãßÇ6òwþè7ÿÒXã&}ý2Ÿ£vÄ<fÛ—Ò}Ÿ]k–Ö¨]sìlÌi–çK1_–s\—1�\§¾pNŽ³gÉ¹WÖÃe[ö	ÌÝ¬ÙßË:ó™ã‰µ�ñfÆšú¸Ríï÷XÛ2­,»úÌ˜±p­üŽ~La¼’í¤Ë\÷Rž¯Ñã’õmÔþk£¬™�ïF}—ó¸µÐFç[³ÿÔ}Q~Ùçõÿ6ä<˜Ë¨Ï«Ì²Ê4ûµFåÛÿÁ1£í£ø�ò|�þü?'þyüìý!Ë‰uæfø$žùŸŒ5ûÏ½¯þÌË9b=º§ŒA/Ÿü>»VîÍ3±=Û3ßóÚ£<_ëñïó(ò”ë…¾Žþ“¾Œú¼vÿ9÷Å>ú
+þG@S¿À³¶Ç¿÷99Gy*þü"¯QúöÿYž¯u*þùl§z;É{-½ÊØ/Žå9v«ý§Ê=÷Q–¼_çs˜>œc)ç,kæ:‰gÎQžÊÿ­%†Ô�,SæÌFñåùšwAæÛòž2v´í¼WÊcÔWql¦×¯×ãÙÛÁšýì[º¯ÜÇ}ð,éñÍgùè7ç÷óF×êû¨}.2Ë˜ãóÚ³<÷¶vKãz~Æ_’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$IÒþ-ÝfàÊU?ßAmkBTúÎÊþè}pxœíÖÑ‰ƒPP±±±±q¹��‰Ù%ùtÃ9ðPgÆ¯«OÏ€á8Žsß÷—zjé½›ÿkŽû[×õÇñœ¦éqLŽY½–™š­ZÖ²,�ë¬a~}†¸·äX’o2L®•yŸ©üKÏüz÷—ìzž%µþ.×uòí'ÿríqÙç{þõ]Ÿçù%ÿôäÿ}’míûu¾mÛÓ;ß÷ùŸú�ëùÕ3�^ýÛ§–UúÞqí|à±0…. 1•IDATxœí›y�\Å�ç?™ï¨»ªõ-©[RKtì1—e ‘‘@¶°Â±3–í%Öã@¬Ãà vgÖƒvfÇ�YfƒÙoØxÆ°FÃ0’‡zZ²�Q«jõÝÕWUu�ï½Ìý£ªšnu·hŒG|/Ôõ2_¾_~3ówe>ái­%Ž&ùÙî·øùLd=®ûd·mXÃ'×€VÅº¢XÿcÌ
+¡•ÒE¢4ÿº�ÿõÌ!F˜©5ž§±MØpÙ"þì�×R
+À”ÁøsCh¥µ§ß}øîûy¡êÕ‘h„„L¾@¼/Áe7ðÄ=›h¨Š¢Ñˆ�	>#„ÖZ?üÔAþÓ÷Ÿ£vA¿‰ã©âä,A¡4]ñ4—¶XüüîYÔÒüñü=äàXŠ‡ž9Lx^¤H¬;�Xå)”,¬�òjGŠoÜõ}Æ‡û>&ö,�?yá0ãI‡ªˆ¿8cç‚V(å2¿¥™—ÞŠóÀûÑIyžB>úÂq„QZÞzîŠº4M%šHÝbvîú5}Ý]…Œç-d6¯Š†IKÎÈn	B{!úúy§³ãw/áy¹þÒf<O#dÉ=´0^/Ÿf<•þÝKxC~sã'ø©¬ƒaœ…\­Â@Œv ¥"‰}4Rž§�,¨æÆËZéO"JZAÌ¢´rÑV™Æé}ƒªÚFZš[>RaÏ7HÐüÙ­k¹òS�œÈ ……žM=Øá`‚‰¡^>¿ñ‹´´4ôŸGZ¹aÐ?’àKÿõQöKÐ4¦!A+4a˜™äñ'8ü/´\°’_?ó-Í“{&­´.êAW×I¾~×_³ûÐ¡º%Ba,7
+cº_#=2À«/æ¡‡æ²K?ýû–ýß=„ÖZh]Lt¥Fúyð‡?äñ'Ÿ¦·¯'7�! ¶i1ëoÜÀÛ·ÓÔÔôû–û¼À$¹§c4>@×É“¤³9üÁ0óç/¤¾¾ö£–ï¼Æ$¹'Þy‡¡xÛ¶Rððù}R¢”&‘'³`ÁÚÛÛ1MsÎF]×Å¶mV¬X�eYsÖÓZsäÈ²Ùìœí9ŽC8fÅŠçØÕ"²Ù,mmm8Žƒaª
+Ë²¨¨¨ ®®Žh4:g;“=úÁ}÷ñ³ŸýŒ††NŸÌRJºººØ¼y3?ü0wß}7íííÔÔÔàºî´ºBÒé4Zkž|òI.»ì²9…|ûí·Ù´iétšP(4­Lk�mÛôôôpç�w²bÅŠ˜…›½öàà Û¶mcxxxÆ;ß/ÃÀ¶mb±K–,áÚk¯eãÆ�ÔÕÕM«''ÿ�Ã0�RÎz™¦‰çy„B!6nÜH*•Bk=£ž‚`0ÈØØ{öì9£�{÷î%�g´cY¹\ŽH$Â¿øE˜•*Hç
+Ž¦èçdÿ(ýÃ)<õ±J“¥8aÊò�}Ù¶�RŠ¡¡!^|ñE¶oßÎ5×\Ã/ùËi²MÎÜ2¹†aÌ:sMÓœìøúõë¹ÿþûÉf³D"”šžM³m¿ßÏK/½ÄwÜA ˜AŠã8¼ôÒKX–…Ïç›|§(Í8iôõõsóM&UÂp"Í[ïóvïÇN
+Ó7’!>–#‘.�÷<”ëb[&uÕaþà‚Zn¾rŸ\ÚP´ÔZ�ˆÒUîË‡Ey„Ãaª««éííeëÖ­lÞ¼y:¹Zëi×Tœ^ÖÚÚÊ¥—^ÊsÏ=G8žQ_)E4åèÑ£?~œÕ«WÏ®««‹7ß|ŸÏ7ù¡5Jš\jŸ(°nýþ_{?»vÿ+¯ÿ¶Ÿîx†tÞEk�)M¤i`&RhÐZçèèKòü›'ùÑ®v¾±a
+±m-¶YÖ‹br6ÏaË�âà—!„˜\ÕSŸÑZ£”BAss3§N�â{ßûW\q���Ìm•æ€ëºX–Åõ×_Ï³Ï>‹ëº3f€RŠp8LOOû÷ïŸ•Ü¶¶6z{{¨¯o@—6=µàdQÚ�P-•Ëoâ¯xœÚõk²Ù¶e`Û5ÁÒ´†…¤vAH”àÐnM€lÎåû¿x“îá1þÏ�ðY&JyE¿s!ð<�L&3I çy8ŽC$!�¢”šA²ã8TWWÓÕÕÅo¼ÁM7ÝôÁÉ-7zÕUWQ__O:�&‹ÍP
+RJ�»wïæ¶ÛnCLÙ-ÖZ³gÏ”*ª¥5(‘O Bu8ó¯F7¬!oFHŽ&ú4a?Êð#U³0Š1ÜMvø8Éx7YÇÁ�.Å¿x-ÕH§@Ào²°)ÆÿÝs™x�ÿýß¶áŸEEM%6ŸÏ‹ÅØ±cÁ`­5Ùl–cÇŽ±k×.†‡‡‰F£³òbYžçqâÄ	€Nn­­­¬]»–]»vÍú2ÏóˆF£´··ÓÙÙÉÒ¥K'ËØ·o±X!$¢�C{
+ó¯@5ÿ!^`Â™@æÆð”H
+"òcø‡ÚÐÃGHõ!;:H8âÂÅ‹X²dÑ°Å[¹A:Üåm¡ ¡¡Ž¿ß¹“•‘¾õŸ¿;§Û'„Àu]LÓä–[n™±"?ûÙÏòÕ¯~uÒ»™K­
+àÈ¸á†xê©§pg†ÀeWª¿¿Ÿ—_~y¹mmmôôôR[W‡Î§PÂÆ]þ¼†KQ*¹aÐ ­B˜X™aÄÀód{^g4~
+¿m±rÕ'¸~Ýv®ýÜçX´x	1CòÜ¾#|ùÞÝøü~lCu³e­�Çã�?Îº
+›fµS	.{õõõÓÊ.¿ürZ[[iooŸáÆ•ŸˆÅbçNîUW]ÅÂ…žu6”]µ}ûöñµ¯}mòþ‹ÿüÏ ¶Ê‘µ"¨å[p*—!óI¤* ¥�òÅ°r˜=/3qb/Éx?õ
+óÙ°u›o¹…Ï\ñ|~ß´÷õÄ“Üÿô1\%‰˜”A@¥Èg'_ÁÃlýÉf³¤R©YŸ/«ŸÏÇªU«Šmœõ-g@}}=W^y%�>ú(±XlF@¡µ&ÐÖÖF__���¤R¼öúD,(Hï¢[ñb‹Ðù P†…¶B‡^Eu<ÍÀÉãÔÌ_À­ßþ.·nÝÊÊ•+gÈ1–Êð�:¹ç^¥{8KCUOiÚ°�ž‹<L¤¡–ªê™�Ïé�RRQQ1í^:�æÇ?þ1���TVVN++»v§N�bÓ¦M\|ñÅÀ9’pã�7²sçÎ
+Šäú|>zzzxå•WØ²eû÷ïã�ãG‰EB8­›q+–!rq$E#®}Aü}{Ñ‡þ��ñ	¾ôÇßàÛß¾ƒ]4£ý·»â<óZ';ÿ¥ƒ×;âD‚~ª¢xZ¡•B&ÚW�¿ë9²ƒ¬¸þë477“Íf§Ø©òZ–E6›å®»î"âyÙl–ãÇ�sðàAb±–eMö·ìžutt°fÍî¿ÿ~‚Áà¿
+¹k×®¥µµ•“'ORQQ�çyÓÊMÓÄqöïßÏ–-[Ø·w/¹‰á‹>O¡îdv(
+ŒÄJtãý©œËÿ¸÷ò­oÝ>Ù–ãz91Äþ·zÙó›^^ÿm£lÛ¢±:‚Ï”xÊE|!¤ëÔ¤³Óâ+_ù2¦iLóag#·P(ðÈ#�Lú°ZkLÓ$‹MFgåû¹\­5[·neÇŽÓ2†çLn(âºë®ã¾ûî›±” ¸dlÛæÐáC$“I··aWÌG5]‰,dA{ $ZH0|Èî½Lör÷ŽÜöÍÛ9ÞŸäpg¯ÿ¶Ÿ×ÛÇ±¾qÆ’I0`PWÂ� qeÑ÷5„ÆL÷À‰I™ñ¬Ã=;þŠk®¹†îîî3e;QSSó^ÔXŠê€Éëº.Žã°nÝ:¾ó�ïÐÚÚ:£­s&`ýúõüèG?"“Éà÷ûg
+…Ž�ð“Ÿ>B_×;X/Çµ« ?ŠÒD8)”�Ä>õŽ‹5ÜôçOñæÛ=ŒMä�Bö›|>êªíbÐ l�J‚P
+ÃMbŽ� ê ãï —Î°lå*~pçwÙºõ�&É{?Rb”-GbS!¥Ä¶m>Ì<ÀöíÛY¼xñ´:ÿ&ä®ZµŠ‹/¹„¯¾JcSzÊÉ­>Ÿ�—MòÐý‰Ò`·®By¹by)— <¡,»™¼â§/ŸÄÉ¨ˆØ4TG°L%L<aS0ÚCºy¬L?"Õ…3ú¹ÁÒC§°L¸pÕ%lÞòG|é–ÍÌÿ€É})%ÙL†‚ã „À4ÍÉüHypÊIª“'OràÀ^xá{ì1Ö¬Y3ÙÎ9‘[>éØ°áóì}éE¼ÜRh´ÒEßÏð�ÂU’5£˜-ˆ@
+ÚËƒ�S2]�¸Z ÝµUUfñ¤%^åäðò#ˆ‰AD²�B²o¼›ÄÄ†v¨ˆFY¹x)WþÉV®þÜµ¬^½†ªÓ¬úû…ë:Ô××�Åð”"9ž »ç‘HÓ4'Ã_­5TVVÒÙÙÉí·ßÎÓO?=T�¹SííµW_Mã‚E$]AxÞB´¿˜‡Ô¢|´À0|(
+¸9Ó¡hŠA•t&�¹<*Ÿ$ŸÄKöã%ðRqtnƒ�@�šÊÍ«³üÂY¹ú.ùä§hm]‚ßï?§I)á®ïÜÉW·ý	†” <þö‡òW}/±hÃx/�S6n,ààÁƒìÞ½››o¾8r5(­yå7§Øw´�ÎîÔ'ÿ#ÒâùÃ¸²¨K…*f»´PÅå,ðEù	Ðnñ7�F›!Ì‰^¬£?e4>ˆç)bÑ
+jêêX°r%‹[/ ué–^°œÅ-‹X°°ù¾³ç³$ÏEé—´B¨ÂóPùÃ´‰'2t¦Øúµ?åÀ�×xæÿ‰…LóŠÊ^†iš<ÿüólÜ¸±˜¦ýÐä
+ˆ'²l»÷Ÿ8ñî¾HˆššZ,\¥À)A
+ÐÃË¡óãÈÜ8ÒIáV-G	ÒsÐ²¤wÝ4¹àBDí¥üùm+Y¾úÓÌ«k¤¡¾ŽºÚÚs:¬´F
+QÊ™Ëâ†·W·€(
+²2|è@5ÁÖyâP�gû_ä_ßî¡³{”Wr7®¿ž'~õÔd&pªqB`YGŽa||œªªªsS™9—@Í<ªb(ÏE+ÃÉ@!Ù1ŒÜ0"7¹1Œ|Ü	t~½d#,Z�Î%ÐJ‡BÀpí5ÄkWñ­ë¯<ñ¦AŠb&`K/Wô‡íyxÑtpkð‚
+%¦æÙŽ4éöCøl?¾HŒ¿¹÷/é;²›ºÚâVÎl9ïr.ehhèÜÉÍæò¬^TÃØ`½G_A¥P™8U~‰tÓàæ‹‘½VÅ,L„0ÀŽ`Ÿ|Ç_‰Óx2ŸDë<J˜B
+XÜû‹6žã]¾~ÃJ®ºxõUB~kÖÈj6¸ž¢àzäòc9FS9úÇ²¼qøãMëÍòá°‚(i£‘ 4B	´DbQ*+£H4¢�äÉÇ¡)&¨®©a"™˜5¿`Û6ccctww³|ùòs#wQc%¿úï_àî;¾É¯ýœKV]€^�ÁøÒ@[þÒweBô¤ÞÕ€Ñù8Úsò_HE4Šmæqœ<BJj+}ëIð§í¡6b±tAK+i¬Š
+Y„ƒ–e •ÆuÙB�lA3‘q�È3>‘a,™#>že8™!�)�)(„!©¬½YxQ<°!¸ 
+'é8ÎÈ)²Ã�äGºÈ%ùÜg¾@"‘bldf¢ª,åóyzzz€ÓÚÙ¶yNGÈï­øüÍ_`Ý†›Yµj
+RJ6Þ´‘‘áÉù.?[Ì±¢]0m¤FÇã\~ùööD‰6-#àd&ÐÊ¥"dÛ¤3{�ÆÙÓ>€Æ+EL²hÌ´FQE‹Ç¯h‰�`KÓ6±ýv Du…iØ <4
+S9È|Q}‘B'{`bé$H�Âur464²è–³úÓÛXwÝ:î¹ç/Èd2ø|¾�…a
+>\™Ë®ë�ÏçqœZ�¶Ai¥²™1¹FpÃ
+8íÞ5W_Íƒ>HSSê´\ÃäHKI*�¥µy>�ýàþþÉg¹çï§7ÜJ´q9v0\Á°ŸpHMFJÅåOâŠßÄI!�ÂC"EO@€Ôx´“C$‡pÒ#�B%ûÈ&ñ2ÃH'�mCA,Ó"™L±é–/³õÖÿÀÂ–EÌ«®&XÊßFJÛ<åLØ4žJÙ´C‡�Çß;2Ð{’±á8¦eÏ$Br¹ÕÕÕ4,\2+YS¡ò¼õÖ[gô9ËmÖÖÖRÛÔÀ»G^ão~øwì9xœaÌŠt¨ì J†QÊC�¹CÚC¨Ú+ Ý¢�†ü8"?†È�!³#¨l�O!)ðYTUVÒÐ4ŸÅ­Ëh]¶œå]Dsó"LÓ$—Ë3Q+³¹'¹Ô(£#£³ïfˆ÷Bå†…-Er•Rtö%Hä=ü†˜õð~9ÓîÎ‘Qš
+Ã4gÝ¢ŸE”ÖÅ6¥Ä2
+|>ÇŽ´óÄÎ_ðú�8ÙqLi"¤�2} Íâ¬T
+�ç‚Î�ç€W@89¤vP0,´DøcÄªëiii¡uù2–-[JKóªæÍCJÏóŠûx%õWÞ¤œ±ê¦ìÏ¶É©K<¡5žVErÓÙ<7ý—_òâ¡~‚•!Pg åýë÷—™Öfù4 išTUÏÃð¦�Bä‡NYÜŸòy¡F	Yò H	H´4Ð–¬Ú�í'èò0¥@¹ùl–L6‹S(”‘ÌÒµÙúzÖ¾	¤ô˜±Ë:Wà`ŒÙ�–|Xg_®&Õ?¦~?Dš :�ÅóAºdËÆ±”o—Z½w)E:5A|,žeC$JòAä=[]
+¶¡Œ"¹B€e›à·Àožq_ÿ£�YäÊ+€Îƒ.y_R‰)—Cé§K€mòáGÿ,¯Ö-!¡ù­©®˜.í³èä–(L~7ë§s>8b–òßQÿJÍ–�O9½ä÷Oêù=ùq@ÍÉŸ%›þ˜ä£¸èýZ£µ(’«KCM­Ð¨�ÉýPxÏÐ(àÿçnÓ£Ï
+IEND®B`‚
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/images/logoIver.png
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.number
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.number	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.number	(revision 10281)
@@ -0,0 +1,3 @@
+#Build Number for ANT. Do not edit!
+#Tue Jan 30 17:54:13 CET 2007
+build.number=1

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/build.number
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:keywords
   + Author Date Id Revision

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.txt
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.txt	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.txt	(revision 10281)
@@ -0,0 +1,11 @@
+Notas sobre la generación del instalable: 
+-------------------------------------------------------------------
+
+Dejo aquí las modificaciones que habría que hacer sobre le proyecto 'install' de
+gvSIG que hice para generar los instalables de la extensión del Piloto de Raster y
+Proyecciones, a modo de copia de seguridad.
+
+Para reconstruirlo, descomprimir el tar sobre el workspace en el que ya se halla hecho un
+'checkout' del install y tenga un andami con la aplicación rodando con las extensiones.
+
+Los fichero de las librerías binarias espera que estén el el directorio /binaries/w32 y /binaries/linux del propio workspace.

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.txt
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.tar.gz
===================================================================
--- tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.tar.gz	(revision 0)
+++ tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.tar.gz	(revision 10281)
@@ -0,0 +1,58 @@
+‹·Ô¸EZaZzma.tarì=ívÛ¶’ýk�Ów@iŸë6'"EÉ²Sä¬b«©½Ží•í¤Ýæ&!	6E² é¯ÛûHûká>Ò¾ÀÎ D}Ñ²ê¸¹
+Ñ&¶€ÁÌ`03˜Á‡Âý(¦žg}õ	KÊF½Ž?í�º�ý™–¯ìJ½^[[«nl¬U±«64“ú§d*-	Œ_òÕeÿš_³ájÿ7-\Ï¿úIÝ@”»×§ûoË÷ŸJ)3ÿëöÌÿz¥V/æÿ9Jîü‰pXôÇ4aÞù_·ëÕÊØµRYÛ(æÿ9ÊœóŸDLìûaR¿kÞö½¶Cãyià¯¯­Íœ»²&çß^ß¨Ö7*0ÿkUæ¿ò)ž–/|þ·=˜Ð�:W¯K„lG± ÜÝ1bv›½`žAâÛxÇh%1%”HÕØ4¬×¥mkØñÏCQ/‹Ûÿ=›—ÆÃö_Ÿ°ÿZµ°ÿç(sÚÿ	�{$
+ðW+Û¿Ë’yi,bÿÕõÂþŸ£öÿe—…íŸùÝyi,dÿÅúÿ,¥°ÿ/»,lÿAç¥±�ýÛ…ý?G)ìÿË.Û?�?­ýñÿ³”Âþ¿ì²°ý‡�˜—Æ"ö_/Öÿg)…ýÙeaû�Â'\ÿ'ÏÿjµÂþŸ£ç_vYØþ¯©7/�…ì¿Øÿ{–RØÿ—]kÿ§!sÐþCãû·íõõ1û¯­Ù…ý?KÙÌìëÒÒvH}æ‘@¸Lìª–¶;œy.YŠïB¶cDŒ
+§ghXZº¦‚Óª÷�NÏ‡‡í“ÆÙ�†l‹ø=Ô¯Õ
+ô+ðyÛe‘#xóÀ'Ôã]ÇðX'6ˆ•BD Z@gJº�ä$Ì˜oR—–œs®:Üc>íÕP]ê»´ÏÍK*J€T£p¹`Nˆ;ÀœiuO¼8Ûœ²æôî0k^ÝÁ„åõ,É`Û6+	¢#ñùmfDcÝ‚0~T‡•óÓf«ýãñ»æ£ºín~lÀ$�¶FÄeäD]AûôãŽî»ÁM”‡Fw%?€h£‡û[8ƒRg,©4¨Q–T)\/2ŠV¬ŸM™Óÿk°r(‚K3ê=Ž†¼ÿ›ÿ­)ÿ_[¯ÛÕ�
+ôÿ•"þ{ž²ü�…î2ê•—¬dý¸åñ‹¨äù¤øUÍ|`VÌºYÉT<aV
+{ÿlËœö/ëmøº<`ÿþ©ü¯¾V­n@àW©Úµ�bÿ÷YÊÐþ—I:É%v"&‡{íÃý7­FëgévVÆ*6�I‡aiï“Öñ‚ïŒA!9IÉ‚@Žù„ `�èšÝëˆwMGD–Kcj Gšìk”–/é5%å=üaMAÅ�BÄ¸£3~1�1ƒ”��ÃÂM«-I³ÌíW~¦ò‚Q?Ê|ö‚îÚeÙ6«æ«L-¿f¢œÄejAèX®˜ßƒ¬•!UÊ6
+Þ�‚,©[†öÕ®¶ëíJ¦Çv“ExÊ4ä£\WQ¹
+þ¶š©=øÀï©pwƒ~‚õcl"åŸú·õJåq‚¾‰|›Z‡4ñ!zjîÉÄ¼�»´rÐxßPa(Î]!ýGJ_7]’êœ
+cå?Œ§�žsý¿n|l¾?^òó»ñžöÿ•Ju£†ï¿Šû?ÏT¶õS™˜ƒ.¢¦í˜åaúÆýN 3:†˜\¿VI 3c¢}éDbÛJ›4˜ÆñP˜¶lMk$@÷áïé¢²ö·Ìg‚z<¦1yO!—w8õ©Iv?bžÇ§Ä]Ý÷;‚²(‰'ŸNÎø\rÂú”{;†ÌI'ìäŒ9~å_ÿCevìQ(Ñ§ÿ×ÿúäÔl˜ãx`C®·á½îÅq¸iY777zÑê‚3„U²\hE(t!CI¬m[Ù
+Ì‹•dá·nÂCÁ:é1ÞíÅ;Æz2lx¹¹rÇÀ}Þp\¬ñª¢we<ÚÑÃòøo	w
+5`Hù;àI¼»ÌÀ%Õ”˜¤,·0Ô¼}S.“À÷îÈc!‰{(¿›Ð.Hø¦Ç�¡‚êE�qp9#Ü×Žª\Ö<©aÂ£ ¶cD!5¬i
+×Ô›ÞÀü®l@v&Oïåô|h˜Á„sÏf£tiNO—%³{v8öœÞt:£]/gx½$‡0ŠÙ=/C:½þ]4½ÁgîŒ†@Loo6w¡î5•;ô§£Éî"§;£áújFÃ
+›Þ�\‰ÛÛVªïðû ³‘½Ð�DÂž†	Oè™ñ-¸Ür<ä¸#v‚[YóÈšà”®‡Íæ»¦Ù‹ûžêýãÙ»Cô1ª;Úýì¾¼�&gÝ -=K=ËeØU¨ö•³†ˆArëM•!6Ó´Àa2ÇWCÅ[é°o¹Š+,?�žÊ½X´âý{ÅnŸfñMþ2Bá±çŠòduv!‘t,¸½øð_°8wYŒÌ-Fv–„yï06†´Iï€~Z"ªéÉ¡žAH6=!\f’MY�ÍØ¥¬G—²�1sÊª«s¥ò„¨ñwÍ¬Ç–ý×løÆësG‰{Ü‡¿eN1GG
+®AÑóè±É�påoÔ1‹ãÑ(Rkøˆ‹ÐÞa(ë…fÁ Qå75Í—³	ðótêrIkß”sÊû¡Ç~à>�zC@}H€²‘r‚!èîàÈõ¸¸ÄiÉ¸£#ˆysqÅÒ‘Oæ|éµb…bpGCð×ÛýÄ*N‚âB‰L¾“g TÑ¬	� ˆ!:�‡¡÷ô¸K1õ8d–ò å%	a‰Uüè@0)^CÐ5fCläH31*Ò#~Âð8Fšqm[Yv%ÿèâ´·s¹˜oÓÄP
+˜­¤”�ulJÙ	-ºwA¦CëUl
+õ±£'c êð?Ð“•jRÊjR€²ßá]KÊ&†¤\zÆ!µ�³ÉÍ1ØÉ‘Y®ÀŠH3÷Øn– 7sËc1Á!<–¹á¶H¢Ž/?K�~ôù2w	õýÀ/cZùŒÙìÆœ±äÔþ÷á´ì²~0›]ôçx/hÌ‡ì¶NçuÝBzLJÌ¡
+Ep§ÂZp/ã.t®<‘#Ù�ž:Î?Dñ)µ]äØâŸÍÜ[`è´Ç;q#ÌqgCÞn˜É³ÚOÎ¬GÀ˜�9ƒ5~9…äÒÓ“„Y¸ô¹&<ÃŒ¥9ó>gh#ÉT–”Ê¥¦œÜŒãÖ®‡Ý2'‰GQÉ+>¨û�D9èÕ]†;Q¬a†m¸•ÆƒÊå^" �®2Ò|”Dñôh"Ï×g^³ï£Ä80�?.¾Tãbóð:.0ÉõLy
+Ý²ÎéÕ'Ì³¶­ìpq�ó‹*3ÏnþœïÜ¨Õä÷?Ö«Å÷ÿ=GÉ�ÿgþþG9ÿ•
+ùý�ëÅ÷>K™sþÕRÄ}¾�Î«kúþŸ½QY·+xÿÛ®¯UŠóßç(¿¸¬C/þû×%üo‹¨—¡ò19áàFšOÅ×%ÜóÜ!)ènÐ§¾@;»”AŽØÄj(
+·Ïc¹^?ôè½ÜdK/‹#ÈÒ²Œ—J–ÓŽž‘fšåþÓ2ÁË%rÏîšÛ½ Ï0-Ààá…å@èÃÜ”Y^W±’EÀI‡ã½Š@wl´Þž.‡ºÌ§¸HâÀ
+"âÁÈ’>ócø°ê·„‘ˆ‘ˆÁ£}Šö”DÀZ†íå—òg~š¦)ÿ~yØ�þÆ"ÀMB~Í¡?óÉª¿J¼¤K3*|ô/“£ÍA”ðí_pÀC•¤‘O)–žjG*S&«ïµD¢U‚ÛÇBP+Q0�·C�I·-©×O¨Ëa¤duy–È`+¦›’ˆ/ÔD¢�¸#-‡F(*È	cÈ¿.á>h¨ŒžîòÞàV˜9×%°©�Œå·ïñP+0/”êè-£­i·Œ¶ÆnmM½e´5õ–ÑVÞ-£­‰[F[Óom�ß2Úš¼e´5åŽÑÖì;F[OwÇHY‡²qeç‡Òú‰´@�Ê’ã¾#? hDjõ (ÿ6bJW^Ñ„ˆÜ�	â~ºªO•ù»ÍSrºO~nž’Ÿ‰=‚f…ÆÇ¢�	|�†ÆzÚç¾Ôri$ŽÚÊ�ûnó.ÇÔ2–¾G¶Ý¸@ùç×%OJ†Óˆî|´¢†úÁ&qñDÄ‘ð5M"5î>´x×v¦NÉC ëÒC‡ÀGœßî1è)�
+X‰î£Ãådc'^ðÝpàûCl›Dë÷°µo’ÆÉÉáþnãlÿø(pÏ`,#-Ò§3)y�¼�>@6~AÕ6Ú”ùåÐ�Å`ÖôøÁ·.»À	arõÄÙq8øXœ-˜‡�Ë[½LzìÕgÄ
+vñOü™¥(ë÷3S&(­¦ýÊå×G8¬”"à^\l )°Áäfv7­ìK™P¿”±� uYÌ6×ÌjÛ¶SKø‘^p¼¡„‚ë&¾šÇ$JÀJ†@mzôNêi�‚»•nrLèvÐj;°P¤b-“ŒäÕ‚ã°,¡!à)Çz�[˜àHÝGÁ€}ÕV±?èw4³)ƒÈ÷]Ž?õ'éòpÀÖ¸1�Ž±ä¨…/9t¹ÃOBiŸ?Ej�®~„œaîwODŽt¨"jRÞ«[U©Tqƒ0¸Té‚¾s}ädŽT¶ñ.ÌM[Û•õ!Þ=Á²ØEA÷%~X©³+í5JÎÝàÆ÷ê6}¦‹«¡t–Ê0�JgÐ±ŒÉ
+›]e!fÈc`$£d´ßRüž¤q’vIiä&ß‚ZÂÜ°[ŽÑÐ�´[tNKÚ07ž<ÒTƒŽ^uøk	Ìüo	ÿNJNF)úóƒPþD¢ôçyå*Ú€kŒ�´*å¤‰f™†`hpØ ›Wöš¤Dª•„ãl˜jY¥®£Blé$ñYu‹Ð®T/°«ì°|tŽÌCxh’ê»§~'à0ÐG�[JÀ`ô;G¼$!2ƒN}°NÅD�–ŒO°«/]@Ä2�ŸËØ@Ù1´q„Ÿ×ÃàOÊ
+±g^.]âºsö›5J�_¨ÄÕ†ðÂ1n*om—ù
+Fí¾a´À²ª›@|Xùl 
+åÚ˜þáÿsSFý³ñ@X~Ù
+Â»–>1“¯0!OÓCÃ¨zJ,ãÀ~tí„¶éz 	z˜i®²*¹ÁŒºªÇù61Š­:Ûc-ãeü¯›EXËeo-™ó¶¹Wmðeq®åâ¬Ï…seýÁq¯çŽ›97r„U,‹v=—Ó�‡PfQmä¢z•‡êh÷ÔñYœÅö*Û÷`k:7»Ylßçb³+£ÑèJ>º\tç�Ö�à›e"œ¹vÒué(ÂÙV¢Ñå	â«¬WFPæÛ‰�k(]/‰kÕtù&bçÚÈeÈºë£èf™‡F—kðG^jA˜ov®eà9°ßµk#óÍÃÎµøóNga¾…Ø¹&r�:é|©æZˆ<dÍúè|û¨æÚÇ®ˆ|~2Žr–‰@ÄãËxj°ôc "Hi¸ÏÅ jFh½§¦!pƒEæ§2vÉì˜­ê$)*¾PqO§ÑÌPbZäðË`O–ÓI	`ê˜ýüõ_øH4wÿÿ¹ÞÙÕáû/<'ªVŠïz¦R¼ÿú«¾ÿÊ~?Kñ¬xV<}æSF¿ÊH}=¿Çþ†¶¯ÓxŸCî_a ¤®Rý…ž�eñü±‡cò2^ñF¬x#ö)Þˆ¡rM–óÜëóF>‡÷adîbÈ®2ó?ñ�XñDìÙŸˆ�\´.^‰}&¯rŠWbÅ+±Ï™Óâ•XñJì©_‰
+ßús¶Ç?÷�Øb†FÒ‹1ùÏt§zg£Ýç3ª6�ZÍÁ÷ªM^vS«öõs­þI(�núO¡§’ÿ¥9ÈŽ|gÜ§ÛœDViÎA�?pûTãšŸÎÃCS#K�íRñì«(Ù’žÿàµ3Á/ä]ÚE¿çuVÉÿþ×j­^‘ï?Ö6j•
+¾ÿªW+Å¿ÿó,Eÿë�z¥Ò2Þ,•÷77qÞw‚Ékyn²Sî÷™ËiLñ:3+E,&e†�/`•g‚·å.kéðxwçWˆ²rØ8zK~Ü.Y�¬¶ùÂ²VÅ~»ú>¨�GÂx‚,qÈsàáý4)¶“@j^âò ;Þ%;ÄÀƒ‘¿“-<¬ðK„4[­ãVûMã´¹·ßÚ1šxËOêf÷¯�1¼½A¡ËÆHÊïeÞˆ«(ÄË·ÁTÀ�«Úh>®%ùê$é³�RÒ}Ð0ÔH³#‚¾<ZÐø¸ñ€À	Ä.Cka”:¼ô)»¤Ý¹iÈký †¿ý�È:ÝAÕ8ƒÏJrß!F7èü÷ßgÜŒÀ2”%=˜UÔ”�ˆdØvËcb“-B	$ÀÎ¯á�ê ¢´áµ?S~-ñ[P2šM’÷ô&	±Û•6õÂ-�í5[§»Çæ¼‡_ö��RÍûáüðPW¥
+xgû¨¹¸SÔoZûÍFYMK!=ƒ‰Ãd†9‰0qúí†ÃÄ€.ü÷þ	s_âSL!pô»Nýûø‰§õ%
+4[m©X+�““£Æ»¦QÎòð±=ìpÐh!@ÔÈÂ_k&‡y“Š>"‚¿BCŒú›JF¡þ}U"•$y¥Ò›óýÃ½£ówoš­�_Qeeq‘pÏ5ý¤ÁÄŽe…«#*3_f�Å�¾„69²É‰7>¶�•[†yÏC©j‡ûG;Ót_6~˜Öx£ß5v'ûÔ)A¯½ã§ÀÚ([Y¥™`¨¬ƒ¾2¯¿Z77îKÀØùO�Ä!Ï>†¸{_R8ÞÀ Ã‹ÀÅ‡ý³!aXS�èR0‰1•Oó§Ga‘»e4ð–Å6à±–`ZÛ`ç�”<Ì{Ù®H­­Ü,QiùøüìäüLšªÕ÷c+bœ@º"	ƒ2îØ9Ô:“|»–~ºú=j¤ãDKÌÆÊY£õ¶)?vÄ¢}z|ÞÚm¶›?�íäÛáø»ÆÑ^ã,í•ý?C©$}¤ñb¼ºA-è÷õš`Ìî±LNðîý!ª—‚ÿb¬¤‡a©ßAs
+b”ËDiü´ö’èÐIR�Rÿ
+}r9$S·)JN8ôÀmLÕô©ìdí!ø�)õ­fcªÑ×Ä±°lX&Gx£Í£÷2äQ«»Š«ÆÈå�8¼åÏ}ÇK¸ƒØ}::&è2[V
+Káx‡cúÜâÖÌùšp‹@èEˆú§>Œn³ä‚¨æÃ–2ÃìùR°S°xÊ±ÎTï4M0ñœrf¿<2'
+[YLày„œ©kÇÿi¢‰+ü ÜHŽ~x@?<�J
+š¡‰SÛ”6ï3ÓÈÿùáùI²´¼‹÷^Ó+}„zG¢$"± ê,`Äg¥ý°•¢C…+·:£ujfFª€…ryöôaK]ƒ)§ŸË¶Y“ÛÖbZ£è®ÇjHÊ`5µª|<¡vMq^þ¯„ÇéÀ ~IúÔçX"ÿ¿½«ßmÛâGOÁÉn�/Û‰—!@ƒÈoÐfC ¶"QlÙQgKžl§Nº>Ðžc/¶û EêÓNæ´ÿˆ(’Ø<’:êx¼;î0•e	¸Ht°�!×ô—ª-8~?Q
+ËÍrèOÔ1ÕG€¹ŠøLç(ˆÏ_D«-š}÷¾éÏÁR¯ÕÐéÁPš¡*t»k*ÌKÓê:–_5NlMÈk=»â�ï1Ãâ¹'¾Ñ'›<˜Pê´\V|Ä1Â[h˜ÄÜŽ¼¡ƒ=9Ó„ŒZÞñžÆÈeíQT?óæýËÅo¸wÎÑ8èþ^õ>|,|bHIö¶o7‹úIl(i&^ºû5±põ²,vï�K¹˜„¢ê‰±ÃÈª€Œ�¼±ç«eÁ‡Ñx¼ÀR¹Rº¥@û·½ý¾øÿTÁÎ7¾’�–×¯EdÁE¬vºdÁIÚïŠ‰»ÅÖž%W½ùØ\±ÎÊ¬2›]å7KVe-›œÅ’;¤”ñæŸ�j«›eÌ
+^ìCO?³‘€BŽK�·‚ubj$40Äz:yÆã\­ãqr:É^2«xL©C¯Ë½NF…¾KŒ›í&,°-6|¤SYlèá	EclQXŽ?õSŸÑu§ñÀŠ:´S>HçÔpSWgøÝZf¬Ð»zYvóž¾PQýÜ9ï\œ\ˆÓ³îåÅÙ�ÅŠŠ‰/;uþ˜±)›9acøhLÞ.�ÞëðwÊwÐ&±]Õ½¦ÎmmTÿ¿®8çhÚE†%´É–s’n@šŒš§¾n¢yÛ-`†h§¨ˆ®;£ø`/Ñª‰B„¤C«k9ð�Ð}ACsì¹>éÁÔ£é�GÆ@¢=mJ‘i*ÙiÚ…´‹j·ÎŸÐ3˜ªKˆ
+‡8B%v7úbgQDˆáí
+�‰}Ö[*ªÆc©zïþß¯
+f�åÉ
+n¶3å
+%ìœRgLøÕÑ3eÎ�ìÄ¬€~M¦�Ìþ\Âx}?[Ä/bÏXä·\3L¯é½Ä‡ˆ™SÏò,)³¯$c¯L©M�=.y1íe$½ÊÍ*&[Fsd¢E´@ÎšzO™¤�¡®Vv«Dç×Ÿ0Üš3é½ZôPÖ`"‹�Y£^0÷gÇ7=g&¿zêË¾ã¡êÆêý[|ê‰úèFõ^ÝÜ¬òŸ;­­-Q_zÌ¡�`úFÌ/# Ð$èÑuÄÔÎ=òëD€×SiÁ°Ó
+HjqÕ7ÿ¶E;âi­¼è7GzOÅîíE¿ÂØP2O*AqHªÑ!Ý=QV­�Œo�L…õt}î'Ø�
+µ\Ìf±°T²‚}°1ËÏÐ-yç(È«5lÊL·r$&s?H�mM·ÎÌbm—$ù_Êæ
+áªpí pËt>Eh3
+we 3*ÊÔs'I¬,W R
+sEÒUè@qZË¶ôŒ�Ê4~2cŸvUŸ"ùêM.o„ÖFæZ?|„ˆ`WW}Y¨G¯èòìò¾ i…×c'c\›'M¸Ë5b#£„^Ë(&†˜Û"ñ
+©ªD£ÃÇnc:Xˆ$­ˆ?g[#›
+ýkîÎÜ¸S£@)Èµ]��QôÓkK&m¥Ë!B”±h­c\#�ëâ7R£È¶Ea“äÔ’j3E$W/±L“™P½‰jCYÇ-JðVÆ2@,jÊ0K&ùÓŠø½Ó³*JÃÐÀ°žH?¡ƒÙjk…¤ÿ”+¨²‘9öû“·öTB?ì£Æ’âÇ§¸¹z1ÖÝnàù-)}‚ls’ÄvÃ™L�„™‹GSi6‰Ïaeƒ²‰€�>—0€bHž¦ÂVd!ŸÈÙû{�ïEƒ©æ˜æDØsâmæ
+Âê†·s¿?"Múö8ÚÀÛ€y€é¥Q£Ì=®ëc†Š;T„³¦Ñ7ßnß™
+ß…·HXƒô„“ �X£ÒU†mÀL4Œ(à£!»àŸŒã�Y[$OØœl†¼å'†Ñ…¶'ç—œŒ‡Rð™;ÀP¨ævLº�Ã‰Ø#Üy¥_·i°D‚pè6|wÖäŽaâ@Û&âïß:‹ïùEåš9Wë£ÿcoïðð€ó?[­ýƒæüPâ•ù^–å.DC¨Ø[
+éCé&Ç5ºéSSU:1åµzó>Êo-“&yZŠï
+nÖÙÛqP
+Ñå�ŸrÜw~T®õ‘;ôB}ª0ô-öˆPÃ
+”Ï@¼a}óï?>'�2Ò­ƒp©ˆUÔ—ú-t#Ä‡Äú`ËÒ�ìãM+v9ÈZríÒÚÊgO>µÏ(�Œ±šÉ²•uO’‡ûÖ²W–²”¥,e)KYÊR–²”¥,e)KY¾NùT”ÊÈ
\ No newline at end of file

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/install/install.tar.gz
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/cms.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/cms.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/gvsig-ui.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/gvsig-ui.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1-demo.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/jfreechart-1.0.1-demo.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/jcommon-1.0.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster/lib/jcommon-1.0.0.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: tags/Root_v10+Piloto/extensions/extgvSIGPiloto-Raster
___________________________________________________________________
Added: svn:ignore
   + bin
dist
gvSIG*.zip
build-doc


