goffice r2174 - in trunk: . pixmaps plugins/plot_surface



Author: jbrefort
Date: Mon Aug 11 19:50:19 2008
New Revision: 2174
URL: http://svn.gnome.org/viewvc/goffice?rev=2174&view=rev

Log:
2008-08-11  Mariusz Adamski  <mariusz adamski gmail com>

	* pixmaps/Makefile.am: add new pixmaps for surface plots.
	* pixmaps/chart_surface_2_2.png: ditto.
	* pixmaps/chart_surface_2_2.svg: ditto.
	* plugins/plot_surface/Makefile.am: add surface plots based on xyz data
	averaged on a grid.
	* plugins/plot_surface/gog-surface.c: ditto.
	* plugins/plot_surface/gog-xyz-surface-prefs.c:
	* plugins/plot_surface/gog-xyz-surface-prefs.glade:
	* plugins/plot_surface/gog-xyz-surface.c: ditto.
	* plugins/plot_surface/gog-xyz-surface.h: ditto.
	* plugins/plot_surface/gog-xyz.c: ditto.
	* plugins/plot_surface/gog-xyz.h: ditto.
	* plugins/plot_surface/plot-types.xml.in: ditto.
	* plugins/plot_surface/plugin.xml.in: ditto.



Added:
   trunk/pixmaps/chart_surface_2_2.png   (contents, props changed)
   trunk/pixmaps/chart_surface_2_2.svg
   trunk/plugins/plot_surface/gog-xyz-surface-prefs.c
   trunk/plugins/plot_surface/gog-xyz-surface-prefs.glade
   trunk/plugins/plot_surface/gog-xyz-surface.c
   trunk/plugins/plot_surface/gog-xyz-surface.h
Modified:
   trunk/ChangeLog
   trunk/pixmaps/Makefile.am
   trunk/plugins/plot_surface/Makefile.am
   trunk/plugins/plot_surface/gog-surface.c
   trunk/plugins/plot_surface/gog-xyz.c
   trunk/plugins/plot_surface/gog-xyz.h
   trunk/plugins/plot_surface/plot-types.xml.in
   trunk/plugins/plot_surface/plugin.xml.in

Modified: trunk/pixmaps/Makefile.am
==============================================================================
--- trunk/pixmaps/Makefile.am	(original)
+++ trunk/pixmaps/Makefile.am	Mon Aug 11 19:50:19 2008
@@ -40,7 +40,7 @@
 	chart_minmax_1_1.png	chart_minmax_1_2.png \
 	chart_minmax_2_1.png	chart_minmax_2_2.png \
 	chart_histogram_1_1.png \
-	chart_surface_2_1.png \
+	chart_surface_2_1.png	chart_surface_2_2.png \
 	\
 	area.xpm 	\
 	bar.xpm		\

Added: trunk/pixmaps/chart_surface_2_2.png
==============================================================================
Binary file. No diff available.

