Introduction

Getting Started

Programming Guides

API Reference

Additional Resources

BPolyhedron.h
1 // Copyright (c) Tech Soft 3D
2 //
3 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc.,
4 // and considered a trade secret as defined under civil and criminal statutes.
5 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of
6 // unauthorized use or misappropriation of its trade secrets. Use of this information
7 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under
8 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use.
9 
10 // $Id$
11 #ifndef BBINFILETK_POLYHEDRON
12 #define BBINFILETK_POLYHEDRON
13 
14 
16 
22 class BBINFILETK_API TK_Polyhedron : public BBaseOpcodeHandler {
23  public:
24 
28  enum Exists {
29  Vertex_None = 0x0000,
30  Vertex_Normal = 0x0001,
31  Vertex_Parameter = 0x0002,
32  Vertex_Face_Color = 0x0004,
33  Vertex_Edge_Color = 0x0008,
34  Vertex_Marker_Color = 0x0010,
35  Vertex_Face_Index = 0x0020,
36  Vertex_Edge_Index = 0x0040,
37  Vertex_Marker_Index = 0x0080,
38  Vertex_Marker_Visibility= 0x0100,
39  Vertex_Marker_Size = 0x0200,
40  Vertex_Marker_Symbol = 0x0400,
41  Vertex_Marker_RGBA = 0x0800,
42  Vertex_Any_Color = 0x08FC
43  };
44 
48  enum Face_Exists {
49  Face_None = 0x0000,
50  Face_Color = 0x0001,
51  Face_Index = 0x0002,
52  Face_Any_Color = 0x0003,
53  Face_Normal = 0x0004,
54  Face_Visibility = 0x0008,
55  Face_Pattern = 0x0010
56  };
57 
61  enum Edge_Exists {
62  Edge_None = 0x0000,
63  Edge_Color = 0x0001,
64  Edge_Index = 0x0002,
65  Edge_Any_Color = 0x0003,
66  Edge_Normal = 0x0004,
67  Edge_Visibility = 0x0008,
68  Edge_Pattern = 0x0010,
69  Edge_Weight = 0x0020,
70  Fake_Edge = 0x8000 //for edges (if any) that do not exist on the write side, but will be introduced due to triangulation
71  };
72 
76  enum Suboptions {
77  TKSH_STANDARD = 0x00,
78  TKSH_COMPRESSED_POINTS = 0x01,
79  TKSH_COMPRESSED_FACES = 0x02,
80  TKSH_TRISTRIPS = 0x04,
81  TKSH_HAS_OPTIONALS = 0x08,
82  TKSH_FIRSTPASS = 0x10,
83  TKSH_BOUNDING_ONLY = 0x20,
84  TKSH_CONNECTIVITY_COMPRESSION = 0x40,
85  TKSH_EXPANDED = 0x80
86  };
87 
92  enum Suboptions2 {
93  TKSH2_COLLECTION = 0x0001,
94  TKSH2_NULL = 0x0002,
95  TKSH2_HAS_NEGATIVE_FACES = 0x0004,
96  TKSH2_GLOBAL_QUANTIZATION = 0x0008
97  };
98 
102  enum Opt_Opcode {
103  OPT_TERMINATE = 0,
104  OPT_ALL_NORMALS_COMPRESSED = 1,
105  OPT_NORMALS_COMPRESSED = 2,
106  OPT_ALL_PARAMETERS_COMPRESSED = 3,
107  OPT_PARAMETERS_COMPRESSED = 4,
108  OPT_ALL_VFCOLORS = 5,
109  OPT_VERTEX_FCOLORS = 6,
110  OPT_ALL_VECOLORS = 7,
111  OPT_VERTEX_ECOLORS = 8,
112  OPT_ALL_VMCOLORS = 9,
113  OPT_VERTEX_MCOLORS = 10,
114  OPT_ALL_VFINDICES = 11,
115  OPT_VERTEX_FINDICES = 12,
116  OPT_ALL_VEINDICES = 13,
117  OPT_VERTEX_EINDICES = 14,
118  OPT_ALL_VMINDICES = 15,
119  OPT_VERTEX_MINDICES = 16,
120  OPT_ALL_NORMALS = 17,
121  OPT_NORMALS = 18,
122  OPT_ALL_NORMALS_POLAR = 19,
123  OPT_NORMALS_POLAR = 20,
124  OPT_ALL_VMVISIBILITIES = 21,
125  OPT_VERTEX_MARKER_VISIBILITIES = 22,
126  OPT_ALL_VMSYMBOLS = 23,
127  OPT_VERTEX_MARKER_SYMBOLS = 24,
128  OPT_ALL_VMSIZES = 25,
129  OPT_VERTEX_MARKER_SIZES = 26,
130  OPT_PARAMETERS = 27,
131  OPT_ALL_PARAMETERS = 28,
132  OPT_ALL_VMRGBAS = 29,
133  OPT_VERTEX_MRGBAS = 30,
134 
135  OPT_ALL_FACE_COLORS = 33,
136  OPT_FACE_COLORS = 34,
137  OPT_ALL_FACE_INDICES = 35,
138  OPT_FACE_INDICES = 36,
139  OPT_ALL_FACE_NORMALS_POLAR = 37,
140  OPT_FACE_NORMALS_POLAR = 38,
141  OPT_ALL_FACE_VISIBILITIES = 39,
142  OPT_FACE_VISIBILITIES = 40,
143  OPT_ALL_FACE_PATTERNS = 41,
144  OPT_FACE_PATTERNS = 42,
145 
146  OPT_FACE_REGIONS = 51,
147 
148  OPT_ALL_EDGE_COLORS = 71,
149  OPT_EDGE_COLORS = 72,
150  OPT_ALL_EDGE_INDICES = 73,
151  OPT_EDGE_INDICES = 74,
152  OPT_ALL_EDGE_NORMALS_POLAR = 75,
153  OPT_EDGE_NORMALS_POLAR = 76,
154  OPT_ALL_EDGE_VISIBILITIES = 77,
155  OPT_EDGE_VISIBILITIES = 78,
156  OPT_ALL_EDGE_PATTERNS = 79,
157  OPT_EDGE_PATTERNS = 80,
158  OPT_ALL_EDGE_WEIGHTS = 81,
159  OPT_EDGE_WEIGHTS = 82,
160 
161  OPT_RESERVED_SPATIAL = 90,
162  OPT_ENTITY_ATTRIBUTES = 99,
163 
164 
165  /* Note: "UNCOMPRESSED" versions added instead of "COMPRESSED" to preserve original compressed meaning of like opts. */
166  OPT_ALL_VFCOLORS_UNCOMPRESSED = 101,
167  OPT_VERTEX_FCOLORS_UNCOMPRESSED = 102,
168  OPT_ALL_VECOLORS_UNCOMPRESSED = 103,
169  OPT_VERTEX_ECOLORS_UNCOMPRESSED = 104,
170  OPT_ALL_VMCOLORS_UNCOMPRESSED = 105,
171  OPT_VERTEX_MCOLORS_UNCOMPRESSED = 106,
172  OPT_ALL_VMRGBAS_UNCOMPRESSED = 107,
173  OPT_VERTEX_MRGBAS_UNCOMPRESSED = 108,
174  OPT_ALL_VFINDICES_UNCOMPRESSED = 109,
175  OPT_VERTEX_FINDICES_UNCOMPRESSED = 110,
176  OPT_ALL_VEINDICES_UNCOMPRESSED = 111,
177  OPT_VERTEX_EINDICES_UNCOMPRESSED = 112,
178  OPT_ALL_VMINDICES_UNCOMPRESSED = 113,
179  OPT_VERTEX_MINDICES_UNCOMPRESSED = 114,
180  OPT_ALL_FACE_COLORS_UNCOMPRESSED = 115,
181  OPT_FACE_COLORS_UNCOMPRESSED = 116,
182  OPT_ALL_FACE_INDICES_UNCOMPRESSED = 117,
183  OPT_FACE_INDICES_UNCOMPRESSED = 118,
184  };
185 
186 
187  //see TK_Shell for GetFacesLength, GetFaces, GetLodLevel, SetFaces, SetLodLevel
188 
190  float const *GetPoints() const { return mp_points; };
192  float *GetPoints() { return mp_points; };
193 
195  double const *GetDPoints() const { return mp_dpoints; };
197  double *GetDPoints() { return mp_dpoints; };
198 
199 
201  int GetPointCount() const { return mp_pointcount; };
203  unsigned int const *GetExists() const { return mp_exists; };
205  unsigned int *GetExists() { return mp_exists; };
207  unsigned int const *GetFaceExists() const { return mp_face_exists; };
209  unsigned int *GetFaceExists() { return mp_face_exists; };
211  ID_Key GetKey() const { return mp_key; };
213  unsigned char GetSubop() const { return mp_subop; };
215  unsigned short GetSubop2() const { return mp_subop2; };
217  const float *GetBounding() const { return mp_bbox; };
219  float const *GetVertexNormals() const { return mp_normals; };
221  float *GetVertexNormals() { return mp_normals; };
223  float const *GetVertexParameters() const { return mp_params; };
225  float *GetVertexParameters() { return mp_params; };
227  float const *GetVertexFaceColors() const { return mp_vfcolors; };
229  float *GetVertexFaceColors() { return mp_vfcolors; };
231  float const *GetVertexEdgeColors() const { return mp_vecolors; };
233  float *GetVertexEdgeColors() { return mp_vecolors; };
235  float const *GetVertexMarkerColors() const { return mp_vmcolors; };
237  float *GetVertexMarkerColors() { return mp_vmcolors; };
239  float const *GetVertexMarkerRGBAs() const { return mp_vmcolors; };
241  float *GetVertexMarkerRGBAs() { return mp_vmcolors; };
244  float const *GetVertexColors() const {
245  if (mp_vmcolors != 0) return mp_vmcolors;
246  else if (mp_vfcolors != 0) return mp_vfcolors;
247  else if (mp_vecolors != 0) return mp_vecolors;
248  else return 0;
249  };
252  float *GetVertexColors() {
253  if (mp_vmcolors != 0) return mp_vmcolors;
254  else if (mp_vfcolors != 0) return mp_vfcolors;
255  else if (mp_vecolors != 0) return mp_vecolors;
256  else return 0;
257  };
259  float const *GetVertexFaceIndices() const { return mp_vfindices; };
261  float *GetVertexFaceIndices() { return mp_vfindices; };
263  float const *GetVertexEdgeIndices() const { return mp_veindices; };
265  float *GetVertexEdgeIndices() { return mp_veindices; };
267  float const *GetVertexMarkerIndices() const { return mp_vmindices; };
269  float *GetVertexMarkerIndices() { return mp_vmindices; };
272  float const *GetVertexIndices() const {
273  if (mp_vmindices != 0) return mp_vmindices;
274  else if (mp_vfindices != 0) return mp_vfindices;
275  else if (mp_veindices != 0) return mp_veindices;
276  else return 0;
277  };
280  float *GetVertexIndices() {
281  if (mp_vmindices != 0) return mp_vmindices;
282  else if (mp_vfindices != 0) return mp_vfindices;
283  else if (mp_veindices != 0) return mp_veindices;
284  else return 0;
285  };
287  float const *GetFaceColors() const { return mp_fcolors; };
289  float *GetFaceColors() { return mp_fcolors; };
291  float const *GetFaceIndices() const { return mp_findices; };
293  float *GetFaceIndices() { return mp_findices; };
295  int const * GetFaceRegions() const { return mp_fregions; };
297  int * GetFaceRegions() { return mp_fregions; };
298 
300  int GetPriority () {return mp_priority;}
302  void SetPriority (int priority) { mp_priority = priority; }
303 
304 
305 
307  TK_Status SetKey (BStreamFileToolkit &tk, ID_Key key) { set_last_key (tk, key); mp_key = key; return TK_Normal; };
310  TK_Status SetSubop (unsigned char subop) { mp_subop = subop; return TK_Normal; };
313  TK_Status SetSubop2 (unsigned short subop2) { mp_subop2 = subop2; return TK_Normal; };
318  TK_Status InitSubop (BStreamFileToolkit &tk, int lodlevel, bool is_firstpass);
321  TK_Status SetBounding (float const bbox[]) { mp_bbox[0] = bbox[0]; mp_bbox[1] = bbox[1]; mp_bbox[2] = bbox[2]; mp_bbox[3] = bbox[3]; mp_bbox[4] = bbox[4]; mp_bbox[5] = bbox[5]; return TK_Normal; };
322 
327  TK_Status SetPoints (int count, float const points[]=0);
332  TK_Status SetDPoints (int count, double const points[]=0);
333 
338  TK_Status SetVertexNormals (float const normals[]=0);
347  TK_Status SetVertexParameters (float const parameters[]=0, int width=0);
355  TK_Status SetVertexFaceColors (float const colors[]=0);
363  TK_Status SetVertexEdgeColors (float const colors[]=0);
371  TK_Status SetVertexMarkerColors (float const colors[]=0);
379  TK_Status SetVertexMarkerRGBAs (float const colors[]=0);
389  TK_Status SetVertexColors (float const colors[]=0);
398  TK_Status SetVertexFaceIndices (float const indices[]=0);
407  TK_Status SetVertexEdgeIndices (float const indices[]=0);
416  TK_Status SetVertexMarkerIndices (float const indices[]=0);
426  TK_Status SetVertexIndices (float const indices[]=0);
432  TK_Status SetVertexMarkerVisibilities (char const *visibilities=0);
439  TK_Status SetVertexMarkerSizes (float const sizes[]=0);
446  TK_Status SetVertexMarkerSymbols (char const *symbols=0);
450  TK_Status SetVertexMarkerSymbolStrings ();
456  TK_Status SetFaceColors (float const colors[]=0);
462  TK_Status SetFaceNormals (float const normals[]=0);
468  TK_Status SetFaceVisibilities (char const *visibilities=0);
475  TK_Status SetFacePatterns (char const *patterns=0);
483  TK_Status SetFaceIndices (float const indices[]=0);
486  TK_Status SetFaceRegions (int const regions[]=0);
495  TK_Status SetEdgeColors (float const colors[]=0);
502  TK_Status SetEdgeIndices (float const indices[]=0);
508  TK_Status SetEdgeNormals (float const normals[]=0);
515  TK_Status SetEdgeVisibilities (char const *visibilities=0);
521  TK_Status SetEdgePatterns (char const *patterns=0);
525  TK_Status SetEdgePatternStrings ();
531  TK_Status SetEdgeWeights (float const weights[]=0);
532 
537  TK_Status SetExists (unsigned int const vals[]=0);
542  TK_Status SetFaceExists (unsigned int const vals[]=0);
549  TK_Status SetEdgeExists (unsigned int const vals[]=0);
550 
556  TK_Status AppendObject (BStreamFileToolkit & tk, BBaseOpcodeHandler *obj);
559  BBaseOpcodeHandler *PopObject();
560 
562  bool HasOptionals() { return
563  HasVertexAttributes() ||
564  HasFaceAttributes() ||
565  HasEdgeAttributes() ||
566  (!(mp_subop2 & 0x01) && mp_num_collection_parts > 0);// 0x01 matches TKSH2_COLLECTION
567  };
568 
569  bool HasOptionalsCommunicator() { return
570  HasVertexAttributes() ||
571  HasFaceAttributesCommunicator() ||
572  HasEdgeAttributes() ||
573  (!(mp_subop2 & 0x01) && mp_num_collection_parts > 0);// 0x01 matches TKSH2_COLLECTION
574  };
575 
577  bool HasVertexNormals() const { return mp_normals != 0; };
579  bool HasVertexParameters() const { return mp_params != 0; };
581  bool HasVertexFaceColors() const { return mp_vfcolors != 0; };
583  bool HasVertexEdgeColors() const { return mp_vecolors != 0; };
585  bool HasVertexMarkerColors() const { return mp_vmcolors != 0; };
587  bool HasVertexMarkerRGBAs() const { return mp_vmrgbas != 0; };
589  bool HasVertexColors() const { return
590  mp_vfcolors != 0 ||
591  mp_vecolors != 0 ||
592  mp_vmcolors != 0 ||
593  mp_vmrgbas != 0;
594  };
596  inline bool HasVertexFaceIndices() const { return mp_vfindices != 0; };
598  inline bool HasVertexEdgeIndices() const { return mp_veindices != 0; };
600  inline bool HasVertexMarkerIndices() const { return mp_vmindices != 0; };
602  inline bool HasVertexIndices() const { return
603  mp_vfindices != 0 ||
604  mp_veindices != 0 ||
605  mp_vmindices != 0;
606  };
608  inline bool HasVertexMarkerVisibilities() const { return mp_vmvisibilities != 0; };
610  inline bool HasVertexMarkerSymbols() const { return mp_vmsymbols != 0; };
612  inline bool HasVertexMarkerSizes() const { return mp_vmsizes != 0; };
616  inline bool HasVertexAttributes() const { return
617  HasVertexColors() ||
618  HasVertexIndices() ||
619  HasVertexNormals() ||
620  HasVertexParameters() ||
621  HasVertexMarkerVisibilities() ||
622  HasVertexMarkerSymbols() ||
623  HasVertexMarkerSizes();
624  };
626  inline bool HasFaceColors() const { return mp_fcolors != 0; };
628  inline bool HasFaceIndices() const { return mp_findices != 0; };
630  inline bool HasFaceNormals() const { return mp_fnormals != 0; };
632  inline bool HasFaceVisibilities() const { return mp_fvisibilities != 0; };
634  inline bool HasFacePatterns() const { return mp_fpatterns != 0; };
636  inline bool HasFaceRegions() const { return mp_fregions != 0; };
639  inline bool HasFaceAttributes() const { return
640  HasFaceColors() ||
641  HasFaceIndices() ||
642  HasFaceNormals() ||
643  HasFaceVisibilities() ||
644  HasFacePatterns() ||
645  HasFaceRegions();
646  };
647 
648  inline bool HasFaceAttributesCommunicator() const { return
649  HasFaceRegions();
650  };
651 
652 
654  inline bool HasEdgeColors() const { return mp_ecolors != 0; };
656  inline bool HasEdgeIndices() const { return mp_eindices != 0; };
658  inline bool HasEdgeNormals() const { return mp_enormals != 0; };
660  inline bool HasEdgeVisibilities() const { return mp_evisibilities != 0; };
662  inline bool HasEdgePatterns() const { return mp_epatterns != 0; };
664  inline bool HasEdgeWeights() const { return mp_eweights != 0; };
666  inline bool HasEdgeAttributes() const { return
667  HasEdgeColors() ||
668  HasEdgeIndices() ||
669  HasEdgeNormals() ||
670  HasEdgeVisibilities() ||
671  HasEdgePatterns() ||
672  HasEdgeWeights();
673  };
674 
675  protected:
676  //data members prefixed with "mp_", not "m_", to avoid potential naming conflicts with TK_Shell and/or TK_Mesh
677 
678 #ifndef DOXYGEN_SHOULD_SKIP_THIS
679  int mp_priority;
680  float * mp_points;
681  double * mp_dpoints;
682  float * mp_normals;
683  float * mp_params;
684  float * mp_vfcolors;
685  float * mp_vecolors;
686  float * mp_vmcolors;
687  float * mp_vmrgbas;
688  float * mp_vfindices;
689  float * mp_veindices;
690  float * mp_vmindices;
691  char * mp_vmvisibilities;
692  float * mp_vmsizes;
693  unsigned char * mp_vmsymbols;
694  char ** mp_vmsymbolstrings;
695  float * mp_fcolors;
696  float * mp_findices;
697  int * mp_fregions;
698  float * mp_fnormals;
699  char * mp_fvisibilities;
700  char * mp_fpatterns;
701  float * mp_ecolors;
702  float * mp_eindices;
703  float * mp_enormals;
704  char * mp_evisibilities;
705  unsigned char * mp_epatterns;
706  char ** mp_epatternstrings;
707  float * mp_eweights;
709  unsigned int * mp_exists;
710  unsigned int * mp_face_exists;
711  unsigned int * mp_edge_exists;
713  int mp_pointcount;
714  int mp_normalcount;
715  int mp_paramcount;
716  char mp_paramwidth;
717  int mp_vfcolorcount;
718  int mp_vecolorcount;
719  int mp_vmcolorcount;
720  int mp_vmrgbacount;
721  int mp_vfindexcount;
722  int mp_veindexcount;
723  int mp_vmindexcount;
724  int mp_vmvisibilitycount;
725  int mp_vmsizecount;
726  int mp_vmsymbolcount;
727  int mp_facecount;
728  int mp_fcolorcount;
729  int mp_findexcount;
730  int mp_fnormalcount;
731  int mp_fpatterncount;
732  int mp_fvisibilitycount;
733  int mp_edgecount;
734  int mp_ecolorcount;
735  int mp_eindexcount;
736  int mp_enormalcount;
737  int mp_epatterncount;
738  int mp_eweightcount;
739  int mp_evisibilitycount;
740  int * mp_edge_enumeration;
742  int mp_stage;
743  int mp_substage;
744  int mp_progress;
745  int mp_subprogress;
746  unsigned char mp_optopcode;
749  unsigned short mp_present;
750  unsigned short mp_face_present;
751  unsigned short mp_edge_present;
752  unsigned char mp_bits_per_sample;
753  float mp_bbox[256];
754  ID_Key mp_key;
755  TK_Instance * mp_instance;
756  float mp_matrix[16];
757  unsigned char * mp_workspace;
758  int mp_workspace_allocated;
759  int mp_workspace_used;
760  unsigned char mp_compression_scheme;
761  unsigned char mp_subop;
762  unsigned short mp_subop2;
763  int mp_num_collection_parts;
764  BBaseOpcodeHandler **mp_collection_parts;
771  virtual TK_Status EnumerateEdges() { return TK_Error; };
776  virtual TK_Status LabelFakeEdges() { return TK_Normal; };
781  virtual bool AllowInstancing(BStreamFileToolkit & tk) const;
782 
783  TK_Polyhedron(unsigned char op);
784  ~TK_Polyhedron();
785 
788  virtual void Reset ();
789 
790  virtual TK_Status read_trivial_points (BStreamFileToolkit & tk);
791  virtual TK_Status write_trivial_points (BStreamFileToolkit & tk);
793  TK_Status read_vertex_normals (BStreamFileToolkit & tk);
794  TK_Status read_vertex_normals_compressed (BStreamFileToolkit & tk);
795  TK_Status read_vertex_normals_all (BStreamFileToolkit & tk);
796  TK_Status read_vertex_normals_compressed_all (BStreamFileToolkit & tk);
797  TK_Status read_vertex_parameters (BStreamFileToolkit & tk);
798  TK_Status read_vertex_parameters_all (BStreamFileToolkit & tk);
799  TK_Status read_vertex_colors_all (BStreamFileToolkit & tk, unsigned char op);
800  TK_Status read_vertex_colors (BStreamFileToolkit & tk, unsigned char op);
801  TK_Status read_vertex_colors_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
802  TK_Status read_vertex_colors_uncompressed (BStreamFileToolkit & tk, unsigned char op);
803  TK_Status read_vertex_indices_all (BStreamFileToolkit & tk, unsigned char op);
804  TK_Status read_vertex_indices (BStreamFileToolkit & tk, unsigned char op);
805  TK_Status read_vertex_indices_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
806  TK_Status read_vertex_indices_uncompressed (BStreamFileToolkit & tk, unsigned char op);
807  TK_Status read_vertex_marker_visibilities (BStreamFileToolkit & tk);
808  TK_Status read_vertex_marker_symbols (BStreamFileToolkit & tk);
809  TK_Status read_vertex_marker_sizes (BStreamFileToolkit & tk);
810  TK_Status read_face_colors (BStreamFileToolkit & tk);
811  TK_Status read_face_colors_all (BStreamFileToolkit & tk);
812  TK_Status read_face_colors_uncompressed (BStreamFileToolkit & tk);
813  TK_Status read_face_colors_uncompressed_all (BStreamFileToolkit & tk);
814  TK_Status read_face_indices (BStreamFileToolkit & tk);
815  TK_Status read_face_indices_all (BStreamFileToolkit & tk);
816  TK_Status read_face_indices_uncompressed (BStreamFileToolkit & tk);
817  TK_Status read_face_indices_uncompressed_all (BStreamFileToolkit & tk);
818  TK_Status read_face_regions (BStreamFileToolkit & tk);
819  TK_Status read_face_normals (BStreamFileToolkit & tk);
820  TK_Status read_face_visibilities (BStreamFileToolkit & tk);
821  TK_Status read_face_patterns (BStreamFileToolkit & tk);
822  TK_Status read_edge_colors (BStreamFileToolkit & tk);
823  TK_Status read_edge_indices (BStreamFileToolkit & tk);
824  TK_Status read_edge_normals (BStreamFileToolkit & tk);
825  TK_Status read_edge_visibilities (BStreamFileToolkit & tk);
826  TK_Status read_edge_patterns (BStreamFileToolkit & tk);
827  TK_Status read_edge_weights (BStreamFileToolkit & tk);
828  virtual TK_Status read_collection (BStreamFileToolkit & tk);
830  TK_Status write_vertex_normals (BStreamFileToolkit & tk);
831  TK_Status write_vertex_normals_compressed (BStreamFileToolkit & tk);
832  TK_Status write_vertex_normals_all (BStreamFileToolkit & tk);
833  TK_Status write_vertex_normals_compressed_all (BStreamFileToolkit & tk);
834  TK_Status write_vertex_parameters (BStreamFileToolkit & tk);
835  TK_Status write_vertex_parameters_all (BStreamFileToolkit & tk);
836  TK_Status write_vertex_colors (BStreamFileToolkit & tk, unsigned char op);
837  TK_Status write_vertex_colors_all (BStreamFileToolkit & tk, unsigned char op);
838  TK_Status write_vertex_colors_uncompressed (BStreamFileToolkit & tk, unsigned char op);
839  TK_Status write_vertex_colors_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
840  TK_Status write_vertex_indices (BStreamFileToolkit & tk, unsigned char op);
841  TK_Status write_vertex_indices_all (BStreamFileToolkit & tk, unsigned char op);
842  TK_Status write_vertex_indices_uncompressed (BStreamFileToolkit & tk, unsigned char op);
843  TK_Status write_vertex_indices_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
844  TK_Status write_vertex_marker_visibilities (BStreamFileToolkit & tk);
845  TK_Status write_vertex_marker_symbols (BStreamFileToolkit & tk);
846  TK_Status write_vertex_marker_sizes (BStreamFileToolkit & tk);
847  TK_Status write_face_colors (BStreamFileToolkit & tk);
848  TK_Status write_face_colors_all (BStreamFileToolkit & tk);
849  TK_Status write_face_colors_uncompressed (BStreamFileToolkit & tk);
850  TK_Status write_face_colors_uncompressed_all (BStreamFileToolkit & tk);
851  TK_Status write_face_indices (BStreamFileToolkit & tk);
852  TK_Status write_face_indices_all (BStreamFileToolkit & tk);
853  TK_Status write_face_indices_uncompressed (BStreamFileToolkit & tk);
854  TK_Status write_face_indices_uncompressed_all (BStreamFileToolkit & tk);
855  TK_Status write_face_regions (BStreamFileToolkit & tk);
856  TK_Status write_face_normals (BStreamFileToolkit & tk);
857  TK_Status write_face_visibilities (BStreamFileToolkit & tk);
858  TK_Status write_face_patterns (BStreamFileToolkit & tk);
859  TK_Status write_edge_colors (BStreamFileToolkit & tk);
860  TK_Status write_edge_indices (BStreamFileToolkit & tk);
861  TK_Status write_edge_normals (BStreamFileToolkit & tk);
862  TK_Status write_edge_visibilities (BStreamFileToolkit & tk);
863  TK_Status write_edge_patterns (BStreamFileToolkit & tk);
864  TK_Status write_edge_weights (BStreamFileToolkit & tk);
865  virtual TK_Status write_collection (BStreamFileToolkit & tk, bool write_tag = false, int variant = 0);
868  void normals_cartesian_to_polar (unsigned int * exists, int flag, int count, const float in[], float out[]);
870  void normals_polar_to_cartesian (unsigned int * exists, int flag, int count, const float in[], float out[]);
871 
875  TK_Status write_vertex_normals_main (BStreamFileToolkit & tk);
880  TK_Status write_vertex_parameters_main (BStreamFileToolkit & tk);
886  TK_Status write_vertex_colors_main (BStreamFileToolkit & tk, unsigned char base_op);
892  TK_Status write_vertex_indices_main (BStreamFileToolkit & tk, unsigned char base_op);
897  TK_Status write_face_colors_main (BStreamFileToolkit & tk);
902  TK_Status write_face_indices_main (BStreamFileToolkit & tk);
903 
904 
905  TK_Status ReadAscii (BStreamFileToolkit & tk);
906  TK_Status WriteAscii (BStreamFileToolkit & tk);
907 
908  virtual TK_Status read_trivial_points_ascii (BStreamFileToolkit & tk);
909  virtual TK_Status write_trivial_points_ascii (BStreamFileToolkit & tk);
911  TK_Status read_vertex_normals_ascii (BStreamFileToolkit & tk);
913  TK_Status read_vertex_normals_compressed_ascii (BStreamFileToolkit & tk);
914  TK_Status read_vertex_normals_all_ascii (BStreamFileToolkit & tk);
915  TK_Status read_vertex_normals_compressed_all_ascii (BStreamFileToolkit & tk);
916  TK_Status read_vertex_parameters_ascii (BStreamFileToolkit & tk);
917  TK_Status read_vertex_parameters_all_ascii (BStreamFileToolkit & tk);
918  TK_Status read_vertex_colors_all_ascii (BStreamFileToolkit & tk, unsigned char op);
919  TK_Status read_vertex_colors_ascii (BStreamFileToolkit & tk, unsigned char op);
920  TK_Status read_vertex_indices_all_ascii (BStreamFileToolkit & tk, unsigned char op);
921  TK_Status read_vertex_indices_ascii (BStreamFileToolkit & tk, unsigned char op);
922  TK_Status read_vertex_marker_visibilities_ascii (BStreamFileToolkit & tk);
923  TK_Status read_vertex_marker_symbols_ascii (BStreamFileToolkit & tk);
924  TK_Status read_vertex_marker_sizes_ascii (BStreamFileToolkit & tk);
925  TK_Status read_face_colors_ascii (BStreamFileToolkit & tk);
926  TK_Status read_face_colors_all_ascii (BStreamFileToolkit & tk);
927  TK_Status read_face_indices_ascii (BStreamFileToolkit & tk);
928  TK_Status read_face_indices_all_ascii (BStreamFileToolkit & tk);
929  TK_Status read_face_regions_ascii (BStreamFileToolkit & tk);
930  TK_Status read_face_normals_ascii (BStreamFileToolkit & tk);
931  TK_Status read_face_visibilities_ascii (BStreamFileToolkit & tk);
932  TK_Status read_face_patterns_ascii (BStreamFileToolkit & tk);
933  TK_Status read_edge_colors_ascii (BStreamFileToolkit & tk);
934  TK_Status read_edge_indices_ascii (BStreamFileToolkit & tk);
935  TK_Status read_edge_normals_ascii (BStreamFileToolkit & tk);
936  TK_Status read_edge_visibilities_ascii (BStreamFileToolkit & tk);
937  TK_Status read_edge_patterns_ascii (BStreamFileToolkit & tk);
938  TK_Status read_edge_weights_ascii (BStreamFileToolkit & tk);
940  virtual TK_Status read_collection_ascii (BStreamFileToolkit & tk);
942  TK_Status write_vertex_normals_ascii (BStreamFileToolkit & tk);
943  TK_Status write_vertex_normals_compressed_ascii (BStreamFileToolkit & tk);
944  TK_Status write_vertex_normals_all_ascii (BStreamFileToolkit & tk);
945  TK_Status write_vertex_normals_compressed_all_ascii (BStreamFileToolkit & tk);
946  TK_Status write_vertex_parameters_ascii (BStreamFileToolkit & tk);
947  TK_Status write_vertex_parameters_all_ascii (BStreamFileToolkit & tk);
948  TK_Status write_vertex_colors_ascii (BStreamFileToolkit & tk, unsigned char op);
949  TK_Status write_vertex_colors_all_ascii (BStreamFileToolkit & tk, unsigned char op);
950  TK_Status write_vertex_indices_ascii (BStreamFileToolkit & tk, unsigned char op);
951  TK_Status write_vertex_indices_all_ascii (BStreamFileToolkit & tk, unsigned char op);
952  TK_Status write_vertex_marker_visibilities_ascii (BStreamFileToolkit & tk);
953  TK_Status write_vertex_marker_symbols_ascii (BStreamFileToolkit & tk);
954  virtual TK_Status write_vertex_marker_sizes_ascii (BStreamFileToolkit & tk);
955  TK_Status write_face_colors_ascii (BStreamFileToolkit & tk);
956  TK_Status write_face_colors_all_ascii (BStreamFileToolkit & tk);
957  TK_Status write_face_indices_ascii (BStreamFileToolkit & tk);
958  TK_Status write_face_indices_all_ascii (BStreamFileToolkit & tk);
959  TK_Status write_face_regions_ascii (BStreamFileToolkit & tk);
960  TK_Status write_face_normals_ascii (BStreamFileToolkit & tk);
961  TK_Status write_face_visibilities_ascii (BStreamFileToolkit & tk);
962  TK_Status write_face_patterns_ascii (BStreamFileToolkit & tk);
963  TK_Status write_edge_colors_ascii (BStreamFileToolkit & tk);
964  TK_Status write_edge_indices_ascii (BStreamFileToolkit & tk);
965  TK_Status write_edge_normals_ascii (BStreamFileToolkit & tk);
966  TK_Status write_edge_visibilities_ascii (BStreamFileToolkit & tk);
967  TK_Status write_edge_patterns_ascii (BStreamFileToolkit & tk);
968  TK_Status write_edge_weights_ascii (BStreamFileToolkit & tk);
970  virtual TK_Status write_collection_ascii (BStreamFileToolkit & tk, bool write_tag = false, int variant = 0);
976  TK_Status write_vertex_normals_main_ascii (BStreamFileToolkit & tk);
981  TK_Status write_vertex_parameters_main_ascii (BStreamFileToolkit & tk);
987  TK_Status write_vertex_colors_main_ascii (BStreamFileToolkit & tk, unsigned char base_op);
993  TK_Status write_vertex_indices_main_ascii (BStreamFileToolkit & tk, unsigned char base_op);
998  TK_Status write_face_colors_main_ascii (BStreamFileToolkit & tk);
1003  TK_Status write_face_indices_main_ascii (BStreamFileToolkit & tk);
1004 
1005 
1006  virtual TK_Status mangle_points (BStreamFileToolkit & tk, int pointmap_count, int pointmap[]);
1007  virtual TK_Status mangle_point_attributes (BStreamFileToolkit & tk, int pointmap_count, int pointmap[]);
1008  virtual TK_Status mangle_face_attributes (BStreamFileToolkit & tk, int facemap_count, int facemap[]);
1009  bool has_face_attributes() const;
1019  TK_Status repulse_compress_normals (BStreamFileToolkit & tk, int bits);
1025  TK_Status repulse_decompress_normals (BStreamFileToolkit & tk, int bits);
1026 
1028  void set_points (int count, float const points[] = 0) { SetPoints (count, points); };
1030  void set_normals (float const normals[] = 0) { SetVertexNormals (normals); };
1032  void set_parameters (float const params[] = 0) { SetVertexParameters (params); };
1034  void set_vfcolors (float const colors[] = 0) { SetVertexFaceColors (colors); };
1036  void set_vecolors (float const colors[] = 0) { SetVertexEdgeColors (colors); };
1038  void set_vmcolors (float const colors[] = 0) { SetVertexMarkerColors (colors); };
1040  void set_vfindices (float const indices[] = 0) { SetVertexFaceIndices (indices); };
1042  void set_veindices (float const indices[] = 0) { SetVertexEdgeIndices (indices); };
1044  void set_vmindices (float const indices[] = 0) { SetVertexMarkerIndices (indices); };
1046  void set_fcolors (float const colors[] = 0) { SetFaceColors (colors); };
1048  void set_findices (float const indices[] = 0) { SetFaceIndices (indices); };
1050  void set_exists (unsigned int const exists[] = 0);
1052  void set_face_exists (unsigned int const exists[] = 0);
1054  void set_facemap (int count, int const facemap[] = 0);
1055 
1056 
1057 
1058 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
1059 
1060 }; // end declaration of class TK_Polyhedron
1061 
1062 
1064 
1070 class BBINFILETK_API TK_Mesh : public TK_Polyhedron {
1071  protected:
1072  int m_rows;
1076  TK_Status EnumerateEdges();
1077 
1078  public:
1079  TK_Mesh()
1080  : TK_Polyhedron (TKE_Mesh), m_rows(0), m_columns(0) {}
1081  ~TK_Mesh();
1082 
1083 
1084  TK_Status ReadAscii (BStreamFileToolkit & tk);
1085  TK_Status WriteAscii (BStreamFileToolkit & tk);
1086 
1089  void Reset ();
1090 
1092  void SetRows (const int rows) { m_rows = rows; }
1093 
1095  void SetColumns (const int columns) { m_columns = columns; }
1096 
1097 }; // end declaration of class TK_Mesh
1098 
1099 #endif //BBINFILETK_POLYHEDRON
1100 
void SetRows(const int rows)
Definition: BPolyhedron.h:1092
float * GetVertexFaceColors()
Definition: BPolyhedron.h:229
float * GetVertexMarkerRGBAs()
Definition: BPolyhedron.h:241
Opt_Opcode
Definition: BPolyhedron.h:102
bool HasVertexMarkerVisibilities() const
Definition: BPolyhedron.h:608
float * GetFaceColors()
Definition: BPolyhedron.h:289
bool HasEdgePatterns() const
Definition: BPolyhedron.h:662
bool HasEdgeNormals() const
Definition: BPolyhedron.h:658
float const * GetVertexEdgeColors() const
Definition: BPolyhedron.h:231
bool HasVertexAttributes() const
Definition: BPolyhedron.h:616
TK_Status SetKey(BStreamFileToolkit &tk, ID_Key key)
informs the TK_Polyhedron of the id by which this piece of geometry is known
Definition: BPolyhedron.h:307
bool HasVertexIndices() const
Definition: BPolyhedron.h:602
virtual void Reset()
The BStreamFileToolkit class provides support for importing/exporting HOOPS Stream File information...
Definition: BStreamFileToolkit.h:367
float * GetVertexEdgeColors()
Definition: BPolyhedron.h:233
void SetColumns(const int columns)
Definition: BPolyhedron.h:1095
Face_Exists
Definition: BPolyhedron.h:48
bool HasOptionals()
Definition: BPolyhedron.h:562
float * GetVertexColors()
Definition: BPolyhedron.h:252
bool HasEdgeColors() const
Definition: BPolyhedron.h:654
int * GetFaceRegions()
Definition: BPolyhedron.h:297
bool HasVertexParameters() const
Definition: BPolyhedron.h:579
double * GetDPoints()
Definition: BPolyhedron.h:197
float const * GetVertexIndices() const
Definition: BPolyhedron.h:272
bool HasVertexMarkerRGBAs() const
Definition: BPolyhedron.h:587
bool HasFaceAttributes() const
Definition: BPolyhedron.h:639
TK_Status SetSubop(unsigned char subop)
Definition: BPolyhedron.h:310
virtual TK_Status Read(BStreamFileToolkit &tk)=0
bool HasFacePatterns() const
Definition: BPolyhedron.h:634
int const * GetFaceRegions() const
Definition: BPolyhedron.h:295
float * GetPoints()
Definition: BPolyhedron.h:192
Definition: BStream.h:256
Suboptions2
Definition: BPolyhedron.h:92
float * GetVertexParameters()
Definition: BPolyhedron.h:225
unsigned int const * GetExists() const
Definition: BPolyhedron.h:203
float const * GetVertexMarkerColors() const
Definition: BPolyhedron.h:235
bool HasVertexFaceColors() const
Definition: BPolyhedron.h:581
int GetPointCount() const
Definition: BPolyhedron.h:201
bool HasEdgeAttributes() const
Definition: BPolyhedron.h:666
float * GetVertexFaceIndices()
Definition: BPolyhedron.h:261
unsigned int * GetFaceExists()
Definition: BPolyhedron.h:209
Handles the TKE_Repeat_Object opcode.
Definition: BOpcodeHandler.h:1765
Handles the TKE_Mesh opcode.
Definition: BPolyhedron.h:1070
float const * GetVertexNormals() const
Definition: BPolyhedron.h:219
bool HasEdgeWeights() const
Definition: BPolyhedron.h:664
ID_Key GetKey() const
Definition: BPolyhedron.h:211
Suboptions
Definition: BPolyhedron.h:76
float const * GetVertexMarkerRGBAs() const
Definition: BPolyhedron.h:239
bool HasFaceRegions() const
Definition: BPolyhedron.h:636
bool HasVertexEdgeColors() const
Definition: BPolyhedron.h:583
unsigned short GetSubop2() const
Definition: BPolyhedron.h:215
bool HasVertexMarkerColors() const
Definition: BPolyhedron.h:585
bool HasVertexMarkerSizes() const
Definition: BPolyhedron.h:612
float const * GetVertexMarkerIndices() const
Definition: BPolyhedron.h:267
Definition: BStream.h:255
float const * GetFaceColors() const
Definition: BPolyhedron.h:287
float * GetFaceIndices()
Definition: BPolyhedron.h:293
float * GetVertexMarkerColors()
Definition: BPolyhedron.h:237
bool HasEdgeVisibilities() const
Definition: BPolyhedron.h:660
unsigned char GetSubop() const
Definition: BPolyhedron.h:213
float * GetVertexEdgeIndices()
Definition: BPolyhedron.h:265
bool HasVertexEdgeIndices() const
Definition: BPolyhedron.h:598
int GetPriority()
Definition: BPolyhedron.h:300
TK_Status SetSubop2(unsigned short subop2)
Definition: BPolyhedron.h:313
float const * GetVertexParameters() const
Definition: BPolyhedron.h:223
float const * GetVertexColors() const
Definition: BPolyhedron.h:244
bool HasVertexMarkerIndices() const
Definition: BPolyhedron.h:600
bool HasFaceNormals() const
Definition: BPolyhedron.h:630
float const * GetVertexFaceColors() const
Definition: BPolyhedron.h:227
float * GetVertexMarkerIndices()
Definition: BPolyhedron.h:269
Exists
Definition: BPolyhedron.h:28
void set_last_key(BStreamFileToolkit &tk, ID_Key key)
sets the given key as "most recent" on the toolkit for the purposes of associating keys with indices ...
Definition: BOpcodeHandler.h:636
void SetPriority(int priority)
Definition: BPolyhedron.h:302
unsigned int const * GetFaceExists() const
Definition: BPolyhedron.h:207
TK_Status SetBounding(float const bbox[])
Definition: BPolyhedron.h:321
int m_columns
Definition: BPolyhedron.h:1073
The BBaseOpcodeHandler abstract class is used as a base for derived classes which manage logical piec...
Definition: BOpcodeHandler.h:53
TK_Status
Codes which can be either passed to various toolkit functions, or indicate the result of a toolkit fu...
Definition: BStream.h:254
float * GetVertexIndices()
Definition: BPolyhedron.h:280
float const * GetVertexEdgeIndices() const
Definition: BPolyhedron.h:263
Edge_Exists
Definition: BPolyhedron.h:61
float const * GetPoints() const
Definition: BPolyhedron.h:190
const float * GetBounding() const
Definition: BPolyhedron.h:217
#define ID_Key
Definition: BStream.h:230
Base class for shell and mesh.
Definition: BPolyhedron.h:22
bool HasFaceVisibilities() const
Definition: BPolyhedron.h:632
int m_rows
Definition: BPolyhedron.h:1072
bool HasEdgeIndices() const
Definition: BPolyhedron.h:656
double const * GetDPoints() const
Definition: BPolyhedron.h:195
bool HasVertexColors() const
Definition: BPolyhedron.h:589
float const * GetVertexFaceIndices() const
Definition: BPolyhedron.h:259
bool HasFaceColors() const
Definition: BPolyhedron.h:626
float * GetVertexNormals()
Definition: BPolyhedron.h:221
bool HasVertexMarkerSymbols() const
Definition: BPolyhedron.h:610
bool HasVertexFaceIndices() const
Definition: BPolyhedron.h:596
virtual TK_Status Write(BStreamFileToolkit &tk)=0
float const * GetFaceIndices() const
Definition: BPolyhedron.h:291
bool HasVertexNormals() const
Definition: BPolyhedron.h:577
unsigned int * GetExists()
Definition: BPolyhedron.h:205
bool HasFaceIndices() const
Definition: BPolyhedron.h:628