BOOL ON_BrepTrim::Write( ON_BinaryArchive& file ) const { ON_3dPoint P(0.0,0.0,0.0); BOOL rc = file.WriteInt( m_trim_index ); int i; if ( rc ) rc = file.WriteInt( m_c2i ); if ( rc ) rc = file.WriteInterval( ProxyCurveDomain() ); if ( rc ) rc = file.WriteInt( m_ei ); if ( rc ) rc = file.WriteInt( 2, m_vi ); if ( rc ) rc = file.WriteInt( m_bRev3d ); i = m_type; if ( rc ) rc = file.WriteInt( i ); i = m_iso; if ( rc ) rc = file.WriteInt( i ); if ( rc ) rc = file.WriteInt( m_li ); if ( rc ) rc = file.WriteDouble( 2, m_tolerance ); if ( file.Archive3dmVersion() < 3 ) { if ( rc ) rc = file.WritePoint( P ); // m_P[0] ); if ( rc ) rc = file.WritePoint( P ); // m_P[1] ); } else { // trim proxy curve information added in version 200206180 if (rc ) rc = file.WriteInterval( Domain() ); unsigned char b[24]; memset(b,0,sizeof(b)); b[0] = ProxyCurveIsReversed() ? 1 : 0; if (rc) rc = file.WriteChar(8,b); b[0] = 0; if (rc) rc = file.WriteChar(24,b); } if ( rc ) rc = file.WriteDouble( m__legacy_2d_tol ); if ( rc ) rc = file.WriteDouble( m__legacy_3d_tol ); return rc; }
ON_BOOL32 ON_AnnotationArrow::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion(1,0); if (rc) rc = file.WritePoint( m_tail ); if (rc) rc = file.WritePoint( m_head ); return rc; }
ON_BOOL32 ON_AnnotationTextDot::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion(1,0); if (rc) rc = file.WritePoint( point ); if (rc) rc = file.WriteString( m_text ); return rc; }
ON_BOOL32 ON_Light::Write( ON_BinaryArchive& file ) const { int i; ON_BOOL32 rc = file.Write3dmChunkVersion(1,2); // version 1.0 fields if ( rc ) rc = file.WriteInt( m_bOn ); i = m_style; if ( rc ) rc = file.WriteInt( i ); if ( rc ) rc = file.WriteDouble( m_intensity ); if ( rc ) rc = file.WriteDouble( m_watts ); if ( rc ) rc = file.WriteColor( m_ambient ); if ( rc ) rc = file.WriteColor( m_diffuse ); if ( rc ) rc = file.WriteColor( m_specular ); if ( rc ) rc = file.WriteVector( m_direction ); if ( rc ) rc = file.WritePoint( m_location ); if ( rc ) rc = file.WriteDouble( m_spot_angle ); if ( rc ) rc = file.WriteDouble( m_spot_exponent ); if ( rc ) rc = file.WriteVector( m_attenuation ); if ( rc ) rc = file.WriteDouble( m_shadow_intensity ); if ( rc ) rc = file.WriteInt( m_light_index ); if ( rc ) rc = file.WriteUuid( m_light_id ); if ( rc ) rc = file.WriteString( m_light_name ); // version 1.1 added support for linear and rectangular if ( rc ) rc = file.WriteVector( m_length ); if ( rc ) rc = file.WriteVector( m_width ); // version 1.2 added m_hotspot support if ( rc ) rc = file.WriteDouble( m_hotspot ); return rc; }
BOOL ON_HatchLine::Write( ON_BinaryArchive& ar) const { BOOL rc = ar.Write3dmChunkVersion(1,1); if (rc) rc = ar.WriteDouble( m_angle); if (rc) rc = ar.WritePoint( m_base); if (rc) rc = ar.WriteVector( m_offset); if (rc) rc = ar.WriteArray( m_dashes); return rc; }
BOOL ON_BrepVertex::Write( ON_BinaryArchive& file ) const { BOOL rc = file.WriteInt( m_vertex_index ); if ( rc ) rc = file.WritePoint( point ); if ( rc ) rc = file.WriteArray( m_ei ); if ( rc ) rc = file.WriteDouble( m_tolerance ); return rc; }
ON_BOOL32 ON_HatchExtra::Write(ON_BinaryArchive& archive) const { bool rc = archive.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,0); if(rc) rc = archive.WriteUuid( m_parent_hatch); if(rc) rc = archive.WritePoint(m_basepoint); if(!archive.EndWrite3dmChunk()) rc = false; return rc; }
BOOL CSampleObjectUserData::Write( ON_BinaryArchive& binary_archive ) const { int minor_version = 0; bool rc = binary_archive.BeginWrite3dmChunk( TCODE_ANONYMOUS_CHUNK, 1, minor_version ); if( !rc ) return false; // Write class members like this for(;;) { // version 1.0 fields rc = binary_archive.WritePoint( m_point ); if( !rc ) break; rc = binary_archive.WriteString( m_string ); if( !rc ) break; // If you add data members to CSampleObjectUserData after you // have released a product, simply increment minor_version // by one, and write the new information. This way you // can enhance your user data over several versions of // your product without breaking file IO. It is CRITICAL // that once you write something to a customer's .3dm // file, you continue to write it the same way for all // future versions. // version 1.1 fields added DD MMM YYYY // rc = binary_archive.WriteSomethingNew( ... ); // if (!rc) break; // rc = binary_archive.WriteSomethingElseNew( ... ); // if (!rc) break; // version 1.2 fields added DD MMM YYYY // rc = binary_archive.WriteAnotherSomethingNew( ... ); // if (!rc) break; // rc = binary_archive.WriteAnotherSomethingElseNew( ... ); // if (!rc) break; break; } // If BeginWrite3dmChunk() returns true, // then EndWrite3dmChunk() must be called, // even if a write operation failed. if( !binary_archive.EndWrite3dmChunk() ) rc = false; return rc; }
bool ON_Localizer::Write(ON_BinaryArchive& archive) const { bool rc = archive.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,0); if (!rc) return false; for(;;) { rc = archive.WriteInt(m_type); if ( !rc ) break; rc = archive.WritePoint(m_P); if ( !rc ) break; rc = archive.WriteVector(m_V); if ( !rc ) break; rc = archive.WriteInterval(m_d); if ( !rc ) break; rc = archive.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,0); if (!rc) break; rc = archive.WriteBool( m_nurbs_curve ? true : false ); if ( rc && m_nurbs_curve ) rc = m_nurbs_curve->Write(archive)?true:false; if ( !archive.EndWrite3dmChunk() ) rc = false; if (!rc) break; rc = archive.BeginWrite3dmChunk(TCODE_ANONYMOUS_CHUNK,1,0); if (!rc) break; rc = archive.WriteBool( m_nurbs_surface ? true : false ); if ( rc && m_nurbs_surface ) rc = m_nurbs_surface->Write(archive)?true:false; if ( !archive.EndWrite3dmChunk() ) rc = false; if (!rc) break; break; } if ( !archive.EndWrite3dmChunk() ) rc = false; return rc; }
BOOL ON_Brep::Write( ON_BinaryArchive& file ) const { const ON_Brep* brep = this; ON_Brep* v2brep = 0; if ( file.Archive3dmVersion() <= 2 && !IsValidForV2() ) { v2brep = ON_Brep::New(*this); v2brep->MakeValidForV2(); brep = v2brep; } //BOOL rc = file.Write3dmChunkVersion(3,0); // serialization version //BOOL rc = file.Write3dmChunkVersion(3,1); // added meshes BOOL rc = file.Write3dmChunkVersion(3,2); // added m_is_solid // 2d curves if (rc) rc = brep->m_C2.Write(file); // 3d curves if (rc) rc = brep->m_C3.Write(file); // untrimmed surfaces if (rc) rc = brep->m_S.Write(file); // vertices if (rc) rc = brep->m_V.Write(file); // edges if (rc) rc = brep->m_E.Write(file); // trims if (rc) rc = brep->m_T.Write(file); // loops if (rc) rc = brep->m_L.Write(file); // faces if (rc) rc = brep->m_F.Write(file); // bounding box if (rc) rc = file.WritePoint( brep->m_bbox.m_min ); if (rc) rc = file.WritePoint( brep->m_bbox.m_max ); // end of chunk version 3.0 if (rc) { // added for chunk version 3.1 const int face_count = brep->m_F.Count(); int fi; unsigned char b; // write render meshes rc = file.BeginWrite3dmChunk( TCODE_ANONYMOUS_CHUNK, 0 ); if ( rc ) { for ( fi = 0; rc && fi < face_count; fi++ ) { const ON_Mesh* mesh = file.Save3dmRenderMeshes() ? brep->m_F[fi].m_render_mesh : 0; b = mesh ? 1 : 0; file.WriteChar(b); if (mesh) { rc = file.WriteObject(*mesh); } } if ( !file.EndWrite3dmChunk() ) { rc = false; } } // write analysis meshes rc = file.BeginWrite3dmChunk( TCODE_ANONYMOUS_CHUNK, 0 ); if ( rc ) { for ( fi = 0; rc && fi < face_count; fi++ ) { const ON_Mesh* mesh = file.Save3dmAnalysisMeshes() ? brep->m_F[fi].m_analysis_mesh : 0; b = mesh ? 1 : 0; file.WriteChar(b); if (mesh) { rc = file.WriteObject(*mesh); } } if ( !file.EndWrite3dmChunk() ) rc = false; } } // end of chunk version 3.1 // use value of "this" m_is_solid to avoid expensive // calculation on the v2brep if ( !file.WriteInt( m_is_solid ) ) rc = false; // end of chunk version 3.2 if ( 0 != v2brep ) delete v2brep; return rc; }
ON_BOOL32 ON_Point::Write( ON_BinaryArchive& file ) const { ON_BOOL32 rc = file.Write3dmChunkVersion(1,0); if (rc) rc = file.WritePoint( point ); return rc; }