Blender  V2.93
ViewMapIO.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
22 #include <climits>
23 
24 #include "ViewMapIO.h"
25 
26 #ifdef IRIX
27 # define WRITE(n) Internal::write<sizeof((n))>(out, (const char *)(&(n)))
28 # define READ(n) Internal::read<sizeof((n))>(in, (char *)(&(n)))
29 #else
30 # define WRITE(n) out.write((const char *)(&(n)), sizeof((n)))
31 # define READ(n) in.read((char *)(&(n)), sizeof((n)))
32 #endif
33 
34 #define WRITE_IF_NON_NULL(ptr) \
35  if (ptr) { \
36  WRITE((ptr)->userdata); \
37  } \
38  else { \
39  WRITE(ZERO); \
40  } \
41  (void)0
42 
43 #define READ_IF_NON_NULL(ptr, array) \
44  READ(tmp); \
45  if (tmp) { \
46  (ptr) = (array)[tmp]; \
47  } \
48  else { \
49  (ptr) = NULL; \
50  } \
51  (void)0
52 
54 
55 namespace Internal {
56 
57 static ViewMap *g_vm;
58 
60 
61 inline int load(istream &in, Vec3r &v)
62 {
64  float tmp;
65  READ(tmp);
66  v[0] = tmp;
67  READ(tmp);
68  v[1] = tmp;
69  READ(tmp);
70  v[2] = tmp;
71  }
72  else {
74  READ(tmp);
75  v[0] = tmp;
76  READ(tmp);
77  v[1] = tmp;
78  READ(tmp);
79  v[2] = tmp;
80  }
81  return 0;
82 }
83 
84 inline int load(istream &in, Polygon3r &p)
85 {
86  unsigned tmp;
87 
88  // Id
89  READ(tmp);
90  p.setId(tmp);
91 
92  // vertices (List)
93  vector<Vec3r> tmp_vec;
94  Vec3r v;
95  READ(tmp);
96  for (unsigned int i = 0; i < tmp; i++) {
97  load(in, v);
98  tmp_vec.push_back(v);
99  }
100  p.setVertices(tmp_vec);
101 
102  // min & max
103  // Already computed (in the SetVertices() method)
104 
105  return 0;
106 }
107 
108 inline int load(istream &in, FrsMaterial &m)
109 {
110  float tmp_array[4];
111  int i;
112 
113  // Diffuse
114  for (i = 0; i < 4; i++) {
115  READ(tmp_array[i]);
116  }
117  m.setDiffuse(tmp_array[0], tmp_array[1], tmp_array[2], tmp_array[3]);
118 
119  // Specular
120  for (i = 0; i < 4; i++) {
121  READ(tmp_array[i]);
122  }
123  m.setSpecular(tmp_array[0], tmp_array[1], tmp_array[2], tmp_array[3]);
124 
125  // Ambient
126  for (i = 0; i < 4; i++) {
127  READ(tmp_array[i]);
128  }
129  m.setAmbient(tmp_array[0], tmp_array[1], tmp_array[2], tmp_array[3]);
130 
131  // Emission
132  for (i = 0; i < 4; i++) {
133  READ(tmp_array[i]);
134  }
135  m.setEmission(tmp_array[0], tmp_array[1], tmp_array[2], tmp_array[3]);
136 
137  // Shininess
138  READ(tmp_array[0]);
139  m.setShininess(tmp_array[0]);
140 
141  return 0;
142 }
143 
144 static int load(istream &in, ViewShape *vs)
145 {
146  if (!vs || !vs->sshape()) {
147  return 1;
148  }
149 
150  // SShape
151 
152  // -> Id
153  Id::id_type id1, id2;
154  READ(id1);
155  READ(id2);
156  vs->sshape()->setId(Id(id1, id2));
157 
158  // -> Importance
159  float importance;
160  READ(importance);
161  vs->sshape()->setImportance(importance);
162 
163  // -> BBox
164  // Not necessary (only used during view map computatiom)
165 
166  unsigned i, size, tmp;
167 
168  // -> Material
169  READ(size);
170  vector<FrsMaterial> frs_materials;
171  FrsMaterial m;
172  for (i = 0; i < size; ++i) {
173  load(in, m);
174  frs_materials.push_back(m);
175  }
176  vs->sshape()->setFrsMaterials(frs_materials);
177 
178  // -> VerticesList (List)
179  READ(size);
180  for (i = 0; i < size; i++) {
181  SVertex *sv;
183  vs->sshape()->AddNewVertex(sv);
184  }
185 
186  // -> Chains (List)
187  READ(size);
188  for (i = 0; i < size; i++) {
189  FEdge *fe;
190  READ_IF_NON_NULL(fe, g_vm->FEdges());
191  vs->sshape()->AddChain(fe);
192  }
193 
194  // -> EdgesList (List)
195  READ(size);
196  for (i = 0; i < size; i++) {
197  FEdge *fe;
198  READ_IF_NON_NULL(fe, g_vm->FEdges());
199  vs->sshape()->AddEdge(fe);
200  }
201 
202  // ViewEdges (List)
203  READ(size);
204  for (i = 0; i < size; i++) {
205  ViewEdge *ve;
207  vs->AddEdge(ve);
208  }
209 
210  // ViewVertices (List)
211  READ(size);
212  for (i = 0; i < size; i++) {
213  ViewVertex *vv;
215  vs->AddVertex(vv);
216  }
217 
218  return 0;
219 }
220 
221 static int load(istream &in, FEdge *fe)
222 {
223  if (!fe) {
224  return 1;
225  }
226 
227  bool b;
228 
229  FEdgeSmooth *fesmooth = nullptr;
230  FEdgeSharp *fesharp = nullptr;
231  if (fe->isSmooth()) {
232  fesmooth = dynamic_cast<FEdgeSmooth *>(fe);
233  }
234  else {
235  fesharp = dynamic_cast<FEdgeSharp *>(fe);
236  }
237 
238  // Id
239  Id::id_type id1, id2;
240  READ(id1);
241  READ(id2);
242  fe->setId(Id(id1, id2));
243 
244  // Nature
245  Nature::EdgeNature nature;
246  READ(nature);
247  fe->setNature(nature);
248 
249 #if 0 // hasVisibilityPoint
250  bool b;
251  READ(b);
252  fe->setHasVisibilityPoint(b);
253 #endif
254 
255  Vec3r v;
256  unsigned int matindex;
257 
258 #if 0
259  // VisibilityPointA
260  load(in, v);
261  fe->setVisibilityPointA(v);
262 
263  // VisibilityPointB
264  load(in, v);
265  fe->setVisibilityPointB(v);
266 #endif
267 
268  if (fe->isSmooth()) {
269  // Normal
270  load(in, v);
271  fesmooth->setNormal(v);
272 
273  // Material
274  READ(matindex);
275  fesmooth->setFrsMaterialIndex(matindex);
276  }
277  else {
278  // aNormal
279  load(in, v);
280  fesharp->setNormalA(v);
281 
282  // bNormal
283  load(in, v);
284  fesharp->setNormalB(v);
285 
286  // Materials
287  READ(matindex);
288  fesharp->setaFrsMaterialIndex(matindex);
289  READ(matindex);
290  fesharp->setbFrsMaterialIndex(matindex);
291  }
292 
293  unsigned tmp;
294 
295  // VertexA
296  SVertex *sva;
298  fe->setVertexA(sva);
299 
300  // VertexB
301  SVertex *svb;
303  fe->setVertexB(svb);
304 
305  // NextEdge
306  FEdge *nfe;
307  READ_IF_NON_NULL(nfe, g_vm->FEdges());
308  fe->setNextEdge(nfe);
309 
310  // PreviousEdge
311  FEdge *pfe;
312  READ_IF_NON_NULL(pfe, g_vm->FEdges());
313  fe->setPreviousEdge(pfe);
314 
315  // ViewEdge
316  ViewEdge *ve;
318  fe->setViewEdge(ve);
319 
320  // Face
321  // Not necessary (only used during view map computatiom)
322 
323  Polygon3r p;
324 
325  // aFace
326  load(in, p);
327  fe->setaFace(p);
328 
329  // occludeeEmpty
330  READ(b);
331  fe->setOccludeeEmpty(b);
332 
333  // occludeeIntersection
334  load(in, v);
336 
337  return 0;
338 }
339 
340 static int load(istream &in, SVertex *sv)
341 {
342  if (!sv) {
343  return 1;
344  }
345 
346  // Id
347  Id::id_type id1, id2;
348  READ(id1);
349  READ(id2);
350  sv->setId(Id(id1, id2));
351 
352  Vec3r v;
353 
354  // Point3D
355  load(in, v);
356  sv->setPoint3D(v);
357 
358  // Point2D
359  load(in, v);
360  sv->setPoint2D(v);
361 
362  unsigned tmp;
363 
364  // Shape
365  ViewShape *vs;
367  sv->setShape(vs->sshape());
368 
369  // pViewVertex
370  ViewVertex *vv;
372  sv->setViewVertex(vv);
373 
374  unsigned i, size;
375 
376  // Normals (List)
377  READ(size);
378  for (i = 0; i < size; i++) {
379  load(in, v);
380  sv->AddNormal(v);
381  }
382 
383  // FEdges (List)
384  READ(size);
385  FEdge *fe;
386  for (i = 0; i < size; i++) {
387  READ_IF_NON_NULL(fe, g_vm->FEdges());
388  sv->AddFEdge(fe);
389  }
390 
391  return 0;
392 }
393 
394 static int load(istream &in, ViewEdge *ve)
395 {
396  if (!ve) {
397  return 1;
398  }
399 
400  unsigned tmp;
401 
402  // Id
403  Id::id_type id1, id2;
404  READ(id1);
405  READ(id2);
406  ve->setId(Id(id1, id2));
407 
408  // Nature
409  Nature::EdgeNature nature;
410  READ(nature);
411  ve->setNature(nature);
412 
413  // QI
414  READ(tmp);
415  ve->setQI(tmp);
416 
417  // Shape
418  ViewShape *vs;
420  ve->setShape(vs);
421 
422  // aShape
423  ViewShape *avs;
425  ve->setaShape(avs);
426 
427  // FEdgeA
428  FEdge *fea;
429  READ_IF_NON_NULL(fea, g_vm->FEdges());
430  ve->setFEdgeA(fea);
431 
432  // FEdgeB
433  FEdge *feb;
434  READ_IF_NON_NULL(feb, g_vm->FEdges());
435  ve->setFEdgeB(feb);
436 
437  // A
438  ViewVertex *vva;
440  ve->setA(vva);
441 
442  // B
443  ViewVertex *vvb;
445  ve->setB(vvb);
446 
447  // Occluders (List)
449  unsigned size;
450  READ(size);
451  ViewShape *vso;
452  for (unsigned int i = 0; i < size; i++) {
454  ve->AddOccluder(vso);
455  }
456  }
457 
458  return 0;
459 }
460 
461 static int load(istream &in, ViewVertex *vv)
462 {
463  if (!vv) {
464  return 1;
465  }
466 
467  unsigned tmp;
468  bool b;
469 
470  // Nature
471  Nature::VertexNature nature;
472  READ(nature);
473  vv->setNature(nature);
474 
475  if (vv->getNature() & Nature::T_VERTEX) {
476  TVertex *tv = dynamic_cast<TVertex *>(vv);
477 
478  // Id
479  Id::id_type id1, id2;
480  READ(id1);
481  READ(id2);
482  tv->setId(Id(id1, id2));
483 
484  // FrontSVertex
485  SVertex *fsv;
487  tv->setFrontSVertex(fsv);
488 
489  // BackSVertex
490  SVertex *bsv;
492  tv->setBackSVertex(bsv);
493 
494  // FrontEdgeA
495  ViewEdge *fea;
497  READ(b);
498  tv->setFrontEdgeA(fea, b);
499 
500  // FrontEdgeB
501  ViewEdge *feb;
503  READ(b);
504  tv->setFrontEdgeB(feb, b);
505 
506  // BackEdgeA
507  ViewEdge *bea;
509  READ(b);
510  tv->setBackEdgeA(bea, b);
511 
512  // BackEdgeB
513  ViewEdge *beb;
515  READ(b);
516  tv->setBackEdgeB(beb, b);
517  }
518  else if (vv->getNature() & Nature::NON_T_VERTEX) {
519  NonTVertex *ntv = dynamic_cast<NonTVertex *>(vv);
520 
521  // SVertex
522  SVertex *sv;
524  ntv->setSVertex(sv);
525 
526  // ViewEdges (List)
527  unsigned size;
528  READ(size);
529  ViewEdge *ve;
530  for (unsigned int i = 0; i < size; i++) {
532  READ(b);
533  ntv->AddViewEdge(ve, b);
534  }
535  }
536 
537  return 0;
538 }
539 
541 
542 inline int save(ostream &out, const Vec3r &v)
543 {
545  float tmp;
546 
547  tmp = v[0];
548  WRITE(tmp);
549  tmp = v[1];
550  WRITE(tmp);
551  tmp = v[2];
552  WRITE(tmp);
553  }
554  else {
555  Vec3r::value_type tmp;
556 
557  tmp = v[0];
558  WRITE(tmp);
559  tmp = v[1];
560  WRITE(tmp);
561  tmp = v[2];
562  WRITE(tmp);
563  }
564  return 0;
565 }
566 
567 inline int save(ostream &out, const Polygon3r &p)
568 {
569  unsigned tmp;
570 
571  // Id
572  tmp = p.getId();
573  WRITE(tmp);
574 
575  // vertices (List)
576  tmp = p.getVertices().size();
577  WRITE(tmp);
578  for (vector<Vec3r>::const_iterator i = p.getVertices().begin(); i != p.getVertices().end();
579  i++) {
580  save(out, *i);
581  }
582 
583  // min & max
584  // Do not need to be saved
585 
586  return 0;
587 }
588 
589 inline int save(ostream &out, const FrsMaterial &m)
590 {
591  unsigned i;
592 
593  // Diffuse
594  for (i = 0; i < 4; i++) {
595  WRITE(m.diffuse()[i]);
596  }
597 
598  // Specular
599  for (i = 0; i < 4; i++) {
600  WRITE(m.specular()[i]);
601  }
602 
603  // Ambient
604  for (i = 0; i < 4; i++) {
605  WRITE(m.ambient()[i]);
606  }
607 
608  // Emission
609  for (i = 0; i < 4; i++) {
610  WRITE(m.emission()[i]);
611  }
612 
613  // Shininess
614  float shininess = m.shininess();
615  WRITE(shininess);
616 
617  return 0;
618 }
619 
620 static int save(ostream &out, ViewShape *vs)
621 {
622  if (!vs || !vs->sshape()) {
623  cerr << "Warning: null ViewShape" << endl;
624  return 1;
625  }
626 
627  unsigned tmp;
628 
629  // SShape
630 
631  // -> Id
632  Id::id_type id = vs->sshape()->getId().getFirst();
633  WRITE(id);
634  id = vs->sshape()->getId().getSecond();
635  WRITE(id);
636 
637  // -> Importance
638  float importance = vs->sshape()->importance();
639  WRITE(importance);
640 
641  // -> BBox
642  // Not necessary (only used during view map computatiom)
643 
644  // -> Material
645  unsigned int size = vs->sshape()->frs_materials().size();
646  WRITE(size);
647  for (unsigned int i = 0; i < size; ++i) {
648  save(out, vs->sshape()->frs_material(i));
649  }
650 
651  // -> VerticesList (List)
652  tmp = vs->sshape()->getVertexList().size();
653  WRITE(tmp);
654  for (vector<SVertex *>::const_iterator i1 = vs->sshape()->getVertexList().begin();
655  i1 != vs->sshape()->getVertexList().end();
656  i1++) {
658  }
659 
660  // -> Chains (List)
661  tmp = vs->sshape()->getChains().size();
662  WRITE(tmp);
663  for (vector<FEdge *>::const_iterator i2 = vs->sshape()->getChains().begin();
664  i2 != vs->sshape()->getChains().end();
665  i2++) {
666  WRITE_IF_NON_NULL(*i2);
667  }
668 
669  // -> EdgesList (List)
670  tmp = vs->sshape()->getEdgeList().size();
671  WRITE(tmp);
672  for (vector<FEdge *>::const_iterator i3 = vs->sshape()->getEdgeList().begin();
673  i3 != vs->sshape()->getEdgeList().end();
674  i3++) {
675  WRITE_IF_NON_NULL(*i3);
676  }
677 
678  // ViewEdges (List)
679  tmp = vs->edges().size();
680  WRITE(tmp);
681  for (vector<ViewEdge *>::const_iterator i4 = vs->edges().begin(); i4 != vs->edges().end();
682  i4++) {
683  WRITE_IF_NON_NULL(*i4);
684  }
685 
686  // ViewVertices (List)
687  tmp = vs->vertices().size();
688  WRITE(tmp);
689  for (vector<ViewVertex *>::const_iterator i5 = vs->vertices().begin();
690  i5 != vs->vertices().end();
691  i5++) {
692  WRITE_IF_NON_NULL(*i5);
693  }
694 
695  return 0;
696 }
697 
698 static int save(ostream &out, FEdge *fe)
699 {
700  if (!fe) {
701  cerr << "Warning: null FEdge" << endl;
702  return 1;
703  }
704 
705  FEdgeSmooth *fesmooth = dynamic_cast<FEdgeSmooth *>(fe);
706  FEdgeSharp *fesharp = dynamic_cast<FEdgeSharp *>(fe);
707 
708  // Id
709  Id::id_type id = fe->getId().getFirst();
710  WRITE(id);
711  id = fe->getId().getSecond();
712  WRITE(id);
713 
714  // Nature
715  Nature::EdgeNature nature = fe->getNature();
716  WRITE(nature);
717 
718  bool b;
719 
720 #if 0
721  // hasVisibilityPoint
722  b = fe->hasVisibilityPoint();
723  WRITE(b);
724 
725  // VisibilityPointA
726  save(out, fe->visibilityPointA());
727 
728  // VisibilityPointB
729  save(out, fe->visibilityPointB());
730 #endif
731 
732  unsigned index;
733  if (fe->isSmooth()) {
734  // normal
735  save(out, fesmooth->normal());
736  // material
737  index = fesmooth->frs_materialIndex();
738  WRITE(index);
739  }
740  else {
741  // aNormal
742  save(out, fesharp->normalA());
743  // bNormal
744  save(out, fesharp->normalB());
745  // aMaterial
746  index = fesharp->aFrsMaterialIndex();
747  WRITE(index);
748  // bMaterial
749  index = fesharp->bFrsMaterialIndex();
750  WRITE(index);
751  }
752 
753  // VertexA
754  WRITE_IF_NON_NULL(fe->vertexA());
755 
756  // VertexB
757  WRITE_IF_NON_NULL(fe->vertexB());
758 
759  // NextEdge
761 
762  // PreviousEdge
764 
765  // ViewEdge
767 
768  // Face
769  // Not necessary (only used during view map computatiom)
770 
771  // aFace
772  save(out, (Polygon3r &)fe->aFace());
773 
774  // occludeeEmpty
775  b = fe->getOccludeeEmpty();
776  WRITE(b);
777 
778  // occludeeIntersection
779  save(out, fe->getOccludeeIntersection());
780 
781  return 0;
782 }
783 
784 static int save(ostream &out, SVertex *sv)
785 {
786  if (!sv) {
787  cerr << "Warning: null SVertex" << endl;
788  return 1;
789  }
790 
791  unsigned tmp;
792 
793  // Id
794  Id::id_type id = sv->getId().getFirst();
795  WRITE(id);
796  id = sv->getId().getSecond();
797  WRITE(id);
798 
799  Vec3r v;
800 
801  // Point3D
802  v = sv->point3D();
803  save(out, sv->point3D());
804 
805  // Point2D
806  v = sv->point2D();
807  save(out, v);
808 
809  // Shape
810  WRITE_IF_NON_NULL(sv->shape());
811 
812  // pViewVertex
814 
815  // Normals (List)
816  // Note: the 'size()' method of a set doesn't seem to return the actual size of the given set, so
817  // we have to hack it...
818  set<Vec3r>::const_iterator i;
819  for (i = sv->normals().begin(), tmp = 0; i != sv->normals().end(); i++, tmp++) {
820  /* pass */
821  }
822  WRITE(tmp);
823  for (i = sv->normals().begin(); i != sv->normals().end(); i++) {
824  save(out, *i);
825  }
826 
827  // FEdges (List)
828  tmp = sv->fedges().size();
829  WRITE(tmp);
830  for (vector<FEdge *>::const_iterator j = sv->fedges_begin(); j != sv->fedges_end(); j++) {
831  WRITE_IF_NON_NULL(*j);
832  }
833 
834  return 0;
835 }
836 
837 static int save(ostream &out, ViewEdge *ve)
838 {
839  if (!ve) {
840  cerr << "Warning: null ViewEdge" << endl;
841  return 1;
842  }
843 
844  unsigned tmp;
845 
846  // Id
847  Id::id_type id = ve->getId().getFirst();
848  WRITE(id);
849  id = ve->getId().getSecond();
850  WRITE(id);
851 
852  // Nature
853  Nature::EdgeNature nature = ve->getNature();
854  WRITE(nature);
855 
856  // QI
857  unsigned qi = ve->qi();
858  WRITE(qi);
859 
860  // Shape
861  WRITE_IF_NON_NULL(ve->shape());
862 
863  // aShape
864  WRITE_IF_NON_NULL(ve->aShape());
865 
866  // FEdgeA
867  WRITE_IF_NON_NULL(ve->fedgeA());
868 
869  // FEdgeB
870  WRITE_IF_NON_NULL(ve->fedgeB());
871 
872  // A
873  WRITE_IF_NON_NULL(ve->A());
874 
875  // B
876  WRITE_IF_NON_NULL(ve->B());
877 
878  // Occluders (List)
880  tmp = ve->occluders().size();
881  WRITE(tmp);
882  for (vector<ViewShape *>::const_iterator i = ve->occluders().begin();
883  i != ve->occluders().end();
884  i++) {
885  WRITE_IF_NON_NULL((*i));
886  }
887  }
888 
889  return 0;
890 }
891 
892 static int save(ostream &out, ViewVertex *vv)
893 {
894  if (!vv) {
895  cerr << "Warning: null ViewVertex" << endl;
896  return 1;
897  }
898 
899  // Nature
900  Nature::VertexNature nature = vv->getNature();
901  WRITE(nature);
902 
903  if (vv->getNature() & Nature::T_VERTEX) {
904  TVertex *tv = dynamic_cast<TVertex *>(vv);
905 
906  // Id
907  Id::id_type id = tv->getId().getFirst();
908  WRITE(id);
909  id = tv->getId().getSecond();
910  WRITE(id);
911 
912  // FrontSVertex
914 
915  // BackSVertex
917 
918  // FrontEdgeA
919  WRITE_IF_NON_NULL(tv->frontEdgeA().first);
920  WRITE(tv->frontEdgeA().second);
921 
922  // FrontEdgeB
923  WRITE_IF_NON_NULL(tv->frontEdgeB().first);
924  WRITE(tv->frontEdgeB().second);
925 
926  // BackEdgeA
927  WRITE_IF_NON_NULL(tv->backEdgeA().first);
928  WRITE(tv->backEdgeA().second);
929 
930  // BackEdgeB
931  WRITE_IF_NON_NULL(tv->backEdgeB().first);
932  WRITE(tv->backEdgeB().second);
933  }
934  else if (vv->getNature() & Nature::NON_T_VERTEX) {
935  NonTVertex *ntv = dynamic_cast<NonTVertex *>(vv);
936 
937  // SVertex
938  WRITE_IF_NON_NULL(ntv->svertex());
939 
940  // ViewEdges (List)
941  unsigned size = ntv->viewedges().size();
942  WRITE(size);
943  vector<ViewVertex::directedViewEdge>::const_iterator i = ntv->viewedges().begin();
944  for (; i != ntv->viewedges().end(); i++) {
945  WRITE_IF_NON_NULL(i->first);
946  WRITE(i->second);
947  }
948  }
949  else {
950  cerr << "Warning: unexpected ViewVertex nature" << endl;
951  return 1;
952  }
953 
954  return 0;
955 }
956 
957 } // End of namespace Internal
958 
960 
961 #define SET_PROGRESS(n) \
962  if (pb) { \
963  pb->setProgress((n)); \
964  } \
965  (void)0
966 
967 int load(istream &in, ViewMap *vm, ProgressBar *pb)
968 {
969  if (!vm) {
970  return 1;
971  }
972 
973  // soc unused - unsigned tmp;
974  int err = 0;
975  Internal::g_vm = vm;
976 
977  // Management of the progress bar (if present)
978  if (pb) {
979  pb->reset();
980  pb->setLabelText("Loading View Map...");
981  pb->setTotalSteps(6);
982  pb->setProgress(0);
983  }
984 
985  // Read and set the options
986  unsigned char flags;
987  READ(flags);
988  Options::setFlags(flags);
989 
990  // Read the size of the five ViewMap's lists (with some extra information for the ViewVertices)
991  // and instantiate them (with default costructors)
992  unsigned vs_s, fe_s, fe_rle1, fe_rle2, sv_s, ve_s, vv_s, vv_rle1, vv_rle2;
993  READ(vs_s);
994  READ(fe_s);
995 
996  if (fe_s) {
997  bool b;
998  READ(b);
999  /* NOLINTNEXTLINE: bugprone-infinite-loop */
1000  for (READ(fe_rle1), fe_rle2 = 0; fe_rle1 <= fe_s; fe_rle2 = fe_rle1, READ(fe_rle1)) {
1001  if (b) {
1002  for (unsigned int i = fe_rle2; i < fe_rle1; i++) {
1003  FEdgeSmooth *fes = new FEdgeSmooth;
1004  vm->AddFEdge(fes);
1005  }
1006  b = !b;
1007  }
1008  else if (!b) {
1009  for (unsigned int i = fe_rle2; i < fe_rle1; i++) {
1010  FEdgeSharp *fes = new FEdgeSharp;
1011  vm->AddFEdge(fes);
1012  }
1013  b = !b;
1014  }
1015  }
1016  }
1017 
1018  READ(sv_s);
1019  READ(ve_s);
1020  READ(vv_s);
1021 
1022  if (vv_s) {
1023  Nature::VertexNature nature;
1024  READ(nature);
1025  /* NOLINTNEXTLINE: bugprone-infinite-loop */
1026  for (READ(vv_rle1), vv_rle2 = 0; vv_rle1 <= vv_s; vv_rle2 = vv_rle1, READ(vv_rle1)) {
1027  if (nature & Nature::T_VERTEX) {
1028  for (unsigned int i = vv_rle2; i < vv_rle1; i++) {
1029  TVertex *tv = new TVertex();
1030  vm->AddViewVertex(tv);
1031  }
1032  nature = Nature::NON_T_VERTEX;
1033  }
1034  else if (nature & Nature::NON_T_VERTEX) {
1035  for (unsigned int i = vv_rle2; i < vv_rle1; i++) {
1036  NonTVertex *ntv = new NonTVertex();
1037  vm->AddViewVertex(ntv);
1038  }
1039  nature = Nature::T_VERTEX;
1040  }
1041  }
1042  }
1043 
1044  for (unsigned int i0 = 0; i0 < vs_s; i0++) {
1045  SShape *ss = new SShape();
1046  ViewShape *vs = new ViewShape();
1047  vs->setSShape(ss);
1048  ss->setViewShape(vs);
1049  vm->AddViewShape(vs);
1050  }
1051 #if 0
1052  for (unsigned int i1 = 0; i1 < fe_s; i1++) {
1053  FEdge *fe = new FEdge();
1054  vm->AddFEdge(fe);
1055  }
1056 #endif
1057  for (unsigned int i2 = 0; i2 < sv_s; i2++) {
1058  SVertex *sv = new SVertex();
1059  vm->AddSVertex(sv);
1060  }
1061  for (unsigned int i3 = 0; i3 < ve_s; i3++) {
1062  ViewEdge *ve = new ViewEdge();
1063  vm->AddViewEdge(ve);
1064  }
1065 
1066  // Read the values for all the objects created above
1067  SET_PROGRESS(1);
1068  for (vector<ViewShape *>::const_iterator i4 = vm->ViewShapes().begin();
1069  i4 != vm->ViewShapes().end();
1070  i4++) {
1071  err += Internal::load(in, *i4);
1072  }
1073  SET_PROGRESS(2);
1074  for (vector<FEdge *>::const_iterator i5 = vm->FEdges().begin(); i5 != vm->FEdges().end(); i5++) {
1075  err += Internal::load(in, *i5);
1076  }
1077  SET_PROGRESS(3);
1078  for (vector<SVertex *>::const_iterator i6 = vm->SVertices().begin(); i6 != vm->SVertices().end();
1079  i6++) {
1080  err += Internal::load(in, *i6);
1081  }
1082  SET_PROGRESS(4);
1083  for (vector<ViewEdge *>::const_iterator i7 = vm->ViewEdges().begin();
1084  i7 != vm->ViewEdges().end();
1085  i7++) {
1086  err += Internal::load(in, *i7);
1087  }
1088  SET_PROGRESS(5);
1089  for (vector<ViewVertex *>::const_iterator i8 = vm->ViewVertices().begin();
1090  i8 != vm->ViewVertices().end();
1091  i8++) {
1092  err += Internal::load(in, *i8);
1093  }
1094  SET_PROGRESS(6);
1095 
1096  // Read the shape id to index mapping
1097  unsigned map_s;
1098  READ(map_s);
1099  unsigned id, index;
1100  for (unsigned int i4 = 0; i4 < map_s; ++i4) {
1101  READ(id);
1102  READ(index);
1103  vm->shapeIdToIndexMap()[id] = index;
1104  }
1105 
1106  return err;
1107 }
1108 
1109 int save(ostream &out, ViewMap *vm, ProgressBar *pb)
1110 {
1111  if (!vm) {
1112  return 1;
1113  }
1114 
1115  int err = 0;
1116 
1117  // Management of the progress bar (if present)
1118  if (pb) {
1119  pb->reset();
1120  pb->setLabelText("Saving View Map...");
1121  pb->setTotalSteps(6);
1122  pb->setProgress(0);
1123  }
1124 
1125  // For every object, initialize its userdata member to its index in the ViewMap list
1126  for (unsigned int i0 = 0; i0 < vm->ViewShapes().size(); i0++) {
1127  vm->ViewShapes()[i0]->userdata = POINTER_FROM_UINT(i0);
1128  vm->ViewShapes()[i0]->sshape()->userdata = POINTER_FROM_UINT(i0);
1129  }
1130  for (unsigned int i1 = 0; i1 < vm->FEdges().size(); i1++) {
1131  vm->FEdges()[i1]->userdata = POINTER_FROM_UINT(i1);
1132  }
1133  for (unsigned int i2 = 0; i2 < vm->SVertices().size(); i2++) {
1134  vm->SVertices()[i2]->userdata = POINTER_FROM_UINT(i2);
1135  }
1136  for (unsigned int i3 = 0; i3 < vm->ViewEdges().size(); i3++) {
1137  vm->ViewEdges()[i3]->userdata = POINTER_FROM_UINT(i3);
1138  }
1139  for (unsigned int i4 = 0; i4 < vm->ViewVertices().size(); i4++) {
1140  vm->ViewVertices()[i4]->userdata = POINTER_FROM_UINT(i4);
1141  }
1142 
1143  // Write the current options
1144  unsigned char flags = Options::getFlags();
1145  WRITE(flags);
1146 
1147  // Write the size of the five lists (with some extra information for the ViewVertices)
1148  unsigned size;
1149  size = vm->ViewShapes().size();
1150  WRITE(size);
1151  size = vm->FEdges().size();
1152  WRITE(size);
1153  if (size) {
1154  bool b = vm->FEdges()[0]->isSmooth();
1155  WRITE(b);
1156  for (unsigned int i = 0; i < size; i++) {
1157  while (i < size && (vm->FEdges()[i]->isSmooth() == b)) {
1158  i++;
1159  }
1160  if (i < size) {
1161  WRITE(i);
1162  b = !b;
1163  }
1164  }
1165  WRITE(size);
1166  size++;
1167  WRITE(size);
1168  }
1169  size = vm->SVertices().size();
1170  WRITE(size);
1171  size = vm->ViewEdges().size();
1172  WRITE(size);
1173  size = vm->ViewVertices().size();
1174  WRITE(size);
1175  if (size) {
1176  Nature::VertexNature nature = vm->ViewVertices()[0]->getNature();
1177  WRITE(nature);
1178  nature &= ~Nature::VIEW_VERTEX;
1179  for (unsigned int i = 0; i < size; i++) {
1180  while (i < size && (vm->ViewVertices()[i]->getNature() & nature)) {
1181  i++;
1182  }
1183  if (i < size) {
1184  WRITE(i);
1185  nature = vm->ViewVertices()[i]->getNature() & ~Nature::VIEW_VERTEX;
1186  }
1187  }
1188  WRITE(size);
1189  size++;
1190  WRITE(size);
1191  }
1192 
1193  // Write all the elts of the ViewShapes List
1194  SET_PROGRESS(1);
1195  for (vector<ViewShape *>::const_iterator i5 = vm->ViewShapes().begin();
1196  i5 != vm->ViewShapes().end();
1197  i5++) {
1198  err += Internal::save(out, *i5);
1199  }
1200  SET_PROGRESS(2);
1201  for (vector<FEdge *>::const_iterator i6 = vm->FEdges().begin(); i6 != vm->FEdges().end(); i6++) {
1202  err += Internal::save(out, *i6);
1203  }
1204  SET_PROGRESS(3);
1205  for (vector<SVertex *>::const_iterator i7 = vm->SVertices().begin(); i7 != vm->SVertices().end();
1206  i7++) {
1207  err += Internal::save(out, *i7);
1208  }
1209  SET_PROGRESS(4);
1210  for (vector<ViewEdge *>::const_iterator i8 = vm->ViewEdges().begin();
1211  i8 != vm->ViewEdges().end();
1212  i8++) {
1213  err += Internal::save(out, *i8);
1214  }
1215  SET_PROGRESS(5);
1216  for (vector<ViewVertex *>::const_iterator i9 = vm->ViewVertices().begin();
1217  i9 != vm->ViewVertices().end();
1218  i9++) {
1219  err += Internal::save(out, *i9);
1220  }
1221 
1222  // Write the shape id to index mapping
1223  size = vm->shapeIdToIndexMap().size();
1224  WRITE(size);
1225  unsigned int id, index;
1226  for (ViewMap::id_to_index_map::iterator mit = vm->shapeIdToIndexMap().begin(),
1227  mitend = vm->shapeIdToIndexMap().end();
1228  mit != mitend;
1229  ++mit) {
1230  id = mit->first;
1231  index = mit->second;
1232  WRITE(id);
1233  WRITE(index);
1234  }
1235 
1236  // Reset 'userdata' members
1237  for (vector<ViewShape *>::const_iterator j0 = vm->ViewShapes().begin();
1238  j0 != vm->ViewShapes().end();
1239  j0++) {
1240  (*j0)->userdata = nullptr;
1241  (*j0)->sshape()->userdata = nullptr;
1242  }
1243  for (vector<FEdge *>::const_iterator j1 = vm->FEdges().begin(); j1 != vm->FEdges().end(); j1++) {
1244  (*j1)->userdata = nullptr;
1245  }
1246  for (vector<SVertex *>::const_iterator j2 = vm->SVertices().begin(); j2 != vm->SVertices().end();
1247  j2++) {
1248  (*j2)->userdata = nullptr;
1249  }
1250  for (vector<ViewEdge *>::const_iterator j3 = vm->ViewEdges().begin();
1251  j3 != vm->ViewEdges().end();
1252  j3++) {
1253  (*j3)->userdata = nullptr;
1254  }
1255  for (vector<ViewVertex *>::const_iterator j4 = vm->ViewVertices().begin();
1256  j4 != vm->ViewVertices().end();
1257  j4++) {
1258  (*j4)->userdata = nullptr;
1259  }
1260  SET_PROGRESS(6);
1261 
1262  return err;
1263 }
1264 
1266 
1267 namespace Options {
1268 
1269 namespace Internal {
1270 
1271 static unsigned char g_flags = 0;
1272 static string g_models_path;
1273 
1274 } // End of namespace Internal
1275 
1276 void setFlags(const unsigned char flags)
1277 {
1278  Internal::g_flags = flags;
1279 }
1280 
1281 void addFlags(const unsigned char flags)
1282 {
1283  Internal::g_flags |= flags;
1284 }
1285 
1286 void rmFlags(const unsigned char flags)
1287 {
1288  Internal::g_flags &= ~flags;
1289 }
1290 
1291 unsigned char getFlags()
1292 {
1293  return Internal::g_flags;
1294 }
1295 
1296 void setModelsPath(const string &path)
1297 {
1298  Internal::g_models_path = path;
1299 }
1300 
1302 {
1303  return Internal::g_models_path;
1304 }
1305 
1306 } // namespace Options
1307 
1308 } // namespace Freestyle::ViewMapIO
#define POINTER_FROM_UINT(i)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint i1
#define READ(n)
Definition: ViewMapIO.cpp:31
#define WRITE(n)
Definition: ViewMapIO.cpp:30
#define READ_IF_NON_NULL(ptr, array)
Definition: ViewMapIO.cpp:43
#define SET_PROGRESS(n)
Definition: ViewMapIO.cpp:961
#define WRITE_IF_NON_NULL(ptr)
Definition: ViewMapIO.cpp:34
Functions to manage I/O for the view map.
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
unsigned aFrsMaterialIndex() const
Definition: Silhouette.h:1217
void setbFrsMaterialIndex(unsigned i)
Definition: Silhouette.h:1269
unsigned bFrsMaterialIndex() const
Definition: Silhouette.h:1228
void setNormalB(const Vec3r &iNormal)
Definition: Silhouette.h:1257
void setaFrsMaterialIndex(unsigned i)
Definition: Silhouette.h:1263
const Vec3r & normalA()
Definition: Silhouette.h:1202
const Vec3r & normalB()
Definition: Silhouette.h:1208
void setNormalA(const Vec3r &iNormal)
Definition: Silhouette.h:1251
unsigned frs_materialIndex() const
Definition: Silhouette.h:1372
void setNormal(const Vec3r &iNormal)
Definition: Silhouette.h:1392
const Vec3r & normal()
Definition: Silhouette.h:1366
void setFrsMaterialIndex(unsigned i)
Definition: Silhouette.h:1398
virtual Id getId() const
Definition: Silhouette.h:497
bool getOccludeeEmpty()
Definition: Silhouette.h:714
void setOccludeeEmpty(bool iempty)
Definition: Silhouette.h:812
const Vec3r & getOccludeeIntersection()
Definition: Silhouette.h:709
const Polygon3r & aFace() const
Definition: Silhouette.h:704
void setVertexB(SVertex *vB)
Definition: Silhouette.h:743
void setId(const Id &id)
Definition: Silhouette.h:749
SVertex * vertexA()
Definition: Silhouette.h:611
ViewEdge * viewedge() const
Definition: Silhouette.h:672
FEdge * previousEdge()
Definition: Silhouette.h:645
void setViewEdge(ViewEdge *iViewEdge)
Definition: Silhouette.h:780
void setNextEdge(FEdge *iEdge)
Definition: Silhouette.h:755
SVertex * vertexB()
Definition: Silhouette.h:617
void setNature(Nature::EdgeNature iNature)
Definition: Silhouette.h:767
void setPreviousEdge(FEdge *iEdge)
Definition: Silhouette.h:761
bool isSmooth() const
Definition: Silhouette.h:720
void setaFace(Polygon3r &iFace)
Definition: Silhouette.h:802
FEdge * nextEdge()
Definition: Silhouette.h:637
void setVertexA(SVertex *vA)
Definition: Silhouette.h:737
Nature::EdgeNature getNature() const
Definition: Silhouette.h:629
void setOccludeeIntersection(const Vec3r &iPoint)
Definition: Silhouette.h:807
const float * diffuse() const
Definition: FrsMaterial.h:102
void setSpecular(const float r, const float g, const float b, const float a)
Definition: FrsMaterial.h:396
void setEmission(const float r, const float g, const float b, const float a)
Definition: FrsMaterial.h:412
void setDiffuse(const float r, const float g, const float b, const float a)
Definition: FrsMaterial.h:388
void setShininess(const float s)
Definition: FrsMaterial.h:420
void setAmbient(const float r, const float g, const float b, const float a)
Definition: FrsMaterial.h:404
const float * specular() const
Definition: FrsMaterial.h:132
const float * ambient() const
Definition: FrsMaterial.h:162
const float shininess() const
Definition: FrsMaterial.h:222
const float * emission() const
Definition: FrsMaterial.h:192
const vector< Point > & getVertices() const
Definition: Polygon.h:81
unsigned getId() const
Definition: Polygon.h:109
void setVertices(const vector< Point > &vertices)
Definition: Polygon.h:118
void setId(unsigned id)
Definition: Polygon.h:130
unsigned id_type
Definition: Id.h:35
id_type getFirst() const
Definition: Id.h:76
id_type getSecond() const
Definition: Id.h:82
SVertex * svertex()
Definition: ViewMap.h:798
edges_container & viewedges()
Definition: ViewMap.h:803
void AddViewEdge(ViewEdge *iVEdge, bool incoming=true)
Definition: ViewMap.h:824
void setSVertex(SVertex *iSVertex)
Definition: ViewMap.h:810
virtual void setLabelText(const string &s)
Definition: ProgressBar.h:62
virtual void setProgress(unsigned i)
Definition: ProgressBar.h:57
virtual void reset()
Definition: ProgressBar.h:46
virtual void setTotalSteps(unsigned n)
Definition: ProgressBar.h:52
vector< SVertex * > & getVertexList()
Definition: Silhouette.h:1857
void setId(Id id)
Definition: Silhouette.h:1921
void AddChain(FEdge *iEdge)
Definition: Silhouette.h:1579
const vector< FrsMaterial > & frs_materials() const
Definition: Silhouette.h:1886
void setFrsMaterials(const vector< FrsMaterial > &iMaterials)
Definition: Silhouette.h:1939
void setImportance(float importance)
Definition: Silhouette.h:1949
void setViewShape(ViewShape *iShape)
Definition: Silhouette.h:1944
float importance() const
Definition: Silhouette.h:1896
vector< FEdge * > & getEdgeList()
Definition: Silhouette.h:1863
const FrsMaterial & frs_material(unsigned i) const
Definition: Silhouette.h:1880
void AddNewVertex(SVertex *iv)
Definition: Silhouette.h:1573
Id getId() const
Definition: Silhouette.h:1902
vector< FEdge * > & getChains()
Definition: Silhouette.h:1868
void AddEdge(FEdge *iEdge)
Definition: Silhouette.h:1565
const vector< FEdge * > & fedges()
Definition: Silhouette.h:262
ViewVertex * viewvertex()
Definition: Silhouette.h:290
SShape * shape()
Definition: Silhouette.h:277
void setPoint2D(const Vec3r &iPoint2D)
Definition: Silhouette.h:303
void setViewVertex(ViewVertex *iViewVertex)
Definition: Silhouette.h:367
void setShape(SShape *iShape)
Definition: Silhouette.h:362
fedges_container::iterator fedges_begin()
Definition: Silhouette.h:267
fedges_container::iterator fedges_end()
Definition: Silhouette.h:272
set< Vec3r > normals()
Definition: Silhouette.h:251
void AddNormal(const Vec3r &iNormal)
Definition: Silhouette.h:310
const Vec3r & point3D() const
Definition: Silhouette.h:237
void setPoint3D(const Vec3r &iPoint3D)
Definition: Silhouette.h:297
void AddFEdge(FEdge *iFEdge)
Definition: Silhouette.h:373
virtual Id getId() const
Definition: Silhouette.h:131
const Vec3r & point2D() const
Definition: Silhouette.h:242
void setId(const Id &id)
Definition: Silhouette.h:352
void setId(const Id &iId)
Definition: ViewMap.h:584
directedViewEdge & frontEdgeB()
Definition: ViewMap.h:548
directedViewEdge & frontEdgeA()
Definition: ViewMap.h:543
void setBackEdgeA(ViewEdge *iBackEdgeA, bool incoming=true)
Definition: ViewMap.cpp:375
directedViewEdge & backEdgeB()
Definition: ViewMap.h:558
void setBackEdgeB(ViewEdge *iBackEdgeB, bool incoming=true)
Definition: ViewMap.cpp:394
SVertex * frontSVertex()
Definition: ViewMap.h:532
void setBackSVertex(SVertex *iBackSVertex)
Definition: ViewMap.h:572
void setFrontEdgeB(ViewEdge *iFrontEdgeB, bool incoming=true)
Definition: ViewMap.cpp:356
SVertex * backSVertex()
Definition: ViewMap.h:538
directedViewEdge & backEdgeA()
Definition: ViewMap.h:553
void setFrontSVertex(SVertex *iFrontSVertex)
Definition: ViewMap.h:565
void setFrontEdgeA(ViewEdge *iFrontEdgeA, bool incoming=true)
Definition: ViewMap.cpp:337
virtual Id getId() const
Definition: ViewMap.h:455
Vec< real, 3 >::value_type value_type
Definition: VecMat.h:500
int qi() const
Definition: ViewMap.h:1292
FEdge * fedgeB()
Definition: ViewMap.h:1095
void setId(const Id &id)
Definition: ViewMap.h:1192
void setaShape(ViewShape *iShape)
Definition: ViewMap.h:1201
virtual Nature::EdgeNature getNature() const
Definition: ViewMap.h:924
vector< ViewShape * > & occluders()
Definition: ViewMap.h:1139
FEdge * fedgeA()
Definition: ViewMap.h:1089
ViewVertex * B()
Definition: ViewMap.h:1083
void setFEdgeB(FEdge *iFEdge)
Definition: ViewMap.h:1180
void setA(ViewVertex *iA)
Definition: ViewMap.h:1156
virtual Id getId() const
Definition: ViewMap.h:918
void setFEdgeA(FEdge *iFEdge)
Definition: ViewMap.h:1174
void setShape(ViewShape *iVShape)
Definition: ViewMap.h:1186
ViewVertex * A()
Definition: ViewMap.h:1077
const SShape * shape() const
Definition: ViewMap.h:1339
void AddOccluder(ViewShape *iShape)
Definition: ViewMap.h:1218
void setNature(Nature::EdgeNature iNature)
Definition: ViewMap.h:1168
ViewShape * aShape()
Definition: ViewMap.h:1109
void setQI(int qi)
Definition: ViewMap.h:1207
void setB(ViewVertex *iB)
Definition: ViewMap.h:1162
void AddViewShape(ViewShape *iVShape)
Definition: ViewMap.cpp:96
void AddSVertex(SVertex *iSVertex)
Definition: ViewMap.h:187
viewshapes_container & ViewShapes()
Definition: ViewMap.h:111
svertices_container & SVertices()
Definition: ViewMap.h:135
viewvertices_container & ViewVertices()
Definition: ViewMap.h:123
fedges_container & FEdges()
Definition: ViewMap.h:129
void AddFEdge(FEdge *iFEdge)
Definition: ViewMap.h:182
id_to_index_map & shapeIdToIndexMap()
Definition: ViewMap.h:158
void AddViewVertex(ViewVertex *iVVertex)
Definition: ViewMap.h:177
void AddViewEdge(ViewEdge *iVEdge)
Definition: ViewMap.h:172
viewedges_container & ViewEdges()
Definition: ViewMap.h:117
SShape * sshape()
Definition: ViewMap.h:1549
vector< ViewEdge * > & edges()
Definition: ViewMap.h:1567
void AddVertex(ViewVertex *iVertex)
Definition: ViewMap.h:1610
vector< ViewVertex * > & vertices()
Definition: ViewMap.h:1561
void setSShape(SShape *iSShape)
Definition: ViewMap.h:1592
void AddEdge(ViewEdge *iEdge)
Definition: ViewMap.h:1617
virtual Nature::VertexNature getNature() const
Definition: ViewMap.h:331
void setNature(Nature::VertexNature iNature)
Definition: ViewMap.h:338
static FT_Error err
Definition: freetypefont.c:52
unsigned short VertexNature
Definition: Nature.h:32
unsigned short EdgeNature
Definition: Nature.h:46
static const VertexNature VIEW_VERTEX
Definition: Nature.h:38
static const VertexNature T_VERTEX
Definition: Nature.h:42
static const VertexNature NON_T_VERTEX
Definition: Nature.h:40
int save(ostream &out, const Vec3r &v)
Definition: ViewMapIO.cpp:542
int load(istream &in, Vec3r &v)
Definition: ViewMapIO.cpp:61
static const unsigned char NO_OCCLUDERS
Definition: ViewMapIO.h:45
void rmFlags(const unsigned char flags)
Definition: ViewMapIO.cpp:1286
static const unsigned char FLOAT_VECTORS
Definition: ViewMapIO.h:44
void setModelsPath(const string &path)
Definition: ViewMapIO.cpp:1296
void setFlags(const unsigned char flags)
Definition: ViewMapIO.cpp:1276
void addFlags(const unsigned char flags)
Definition: ViewMapIO.cpp:1281
int save(ostream &out, ViewMap *vm, ProgressBar *pb)
Definition: ViewMapIO.cpp:1109
int load(istream &in, ViewMap *vm, ProgressBar *pb)
Definition: ViewMapIO.cpp:967