4 #include <iCub/data3D/SurfaceMesh.h> 6 namespace iCub {
namespace data3D {
7 bool SurfaceMesh::read_meshName(yarp::os::idl::WireReader& reader) {
8 if (!reader.readString(meshName)) {
14 bool SurfaceMesh::nested_read_meshName(yarp::os::idl::WireReader& reader) {
15 if (!reader.readString(meshName)) {
21 bool SurfaceMesh::read_points(yarp::os::idl::WireReader& reader) {
25 yarp::os::idl::WireState _etype15;
26 reader.readListBegin(_etype15, _size12);
27 points.resize(_size12);
29 for (_i16 = 0; _i16 < _size12; ++_i16)
31 if (!reader.readNested(points[_i16])) {
40 bool SurfaceMesh::nested_read_points(yarp::os::idl::WireReader& reader) {
44 yarp::os::idl::WireState _etype20;
45 reader.readListBegin(_etype20, _size17);
46 points.resize(_size17);
48 for (_i21 = 0; _i21 < _size17; ++_i21)
50 if (!reader.readNested(points[_i21])) {
59 bool SurfaceMesh::read_rgbColour(yarp::os::idl::WireReader& reader) {
63 yarp::os::idl::WireState _etype25;
64 reader.readListBegin(_etype25, _size22);
65 rgbColour.resize(_size22);
67 for (_i26 = 0; _i26 < _size22; ++_i26)
69 if (!reader.readNested(rgbColour[_i26])) {
78 bool SurfaceMesh::nested_read_rgbColour(yarp::os::idl::WireReader& reader) {
82 yarp::os::idl::WireState _etype30;
83 reader.readListBegin(_etype30, _size27);
84 rgbColour.resize(_size27);
86 for (_i31 = 0; _i31 < _size27; ++_i31)
88 if (!reader.readNested(rgbColour[_i31])) {
97 bool SurfaceMesh::read_polygons(yarp::os::idl::WireReader& reader) {
101 yarp::os::idl::WireState _etype35;
102 reader.readListBegin(_etype35, _size32);
103 polygons.resize(_size32);
105 for (_i36 = 0; _i36 < _size32; ++_i36)
107 if (!reader.readNested(polygons[_i36])) {
112 reader.readListEnd();
116 bool SurfaceMesh::nested_read_polygons(yarp::os::idl::WireReader& reader) {
120 yarp::os::idl::WireState _etype40;
121 reader.readListBegin(_etype40, _size37);
122 polygons.resize(_size37);
124 for (_i41 = 0; _i41 < _size37; ++_i41)
126 if (!reader.readNested(polygons[_i41])) {
131 reader.readListEnd();
135 bool SurfaceMesh::read(yarp::os::idl::WireReader& reader) {
136 if (!read_meshName(reader))
return false;
137 if (!read_points(reader))
return false;
138 if (!read_rgbColour(reader))
return false;
139 if (!read_polygons(reader))
return false;
140 return !reader.isError();
143 bool SurfaceMesh::read(yarp::os::ConnectionReader& connection) {
144 yarp::os::idl::WireReader reader(connection);
145 if (!reader.readListHeader(4))
return false;
149 bool SurfaceMesh::write_meshName(yarp::os::idl::WireWriter& writer) {
150 if (!writer.writeString(meshName))
return false;
153 bool SurfaceMesh::nested_write_meshName(yarp::os::idl::WireWriter& writer) {
154 if (!writer.writeString(meshName))
return false;
157 bool SurfaceMesh::write_points(yarp::os::idl::WireWriter& writer) {
159 if (!writer.writeListBegin(BOTTLE_TAG_LIST, static_cast<uint32_t>(points.size())))
return false;
160 std::vector<PointXYZ> ::iterator _iter42;
161 for (_iter42 = points.begin(); _iter42 != points.end(); ++_iter42)
163 if (!writer.writeNested((*_iter42)))
return false;
165 if (!writer.writeListEnd())
return false;
169 bool SurfaceMesh::nested_write_points(yarp::os::idl::WireWriter& writer) {
171 if (!writer.writeListBegin(BOTTLE_TAG_LIST, static_cast<uint32_t>(points.size())))
return false;
172 std::vector<PointXYZ> ::iterator _iter43;
173 for (_iter43 = points.begin(); _iter43 != points.end(); ++_iter43)
175 if (!writer.writeNested((*_iter43)))
return false;
177 if (!writer.writeListEnd())
return false;
181 bool SurfaceMesh::write_rgbColour(yarp::os::idl::WireWriter& writer) {
183 if (!writer.writeListBegin(BOTTLE_TAG_LIST, static_cast<uint32_t>(rgbColour.size())))
return false;
184 std::vector<RGBA> ::iterator _iter44;
185 for (_iter44 = rgbColour.begin(); _iter44 != rgbColour.end(); ++_iter44)
187 if (!writer.writeNested((*_iter44)))
return false;
189 if (!writer.writeListEnd())
return false;
193 bool SurfaceMesh::nested_write_rgbColour(yarp::os::idl::WireWriter& writer) {
195 if (!writer.writeListBegin(BOTTLE_TAG_LIST, static_cast<uint32_t>(rgbColour.size())))
return false;
196 std::vector<RGBA> ::iterator _iter45;
197 for (_iter45 = rgbColour.begin(); _iter45 != rgbColour.end(); ++_iter45)
199 if (!writer.writeNested((*_iter45)))
return false;
201 if (!writer.writeListEnd())
return false;
205 bool SurfaceMesh::write_polygons(yarp::os::idl::WireWriter& writer) {
207 if (!writer.writeListBegin(BOTTLE_TAG_LIST, static_cast<uint32_t>(polygons.size())))
return false;
208 std::vector<Polygon> ::iterator _iter46;
209 for (_iter46 = polygons.begin(); _iter46 != polygons.end(); ++_iter46)
211 if (!writer.writeNested((*_iter46)))
return false;
213 if (!writer.writeListEnd())
return false;
217 bool SurfaceMesh::nested_write_polygons(yarp::os::idl::WireWriter& writer) {
219 if (!writer.writeListBegin(BOTTLE_TAG_LIST, static_cast<uint32_t>(polygons.size())))
return false;
220 std::vector<Polygon> ::iterator _iter47;
221 for (_iter47 = polygons.begin(); _iter47 != polygons.end(); ++_iter47)
223 if (!writer.writeNested((*_iter47)))
return false;
225 if (!writer.writeListEnd())
return false;
229 bool SurfaceMesh::write(yarp::os::idl::WireWriter& writer) {
230 if (!write_meshName(writer))
return false;
231 if (!write_points(writer))
return false;
232 if (!write_rgbColour(writer))
return false;
233 if (!write_polygons(writer))
return false;
234 return !writer.isError();
237 bool SurfaceMesh::write(yarp::os::ConnectionWriter& connection) {
238 yarp::os::idl::WireWriter writer(connection);
239 if (!writer.writeListHeader(4))
return false;
240 return write(writer);
242 bool SurfaceMesh::Editor::write(yarp::os::ConnectionWriter& connection) {
243 if (!isValid())
return false;
244 yarp::os::idl::WireWriter writer(connection);
245 if (!writer.writeListHeader(dirty_count+1))
return false;
246 if (!writer.writeString(
"patch"))
return false;
247 if (is_dirty_meshName) {
248 if (!writer.writeListHeader(3))
return false;
249 if (!writer.writeString(
"set"))
return false;
250 if (!writer.writeString(
"meshName"))
return false;
251 if (!obj->nested_write_meshName(writer))
return false;
253 if (is_dirty_points) {
254 if (!writer.writeListHeader(3))
return false;
255 if (!writer.writeString(
"set"))
return false;
256 if (!writer.writeString(
"points"))
return false;
257 if (!obj->nested_write_points(writer))
return false;
259 if (is_dirty_rgbColour) {
260 if (!writer.writeListHeader(3))
return false;
261 if (!writer.writeString(
"set"))
return false;
262 if (!writer.writeString(
"rgbColour"))
return false;
263 if (!obj->nested_write_rgbColour(writer))
return false;
265 if (is_dirty_polygons) {
266 if (!writer.writeListHeader(3))
return false;
267 if (!writer.writeString(
"set"))
return false;
268 if (!writer.writeString(
"polygons"))
return false;
269 if (!obj->nested_write_polygons(writer))
return false;
271 return !writer.isError();
273 bool SurfaceMesh::Editor::read(yarp::os::ConnectionReader& connection) {
274 if (!isValid())
return false;
275 yarp::os::idl::WireReader reader(connection);
276 reader.expectAccept();
277 if (!reader.readListHeader())
return false;
278 int len = reader.getLength();
280 yarp::os::idl::WireWriter writer(reader);
281 if (writer.isNull())
return true;
282 if (!writer.writeListHeader(1))
return false;
283 writer.writeString(
"send: 'help' or 'patch (param1 val1) (param2 val2)'");
286 yarp::os::ConstString tag;
287 if (!reader.readString(tag))
return false;
289 yarp::os::idl::WireWriter writer(reader);
290 if (writer.isNull())
return true;
291 if (!writer.writeListHeader(2))
return false;
292 if (!writer.writeTag(
"many",1, 0))
return false;
293 if (reader.getLength()>0) {
294 yarp::os::ConstString field;
295 if (!reader.readString(field))
return false;
296 if (field==
"meshName") {
297 if (!writer.writeListHeader(1))
return false;
298 if (!writer.writeString(
"std::string meshName"))
return false;
300 if (field==
"points") {
301 if (!writer.writeListHeader(1))
return false;
302 if (!writer.writeString(
"std::vector<PointXYZ> points"))
return false;
304 if (field==
"rgbColour") {
305 if (!writer.writeListHeader(1))
return false;
306 if (!writer.writeString(
"std::vector<RGBA> rgbColour"))
return false;
308 if (field==
"polygons") {
309 if (!writer.writeListHeader(1))
return false;
310 if (!writer.writeString(
"std::vector<Polygon> polygons"))
return false;
313 if (!writer.writeListHeader(5))
return false;
314 writer.writeString(
"*** Available fields:");
315 writer.writeString(
"meshName");
316 writer.writeString(
"points");
317 writer.writeString(
"rgbColour");
318 writer.writeString(
"polygons");
322 bool have_act =
false;
324 if ((len-1)%2 != 0)
return false;
325 len = 1 + ((len-1)/2);
329 for (
int i=1; i<len; i++) {
330 if (nested && !reader.readListHeader(3))
return false;
331 yarp::os::ConstString act;
332 yarp::os::ConstString key;
336 if (!reader.readString(act))
return false;
338 if (!reader.readString(key))
return false;
340 if (key ==
"meshName") {
342 if (!obj->nested_read_meshName(reader))
return false;
344 }
else if (key ==
"points") {
346 if (!obj->nested_read_points(reader))
return false;
348 }
else if (key ==
"rgbColour") {
349 will_set_rgbColour();
350 if (!obj->nested_read_rgbColour(reader))
return false;
352 }
else if (key ==
"polygons") {
354 if (!obj->nested_read_polygons(reader))
return false;
361 yarp::os::idl::WireWriter writer(reader);
362 if (writer.isNull())
return true;
363 writer.writeListHeader(1);
364 writer.writeVocab(VOCAB2(
'o',
'k'));
368 yarp::os::ConstString SurfaceMesh::toString() {