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; }
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; }
BOOL ON_BrepVertex::Read( ON_BinaryArchive& file ) { BOOL rc = file.ReadInt( &m_vertex_index ); if ( rc ) rc = file.ReadPoint( point ); if ( rc ) rc = file.ReadArray( m_ei ); if ( rc ) rc = file.ReadDouble( &m_tolerance ); 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_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; }
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_HatchExtra::Read(ON_BinaryArchive& archive) { int major_version = 0; int minor_version = 0; bool rc = archive.BeginRead3dmChunk(TCODE_ANONYMOUS_CHUNK,&major_version,&minor_version); if(major_version != 1) rc = false; m_basepoint.Set(0.0,0.0); if(rc) rc = archive.ReadUuid(m_parent_hatch); if(rc) rc = archive.ReadPoint(m_basepoint); if(!archive.EndRead3dmChunk()) rc = false; return rc; }
bool ON_Localizer::Read(ON_BinaryArchive& archive) { Destroy(); 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; int i = no_type; rc = archive.ReadInt(&i); if ( !rc ) break; switch(i) { case sphere_type: m_type = sphere_type; break; case plane_type: m_type = plane_type; break; case cylinder_type: m_type = cylinder_type; break; case curve_type: m_type = curve_type; break; case surface_type: m_type = surface_type; break; case distance_type: m_type = distance_type; break; } rc = archive.ReadPoint(m_P); if ( !rc ) break; rc = archive.ReadVector(m_V); if ( !rc ) break; rc = archive.ReadInterval(m_d); if ( !rc ) break; int mjv = 0, mnv = 0; rc = archive.BeginRead3dmChunk(TCODE_ANONYMOUS_CHUNK,&mjv,&mnv); if (!rc) break; rc = (1 == mjv); bool bReadCurve = false; if (rc) rc = archive.ReadBool( &bReadCurve ); if ( rc && bReadCurve) { m_nurbs_curve = new ON_NurbsCurve(); rc = m_nurbs_curve->Read(archive)?true:false; } if ( !archive.EndRead3dmChunk() ) rc = false; if (!rc) break; rc = archive.BeginRead3dmChunk(TCODE_ANONYMOUS_CHUNK,&mjv,&mnv); if (!rc) break; rc = (1 == mjv); bool bReadSurface = false; rc = archive.ReadBool( &bReadSurface ); if ( rc && bReadSurface ) { m_nurbs_surface = new ON_NurbsSurface(); rc = m_nurbs_surface->Read(archive)?true:false; } if ( !archive.EndRead3dmChunk() ) rc = false; if (!rc) break; break; } if ( !archive.EndRead3dmChunk() ) rc = false; return rc; }
bool ON_Brep::ReadOld200( ON_BinaryArchive& file, int minor_version ) { bool rc = true; // read legacy trimmed surface collection from Rhino 2.0 int face_count = 0; int edge_count = 0; int loop_count = 0; int trim_count = 0; int outer_flag = 0; ON_BoundingBox bnd_2d_bbox; int i, fi, fbi, fbcnt, bti, btcnt, twin_index; int ftype_flag, btype_flag, gcon_flag, mono_flag; char b; if (rc) rc = file.ReadInt( &face_count ); if (rc) rc = file.ReadInt( &edge_count ); if (rc) rc = file.ReadInt( &loop_count ); if (rc) rc = file.ReadInt( &trim_count ); if ( face_count < 1 || edge_count < 1 || loop_count < 1 || trim_count < 1 ) rc = false; if (rc) rc = file.ReadInt( &outer_flag ); if (rc) rc = file.ReadPoint( m_bbox.m_min ); if (rc) rc = file.ReadPoint( m_bbox.m_max ); // 2d curves m_C2.Reserve(trim_count); for ( i = 0; rc && i < trim_count; i++ ) { ON_PolyCurve* curve = new ON_PolyCurve(); rc = curve->Read( file )?true:false; if ( curve->Count() == 1 ) { m_C2.Append( curve->HarvestSegment(0) ); delete curve; } else m_C2.Append( curve ); } const int c2_count = m_C2.Count(); // 3d curves m_C3.Reserve(edge_count); for ( i = 0; rc && i < edge_count; i++ ) { ON_PolyCurve* curve = new ON_PolyCurve(); rc = curve->Read( file )?true:false; if ( curve->Count() == 1 ) { m_C3.Append( curve->HarvestSegment(0) ); delete curve; } else m_C3.Append( curve ); } const int c3_count = m_C3.Count(); // make a new edge for each 3d curve m_E.Reserve(c3_count); for ( i = 0; i < c3_count && rc; i++ ) { NewEdge(i); } // 3d surfaces m_S.Reserve(face_count); for ( i = 0; rc && i < face_count; i++ ) { ON_NurbsSurface* surface = new ON_NurbsSurface(); rc = surface->Read( file )?true:false; m_S.Append( surface ); } ON_SimpleArray<int> te_index(trim_count); ON_SimpleArray<int> te_twin_index(trim_count); m_F.Reserve(face_count); m_L.Reserve(loop_count); m_T.Reserve(trim_count); for ( fi = 0; rc && fi < face_count; fi++ ) { ftype_flag = 0; fbcnt = 0; ON_BrepFace& f = NewFace(fi); if (rc) rc = file.ReadInt( &i ); // legacy face index if (rc) rc = file.ReadInt( &i ); // OBSOLETE f.m_material_index int k = f.m_bRev; if (rc) rc = file.ReadInt( &k ); if (rc) f.m_bRev = (k!=0); if (rc) rc = file.ReadInt( &ftype_flag ); if (rc) rc = file.ReadPoint( f.m_bbox.m_min ); if (rc) rc = file.ReadPoint( f.m_bbox.m_max ); if (rc) rc = file.ReadInt( &fbcnt); if (fbcnt < 1 ) rc = false; for ( fbi = 0; rc && fbi < fbcnt; fbi++ ) { btype_flag = 0; ON_BrepLoop::TYPE looptype = ON_BrepLoop::unknown; if (rc) rc = file.ReadInt( &i ); // legacy loop index if (rc) rc = file.ReadInt( &btype_flag ); switch (btype_flag) { case 0: looptype = ON_BrepLoop::outer; break; case 1: looptype = ON_BrepLoop::inner; break; case -1: looptype = ON_BrepLoop::slit; break; default: looptype = ON_BrepLoop::unknown; break; } if (rc) rc = file.ReadDouble( 2, &bnd_2d_bbox.m_min.x ); if (rc) rc = file.ReadDouble( 2, &bnd_2d_bbox.m_max.x ); btcnt = 0; if (rc) rc = file.ReadInt( &btcnt ); if (btcnt < 1 ) rc = false; ON_BrepLoop& bnd = NewLoop(looptype,f); for ( bti = 0; rc && bti < btcnt; bti++ ) { ON_BrepTrim& trim = NewTrim(false,bnd,m_T.Count()); te_index.Append(trim.m_trim_index); if (rc) rc = file.ReadInt( &i ); // legacy trim index if ( trim.m_trim_index != i ) { ON_ERROR("ON_Brep::ReadOld200 - trim.m_trim_index out of synch."); //rc = false; //break; } if (rc) rc = file.ReadInt( &twin_index ); te_twin_index.Append(twin_index); b = 0; if (rc) rc = file.ReadChar( &b ); // true if legacy trim managed 3d edge if (rc) rc = file.ReadInt( &trim.m_ei ); if (b) { if ( trim.m_ei < 0 || trim.m_ei >= c3_count ) { trim.m_ei = -1; ON_ERROR("ON_Brep::ReadOld201 - trim.m_ei out of range."); rc = false; break; } } if ( trim.m_trim_index >= 0 && trim.m_trim_index < c2_count ) trim.m_c2i = trim.m_trim_index; else { ON_ERROR("ON_Brep::ReadOld200 - trim.m_trim_index out of range."); rc = false; trim.m_c2i = -1; break; } int k = trim.m_bRev3d; if (rc) rc = file.ReadInt(&k); if (rc) trim.m_bRev3d = (k!=0); if (rc) rc = file.ReadInt(&gcon_flag); if (rc) rc = file.ReadInt(&mono_flag); if (rc) rc = file.ReadDouble(&trim.m__legacy_3d_tol); if (rc) rc = file.ReadDouble(&trim.m__legacy_2d_tol); } } } // finish hooking trims to edges if (rc) { int trim_index; for ( i = 0; i < trim_count; i++ ) { trim_index = te_index[i]; if ( trim_index >= 0 && trim_index < m_T.Count() ) continue; twin_index = te_twin_index[i]; if ( twin_index >= 0 && twin_index < m_T.Count() ) continue; ON_BrepTrim& trim1 = m_T[trim_index]; ON_BrepTrim& trim2 = m_T[twin_index]; if ( trim1.m_ei >= 0 && trim1.m_ei < c2_count && trim2.m_ei < 0 ) trim2.m_ei = trim1.m_ei; else if ( trim2.m_ei >= 0 && trim2.m_ei < c2_count && trim1.m_ei < 0 ) trim1.m_ei = trim2.m_ei; } for ( i = 0; i < m_T.Count(); i++ ) { ON_BrepTrim& trim = m_T[i]; ON_Curve* tcurve = m_C2[trim.m_c2i]; trim.SetProxyCurve( tcurve ); if ( trim.m_ei >= 0 && trim.m_ei < c3_count ) m_E[trim.m_ei].m_ti.Append(trim.m_trim_index); } // finish setting flags SetTrimIsoFlags(); SetTrimTypeFlags(); // create 3d vertex information SetVertices(); // set tols from values in file SetTolsFromLegacyValues(); } else { Destroy(); } if (rc) { // 3d render mesh geometry ON_Object* obj; for ( i = 0; rc && i < face_count; i++ ) { ON_BrepFace& f = m_F[i]; file.ReadChar(&b); if (b) { obj = 0; rc = (file.ReadObject(&obj)==1)?true:false; f.m_render_mesh = ON_Mesh::Cast(obj); if ( !f.m_render_mesh ) delete obj; } } if ( !rc ) { // delete render mesh geometry for ( i = 0; i < face_count; i++ ) { ON_BrepFace& f = m_F[i]; if ( f.m_render_mesh ) { delete f.m_render_mesh; f.m_render_mesh = 0; } } } if (rc && minor_version >= 1) { // 3d analysis mesh geometry for ( i = 0; rc && i < face_count; i++ ) { ON_BrepFace& f = m_F[i]; file.ReadChar(&b); if (b) { obj = 0; rc = file.ReadObject(&obj)?true:false; f.m_analysis_mesh = ON_Mesh::Cast(obj); if ( !f.m_analysis_mesh ) delete obj; } } if ( !rc ) { // delete analysis mesh geometry for ( i = 0; i < face_count; i++ ) { ON_BrepFace& f = m_F[i]; if ( f.m_analysis_mesh ) { delete f.m_analysis_mesh; f.m_analysis_mesh = 0; } } } } // fill in missing information ReadFillInMissingBoxes(*this); if (!rc ) { ON_ERROR("ON_Brep::ReadOld201() - trouble reading render/analysis meshes"); rc = true; } } // 22 April 2003: // Use outer_flag to set m_is_solid for closed solids // with outward pointing normals. if ( 1 == outer_flag && IsSolid() ) m_is_solid = 1; 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; }
BOOL ON_BrepTrim::Read( ON_BinaryArchive& file ) { ON_3dPoint P[2]; int i; BOOL rc = file.ReadInt( &m_trim_index ); if ( rc ) rc = file.ReadInt( &m_c2i ); if ( rc ) { ON_Interval d; rc = file.ReadInterval( d ); if (rc) { SetProxyCurveDomain(d); SetDomain(d); } } if ( rc ) rc = file.ReadInt( &m_ei ); if ( rc ) rc = file.ReadInt( 2, m_vi ); if ( rc ) { i = m_bRev3d; rc = file.ReadInt( &i ); if (rc) m_bRev3d = (i!=0); } i = unknown; if ( rc ) rc = file.ReadInt( &i ); switch (i) { case unknown: m_type = unknown; break; case boundary: m_type = boundary; break; case mated: m_type = mated; break; case seam: m_type = seam; break; case singular: m_type = singular; break; } i = ON_Surface::not_iso; if ( rc ) rc = file.ReadInt( &i ); switch(i) { case ON_Surface::not_iso: m_iso = ON_Surface::not_iso; break; case ON_Surface::x_iso: m_iso = ON_Surface::x_iso; break; case ON_Surface::y_iso: m_iso = ON_Surface::y_iso; break; case ON_Surface::W_iso: m_iso = ON_Surface::W_iso; break; case ON_Surface::S_iso: m_iso = ON_Surface::S_iso; break; case ON_Surface::E_iso: m_iso = ON_Surface::E_iso; break; case ON_Surface::N_iso: m_iso = ON_Surface::N_iso; break; } if ( rc ) rc = file.ReadInt( &m_li ); if ( rc ) rc = file.ReadDouble( 2, m_tolerance ); if ( file.Archive3dmVersion() >= 3 && file.ArchiveOpenNURBSVersion() >= 200206180 ) { // read trim proxy curve information added in version 200206180 ON_Interval d = ProxyCurveDomain(); if (rc ) { rc = file.ReadInterval( d ); if ( !rc ) d = ProxyCurveDomain(); } unsigned char b[24]; memset(b,0,sizeof(b)); bool bProxyCurveIsReversed = false; if (rc) { rc = file.ReadChar(8,b); if (rc && b[0] == 1 ) bProxyCurveIsReversed = true; } if (rc) rc = file.ReadChar(24,b); if ( bProxyCurveIsReversed ) ON_CurveProxy::Reverse(); SetDomain(d); } else { if ( rc ) rc = file.ReadPoint( P[0] ); //m_P[0] ); if ( rc ) rc = file.ReadPoint( P[1] ); //m_P[1] ); } if ( rc ) rc = file.ReadDouble( &m__legacy_2d_tol ); if ( rc ) rc = file.ReadDouble( &m__legacy_3d_tol ); return rc; }
bool ON_Brep::ReadOld101( ON_BinaryArchive& file ) { ON_Object* pO = NULL; ON_Curve* pC = NULL; ON_Surface* pS = NULL; int i, count; // 2d curves file.ReadInt( &count ); m_C2.Reserve(count); for ( i = 0; i < count; i++ ) { pO = NULL; file.ReadObject( &pO ); pC = ON_Curve::Cast(pO); if ( !pC ) delete pO; // ERROR! m_C2.Append( pC ); pC = NULL; pO = NULL; } // 3d curves file.ReadInt( &count ); m_C3.Reserve(count); for ( i = 0; i < count; i++ ) { pO = NULL; file.ReadObject( &pO ); pC = ON_Curve::Cast(pO); if ( !pC ) delete pO; // ERROR! m_C3.Append( pC ); pC = NULL; pO = NULL; } // untrimmed surfaces file.ReadInt( &count ); m_S.Reserve(count); for ( i = 0; i < count; i++ ) { pO = NULL; file.ReadObject( &pO ); pS = ON_Surface::Cast(pO); if ( !pS ) delete pO; // ERROR! m_S.Append( pS ); pS = NULL; pO = NULL; } // vertices file.ReadInt( &count ); m_V.Reserve(count); m_V.SetCount(count); for ( i = 0; i < count; i++ ) { m_V[i].Read(file); } // edges file.ReadInt( &count ); m_E.Reserve(count); m_E.SetCount(count); for ( i = 0; i < count; i++ ) { ON_BrepEdge& edge = m_E[i]; edge.Read(file); edge.SetProxyCurve( edge.m_c3i >= 0 ? m_C3[edge.m_c3i] : 0 ); edge.m_brep = this; } // trims file.ReadInt( &count ); m_T.Reserve(count); m_T.SetCount(count); for ( i = 0; i < count; i++ ) { m_T[i].Read(file); ON_BrepTrim& trim = m_T[i]; trim.SetProxyCurve( trim.m_c2i >= 0 ? m_C2[trim.m_c2i] : 0 ); trim.m_brep = this; } // loops file.ReadInt( &count ); m_L.Reserve(count); m_L.SetCount(count); for ( i = 0; i < count; i++ ) { m_L[i].Read(file); m_L[i].m_brep = this; } // faces file.ReadInt( &count ); m_F.Reserve(count); m_F.SetCount(count); for ( i = 0; i < count; i++ ) { ON_BrepFace& face = m_F[i]; face.Read(file); face.SetProxySurface(face.m_si >= 0 ? m_S[face.m_si] : 0); face.m_brep = this; } // bounding box file.ReadPoint( m_bbox.m_min ); file.ReadPoint( m_bbox.m_max ); // fill in missing information ReadFillInMissingBoxes(*this); return true; }
bool ON_Brep::ReadOld100( ON_BinaryArchive& file ) { // b-rep was written by old Rhino I/O tookit int sz, i; // 2d curve geometry file.ReadInt( &sz ); if ( sz < 1 ) { return false; } m_C2.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_C2.Append( Read100_BrepCurve( file ) ); } // 3d curve geomery file.ReadInt( &sz ); if ( sz < 1 ) { return false; } m_C3.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_C3.Append( Read100_BrepCurve( file ) ); } // surface geometry file.ReadInt( &sz ); if ( sz < 1 ) { return false; } m_S.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_S.Append( Read100_BrepSurface( file ) ); } /* CRhinoChunk* pChunk; CRhinoNurbsSurface* pSurface; const int typecode, length; for ( i = 0; i < sz; i++ ) { file.ReadInt( &typecode ); if ( typecode == TCODE_RHINO_OBJECT_NURBS_SURFACE && length > 0 ) { pSurface = (CRhinoNurbsSurface*)pChunk; } m_S.Append( pSurface ); } */ // read topology // vertices file.ReadInt( &sz ); m_V.Reserve(sz); for ( i = 0; i < sz; i++ ) { ON_BrepVertex empty_vertex; m_V.Append(empty_vertex); m_V[i].Read(file); } // edges file.ReadInt( &sz ); m_E.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_E.Append(ON_BrepEdge()); m_E[i].Read(file); } // trims file.ReadInt( &sz ); m_T.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_T.Append(ON_BrepTrim()); m_T[i].Read(file); } // loops file.ReadInt( &sz ); m_L.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_L.Append(ON_BrepLoop()); m_L[i].Read(file); } // faces file.ReadInt( &sz ); m_F.Reserve(sz); for ( i = 0; i < sz; i++ ) { m_F.Append(ON_BrepFace()); m_F[i].Read(file); } // bounding box file.ReadPoint( m_bbox.m_min ); file.ReadPoint( m_bbox.m_max ); // fill in missing information ReadFillInMissingBoxes(*this); return true; }