Esempio n. 1
0
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;
}
Esempio n. 2
0
ON_BOOL32 ON_3dmObjectAttributes::Write( ON_BinaryArchive& file ) const
{
  if ( file.Archive3dmVersion() >= 5 )
  {
    // added at opennurbs version 200712190
    return WriteV5Helper(file);
  }

  bool rc = file.Write3dmChunkVersion(1,7);
  // version 1.0 fields
  if (rc) rc = file.WriteUuid(m_uuid);
  if (rc) rc = file.WriteInt(m_layer_index);
  if (rc) rc = file.WriteInt(m_material_index);
  if (rc) rc = file.WriteColor(m_color);

  if (rc)
  {
    // OBSOLETE if (rc) rc = file.WriteLineStyle(m_line_style); // 23 March 2005 Dale Lear
    short s;
    s = (short)m_object_decoration;
    if (rc) rc = file.WriteShort(s);
    s = 0;
    if (rc) rc = file.WriteShort(s);
    if (rc) rc = file.WriteDouble(0.0);
    if (rc) rc = file.WriteDouble(1.0);
  }

  if (rc) rc = file.WriteInt(m_wire_density);
  if (rc) rc = file.WriteChar(m_mode);
  if (rc) rc = file.WriteChar(m_color_source);
  if (rc) rc = file.WriteChar(m_linetype_source);
  if (rc) rc = file.WriteChar(m_material_source);
  if (rc) rc = file.WriteString(m_name);
  if (rc) rc = file.WriteString(m_url);

  // version 1.1 fields
  if (rc) rc = file.WriteArray(m_group);

  // version 1.2 fields
  if (rc) rc = file.WriteBool(m_bVisible);

  // version 1.3 fields
  if (rc) rc = file.WriteArray(m_dmref);

  // version 1.4 fields - 23 March 2005 Dale Lear
  if (rc) rc = file.WriteInt(m_object_decoration);
  if (rc) rc = file.WriteChar(m_plot_color_source);
  if (rc) rc = file.WriteColor(m_plot_color);
  if (rc) rc = file.WriteChar(m_plot_weight_source);
  if (rc) rc = file.WriteDouble(m_plot_weight_mm);

  // version 1.5 fields 11 April 2005
  if (rc) rc = file.WriteInt(m_linetype_index);

  // version 1.6 fields 2 September 2005
  if (rc)
  {
    unsigned char uc = 0;
    switch(m_space)
    {
    case ON::no_space:    uc = 0; break;
    case ON::model_space: uc = 0; break;
    case ON::page_space:  uc = 1; break;
    }
    rc = file.WriteChar(uc);
  }
  if (rc)
  {
    // 22 Sep 2006 - the way ON_3dmObjectAttiributes indicates
    // that an object is put on a particular page view changed
    // from being saved in the m_dmref[] list to using the
    // m_space and m_viewport_id settings.  But the file format
    // cannot change at this point.  So, the bAddPagespaceDMR
    // is here to save the page info in the old dmr format.
    int count = m_dmref.Count();
    if ( count < 0 )
      count = 0;
    bool bAddPagespaceDMR = ( ON::page_space == m_space && !ON_UuidIsNil(m_viewport_id) );
    rc = file.WriteInt( bAddPagespaceDMR ? (count+1) : count );
    if ( rc && bAddPagespaceDMR )
    {
      rc = file.WriteUuid(m_viewport_id);
      if (rc) rc = file.WriteUuid(ON_ObsoletePageSpaceObjectId);
    }
    int i;
    for ( i = 0; i < count && rc; i++ )
    {
      const ON_DisplayMaterialRef& dmr = m_dmref[i];
      rc = file.WriteUuid(dmr.m_viewport_id);
      if (rc) rc = file.WriteUuid(dmr.m_display_material_id);
    }
  }

  // version 1.7 fields 6 June 2006
  if (rc) rc = m_rendering_attributes.Write(file);

  return rc;
}
Esempio n. 3
0
bool ON_3dmObjectAttributes::WriteV5Helper( ON_BinaryArchive& file ) const
{
  unsigned char c;
  // 29 Nov. 2009 S. Baer
  // Chunk version updated to 2.1 in order to support m_display_order
  bool rc = file.Write3dmChunkVersion(2,1);
  while(rc)
  {
    if (!rc) break;
    rc = file.WriteUuid(m_uuid);
    if (!rc) break;
    rc = file.WriteInt(m_layer_index);
    if (!rc) break;

    // write non-default settings - skip everything else
    if ( !m_name.IsEmpty() )
    {
      c = 1;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteString(m_name);
      if (!rc) break;
    }
    if ( !m_url.IsEmpty() )
    {
      c = 2;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteString(m_url);
      if (!rc) break;
    }
    if ( -1 != m_linetype_index )
    {
      c = 3;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteInt(m_linetype_index);
      if (!rc) break;
    }
    if ( -1 != m_material_index )
    {
      c = 4;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteInt(m_material_index);
      if (!rc) break;
    }
    if (    m_rendering_attributes.m_mappings.Count() > 0
         || m_rendering_attributes.m_materials.Count() > 0
         || true != m_rendering_attributes.m_bCastsShadows
         || true != m_rendering_attributes.m_bReceivesShadows
         || false != m_rendering_attributes.AdvancedTexturePreview()
         )
    {
      c = 5;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = m_rendering_attributes.Write(file);
      if (!rc) break;
    }
    if ( 0 != m_color )
    {
      c = 6;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteColor(m_color);
      if (!rc) break;
    }
    if ( 0 != m_plot_color )
    {
      c = 7;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteColor(m_plot_color);
      if (!rc) break;
    }
    if ( 0.0 != m_plot_weight_mm )
    {
      c = 8;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteDouble(m_plot_weight_mm);
      if (!rc) break;
    }
    if ( ON::no_object_decoration != m_object_decoration )
    {
      c = 9;
      rc = file.WriteChar(c);
      if (!rc) break;
      c = (unsigned char)m_object_decoration;
      rc = file.WriteChar(c);
      if (!rc) break;
    }
    if ( 1 != m_wire_density )
    {
      c = 10;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteInt(m_wire_density);
      if (!rc) break;
    }
    if ( true != m_bVisible )
    {
      c = 11;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteBool(m_bVisible);
      if (!rc) break;
    }
    if ( ON::normal_object != m_mode )
    {
      c = 12;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteChar(m_mode);
      if (!rc) break;
    }
    if ( ON::color_from_layer != m_color_source )
    {
      c = 13;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteChar(m_color_source);
      if (!rc) break;
    }
    if ( ON::plot_color_from_layer != m_plot_color_source )
    {
      c = 14;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteChar(m_plot_color_source);
      if (!rc) break;
    }
    if ( ON::plot_weight_from_layer != m_plot_weight_source )
    {
      c = 15;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteChar(m_plot_weight_source);
      if (!rc) break;
    }
    if ( ON::material_from_layer != m_material_source )
    {
      c = 16;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteChar(m_material_source);
      if (!rc) break;
    }
    if ( ON::linetype_from_layer != m_linetype_source )
    {
      c = 17;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteChar(m_linetype_source);
      if (!rc) break;
    }
    if ( m_group.Count() > 0 )
    {
      c = 18;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteArray(m_group);
      if (!rc) break;
    }
    if ( ON::model_space != m_space )
    {
      c = 19;
      rc = file.WriteChar(c);
      if (!rc) break;
      c = (unsigned char)m_space;
      rc = file.WriteChar(c);
      if (!rc) break;
    }
    if ( !ON_UuidIsNil(m_viewport_id) )
    {
      c = 20;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteUuid(m_viewport_id);
      if (!rc) break;
    }
    if ( m_dmref.Count() > 0 )
    {
      c = 21;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteArray(m_dmref);
      if (!rc) break;
    }

    // 29 Nov. 2009 - S. Baer
    // Only write m_display_order if it's value!=0
    // m_display_order is written to version 2.1 files
    if ( 0 != m_display_order )
    {
      c = 22;
      rc = file.WriteChar(c);
      if (!rc) break;
      rc = file.WriteInt(m_display_order);
      if (!rc) break;
    }

    // 0 indicates end of attributes;
    c = 0;
    rc = file.WriteChar(c);
    break;
  }
  return rc;
}
Esempio n. 4
0
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;
}