goffice r2174 - in trunk: . pixmaps plugins/plot_surface
- From: jbrefort svn gnome org
- To: svn-commits-list gnome org
- Subject: goffice r2174 - in trunk: . pixmaps plugins/plot_surface
- Date: Mon, 11 Aug 2008 19:50:19 +0000 (UTC)
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]