Added: trunk/pixmaps/chart_surface_2_2.svg
==============================================================================
--- (empty file)
+++ trunk/pixmaps/chart_surface_2_2.svg	Mon Aug 11 19:50:19 2008
@@ -0,0 +1,817 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://web.resource.org/cc/";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   id="svg1"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   width="64.000000mm"
+   height="59.999998mm"
+   sodipodi:docbase="/home/marian/dev/c/goffice/pixmaps"
+   sodipodi:docname="chart_surface_2_2.svg"
+   inkscape:export-filename="/home/jean/devel/svn/goffice-3d/pixmaps/chart_surface_2_1.png"
+   inkscape:export-xdpi="25.400000"
+   inkscape:export-ydpi="25.400000"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient4044">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="0.0000000"
+         id="stop4045" />
+      <stop
+         style="stop-color:#363636;stop-opacity:0.18750000;"
+         offset="1.0000000"
+         id="stop4046" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3418">
+      <stop
+         style="stop-color:#f7f7f7;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop3419" />
+      <stop
+         style="stop-color:#dedede;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3420" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2791">
+      <stop
+         style="stop-color:#fbfbfb;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop2792" />
+      <stop
+         style="stop-color:#e9e9e9;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop2793" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2791"
+       id="linearGradient2794"
+       x1="0.49693251"
+       y1="0.058441557"
+       x2="0.49079755"
+       y2="0.96103895" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3418"
+       id="linearGradient3417"
+       x1="114.60959"
+       y1="35.200919"
+       x2="113.68569"
+       y2="186.26885"
+       gradientTransform="scale(1.046497,0.955569)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4044"
+       id="linearGradient4043"
+       x1="0.49689442"
+       y1="0.012987013"
+       x2="0.49689442"
+       y2="0.99350649" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0000000"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2"
+     inkscape:cx="127.24869"
+     inkscape:cy="130.45862"
+     inkscape:window-width="1024"
+     inkscape:window-height="693"
+     showborder="true"
+     showgrid="true"
+     gridspacingy="1.0000000mm"
+     gridspacingx="1.0000000mm"
+     gridoriginy="0.50000000mm"
+     gridoriginx="0.50000000mm"
+     inkscape:grid-points="true"
+     inkscape:grid-bbox="true"
+     gridtolerance="0.99999999px"
+     inkscape:guide-bbox="true"
+     inkscape:guide-points="true"
+     guidetolerance="1.0000000mm"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:current-layer="svg1"
+     inkscape:document-units="mm">
+    <sodipodi:guide
+       orientation="vertical"
+       position="23.994627"
+       id="guide5924" />
+    <sodipodi:guide
+       orientation="vertical"
+       position="58.080453"
+       id="guide5925" />
+    <sodipodi:guide
+       orientation="vertical"
+       position="92.166278"
+       id="guide5926" />
+    <sodipodi:guide
+       orientation="vertical"
+       position="126.25210"
+       id="guide5927" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <rect
+     style="fill:url(#linearGradient4043);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:3.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+     id="rect4047"
+     width="184.25197"
+     height="177.15660"
+     x="23.031496"
+     y="23.040251"
+     rx="17.594519"
+     ry="14.164467" />
+  <rect
+     style="fill:url(#linearGradient4043);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:3.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+     id="rect3421"
+     width="177.16536"
+     height="173.62204"
+     x="26.574802"
+     y="23.031490"
+     rx="17.594519"
+     ry="14.164467" />
+  <rect
+     style="fill:url(#linearGradient2794);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:3.5262673;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;"
+     id="rect2169"
+     width="170.38249"
+     height="159.80026"
+     x="30.118111"
+     y="26.554472"
+     rx="17.594519"
+     ry="14.164467" />
+  <rect
+     style="fill:url(#linearGradient3417);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:3.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+     id="rect3416"
+     width="163.39728"
+     height="149.19994"
+     x="31.955462"
+     y="31.923483"
+     rx="17.594519"
+     ry="14.164467" />
+  <rect
+     style="fill:none;fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;stroke-width:3.5300000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none"
+     id="rect5928"
+     width="170.38249"
+     height="159.80026"
+     x="29.993284"
+     y="26.574797"
+     rx="17.594519"
+     ry="14.164467" />
+  <g
+     id="g9083"
+     transform="matrix(1.3453951,0,0,1.1342235,-16.565559,-5.4700887)">
+    <path
+       id="path10686"
+       d="M 54.564338,95.862134 L 66.141444,76.647258 L 68.863577,83.267631 L 57.413471,101.6539 L 54.564338,95.862134 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path10688"
+       d="M 54.564338,95.862134 L 66.141444,76.647258 L 68.863577,83.267631 L 57.413471,101.6539 L 54.564338,95.862134 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path10842"
+       d="M 68.863577,83.267631 L 79.807077,68.818201 L 81.831037,80.442083 L 71.047687,93.820183 L 68.863577,83.267631 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path10844"
+       d="M 68.863577,83.267631 L 79.807077,68.818201 L 81.831037,80.442083 L 71.047687,93.820183 L 68.863577,83.267631 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path10846"
+       d="M 66.141444,76.647258 L 77.190827,61.529694 L 79.807077,68.818201 L 68.863577,83.267631 L 66.141444,76.647258 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path10848"
+       d="M 66.141444,76.647258 L 77.190827,61.529694 L 79.807077,68.818201 L 68.863577,83.267631 L 66.141444,76.647258 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path10850"
+       d="M 62.857639,74.139397 L 73.956277,58.775498 L 77.190827,61.529694 L 66.141444,76.647258 L 62.857639,74.139397 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path10852"
+       d="M 62.857639,74.139397 L 73.956277,58.775498 L 77.190827,61.529694 L 66.141444,76.647258 L 62.857639,74.139397 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path10998"
+       d="M 81.831037,80.442083 L 92.088517,71.132955 L 93.400707,87.849164 L 83.303097,96.095463 L 81.831037,80.442083 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11000"
+       d="M 81.831037,80.442083 L 92.088517,71.132955 L 93.400707,87.849164 L 83.303097,96.095463 L 81.831037,80.442083 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11002"
+       d="M 79.807077,68.818201 L 90.187177,58.721801 L 92.088517,71.132955 L 81.831037,80.442083 L 79.807077,68.818201 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11004"
+       d="M 79.807077,68.818201 L 90.187177,58.721801 L 92.088517,71.132955 L 81.831037,80.442083 L 79.807077,68.818201 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11006"
+       d="M 77.190827,61.529694 L 87.653477,50.94283 L 90.187177,58.721801 L 79.807077,68.818201 L 77.190827,61.529694 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11008"
+       d="M 77.190827,61.529694 L 87.653477,50.94283 L 90.187177,58.721801 L 79.807077,68.818201 L 77.190827,61.529694 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11010"
+       d="M 73.956277,58.775498 L 84.459497,48.008577 L 87.653477,50.94283 L 77.190827,61.529694 L 73.956277,58.775498 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11012"
+       d="M 73.956277,58.775498 L 84.459497,48.008577 L 87.653477,50.94283 L 77.190827,61.529694 L 73.956277,58.775498 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11014"
+       d="M 70.092357,60.64203 L 80.593497,50.011465 L 84.459497,48.008577 L 73.956277,58.775498 L 70.092357,60.64203 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11016"
+       d="M 70.092357,60.64203 L 80.593497,50.011465 L 84.459497,48.008577 L 73.956277,58.775498 L 70.092357,60.64203 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11018"
+       d="M 65.603346,67.100372 L 76.060057,56.920514 L 80.593497,50.011465 L 70.092357,60.64203 L 65.603346,67.100372 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11020"
+       d="M 65.603346,67.100372 L 76.060057,56.920514 L 80.593497,50.011465 L 70.092357,60.64203 L 65.603346,67.100372 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11022"
+       d="M 60.508895,78.006842 L 70.880167,68.58205 L 76.060057,56.920514 L 65.603346,67.100372 L 60.508895,78.006842 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11024"
+       d="M 60.508895,78.006842 L 70.880167,68.58205 L 76.060057,56.920514 L 65.603346,67.100372 L 60.508895,78.006842 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11026"
+       d="M 54.843348,93.106105 L 65.090678,84.722916 L 70.880167,68.58205 L 60.508895,78.006842 L 54.843348,93.106105 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11028"
+       d="M 54.843348,93.106105 L 65.090678,84.722916 L 70.880167,68.58205 L 60.508895,78.006842 L 54.843348,93.106105 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11030"
+       d="M 48.655236,112.03733 L 58.74342,104.95737 L 65.090678,84.722916 L 54.843348,93.106105 L 48.655236,112.03733 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11032"
+       d="M 48.655236,112.03733 L 58.74342,104.95737 L 65.090678,84.722916 L 54.843348,93.106105 L 48.655236,112.03733 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11154"
+       d="M 93.400707,87.849164 L 102.9871,83.549778 L 103.64115,104.94353 L 94.180977,108.43793 L 93.400707,87.849164 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11156"
+       d="M 93.400707,87.849164 L 102.9871,83.549778 L 103.64115,104.94353 L 94.180977,108.43793 L 93.400707,87.849164 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11158"
+       d="M 92.088517,71.132955 L 101.78037,66.181073 L 102.9871,83.549778 L 93.400707,87.849164 L 92.088517,71.132955 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11160"
+       d="M 92.088517,71.132955 L 101.78037,66.181073 L 102.9871,83.549778 L 93.400707,87.849164 L 92.088517,71.132955 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11162"
+       d="M 90.187177,58.721801 L 99.961307,53.287104 L 101.78037,66.181073 L 92.088517,71.132955 L 90.187177,58.721801 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11164"
+       d="M 90.187177,58.721801 L 99.961307,53.287104 L 101.78037,66.181073 L 92.088517,71.132955 L 90.187177,58.721801 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11166"
+       d="M 87.653477,50.94283 L 97.484927,45.207912 L 99.961307,53.287104 L 90.187177,58.721801 L 87.653477,50.94283 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11168"
+       d="M 87.653477,50.94283 L 97.484927,45.207912 L 99.961307,53.287104 L 90.187177,58.721801 L 87.653477,50.94283 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11170"
+       d="M 84.459497,48.008577 L 94.322287,42.164665 L 97.484927,45.207912 L 87.653477,50.94283 L 84.459497,48.008577 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11172"
+       d="M 84.459497,48.008577 L 94.322287,42.164665 L 97.484927,45.207912 L 87.653477,50.94283 L 84.459497,48.008577 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11174"
+       d="M 80.593497,50.011465 L 90.461077,44.253266 L 94.322287,42.164665 L 84.459497,48.008577 L 80.593497,50.011465 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11176"
+       d="M 80.593497,50.011465 L 90.461077,44.253266 L 94.322287,42.164665 L 84.459497,48.008577 L 80.593497,50.011465 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11178"
+       d="M 76.060057,56.920514 L 85.906147,51.441603 L 90.461077,44.253266 L 80.593497,50.011465 L 76.060057,56.920514 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11180"
+       d="M 76.060057,56.920514 L 85.906147,51.441603 L 90.461077,44.253266 L 80.593497,50.011465 L 76.060057,56.920514 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11182"
+       d="M 70.880167,68.58205 L 80.679307,63.569666 L 85.906147,51.441603 L 76.060057,56.920514 L 70.880167,68.58205 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11184"
+       d="M 70.880167,68.58205 L 80.679307,63.569666 L 85.906147,51.441603 L 76.060057,56.920514 L 70.880167,68.58205 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11186"
+       d="M 65.090678,84.722916 L 74.818907,80.353458 L 80.679307,63.569666 L 70.880167,68.58205 L 65.090678,84.722916 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11188"
+       d="M 65.090678,84.722916 L 74.818907,80.353458 L 80.679307,63.569666 L 70.880167,68.58205 L 65.090678,84.722916 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11190"
+       d="M 58.74342,104.95737 L 68.378945,101.39178 L 74.818907,80.353458 L 65.090678,84.722916 L 58.74342,104.95737 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11192"
+       d="M 58.74342,104.95737 L 68.378945,101.39178 L 74.818907,80.353458 L 65.090678,84.722916 L 58.74342,104.95737 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11314"
+       d="M 102.9871,83.549778 L 112.03926,83.36044 L 112.63708,105.03252 L 103.64115,104.94353 L 102.9871,83.549778 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11316"
+       d="M 102.9871,83.549778 L 112.03926,83.36044 L 112.63708,105.03252 L 103.64115,104.94353 L 102.9871,83.549778 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11318"
+       d="M 101.78037,66.181073 L 110.88105,65.766695 L 112.03926,83.36044 L 102.9871,83.549778 L 101.78037,66.181073 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11320"
+       d="M 101.78037,66.181073 L 110.88105,65.766695 L 112.03926,83.36044 L 102.9871,83.549778 L 101.78037,66.181073 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11322"
+       d="M 99.961307,53.287104 L 109.10213,52.706987 L 110.88105,65.766695 L 101.78037,66.181073 L 99.961307,53.287104 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11324"
+       d="M 99.961307,53.287104 L 109.10213,52.706987 L 110.88105,65.766695 L 101.78037,66.181073 L 99.961307,53.287104 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11326"
+       d="M 97.484927,45.207912 L 106.65688,44.525934 L 109.10213,52.706987 L 99.961307,53.287104 L 97.484927,45.207912 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11328"
+       d="M 97.484927,45.207912 L 106.65688,44.525934 L 109.10213,52.706987 L 99.961307,53.287104 L 97.484927,45.207912 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11330"
+       d="M 94.322287,42.164665 L 103.51588,41.447627 L 106.65688,44.525934 L 97.484927,45.207912 L 94.322287,42.164665 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11332"
+       d="M 94.322287,42.164665 L 103.51588,41.447627 L 106.65688,44.525934 L 97.484927,45.207912 L 94.322287,42.164665 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11334"
+       d="M 90.461077,44.253266 L 99.666687,43.569177 L 103.51588,41.447627 L 94.322287,42.164665 L 90.461077,44.253266 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11336"
+       d="M 90.461077,44.253266 L 99.666687,43.569177 L 103.51588,41.447627 L 94.322287,42.164665 L 90.461077,44.253266 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11338"
+       d="M 85.906147,51.441603 L 95.114217,50.858057 L 99.666687,43.569177 L 90.461077,44.253266 L 85.906147,51.441603 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11340"
+       d="M 85.906147,51.441603 L 95.114217,50.858057 L 99.666687,43.569177 L 90.461077,44.253266 L 85.906147,51.441603 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11342"
+       d="M 80.679307,63.569666 L 89.880587,63.152052 L 95.114217,50.858057 L 85.906147,51.441603 L 80.679307,63.569666 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11344"
+       d="M 80.679307,63.569666 L 89.880587,63.152052 L 95.114217,50.858057 L 85.906147,51.441603 L 80.679307,63.569666 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11346"
+       d="M 74.818907,80.353458 L 84.004777,80.16338 L 89.880587,63.152052 L 80.679307,63.569666 L 74.818907,80.353458 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11348"
+       d="M 74.818907,80.353458 L 84.004777,80.16338 L 89.880587,63.152052 L 80.679307,63.569666 L 74.818907,80.353458 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11350"
+       d="M 68.378945,101.39178 L 77.541417,101.48539 L 84.004777,80.16338 L 74.818907,80.353458 L 68.378945,101.39178 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11352"
+       d="M 68.378945,101.39178 L 77.541417,101.48539 L 84.004777,80.16338 L 74.818907,80.353458 L 68.378945,101.39178 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11470"
+       d="M 112.63708,105.03252 L 121.16063,108.75798 L 121.2922,133.65675 L 112.74843,130.22817 L 112.63708,105.03252 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11472"
+       d="M 112.63708,105.03252 L 121.16063,108.75798 L 121.2922,133.65675 L 112.74843,130.22817 L 112.63708,105.03252 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11474"
+       d="M 112.03926,83.36044 L 120.54762,87.342023 L 121.16063,108.75798 L 112.63708,105.03252 L 112.03926,83.36044 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11476"
+       d="M 112.03926,83.36044 L 120.54762,87.342023 L 121.16063,108.75798 L 112.63708,105.03252 L 112.03926,83.36044 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11478"
+       d="M 110.88105,65.766695 L 119.38018,69.957128 L 120.54762,87.342023 L 112.03926,83.36044 L 110.88105,65.766695 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11480"
+       d="M 110.88105,65.766695 L 119.38018,69.957128 L 120.54762,87.342023 L 112.03926,83.36044 L 110.88105,65.766695 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11482"
+       d="M 109.10213,52.706987 L 117.59855,57.053587 L 119.38018,69.957128 L 110.88105,65.766695 L 109.10213,52.706987 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11484"
+       d="M 109.10213,52.706987 L 117.59855,57.053587 L 119.38018,69.957128 L 110.88105,65.766695 L 109.10213,52.706987 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11486"
+       d="M 106.65688,44.525934 L 115.15767,48.971955 L 117.59855,57.053587 L 109.10213,52.706987 L 106.65688,44.525934 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11488"
+       d="M 106.65688,44.525934 L 115.15767,48.971955 L 117.59855,57.053587 L 109.10213,52.706987 L 106.65688,44.525934 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11490"
+       d="M 103.51588,41.447627 L 112.02845,45.933542 L 115.15767,48.971955 L 106.65688,44.525934 L 103.51588,41.447627 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11492"
+       d="M 103.51588,41.447627 L 112.02845,45.933542 L 115.15767,48.971955 L 106.65688,44.525934 L 103.51588,41.447627 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11494"
+       d="M 99.666687,43.569177 L 108.19863,48.034487 L 112.02845,45.933542 L 103.51588,41.447627 L 99.666687,43.569177 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11496"
+       d="M 99.666687,43.569177 L 108.19863,48.034487 L 112.02845,45.933542 L 103.51588,41.447627 L 99.666687,43.569177 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11498"
+       d="M 95.114217,50.858057 L 103.673,55.242492 L 108.19863,48.034487 L 99.666687,43.569177 L 95.114217,50.858057 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11500"
+       d="M 95.114217,50.858057 L 103.673,55.242492 L 108.19863,48.034487 L 99.666687,43.569177 L 95.114217,50.858057 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11502"
+       d="M 89.880587,63.152052 L 98.473507,67.397311 L 103.673,55.242492 L 95.114217,50.858057 L 89.880587,63.152052 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11504"
+       d="M 89.880587,63.152052 L 98.473507,67.397311 L 103.673,55.242492 L 95.114217,50.858057 L 89.880587,63.152052 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11506"
+       d="M 84.004777,80.16338 L 92.638617,84.214543 L 98.473507,67.397311 L 89.880587,63.152052 L 84.004777,80.16338 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11508"
+       d="M 84.004777,80.16338 L 92.638617,84.214543 L 98.473507,67.397311 L 89.880587,63.152052 L 84.004777,80.16338 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11510"
+       d="M 77.541417,101.48539 L 86.222457,105.29228 L 92.638617,84.214543 L 84.004777,80.16338 L 77.541417,101.48539 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11512"
+       d="M 77.541417,101.48539 L 86.222457,105.29228 L 92.638617,84.214543 L 84.004777,80.16338 L 77.541417,101.48539 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11634"
+       d="M 120.54762,87.342023 L 128.51662,95.45174 L 129.21557,116.08265 L 121.16063,108.75798 L 120.54762,87.342023 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11636"
+       d="M 120.54762,87.342023 L 128.51662,95.45174 L 129.21557,116.08265 L 121.16063,108.75798 L 120.54762,87.342023 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11638"
+       d="M 119.38018,69.957128 L 127.28258,78.705013 L 128.51662,95.45174 L 120.54762,87.342023 L 119.38018,69.957128 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11640"
+       d="M 119.38018,69.957128 L 127.28258,78.705013 L 128.51662,95.45174 L 120.54762,87.342023 L 119.38018,69.957128 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11642"
+       d="M 117.59855,57.053587 L 125.45574,66.276125 L 127.28258,78.705013 L 119.38018,69.957128 L 117.59855,57.053587 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11644"
+       d="M 117.59855,57.053587 L 125.45574,66.276125 L 127.28258,78.705013 L 119.38018,69.957128 L 117.59855,57.053587 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11646"
+       d="M 115.15767,48.971955 L 122.9928,58.492973 L 125.45574,66.276125 L 117.59855,57.053587 L 115.15767,48.971955 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11648"
+       d="M 115.15767,48.971955 L 122.9928,58.492973 L 125.45574,66.276125 L 117.59855,57.053587 L 115.15767,48.971955 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11650"
+       d="M 112.02845,45.933542 L 119.86564,55.568766 L 122.9928,58.492973 L 115.15767,48.971955 L 112.02845,45.933542 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11652"
+       d="M 112.02845,45.933542 L 119.86564,55.568766 L 122.9928,58.492973 L 115.15767,48.971955 L 112.02845,45.933542 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11654"
+       d="M 108.19863,48.034487 L 116.0624,57.596019 L 119.86564,55.568766 L 112.02845,45.933542 L 108.19863,48.034487 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11656"
+       d="M 108.19863,48.034487 L 116.0624,57.596019 L 119.86564,55.568766 L 112.02845,45.933542 L 108.19863,48.034487 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11658"
+       d="M 103.673,55.242492 L 111.58782,64.543651 L 116.0624,57.596019 L 108.19863,48.034487 L 103.673,55.242492 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11660"
+       d="M 103.673,55.242492 L 111.58782,64.543651 L 116.0624,57.596019 L 108.19863,48.034487 L 103.673,55.242492 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11662"
+       d="M 98.473507,67.397311 L 106.463,76.257333 L 111.58782,64.543651 L 103.673,55.242492 L 98.473507,67.397311 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11664"
+       d="M 98.473507,67.397311 L 106.463,76.257333 L 111.58782,64.543651 L 103.673,55.242492 L 98.473507,67.397311 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11666"
+       d="M 92.638617,84.214543 L 100.72502,92.463183 L 106.463,76.257333 L 98.473507,67.397311 L 92.638617,84.214543 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11668"
+       d="M 92.638617,84.214543 L 100.72502,92.463183 L 106.463,76.257333 L 98.473507,67.397311 L 92.638617,84.214543 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11670"
+       d="M 86.222457,105.29228 L 94.426037,112.77417 L 100.72502,92.463183 L 92.638617,84.214543 L 86.222457,105.29228 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11672"
+       d="M 86.222457,105.29228 L 94.426037,112.77417 L 100.72502,92.463183 L 92.638617,84.214543 L 86.222457,105.29228 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11798"
+       d="M 127.28258,78.705013 L 134.60837,91.849297 L 135.96452,107.54393 L 128.51662,95.45174 L 127.28258,78.705013 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11800"
+       d="M 127.28258,78.705013 L 134.60837,91.849297 L 135.96452,107.54393 L 128.51662,95.45174 L 127.28258,78.705013 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11802"
+       d="M 125.45574,66.276125 L 132.69532,80.202077 L 134.60837,91.849297 L 127.28258,78.705013 L 125.45574,66.276125 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11804"
+       d="M 125.45574,66.276125 L 132.69532,80.202077 L 134.60837,91.849297 L 127.28258,78.705013 L 125.45574,66.276125 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11806"
+       d="M 122.9928,58.492973 L 130.18463,72.909409 L 132.69532,80.202077 L 125.45574,66.276125 L 122.9928,58.492973 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11808"
+       d="M 122.9928,58.492973 L 130.18463,72.909409 L 132.69532,80.202077 L 125.45574,66.276125 L 122.9928,58.492973 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11810"
+       d="M 119.86564,55.568766 L 127.05009,70.170983 L 130.18463,72.909409 L 122.9928,58.492973 L 119.86564,55.568766 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11812"
+       d="M 119.86564,55.568766 L 127.05009,70.170983 L 130.18463,72.909409 L 122.9928,58.492973 L 119.86564,55.568766 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11814"
+       d="M 116.0624,57.596019 L 123.28055,72.07338 L 127.05009,70.170983 L 119.86564,55.568766 L 116.0624,57.596019 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11816"
+       d="M 116.0624,57.596019 L 123.28055,72.07338 L 127.05009,70.170983 L 119.86564,55.568766 L 116.0624,57.596019 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11818"
+       d="M 111.58782,64.543651 L 118.88044,78.587537 L 123.28055,72.07338 L 116.0624,57.596019 L 111.58782,64.543651 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11820"
+       d="M 111.58782,64.543651 L 118.88044,78.587537 L 123.28055,72.07338 L 116.0624,57.596019 L 111.58782,64.543651 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11822"
+       d="M 106.463,76.257333 L 113.86947,89.568972 L 118.88044,78.587537 L 111.58782,64.543651 L 106.463,76.257333 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11824"
+       d="M 106.463,76.257333 L 113.86947,89.568972 L 118.88044,78.587537 L 111.58782,64.543651 L 106.463,76.257333 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11826"
+       d="M 100.72502,92.463183 L 108.28247,104.76111 L 113.86947,89.568972 L 106.463,76.257333 L 100.72502,92.463183 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11828"
+       d="M 100.72502,92.463183 L 108.28247,104.76111 L 113.86947,89.568972 L 106.463,76.257333 L 100.72502,92.463183 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11830"
+       d="M 94.426037,112.77417 L 102.16834,123.80157 L 108.28247,104.76111 L 100.72502,92.463183 L 94.426037,112.77417 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11832"
+       d="M 94.426037,112.77417 L 102.16834,123.80157 L 108.28247,104.76111 L 100.72502,92.463183 L 94.426037,112.77417 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11962"
+       d="M 132.69532,80.202077 L 139.35464,98.541591 L 141.39253,109.11925 L 134.60837,91.849297 L 132.69532,80.202077 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11964"
+       d="M 132.69532,80.202077 L 139.35464,98.541591 L 141.39253,109.11925 L 134.60837,91.849297 L 132.69532,80.202077 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11966"
+       d="M 130.18463,72.909409 L 136.77221,91.919402 L 139.35464,98.541591 L 132.69532,80.202077 L 130.18463,72.909409 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11968"
+       d="M 130.18463,72.909409 L 136.77221,91.919402 L 139.35464,98.541591 L 132.69532,80.202077 L 130.18463,72.909409 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11970"
+       d="M 127.05009,70.170983 L 133.62142,89.433743 L 136.77221,91.919402 L 130.18463,72.909409 L 127.05009,70.170983 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11972"
+       d="M 127.05009,70.170983 L 133.62142,89.433743 L 136.77221,91.919402 L 130.18463,72.909409 L 127.05009,70.170983 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11974"
+       d="M 123.28055,72.07338 L 129.89219,91.163335 L 133.62142,89.433743 L 127.05009,70.170983 L 123.28055,72.07338 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11976"
+       d="M 123.28055,72.07338 L 129.89219,91.163335 L 133.62142,89.433743 L 127.05009,70.170983 L 123.28055,72.07338 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11978"
+       d="M 118.88044,78.587537 L 125.58844,97.081752 L 129.89219,91.163335 L 123.28055,72.07338 L 118.88044,78.587537 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11980"
+       d="M 118.88044,78.587537 L 125.58844,97.081752 L 129.89219,91.163335 L 123.28055,72.07338 L 118.88044,78.587537 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11982"
+       d="M 113.86947,89.568972 L 120.72822,107.05798 L 125.58844,97.081752 L 118.88044,78.587537 L 113.86947,89.568972 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11984"
+       d="M 113.86947,89.568972 L 120.72822,107.05798 L 125.58844,97.081752 L 118.88044,78.587537 L 113.86947,89.568972 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11986"
+       d="M 108.28247,104.76111 L 115.34306,120.85918 L 120.72822,107.05798 L 113.86947,89.568972 L 108.28247,104.76111 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11988"
+       d="M 108.28247,104.76111 L 115.34306,120.85918 L 120.72822,107.05798 L 113.86947,89.568972 L 108.28247,104.76111 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path11990"
+       d="M 102.16834,123.80157 L 109.47735,138.15655 L 115.34306,120.85918 L 108.28247,104.76111 L 102.16834,123.80157 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path11992"
+       d="M 102.16834,123.80157 L 109.47735,138.15655 L 115.34306,120.85918 L 108.28247,104.76111 L 102.16834,123.80157 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path12130"
+       d="M 133.62142,89.433743 L 139.63477,112.93447 L 142.80989,115.10639 L 136.77221,91.919402 L 133.62142,89.433743 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path12132"
+       d="M 133.62142,89.433743 L 139.63477,112.93447 L 142.80989,115.10639 L 136.77221,91.919402 L 133.62142,89.433743 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path12134"
+       d="M 129.89219,91.163335 L 135.95187,114.44768 L 139.63477,112.93447 L 133.62142,89.433743 L 129.89219,91.163335 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path12136"
+       d="M 129.89219,91.163335 L 135.95187,114.44768 L 139.63477,112.93447 L 133.62142,89.433743 L 129.89219,91.163335 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path12138"
+       d="M 125.58844,97.081752 L 131.76457,119.62298 L 135.95187,114.44768 L 129.89219,91.163335 L 125.58844,97.081752 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path12140"
+       d="M 125.58844,97.081752 L 131.76457,119.62298 L 135.95187,114.44768 L 129.89219,91.163335 L 125.58844,97.081752 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path12142"
+       d="M 120.72822,107.05798 L 127.08863,128.34607 L 131.76457,119.62298 L 125.58844,97.081752 L 120.72822,107.05798 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path12144"
+       d="M 120.72822,107.05798 L 127.08863,128.34607 L 131.76457,119.62298 L 125.58844,97.081752 L 120.72822,107.05798 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path12146"
+       d="M 115.34306,120.85918 L 121.95163,140.41365 L 127.08863,128.34607 L 120.72822,107.05798 L 115.34306,120.85918 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path12148"
+       d="M 115.34306,120.85918 L 121.95163,140.41365 L 127.08863,128.34607 L 120.72822,107.05798 L 115.34306,120.85918 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+    <path
+       id="path12150"
+       d="M 109.47735,138.15655 L 116.39237,155.53854 L 121.95163,140.41365 L 115.34306,120.85918 L 109.47735,138.15655 z "
+       style="fill:#82a67d;fill-rule:nonzero;stroke:none" />
+    <path
+       id="path12152"
+       d="M 109.47735,138.15655 L 116.39237,155.53854 L 121.95163,140.41365 L 115.34306,120.85918 L 109.47735,138.15655 z "
+       style="fill:none;stroke:#000000;stroke-width:1.38810027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:32px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Serif"
+     x="79.5"
+     y="165.17715"
+     id="text2350"><tspan
+       sodipodi:role="line"
+       id="tspan2352"
+       x="79.5"
+       y="165.17715">XYZ</tspan></text>
+</svg>

