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; }
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_ClippingPlaneSurface::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) return false; for(;;) { rc = ( 1 == major_version ); if (!rc) break; ON__UINT32 tcode = 0; ON__INT64 big_value = 0; rc = file.BeginRead3dmBigChunk(&tcode,&big_value)?true:false; if (rc) { rc = (TCODE_ANONYMOUS_CHUNK == tcode); if (rc) rc = (ON_PlaneSurface::Read(file)?true:false); if (!file.EndRead3dmChunk()) rc = false; } if (!rc) break; rc = m_clipping_plane.Read(file); if (rc) break; break; } if (!file.EndRead3dmChunk() ) rc = false; return rc; }
ON_BOOL32 ON_3dmProperties::Read(ON_BinaryArchive& file ) { Default(); ON_BOOL32 rc = true; unsigned int tcode; ON__INT64 value; for(;;) { rc = file.BeginRead3dmBigChunk( &tcode, &value ); if ( !rc ) break; switch(tcode) { case TCODE_PROPERTIES_OPENNURBS_VERSION: { int on_version = 0; if ( value > 299912319 || (value != 0 && value < 200101010) ) { ON_ERROR("ON_3dmProperties::Read - TCODE_PROPERTIES_OPENNURBS_VERSION corrupt value"); rc = false; } else { on_version = (int)value; } ON_SetBinaryArchiveOpenNURBSVersion(file,on_version); } break; case TCODE_PROPERTIES_REVISIONHISTORY: // file creation/revision information m_RevisionHistory.Read(file); break; case TCODE_PROPERTIES_NOTES: // file notes m_Notes.Read(file); break; case TCODE_PROPERTIES_PREVIEWIMAGE: // uncompressed preview image m_PreviewImage.ReadUncompressed(file); break; case TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE: // compressed preview image m_PreviewImage.ReadCompressed(file); break; case TCODE_PROPERTIES_APPLICATION: // application that created 3dm file m_Application.Read(file); break; default: // information added in future will be skipped by file.EndRead3dmChunk() break; } if ( !file.EndRead3dmChunk() ) { rc = false; break; } if ( TCODE_ENDOFTABLE == tcode ) break; } 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; }
ON_BOOL32 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; ON_BOOL32 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; ON__UINT32 tcode = 0; ON__INT64 length_TCODE_ANONYMOUS_CHUNK = 0; int fi; unsigned char b; const int face_count = m_F.Count(); // read render meshes tcode = 0; length_TCODE_ANONYMOUS_CHUNK = 0; rc = file.BeginRead3dmBigChunk( &tcode, &length_TCODE_ANONYMOUS_CHUNK ); 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) { obj = 0; rc = file.ReadObject(&obj); if ( 0 != 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; } if (rc) { // read analysis meshes tcode = 0; length_TCODE_ANONYMOUS_CHUNK = 0; rc = file.BeginRead3dmBigChunk( &tcode, &length_TCODE_ANONYMOUS_CHUNK ); 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; }