Alphabetical Class Index   Class Hierarchy   Compound Members   File Members   File List  

BPolyhedron.h
1 // Copyright (c) 1998-2014 by Tech Soft 3D, Inc.
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 #ifndef BBINFILETK_POLYHEDRON
11 #define BBINFILETK_POLYHEDRON
12 
13 
15 
21 class BBINFILETK_API TK_Polyhedron : public BBaseOpcodeHandler {
22  public:
23 
27  enum Exists {
28  Vertex_None = 0x0000,
29  Vertex_Normal = 0x0001,
30  Vertex_Parameter = 0x0002,
31  Vertex_Face_Color = 0x0004,
32  Vertex_Edge_Color = 0x0008,
33  Vertex_Marker_Color = 0x0010,
34  Vertex_Face_Index = 0x0020,
35  Vertex_Edge_Index = 0x0040,
36  Vertex_Marker_Index = 0x0080,
37  Vertex_Marker_Visibility= 0x0100,
38  Vertex_Marker_Size = 0x0200,
39  Vertex_Marker_Symbol = 0x0400,
40  Vertex_Marker_RGBA = 0x0800,
41  Vertex_Any_Color = 0x08FC
42  };
43 
47  enum Face_Exists {
48  Face_None = 0x0000,
49  Face_Color = 0x0001,
50  Face_Index = 0x0002,
51  Face_Any_Color = 0x0003,
52  Face_Normal = 0x0004,
53  Face_Visibility = 0x0008,
54  Face_Pattern = 0x0010
55  };
56 
60  enum Edge_Exists {
61  Edge_None = 0x0000,
62  Edge_Color = 0x0001,
63  Edge_Index = 0x0002,
64  Edge_Any_Color = 0x0003,
65  Edge_Normal = 0x0004,
66  Edge_Visibility = 0x0008,
67  Edge_Pattern = 0x0010,
68  Edge_Weight = 0x0020,
69  Fake_Edge = 0x8000 //for edges (if any) that do not exist on the write side, but will be introduced due to triangulation
70  };
71 
75  enum Suboptions {
76  TKSH_STANDARD = 0x00,
77  TKSH_COMPRESSED_POINTS = 0x01,
78  TKSH_COMPRESSED_FACES = 0x02,
79  TKSH_TRISTRIPS = 0x04,
80  TKSH_HAS_OPTIONALS = 0x08,
81  TKSH_FIRSTPASS = 0x10,
82  TKSH_BOUNDING_ONLY = 0x20,
83  TKSH_CONNECTIVITY_COMPRESSION = 0x40,
84  TKSH_EXPANDED = 0x80
85  };
86 
91  enum Suboptions2 {
92  TKSH2_COLLECTION = 0x0001,
93  TKSH2_NULL = 0x0002,
94  TKSH2_HAS_NEGATIVE_FACES = 0x0004,
95  TKSH2_GLOBAL_QUANTIZATION = 0x0008
96  };
97 
101  enum Opt_Opcode {
102  OPT_TERMINATE = 0,
103  OPT_ALL_NORMALS_COMPRESSED = 1,
104  OPT_NORMALS_COMPRESSED = 2,
105  OPT_ALL_PARAMETERS_COMPRESSED = 3,
106  OPT_PARAMETERS_COMPRESSED = 4,
107  OPT_ALL_VFCOLORS = 5,
108  OPT_VERTEX_FCOLORS = 6,
109  OPT_ALL_VECOLORS = 7,
110  OPT_VERTEX_ECOLORS = 8,
111  OPT_ALL_VMCOLORS = 9,
112  OPT_VERTEX_MCOLORS = 10,
113  OPT_ALL_VFINDICES = 11,
114  OPT_VERTEX_FINDICES = 12,
115  OPT_ALL_VEINDICES = 13,
116  OPT_VERTEX_EINDICES = 14,
117  OPT_ALL_VMINDICES = 15,
118  OPT_VERTEX_MINDICES = 16,
119  OPT_ALL_NORMALS = 17,
120  OPT_NORMALS = 18,
121  OPT_ALL_NORMALS_POLAR = 19,
122  OPT_NORMALS_POLAR = 20,
123  OPT_ALL_VMVISIBILITIES = 21,
124  OPT_VERTEX_MARKER_VISIBILITIES = 22,
125  OPT_ALL_VMSYMBOLS = 23,
126  OPT_VERTEX_MARKER_SYMBOLS = 24,
127  OPT_ALL_VMSIZES = 25,
128  OPT_VERTEX_MARKER_SIZES = 26,
129  OPT_PARAMETERS = 27,
130  OPT_ALL_PARAMETERS = 28,
131  OPT_ALL_VMRGBAS = 29,
132  OPT_VERTEX_MRGBAS = 30,
133 
134  OPT_ALL_FACE_COLORS = 33,
135  OPT_FACE_COLORS = 34,
136  OPT_ALL_FACE_INDICES = 35,
137  OPT_FACE_INDICES = 36,
138  OPT_ALL_FACE_NORMALS_POLAR = 37,
139  OPT_FACE_NORMALS_POLAR = 38,
140  OPT_ALL_FACE_VISIBILITIES = 39,
141  OPT_FACE_VISIBILITIES = 40,
142  OPT_ALL_FACE_PATTERNS = 41,
143  OPT_FACE_PATTERNS = 42,
144 
145  OPT_FACE_REGIONS = 51,
146 
147  OPT_ALL_EDGE_COLORS = 71,
148  OPT_EDGE_COLORS = 72,
149  OPT_ALL_EDGE_INDICES = 73,
150  OPT_EDGE_INDICES = 74,
151  OPT_ALL_EDGE_NORMALS_POLAR = 75,
152  OPT_EDGE_NORMALS_POLAR = 76,
153  OPT_ALL_EDGE_VISIBILITIES = 77,
154  OPT_EDGE_VISIBILITIES = 78,
155  OPT_ALL_EDGE_PATTERNS = 79,
156  OPT_EDGE_PATTERNS = 80,
157  OPT_ALL_EDGE_WEIGHTS = 81,
158  OPT_EDGE_WEIGHTS = 82,
159 
160  OPT_RESERVED_SPATIAL = 90,
161  OPT_ENTITY_ATTRIBUTES = 99,
162 
163 
164  /* Note: "UNCOMPRESSED" versions added instead of "COMPRESSED" to preserve original compressed meaning of like opts. */
165  OPT_ALL_VFCOLORS_UNCOMPRESSED = 101,
166  OPT_VERTEX_FCOLORS_UNCOMPRESSED = 102,
167  OPT_ALL_VECOLORS_UNCOMPRESSED = 103,
168  OPT_VERTEX_ECOLORS_UNCOMPRESSED = 104,
169  OPT_ALL_VMCOLORS_UNCOMPRESSED = 105,
170  OPT_VERTEX_MCOLORS_UNCOMPRESSED = 106,
171  OPT_ALL_VMRGBAS_UNCOMPRESSED = 107,
172  OPT_VERTEX_MRGBAS_UNCOMPRESSED = 108,
173  OPT_ALL_VFINDICES_UNCOMPRESSED = 109,
174  OPT_VERTEX_FINDICES_UNCOMPRESSED = 110,
175  OPT_ALL_VEINDICES_UNCOMPRESSED = 111,
176  OPT_VERTEX_EINDICES_UNCOMPRESSED = 112,
177  OPT_ALL_VMINDICES_UNCOMPRESSED = 113,
178  OPT_VERTEX_MINDICES_UNCOMPRESSED = 114,
179  OPT_ALL_FACE_COLORS_UNCOMPRESSED = 115,
180  OPT_FACE_COLORS_UNCOMPRESSED = 116,
181  OPT_ALL_FACE_INDICES_UNCOMPRESSED = 117,
182  OPT_FACE_INDICES_UNCOMPRESSED = 118,
183  };
184 
185 
186  //see TK_Shell for GetFacesLength, GetFaces, GetLodLevel, SetFaces, SetLodLevel
187 
189  float const *GetPoints() const { return mp_points; };
191  float *GetPoints() { return mp_points; };
192 
194  double const *GetDPoints() const { return mp_dpoints; };
196  double *GetDPoints() { return mp_dpoints; };
197 
198 
200  int GetPointCount() const { return mp_pointcount; };
202  unsigned int const *GetExists() const { return mp_exists; };
204  unsigned int *GetExists() { return mp_exists; };
206  unsigned int const *GetFaceExists() const { return mp_face_exists; };
208  unsigned int *GetFaceExists() { return mp_face_exists; };
210  ID_Key GetKey() const { return mp_key; };
212  unsigned char GetSubop() const { return mp_subop; };
214  unsigned short GetSubop2() const { return mp_subop2; };
216  const float *GetBounding() const { return mp_bbox; };
218  float const *GetVertexNormals() const { return mp_normals; };
220  float *GetVertexNormals() { return mp_normals; };
222  float const *GetVertexParameters() const { return mp_params; };
224  float *GetVertexParameters() { return mp_params; };
226  float const *GetVertexFaceColors() const { return mp_vfcolors; };
228  float *GetVertexFaceColors() { return mp_vfcolors; };
230  float const *GetVertexEdgeColors() const { return mp_vecolors; };
232  float *GetVertexEdgeColors() { return mp_vecolors; };
234  float const *GetVertexMarkerColors() const { return mp_vmcolors; };
236  float *GetVertexMarkerColors() { return mp_vmcolors; };
238  float const *GetVertexMarkerRGBAs() const { return mp_vmcolors; };
240  float *GetVertexMarkerRGBAs() { return mp_vmcolors; };
243  float const *GetVertexColors() const {
244  if (mp_vmcolors != 0) return mp_vmcolors;
245  else if (mp_vfcolors != 0) return mp_vfcolors;
246  else if (mp_vecolors != 0) return mp_vecolors;
247  else return 0;
248  };
251  float *GetVertexColors() {
252  if (mp_vmcolors != 0) return mp_vmcolors;
253  else if (mp_vfcolors != 0) return mp_vfcolors;
254  else if (mp_vecolors != 0) return mp_vecolors;
255  else return 0;
256  };
258  float const *GetVertexFaceIndices() const { return mp_vfindices; };
260  float *GetVertexFaceIndices() { return mp_vfindices; };
262  float const *GetVertexEdgeIndices() const { return mp_veindices; };
264  float *GetVertexEdgeIndices() { return mp_veindices; };
266  float const *GetVertexMarkerIndices() const { return mp_vmindices; };
268  float *GetVertexMarkerIndices() { return mp_vmindices; };
271  float const *GetVertexIndices() const {
272  if (mp_vmindices != 0) return mp_vmindices;
273  else if (mp_vfindices != 0) return mp_vfindices;
274  else if (mp_veindices != 0) return mp_veindices;
275  else return 0;
276  };
279  float *GetVertexIndices() {
280  if (mp_vmindices != 0) return mp_vmindices;
281  else if (mp_vfindices != 0) return mp_vfindices;
282  else if (mp_veindices != 0) return mp_veindices;
283  else return 0;
284  };
286  float const *GetFaceColors() const { return mp_fcolors; };
288  float *GetFaceColors() { return mp_fcolors; };
290  float const *GetFaceIndices() const { return mp_findices; };
292  float *GetFaceIndices() { return mp_findices; };
294  int const * GetFaceRegions() const { return mp_fregions; };
296  int * GetFaceRegions() { return mp_fregions; };
297 
299  int GetPriority () {return mp_priority;}
301  void SetPriority (int priority) { mp_priority = priority; }
302 
303 
304 
306  TK_Status SetKey (BStreamFileToolkit &tk, ID_Key key) { set_last_key (tk, key); mp_key = key; return TK_Normal; };
309  TK_Status SetSubop (unsigned char subop) { mp_subop = subop; return TK_Normal; };
312  TK_Status SetSubop2 (unsigned short subop2) { mp_subop2 = subop2; return TK_Normal; };
317  TK_Status InitSubop (BStreamFileToolkit &tk, int lodlevel, bool is_firstpass);
320  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; };
321 
326  TK_Status SetPoints (int count, float const *points=0);
331  TK_Status SetDPoints (int count, double const *points=0);
332 
337  TK_Status SetVertexNormals (float const *normals=0);
346  TK_Status SetVertexParameters (float const *parameters=0, int width=0);
354  TK_Status SetVertexFaceColors (float const *colors=0);
362  TK_Status SetVertexEdgeColors (float const *colors=0);
370  TK_Status SetVertexMarkerColors (float const *colors=0);
378  TK_Status SetVertexMarkerRGBAs (float const *colors=0);
388  TK_Status SetVertexColors (float const *colors=0);
397  TK_Status SetVertexFaceIndices (float const *indices=0);
406  TK_Status SetVertexEdgeIndices (float const *indices=0);
415  TK_Status SetVertexMarkerIndices (float const *indices=0);
425  TK_Status SetVertexIndices (float const *indices=0);
431  TK_Status SetVertexMarkerVisibilities (char const *visibilities=0);
438  TK_Status SetVertexMarkerSizes (float const *sizes=0);
445  TK_Status SetVertexMarkerSymbols (char const *symbols=0);
449  TK_Status SetVertexMarkerSymbolStrings ();
455  TK_Status SetFaceColors (float const *colors=0);
461  TK_Status SetFaceNormals (float const *normals=0);
467  TK_Status SetFaceVisibilities (char const *visibilities=0);
474  TK_Status SetFacePatterns (char const *patterns=0);
482  TK_Status SetFaceIndices (float const *indices=0);
485  TK_Status SetFaceRegions (int const * regions=0);
494  TK_Status SetEdgeColors (float const *colors=0);
501  TK_Status SetEdgeIndices (float const *indices=0);
507  TK_Status SetEdgeNormals (float const *normals=0);
514  TK_Status SetEdgeVisibilities (char const *visibilities=0);
520  TK_Status SetEdgePatterns (char const *patterns=0);
524  TK_Status SetEdgePatternStrings ();
530  TK_Status SetEdgeWeights (float const *weights=0);
531 
536  TK_Status SetExists (unsigned int const *vals=0);
541  TK_Status SetFaceExists (unsigned int const *vals=0);
548  TK_Status SetEdgeExists (unsigned int const *vals=0);
549 
555  TK_Status AppendObject (BStreamFileToolkit & tk, BBaseOpcodeHandler *obj);
558  BBaseOpcodeHandler *PopObject();
559 
561  bool HasOptionals() { return
562  HasVertexAttributes() ||
563  HasFaceAttributes() ||
564  HasEdgeAttributes() ||
565  (!(mp_subop2 & 0x01) && mp_num_collection_parts > 0);// 0x01 matches TKSH2_COLLECTION
566  };
567 
568  bool HasOptionalsCommunicator() { return
569  HasVertexAttributes() ||
570  HasFaceAttributesCommunicator() ||
571  HasEdgeAttributes() ||
572  (!(mp_subop2 & 0x01) && mp_num_collection_parts > 0);// 0x01 matches TKSH2_COLLECTION
573  };
574 
576  bool HasVertexNormals() const { return mp_normals != 0; };
578  bool HasVertexParameters() const { return mp_params != 0; };
580  bool HasVertexFaceColors() const { return mp_vfcolors != 0; };
582  bool HasVertexEdgeColors() const { return mp_vecolors != 0; };
584  bool HasVertexMarkerColors() const { return mp_vmcolors != 0; };
586  bool HasVertexMarkerRGBAs() const { return mp_vmrgbas != 0; };
588  bool HasVertexColors() const { return
589  mp_vfcolors != 0 ||
590  mp_vecolors != 0 ||
591  mp_vmcolors != 0 ||
592  mp_vmrgbas != 0;
593  };
595  inline bool HasVertexFaceIndices() const { return mp_vfindices != 0; };
597  inline bool HasVertexEdgeIndices() const { return mp_veindices != 0; };
599  inline bool HasVertexMarkerIndices() const { return mp_vmindices != 0; };
601  inline bool HasVertexIndices() const { return
602  mp_vfindices != 0 ||
603  mp_veindices != 0 ||
604  mp_vmindices != 0;
605  };
607  inline bool HasVertexMarkerVisibilities() const { return mp_vmvisibilities != 0; };
609  inline bool HasVertexMarkerSymbols() const { return mp_vmsymbols != 0; };
611  inline bool HasVertexMarkerSizes() const { return mp_vmsizes != 0; };
615  inline bool HasVertexAttributes() const { return
616  HasVertexColors() ||
617  HasVertexIndices() ||
618  HasVertexNormals() ||
619  HasVertexParameters() ||
620  HasVertexMarkerVisibilities() ||
621  HasVertexMarkerSymbols() ||
622  HasVertexMarkerSizes();
623  };
625  inline bool HasFaceColors() const { return mp_fcolors != 0; };
627  inline bool HasFaceIndices() const { return mp_findices != 0; };
629  inline bool HasFaceNormals() const { return mp_fnormals != 0; };
631  inline bool HasFaceVisibilities() const { return mp_fvisibilities != 0; };
633  inline bool HasFacePatterns() const { return mp_fpatterns != 0; };
635  inline bool HasFaceRegions() const { return mp_fregions != 0; };
638  inline bool HasFaceAttributes() const { return
639  HasFaceColors() ||
640  HasFaceIndices() ||
641  HasFaceNormals() ||
642  HasFaceVisibilities() ||
643  HasFacePatterns() ||
644  HasFaceRegions();
645  };
646 
647  inline bool HasFaceAttributesCommunicator() const { return
648  HasFaceRegions();
649  };
650 
651 
653  inline bool HasEdgeColors() const { return mp_ecolors != 0; };
655  inline bool HasEdgeIndices() const { return mp_eindices != 0; };
657  inline bool HasEdgeNormals() const { return mp_enormals != 0; };
659  inline bool HasEdgeVisibilities() const { return mp_evisibilities != 0; };
661  inline bool HasEdgePatterns() const { return mp_epatterns != 0; };
663  inline bool HasEdgeWeights() const { return mp_eweights != 0; };
665  inline bool HasEdgeAttributes() const { return
666  HasEdgeColors() ||
667  HasEdgeIndices() ||
668  HasEdgeNormals() ||
669  HasEdgeVisibilities() ||
670  HasEdgePatterns() ||
671  HasEdgeWeights();
672  };
673 
674  protected:
675  //data members prefixed with "mp_", not "m_", to avoid potential naming conflicts with TK_Shell and/or TK_Mesh
676 
677 #ifndef DOXYGEN_SHOULD_SKIP_THIS
678  int mp_priority;
679  float * mp_points;
680  double * mp_dpoints;
681  float * mp_normals;
682  float * mp_params;
683  float * mp_vfcolors;
684  float * mp_vecolors;
685  float * mp_vmcolors;
686  float * mp_vmrgbas;
687  float * mp_vfindices;
688  float * mp_veindices;
689  float * mp_vmindices;
690  char * mp_vmvisibilities;
691  float * mp_vmsizes;
692  unsigned char * mp_vmsymbols;
693  char ** mp_vmsymbolstrings;
694  float * mp_fcolors;
695  float * mp_findices;
696  int * mp_fregions;
697  float * mp_fnormals;
698  char * mp_fvisibilities;
699  char * mp_fpatterns;
700  float * mp_ecolors;
701  float * mp_eindices;
702  float * mp_enormals;
703  char * mp_evisibilities;
704  unsigned char * mp_epatterns;
705  char ** mp_epatternstrings;
706  float * mp_eweights;
708  unsigned int * mp_exists;
709  unsigned int * mp_face_exists;
710  unsigned int * mp_edge_exists;
712  int mp_pointcount;
713  int mp_normalcount;
714  int mp_paramcount;
715  char mp_paramwidth;
716  int mp_vfcolorcount;
717  int mp_vecolorcount;
718  int mp_vmcolorcount;
719  int mp_vmrgbacount;
720  int mp_vfindexcount;
721  int mp_veindexcount;
722  int mp_vmindexcount;
723  int mp_vmvisibilitycount;
724  int mp_vmsizecount;
725  int mp_vmsymbolcount;
726  int mp_facecount;
727  int mp_fcolorcount;
728  int mp_findexcount;
729  int mp_fnormalcount;
730  int mp_fpatterncount;
731  int mp_fvisibilitycount;
732  int mp_edgecount;
733  int mp_ecolorcount;
734  int mp_eindexcount;
735  int mp_enormalcount;
736  int mp_epatterncount;
737  int mp_eweightcount;
738  int mp_evisibilitycount;
739  int * mp_edge_enumeration;
741  int mp_stage;
742  int mp_substage;
743  int mp_progress;
744  int mp_subprogress;
745  unsigned char mp_optopcode;
748  unsigned short mp_present;
749  unsigned short mp_face_present;
750  unsigned short mp_edge_present;
751  unsigned char mp_bits_per_sample;
752  float mp_bbox[256];
753  ID_Key mp_key;
754  TK_Instance * mp_instance;
755  float mp_matrix[16];
756  unsigned char * mp_workspace;
757  int mp_workspace_allocated;
758  int mp_workspace_used;
759  unsigned char mp_compression_scheme;
760  unsigned char mp_subop;
761  unsigned short mp_subop2;
762  int mp_num_collection_parts;
763  BBaseOpcodeHandler **mp_collection_parts;
770  virtual TK_Status EnumerateEdges() { return TK_Error; };
775  virtual TK_Status LabelFakeEdges() { return TK_Normal; };
780  virtual bool AllowInstancing(BStreamFileToolkit & tk) const;
781 
782  TK_Polyhedron(unsigned char op);
783  ~TK_Polyhedron();
784 
787  void Reset ();
788 
789  virtual TK_Status read_trivial_points (BStreamFileToolkit & tk);
790  virtual TK_Status write_trivial_points (BStreamFileToolkit & tk);
792  TK_Status read_vertex_normals (BStreamFileToolkit & tk);
793  TK_Status read_vertex_normals_compressed (BStreamFileToolkit & tk);
794  TK_Status read_vertex_normals_all (BStreamFileToolkit & tk);
795  TK_Status read_vertex_normals_compressed_all (BStreamFileToolkit & tk);
796  TK_Status read_vertex_parameters (BStreamFileToolkit & tk);
797  TK_Status read_vertex_parameters_all (BStreamFileToolkit & tk);
798  TK_Status read_vertex_colors_all (BStreamFileToolkit & tk, unsigned char op);
799  TK_Status read_vertex_colors (BStreamFileToolkit & tk, unsigned char op);
800  TK_Status read_vertex_colors_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
801  TK_Status read_vertex_colors_uncompressed (BStreamFileToolkit & tk, unsigned char op);
802  TK_Status read_vertex_indices_all (BStreamFileToolkit & tk, unsigned char op);
803  TK_Status read_vertex_indices (BStreamFileToolkit & tk, unsigned char op);
804  TK_Status read_vertex_indices_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
805  TK_Status read_vertex_indices_uncompressed (BStreamFileToolkit & tk, unsigned char op);
806  TK_Status read_vertex_marker_visibilities (BStreamFileToolkit & tk);
807  TK_Status read_vertex_marker_symbols (BStreamFileToolkit & tk);
808  TK_Status read_vertex_marker_sizes (BStreamFileToolkit & tk);
809  TK_Status read_face_colors (BStreamFileToolkit & tk);
810  TK_Status read_face_colors_all (BStreamFileToolkit & tk);
811  TK_Status read_face_colors_uncompressed (BStreamFileToolkit & tk);
812  TK_Status read_face_colors_uncompressed_all (BStreamFileToolkit & tk);
813  TK_Status read_face_indices (BStreamFileToolkit & tk);
814  TK_Status read_face_indices_all (BStreamFileToolkit & tk);
815  TK_Status read_face_indices_uncompressed (BStreamFileToolkit & tk);
816  TK_Status read_face_indices_uncompressed_all (BStreamFileToolkit & tk);
817  TK_Status read_face_regions (BStreamFileToolkit & tk);
818  TK_Status read_face_normals (BStreamFileToolkit & tk);
819  TK_Status read_face_visibilities (BStreamFileToolkit & tk);
820  TK_Status read_face_patterns (BStreamFileToolkit & tk);
821  TK_Status read_edge_colors (BStreamFileToolkit & tk);
822  TK_Status read_edge_indices (BStreamFileToolkit & tk);
823  TK_Status read_edge_normals (BStreamFileToolkit & tk);
824  TK_Status read_edge_visibilities (BStreamFileToolkit & tk);
825  TK_Status read_edge_patterns (BStreamFileToolkit & tk);
826  TK_Status read_edge_weights (BStreamFileToolkit & tk);
827  virtual TK_Status read_collection (BStreamFileToolkit & tk);
829  TK_Status write_vertex_normals (BStreamFileToolkit & tk);
830  TK_Status write_vertex_normals_compressed (BStreamFileToolkit & tk);
831  TK_Status write_vertex_normals_all (BStreamFileToolkit & tk);
832  TK_Status write_vertex_normals_compressed_all (BStreamFileToolkit & tk);
833  TK_Status write_vertex_parameters (BStreamFileToolkit & tk);
834  TK_Status write_vertex_parameters_all (BStreamFileToolkit & tk);
835  TK_Status write_vertex_colors (BStreamFileToolkit & tk, unsigned char op);
836  TK_Status write_vertex_colors_all (BStreamFileToolkit & tk, unsigned char op);
837  TK_Status write_vertex_colors_uncompressed (BStreamFileToolkit & tk, unsigned char op);
838  TK_Status write_vertex_colors_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
839  TK_Status write_vertex_indices (BStreamFileToolkit & tk, unsigned char op);
840  TK_Status write_vertex_indices_all (BStreamFileToolkit & tk, unsigned char op);
841  TK_Status write_vertex_indices_uncompressed (BStreamFileToolkit & tk, unsigned char op);
842  TK_Status write_vertex_indices_uncompressed_all (BStreamFileToolkit & tk, unsigned char op);
843  TK_Status write_vertex_marker_visibilities (BStreamFileToolkit & tk);
844  TK_Status write_vertex_marker_symbols (BStreamFileToolkit & tk);
845  TK_Status write_vertex_marker_sizes (BStreamFileToolkit & tk);
846  TK_Status write_face_colors (BStreamFileToolkit & tk);
847  TK_Status write_face_colors_all (BStreamFileToolkit & tk);
848  TK_Status write_face_colors_uncompressed (BStreamFileToolkit & tk);
849  TK_Status write_face_colors_uncompressed_all (BStreamFileToolkit & tk);
850  TK_Status write_face_indices (BStreamFileToolkit & tk);
851  TK_Status write_face_indices_all (BStreamFileToolkit & tk);
852  TK_Status write_face_indices_uncompressed (BStreamFileToolkit & tk);
853  TK_Status write_face_indices_uncompressed_all (BStreamFileToolkit & tk);
854  TK_Status write_face_regions (BStreamFileToolkit & tk);
855  TK_Status write_face_normals (BStreamFileToolkit & tk);
856  TK_Status write_face_visibilities (BStreamFileToolkit & tk);
857  TK_Status write_face_patterns (BStreamFileToolkit & tk);
858  TK_Status write_edge_colors (BStreamFileToolkit & tk);
859  TK_Status write_edge_indices (BStreamFileToolkit & tk);
860  TK_Status write_edge_normals (BStreamFileToolkit & tk);
861  TK_Status write_edge_visibilities (BStreamFileToolkit & tk);
862  TK_Status write_edge_patterns (BStreamFileToolkit & tk);
863  TK_Status write_edge_weights (BStreamFileToolkit & tk);
864  virtual TK_Status write_collection (BStreamFileToolkit & tk, bool write_tag = false, int variant = 0);
867  void normals_cartesian_to_polar (unsigned int *exists, int flag, int count, const float *in, float *out);
869  void normals_polar_to_cartesian (unsigned int *exists, int flag, int count, const float *in, float *out);
870 
874  TK_Status write_vertex_normals_main (BStreamFileToolkit & tk);
879  TK_Status write_vertex_parameters_main (BStreamFileToolkit & tk);
885  TK_Status write_vertex_colors_main (BStreamFileToolkit & tk, unsigned char base_op);
891  TK_Status write_vertex_indices_main (BStreamFileToolkit & tk, unsigned char base_op);
896  TK_Status write_face_colors_main (BStreamFileToolkit & tk);
901  TK_Status write_face_indices_main (BStreamFileToolkit & tk);
902 
903 
904  TK_Status ReadAscii (BStreamFileToolkit & tk);
905  TK_Status WriteAscii (BStreamFileToolkit & tk);
906 
907  virtual TK_Status read_trivial_points_ascii (BStreamFileToolkit & tk);
908  virtual TK_Status write_trivial_points_ascii (BStreamFileToolkit & tk);
910  TK_Status read_vertex_normals_ascii (BStreamFileToolkit & tk);
912  TK_Status read_vertex_normals_compressed_ascii (BStreamFileToolkit & tk);
913  TK_Status read_vertex_normals_all_ascii (BStreamFileToolkit & tk);
914  TK_Status read_vertex_normals_compressed_all_ascii (BStreamFileToolkit & tk);
915  TK_Status read_vertex_parameters_ascii (BStreamFileToolkit & tk);
916  TK_Status read_vertex_parameters_all_ascii (BStreamFileToolkit & tk);
917  TK_Status read_vertex_colors_all_ascii (BStreamFileToolkit & tk, unsigned char op);
918  TK_Status read_vertex_colors_ascii (BStreamFileToolkit & tk, unsigned char op);
919  TK_Status read_vertex_indices_all_ascii (BStreamFileToolkit & tk, unsigned char op);
920  TK_Status read_vertex_indices_ascii (BStreamFileToolkit & tk, unsigned char op);
921  TK_Status read_vertex_marker_visibilities_ascii (BStreamFileToolkit & tk);
922  TK_Status read_vertex_marker_symbols_ascii (BStreamFileToolkit & tk);
923  TK_Status read_vertex_marker_sizes_ascii (BStreamFileToolkit & tk);
924  TK_Status read_face_colors_ascii (BStreamFileToolkit & tk);
925  TK_Status read_face_colors_all_ascii (BStreamFileToolkit & tk);
926  TK_Status read_face_indices_ascii (BStreamFileToolkit & tk);
927  TK_Status read_face_indices_all_ascii (BStreamFileToolkit & tk);
928  TK_Status read_face_regions_ascii (BStreamFileToolkit & tk);
929  TK_Status read_face_normals_ascii (BStreamFileToolkit & tk);
930  TK_Status read_face_visibilities_ascii (BStreamFileToolkit & tk);
931  TK_Status read_face_patterns_ascii (BStreamFileToolkit & tk);
932  TK_Status read_edge_colors_ascii (BStreamFileToolkit & tk);
933  TK_Status read_edge_indices_ascii (BStreamFileToolkit & tk);
934  TK_Status read_edge_normals_ascii (BStreamFileToolkit & tk);
935  TK_Status read_edge_visibilities_ascii (BStreamFileToolkit & tk);
936  TK_Status read_edge_patterns_ascii (BStreamFileToolkit & tk);
937  TK_Status read_edge_weights_ascii (BStreamFileToolkit & tk);
939  virtual TK_Status read_collection_ascii (BStreamFileToolkit & tk);
941  TK_Status write_vertex_normals_ascii (BStreamFileToolkit & tk);
942  TK_Status write_vertex_normals_compressed_ascii (BStreamFileToolkit & tk);
943  TK_Status write_vertex_normals_all_ascii (BStreamFileToolkit & tk);
944  TK_Status write_vertex_normals_compressed_all_ascii (BStreamFileToolkit & tk);
945  TK_Status write_vertex_parameters_ascii (BStreamFileToolkit & tk);
946  TK_Status write_vertex_parameters_all_ascii (BStreamFileToolkit & tk);
947  TK_Status write_vertex_colors_ascii (BStreamFileToolkit & tk, unsigned char op);
948  TK_Status write_vertex_colors_all_ascii (BStreamFileToolkit & tk, unsigned char op);
949  TK_Status write_vertex_indices_ascii (BStreamFileToolkit & tk, unsigned char op);
950  TK_Status write_vertex_indices_all_ascii (BStreamFileToolkit & tk, unsigned char op);
951  TK_Status write_vertex_marker_visibilities_ascii (BStreamFileToolkit & tk);
952  TK_Status write_vertex_marker_symbols_ascii (BStreamFileToolkit & tk);
953  virtual TK_Status write_vertex_marker_sizes_ascii (BStreamFileToolkit & tk);
954  TK_Status write_face_colors_ascii (BStreamFileToolkit & tk);
955  TK_Status write_face_colors_all_ascii (BStreamFileToolkit & tk);
956  TK_Status write_face_indices_ascii (BStreamFileToolkit & tk);
957  TK_Status write_face_indices_all_ascii (BStreamFileToolkit & tk);
958  TK_Status write_face_regions_ascii (BStreamFileToolkit & tk);
959  TK_Status write_face_normals_ascii (BStreamFileToolkit & tk);
960  TK_Status write_face_visibilities_ascii (BStreamFileToolkit & tk);
961  TK_Status write_face_patterns_ascii (BStreamFileToolkit & tk);
962  TK_Status write_edge_colors_ascii (BStreamFileToolkit & tk);
963  TK_Status write_edge_indices_ascii (BStreamFileToolkit & tk);
964  TK_Status write_edge_normals_ascii (BStreamFileToolkit & tk);
965  TK_Status write_edge_visibilities_ascii (BStreamFileToolkit & tk);
966  TK_Status write_edge_patterns_ascii (BStreamFileToolkit & tk);
967  TK_Status write_edge_weights_ascii (BStreamFileToolkit & tk);
969  virtual TK_Status write_collection_ascii (BStreamFileToolkit & tk, bool write_tag = false, int variant = 0);
975  TK_Status write_vertex_normals_main_ascii (BStreamFileToolkit & tk);
980  TK_Status write_vertex_parameters_main_ascii (BStreamFileToolkit & tk);
986  TK_Status write_vertex_colors_main_ascii (BStreamFileToolkit & tk, unsigned char base_op);
992  TK_Status write_vertex_indices_main_ascii (BStreamFileToolkit & tk, unsigned char base_op);
997  TK_Status write_face_colors_main_ascii (BStreamFileToolkit & tk);
1002  TK_Status write_face_indices_main_ascii (BStreamFileToolkit & tk);
1003 
1004 
1005  virtual TK_Status mangle_points (BStreamFileToolkit & tk, int pointmap_count, int *pointmap);
1006  virtual TK_Status mangle_point_attributes (BStreamFileToolkit & tk, int pointmap_count, int *pointmap);
1007  virtual TK_Status mangle_face_attributes (BStreamFileToolkit & tk, int facemap_count, int *facemap);
1008  bool has_face_attributes() const;
1018  TK_Status repulse_compress_normals (BStreamFileToolkit & tk, int bits);
1024  TK_Status repulse_decompress_normals (BStreamFileToolkit & tk, int bits);
1025 
1027  void set_points (int count, float const * points = 0) { SetPoints (count, points); };
1029  void set_normals (float const * normals = 0) { SetVertexNormals (normals); };
1031  void set_parameters (float const * params = 0) { SetVertexParameters (params); };
1033  void set_vfcolors (float const * colors = 0) { SetVertexFaceColors (colors); };
1035  void set_vecolors (float const * colors = 0) { SetVertexEdgeColors (colors); };
1037  void set_vmcolors (float const * colors = 0) { SetVertexMarkerColors (colors); };
1039  void set_vfindices (float const * indices = 0) { SetVertexFaceIndices (indices); };
1041  void set_veindices (float const * indices = 0) { SetVertexEdgeIndices (indices); };
1043  void set_vmindices (float const * indices = 0) { SetVertexMarkerIndices (indices); };
1045  void set_fcolors (float const * colors = 0) { SetFaceColors (colors); };
1047  void set_findices (float const * indices = 0) { SetFaceIndices (indices); };
1049  void set_exists (unsigned int const * exists = 0);
1051  void set_face_exists (unsigned int const * exists = 0);
1053  void set_facemap (int count, int const * facemap = 0);
1054 
1055 
1056 
1057 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
1058 
1059 }; // end declaration of class TK_Polyhedron
1060 
1061 
1063 
1069 class BBINFILETK_API TK_Mesh : public TK_Polyhedron {
1070  protected:
1071  int m_rows;
1075  TK_Status EnumerateEdges();
1076 
1077  public:
1078  TK_Mesh()
1079  : TK_Polyhedron (TKE_Mesh), m_rows(0), m_columns(0) {}
1080  ~TK_Mesh();
1081 
1082 
1083  TK_Status ReadAscii (BStreamFileToolkit & tk);
1084  TK_Status WriteAscii (BStreamFileToolkit & tk);
1085 
1088  void Reset ();
1089 
1091  void SetRows (const int rows) { m_rows = rows; }
1092 
1094  void SetColumns (const int columns) { m_columns = columns; }
1095 
1096 }; // end declaration of class TK_Mesh
1097 
1098 #endif //BBINFILETK_POLYHEDRON
1099 
void SetRows(const int rows)
Definition: BPolyhedron.h:1091
float * GetVertexFaceColors()
Definition: BPolyhedron.h:228
float * GetVertexMarkerRGBAs()
Definition: BPolyhedron.h:240
Opt_Opcode
Definition: BPolyhedron.h:101
bool HasVertexMarkerVisibilities() const
Definition: BPolyhedron.h:607
float * GetFaceColors()
Definition: BPolyhedron.h:288
bool HasEdgePatterns() const
Definition: BPolyhedron.h:661
bool HasEdgeNormals() const
Definition: BPolyhedron.h:657
float const * GetVertexEdgeColors() const
Definition: BPolyhedron.h:230
bool HasVertexAttributes() const
Definition: BPolyhedron.h:615
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:306
bool HasVertexIndices() const
Definition: BPolyhedron.h:601
virtual void Reset()
The BStreamFileToolkit class provides support for importing/exporting HOOPS Stream File information...
Definition: BStreamFileToolkit.h:367
float * GetVertexEdgeColors()
Definition: BPolyhedron.h:232
void SetColumns(const int columns)
Definition: BPolyhedron.h:1094
Face_Exists
Definition: BPolyhedron.h:47
bool HasOptionals()
Definition: BPolyhedron.h:561
float * GetVertexColors()
Definition: BPolyhedron.h:251
bool HasEdgeColors() const
Definition: BPolyhedron.h:653
int * GetFaceRegions()
Definition: BPolyhedron.h:296
bool HasVertexParameters() const
Definition: BPolyhedron.h:578
double * GetDPoints()
Definition: BPolyhedron.h:196
float const * GetVertexIndices() const
Definition: BPolyhedron.h:271
bool HasVertexMarkerRGBAs() const
Definition: BPolyhedron.h:586
bool HasFaceAttributes() const
Definition: BPolyhedron.h:638
TK_Status SetSubop(unsigned char subop)
Definition: BPolyhedron.h:309
virtual TK_Status Read(BStreamFileToolkit &tk)=0
bool HasFacePatterns() const
Definition: BPolyhedron.h:633
int const * GetFaceRegions() const
Definition: BPolyhedron.h:294
TK_Status SetBounding(float const *bbox)
Definition: BPolyhedron.h:320
float * GetPoints()
Definition: BPolyhedron.h:191
Definition: BStream.h:244
Suboptions2
Definition: BPolyhedron.h:91
float * GetVertexParameters()
Definition: BPolyhedron.h:224
unsigned int const * GetExists() const
Definition: BPolyhedron.h:202
float const * GetVertexMarkerColors() const
Definition: BPolyhedron.h:234
bool HasVertexFaceColors() const
Definition: BPolyhedron.h:580
int GetPointCount() const
Definition: BPolyhedron.h:200
bool HasEdgeAttributes() const
Definition: BPolyhedron.h:665
float * GetVertexFaceIndices()
Definition: BPolyhedron.h:260
unsigned int * GetFaceExists()
Definition: BPolyhedron.h:208
Handles the TKE_Repeat_Object opcode.
Definition: BOpcodeHandler.h:1749
Handles the TKE_Mesh opcode.
Definition: BPolyhedron.h:1069
float const * GetVertexNormals() const
Definition: BPolyhedron.h:218
bool HasEdgeWeights() const
Definition: BPolyhedron.h:663
ID_Key GetKey() const
Definition: BPolyhedron.h:210
Suboptions
Definition: BPolyhedron.h:75
float const * GetVertexMarkerRGBAs() const
Definition: BPolyhedron.h:238
bool HasFaceRegions() const
Definition: BPolyhedron.h:635
bool HasVertexEdgeColors() const
Definition: BPolyhedron.h:582
unsigned short GetSubop2() const
Definition: BPolyhedron.h:214
bool HasVertexMarkerColors() const
Definition: BPolyhedron.h:584
bool HasVertexMarkerSizes() const
Definition: BPolyhedron.h:611
float const * GetVertexMarkerIndices() const
Definition: BPolyhedron.h:266
Definition: BStream.h:243
float const * GetFaceColors() const
Definition: BPolyhedron.h:286
float * GetFaceIndices()
Definition: BPolyhedron.h:292
float * GetVertexMarkerColors()
Definition: BPolyhedron.h:236
bool HasEdgeVisibilities() const
Definition: BPolyhedron.h:659
unsigned char GetSubop() const
Definition: BPolyhedron.h:212
float * GetVertexEdgeIndices()
Definition: BPolyhedron.h:264
bool HasVertexEdgeIndices() const
Definition: BPolyhedron.h:597
int GetPriority()
Definition: BPolyhedron.h:299
TK_Status SetSubop2(unsigned short subop2)
Definition: BPolyhedron.h:312
float const * GetVertexParameters() const
Definition: BPolyhedron.h:222
float const * GetVertexColors() const
Definition: BPolyhedron.h:243
bool HasVertexMarkerIndices() const
Definition: BPolyhedron.h:599
bool HasFaceNormals() const
Definition: BPolyhedron.h:629
float const * GetVertexFaceColors() const
Definition: BPolyhedron.h:226
float * GetVertexMarkerIndices()
Definition: BPolyhedron.h:268
Exists
Definition: BPolyhedron.h:27
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:623
void SetPriority(int priority)
Definition: BPolyhedron.h:301
unsigned int const * GetFaceExists() const
Definition: BPolyhedron.h:206
int m_columns
Definition: BPolyhedron.h:1072
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:242
float * GetVertexIndices()
Definition: BPolyhedron.h:279
float const * GetVertexEdgeIndices() const
Definition: BPolyhedron.h:262
Edge_Exists
Definition: BPolyhedron.h:60
float const * GetPoints() const
Definition: BPolyhedron.h:189
const float * GetBounding() const
Definition: BPolyhedron.h:216
#define ID_Key
Definition: BStream.h:218
Base class for shell and mesh.
Definition: BPolyhedron.h:21
bool HasFaceVisibilities() const
Definition: BPolyhedron.h:631
int m_rows
Definition: BPolyhedron.h:1071
bool HasEdgeIndices() const
Definition: BPolyhedron.h:655
double const * GetDPoints() const
Definition: BPolyhedron.h:194
bool HasVertexColors() const
Definition: BPolyhedron.h:588
float const * GetVertexFaceIndices() const
Definition: BPolyhedron.h:258
bool HasFaceColors() const
Definition: BPolyhedron.h:625
float * GetVertexNormals()
Definition: BPolyhedron.h:220
bool HasVertexMarkerSymbols() const
Definition: BPolyhedron.h:609
bool HasVertexFaceIndices() const
Definition: BPolyhedron.h:595
virtual TK_Status Write(BStreamFileToolkit &tk)=0
float const * GetFaceIndices() const
Definition: BPolyhedron.h:290
bool HasVertexNormals() const
Definition: BPolyhedron.h:576
unsigned int * GetExists()
Definition: BPolyhedron.h:204
bool HasFaceIndices() const
Definition: BPolyhedron.h:627