Modified: trunk/plugins/plot_surface/Makefile.am
==============================================================================
--- trunk/plugins/plot_surface/Makefile.am	(original)
+++ trunk/plugins/plot_surface/Makefile.am	Mon Aug 11 19:50:19 2008
@@ -13,6 +13,8 @@
 	gog-contour.h		\
 	gog-surface.c		\
 	gog-surface.h		\
+	gog-xyz-surface.c	\
+	gog-xyz-survace.h	\
 	xl-surface.c		\
 	xl-surface.h
 
@@ -22,8 +24,13 @@
 @INTLTOOL_XML_RULE@
 
 if WITH_GTK
-dist_glade_DATA = gog-xyz-prefs.glade
-surface_la_SOURCES += gog-xyz-prefs.c
+dist_glade_DATA = \
+	gog-xyz-prefs.glade	\
+	gog-xyz-surface-prefs.glade
+	
+surface_la_SOURCES += \
+	gog-xyz-prefs.c		\
+	gog-xyz-surface-prefs.c
 endif
 
 # do not use the intl-tool stuff to merge the text back

Modified: trunk/plugins/plot_surface/gog-surface.c
==============================================================================
--- trunk/plugins/plot_surface/gog-surface.c	(original)
+++ trunk/plugins/plot_surface/gog-surface.c	Mon Aug 11 19:50:19 2008
@@ -120,7 +120,7 @@
 static void
 gog_surface_view_render (GogView *view, GogViewAllocation const *bbox)
 {
-	GogSurfacePlot const *plot = GOG_SURFACE_PLOT (view->model);
+	GogSurfacePlot *plot = GOG_SURFACE_PLOT (view->model);
 	GogSeries const *series;
 	GogChartMap3D *chart_map;
 	GogChart *chart = GOG_CHART (view->model->parent);
@@ -168,14 +168,12 @@
 		data = gog_xyz_plot_build_matrix (plot, &cw);
 
 	/* Build the tiles list */
+	x_vec = gog_xyz_plot_get_x_vals (plot);
+	y_vec = gog_xyz_plot_get_y_vals (plot);
 	xdiscrete = gog_axis_is_discrete (plot->base.axis[0]) ||
-			series->values[(plot->transposed)? 1: 0].data == NULL;
-	if (!xdiscrete)
-		x_vec = GO_DATA_VECTOR (series->values[(plot->transposed)? 1: 0].data);
+			x_vec == NULL;
 	ydiscrete = gog_axis_is_discrete (plot->base.axis[1]) ||
-			series->values[(plot->transposed)? 0: 1].data == NULL;
-	if (!ydiscrete)
-		y_vec = GO_DATA_VECTOR (series->values[(plot->transposed)? 0: 1].data);
+			y_vec == NULL;
 	for (i = 1; i < imax; i++)
 		for (j = 1; j < jmax; j++) {
 			tile = g_new0 (GogSurfaceTile, 1);

Added: trunk/plugins/plot_surface/gog-xyz-surface-prefs.c
==============================================================================
--- (empty file)
+++ trunk/plugins/plot_surface/gog-xyz-surface-prefs.c	Mon Aug 11 19:50:19 2008
@@ -0,0 +1,77 @@
+/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * gog-xyz-surface-prefs.c
+ *
+ * Copyright (C) 2004-2008 Jean Brefort (jean brefort normalesup org)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ */
+
+#include <goffice/goffice-config.h>
+#include "gog-xyz-surface.h"
+#include <goffice/gtk/goffice-gtk.h>
+#include <goffice/app/go-plugin.h>
+
+#include <gtk/gtktogglebutton.h>
+
+#include <string.h>
+
+GtkWidget *gog_xyz_surface_plot_pref   (GogXYZSurfacePlot *plot, GOCmdContext *cc);
+
+static void
+cb_rows_changed (GtkAdjustment *adj, GObject *plot)
+{
+	g_object_set (plot, "rows", (int) adj->value, NULL);
+}
+
+static void
+cb_columns_changed (GtkAdjustment *adj, GObject *plot)
+{
+	g_object_set (plot, "columns", (int) adj->value, NULL);
+}
+
+GtkWidget *
+gog_xyz_surface_plot_pref (GogXYZSurfacePlot *plot, GOCmdContext *cc)
+{
+	GogXYZPlot *xyz = GOG_XYZ_PLOT (plot);
+	GtkWidget  *w;
+	char const *dir = go_plugin_get_dir_name (
+		go_plugins_get_plugin_by_id ("GOffice_plot_surface"));
+	char	 *path = g_build_filename (dir, "gog-xyz-surface-prefs.glade", NULL);
+	GladeXML *gui = go_libglade_new (path, "gog_xyz_surface_prefs", GETTEXT_PACKAGE, cc);
+
+	g_free (path);
+        if (gui == NULL)
+                return NULL;
+
+	w = glade_xml_get_widget (gui, "rows_spinner");
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), xyz->rows);
+	g_signal_connect (G_OBJECT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w))),
+		"value_changed",
+		G_CALLBACK (cb_rows_changed), plot);
+
+	w = glade_xml_get_widget (gui, "columns_spinner");
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), xyz->columns);
+	g_signal_connect (G_OBJECT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w))),
+		"value_changed",
+		G_CALLBACK (cb_columns_changed), plot);
+
+	w = glade_xml_get_widget (gui, "gog_xyz_surface_prefs");
+	g_object_set_data_full (G_OBJECT (w),
+		"state", gui, (GDestroyNotify)g_object_unref);
+
+	return w;
+}
+

