1 /*
2 * ShapeDraw.cpp
3 * nlivarot
4 *
5 * Created by fred on Mon Jun 16 2003.
6 *
7 */
9 #include <cstdio>
10 #include <cstdlib>
11 #include <cstring>
12 #include "Shape.h"
13 //#include <ApplicationServices/ApplicationServices.h>
15 // debug routine for vizualizing the polygons
16 void
17 Shape::Plot (double ix, double iy, double ir, double mx, double my, bool doPoint,
18 bool edgesNo, bool pointsNo, bool doDir,char* fileName)
19 {
20 FILE* outFile=fopen(fileName,"w+");
21 // fprintf(outFile,"\n\n\n");
22 fprintf(outFile,"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
23 fprintf(outFile,"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n");
24 fprintf(outFile,"\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n");
25 fprintf(outFile,"<svg:svg\n");
26 fprintf(outFile," id=\"svg1\"\n");
27 fprintf(outFile," sodipodi:version=\"0.32\"\n");
28 fprintf(outFile," inkscape:version=\"0.38cvs\"\n");
29 fprintf(outFile," xmlns:svg=\"http://www.w3.org/2000/svg\"\n");
30 fprintf(outFile," xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n");
31 fprintf(outFile," xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n");
32 fprintf(outFile," xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n");
33 fprintf(outFile," width=\"210mm\"\n");
34 fprintf(outFile," height=\"297mm\"\n");
35 fprintf(outFile," sodipodi:docbase=\"/Volumes/Sancho/inkscapecvs\"\n");
36 fprintf(outFile," sodipodi:docname=\"/Volumes/Sancho/inkscapecvs/modele.svg\">\n");
37 fprintf(outFile," <svg:defs\n");
38 fprintf(outFile," id=\"defs3\" />\n");
39 fprintf(outFile," <sodipodi:namedview\n");
40 fprintf(outFile," id=\"base\"\n");
41 fprintf(outFile," pagecolor=\"#ffffff\"\n");
42 fprintf(outFile," bordercolor=\"#666666\"\n");
43 fprintf(outFile," borderopacity=\"1.0\"\n");
44 fprintf(outFile," inkscape:pageopacity=\"0.0\"\n");
45 fprintf(outFile," inkscape:pageshadow=\"2\"\n");
46 fprintf(outFile," inkscape:zoom=\"0.43415836\"\n");
47 fprintf(outFile," inkscape:cx=\"305.25952637\"\n");
48 fprintf(outFile," inkscape:cy=\"417.84947271\"\n");
49 fprintf(outFile," inkscape:window-width=\"640\"\n");
50 fprintf(outFile," inkscape:window-height=\"496\"\n");
51 fprintf(outFile," inkscape:window-x=\"20\"\n");
52 fprintf(outFile," inkscape:window-y=\"42\" />\n");
54 if ( doPoint ) {
55 for (int i=0;i<numberOfPoints();i++) {
56 double ph=(getPoint(i).x[0]-ix)*ir+mx;
57 double pv=(getPoint(i).x[1]-iy)*ir+my;
58 fprintf(outFile," <svg:circle cx=\"%f\" cy=\"%f\" r=\"5\" fill=\"none\" stroke=\"red\" stroke-width=\"0.25\" />\n",ph,pv); // localizing ok
59 }
60 }
61 if ( pointsNo ) {
62 for (int i=0;i<numberOfPoints();i++) {
63 double ph=(getPoint(i).x[0]-ix)*ir+mx;
64 double pv=(getPoint(i).x[1]-iy)*ir+my;
65 fprintf(outFile," <svg:text x=\"%f\" y=\"%f\" font-family=\"Monaco\" font-size=\"5\" fill=\"blue\" >\n",ph-2,pv+1); // localizing ok
66 fprintf(outFile,"%i\n",i);
67 fprintf(outFile," </text>\n");
68 }
69 }
70 {
71 for (int i=0;i<numberOfEdges();i++) {
72 int stP=getEdge(i).st;
73 int enP=getEdge(i).en;
74 if ( stP < 0 || enP < 0 ) continue;
75 double sh=(getPoint(stP).x[0]-ix)*ir+mx;
76 double sv=(getPoint(stP).x[1]-iy)*ir+my;
77 double eh=(getPoint(enP).x[0]-ix)*ir+mx;
78 double ev=(getPoint(enP).x[1]-iy)*ir+my;
79 if ( doDir ) {
80 double endh=(9*eh+1*sh)/10;
81 double endv=(9*ev+1*sv)/10;
82 fprintf(outFile," <svg:line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\" stroke-width=\"0.5\" />\n",sh,sv,endh,endv); // localizing ok
83 } else {
84 fprintf(outFile," <svg:line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"black\" stroke-width=\"0.5\" />\n",sh,sv,eh,ev); // localizing ok
85 }
86 }
87 }
88 if ( edgesNo ) {
89 for (int i=0;i<numberOfEdges();i++) {
90 int stP=getEdge(i).st;
91 int enP=getEdge(i).en;
92 if ( stP < 0 || enP < 0 ) continue;
93 double sh=(getPoint(stP).x[0]-ix)*ir+mx;
94 double sv=(getPoint(stP).x[1]-iy)*ir+my;
95 double eh=(getPoint(enP).x[0]-ix)*ir+mx;
96 double ev=(getPoint(enP).x[1]-iy)*ir+my;
97 fprintf(outFile," <svg:text x=\"%f\" y=\"%f\" font-family=\"Monaco\" font-size=\"5\" fill=\"blue\" >\n",(sh+eh)/2+2,(sv+ev)/2); // localizing ok
98 fprintf(outFile,"%i\n",i);
99 fprintf(outFile," </text>\n");
100 }
101 }
103 fprintf(outFile,"</svg>\n");
104 fclose(outFile);
106 }