bool ON_UserString::Read(ON_BinaryArchive& archive) { m_key.Empty(); m_string_value.Empty(); int major_version = 0; int minor_version = 0; bool rc = archive.BeginRead3dmChunk(TCODE_ANONYMOUS_CHUNK,&major_version,&minor_version); if (!rc) return false; for(;;) { rc = ( 1 == major_version ); if (!rc) break; rc = archive.ReadString(m_key); if (!rc) break; rc = archive.ReadString(m_string_value); if (!rc) break; break; } if ( !archive.EndRead3dmChunk() ) rc = false; return rc; }
ON_BOOL32 ON_HatchPattern::Read( ON_BinaryArchive& ar) { m_hatchpattern_index = -1; memset(&m_hatchpattern_id,0,sizeof(m_hatchpattern_id)); m_type = ftSolid; m_hatchpattern_name.Empty(); m_description.Empty(); m_lines.Empty(); int i; int major_version = 0; int minor_version = 0; ON_BOOL32 rc = ar.Read3dmChunkVersion( &major_version, &minor_version); if ( major_version == 1 ) { if( rc) rc = ar.ReadInt( &m_hatchpattern_index); i = 0; if( rc) rc = ar.ReadInt( &i); if( rc) { switch( i) { case 0: m_type = ftSolid; break; case 1: m_type = ftLines; break; case 2: m_type = ftGradient; break; default: rc = false; break; } } if( rc) rc = ar.ReadString( m_hatchpattern_name); if( rc) rc = ar.ReadString( m_description); if( rc) { if( m_type == ftLines) { m_lines.Empty(); int count = 0; rc = ar.ReadInt( &count); if( rc && count > 0 ) { m_lines.SetCapacity( count); int i; for( i = 0; rc && i < count; i++) { ON_HatchLine& line = m_lines.AppendNew(); rc = line.Read( ar); } } } } if ( minor_version >= 2 ) { rc = ar.ReadUuid(m_hatchpattern_id); } } return rc; }
ON_BOOL32 ON_3dmApplication::Read( ON_BinaryArchive& file ) { int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion( &major_version, &minor_version ); if (rc) rc = file.ReadString( m_application_name ); if (rc) rc = file.ReadString( m_application_URL ); if (rc) rc = file.ReadString( m_application_details ); return rc; }
ON_BOOL32 ON_3dmRevisionHistory::Read( ON_BinaryArchive& file ) { Default(); int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion( &major_version, &minor_version ); if ( rc && major_version == 1 ) { rc = file.ReadString( m_sCreatedBy ); if (rc) rc = file.ReadTime( m_create_time ); if (rc) rc = file.ReadString( m_sLastEditedBy ); if (rc) rc = file.ReadTime(m_last_edit_time ); if (rc) rc = file.ReadInt( &m_revision_count ); } return rc; }
bool ON_PlugInRef::Read( ON_BinaryArchive& file ) { Default(); int major_version = 0; int minor_version = 0; bool rc = file.BeginRead3dmChunk( TCODE_ANONYMOUS_CHUNK, &major_version, &minor_version); if (rc) { if( 1 == major_version && minor_version >= 0 ) { //version 1.0 fields if (rc) rc = file.ReadUuid(m_plugin_id); if (rc) rc = file.ReadInt(&m_plugin_type); if (rc) rc = file.ReadString(m_plugin_name); if (rc) rc = file.ReadString(m_plugin_version); if (rc) rc = file.ReadString(m_plugin_filename); if ( minor_version >= 1) { // version 1.1 fields if (rc) rc = file.ReadString(m_developer_organization); if (rc) rc = file.ReadString(m_developer_address); if (rc) rc = file.ReadString(m_developer_country); if (rc) rc = file.ReadString(m_developer_phone); if (rc) rc = file.ReadString(m_developer_email); if (rc) rc = file.ReadString(m_developer_website); if (rc) rc = file.ReadString(m_developer_updateurl); if (rc) rc = file.ReadString(m_developer_fax); if ( minor_version >= 2 ) { if (rc) rc = file.ReadInt(&m_plugin_platform); if (rc) rc = file.ReadInt(&m_plugin_sdk_version); if (rc) rc = file.ReadInt(&m_plugin_sdk_service_release); } } } else { rc = false; } if( !file.EndRead3dmChunk() ) rc = false; } return rc; }
bool ON_Group::Internal_ReadV5( ON_BinaryArchive& file // restore definition from binary archive ) { *this = ON_Group::Unset; int major_version = 0; int minor_version = 0; bool rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( major_version == 1 ) { int group_index = Index(); if (rc) rc = file.ReadInt( &group_index ); if (rc) SetIndex(group_index); ON_wString group_name; if (rc) rc = file.ReadString( group_name ); if (rc) SetName(group_name); if ( minor_version >= 1 ) { ON_UUID group_id = ON_nil_uuid; if (rc) rc = file.ReadUuid( group_id ); if (rc) SetId(group_id); } if (rc && IdIsNil() ) { // modern times require unique ids. SetId(); } } else rc = false; return rc; }
// virtual ON_Object override ON_BOOL32 ON__IDefAlternativePathUserData::Read(ON_BinaryArchive& binary_archive) { DestroyHelper(); int major_version = 0; int minor_version = 0; bool rc = binary_archive.BeginRead3dmChunk(TCODE_ANONYMOUS_CHUNK,&major_version,&minor_version); if ( !rc ) return false; rc = false; while ( 1 == major_version ) { if ( !binary_archive.ReadString(m_alternate_path) ) break; if ( !binary_archive.ReadBool(&m_bRelativePath) ) break; rc = true; break; } if ( !binary_archive.EndRead3dmChunk() ) rc = false; return rc; }
BOOL CSampleDocumentUserDataPlugIn::ReadDocument( CRhinoDoc& doc, ON_BinaryArchive& archive, const CRhinoFileReadOptions& options ) { // Read plug-in document data. See rhinoSdkPlugIn.h details. // If our document data is found in a 3DM file, we are // required to read it. But, we don't necessarily want // to use it. BOOL bKeepData = FALSE; BOOL bNewMode = options.Mode( CRhinoFileReadOptions::NewMode ); BOOL bOpenMode = options.Mode( CRhinoFileReadOptions::OpenMode ); // If the user is creating a new model, or opening an existing // model, we'll want to keep the document data that we read. // Otherwise, we'll read the data, but not use it. This way, // we won't overwrite out data if the user is importing geometry, // from another 3DM file. if( bNewMode || bOpenMode ) bKeepData = TRUE; if( bKeepData ) m_string_table.Empty(); // Read the major and minor version of the document data int major = 0, minor = 0; if( !archive.Read3dmChunkVersion(&major, &minor) ) return FALSE; // At this point, if we've changed the format of // our document data, we'll want to compare the // major and minor revision numbers and read our // data accordingly. if( 1 != major && 0 != minor ) return FALSE; // Read the number of string we intend to read as document data int count = 0; if( !archive.ReadInt(&count) ) return FALSE; // Read our string table as document data ON_wString str; for( int i = 0; i < count; i++ ) { if( !archive.ReadString(str) ) return FALSE; // Only append the string if we are // supposed to if( bKeepData ) m_string_table.Append(str); } return TRUE; }
ON_BOOL32 ON_Annotation::Read( ON_BinaryArchive& file ) { Destroy(); int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( rc && major_version == 1 ) { int i; if (rc) { rc = file.ReadInt( &i ); if (rc) m_type = ON::AnnotationType(i); } if (rc) rc = file.ReadPlane( m_plane ); if (rc) rc = file.ReadArray( m_points ); if (rc) rc = file.ReadString( m_usertext ); if (rc) rc = file.ReadString( m_defaulttext ); if( rc ) { rc = file.ReadInt( &i ); if (rc) m_userpositionedtext = i ? true : false; } } if( fabs( m_plane.origin.x) > REALLY_BIG_NUMBER || fabs( m_plane.origin.y) > REALLY_BIG_NUMBER || fabs( m_plane.origin.z) > REALLY_BIG_NUMBER) return false; for( int i = 0; i < m_points.Count(); i++) { if( fabs( m_points[i].x) > REALLY_BIG_NUMBER || fabs( m_points[i].y) > REALLY_BIG_NUMBER) return false; } return rc; }
BOOL CSampleObjectUserData::Read( ON_BinaryArchive& binary_archive ) { int major_version = 0; int minor_version = 0; bool rc = binary_archive.BeginRead3dmChunk( TCODE_ANONYMOUS_CHUNK, &major_version, &minor_version ); if( !rc ) return false; // Read class members like this for(;;) { rc = ( 1 == major_version ); if( !rc ) break; // version 1.0 fields rc = binary_archive.ReadPoint( m_point ); if( !rc ) break; rc = binary_archive.ReadString( m_string ); if( !rc ) break; // The code in the comment below demonstrates how to // correctly read information added in later releases // of your product. //if ( minor_version >= 1 ) //{ // // version 1.1 fields added DD MMM YYYY // rc = binary_archive.ReadSomethingNew( ... ); // if (!rc) break; // rc = binary_archive.ReadSomethingElseNew( ... ); // if (!rc) break; // // if ( minor_version >= 2 ) // { // // version 1.2 fields added DD MMM YYYY // rc = binary_archive.ReadAnotherSomethingNew( ... ); // if (!rc) break; // rc = binary_archive.ReadAnotherSomethingElseNew( ... ); // if (!rc) break; // } //} break; } // If BeginRead3dmChunk() returns true, // then EndRead3dmChunk() must be called, // even if a read operation failed. if( !binary_archive.EndRead3dmChunk() ) rc = false; return rc; }
ON_BOOL32 ON_Light::Read( ON_BinaryArchive& file ) { Default(); int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( rc && major_version == 1 ) { int i; // version 1.0 fields i = 0; if ( rc ) rc = file.ReadInt( &i ); if ( rc ) Enable(i); if ( rc ) rc = file.ReadInt( &i ); if ( rc ) SetStyle(ON::LightStyle(i)); if ( rc ) rc = file.ReadDouble( &m_intensity ); if ( rc ) rc = file.ReadDouble( &m_watts ); if ( rc ) rc = file.ReadColor( m_ambient ); if ( rc ) rc = file.ReadColor( m_diffuse ); if ( rc ) rc = file.ReadColor( m_specular ); if ( rc ) rc = file.ReadVector( m_direction ); if ( rc ) rc = file.ReadPoint( m_location ); if ( rc ) rc = file.ReadDouble( &m_spot_angle ); if ( rc ) rc = file.ReadDouble( &m_spot_exponent ); if ( rc ) rc = file.ReadVector( m_attenuation ); if ( rc ) rc = file.ReadDouble( &m_shadow_intensity ); if ( rc ) rc = file.ReadInt( &m_light_index ); if ( rc ) rc = file.ReadUuid( m_light_id ); if ( rc ) rc = file.ReadString( m_light_name ); if ( minor_version < 2 ) { // set hotspot from 1.0 or 1.1 m_spot_exponent double h = 1.0 - m_spot_exponent/128.0; if ( h < 0.0 ) h = 0.0; else if ( h > 1.0 ) h = 1.0; m_hotspot = h; m_spot_exponent = 0.0; } if ( minor_version >= 1 ) { // version 1.1 fields if ( rc ) rc = file.ReadVector( m_length ); if ( rc ) rc = file.ReadVector( m_width ); if ( minor_version >= 2 ) { // version 1.2 fields if ( rc ) rc = file.ReadDouble( &m_hotspot ); } } } return rc; }
ON_BOOL32 MyUserData::Read( ON_BinaryArchive& file ) { ON_BOOL32 rc = true; if ( rc ) rc = file.ReadInt(&m_my_int); if ( rc ) rc = file.ReadLine(m_my_line); if ( rc ) rc = file.ReadString(m_my_string); return rc; }
BOOL MyUserData::Read( ON_BinaryArchive& file ) { BOOL rc = TRUE; if ( rc ) rc = file.ReadInt(&m_my_int); if ( rc ) rc = file.ReadLine(m_my_line); if ( rc ) rc = file.ReadString(m_my_string); return rc; }
ON_BOOL32 ON_AnnotationTextDot::Read( ON_BinaryArchive& file ) { m_text.Destroy(); int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( major_version == 1 ) { if (rc) rc = file.ReadPoint( point ); if (rc) rc = file.ReadString( m_text ); } else { rc = false; } return rc; }
ON_BOOL32 ON_TextEntity::Read( ON_BinaryArchive& file ) { ON_BOOL32 rc = ON_Annotation::Read( file ); if( rc ) rc = file.ReadString( m_facename ); if( rc ) rc = file.ReadInt( &m_fontweight ); if( rc ) rc = file.ReadDouble( &m_height ); if( fabs( m_height) > REALLY_BIG_NUMBER) return false; return rc; }
ON_BOOL32 ON_3dmNotes::Read( ON_BinaryArchive& file ) { Default(); int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion( &major_version, &minor_version ); if ( rc && major_version == 1 ) { m_notes.Destroy(); rc = file.ReadInt( &m_bHTML ); if ( rc ) rc = file.ReadString( m_notes ); if ( rc ) rc = file.ReadInt( &m_bVisible ); if ( rc ) rc = file.ReadInt( &m_window_left ); if ( rc ) rc = file.ReadInt( &m_window_top ); if ( rc ) rc = file.ReadInt( &m_window_right ); if ( rc ) rc = file.ReadInt( &m_window_bottom ); } return rc; }
ON_BOOL32 ON_Linetype::Read( ON_BinaryArchive& file) { Default(); m_linetype_index = -1; int major_version=0; int minor_version=0; bool rc = file.BeginRead3dmChunk( TCODE_ANONYMOUS_CHUNK, &major_version, &minor_version ); if (rc) { if( 1 == major_version ) { // chunk version 1.0 fields if( rc) rc = file.ReadInt( &m_linetype_index ); if( rc) rc = file.ReadString( m_linetype_name ); if( rc) rc = file.ReadArray( m_segments ); if ( minor_version >= 1 ) { if (rc) rc = file.ReadUuid( m_linetype_id ); } } else { rc = false; } if ( !file.EndRead3dmChunk() ) rc = false; } return rc; }
ON_BOOL32 ON_Group::Read( ON_BinaryArchive& file // restore definition from binary archive ) { m_group_index = -1; m_group_name.Empty(); memset(&m_group_id,0,sizeof(m_group_id)); int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( major_version == 1 ) { if (rc) rc = file.ReadInt( &m_group_index ); if (rc) rc = file.ReadString( m_group_name ); if ( minor_version >= 1 ) { if (rc) rc = file.ReadUuid( m_group_id ); } } else rc = false; return rc; }
bool ON_3dmNotes::Read( ON_BinaryArchive& file ) { *this = ON_3dmNotes::Empty; bool rc = false; for(;;) { int i; int major_version = 0; int minor_version = 0; if ( !file.Read3dmChunkVersion( &major_version, &minor_version ) ) break; if ( 1 != major_version == 1 ) break; i = m_bHTML; if ( !file.ReadInt( &i ) ) break; m_bHTML = i ? true : false; if (!file.ReadString( m_notes )) break; i = m_bVisible; if (!file.ReadInt( &i )) break; m_bVisible = i ? true : false; if (!file.ReadInt( &m_window_left )) break; if (!file.ReadInt( &m_window_top )) break; if (!file.ReadInt( &m_window_right )) break; if (!file.ReadInt( &m_window_bottom )) break; rc = true; break; } return rc; }
ON_BOOL32 ON_InstanceDefinition::Read( ON_BinaryArchive& binary_archive ) { int major_version = 0; int minor_version = 0; m_idef_layer_style = 0; m_us.m_custom_unit_scale = 0.0; m_us.m_custom_unit_name.Destroy(); m_us.m_unit_system = ON::no_unit_system; m_source_bRelativePath = false; m_source_archive.Destroy(); bool rc = binary_archive.Read3dmChunkVersion(&major_version,&minor_version); if ( rc ) { if ( major_version != 1 ) rc = false; // version 1.0 fields if ( rc ) rc = binary_archive.ReadUuid( m_uuid ); if ( rc ) rc = binary_archive.ReadArray( m_object_uuid ); if ( rc ) rc = binary_archive.ReadString( m_name ); if ( rc ) rc = binary_archive.ReadString( m_description ); if ( rc ) rc = binary_archive.ReadString( m_url ); if ( rc ) rc = binary_archive.ReadString( m_url_tag ); if ( rc ) rc = binary_archive.ReadBoundingBox( 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 unsigned int source = m_idef_update_type; if ( rc ) rc = binary_archive.ReadInt( &source ); if( rc) m_idef_update_type = ON_InstanceDefinition::IdefUpdateType(source); if ( rc ) rc = binary_archive.ReadString( m_source_archive ); // version 1.1 fields if ( minor_version >= 1 ) { if ( rc ) rc = m_source_archive_checksum.Read( binary_archive ); } // version 1.2 fields if ( minor_version >= 2 ) { int us = ON::no_unit_system; if ( rc ) rc = binary_archive.ReadInt( &us ); m_us.m_unit_system = ON::UnitSystem(us); if ( ON::custom_unit_system != m_us.m_unit_system && ON::no_unit_system != m_us.m_unit_system ) { m_us.m_custom_unit_scale = ON::UnitScale( m_us.m_unit_system, ON::meters ); } else { m_us.m_custom_unit_scale = 0.0; } if ( minor_version >= 3 ) { // version 1.3 fields - added 6 March 2006 //int us = ON::no_unit_system; if ( rc ) rc = binary_archive.ReadDouble( &m_us.m_custom_unit_scale ); if ( rc ) rc = binary_archive.ReadBool( &m_source_bRelativePath ); if ( rc && minor_version >= 4 ) { rc = m_us.Read(binary_archive); if (rc && minor_version >= 5 ) { rc = binary_archive.ReadInt(&m_idef_update_depth); if ( rc && minor_version >= 6 ) { unsigned int i = 0; rc = binary_archive.ReadInt(&i); if ( i && i > 0 && i < 256 ) m_idef_layer_style = (unsigned char)i; } } } } } if ( ON_InstanceDefinition::embedded_def == m_idef_update_type ) { // 7 February 2012 // "embedded_def" is obsolete. if (m_source_archive.Length() > 0 ) m_idef_update_type = ON_InstanceDefinition::linked_and_embedded_def; else DestroySourceArchive(); // convert to static } if ( ON_InstanceDefinition::linked_def == m_idef_update_type ) { if ( m_idef_layer_style < 1 || m_idef_layer_style > 2 ) { // The goal of the next if/else clause is for Rhino users // to see what they saw when they created the file. if ( binary_archive.Archive3dmVersion() < 50 ) { // V4 linked blocks and early V5 linked blocks treated // layers and materials the way newer "active" idefs work, // so when I read an archive with version < 50, the // default will be 1 for "active". m_idef_layer_style = 1; } else { // The more recent V5 linked blocks treated layers and materials // the way "reference" style idefs work, so when I read an // archive with version >= 50 (meaning recent V5), the default // will be 2 for "reference". m_idef_layer_style = 2; } } } else { m_idef_layer_style= 0; } } return rc; }
ON_BOOL32 ON_3dmObjectAttributes::Read( ON_BinaryArchive& file ) { Default(); if ( file.Archive3dmVersion() >= 5 && file.ArchiveOpenNURBSVersion() >= 200712190 ) { return ReadV5Helper(file); } int i; int major_version = 0; int minor_version = 0; bool rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( rc && major_version == 1 ) { if (rc) rc = file.ReadUuid(m_uuid); if (rc) rc = file.ReadInt(&m_layer_index); if (rc) rc = file.ReadInt(&m_material_index); if (rc) rc = file.ReadColor(m_color); while(rc) { // OBSOLETE if (rc) rc = file.ReadLineStyle(m_line_style); // 23 March 2005 Dale Lear // replaced with short s = 0; double x; rc = file.ReadShort(&s); if (!rc) break; if ( file.Archive3dmVersion() < 4 || file.ArchiveOpenNURBSVersion() < 200503170 ) { // ignore unused linestyle info in old files // This bit keeps the curve arrowheads from V3 showing up // in V4. m_object_decoration = ON::ObjectDecoration( (s & ON::both_arrowhead) ); } rc = file.ReadShort(&s); if (!rc) break; rc = file.ReadDouble(&x); if (!rc) break; rc = file.ReadDouble(&x); break; } if (rc) rc = file.ReadInt(&m_wire_density); if (rc) rc = file.ReadChar(&m_mode); if (rc) rc = file.ReadChar(&m_color_source); if (rc) m_color_source = (unsigned char)ON::ObjectColorSource(m_color_source); if (rc) rc = file.ReadChar(&m_linetype_source); if (rc) m_linetype_source = (unsigned char)ON::ObjectLinetypeSource(m_linetype_source); if (rc) rc = file.ReadChar(&m_material_source); if (rc) m_material_source = (unsigned char)ON::ObjectMaterialSource(m_material_source); if (rc) rc = file.ReadString(m_name); if (rc) rc = file.ReadString(m_url); m_bVisible = (Mode() != ON::hidden_object); if ( rc && minor_version >= 1 ) { rc = file.ReadArray( m_group ); if ( rc && minor_version >= 2 ) { rc = file.ReadBool(&m_bVisible); if ( rc && minor_version >= 3 ) { rc = file.ReadArray(m_dmref); if (rc && minor_version >= 4 ) { // 23 March 2005 Dale Lear // Added m_plot_color_source and m_plot_color i = 0; if (rc) rc = file.ReadInt(&i); if (rc) m_object_decoration = ON::ObjectDecoration(i); if (rc) rc = file.ReadChar(&m_plot_color_source); if (rc) m_plot_color_source = (unsigned char)ON::PlotColorSource(m_plot_color_source); if (rc) rc = file.ReadColor( m_plot_color ); if (rc) rc = file.ReadChar(&m_plot_weight_source); if (rc) m_plot_weight_source = (unsigned char)ON::PlotWeightSource(m_plot_weight_source); if (rc) rc = file.ReadDouble(&m_plot_weight_mm); if (rc && minor_version >= 5 ) { // version 1.5 fields 11 April 2005 if (rc) rc = file.ReadInt(&m_linetype_index); // version 1.6 fields 2 September 2005 if (rc && minor_version >= 6 ) { unsigned char uc = 0; rc = file.ReadChar(&uc); if (rc) { m_space = (1 == uc) ? ON::page_space : ON::model_space; m_dmref.Empty(); int i, count=0; rc = file.ReadInt(&count); if (rc && count > 0) { m_dmref.SetCapacity(count); for ( i = 0; i < count && rc; i++) { ON_DisplayMaterialRef& dmr = m_dmref.AppendNew(); rc = file.ReadUuid(dmr.m_viewport_id); if (rc) rc = file.ReadUuid(dmr.m_display_material_id); if ( rc ) { // Assigning an object to a page started out as // using dmrs. The way the runtime info is saved // has changed, but, at this point, I can't change // the way the information is saved in the file and // it doesn't matter. if ( 0 == ON_UuidCompare(&ON_ObsoletePageSpaceObjectId,&dmr.m_display_material_id) ) { m_viewport_id = dmr.m_viewport_id; m_dmref.Remove(); } } } if ( 0 == m_dmref.Count() ) m_dmref.Destroy(); } } if ( rc && minor_version >= 7 ) { // version 1.7 fields 6 June 2006 if (rc) rc = m_rendering_attributes.Read(file); } } } } } } } } else { rc = false; } return rc; }
bool ON_3dmObjectAttributes::ReadV5Helper( ON_BinaryArchive& file ) { unsigned char itemid, c; int major_version = 0; int minor_version = 0; bool rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( rc && 2 != major_version ) rc = false; itemid = 0xFF; while(rc) { if (!rc) break; rc = file.ReadUuid(m_uuid); if (!rc) break; rc = file.ReadInt(&m_layer_index); if (!rc) break; // read non-default settings - skip everything else rc = file.ReadChar(&itemid); if (!rc) break; if ( 0 == itemid ) break; if ( 1 == itemid ) { rc = file.ReadString(m_name); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 2 == itemid ) { rc = file.ReadString(m_url); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 3 == itemid ) { rc = file.ReadInt(&m_linetype_index); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 4 == itemid ) { rc = file.ReadInt(&m_material_index); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 5 == itemid ) { rc = m_rendering_attributes.Read(file); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 6 == itemid ) { rc = file.ReadColor(m_color); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 7 == itemid ) { rc = file.ReadColor(m_plot_color); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 8 == itemid ) { rc = file.ReadDouble(&m_plot_weight_mm); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 9 == itemid ) { rc = file.ReadChar(&c); if (!rc) break; m_object_decoration = ON::ObjectDecoration(c); rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 10 == itemid ) { rc = file.ReadInt(&m_wire_density); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 11 == itemid ) { rc = file.ReadBool(&m_bVisible); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 12 == itemid ) { rc = file.ReadChar(&m_mode); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 13 == itemid ) { rc = file.ReadChar(&m_color_source); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 14 == itemid ) { rc = file.ReadChar(&m_plot_color_source); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 15 == itemid ) { rc = file.ReadChar(&m_plot_weight_source); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 16 == itemid ) { rc = file.ReadChar(&m_material_source); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 17 == itemid ) { rc = file.ReadChar(&m_linetype_source); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 18 == itemid ) { rc = file.ReadArray(m_group); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 19 == itemid ) { rc = file.ReadChar(&c); if (!rc) break; m_space = ON::ActiveSpace(c); rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 20 == itemid ) { rc = file.ReadUuid(m_viewport_id); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( 21 == itemid ) { rc = file.ReadArray(m_dmref); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } // items 1 - 21 are in chunk version 2.0 files if ( minor_version <= 0 ) break; // 28 Nov. 2009 - S. Baer // Added m_display_order to version 2.1 files if ( 22 == itemid ) { rc = file.ReadInt(&m_display_order); if (!rc) break; rc = file.ReadChar(&itemid); if ( !rc || 0 == itemid ) break; } if ( minor_version <= 1 ) break; // Add new item reading above this code, and increment the "22" // in the following if statement to an appropriate value, and // update the comment. Be sure to test reading of old and // new files by old and new code, before checking in your // changes. // if ( itemid > 22 ) { // we are reading file written with code newer // than this code (minor_version > 1) itemid = 0; } break; } if ( rc && 0 != itemid ) { ON_ERROR("Bug in ON_3dmObjectAttributes::ReadV5Helper or WriteV5Helper"); } return rc; }
ON_BOOL32 CExampleWriteUserData::Read(ON_BinaryArchive& file) { return file.ReadString(m_str); }
ON_BOOL32 ON_InstanceDefinition::Read( ON_BinaryArchive& binary_archive ) { int major_version = 0; int minor_version = 0; m_us.m_custom_unit_scale = 0.0; m_us.m_custom_unit_name.Destroy(); m_us.m_unit_system = ON::no_unit_system; m_source_bRelativePath = false; m_source_archive.Destroy(); bool rc = binary_archive.Read3dmChunkVersion(&major_version,&minor_version); if ( rc ) { if ( major_version != 1 ) rc = false; // version 1.0 fields if ( rc ) rc = binary_archive.ReadUuid( m_uuid ); if ( rc ) rc = binary_archive.ReadArray( m_object_uuid ); if ( rc ) rc = binary_archive.ReadString( m_name ); if ( rc ) rc = binary_archive.ReadString( m_description ); if ( rc ) rc = binary_archive.ReadString( m_url ); if ( rc ) rc = binary_archive.ReadString( m_url_tag ); if ( rc ) rc = binary_archive.ReadBoundingBox( 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 unsigned int source = m_idef_update_type; if ( rc ) rc = binary_archive.ReadInt( &source ); if( rc) m_idef_update_type = ON_InstanceDefinition::IdefUpdateType(source); if ( rc ) rc = binary_archive.ReadString( m_source_archive ); // version 1.1 fields if ( minor_version >= 1 ) { if ( rc ) rc = m_source_archive_checksum.Read( binary_archive ); } // version 1.2 fields if ( minor_version >= 2 ) { int us = ON::no_unit_system; if ( rc ) rc = binary_archive.ReadInt( &us ); m_us.m_unit_system = ON::UnitSystem(us); if ( ON::custom_unit_system != m_us.m_unit_system && ON::no_unit_system != m_us.m_unit_system ) { m_us.m_custom_unit_scale = ON::UnitScale( m_us.m_unit_system, ON::meters ); } else { m_us.m_custom_unit_scale = 0.0; } if ( minor_version >= 3 ) { // version 1.3 fields - added 6 March 2006 //int us = ON::no_unit_system; if ( rc ) rc = binary_archive.ReadDouble( &m_us.m_custom_unit_scale ); if ( rc ) rc = binary_archive.ReadBool( &m_source_bRelativePath ); if ( rc && minor_version >= 4 ) { rc = m_us.Read(binary_archive); if (rc && minor_version >= 5 ) { rc = binary_archive.ReadInt(&m_idef_update_depth); } } } } } return rc; }
BOOL ON_Layer::Read( ON_BinaryArchive& file // restore definition from binary archive ) { int obsolete_value1 = 0; // see ON_Layer::Write int major_version=0; int minor_version=0; int mode = ON::normal_layer; Default(); BOOL rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( rc && major_version == 1 ) { // common to all 1.x formats if ( rc ) rc = file.ReadInt( &mode ); if ( rc ) { switch(mode) { case 0: // OBSOLETE ON::normal_layer m_bVisible = true; m_bLocked = false; break; case 1: // OBSOLETE ON::hidden_layer m_bVisible = false; m_bLocked = false; break; case 2: // OBSOLETE ON::locked_layer m_bVisible = true; m_bLocked = true; break; default: m_bVisible = true; m_bLocked = false; break; } } if ( rc ) rc = file.ReadInt( &m_layer_index ); if ( rc ) rc = file.ReadInt( &m_iges_level ); if ( rc ) rc = file.ReadInt( &m_material_index ); if ( rc ) rc = file.ReadInt( &obsolete_value1 ); if ( rc ) rc = file.ReadColor( m_color ); { // OBSOLETE line style was never used - read and discard the next 20 bytes short s; double x; if (rc) file.ReadShort(&s); if (rc) file.ReadShort(&s); if (rc) file.ReadDouble(&x); if (rc) file.ReadDouble(&x); } if ( rc ) rc = file.ReadString( m_name ); if ( rc && minor_version >= 1 ) { rc = file.ReadBool(&m_bVisible); if ( rc && minor_version >= 2 ) { rc = file.ReadInt( &m_linetype_index); if (rc && minor_version >= 3 ) { // 23 March 2005 Dale Lear rc = file.ReadColor( m_plot_color); if (rc) rc = file.ReadDouble( &m_plot_weight_mm); if (rc && minor_version >= 4 ) { rc = file.ReadBool(&m_bLocked); if (rc && minor_version >= 5 ) { rc = file.ReadUuid(m_layer_id); if ( rc && minor_version >= 6 && file.ArchiveOpenNURBSVersion() > 200505110 ) { // Some files saved with opennurbs version 200505110 // do not contain correctly written m_parent_layer_id // and m_bExpanded values. // It is ok to default these values. rc = file.ReadUuid(m_parent_layer_id); if (rc) rc = file.ReadBool(&m_bExpanded); } if ( rc && minor_version >= 7 ) { // 1.7 field - added 6 June 2006 rc = m_rendering_attributes.Read(file); if ( rc && minor_version >= 8 ) { // 1.8 field - added 19 Sep 2006 rc = file.ReadUuid(m_display_material_id); } } } } } } } if ( ON_UuidIsNil(m_layer_id) ) { // old files didn't have layer ids and we need unique ones. ON_CreateUuid(m_layer_id); } } else { ON_ERROR("ON_Layer::Read() encountered a layer written by future code."); rc = false; } return rc; }
ON_BOOL32 ON_Font::Read( ON_BinaryArchive& file // restore definition from binary archive ) { Defaults(); m_font_index = -1; int major_version = 0; int minor_version = 0; bool rc = file.Read3dmChunkVersion(&major_version,&minor_version); if ( rc && major_version == 1 ) { int i; for(;;) { rc = file.ReadInt( &m_font_index ); if (!rc) break; rc = file.ReadString( 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 ReadShort(64,...) so old files will remain valid. unsigned short sh[64]; rc = file.ReadShort(64, sh); if (!rc) break; wchar_t facename[65]; for ( i = 0; i < 64; i++ ) { facename[i] = sh[i]; } facename[64] = 0; SetFontFaceName(facename); } if( minor_version >= 1 ) { rc = file.ReadInt( &i ); if (!rc) break; SetFontWeight(i); rc = file.ReadInt( &i); if (!rc) break; SetIsItalic(i?true:false); rc = file.ReadDouble( &m_linefeed_ratio ); if (!rc) break; if ( minor_version >= 2 ) { rc = file.ReadUuid( m_font_id ); if (!rc) break; } //if ( minor_version >= 3 ) //{ // rc = file.ReadInt( &i); // if (!rc) break; // SetUnderlined(i?true:false); //} } break; } } else { ON_ERROR("ON_Font::Read - get newer version of opennurbs"); rc = false; } return rc; }
bool ON_3dmProperties::Read(ON_BinaryArchive& file ) { *this = ON_3dmProperties::Empty; bool rc = true; unsigned int tcode; ON__INT64 value; for(;;) { rc = file.BeginRead3dmBigChunk( &tcode, &value ); if ( !rc ) break; switch(tcode) { case TCODE_PROPERTIES_OPENNURBS_VERSION: { unsigned int opennurbs_version = 0; if ( value > 0 && value <= 0xFFFFFFFFll) { opennurbs_version = (unsigned int)((ON__UINT64)value); } if ( !ON_VersionNumberIsValid(opennurbs_version) && !ON_VersionNumberIsYearMonthDateFormat(file.Archive3dmVersion(),opennurbs_version) ) { ON_ERROR("ON_3dmProperties::Read - TCODE_PROPERTIES_OPENNURBS_VERSION corrupt value"); rc = false; } ON_SetBinaryArchiveOpenNURBSVersion(file,opennurbs_version); } break; case TCODE_PROPERTIES_AS_FILE_NAME: rc = file.ReadString(m_3dmArchiveFullPathName); break; case TCODE_PROPERTIES_REVISIONHISTORY: // file creation/revision information rc = m_RevisionHistory.Read(file); break; case TCODE_PROPERTIES_NOTES: // file notes rc = m_Notes.Read(file); break; case TCODE_PROPERTIES_PREVIEWIMAGE: // uncompressed preview image rc = m_PreviewImage.ReadUncompressed(file); break; case TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE: // compressed preview image rc = m_PreviewImage.ReadCompressed(file); break; case TCODE_PROPERTIES_APPLICATION: // application that created 3dm file rc = m_Application.Read(file); break; default: // information added in future will be skipped by file.EndRead3dmChunk() break; } if ( !file.EndRead3dmChunk() ) rc = false; if (!rc) break; if ( TCODE_ENDOFTABLE == tcode ) break; } return rc; }