Added: trunk/plugins/plot_surface/gog-xyz-surface-prefs.glade
==============================================================================
--- (empty file)
+++ trunk/plugins/plot_surface/gog-xyz-surface-prefs.glade	Mon Aug 11 19:50:19 2008
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+  <widget class="GtkWindow" id="window1">
+    <property name="title" translatable="yes">window1</property>
+    <child>
+      <widget class="GtkTable" id="gog_xyz_surface_prefs">
+        <property name="visible">True</property>
+        <property name="border_width">12</property>
+        <property name="n_rows">2</property>
+        <property name="n_columns">2</property>
+        <property name="column_spacing">12</property>
+        <property name="row_spacing">6</property>
+        <child>
+          <widget class="GtkLabel" id="label61">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">_Rows:</property>
+            <property name="use_underline">True</property>
+            <property name="mnemonic_widget">rows_spinner</property>
+          </widget>
+          <packing>
+            <property name="x_options">GTK_FILL</property>
+            <property name="y_options"></property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkLabel" id="label64">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">_Columns:</property>
+            <property name="use_underline">True</property>
+            <property name="mnemonic_widget">columns_spinner</property>
+          </widget>
+          <packing>
+            <property name="top_attach">1</property>
+            <property name="bottom_attach">2</property>
+            <property name="x_options">GTK_FILL</property>
+            <property name="y_options"></property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkSpinButton" id="rows_spinner">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="tooltip" translatable="yes">Separation between groups as a percentage of bar/col width</property>
+            <property name="adjustment">10 2 1000 1 10 10</property>
+            <property name="climb_rate">10</property>
+            <property name="snap_to_ticks">True</property>
+            <property name="numeric">True</property>
+          </widget>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="x_options">GTK_FILL</property>
+            <property name="y_options"></property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkSpinButton" id="columns_spinner">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="tooltip" translatable="yes">How far the bars/cols overlap as a percentage of the width</property>
+            <property name="adjustment">10 2 1000 1 10 10</property>
+            <property name="climb_rate">0.10000000000000001</property>
+            <property name="snap_to_ticks">True</property>
+            <property name="numeric">True</property>
+          </widget>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">1</property>
+            <property name="bottom_attach">2</property>
+            <property name="x_options">GTK_FILL</property>
+            <property name="y_options"></property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>

