BOOL ON_BrepLoopArray::Read( ON_BinaryArchive& file ) { Empty(); unsigned int tcode = 0; int count = 0; int i; int major_version = 0; int minor_version = 0; BOOL rc = file.BeginRead3dmChunk( &tcode, &i ); if (rc) { if (tcode != TCODE_ANONYMOUS_CHUNK) rc = false; if (rc) rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc) { if ( major_version==1 ) { if (rc) rc = file.ReadInt(&count); SetCapacity(count); for ( i = 0; i < count && rc ; i++ ) { ON_BrepLoop& loop = AppendNew(); rc = loop.Read(file); } } else { rc = 0; } } if ( !file.EndRead3dmChunk() ) rc = false; } return rc; }
ON_BOOL32 ON__OBSOLETE__CircleCurve::Read( ON_BinaryArchive& file // open binary file ) { int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc) { if (major_version==1) { // common to all 1.x versions ON_Circle circle; rc = file.ReadCircle( circle ); m_arc = circle; if (rc) rc = file.ReadInterval( m_t ); if (rc) rc = file.ReadInt(&m_dim); if ( m_dim != 2 && m_dim != 3 ) m_dim = 3; } } return rc; }
ON_BOOL32 ON_BrepLoopArray::Read( ON_BinaryArchive& file ) { Empty(); ON__UINT32 tcode = 0; ON__INT64 length_TCODE_ANONYMOUS_CHUNK = 0; int count = 0; int i; int major_version = 0; int minor_version = 0; bool rc = file.BeginRead3dmBigChunk( &tcode, &length_TCODE_ANONYMOUS_CHUNK ); if (rc) { if (tcode != TCODE_ANONYMOUS_CHUNK) rc = false; if (rc) rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc) { if ( major_version==1 ) { if (rc) rc = file.ReadInt(&count); SetCapacity(count); for ( i = 0; i < count && rc ; i++ ) { ON_BrepLoop& loop = AppendNew(); rc = loop.Read(file) ? true : false; } } else { rc = 0; } } 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; }
ON_BOOL32 ON_PlaneSurface::Read( ON_BinaryArchive& file // open binary file ) { int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc && major_version == 1) { // common to all 1.x formats if (rc) rc = file.ReadPlane( m_plane ); if (rc) rc = file.ReadInterval( m_domain[0] ); if (rc) rc = file.ReadInterval( m_domain[1] ); m_extents[0] = m_domain[0]; m_extents[1] = m_domain[1]; if ( minor_version >= 1 ) { if (rc) rc = file.ReadInterval( m_extents[0] ); if (rc) rc = file.ReadInterval( m_extents[1] ); } } return rc; }
ON_BOOL32 ON_ArcCurve::Read( ON_BinaryArchive& file // open binary file ) { int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc) { if (major_version==1) { // common to all 1.x versions rc = file.ReadArc( m_arc ); if (rc) rc = file.ReadInterval( m_t ); if (rc) rc = file.ReadInt(&m_dim); if ( m_dim != 2 && m_dim != 3 ) m_dim = 3; } else rc = 0; } 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; }
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_Point::Read( ON_BinaryArchive& file ) { int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc && major_version==1) { // common to all 1.x versions rc = file.ReadPoint(point); } 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 ON_LineCurve::Read( ON_BinaryArchive& file // open binary file ) { int major_version = 0; int minor_version = 0; ON_BOOL32 rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc && major_version==1) { // common to all 1.x versions rc = file.ReadLine( m_line ); if (rc) rc = file.ReadInterval( m_t ); if (rc) rc = file.ReadInt(&m_dim); } 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_AnnotationArrow::Read(ON_BinaryArchive& file) { 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( m_tail ); if (rc) rc = file.ReadPoint( m_head ); } else { rc = false; } 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; }
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; }
BOOL ON_HatchLine::Read( ON_BinaryArchive& ar) { m_angle = 0.0; m_base.Set( 0.0, 0.0); m_offset.Set( 0.0, 1.0); m_dashes.Empty(); int major_version = 0; int minor_version = 0; BOOL rc = ar.Read3dmChunkVersion( &major_version, &minor_version); if ( major_version == 1 ) { if ( rc) rc = ar.ReadDouble( &m_angle); if ( rc) rc = ar.ReadPoint( m_base); if ( rc) rc = ar.ReadVector( m_offset); if ( rc) rc = ar.ReadArray( m_dashes); } return rc; }
ON_BOOL32 ON_BrepFaceArray::Read( ON_BinaryArchive& file ) { Empty(); ON__UINT32 tcode = 0; ON__INT64 length_TCODE_ANONYMOUS_CHUNK = 0; int count = 0; int i; int major_version = 0; int minor_version = 0; bool rc = file.BeginRead3dmBigChunk( &tcode, &length_TCODE_ANONYMOUS_CHUNK ); if (rc) { if (tcode != TCODE_ANONYMOUS_CHUNK) rc = false; if (rc) rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc) { if ( major_version==1 ) { if (rc) rc = file.ReadInt(&count); SetCapacity(count); for ( i = 0; i < count && rc ; i++ ) { ON_BrepFace& face = AppendNew(); rc = face.Read(file)?true:false; } if ( minor_version >= 1 ) { // chunk version 1.1 and later has face uuids for ( i = 0; i < count && rc; i++ ) { rc = file.ReadUuid( m_a[i].m_face_uuid ); } } } else { rc = 0; } } if ( !file.EndRead3dmChunk() ) rc = false; } return rc; }
ON_BOOL32 ON_SurfaceArray::Read( ON_BinaryArchive& file ) { int major_version = 0; int minor_version = 0; ON__UINT32 tcode = 0; ON__INT64 big_value = 0; int flag; Destroy(); ON_BOOL32 rc = file.BeginRead3dmBigChunk( &tcode, &big_value ); if (rc) { rc = ( tcode == TCODE_ANONYMOUS_CHUNK ); if (rc) rc = file.Read3dmChunkVersion(&major_version,&minor_version); if (rc && major_version == 1) { ON_Object* p; int count; ON_BOOL32 rc = file.ReadInt( &count ); if (rc) { SetCapacity(count); SetCount(count); Zero(); int i; for ( i = 0; rc && i < count && rc; i++ ) { flag = 0; rc = file.ReadInt(&flag); if (rc && flag==1) { p = 0; rc = file.ReadObject( &p ); // polymorphic surfaces m_a[i] = ON_Surface::Cast(p); if ( !m_a[i] ) delete p; } } } } else { rc = false; } if ( !file.EndRead3dmChunk() ) rc = false; } return rc; }
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; }
ON_BOOL32 ON_InstanceRef::Read( ON_BinaryArchive& binary_archive ) { int major_version = 0; int minor_version = 0; bool rc = binary_archive.Read3dmChunkVersion(&major_version,&minor_version); if ( rc ) { if ( major_version != 1 ) rc = false; if (rc ) rc = binary_archive.ReadUuid( m_instance_definition_uuid ); if ( rc ) rc = binary_archive.ReadXform( m_xform ); if ( rc ) rc = binary_archive.ReadBoundingBox( m_bbox ); } return rc; }
ON_BOOL32 ON_PointCloud::Read( ON_BinaryArchive& file ) { 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.ReadArray( m_P ); if (rc) rc = file.ReadPlane( m_plane ); if (rc) rc = file.ReadBoundingBox( m_bbox ); if (rc) rc = file.ReadInt( &m_flags); if (rc && minor_version >= 1 ) { if (rc) rc = file.ReadArray( m_N ); if (rc) rc = file.ReadArray( m_C ); } } return rc; }
BOOL ON_Hatch::Read( ON_BinaryArchive& ar) { m_plane.CreateFromNormal( ON_origin, ON_zaxis); m_pattern_scale = 1.0; m_pattern_rotation = 0.0; m_pattern_index = -1; m_loops.Empty(); int major_version = 0; int minor_version = 0; BOOL rc = ar.Read3dmChunkVersion( &major_version, &minor_version); if ( major_version == 1 ) { if( rc) rc = ar.ReadPlane( m_plane); if( rc) rc = ar.ReadDouble( &m_pattern_scale); if( rc) rc = ar.ReadDouble( &m_pattern_rotation); if( rc) rc = ar.ReadInt( &m_pattern_index); if( rc) { m_loops.Empty(); int i, count = 0; rc = ar.ReadInt( &count); if( rc && count > 0) { m_loops.SetCapacity( count ); for( i = 0; rc && i < count; i++) { ON_HatchLoop*& pLoop = m_loops.AppendNew(); pLoop = new ON_HatchLoop; if( pLoop) rc = pLoop->Read( ar); else rc = false; } } } } return rc; }
BOOL ON_HatchLoop::Read( ON_BinaryArchive& ar) { m_type = ltOuter; delete m_p2dCurve; m_p2dCurve = NULL; int major_version = 0; int minor_version = 0; BOOL rc = ar.Read3dmChunkVersion( &major_version, &minor_version); if ( major_version == 1 ) { int type; if( rc) rc = ar.ReadInt( &type); if( rc) { switch( type) { case ltOuter: m_type = ltOuter; break; case ltInner: m_type = ltInner; break; default: rc = false; break; } } if( rc) { ON_Object* pObj = NULL; rc = ar.ReadObject( &pObj); if( pObj) { m_p2dCurve = ON_Curve::Cast( pObj); if( !m_p2dCurve) // read something, but it wasn't right { rc = false; delete pObj; } } } } 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_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; }
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; }
BOOL ON_Brep::Read( ON_BinaryArchive& file ) { int i; int C2_count = 0; int C3_count = 0; int S_count = 0; int major_version = 0; int minor_version = 0; BOOL rc = file.Read3dmChunkVersion( &major_version, &minor_version ); if ( rc && major_version == 2 ) { rc = ReadOld200(file,minor_version); // legacy trimmed face } else if ( rc && major_version == 3 ) { // 2d curves if (rc) rc = m_C2.Read(file); C2_count = m_C2.Count(); // 3d curves if (rc) rc = m_C3.Read(file); C3_count = m_C3.Count(); // untrimmed surfaces if (rc) rc = m_S.Read(file); S_count = m_S.Count(); // vertices if (rc) rc = m_V.Read(file); // edges if (rc) { rc = m_E.Read(file); if (rc) { for ( i = 0; i < m_E.Count(); i++ ) { ON_BrepEdge& e = m_E[i]; e.m_brep = this; if ( e.m_c3i >= 0 && e.m_c3i < C3_count ) { bool bProxyCurveIsReversed = e.ProxyCurveIsReversed(); ON_Interval pdom = e.ProxyCurveDomain(); ON_Interval edom = e.Domain(); e.SetProxyCurve( m_C3[e.m_c3i], pdom ); if ( bProxyCurveIsReversed ) e.ON_CurveProxy::Reverse(); e.SetDomain(edom); } } } } // trims if (rc) { rc = m_T.Read(file); if (rc) { for ( i = 0; i < m_T.Count(); i++ ) { ON_BrepTrim& trim = m_T[i]; trim.m_brep = this; if ( trim.m_c2i >= 0 && trim.m_c2i < C2_count ) { bool bProxyCurveIsReversed = trim.ProxyCurveIsReversed(); ON_Interval pdom = trim.ProxyCurveDomain(); ON_Interval tdom = trim.Domain(); trim.SetProxyCurve( m_C2[trim.m_c2i], pdom ); if ( bProxyCurveIsReversed ) trim.ON_CurveProxy::Reverse(); trim.SetDomain(tdom); } } } } // loops if (rc) { rc = m_L.Read(file); if ( rc ) { for ( i = 0; i < m_L.Count(); i++ ) { m_L[i].m_brep = this; } } } // faces if (rc) { rc = m_F.Read(file); if (rc) { for ( i = 0; i < m_F.Count(); i++ ) { ON_BrepFace& f = m_F[i]; f.m_brep = this; if ( f.m_si >= 0 && f.m_si < S_count ) f.SetProxySurface(m_S[f.m_si]); } } } // bounding box if (rc) rc = file.ReadPoint( m_bbox.m_min ); if (rc) rc = file.ReadPoint( m_bbox.m_max ); // fill in missing information ReadFillInMissingBoxes(*this); // end of chunk version 3.0 if (rc && minor_version >= 1 ) { // added for chunk version 3.1 ON_Object* obj; unsigned int tcode; int value, fi; unsigned char b; const int face_count = m_F.Count(); // read render meshes rc = file.BeginRead3dmChunk( &tcode, &value ); if ( rc ) { if ( tcode != TCODE_ANONYMOUS_CHUNK ) rc = false; else { for ( fi = 0; rc && fi < face_count; fi++ ) { rc = file.ReadChar(&b); if (rc && b) { rc = file.ReadObject(&obj); m_F[fi].m_render_mesh = ON_Mesh::Cast(obj); if ( !m_F[fi].m_render_mesh ) delete obj; } } } if ( !file.EndRead3dmChunk() ) rc = false; } // read analysis meshes rc = file.BeginRead3dmChunk( &tcode, &value ); if ( rc ) { if ( tcode != TCODE_ANONYMOUS_CHUNK ) rc = false; else { for ( fi = 0; rc && fi < face_count; fi++ ) { rc = file.ReadChar(&b); if (rc && b) { rc = file.ReadObject(&obj); m_F[fi].m_analysis_mesh = ON_Mesh::Cast(obj); if ( !m_F[fi].m_analysis_mesh ) delete obj; } } } if ( !file.EndRead3dmChunk() ) rc = false; } } if ( rc && minor_version >= 2 ) { rc = file.ReadInt( &m_is_solid ); if ( m_is_solid < 0 || m_is_solid >= 3 ) m_is_solid = 0; } } if ( file.ArchiveOpenNURBSVersion() < 20021002 ) { m_is_solid = 0; } return rc; }