HIOUtilityPly.h
1 // Copyright (c) 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 _HIOUTILITYPLY_H
11 #define _HIOUTILITYPLY_H
12 
13 #ifdef H_PACK_8
14 #pragma pack(push)
15 #pragma pack(8)
16 #endif
17 
18 #include "HTools.h"
19 #include "HIOManager.h"
20 #include "varray.h"
21 #include <stdio.h>
22 
26 class MVO_API HIOUtilityPly: public HInputHandler, public HOutputHandler
27 {
28 private:
29  bool m_binary;
30  bool m_bigendian;
31 
32  bool m_vertex_colors;
33  bool m_vertex_normals;
34  bool m_face_colors;
35 
36  bool read_ply_header( FILE *f, int *point_count, int *face_count, int *opcodes );
37  bool write_ply_header( FILE *f, int point_count, int face_count, HPoint *min=0, HPoint *max=0 );
38 
39  bool count( int *total_point_count, int *total_face_count );
40  bool write_points( FILE *f );
41  bool write_faces( FILE *f );
42 
43  bool count_recursive( int *total_point_count, int *total_face_count );
44  bool write_points_recursive( FILE *f, float *modelling_matrix_in );
45  bool write_faces_recursive( FILE *f, int *point_offset );
46 
47  bool write_one_int( FILE *f, int val );
48  bool write_one_byte( FILE *f, unsigned char val );
49  bool write_one_float( FILE *f, float val );
50  bool read_one_int( FILE *f, int *val );
51  bool read_one_byte( FILE *f, unsigned char *val );
52  bool read_one_float( FILE *f, float *val );
53 
54  class Color_Node {
55  public:
56  Color_Node() { entity_list = new VArray<int>; }
57  ~Color_Node() { delete entity_list; }
58  float rgb_color_f[3];
59  VArray<int> *entity_list;
60  };
61 
62 public:
63 
66  m_binary = false;
67  m_bigendian = false;
70  };
71 
72  virtual ~HIOUtilityPly() {;};
73 
76  const char * GetOutputName() { return "HIOUtilityPly"; }
77  const char * GetInputName() { return "HIOUtilityPly"; }
78 
81  HIORegisterInputType("ply",this);
82  };
83 
86  HIORegisterOutputType("ply",this);
87  };
88 
90  const char * GetInputTypesString() {return "ply";};
91 
93  const char * GetOutputTypesString() {return "ply";};
94 
97 
99  HOutputHandlerStyle GetOutputStyle() {return HOutputHandlerStyleModel;};
100 
110  HFileInputResult FileInputByKey(const __wchar_t * FileName, HC_KEY key, HInputHandlerOptions * options);
111 
112  HFileInputResult FileInputByKey(const char * FileName, HC_KEY key, HInputHandlerOptions * options){
113  return FileInputByKey(H_WCS(FileName).encodedText(), key, options);
114  };
115 
116  HFileInputResult FileInputByKey(const unsigned short * FileName, HC_KEY key, HInputHandlerOptions * options){
117  H_UTF16 utf16;
118  utf16.encodedText((utf16_char const*) FileName);
119  return FileInputByKey(H_WCS(utf16).encodedText(), key, options);
120  };
121 
129  HFileOutputResult FileOutputByKey(const __wchar_t * filename, HC_KEY key, HOutputHandlerOptions * options);
130 
131  HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options){
132  H_UTF16 utf16;
133  utf16.encodedText((utf16_char const*) filename);
134  return FileOutputByKey(H_WCS(utf16).encodedText(), key, options);
135  }
136 
137  HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options){
138  return FileOutputByKey(H_WCS(filename).encodedText(), key, options);
139  }
140 
141 };
142 
143 
144 #ifdef H_PACK_8
145 #pragma pack(pop)
146 #endif
147 
148 #endif
HInputHandlerStyle GetInputStyle()
Definition: HIOUtilityPly.h:96
virtual HFileOutputResult FileOutputByKey(const char *filename, HC_KEY key, HOutputHandlerOptions *options)
Specifies an HInputHandler for model data.
Definition: HIOManager.h:226
#define HOutputOpFileOutputByKey
This HOutputHandler supports output from a segment key.
Definition: HIOManager.h:73
virtual HFileInputResult FileInputByKey(const char *filename, HC_KEY key, HInputHandlerOptions *options)
HInputHandler an abstract base class for model and image input.
Definition: HIOManager.h:663
HOutputHandlerStyle
Definition: HIOManager.h:854
HOutputHandlerStyle GetOutputStyle()
Definition: HIOUtilityPly.h:99
HOutputHandler an abstract base class for model and image output.
Definition: HIOManager.h:1255
void RegisterInputHandlerTypes()
Definition: HIOUtilityPly.h:80
#define HIORegisterInputType(type, input_object)
Definition: HIOManager.h:85
const char * GetInputName()
Definition: HIOUtilityPly.h:77
#define HIORegisterOutputType(type, output_object)
HIORegisterOutputType(type,output_object) Used by a HOutputHandler to set extension types that it han...
Definition: HIOManager.h:90
Definition: HIOUtilityPly.h:26
HInputHandlerStyle
Definition: HIOManager.h:225
The HPoint class is the data type of a three-dimensional point.
Definition: HGlobals.h:121
Definition: HIOManager.h:900
#define HInputOpFileInputByKey
This HInputHandler supports input to a segment key.
Definition: HIOManager.h:58
const char * GetOutputName()
Definition: HIOUtilityPly.h:76
const char * GetInputTypesString()
Definition: HIOUtilityPly.h:90
Definition: HIOManager.h:246
void SetInputOps(unsigned long ops)
This sets the HInputOp.
Definition: HIOManager.h:833
void RegisterOutputHandlerTypes()
Definition: HIOUtilityPly.h:85
void SetOutputOps(unsigned long ops)
This sets the HOutputOp.
Definition: HIOManager.h:1420
A header file containing the HIO classes for passing to HBaseView::FileInput and HBaseView::FileOutpu...
const char * GetOutputTypesString()
Definition: HIOUtilityPly.h:93
HIOUtilityPly()
Definition: HIOUtilityPly.h:65