Added: trunk/plugins/plot_surface/gog-xyz-surface.c
==============================================================================
--- (empty file)
+++ trunk/plugins/plot_surface/gog-xyz-surface.c	Mon Aug 11 19:50:19 2008
@@ -0,0 +1,282 @@
+/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * gog-xyz-surface.c
+ *
+ * Copyright (C) 2004-2005 Jean Brefort (jean brefort normalesup org)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ */
+
+#include <goffice/goffice-config.h>
+#include "gog-xyz-surface.h"
+
+#include <goffice/data/go-data.h>
+#include <goffice/graph/gog-chart-map-3d.h>
+#include <goffice/graph/gog-renderer.h>
+#include <goffice/math/go-math.h>
+#include <goffice/utils/go-format.h>
+#include <goffice/utils/go-path.h>
+
+#include <glib/gi18n-lib.h>
+#include <gsf/gsf-impl-utils.h>
+
+/*****************************************************************************/
+
+enum {
+	XYZ_SURFACE_PROP_0,
+	XYZ_SURFACE_PROP_ROWS,
+	XYZ_SURFACE_PROP_COLUMNS
+};
+
+static GogObjectClass *plot_xyz_surface_parent_klass;
+
+static double *
+gog_xyz_surface_plot_build_matrix (GogXYZPlot const *plot, gboolean *cardinality_changed)
+{
+	unsigned i, j, k, index;
+	GogSeries *series = GOG_SERIES (plot->base.series->data);
+	const double *x_vals, *y_vals, *z_vals = NULL;
+	double *data;
+	unsigned *grid;
+	unsigned n = plot->rows * plot->columns;
+	unsigned kmax = gog_series_get_xyz_data (GOG_SERIES (series), 
+						 &x_vals, &y_vals, &z_vals);
+	unsigned imax = plot->rows;
+	unsigned jmax = plot->columns;
+	double xmin = plot->x.minima;
+	double ymin = plot->y.minima;
+	double xinc = (plot->x.maxima - xmin) / (jmax - 1);
+	double yinc = (plot->y.maxima - ymin) / (imax - 1);
+
+	data = g_new0 (double, n);
+	grid = g_new0 (unsigned, n);
+	
+	for (k = 0; k < kmax; ++k) {
+		j = (int) floor ((x_vals[k] - xmin) / xinc + 0.5);
+		i = (int) floor ((y_vals[k] - ymin) / yinc + 0.5);
+		index = i * jmax + j;
+		/* Watch out not to fall beyond array limits; however,
+		 * its unlikely and shouldn't happen normally */
+		if (G_LIKELY (index >= 0 && index < n)) {
+			data[index] += z_vals[k];
+			grid[index]++;
+		}
+	}
+
+	for (k = 0; k < n; ++k)
+		if (grid[k] != 0)
+			data[k] /= grid[k];
+
+	*cardinality_changed = FALSE;
+	g_free (grid);
+	return data;
+}
+
+static char const *
+gog_xyz_surface_plot_type_name (G_GNUC_UNUSED GogObject const *item)
+{
+	/* xgettext : the base for how to name surface plot objects
+	*/
+	return N_("PlotXYZSurface");
+}
+
+
+#ifdef GOFFICE_WITH_GTK
+extern gpointer gog_xyz_surface_plot_pref (GogXYZSurfacePlot *plot, GOCmdContext *cc);
+static void
+gog_xyz_surface_plot_populate_editor (GogObject *item,
+				  GogEditor *editor,
+				  G_GNUC_UNUSED GogDataAllocator *dalloc,
+				  GOCmdContext *cc)
+{
+	gog_editor_add_page (editor,
+			     gog_xyz_surface_plot_pref (GOG_XYZ_SURFACE_PLOT (item), cc),
+			     _("Properties"));
+
+	(GOG_OBJECT_CLASS (plot_xyz_surface_parent_klass)->populate_editor) (item, editor, dalloc, cc);
+}
+#endif
+
+static void
+gog_xyz_surface_plot_update (GogObject *obj)
+{
+	GogXYZPlot *model = GOG_XYZ_PLOT(obj);
+	GogXYZSeries *series;
+	double tmp_min, tmp_max;
+
+	if (model->base.series == NULL)
+		return;
+
+	series = GOG_XYZ_SERIES (model->base.series->data);
+	if (!gog_series_is_valid (GOG_SERIES (series)))
+		return;
+	
+	go_data_vector_get_minmax (GO_DATA_VECTOR (
+		series->base.values[0].data), &tmp_min, &tmp_max);
+	if (!go_finite (tmp_min) || !go_finite (tmp_max) ||
+	    tmp_min > tmp_max) {
+		tmp_min = 0;
+		tmp_max = go_data_vector_get_len (GO_DATA_VECTOR (series->base.values[0].data));
+	} else if (model->x.fmt == NULL)
+		model->x.fmt = go_data_preferred_fmt (series->base.values[0].data);
+	model->x.minima = tmp_min;
+	model->x.maxima = tmp_max;
+	gog_axis_bound_changed (model->base.axis[GOG_AXIS_X], GOG_OBJECT (model));
+
+	go_data_vector_get_minmax (GO_DATA_VECTOR (series->base.values[1].data),
+	                           &tmp_min, &tmp_max);
+	if (!go_finite (tmp_min) || !go_finite (tmp_max) ||
+	    tmp_min > tmp_max) {
+		tmp_min = 0;
+		tmp_max = go_data_vector_get_len (GO_DATA_VECTOR (series->base.values[1].data));
+	} else if (model->y.fmt == NULL)
+		model->y.fmt = go_data_preferred_fmt (series->base.values[1].data);
+	model->y.minima = tmp_min;
+	model->y.maxima = tmp_max;
+	gog_axis_bound_changed (model->base.axis[GOG_AXIS_Y], GOG_OBJECT (model));
+
+	go_data_vector_get_minmax (GO_DATA_VECTOR (series->base.values[2].data),
+	                           &tmp_min, &tmp_max);
+	if (!go_finite (tmp_min) || !go_finite (tmp_max) ||
+	    tmp_min > tmp_max) {
+		tmp_min = 0;
+		tmp_max = go_data_vector_get_len (GO_DATA_VECTOR (series->base.values[2].data));
+	} else if (model->z.fmt == NULL)
+		model->z.fmt = go_data_preferred_fmt (series->base.values[2].data);
+	model->z.minima = tmp_min;
+	model->z.maxima = tmp_max;
+	gog_axis_bound_changed (model->base.axis[GOG_AXIS_Z], GOG_OBJECT (model));
+
+	gog_object_emit_changed (GOG_OBJECT (obj), FALSE);
+	if (plot_xyz_surface_parent_klass->update)
+		plot_xyz_surface_parent_klass->update (obj);
+}
+
+static void
+gog_xyz_surface_plot_set_property (GObject *obj, guint param_id,
+				   GValue const *value, GParamSpec *pspec)
+{
+	GogXYZPlot *plot = GOG_XYZ_PLOT (obj);
+
+	switch (param_id) {
+	case XYZ_SURFACE_PROP_ROWS :
+		if (plot->rows != g_value_get_uint (value)) {
+			plot->rows = g_value_get_uint (value);
+			g_free (plot->plotted_data);
+			plot->plotted_data = NULL;
+			if (plot->y_vals != NULL) {
+				g_object_unref (plot->y_vals);
+				plot->y_vals = NULL;
+			}
+		}
+		break;
+	case XYZ_SURFACE_PROP_COLUMNS :
+		if (plot->columns != g_value_get_uint (value)) {
+			plot->columns = g_value_get_uint (value);
+			g_free (plot->plotted_data);
+			plot->plotted_data = NULL;
+			if (plot->x_vals != NULL) {
+				g_object_unref (plot->x_vals);
+				plot->x_vals = NULL;
+			}
+		}
+		break;
+
+	default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
+		 return; /* NOTE : RETURN */
+	}
+	gog_object_emit_changed (GOG_OBJECT (obj), FALSE);
+}
+
+static void
+gog_xyz_surface_plot_get_property (GObject *obj, guint param_id,
+				   GValue *value, GParamSpec *pspec)
+{
+	GogXYZPlot *plot = GOG_XYZ_PLOT (obj);
+
+	switch (param_id) {
+	case XYZ_SURFACE_PROP_ROWS :
+		g_value_set_uint (value, plot->rows);
+		break;
+	case XYZ_SURFACE_PROP_COLUMNS :
+		g_value_set_uint (value, plot->columns);
+		break;
+
+	default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
+		 break;
+	}
+}
+
+static void
+gog_xyz_surface_plot_class_init (GogXYZPlotClass *klass)
+{
+	GogPlotClass *gog_plot_klass = (GogPlotClass*) klass;
+	GObjectClass *gobject_klass = (GObjectClass *) klass;
+	GogObjectClass *gog_object_klass = (GogObjectClass *) klass;
+
+	plot_xyz_surface_parent_klass = g_type_class_peek_parent (klass);
+
+	gobject_klass->set_property = gog_xyz_surface_plot_set_property;
+	gobject_klass->get_property = gog_xyz_surface_plot_get_property;
+	g_object_class_install_property (gobject_klass, XYZ_SURFACE_PROP_ROWS,
+		g_param_spec_uint ("rows", 
+			_("Rows"),
+			_("Number of rows"),
+			2, 1000, 10, 
+			GSF_PARAM_STATIC | G_PARAM_READWRITE | GOG_PARAM_PERSISTENT));
+	g_object_class_install_property (gobject_klass, XYZ_SURFACE_PROP_COLUMNS,
+		g_param_spec_uint ("columns", 
+			_("Columns"),
+			_("Number of columns"),
+			2, 1000, 10, 
+			GSF_PARAM_STATIC | G_PARAM_READWRITE | GOG_PARAM_PERSISTENT));
+
+	gog_object_klass->type_name	= gog_xyz_surface_plot_type_name;
+	gog_object_klass->update	= gog_xyz_surface_plot_update;
+
+#ifdef GOFFICE_WITH_GTK
+	gog_object_klass->populate_editor	= gog_xyz_surface_plot_populate_editor;
+#endif
+
+	{
+		static GogSeriesDimDesc dimensions[] = {
+			{ N_("X"), GOG_SERIES_REQUIRED, FALSE,
+			  GOG_DIM_VALUE, GOG_MS_DIM_VALUES },
+			{ N_("Y"), GOG_SERIES_REQUIRED, FALSE,
+			  GOG_DIM_VALUE, GOG_MS_DIM_VALUES },
+			{ N_("Z"), GOG_SERIES_REQUIRED, FALSE,
+			  GOG_DIM_VALUE, GOG_MS_DIM_VALUES },
+		};
+		gog_plot_klass->desc.series.dim = dimensions;
+		gog_plot_klass->desc.series.num_dim = G_N_ELEMENTS (dimensions);
+	}
+
+	klass->build_matrix = gog_xyz_surface_plot_build_matrix;
+}
+
+static void
+gog_xyz_surface_plot_init (GogXYZSurfacePlot *surface)
+{
+	GogXYZPlot *xyz = GOG_XYZ_PLOT (surface);
+
+	xyz->data_xyz = TRUE;
+	xyz->rows = 10;
+	xyz->columns = 10;
+}
+
+GSF_DYNAMIC_CLASS (GogXYZSurfacePlot, gog_xyz_surface_plot,
+	gog_xyz_surface_plot_class_init, gog_xyz_surface_plot_init,
+	GOG_SURFACE_PLOT_TYPE)
+

