Point Cloud Library (PCL)  1.9.1-dev
opennurbs_extensions.h
1 /* $NoKeywords: $ */
2 /*
3 //
4 // Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5 // OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6 // McNeel & Associates.
7 //
8 // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9 // ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10 // MERCHANTABILITY ARE HEREBY DISCLAIMED.
11 //
12 // For complete openNURBS copyright information see <http://www.opennurbs.org>.
13 //
14 ////////////////////////////////////////////////////////////////
15 */
16 
17 
18 #if !defined(OPENNURBS_EXTENSIONS_INC_)
19 #define OPENNURBS_EXTENSIONS_INC_
20 
21 #include <pcl/pcl_exports.h>
22 
23 /*
24 Description:
25  Used to store user data information in an ONX_Model.
26 */
28 {
29 public:
30 #if defined(ON_DLL_EXPORTS) || defined(ON_DLL_IMPORTS)
31  // See comments at the top of opennurbs_extensions.cpp for details.
32 
33  // new/delete
34  void* operator new(std::size_t);
35  void operator delete(void*);
36 
37  // array new/delete
38  void* operator new[] (std::size_t);
39  void operator delete[] (void*);
40 
41  // in place new/delete
42  void* operator new(std::size_t,void*);
43  void operator delete(void*,void*);
44 #endif
45 
47  ~ONX_Model_UserData();
48  ONX_Model_UserData(const ONX_Model_UserData&);
49  ONX_Model_UserData& operator=(const ONX_Model_UserData&);
50 
51  void Dump( ON_TextLog& ) const;
52 
55 
56 private:
57  void Destroy();
58  unsigned int* m_ref_count; // reference counts used to avoid expensive object copying
59 
60 public:
63 };
64 
65 /*
66 Description:
67  Used to store geometry table object definition and attributes in an ONX_Model.
68 */
70 {
71 public:
72 #if defined(ON_DLL_EXPORTS) || defined(ON_DLL_IMPORTS)
73  // See comments at the top of opennurbs_extensions.cpp for details.
74 
75  // new/delete
76  void* operator new(std::size_t);
77  void operator delete(void*);
78 
79  // array new/delete
80  void* operator new[] (std::size_t);
81  void operator delete[] (void*);
82 
83  // in place new/delete
84  void* operator new(std::size_t,void*);
85  void operator delete(void*,void*);
86 #endif
87 
89  ~ONX_Model_Object();
90  ONX_Model_Object(const ONX_Model_Object&);
91  ONX_Model_Object& operator=(const ONX_Model_Object&);
92 
93  void Dump( ON_TextLog& ) const;
94 
95  // If m_bDeleteObject is true, then m_object will be deleted when
96  // the last ONX_Model_Object that refers to it is destroyed. The
97  // default value of m_bDeleteObject is false.
101 
102 private:
103  void Destroy();
104  unsigned int* m_ref_count; // reference counts used to avoid expensive object copying
105 };
106 
107 /*
108 Description:
109  Used to store render light table light definition and attributes in an ONX_Model.
110 */
112 {
113 public:
114 #if defined(ON_DLL_EXPORTS) || defined(ON_DLL_IMPORTS)
115  // See comments at the top of opennurbs_extensions.cpp for details.
116 
117  // new/delete
118  void* operator new(std::size_t);
119  void operator delete(void*);
120 
121  // array new/delete
122  void* operator new[] (std::size_t);
123  void operator delete[] (void*);
124 
125  // in place new/delete
126  void* operator new(std::size_t,void*);
127  void operator delete(void*,void*);
128 #endif
129 
131  ~ONX_Model_RenderLight();
132  ONX_Model_RenderLight(const ONX_Model_RenderLight&);
133  ONX_Model_RenderLight& operator=(const ONX_Model_RenderLight&);
134 
137 };
138 
139 #if defined(ON_DLL_TEMPLATE)
140 // This stuff is here because of a limitation in the way Microsoft
141 // handles templates and DLLs. See Microsoft's knowledge base
142 // article ID Q168958 for details.
143 #pragma warning( push )
144 #pragma warning( disable : 4231 )
145 
146 ON_DLL_TEMPLATE template class ON_CLASS ON_SimpleArray<ON_Bitmap*>;
147 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_Linetype>;
148 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_Linetype>;
149 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_Layer>;
150 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_Layer>;
151 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_Group>;
152 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_Group>;
153 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_Font>;
154 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_Font>;
155 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_DimStyle>;
156 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_DimStyle>;
157 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ONX_Model_RenderLight>;
158 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_HatchPattern>;
159 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_HatchPattern>;
160 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ON_InstanceDefinition>;
161 ON_DLL_TEMPLATE template class ON_CLASS ON_ObjectArray<ON_InstanceDefinition>;
162 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ONX_Model_Object>;
163 ON_DLL_TEMPLATE template class ON_CLASS ON_ClassArray<ONX_Model_UserData>;
164 ON_DLL_TEMPLATE template class ON_CLASS ON_SimpleArray<ON_HistoryRecord*>;
165 
166 #pragma warning( pop )
167 #endif
168 
169 
170 /*
171 Description:
172  Pedegodgical example of all the things in an OpenNURBS 3dm archive.
173  The openNURBS examples use ONX_Model to store the information
174  read from 3dm archives. Please study example_read.cpp for
175  details.
176 */
177 class PCL_EXPORTS ON_CLASS ONX_Model
178 {
179 public:
180 #if defined(ON_DLL_EXPORTS) || defined(ON_DLL_IMPORTS)
181  // See comments at the top of opennurbs_extensions.cpp for details.
182 
183  // new/delete
184  void* operator new(std::size_t);
185  void operator delete(void*);
186 
187  // array new/delete
188  void* operator new[] (std::size_t);
189  void operator delete[] (void*);
190 
191  // in place new/delete
192  void* operator new(std::size_t,void*);
193  void operator delete(void*,void*);
194 #endif
195 
196  ONX_Model();
197  virtual ~ONX_Model();
198 
199  /*
200  Description:
201  Destroys contents of this model and leaves it ready to be reused.
202  */
203  void Destroy();
204 
205  /*
206  Description:
207  Reads an openNURBS archive and saves the information in this model
208  Parameters:
209  archive - [in] archive to read from
210  error_log - [out] any archive reading errors are logged here.
211  Returns:
212  true if archive is read with no error. False if errors occur.
213  Error details are logged in error_log. If crc errors are in
214  the archive, then m_crc_error_count is set to the number of
215  errors.
216  Example:
217 
218  // for ASCII file names
219  const char* sFileName = ....;
220  FILE* fp = ON::OpenFile( sFileName, "rb");
221 
222  // for UNICODE file names
223  const wchar_t* wsFileName = ....;
224  FILE* fp = ON::OpenFile( wsFileName, L"rb");
225 
226  bool bModelRead = false;
227  bool bModelIsValid = false;
228 
229  ON_TextLog error_log;
230  ONX_Model model;
231 
232  if ( 0 != fp )
233  {
234  ON_BinaryFile archive( ON::read3dm, fp );
235  bModelRead = model.read( archive, error_log );
236  ON::CloseFile( fp );
237  }
238 
239  if ( bModelRead )
240  {
241  bModelIsValid = model.Validate(error_log);
242  }
243 
244  See Also:
245  ONX_Model::IsValid
246  ONX_Model::Write
247  ONX_Model::m_crc_error_count
248  */
249  bool Read(
250  ON_BinaryArchive& archive,
251  ON_TextLog* error_log = NULL
252  );
253 
254  bool Read(
255  const char* filename,
256  ON_TextLog* error_log = NULL
257  );
258 
259  bool Read(
260  const wchar_t* filename,
261  ON_TextLog* error_log = NULL
262  );
263 
264  /*
265  Description:
266  Writes contents of this model to an openNURBS archive.
267  It is a good practice to call Polish() before calling
268  Write so that your file has all the "fluff" that makes it
269  complete. If the model is not valid, then Write will refuse
270  to write it.
271 
272  Parameters:
273  archive - [in]
274  archive to write to
275 
276  version - [in]
277  Version of the openNURBS archive to write.
278  0 default value and suggested.
279  When 0 is passed in, the value of ON_BinaryArchive::CurrentArchiveVersion()
280  is used.
281  2, 3, 4
282  If you pass in one of these values, some information
283  in current data structures will not be saved in the
284  file.
285  Rhino 2.x can read version 2 files.
286  Rhino 3.x can read version 2 and 3 files.
287  Rhino 4.x can read version 2, 3 and 4 files.
288  Rhino 5.x can read version 2, 3, 4, 5 and 50 files.
289  Rhino 5.x writes version 50 files.
290 
291  sStartSectionComment - [in]
292  Brief desciption of your app, today's date, etc.
293 
294  error_log - [out]
295  any archive writing errors are logged here.
296 
297  Returns:
298  True if archive is written with no error.
299  False if errors occur.
300  Error details are logged in error_log.
301 
302  Example:
303 
304  model = ...;
305 
306  model.Polish(); // fill in defaults as needed.
307 
308  ON_TextLog error_log;
309  if ( !model.IsValid( error_log ) )
310  {
311  // try to repair the model
312  model.Audit(true);
313  }
314 
315  if ( model.IsValid( error_log ) )
316  {
317 
318  // for ASCII file names
319  const char* sFileName = ....;
320  FILE* fp = ON::OpenFile( sFileName, "wb");
321 
322  // for UNICODE file names
323  const wchar_t* wsFileName = ....;
324  FILE* fp = ON::OpenFile( wsFileName, L"wb");
325 
326  bool ok = false;
327  if ( 0 != fp )
328  {
329  const char* sStartSectionComment = "...";
330  int version = 5; // 2, 3, 4 or 5 are valid
331  ON_BinaryFile archive( ON::write3dm, fp );
332  ok = model.write( archive,
333  version,
334  sStartSectionComment,
335  error_log );
336  ON::CloseFile( fp );
337  }
338  }
339 
340  See Also:
341  ONX_Model::Polish
342  ONX_Model::IsValid
343  ONX_Model::Read
344  */
345  bool Write(
346  ON_BinaryArchive& archive,
347  int version = 0,
348  const char* sStartSectionComment = NULL,
349  ON_TextLog* error_log = NULL
350  );
351 
352  bool Write(
353  const char* filename,
354  int version = 0,
355  const char* sStartSectionComment = NULL,
356  ON_TextLog* error_log = NULL
357  );
358 
359  bool Write(
360  const wchar_t* filename,
361  int version = 0,
362  const char* sStartSectionComment = NULL,
363  ON_TextLog* error_log = NULL
364  );
365 
366  /*
367  Description:
368  Check a model to make sure it is valid.
369  Parameters:
370  text_log - [in] if not NULL and errors are found,
371  a description of the problem is put in
372  this text_log.
373  Returns:
374  True if the model is valid.
375  */
376  bool IsValid( ON_TextLog* text_log = NULL ) const;
377 
378  /*
379  Description:
380  Quickly fills in the little details, like making sure there is
381  at least one layer and table indices make sense.
382  For a full blown check and repair, call Audit(true).
383  See Also:
384  ONX_Model::Audit
385  */
386  virtual
387  void Polish();
388 
389  /*
390  Description:
391  Check a model to make sure it is valid and, if possible
392  and requrested, attempt to repair.
393  Parameters:
394  bAttemptRepair - [in] if true and a problem is found,
395  the problem is repaired.
396  repair_count - [out] number of successful repairs.
397  text_log - [in] if not NULL and errors are found,
398  a description of the problem is put in
399  this text_log.
400  warnings - [out]
401  If problems were found, warning ids are appended to this list.
402  @untitled table
403  1 m_material_table[] flaws
404  2 layer table is not perfect.
405  3 some m_object_table[].m_attributes.m_uuid was nil or not unique.
406  4 some m_object_table[].IsValid() is false
407  5 some m_idef_table[] has an invalid or duplicate name
408  6 warning some m_idef_table[].m_object_uuid[] is not valid
409  7 warning some m_object_table[].m_object is null
410  8 warning some m_object_table[].m_object->IsValid() is false
411  9 warning some m_object_table[].m_attributes is not valid
412  10 linetype table is not perfect.
413  11 lineset table is not perfect.
414  12 some m_idef_table[].m_uuid was nil or not unique.
415  13 some m_texture_mapping_table[i].m_mapping_id was nil or not unique.
416  14 some m_material_table[i].m_material_id was nil or not unique.
417  15 some m_light_table[i].m_light_id was nil or not unique.
418  Returns:
419  True if model is valid and false if the model has serious
420  @untitled table
421  <0 model has serious errors
422  =0 model is ok
423  >0 number of problems that were found.
424  */
425  virtual
426  int Audit(
427  bool bAttemptRepair,
428  int* repair_count,
429  ON_TextLog* text_log,
430  ON_SimpleArray<int>* warnings
431  );
432 
433  /////////////////////////////////////////////////////////////////////
434  //
435  // BEGIN model definitions
436  //
437 
438  // start section information
442 
443  // Properties include revision history, notes, information about
444  // the applicaton that created the file, and an option preview image.
446 
447  // Settings include tolerance, and unit system, and defaults used
448  // for creating views and objects.
450 
451  // Tables in an openNURBS archive
466 
467  // The id index fields are used to lookup objects by id
472 
473  // length of archive returned by ON_BinaryArchive::Read3dmEndMark()
474  std::size_t m_file_length;
475 
476  // Number of crc errors found during archive reading.
477  // If > 0, then the archive is corrupt.
479 
480  //
481  // END model definitions
482  //
483  /////////////////////////////////////////////////////////////////////
484 
485  /*
486  Returns:
487  Bounding box of every object in m_object_table[].
488  */
489  ON_BoundingBox BoundingBox() const;
490 
491  /*
492  Description:
493  Get render material from object attributes.
494  Parameters:
495  attributes - [in] object attributes.
496  material - [out] render material
497  */
498  void GetRenderMaterial(
499  const ON_3dmObjectAttributes& attributes,
500  ON_Material& material
501  ) const;
502 
503  /*
504  Description:
505  Get render material from object_index.
506  Parameters:
507  object_index - [in] m_object_table[] index
508  material - [out] render material
509  */
510  void GetRenderMaterial(
511  int object_index,
512  ON_Material& material
513  ) const;
514 
515  /*
516  Description:
517  Get linetype from object attributes.
518  Parameters:
519  attributes - [in] object attributes.
520  linetype - [out] linetype
521  */
522  void GetLinetype(
523  const ON_3dmObjectAttributes& attributes,
524  ON_Linetype& linetype
525  ) const;
526 
527  /*
528  Description:
529  Get linetype from object_index.
530  Parameters:
531  object_index - [in] m_object_table[] index
532  linetype - [out] linetype
533  */
534  void GetLinetype(
535  int object_index,
536  ON_Linetype& linetype
537  ) const;
538 
539  /*
540  Description:
541  Get wireframe drawing color from object attributes.
542  Parameters:
543  attributes - [in] object attributes.
544  Returns:
545  Wireframe drawing color.
546  */
547  ON_Color WireframeColor(const ON_3dmObjectAttributes& attributes) const;
548 
549  /*
550  Description:
551  Get wireframe drawing color from object attributes.
552  Parameters:
553  object_index - [in] m_object_table[] index
554  Returns:
555  Wireframe drawing color.
556  */
557  ON_Color WireframeColor(int object_index) const;
558 
559  /*
560  Description:
561  Get index of object in m_object_table from object_uuid.
562  Parameters:
563  object_uuid - [in] object uuid.
564  Returns:
565  Index of the object or -1 if it is not found.
566  */
567  virtual
568  int ObjectIndex(
569  ON_UUID object_uuid
570  ) const;
571 
572  /*
573  Description:
574  Get instance definition from instance definition table.
575  Parameters:
576  idef_uuid - [in] instance definition uuid.
577  Example:
578 
579  ON_XModel model = ...;
580  ..
581  ON_InstanceRef* pIRef = ..;
582  ON_UUID idef_uuid = pIRef->m_instance_definition_uuid;
583  int idef_index = model.IDefIndex( idef_uuid );
584  if ( idef_index >= 0 )
585  {
586  const ON_InstanceDefinition& idef = model.m_idef_table[idef_index];
587  ...
588  }
589 
590  Returns:
591  Index of the instance definition or -1 if it is not found.
592  */
593  virtual
594  int IDefIndex(
595  ON_UUID idef_uuid
596  ) const;
597 
598  /*
599  Description:
600  Get instance definition index from instance definition name.
601  Parameters:
602  idef_name - [in] name to search for
603  Returns:
604  Index of the instance definition or -1 if it is not found.
605  */
606  virtual
607  int IDefIndex(
608  const wchar_t* idef_name
609  ) const;
610 
611  /*
612  Description:
613  Get instance definition name that is not currently in use.
614  */
615  virtual
616  void GetUnusedIDefName( ON_wString& idef_name ) const;
617 
618  /*
619  Description:
620  See if the instance reference iref refers to an instance
621  definition.
622  Parameters:
623  iref - [in]
624  idef_uuid - [in] id of idef we are looking for
625  Returns:
626  @untitled table
627  0 iref does not use idef
628  1 iref directly references idef
629  >1 iref has a nested reference to idef (nesting depth returned)
630  -1 iref.m_instance_definition_uuid is not valid
631  -2 invalid idef found
632  */
633  virtual
634  int UsesIDef(
635  const ON_InstanceRef& iref,
636  ON_UUID idef_uuid
637  ) const;
638 
639  /*
640  Description:
641  Get layer definition from layer table.
642  Parameters:
643  layer_name - [in] name to search for
644  Example:
645 
646  ON_XModel model = ...;
647  ..
648  ON_InstanceRef* pIRef = ..;
649  ON_UUID idef_uuid = pIRef->m_instance_definition_uuid;
650  int layer_index = model.IDefIndex( idef_uuid );
651  if ( idef_index >= 0 )
652  {
653  const ON_InstanceDefinition& idef = model.m_idef_table[idef_index];
654  ...
655  }
656 
657  Returns:
658  Index of the layer or -1 if it is not found.
659  */
660  virtual
661  int LayerIndex(
662  const wchar_t* layer_name
663  ) const;
664 
665  /*
666  Description:
667  Get layer name that is not currently in use.
668  */
669  virtual
670  void GetUnusedLayerName( ON_wString& layer_name ) const;
671 
672  /////////////////////////////////////////////////////////////////////
673  //
674  // BEGIN model document level user string tools
675  //
676 
677  /*
678  Description:
679  Attach a user string to the document.
680  Parameters:
681  key - [in] id used to retrieve this string.
682  string_value - [in]
683  If NULL, the string with this id will be removed.
684  Returns:
685  True if successful.
686  */
687  bool SetDocumentUserString(
688  const wchar_t* key,
689  const wchar_t* string_value
690  );
691 
692  /*
693  Description:
694  Get user string from the document.
695  Parameters:
696  key - [in] id used to retrieve the string.
697  string_value - [out]
698  Returns:
699  True if a string with id was found.
700  */
701  bool GetDocumentUserString(
702  const wchar_t* key,
703  ON_wString& string_value
704  ) const;
705 
706  /*
707  Description:
708  Get a list of all user strings in the document.
709  Parameters:
710  user_strings - [out]
711  user strings are appended to this list.
712  Returns:
713  Number of elements appended to the user_strings list.
714  */
715  int GetDocumentUserStrings( ON_ClassArray<ON_UserString>& user_strings ) const;
716 
717  //
718  // END model document level user string tools
719  //
720  /////////////////////////////////////////////////////////////////////
721 
722 
723  /////////////////////////////////////////////////////////////////////
724  //
725  // BEGIN model text dump tools
726  //
727 
728  // text dump of entire model
729  void Dump( ON_TextLog& ) const;
730 
731  // text dump of model properties and settings
732  void DumpSummary( ON_TextLog& ) const;
733 
734  // text dump of bitmap table
735  void DumpBitmapTable( ON_TextLog& ) const;
736 
737  // text dump of texture mapping table
738  void DumpTextureMappingTable( ON_TextLog& ) const;
739 
740  // text dump of render material table
741  void DumpMaterialTable( ON_TextLog& ) const;
742 
743  // text dump of line type table
744  void DumpLinetypeTable( ON_TextLog& ) const;
745 
746  // text dump of layer table
747  void DumpLayerTable( ON_TextLog& ) const;
748 
749  // text dump of light table
750  void DumpLightTable( ON_TextLog& ) const;
751 
752  // text dump of group table
753  void DumpGroupTable( ON_TextLog& ) const;
754 
755  // text dump of font table
756  void DumpFontTable( ON_TextLog& ) const;
757 
758  // text dump of dimstyle table
759  void DumpDimStyleTable( ON_TextLog& ) const;
760 
761  // text dump of hatch pattern table
762  void DumpHatchPatternTable( ON_TextLog& ) const;
763 
764  // text dump of instance definition table
765  void DumpIDefTable( ON_TextLog& ) const;
766 
767  // text dump of object table
768  void DumpObjectTable( ON_TextLog& ) const;
769 
770  // text dump of object table
771  void DumpHistoryRecordTable( ON_TextLog& ) const;
772 
773  // text dump of user data table
774  void DumpUserDataTable( ON_TextLog& ) const;
775 
776  //
777  // END model text dump tools
778  //
779  /////////////////////////////////////////////////////////////////////
780 
781  /*
782  Description:
783  Destroys cached searching and bounding box information. Call
784  if you modify the m_object_table or m_idef_table.
785  */
786  void DestroyCache();
787 
788  /////////////////////////////////////////////////////////////////////
789  //
790  // BEGIN Render Development Toolkit (RDK) information
791  //
792  static bool IsRDKDocumentInformation(const ONX_Model_UserData& docud);
793  static bool GetRDKDocumentInformation(const ONX_Model_UserData& docud,ON_wString& rdk_xml_document_data);
794 
795  static bool IsRDKObjectInformation(const ON_UserData& objectud);
796  static bool GetRDKObjectInformation(const ON_Object& object,ON_wString& rdk_xml_object_data);
797  //
798  // END Render Development Toolkit (RDK) information
799  //
800  /////////////////////////////////////////////////////////////////////
801 
802 
803 private:
804  // prohibit use of copy construction and operator=
805  ONX_Model(const ONX_Model&);
806  ONX_Model& operator=(const ONX_Model&);
807 
808 private:
809 
810  // This bounding box contains all objects in the object table.
811  ON_BoundingBox m__object_table_bbox;
812 };
813 
814 /*
815 Description:
816  Tests a string to see if it is valid as a name for a layer,
817  object, material, linetype, instance definition, etc.
818 Parameters:
819  name - [in] string to test
820 Returns:
821  True if the string is a valid name.
822 */
823 ON_DECL
824 bool ONX_IsValidName(
825  const wchar_t* name
826  );
827 
828 #endif
ON_ObjectArray< ON_Material > m_material_table
ON_3dmObjectAttributes m_attributes
ON_ClassArray< ONX_Model_RenderLight > m_light_table
ON_ClassArray< ONX_Model_Object > m_object_table
ON_String m_sStartSectionComments
ON_SimpleArray< ON_Bitmap * > m_bitmap_table
ON_3dmProperties m_properties
ON_ObjectArray< ON_InstanceDefinition > m_idef_table
ON_3dmSettings m_settings
ON_UuidIndexList m_mapping_id_index
ON_ObjectArray< ON_Font > m_font_table
ON_ObjectArray< ON_TextureMapping > m_mapping_table
ON_3dmObjectAttributes m_attributes
ON_UuidIndexList m_object_id_index
ON_SimpleArray< ON_HistoryRecord * > m_history_record_table
ON_UuidIndexList m_idef_id_index
ON_UuidIndexList m_material_id_index
const ON_Object * m_object
ON_ObjectArray< ON_Linetype > m_linetype_table
ON_ObjectArray< ON_HatchPattern > m_hatch_pattern_table
ON_ObjectArray< ON_Group > m_group_table
ON_ClassArray< ONX_Model_UserData > m_userdata_table
std::size_t m_file_length
#define PCL_EXPORTS
Definition: pcl_macros.h:241
ON_ObjectArray< ON_Layer > m_layer_table
ON_ObjectArray< ON_DimStyle > m_dimstyle_table