BOOL ON_HatchPattern::Write( ON_BinaryArchive& ar) const { BOOL rc = ar.Write3dmChunkVersion(1,2); if (rc) rc = ar.WriteInt( m_hatchpattern_index); if (rc) rc = ar.WriteInt( m_type); if (rc) rc = ar.WriteString( m_hatchpattern_name); if (rc) rc = ar.WriteString( m_description); if( rc) { if( m_type == ftLines) { int i, count = m_lines.Count(); if ( count < 0 ) count = 0; rc = ar.WriteInt( count ); for( i = 0; i < count && rc; i++) rc = m_lines[i].Write( ar); } } // version 1.2 field if (rc) rc = ar.WriteUuid(m_hatchpattern_id); return rc; }
ON_BOOL32 ON_3dmApplication::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion( 1, 0 ); if (rc) rc = file.WriteString( m_application_name ); if (rc) rc = file.WriteString( m_application_URL ); if (rc) rc = file.WriteString( m_application_details ); return rc; }
ON_BOOL32 ON_3dmRevisionHistory::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion( 1, 0 ); if (rc) rc = file.WriteString( m_sCreatedBy ); if (rc) rc = file.WriteTime( m_create_time ); if (rc) rc = file.WriteString( m_sLastEditedBy ); if (rc) rc = file.WriteTime(m_last_edit_time ); if (rc) rc = file.WriteInt( m_revision_count ); return rc; }
bool ON_PlugInRef::Write( ON_BinaryArchive& file ) const { bool rc = file.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,2); if (rc) { //version 1.0 fields if (rc) rc = file.WriteUuid(m_plugin_id); if (rc) rc = file.WriteInt(m_plugin_type); if (rc) rc = file.WriteString(m_plugin_name); if (rc) rc = file.WriteString(m_plugin_version); if (rc) rc = file.WriteString(m_plugin_filename); // version 1.1 fields if (rc) rc = file.WriteString(m_developer_organization); if (rc) rc = file.WriteString(m_developer_address); if (rc) rc = file.WriteString(m_developer_country); if (rc) rc = file.WriteString(m_developer_phone); if (rc) rc = file.WriteString(m_developer_email); if (rc) rc = file.WriteString(m_developer_website); if (rc) rc = file.WriteString(m_developer_updateurl); if (rc) rc = file.WriteString(m_developer_fax); // version 1.2 fields if (rc) rc = file.WriteInt(m_plugin_platform); if (rc) rc = file.WriteInt(m_plugin_sdk_version); if (rc) rc = file.WriteInt(m_plugin_sdk_service_release); if( !file.EndWrite3dmChunk() ) rc = false; } return rc; }
ON_BOOL32 ON_Linetype::Write( ON_BinaryArchive& file) const { bool rc = file.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,1); if (rc) { for(;;) { // chunk version 1.0 fields rc = file.WriteInt( LinetypeIndex()); if(!rc) break; rc = file.WriteString( m_linetype_name ); if (!rc) break; rc = file.WriteArray( m_segments ); if(!rc) break; // chunk version 1.1 fields rc = file.WriteUuid( m_linetype_id ); if (!rc) break; break; } if ( !file.EndWrite3dmChunk() ) rc = false; } return rc; }
ON_BOOL32 ON_Light::Write( ON_BinaryArchive& file ) const { int i; ON_BOOL32 rc = file.Write3dmChunkVersion(1,2); // version 1.0 fields if ( rc ) rc = file.WriteInt( m_bOn ); i = m_style; if ( rc ) rc = file.WriteInt( i ); if ( rc ) rc = file.WriteDouble( m_intensity ); if ( rc ) rc = file.WriteDouble( m_watts ); if ( rc ) rc = file.WriteColor( m_ambient ); if ( rc ) rc = file.WriteColor( m_diffuse ); if ( rc ) rc = file.WriteColor( m_specular ); if ( rc ) rc = file.WriteVector( m_direction ); if ( rc ) rc = file.WritePoint( m_location ); if ( rc ) rc = file.WriteDouble( m_spot_angle ); if ( rc ) rc = file.WriteDouble( m_spot_exponent ); if ( rc ) rc = file.WriteVector( m_attenuation ); if ( rc ) rc = file.WriteDouble( m_shadow_intensity ); if ( rc ) rc = file.WriteInt( m_light_index ); if ( rc ) rc = file.WriteUuid( m_light_id ); if ( rc ) rc = file.WriteString( m_light_name ); // version 1.1 added support for linear and rectangular if ( rc ) rc = file.WriteVector( m_length ); if ( rc ) rc = file.WriteVector( m_width ); // version 1.2 added m_hotspot support if ( rc ) rc = file.WriteDouble( m_hotspot ); return rc; }
BOOL CSampleDocumentUserDataPlugIn::WriteDocument( CRhinoDoc& doc, ON_BinaryArchive& archive, const CRhinoFileWriteOptions& options ) { // Write plug-in document data. See rhinoSdkPlugIn.h details. // If the user is exporting selected geometry, just return bool bSelectedMode = options.Mode( CRhinoFileWriteOptions::SelectedMode ); if( bSelectedMode ) return TRUE; // Write the major and minor version of document as document data if( !archive.Write3dmChunkVersion(1, 0) ) return FALSE; // Write the number of string we intend to write as document data if( !archive.WriteInt(m_string_table.Count()) ) return FALSE; // Write our string table as document data for( int i = 0; i < m_string_table.Count(); i++ ) { if( !archive.WriteString(m_string_table[i]) ) return FALSE; } return TRUE; }
ON_BOOL32 ON_AnnotationTextDot::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion(1,0); if (rc) rc = file.WritePoint( point ); if (rc) rc = file.WriteString( m_text ); return rc; }
ON_BOOL32 MyUserData::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = true; if ( rc ) rc = file.WriteInt(m_my_int); if ( rc ) rc = file.WriteLine(m_my_line); if ( rc ) rc = file.WriteString(m_my_string); return rc; }
ON_BOOL32 ON_TextEntity::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = ON_Annotation::Write( file ); if( rc ) rc = file.WriteString( m_facename ); if( rc ) rc = file.WriteInt( m_fontweight ); if( rc ) rc = file.WriteDouble( m_height ); return rc; }
ON_BOOL32 ON_3dmNotes::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion(1,0); if ( rc ) rc = file.WriteInt( m_bHTML ); if ( rc ) rc = file.WriteString( m_notes ); if ( rc ) rc = file.WriteInt( m_bVisible ); if ( rc ) rc = file.WriteInt( m_window_left ); if ( rc ) rc = file.WriteInt( m_window_top ); if ( rc ) rc = file.WriteInt( m_window_right ); if ( rc ) rc = file.WriteInt( m_window_bottom ); return rc; }
ON_BOOL32 ON_Group::Write( ON_BinaryArchive& file // serialize definition to binary archive ) const { ON_BOOL32 rc = file.Write3dmChunkVersion(1,1); // version 1.0 fields if (rc) rc = file.WriteInt(m_group_index); if (rc) rc = file.WriteString(m_group_name); // version 1.1 fields if (rc) rc = file.WriteUuid(m_group_id); return rc; }
bool ON_UserString::Write(ON_BinaryArchive& archive) const { bool rc = archive.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,0); if (!rc) return false; for(;;) { rc = archive.WriteString(m_key); if (!rc) break; rc = archive.WriteString(m_string_value); if (!rc) break; break; } if ( !archive.EndWrite3dmChunk() ) rc = false; return rc; }
bool ON_Group::Internal_WriteV5( ON_BinaryArchive& file // serialize definition to binary archive ) const { bool rc = file.Write3dmChunkVersion(1,1); // version 1.0 fields if (rc) rc = file.Write3dmReferencedComponentIndex(ON_ModelComponent::Type::Group,Index()); if (rc) rc = file.WriteString(Name()); // version 1.1 fields if (rc) rc = file.WriteUuid(Id()); return rc; }
BOOL CSampleObjectUserData::Write( ON_BinaryArchive& binary_archive ) const { int minor_version = 0; bool rc = binary_archive.BeginWrite3dmChunk( TCODE_ANONYMOUS_CHUNK, 1, minor_version ); if( !rc ) return false; // Write class members like this for(;;) { // version 1.0 fields rc = binary_archive.WritePoint( m_point ); if( !rc ) break; rc = binary_archive.WriteString( m_string ); if( !rc ) break; // If you add data members to CSampleObjectUserData after you // have released a product, simply increment minor_version // by one, and write the new information. This way you // can enhance your user data over several versions of // your product without breaking file IO. It is CRITICAL // that once you write something to a customer's .3dm // file, you continue to write it the same way for all // future versions. // version 1.1 fields added DD MMM YYYY // rc = binary_archive.WriteSomethingNew( ... ); // if (!rc) break; // rc = binary_archive.WriteSomethingElseNew( ... ); // if (!rc) break; // version 1.2 fields added DD MMM YYYY // rc = binary_archive.WriteAnotherSomethingNew( ... ); // if (!rc) break; // rc = binary_archive.WriteAnotherSomethingElseNew( ... ); // if (!rc) break; break; } // If BeginWrite3dmChunk() returns true, // then EndWrite3dmChunk() must be called, // even if a write operation failed. if( !binary_archive.EndWrite3dmChunk() ) rc = false; return rc; }
ON_BOOL32 ON_Annotation::Write( ON_BinaryArchive& file ) const { int i; ON_BOOL32 rc = file.Write3dmChunkVersion( 1, 0 ); // TODO: use // if (rc) rc = file.WritePoint(....); // if (rc) rc = file.WriteString(....); // if (rc) rc = file.WriteDouble(....); // to write object. i = m_type; if (rc) rc = file.WriteInt( i ); if (rc) rc = file.WritePlane( m_plane ); if (rc) rc = file.WriteArray( m_points ); if (rc) rc = file.WriteString( m_usertext ); if (rc) rc = file.WriteString( m_defaulttext ); if( rc ) rc = file.WriteInt( m_userpositionedtext ); return rc; }
ON_BOOL32 ON_Font::Write( ON_BinaryArchive& file // serialize definition to binary archive ) const { bool rc = file.Write3dmChunkVersion(1,2); while(rc) { rc = file.WriteInt(m_font_index); if (!rc) break; rc = file.WriteString(m_font_name); if (!rc) break; { // 18 October 2002 Dale Lear: // Lowell, wchar_t has different sizes on different OSs. // When writing a wchar_t string, you should use one // of the WriteString functions. This function must continue // to use WriteShort(64,...) so old files will remain valid. unsigned short sh[64]; memset(sh,0,sizeof(sh)); int i; for ( i = 0; i < 64 && i < face_name_size-1; i++ ) sh[i] = m_facename[i]; rc = file.WriteShort(64, sh); if (!rc) break; } // 1.1 additions rc = file.WriteInt( m_font_weight); if (!rc) break; rc = file.WriteInt( m_font_italic); if (!rc) break; rc = file.WriteDouble( m_linefeed_ratio); if (!rc) break; // 1.2 addition rc = file.WriteUuid( m_font_id); if (!rc) break; // 1.3 addition // rc = file.WriteInt( m_font_underlined); // if (!rc) break; break; } return rc; }
// virtual ON_Object override ON_BOOL32 ON__IDefAlternativePathUserData::Write(ON_BinaryArchive& binary_archive) const { bool rc = binary_archive.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,0); if ( !rc ) return false; rc = false; for(;;) { if ( !binary_archive.WriteString(m_alternate_path) ) break; if ( !binary_archive.WriteBool(m_bRelativePath) ) break; rc = true; break; } if ( !binary_archive.EndWrite3dmChunk() ) rc = false; return rc; }
BOOL ON_Layer::Write( ON_BinaryArchive& file // serialize definition to binary archive ) const { int i; bool rc = file.Write3dmChunkVersion(1,8); while(rc) { // Save OBSOLETE mode value so we don't break file format if ( m_bVisible ) i = 0; // "normal" layer mode else if ( m_bLocked ) i = 2; // "locked" layer mode else i = 1; // "hidden" layer mode rc = file.WriteInt( i ); if (!rc) break; rc = file.WriteInt( m_layer_index ); if (!rc) break; rc = file.WriteInt( m_iges_level ); if (!rc) break; rc = file.WriteInt( m_material_index ); if (!rc) break; // Starting with version 200312110, this value is zero. For files written // with earlier versions, the number was a "model index" value that was // set to something >= 1, but never used. We have to continue to // read/write an integer here so that old/new versions of opennurbs can // read files written by new/old versions. i = 0; rc = file.WriteInt( i ); if (!rc) break; rc = file.WriteColor( m_color ); if (!rc) break; { // OBSOLETE LINE STYLE if ( rc ) rc = file.WriteLineStyle( LineStyle() ); // Starting with version 200503170, this section is "officially" not used. // Prior to that, it was old ON_LineStyle information that has // never been used. short s = 0; if (rc) rc = file.WriteShort(s); // default pattern if (rc) rc = file.WriteShort(s); // default pattern index if (rc) rc = file.WriteDouble(0.0); // default thickness if (rc) rc = file.WriteDouble(1.0); // default scale } if (!rc) break; rc = file.WriteString( m_name ); if (!rc) break; // 1.1 fields rc = file.WriteBool(m_bVisible); if (!rc) break; // 1.2 field rc = file.WriteInt( m_linetype_index); if (!rc) break; // 1.3 field - 23 March 2005 Dale Lear rc = file.WriteColor( m_plot_color); if (!rc) break; rc = file.WriteDouble( m_plot_weight_mm); if (!rc) break; // 1.4 field - 3 May 2005 Dale Lear // - locked and visible are independent settings rc = file.WriteBool( m_bLocked ); if (!rc) break; // 1.5 field rc = file.WriteUuid( m_layer_id ); if (!rc) break; // 1.6 field rc = file.WriteUuid( m_parent_layer_id ); if (!rc) break; // 1.6 field rc = file.WriteBool( m_bExpanded ); if (!rc) break; // 1.7 field - added 6 June 2006 rc = m_rendering_attributes.Write(file); if (!rc) break; // 1.8 field - added 19 Sep 2006 rc = file.WriteUuid(m_display_material_id); break; } return rc; }
ON_BOOL32 CExampleWriteUserData::Write(ON_BinaryArchive& file) const { return file.WriteString(m_str); }
ON_BOOL32 ON_InstanceDefinition::Write( ON_BinaryArchive& binary_archive ) const { bool rc = binary_archive.Write3dmChunkVersion(1,5); // version 1.0 fields if ( rc ) rc = binary_archive.WriteUuid( m_uuid ); if ( rc ) { if ( binary_archive.Archive3dmVersion() >= 4 && ON_InstanceDefinition::linked_def == m_idef_update_type ) { // linked instance definition geometry is never in the file ON_SimpleArray<ON_UUID> empty_uuid_list; rc = binary_archive.WriteArray( empty_uuid_list ); } else { rc = binary_archive.WriteArray( m_object_uuid ); } } if ( rc ) rc = binary_archive.WriteString( m_name ); if ( rc ) rc = binary_archive.WriteString( m_description ); if ( rc ) rc = binary_archive.WriteString( m_url ); if ( rc ) rc = binary_archive.WriteString( m_url_tag ); if ( rc ) rc = binary_archive.WriteBoundingBox( m_bbox ); // m_idef_update_type was an unsigned int and got changed to an enum. Read and write // as an unsigned int to support backwards compatibility if ( rc ) rc = binary_archive.WriteInt( (unsigned int)m_idef_update_type ); if ( rc ) rc = binary_archive.WriteString( m_source_archive ); // version 1.1 fields if (rc) rc = m_source_archive_checksum.Write( binary_archive ); // version 1.2 fields if (rc) rc = binary_archive.WriteInt( m_us.m_unit_system ); // version 1.3 fields - added 6 March 2006 if (rc) rc = binary_archive.WriteDouble( m_us.m_custom_unit_scale ); if ( rc ) rc = binary_archive.WriteBool( m_source_bRelativePath ); // version 1.4 fields if (rc) rc = m_us.Write(binary_archive); // version 1.5 fields if (rc) rc = binary_archive.WriteInt(m_idef_update_depth); return rc; }
ON_BOOL32 ON_3dmObjectAttributes::Write( ON_BinaryArchive& file ) const { if ( file.Archive3dmVersion() >= 5 ) { // added at opennurbs version 200712190 return WriteV5Helper(file); } bool rc = file.Write3dmChunkVersion(1,7); // version 1.0 fields if (rc) rc = file.WriteUuid(m_uuid); if (rc) rc = file.WriteInt(m_layer_index); if (rc) rc = file.WriteInt(m_material_index); if (rc) rc = file.WriteColor(m_color); if (rc) { // OBSOLETE if (rc) rc = file.WriteLineStyle(m_line_style); // 23 March 2005 Dale Lear short s; s = (short)m_object_decoration; if (rc) rc = file.WriteShort(s); s = 0; if (rc) rc = file.WriteShort(s); if (rc) rc = file.WriteDouble(0.0); if (rc) rc = file.WriteDouble(1.0); } if (rc) rc = file.WriteInt(m_wire_density); if (rc) rc = file.WriteChar(m_mode); if (rc) rc = file.WriteChar(m_color_source); if (rc) rc = file.WriteChar(m_linetype_source); if (rc) rc = file.WriteChar(m_material_source); if (rc) rc = file.WriteString(m_name); if (rc) rc = file.WriteString(m_url); // version 1.1 fields if (rc) rc = file.WriteArray(m_group); // version 1.2 fields if (rc) rc = file.WriteBool(m_bVisible); // version 1.3 fields if (rc) rc = file.WriteArray(m_dmref); // version 1.4 fields - 23 March 2005 Dale Lear if (rc) rc = file.WriteInt(m_object_decoration); if (rc) rc = file.WriteChar(m_plot_color_source); if (rc) rc = file.WriteColor(m_plot_color); if (rc) rc = file.WriteChar(m_plot_weight_source); if (rc) rc = file.WriteDouble(m_plot_weight_mm); // version 1.5 fields 11 April 2005 if (rc) rc = file.WriteInt(m_linetype_index); // version 1.6 fields 2 September 2005 if (rc) { unsigned char uc = 0; switch(m_space) { case ON::no_space: uc = 0; break; case ON::model_space: uc = 0; break; case ON::page_space: uc = 1; break; } rc = file.WriteChar(uc); } if (rc) { // 22 Sep 2006 - the way ON_3dmObjectAttiributes indicates // that an object is put on a particular page view changed // from being saved in the m_dmref[] list to using the // m_space and m_viewport_id settings. But the file format // cannot change at this point. So, the bAddPagespaceDMR // is here to save the page info in the old dmr format. int count = m_dmref.Count(); if ( count < 0 ) count = 0; bool bAddPagespaceDMR = ( ON::page_space == m_space && !ON_UuidIsNil(m_viewport_id) ); rc = file.WriteInt( bAddPagespaceDMR ? (count+1) : count ); if ( rc && bAddPagespaceDMR ) { rc = file.WriteUuid(m_viewport_id); if (rc) rc = file.WriteUuid(ON_ObsoletePageSpaceObjectId); } int i; for ( i = 0; i < count && rc; i++ ) { const ON_DisplayMaterialRef& dmr = m_dmref[i]; rc = file.WriteUuid(dmr.m_viewport_id); if (rc) rc = file.WriteUuid(dmr.m_display_material_id); } } // version 1.7 fields 6 June 2006 if (rc) rc = m_rendering_attributes.Write(file); return rc; }
bool ON_3dmObjectAttributes::WriteV5Helper( ON_BinaryArchive& file ) const { unsigned char c; // 29 Nov. 2009 S. Baer // Chunk version updated to 2.1 in order to support m_display_order bool rc = file.Write3dmChunkVersion(2,1); while(rc) { if (!rc) break; rc = file.WriteUuid(m_uuid); if (!rc) break; rc = file.WriteInt(m_layer_index); if (!rc) break; // write non-default settings - skip everything else if ( !m_name.IsEmpty() ) { c = 1; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteString(m_name); if (!rc) break; } if ( !m_url.IsEmpty() ) { c = 2; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteString(m_url); if (!rc) break; } if ( -1 != m_linetype_index ) { c = 3; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteInt(m_linetype_index); if (!rc) break; } if ( -1 != m_material_index ) { c = 4; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteInt(m_material_index); if (!rc) break; } if ( m_rendering_attributes.m_mappings.Count() > 0 || m_rendering_attributes.m_materials.Count() > 0 || true != m_rendering_attributes.m_bCastsShadows || true != m_rendering_attributes.m_bReceivesShadows || false != m_rendering_attributes.AdvancedTexturePreview() ) { c = 5; rc = file.WriteChar(c); if (!rc) break; rc = m_rendering_attributes.Write(file); if (!rc) break; } if ( 0 != m_color ) { c = 6; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteColor(m_color); if (!rc) break; } if ( 0 != m_plot_color ) { c = 7; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteColor(m_plot_color); if (!rc) break; } if ( 0.0 != m_plot_weight_mm ) { c = 8; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteDouble(m_plot_weight_mm); if (!rc) break; } if ( ON::no_object_decoration != m_object_decoration ) { c = 9; rc = file.WriteChar(c); if (!rc) break; c = (unsigned char)m_object_decoration; rc = file.WriteChar(c); if (!rc) break; } if ( 1 != m_wire_density ) { c = 10; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteInt(m_wire_density); if (!rc) break; } if ( true != m_bVisible ) { c = 11; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteBool(m_bVisible); if (!rc) break; } if ( ON::normal_object != m_mode ) { c = 12; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteChar(m_mode); if (!rc) break; } if ( ON::color_from_layer != m_color_source ) { c = 13; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteChar(m_color_source); if (!rc) break; } if ( ON::plot_color_from_layer != m_plot_color_source ) { c = 14; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteChar(m_plot_color_source); if (!rc) break; } if ( ON::plot_weight_from_layer != m_plot_weight_source ) { c = 15; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteChar(m_plot_weight_source); if (!rc) break; } if ( ON::material_from_layer != m_material_source ) { c = 16; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteChar(m_material_source); if (!rc) break; } if ( ON::linetype_from_layer != m_linetype_source ) { c = 17; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteChar(m_linetype_source); if (!rc) break; } if ( m_group.Count() > 0 ) { c = 18; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteArray(m_group); if (!rc) break; } if ( ON::model_space != m_space ) { c = 19; rc = file.WriteChar(c); if (!rc) break; c = (unsigned char)m_space; rc = file.WriteChar(c); if (!rc) break; } if ( !ON_UuidIsNil(m_viewport_id) ) { c = 20; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteUuid(m_viewport_id); if (!rc) break; } if ( m_dmref.Count() > 0 ) { c = 21; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteArray(m_dmref); if (!rc) break; } // 29 Nov. 2009 - S. Baer // Only write m_display_order if it's value!=0 // m_display_order is written to version 2.1 files if ( 0 != m_display_order ) { c = 22; rc = file.WriteChar(c); if (!rc) break; rc = file.WriteInt(m_display_order); if (!rc) break; } // 0 indicates end of attributes; c = 0; rc = file.WriteChar(c); break; } return rc; }
bool ON_3dmProperties::Write(ON_BinaryArchive& file) const { bool rc = true; // This short chunk identifies the version of OpenNURBS that was used to write this file. const unsigned int version_number_to_write = ON_BinaryArchive::ArchiveOpenNURBSVersionToWrite(file.Archive3dmVersion(), ON::Version()); rc = file.BeginWrite3dmChunk(TCODE_PROPERTIES_OPENNURBS_VERSION, version_number_to_write); if (rc) rc = file.EndWrite3dmChunk(); if (!rc) return false; // This chunk added November 5, 2015 const ON_wString archive_full_path = file.ArchiveFullPath().IsEmpty() ? m_3dmArchiveFullPathName : file.ArchiveFullPath(); if (archive_full_path.IsNotEmpty()) { if (!file.BeginWrite3dmChunk(TCODE_PROPERTIES_AS_FILE_NAME, 0)) return false; rc = file.WriteString(file.ArchiveFullPath()); if (!file.EndWrite3dmChunk()) rc = false; if (!rc) return false; } // optional TCODE_PROPERTIES_REVISIONHISTORY chunk - file creation/revision information if ( rc && m_RevisionHistory.IsValid() ) { rc = file.BeginWrite3dmChunk(TCODE_PROPERTIES_REVISIONHISTORY,0); if ( rc ) { rc = m_RevisionHistory.Write(file); if ( !file.EndWrite3dmChunk() ) rc = false; } } // optional TCODE_PROPERTIES_NOTES chunk - file notes if ( rc && m_Notes.IsValid() ) { rc = file.BeginWrite3dmChunk(TCODE_PROPERTIES_NOTES,0); if ( rc ) { rc = m_Notes.Write(file); if ( !file.EndWrite3dmChunk() ) rc = false; } } //// When merging Mac code please note that the //// TCODE_PROPERTIES_PREVIEWIMAGE chunk is OBSOLETE. //// DO NOT WRITE THEM IN V6 FILES. If performance is an //// issue, we will address it some other way. // optional TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE chunk - bitmap preview if ( rc && m_PreviewImage.IsValid() && file.Save3dmPreviewImage()) { rc = file.BeginWrite3dmChunk(TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE,0); if ( rc ) { rc = m_PreviewImage.WriteCompressed(file); if ( !file.EndWrite3dmChunk() ) rc = false; } } // optional TCODE_PROPERTIES_APPLICATION chunk - application information if ( rc && m_Application.IsValid() ) { rc = file.BeginWrite3dmChunk(TCODE_PROPERTIES_APPLICATION,0); if ( rc ) { rc = m_Application.Write(file); if ( !file.EndWrite3dmChunk() ) rc = false; } } // required TCODE_ENDOFTABLE chunk - marks end of properties table if ( rc ) { rc = file.BeginWrite3dmChunk( TCODE_ENDOFTABLE, 0 ); if ( rc ) { if ( !file.EndWrite3dmChunk() ) rc = false; } } return rc; }
ON_BOOL32 ON_InstanceDefinition::Write( ON_BinaryArchive& binary_archive ) const { bool rc = binary_archive.Write3dmChunkVersion(1,6); // version 1.0 fields if ( rc ) rc = binary_archive.WriteUuid( m_uuid ); if ( rc ) { if ( binary_archive.Archive3dmVersion() >= 4 && ON_InstanceDefinition::linked_def == m_idef_update_type ) { // linked instance definition geometry is never in the file ON_SimpleArray<ON_UUID> empty_uuid_list; rc = binary_archive.WriteArray( empty_uuid_list ); } else { rc = binary_archive.WriteArray( m_object_uuid ); } } if ( rc ) rc = binary_archive.WriteString( m_name ); if ( rc ) rc = binary_archive.WriteString( m_description ); if ( rc ) rc = binary_archive.WriteString( m_url ); if ( rc ) rc = binary_archive.WriteString( m_url_tag ); if ( rc ) rc = binary_archive.WriteBoundingBox( m_bbox ); // m_idef_update_type was an unsigned int and got changed to an enum. Read and write // as an unsigned int to support backwards compatibility const unsigned int idef_update_type = (unsigned int)this->IdefUpdateType(); if ( rc ) rc = binary_archive.WriteInt( idef_update_type ); if ( rc ) { // 7 February 2012 // Purge source archive information from static_defs if ( ON_InstanceDefinition::static_def == idef_update_type ) { ON_wString empty_string; rc = binary_archive.WriteString( empty_string ); } else rc = binary_archive.WriteString( m_source_archive ); } // version 1.1 fields if (rc) { // 7 February 2012 // Purge source archive information from static_defs if ( ON_InstanceDefinition::static_def == idef_update_type ) ON_CheckSum::UnsetCheckSum.Write(binary_archive); else rc = m_source_archive_checksum.Write( binary_archive ); } // version 1.2 fields if (rc) rc = binary_archive.WriteInt( m_us.m_unit_system ); // version 1.3 fields - added 6 March 2006 if (rc) rc = binary_archive.WriteDouble( m_us.m_custom_unit_scale ); if ( rc ) { bool b = (ON_InstanceDefinition::static_def == idef_update_type) ? false : m_source_bRelativePath; rc = binary_archive.WriteBool( b ); } // version 1.4 fields if (rc) rc = m_us.Write(binary_archive); // version 1.5 fields if (rc) rc = binary_archive.WriteInt(m_idef_update_depth); // version 1.6 fields ( added 14 February 2012 ) if (rc) rc = binary_archive.WriteInt( m_idef_layer_style ); return rc; }