Added: trunk/plugins/plot_surface/gog-xyz-surface.h
==============================================================================
--- (empty file)
+++ trunk/plugins/plot_surface/gog-xyz-surface.h	Mon Aug 11 19:50:19 2008
@@ -0,0 +1,49 @@
+/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * gog-xyz-surface.h
+ *
+ * Copyright (C) 2004-2005 Jean Brefort (jean brefort normalesup org)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ */
+
+#ifndef GOG_XYZ_SURFACE_H
+#define GOG_XYZ_SURFACE_H
+
+#include "gog-surface.h"
+
+G_BEGIN_DECLS
+
+/*-----------------------------------------------------------------------------
+ *
+ * GogXYZSurfacePlot
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+typedef GogSurfacePlot GogXYZSurfacePlot;
+typedef GogSurfacePlotClass GogXYZSurfacePlotClass;
+
+#define GOG_XYZ_SURFACE_PLOT_TYPE	(gog_xyz_surface_plot_get_type ())
+#define GOG_XYZ_SURFACE_PLOT(o)	(G_TYPE_CHECK_INSTANCE_CAST ((o), GOG_XYZ_SURFACE_PLOT_TYPE, GogXYZSurfacePlot))
+#define GOG_IS_XYZ_SURFACE_PLOT(o)	(G_TYPE_CHECK_INSTANCE_TYPE ((o), GOG_XYZ_SURFACE_PLOT_TYPE))
+
+GType gog_xyz_surface_plot_get_type (void);
+
+void  gog_xyz_surface_plot_register_type   (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* GOG_XYZ_SURFACE_H */

