BOOL ON_BrepEdge::Read( ON_BinaryArchive& file ) { int bReversed = false; ON_Interval proxy_domain; BOOL rc = file.ReadInt( &m_edge_index ); if (rc) rc = file.ReadInt( &m_c3i ); if (rc) rc = file.ReadInt( &bReversed ); if (rc) rc = file.ReadInterval( proxy_domain ); if (rc) rc = file.ReadInt( 2, m_vi ); if (rc) rc = file.ReadArray( m_ti ); if (rc) rc = file.ReadDouble( &m_tolerance ); ON_Interval domain = proxy_domain; if ( file.Archive3dmVersion() >= 3 && file.ArchiveOpenNURBSVersion() >= 200206180 ) { if (rc) { rc = file.ReadInterval(domain); if ( !rc) domain = proxy_domain; } } SetProxyCurve( NULL, proxy_domain ); if ( bReversed ) ON_CurveProxy::Reverse(); SetDomain(domain); return rc; }
ON_BOOL32 ON_AngularDimension::Read( ON_BinaryArchive& file ) { ON_BOOL32 rc = ON_Annotation::Read( file ); if( rc ) rc = file.ReadDouble( &m_angle ); if( rc ) rc = file.ReadDouble( &m_radius ); if( m_angle <= 0.0 || m_angle > REALLY_BIG_NUMBER) return false; if( m_radius <= 0.0 || m_radius > REALLY_BIG_NUMBER) return false; return rc; }
ON_BOOL32 ON_DetailView::Read(ON_BinaryArchive& archive) { m_page_per_model_ratio = 0.0; m_view.Default(); m_boundary.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; // m_view is wrapped in a subchunk so ON_3dmView can be expanded // without breaking the file format. int mj = 0, mn = 0; rc = archive.BeginRead3dmChunk( TCODE_ANONYMOUS_CHUNK, &mj, &mn ); if (rc) { rc = m_view.Read(archive); if (!archive.EndRead3dmChunk()) rc = false; } if (!rc) break; // m_boundary is wrapped in a subchunk so ON_NurbsCurve can be expanded // without breaking the file format. mj = mn = 0; rc = archive.BeginRead3dmChunk( TCODE_ANONYMOUS_CHUNK, &mj, &mn ); if (rc) { rc = m_boundary.Read(archive)?true:false; if (!archive.EndRead3dmChunk()) rc = false; } if (!rc) break; if ( minor_version >= 1 ) { rc = archive.ReadDouble(&m_page_per_model_ratio); } break; } if ( !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; }
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; }
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_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 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_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::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_BezierCage::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 ) { while(rc) { if ( major_version != 1 ) { ON_ERROR("ON_BezierCage::Read - old code unable to read new version of chunk"); rc = false; break; } int dim=0,order0=0,order1=0,order2=0; bool is_rat=false; rc = archive.ReadInt(&dim); if (!rc) break; if (dim < 1 || dim > 10000) { ON_ERROR("ON_BezierCage::Read - invalid dim"); rc=false; break; } rc = archive.ReadBool(&is_rat); if (!rc) break; rc = archive.ReadInt(&order0); if (!rc) break; if ( order0 < 2 || order0 > 10000 ) { ON_ERROR("ON_BezierCage::Read - invalid order0"); rc=false; break; } rc = archive.ReadInt(&order1); if (!rc) break; if ( order1 < 2 || order1 > 10000 ) { ON_ERROR("ON_BezierCage::Read - invalid order1"); rc=false; break; } rc = archive.ReadInt(&order2); if (!rc) break; if ( order2 < 2 || order2 > 10000 ) { ON_ERROR("ON_BezierCage::Read - invalid order2"); rc=false; break; } rc = Create(dim,is_rat,order0,order1,order2); if (!rc) break; int i,j,k; const int cv_dim = m_is_rat?(m_dim+1):m_dim; for(i = 0; i < order0 && rc; i++) { for(j = 0; j < order1 && rc; j++) { for ( k = 0; k < order2 && rc; k++) { rc = archive.ReadDouble(cv_dim,CV(i,j,k)); } } } break; } if ( !archive.EndRead3dmChunk() ) { rc = false; } } 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_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_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; }
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_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; }