source: issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp@ 10257

Last change on this file since 10257 was 10257, checked in by jschierm, 13 years ago

KML: Enable reading of KML_Point object.

File size: 4.3 KB
Line 
1/*!\file KML_MultiGeometry.cpp
2 * \brief: implementation of the kml_multigeometry object
3 */
4
5/*Headers:*/
6/*{{{1*/
7#ifdef HAVE_CONFIG_H
8 #include <config.h>
9#else
10#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11#endif
12
13#include <stdio.h>
14#include <string.h>
15#include "../objects.h"
16#include "../../shared/shared.h"
17#include "../../io/io.h"
18#include "../../Container/Container.h"
19#include "../../include/include.h"
20/*}}}*/
21
22/*Constructors/destructor/copy*/
23/*FUNCTION KML_MultiGeometry::KML_MultiGeometry(){{{1*/
24KML_MultiGeometry::KML_MultiGeometry(){
25
26 geometry =new DataSet;
27
28}
29/*}}}*/
30/*FUNCTION KML_MultiGeometry::~KML_MultiGeometry(){{{1*/
31KML_MultiGeometry::~KML_MultiGeometry(){
32
33 if (geometry) {
34 delete geometry;
35 geometry =NULL;
36 }
37
38}
39/*}}}*/
40
41/*Other*/
42/*FUNCTION KML_MultiGeometry::Echo {{{1*/
43void KML_MultiGeometry::Echo(){
44
45 bool flag=true;
46
47 _printf_(flag,"KML_Multigeometry:\n");
48 KML_Geometry::Echo();
49
50 _printf_(flag," geometry: (size=%d)\n" ,geometry->Size());
51
52 return;
53}
54/*}}}*/
55
56/*FUNCTION KML_MultiGeometry::DeepEcho {{{1*/
57void KML_MultiGeometry::DeepEcho(){
58
59 char indent[81]="";
60
61 KML_MultiGeometry::DeepEcho(indent);
62
63 return;
64}
65/*}}}*/
66
67/*FUNCTION KML_MultiGeometry::DeepEcho {{{1*/
68void KML_MultiGeometry::DeepEcho(char* indent){
69
70 int i;
71 char indent2[81];
72 bool flag=true;
73
74 _printf_(flag,"%sKML_Multigeometry:\n",indent);
75 KML_Geometry::DeepEcho(indent);
76
77/* loop over the geometry elements for the multigeometry */
78
79 memcpy(indent2,indent,(strlen(indent)+1)*sizeof(char));
80
81 strcat(indent2," ");
82
83 if (geometry->Size())
84 for (i=0; i<geometry->Size(); i++) {
85 _printf_(flag,"%s geometry: -------- begin [%d] --------\n" ,indent,i);
86 ((KML_Geometry *)geometry->GetObjectByOffset(i))->DeepEcho(indent2);
87 _printf_(flag,"%s geometry: -------- end [%d] --------\n" ,indent,i);
88 }
89 else
90 _printf_(flag,"%s geometry: [empty]\n" ,indent);
91
92 return;
93}
94/*}}}*/
95
96/*FUNCTION KML_MultiGeometry::Write {{{1*/
97void KML_MultiGeometry::Write(FILE* filout,char* indent){
98
99 int i;
100 char indent2[81];
101
102 fprintf(filout,"%s<MultiGeometry",indent);
103 WriteAttrib(filout," ");
104 fprintf(filout,">\n");
105
106 KML_Geometry::Write(filout,indent);
107
108/* loop over the geometry elements for the multigeometry */
109
110 memcpy(indent2,indent,(strlen(indent)+1)*sizeof(char));
111
112 strcat(indent2," ");
113
114 for (i=0; i<geometry->Size(); i++)
115 ((KML_Geometry *)geometry->GetObjectByOffset(i))->Write(filout,indent2);
116
117 fprintf(filout,"%s</MultiGeometry>\n",indent);
118
119 return;
120}
121/*}}}*/
122
123/*FUNCTION KML_MultiGeometry::Read {{{1*/
124void KML_MultiGeometry::Read(FILE* fid,char* kstr){
125
126 char* kstri;
127 KML_Object* kobj;
128
129/* get object attributes */
130
131 KMLFileTagAttrib(this,
132 kstr);
133
134/* loop over and process fields within opening and closing tags */
135
136 while (kstri=KMLFileToken(fid)) {
137 if (!strncmp(kstri,"</MultiGeometry",15)) {
138 xfree((void**)&kstri);
139 break;
140 }
141 else if (!strncmp(kstri,"</",2))
142 _error_("KML_MultiGeometry::Read -- Unexpected closing tag %s.\n",kstri);
143 else if (strncmp(kstri,"<",1))
144 _error_("KML_MultiGeometry::Read -- Unexpected field \"%s\".\n",kstri);
145
146 else if (!strncmp(kstri,"<Point", 6)) {
147 kobj=(KML_Object*)new KML_Point();
148 kobj->Read(fid,kstri);
149 geometry ->AddObject((Object*)kobj);
150 }
151
152 else if (!strncmp(kstri,"<LineString",11)) {
153 kobj=(KML_Object*)new KML_LineString();
154 kobj->Read(fid,kstri);
155 geometry ->AddObject((Object*)kobj);
156 }
157
158 else if (!strncmp(kstri,"<LinearRing",11)) {
159 kobj=(KML_Object*)new KML_LinearRing();
160 kobj->Read(fid,kstri);
161 geometry ->AddObject((Object*)kobj);
162 }
163
164 else if (!strncmp(kstri,"<Polygon", 8)) {
165 kobj=(KML_Object*)new KML_Polygon();
166 kobj->Read(fid,kstri);
167 geometry ->AddObject((Object*)kobj);
168 }
169
170 else if (!strncmp(kstri,"<MultiGeometry",14)) {
171 kobj=(KML_Object*)new KML_MultiGeometry();
172 kobj->Read(fid,kstri);
173 geometry ->AddObject((Object*)kobj);
174 }
175
176 else if (!strncmp(kstri,"<",1))
177 KML_Geometry::Read(fid,kstri);
178
179 xfree((void**)&kstri);
180 }
181
182 return;
183}
184/*}}}*/
185
186/*FUNCTION KML_MultiGeometry::WriteExp {{{1*/
187void KML_MultiGeometry::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
188
189 int i;
190
191/* loop over the geometry elements for the multigeometry */
192
193 for (i=0; i<geometry->Size(); i++)
194 ((KML_Object *)geometry->GetObjectByOffset(i))->WriteExp(fid,nstr,sgn,cm,sp);
195
196 return;
197}
198/*}}}*/
199
Note: See TracBrowser for help on using the repository browser.