Modified: trunk/plugins/plot_surface/gog-xyz.c
==============================================================================
--- trunk/plugins/plot_surface/gog-xyz.c	(original)
+++ trunk/plugins/plot_surface/gog-xyz.c	Mon Aug 11 19:50:19 2008
@@ -23,9 +23,11 @@
 #include "gog-xyz.h"
 #include "gog-contour.h"
 #include "gog-surface.h"
+#include "gog-xyz-surface.h"
 #include "xl-surface.h"
 #include <goffice/app/module-plugin-defs.h>
 #include <goffice/data/go-data.h>
+#include <goffice/data/go-data-simple.h>
 #include <goffice/graph/gog-chart.h>
 #include <goffice/math/go-math.h>
 #include <goffice/utils/go-format.h>
@@ -91,14 +93,63 @@
 				  G_GNUC_UNUSED GogDataAllocator *dalloc,
 				  GOCmdContext *cc)
 {
-	gog_editor_add_page (editor,
-			     gog_xyz_plot_pref (GOG_XYZ_PLOT (item), cc),
-			     _("Properties"));
+	if (!GOG_XYZ_PLOT (item)->data_xyz) 
+		gog_editor_add_page (editor,
+				     gog_xyz_plot_pref (GOG_XYZ_PLOT (item), cc),
+				     _("Properties"));
 
 	(GOG_OBJECT_CLASS (plot_xyz_parent_klass)->populate_editor) (item, editor, dalloc, cc);
 }
 #endif
 
+GODataVector *
+gog_xyz_plot_get_x_vals (GogXYZPlot *plot)
+{
+	double inc;
+	double *vals;
+	unsigned i, imax;
+	if (plot->data_xyz) {
+		if (plot->x_vals == NULL) {
+			imax = plot->columns;
+			inc = (plot->x.maxima - plot->x.minima) / (imax - 1);
+			vals = g_new (double, imax);
+			for (i = 0; i < imax; ++i)
+				vals[i] = plot->x.minima + i * inc;
+			plot->x_vals = GO_DATA_VECTOR (go_data_vector_val_new (vals,
+				imax, NULL));
+		}
+		return plot->x_vals;
+	} else {
+		GogSeries *series = GOG_SERIES (plot->base.series->data);
+		return GO_DATA_VECTOR (series->values[(plot->transposed)?
+						      1: 0].data);
+	}
+}
+
+GODataVector *
+gog_xyz_plot_get_y_vals (GogXYZPlot *plot)
+{
+	double inc;
+	double *vals;
+	unsigned i, imax;
+	if (plot->data_xyz) {
+		if (plot->y_vals == NULL) {
+			imax = plot->rows;
+			inc = (plot->y.maxima - plot->y.minima) / (imax - 1);
+			vals = g_new (double, imax);
+			for (i = 0; i < imax; ++i)
+				vals[i] = plot->y.minima + i * inc;
+			plot->y_vals = GO_DATA_VECTOR (go_data_vector_val_new (vals,
+				imax, NULL));
+		}
+		return plot->y_vals;
+	} else {
+		GogSeries *series = GOG_SERIES (plot->base.series->data);
+		return GO_DATA_VECTOR (series->values[(plot->transposed)?
+						      0: 1].data);
+	}
+}
+
 static void
 gog_xyz_plot_clear_formats (GogXYZPlot *plot)
 {
@@ -128,6 +179,12 @@
 	if (model->base.series == NULL)
 		return;
 
+	if (model->data_xyz) {
+		if (plot_xyz_parent_klass->update)
+			plot_xyz_parent_klass->update (obj);
+		return;
+	}
+
 	series = GOG_XYZ_SERIES (model->base.series->data);
 	if (!gog_series_is_valid (GOG_SERIES (series)))
 		return;
@@ -251,6 +308,10 @@
 	GogXYZPlot *plot = GOG_XYZ_PLOT (obj);
 	gog_xyz_plot_clear_formats (plot);
 	g_free (plot->plotted_data);
+	if (plot->x_vals != NULL)
+		g_object_unref (plot->x_vals);
+	if (plot->y_vals != NULL)
+		g_object_unref (plot->y_vals);
 	G_OBJECT_CLASS (plot_xyz_parent_klass)->finalize (obj);
 }
 
@@ -262,6 +323,9 @@
 
 	switch (param_id) {
 	case XYZ_PROP_TRANSPOSED :
+		/* Transposed property have no meaning when data set is XYZ */
+		if (plot->data_xyz)
+			return;
 		if (!plot->transposed != !g_value_get_boolean (value)) {
 			plot->transposed = g_value_get_boolean (value);
 			if (NULL != plot->base.axis[GOG_AXIS_X])
@@ -304,6 +368,9 @@
 
 	plot_xyz_parent_klass = g_type_class_peek_parent (klass);
 
+	klass->get_x_vals = gog_xyz_plot_get_x_vals;
+	klass->get_y_vals = gog_xyz_plot_get_y_vals;
+
 	gobject_klass->finalize     = gog_xyz_plot_finalize;
 	gobject_klass->set_property = gog_xyz_plot_set_property;
 	gobject_klass->get_property = gog_xyz_plot_get_property;
@@ -347,10 +414,13 @@
 {
 	xyz->rows = xyz->columns = 0;
 	xyz->transposed = FALSE;
+	xyz->data_xyz = FALSE;
 	xyz->x.minima = xyz->x.maxima = xyz->y.minima
 		= xyz->y.maxima = xyz->z.minima = xyz->z.maxima = go_nan;
 	xyz->x.fmt = xyz->y.fmt = xyz->z.fmt = NULL;
 	xyz->plotted_data = NULL;
+	xyz->x_vals = NULL;
+	xyz->y_vals = NULL;
 }
 
 GSF_DYNAMIC_CLASS_ABSTRACT (GogXYZPlot, gog_xyz_plot,
@@ -371,29 +441,36 @@
 	int length;
 	size.rows = 0;
 	size.columns = 0;
-	if (series->base.values[2].data != NULL) {
-		old_size.rows = series->rows;
-		old_size.columns = series->columns;
-		mat = GO_DATA_MATRIX (series->base.values[2].data);
-		go_data_matrix_get_values (mat);
-		size = go_data_matrix_get_size (mat);
-	}
-	if (series->base.values[0].data != NULL) {
-		vec = GO_DATA_VECTOR (series->base.values[0].data);
-		go_data_vector_get_values (vec);
-		length = go_data_vector_get_len (vec);
-		if (length < size.columns)
-			size.columns = length;
-	}
-	if (series->base.values[1].data != NULL) {
-		vec = GO_DATA_VECTOR (series->base.values[1].data);
-		go_data_vector_get_values (vec);
-		length = go_data_vector_get_len (vec);
-		if (length < size.rows)
-			size.rows = length;
+
+	if (GOG_XYZ_PLOT (series->base.plot)->data_xyz) {
+		const double *x_vals, *y_vals, *z_vals = NULL;
+		series->base.num_elements = gog_series_get_xyz_data (GOG_SERIES (series), 
+								     &x_vals, &y_vals, &z_vals);
+	} else {
+		if (series->base.values[2].data != NULL) {
+			old_size.rows = series->rows;
+			old_size.columns = series->columns;
+			mat = GO_DATA_MATRIX (series->base.values[2].data);
+			go_data_matrix_get_values (mat);
+			size = go_data_matrix_get_size (mat);
+		}
+		if (series->base.values[0].data != NULL) {
+			vec = GO_DATA_VECTOR (series->base.values[0].data);
+			go_data_vector_get_values (vec);
+			length = go_data_vector_get_len (vec);
+			if (length < size.columns)
+				size.columns = length;
+		}
+		if (series->base.values[1].data != NULL) {
+			vec = GO_DATA_VECTOR (series->base.values[1].data);
+			go_data_vector_get_values (vec);
+			length = go_data_vector_get_len (vec);
+			if (length < size.rows)
+				size.rows = length;
+		}
+		series->rows = size.rows;
+		series->columns = size.columns;
 	}
-	series->rows = size.rows;
-	series->columns = size.columns;
 
 	/* queue plot for redraw */
 	gog_object_request_update (GOG_OBJECT (series->base.plot));
@@ -435,6 +512,7 @@
 	gog_contour_view_register_type (module);
 	gog_surface_plot_register_type (module);
 	gog_surface_view_register_type (module);
+	gog_xyz_surface_plot_register_type (module);
 	gog_xyz_series_register_type (module);
 	xl_y_labels_register_type (module);
 	xl_xyz_series_register_type (module);

Modified: trunk/plugins/plot_surface/gog-xyz.h
==============================================================================
--- trunk/plugins/plot_surface/gog-xyz.h	(original)
+++ trunk/plugins/plot_surface/gog-xyz.h	Mon Aug 11 19:50:19 2008
@@ -38,11 +38,13 @@
 	
 	unsigned rows, columns;
 	gboolean transposed;
+	gboolean data_xyz;
 	struct {
 		double minima, maxima;
 		GOFormat *fmt;
 	} x, y, z;
 	double *plotted_data;
+	GODataVector *x_vals, *y_vals;
 } GogXYZPlot;
 
 #define GOG_XYZ_PLOT_TYPE	(gog_xyz_plot_get_type ())
@@ -57,11 +59,15 @@
 	GogAxisType third_axis;
 
 	double * (*build_matrix) (GogXYZPlot const *plot, gboolean *cardinality_changed);
+	GODataVector * (*get_x_vals) (GogXYZPlot *plot);
+	GODataVector * (*get_y_vals) (GogXYZPlot *plot);
 } GogXYZPlotClass;
 
 #define GOG_XYZ_PLOT_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), GOG_XYZ_PLOT_TYPE, GogXYZPlotClass))
 
 double *gog_xyz_plot_build_matrix (GogXYZPlot const *plot, gboolean *cardinality_changed);
+GODataVector *gog_xyz_plot_get_x_vals (GogXYZPlot *plot);
+GODataVector *gog_xyz_plot_get_y_vals (GogXYZPlot *plot);
 
 typedef struct {
 	GogSeries base;

Modified: trunk/plugins/plot_surface/plot-types.xml.in
==============================================================================
--- trunk/plugins/plot_surface/plot-types.xml.in	(original)
+++ trunk/plugins/plot_surface/plot-types.xml.in	Mon Aug 11 19:50:19 2008
@@ -13,4 +13,9 @@
 		_description="Surface plot."
 		sample_image_file="chart_surface_2_1.png">
 	</Type>
+	<Type _name="XYZSurface" row="1" col="2"
+		engine="GogXYZSurfacePlot" family="Surface"
+		_description="Builds a surface from a set of points with three coordinates"
+		sample_image_file="chart_surface_2_2.png">
+	</Type>
 </Types>

Modified: trunk/plugins/plot_surface/plugin.xml.in
==============================================================================
--- trunk/plugins/plot_surface/plugin.xml.in	(original)
+++ trunk/plugins/plot_surface/plugin.xml.in	Mon Aug 11 19:50:19 2008
@@ -28,6 +28,11 @@
 				<description>Excel (TM) compatibility surface plotting engine</description>
 			</information>
 		</service>
+		<service type="plot_engine" id="GogXYZSurfacePlot">
+			<information>
+				<_description>XYZ Surface plotting engine</_description>
+			</information>
+		</service>
 		<service type="plot_type" id="surface">
 			<file>plot-types.xml</file>
 			<information>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]