diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 5ccde012e..8bf40b596 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -597,7 +597,11 @@ void Document::Save (Base::Writer &writer) const << " FreeCAD Document, see http://free-cad.sourceforge.net for more information..." << endl << "-->" << endl; - writer.Stream() << "" << endl; + //writer.Stream() << "" << endl; + writer.Stream() << "" << endl; PropertyContainer::Save(writer); @@ -612,6 +616,16 @@ void Document::Restore(Base::XMLReader &reader) reader.readElement("Document"); long scheme = reader.getAttributeAsInteger("SchemaVersion"); reader.DocumentSchema = scheme; + if (reader.hasAttribute("ProgramVersion")) { + reader.ProgramVersion = reader.getAttribute("ProgramVersion"); + } else { + reader.ProgramVersion = "pre-0.14"; + } + if (reader.hasAttribute("FileVersion")) { + reader.FileVersion = reader.getAttributeAsUnsigned("FileVersion"); + } else { + reader.FileVersion = 0; + } // When this document was created the FileName and Label properties // were set to the absolute path or file name, respectively. To save @@ -693,7 +707,11 @@ void Document::exportObjects(const std::vector& obj, Base::ZipWriter writer(out); writer.putNextEntry("Document.xml"); writer.Stream() << "" << endl; - writer.Stream() << "" << endl; + //writer.Stream() << "" << endl; + writer.Stream() << "" << endl; // Add this block to have the same layout as for normal documents writer.Stream() << "" << endl; writer.Stream() << "" << endl; @@ -800,6 +818,16 @@ Document::importObjects(Base::XMLReader& reader) reader.readElement("Document"); long scheme = reader.getAttributeAsInteger("SchemaVersion"); reader.DocumentSchema = scheme; + if (reader.hasAttribute("ProgramVersion")) { + reader.ProgramVersion = reader.getAttribute("ProgramVersion"); + } else { + reader.ProgramVersion = "pre-0.14"; + } + if (reader.hasAttribute("FileVersion")) { + reader.FileVersion = reader.getAttributeAsUnsigned("FileVersion"); + } else { + reader.FileVersion = 0; + } std::vector objs = readObjects(reader); @@ -1729,8 +1757,8 @@ std::vector Document::getObjectsOfType(const Base::Type& typeId std::vector Document::findObjects(const Base::Type& typeId, const char* objname) const { - boost::regex rx(objname); - boost::cmatch what; + boost::regex rx(objname); + boost::cmatch what; std::vector Objects; for (std::vector::const_iterator it = d->objectArray.begin(); it != d->objectArray.end(); ++it) { if ((*it)->getTypeId().isDerivedFrom(typeId)) { diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index 934023272..269d17902 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -327,7 +327,7 @@ void PropertyFileIncluded::SaveDocFile (Base::Writer &writer) const } } -void PropertyFileIncluded::RestoreDocFile(Base::Reader &reader) +void PropertyFileIncluded::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::ofstream to(Base::FileInfo(_cValue.c_str())); if (!to) diff --git a/src/App/PropertyFile.h b/src/App/PropertyFile.h index 270fe35c9..b68ba80da 100644 --- a/src/App/PropertyFile.h +++ b/src/App/PropertyFile.h @@ -91,7 +91,7 @@ public: virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual Property *Copy(void) const; virtual void Paste(const Property &from); @@ -114,4 +114,4 @@ protected: } // namespace App -#endif // APP_PROPERTFILE_H +#endif // APP_PROPERTFILE_H diff --git a/src/App/PropertyGeo.cpp b/src/App/PropertyGeo.cpp index 9dfc4dd70..0da1d83d4 100644 --- a/src/App/PropertyGeo.cpp +++ b/src/App/PropertyGeo.cpp @@ -301,7 +301,7 @@ void PropertyVectorList::SaveDocFile (Base::Writer &writer) const } } -void PropertyVectorList::RestoreDocFile(Base::Reader &reader) +void PropertyVectorList::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt=0; diff --git a/src/App/PropertyGeo.h b/src/App/PropertyGeo.h index 9aa9ac178..53c972573 100644 --- a/src/App/PropertyGeo.h +++ b/src/App/PropertyGeo.h @@ -147,7 +147,7 @@ public: virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual Property *Copy(void) const; virtual void Paste(const Property &from); diff --git a/src/App/PropertyPythonObject.cpp b/src/App/PropertyPythonObject.cpp index 455ea65f6..0c916833d 100644 --- a/src/App/PropertyPythonObject.cpp +++ b/src/App/PropertyPythonObject.cpp @@ -372,7 +372,7 @@ void PropertyPythonObject::SaveDocFile (Base::Writer &writer) const writer.Stream().put(*it); } -void PropertyPythonObject::RestoreDocFile(Base::Reader &reader) +void PropertyPythonObject::RestoreDocFile(Base::Reader &reader, const int FileVersion) { aboutToSetValue(); std::string buffer; diff --git a/src/App/PropertyPythonObject.h b/src/App/PropertyPythonObject.h index bd4bec933..76608e800 100644 --- a/src/App/PropertyPythonObject.h +++ b/src/App/PropertyPythonObject.h @@ -63,7 +63,7 @@ public: /** Use Python's pickle module to restore the object */ virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual unsigned int getMemSize (void) const; virtual Property *Copy(void) const; diff --git a/src/App/PropertyStandard.cpp b/src/App/PropertyStandard.cpp index 724788c01..5d6eaba7e 100644 --- a/src/App/PropertyStandard.cpp +++ b/src/App/PropertyStandard.cpp @@ -1127,14 +1127,20 @@ void PropertyFloatList::SaveDocFile (Base::Writer &writer) const } } -void PropertyFloatList::RestoreDocFile(Base::Reader &reader) +void PropertyFloatList::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt=0; str >> uCt; std::vector values(uCt); for (std::vector::iterator it = values.begin(); it != values.end(); ++it) { - str >> *it; + if (FileVersion > 0) { + str >> *it; + } else { + float val; + str >> val; + (*it) = val; + } } setValues(values); } @@ -2084,7 +2090,7 @@ void PropertyColorList::SaveDocFile (Base::Writer &writer) const } } -void PropertyColorList::RestoreDocFile(Base::Reader &reader) +void PropertyColorList::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt=0; diff --git a/src/App/PropertyStandard.h b/src/App/PropertyStandard.h index c26688258..ef6936711 100644 --- a/src/App/PropertyStandard.h +++ b/src/App/PropertyStandard.h @@ -537,7 +537,7 @@ public: virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual Property *Copy(void) const; virtual void Paste(const Property &from); @@ -830,7 +830,7 @@ public: virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual Property *Copy(void) const; virtual void Paste(const Property &from); diff --git a/src/Base/Persistence.cpp b/src/Base/Persistence.cpp index 7054d6acb..141512c8d 100644 --- a/src/Base/Persistence.cpp +++ b/src/Base/Persistence.cpp @@ -65,6 +65,6 @@ void Persistence::SaveDocFile (Writer &/*writer*/) const { } -void Persistence::RestoreDocFile(Reader &/*reader*/) +void Persistence::RestoreDocFile(Reader &/*reader*/, const int FileVersion) { } diff --git a/src/Base/Persistence.h b/src/Base/Persistence.h index f05315653..1bc7a7977 100644 --- a/src/Base/Persistence.h +++ b/src/Base/Persistence.h @@ -145,7 +145,7 @@ public: * \endcode * @see Base::Reader,Base::XMLReader */ - virtual void RestoreDocFile(Reader &/*reader*/); + virtual void RestoreDocFile(Reader &/*reader*/, const int FileVersion); }; } //namespace Base diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp index 496f583da..8aa12776a 100644 --- a/src/Base/Reader.cpp +++ b/src/Base/Reader.cpp @@ -304,7 +304,7 @@ void Base::XMLReader::readFiles(zipios::ZipInputStream &zipstream) const // no file name for the current entry in the zip was registered. if (jt != FileList.end()) { try { - jt->Object->RestoreDocFile(zipstream); + jt->Object->RestoreDocFile(zipstream, FileVersion); } catch(...) { // For any exception we just continue with the next file. diff --git a/src/Base/Reader.h b/src/Base/Reader.h index f35ff379d..9a5291fe9 100644 --- a/src/Base/Reader.h +++ b/src/Base/Reader.h @@ -165,6 +165,10 @@ public: /// Schema Version of the document int DocumentSchema; + /// Version of FreeCAD that wrote this document + std::string ProgramVersion; + /// Version of the file format + int FileVersion; protected: /// read the next element diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index f93aab1ee..a129ff893 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (c) 2004 Jürgen Riegel * + * Copyright (c) 2004 Jrgen Riegel * * * * This file is part of the FreeCAD CAx development system. * * * @@ -674,7 +674,7 @@ void Document::Restore(Base::XMLReader &reader) /** * Restores the properties of the view providers. */ -void Document::RestoreDocFile(Base::Reader &reader) +void Document::RestoreDocFile(Base::Reader &reader, const int FileVersion) { // We must create an XML parser to read from the input stream Base::XMLReader xmlReader("GuiDocument.xml", reader); diff --git a/src/Gui/Document.h b/src/Gui/Document.h index 85736c6b9..07fffccf8 100644 --- a/src/Gui/Document.h +++ b/src/Gui/Document.h @@ -119,7 +119,7 @@ public: /// This method is used to save large amounts of data to a binary file. virtual void SaveDocFile (Base::Writer &writer) const; /// This method is used to restore large amounts of data from a binary file. - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); void exportObjects(const std::vector&, Base::Writer&); void importObjects(const std::vector&, Base::Reader&); //@} diff --git a/src/Gui/MergeDocuments.cpp b/src/Gui/MergeDocuments.cpp index 9b53d960c..be0d571be 100644 --- a/src/Gui/MergeDocuments.cpp +++ b/src/Gui/MergeDocuments.cpp @@ -160,7 +160,7 @@ void MergeDocuments::SaveDocFile (Base::Writer & w) const document->exportObjects(objects, w); } -void MergeDocuments::RestoreDocFile(Base::Reader & reader) +void MergeDocuments::RestoreDocFile(Base::Reader & reader, const int FileVersion) { std::vector obj = objects; // We must create an XML parser to read from the input stream diff --git a/src/Gui/MergeDocuments.h b/src/Gui/MergeDocuments.h index 42bc252e0..e4ee90d50 100644 --- a/src/Gui/MergeDocuments.h +++ b/src/Gui/MergeDocuments.h @@ -49,7 +49,7 @@ public: void Save (Base::Writer & w) const; void Restore(Base::XMLReader &r); void SaveDocFile (Base::Writer & w) const; - void RestoreDocFile(Base::Reader & r); + void RestoreDocFile(Base::Reader & r, const int FileVersion); private: zipios::ZipInputStream* stream; diff --git a/src/Gui/Thumbnail.cpp b/src/Gui/Thumbnail.cpp index df5cbdf3a..34e2b3de6 100644 --- a/src/Gui/Thumbnail.cpp +++ b/src/Gui/Thumbnail.cpp @@ -110,6 +110,6 @@ void Thumbnail::SaveDocFile (Base::Writer &writer) const writer.Stream().write(ba.constData(), ba.length()); } -void Thumbnail::RestoreDocFile(Base::Reader &reader) +void Thumbnail::RestoreDocFile(Base::Reader &reader, const int FileVersion) { } diff --git a/src/Gui/Thumbnail.h b/src/Gui/Thumbnail.h index daa66ad11..11b0c1b4d 100644 --- a/src/Gui/Thumbnail.h +++ b/src/Gui/Thumbnail.h @@ -50,7 +50,7 @@ public: /// This method is used to save large amounts of data to a binary file. void SaveDocFile (Base::Writer &writer) const; /// This method is used to restore large amounts of data from a binary file. - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); //@} private: diff --git a/src/Mod/Fem/App/FemMesh.cpp b/src/Mod/Fem/App/FemMesh.cpp index 759b72bf7..e2d5dca10 100755 --- a/src/Mod/Fem/App/FemMesh.cpp +++ b/src/Mod/Fem/App/FemMesh.cpp @@ -744,7 +744,7 @@ void FemMesh::SaveDocFile (Base::Writer &writer) const fi.deleteFile(); } -void FemMesh::RestoreDocFile(Base::Reader &reader) +void FemMesh::RestoreDocFile(Base::Reader &reader, const int FileVersion) { // create a temporary file and copy the content from the zip stream Base::FileInfo fi(Base::FileInfo::getTempFileName().c_str()); diff --git a/src/Mod/Fem/App/FemMesh.h b/src/Mod/Fem/App/FemMesh.h index 274104b3f..15b1904a8 100755 --- a/src/Mod/Fem/App/FemMesh.h +++ b/src/Mod/Fem/App/FemMesh.h @@ -23,7 +23,7 @@ #ifndef FEM_FEMMESH_H #define FEM_FEMMESH_H - + #include #include @@ -65,7 +65,7 @@ public: virtual void Save (Base::Writer &/*writer*/) const; virtual void Restore(Base::XMLReader &/*reader*/); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); /** @name Subelement management */ //@{ diff --git a/src/Mod/Fem/App/FemMeshProperty.cpp b/src/Mod/Fem/App/FemMeshProperty.cpp index 10e01fa9f..5221a3af2 100755 --- a/src/Mod/Fem/App/FemMeshProperty.cpp +++ b/src/Mod/Fem/App/FemMeshProperty.cpp @@ -162,9 +162,9 @@ void PropertyFemMesh::SaveDocFile (Base::Writer &writer) const _FemMesh->SaveDocFile(writer); } -void PropertyFemMesh::RestoreDocFile(Base::Reader &reader) +void PropertyFemMesh::RestoreDocFile(Base::Reader &reader, const int FileVersion) { aboutToSetValue(); - _FemMesh->RestoreDocFile(reader); + _FemMesh->RestoreDocFile(reader, FileVersion); hasSetValue(); } diff --git a/src/Mod/Fem/App/FemMeshProperty.h b/src/Mod/Fem/App/FemMeshProperty.h index 7b350ddc4..a4ac334ce 100755 --- a/src/Mod/Fem/App/FemMeshProperty.h +++ b/src/Mod/Fem/App/FemMeshProperty.h @@ -77,7 +77,7 @@ public: void Save (Base::Writer &writer) const; void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); App::Property *Copy(void) const; void Paste(const App::Property &from); diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index 9a13a27a8..7a773779f 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -297,7 +297,7 @@ void MeshObject::Restore(Base::XMLReader &reader) // this is handled by the property class } -void MeshObject::RestoreDocFile(Base::Reader &reader) +void MeshObject::RestoreDocFile(Base::Reader &reader, const int FileVersion) { load(reader); } @@ -1154,8 +1154,8 @@ void MeshObject::removeSelfIntersections(const std::vector& indic for (it = indices.begin(); it != indices.end(); ) { unsigned long id1 = *it; ++it; unsigned long id2 = *it; ++it; - selfIntersections.push_back(std::make_pair - (id1,id2)); + selfIntersections.push_back(std::make_pair + (id1,id2)); } if (!selfIntersections.empty()) { @@ -1171,12 +1171,12 @@ void MeshObject::removeFoldsOnSurface() MeshCore::MeshEvalFoldsOnSurface s_eval(_kernel); MeshCore::MeshEvalFoldOversOnSurface f_eval(_kernel); - f_eval.Evaluate(); - std::vector inds = f_eval.GetIndices(); - - s_eval.Evaluate(); + f_eval.Evaluate(); + std::vector inds = f_eval.GetIndices(); + + s_eval.Evaluate(); std::vector inds1 = s_eval.GetIndices(); - + // remove duplicates inds.insert(inds.end(), inds1.begin(), inds1.end()); std::sort(inds.begin(), inds.end()); @@ -1188,8 +1188,8 @@ void MeshObject::removeFoldsOnSurface() // do this as additional check after removing folds on closed area for (int i=0; i<5; i++) { MeshCore::MeshEvalFoldsOnBoundary b_eval(_kernel); - if (b_eval.Evaluate()) - break; + if (b_eval.Evaluate()) + break; inds = b_eval.GetIndices(); if (!inds.empty()) deleteFacets(inds); diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index 441db4de3..2b40bc56e 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -141,7 +141,7 @@ public: void Save (Base::Writer &writer) const; void SaveDocFile (Base::Writer &writer) const; void Restore(Base::XMLReader &reader); - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); void save(const char* file,MeshCore::MeshIO::Format f=MeshCore::MeshIO::Undefined, const MeshCore::Material* mat = 0) const; void save(std::ostream&) const; @@ -175,7 +175,7 @@ public: void addMesh(const MeshCore::MeshKernel&); void deleteFacets(const std::vector& removeIndices); void deletePoints(const std::vector& removeIndices); - std::vector > getComponents() const; + std::vector > getComponents() const; unsigned long countComponents() const; void removeComponents(unsigned long); /** @@ -364,4 +364,4 @@ private: } // namespace Mesh -#endif // MESH_MESH_H +#endif // MESH_MESH_H diff --git a/src/Mod/Mesh/App/MeshProperties.cpp b/src/Mod/Mesh/App/MeshProperties.cpp index 9e68cae10..e9f3a3e3e 100644 --- a/src/Mod/Mesh/App/MeshProperties.cpp +++ b/src/Mod/Mesh/App/MeshProperties.cpp @@ -45,7 +45,7 @@ using namespace Mesh; TYPESYSTEM_SOURCE(Mesh::PropertyNormalList, App::PropertyVectorList); TYPESYSTEM_SOURCE(Mesh::PropertyCurvatureList , App::PropertyLists); TYPESYSTEM_SOURCE(Mesh::PropertyMeshKernel , App::PropertyComplexGeoData); - + void PropertyNormalList::transform(const Base::Matrix4D &mat) { // A normal vector is only a direction with unit length, so we only need to rotate it @@ -221,7 +221,7 @@ void PropertyCurvatureList::SaveDocFile (Base::Writer &writer) const } } -void PropertyCurvatureList::RestoreDocFile(Base::Reader &reader) +void PropertyCurvatureList::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt=0; @@ -422,7 +422,7 @@ void PropertyMeshKernel::setPyObject(PyObject *value) } } else if (PyList_Check(value)) { - // new instance of MeshObject + // new instance of MeshObject Py::List triangles(value); MeshObject* mesh = MeshObject::createMeshFromList(triangles); setValuePtr(mesh); @@ -478,7 +478,7 @@ void PropertyMeshKernel::SaveDocFile (Base::Writer &writer) const _meshObject->save(writer.Stream()); } -void PropertyMeshKernel::RestoreDocFile(Base::Reader &reader) +void PropertyMeshKernel::RestoreDocFile(Base::Reader &reader, const int FileVersion) { aboutToSetValue(); _meshObject->load(reader); @@ -500,4 +500,4 @@ void PropertyMeshKernel::Paste(const App::Property &from) const PropertyMeshKernel& prop = dynamic_cast(from); *(this->_meshObject) = *(prop._meshObject); hasSetValue(); -} +} diff --git a/src/Mod/Mesh/App/MeshProperties.h b/src/Mod/Mesh/App/MeshProperties.h index 04bfb8dee..1552fbab7 100644 --- a/src/Mod/Mesh/App/MeshProperties.h +++ b/src/Mod/Mesh/App/MeshProperties.h @@ -107,7 +107,7 @@ public: void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); /** @name Python interface */ //@{ @@ -205,7 +205,7 @@ public: void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); App::Property *Copy(void) const; void Paste(const App::Property &from); diff --git a/src/Mod/Part/App/PropertyTopoShape.cpp b/src/Mod/Part/App/PropertyTopoShape.cpp index 718e7fee9..34add8d0c 100644 --- a/src/Mod/Part/App/PropertyTopoShape.cpp +++ b/src/Mod/Part/App/PropertyTopoShape.cpp @@ -261,8 +261,8 @@ void PropertyPartShape::SaveDocFile (Base::Writer &writer) const const TopoDS_Shape& myShape = copy.Shape(); BRepTools::Clean(myShape); // remove triangulation - // create a temporary file and copy the content to the zip stream - // once the tmp. filename is known use always the same because otherwise + // create a temporary file and copy the content to the zip stream + // once the tmp. filename is known use always the same because otherwise // we may run into some problems on the Linux platform static Base::FileInfo fi(Base::FileInfo::getTempFileName()); @@ -304,7 +304,7 @@ void PropertyPartShape::SaveDocFile (Base::Writer &writer) const fi.deleteFile(); } -void PropertyPartShape::RestoreDocFile(Base::Reader &reader) +void PropertyPartShape::RestoreDocFile(Base::Reader &reader, const int FileVersion) { BRep_Builder builder; @@ -397,7 +397,7 @@ void PropertyShapeHistory::SaveDocFile (Base::Writer &writer) const { } -void PropertyShapeHistory::RestoreDocFile(Base::Reader &reader) +void PropertyShapeHistory::RestoreDocFile(Base::Reader &reader, const int FileVersion) { } @@ -505,7 +505,7 @@ void PropertyFilletEdges::SaveDocFile (Base::Writer &writer) const } } -void PropertyFilletEdges::RestoreDocFile(Base::Reader &reader) +void PropertyFilletEdges::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt=0; diff --git a/src/Mod/Part/App/PropertyTopoShape.h b/src/Mod/Part/App/PropertyTopoShape.h index a75c85ccd..0adb189da 100644 --- a/src/Mod/Part/App/PropertyTopoShape.h +++ b/src/Mod/Part/App/PropertyTopoShape.h @@ -87,7 +87,7 @@ public: void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); App::Property *Copy(void) const; void Paste(const App::Property &from); @@ -138,7 +138,7 @@ public: virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual Property *Copy(void) const; virtual void Paste(const Property &from); @@ -191,7 +191,7 @@ public: virtual void Restore(Base::XMLReader &reader); virtual void SaveDocFile (Base::Writer &writer) const; - virtual void RestoreDocFile(Base::Reader &reader); + virtual void RestoreDocFile(Base::Reader &reader, const int FileVersion); virtual Property *Copy(void) const; virtual void Paste(const Property &from); diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index bd3746a26..a6068cd0e 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -939,7 +939,7 @@ void TopoShape::SaveDocFile (Base::Writer &writer) const { } -void TopoShape::RestoreDocFile(Base::Reader &reader) +void TopoShape::RestoreDocFile(Base::Reader &reader, const int FileVersion) { } diff --git a/src/Mod/Part/App/TopoShape.h b/src/Mod/Part/App/TopoShape.h index 0369682ff..777084e4f 100644 --- a/src/Mod/Part/App/TopoShape.h +++ b/src/Mod/Part/App/TopoShape.h @@ -111,7 +111,7 @@ public: void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); unsigned int getMemSize (void) const; //@} diff --git a/src/Mod/Points/App/Points.cpp b/src/Mod/Points/App/Points.cpp index 9ecdb826d..d2735f8f5 100644 --- a/src/Mod/Points/App/Points.cpp +++ b/src/Mod/Points/App/Points.cpp @@ -134,19 +134,22 @@ void PointKernel::Restore(Base::XMLReader &reader) } } -void PointKernel::RestoreDocFile(Base::Reader &reader) +void PointKernel::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt = 0; str >> uCt; _Points.resize(uCt); for (unsigned long i=0; i < uCt; i++) { -// if doubleFileVersion -// double x, y, z -// else - float x, y, z; - str >> x >> y >> z; - _Points[i].Set(x,y,z); + if (FileVersion > 0) { + double x, y, z; + str >> x >> y >> z; + _Points[i].Set(x,y,z); + } else { + float x, y, z; + str >> x >> y >> z; + _Points[i].Set(x,y,z); + } } } diff --git a/src/Mod/Points/App/Points.h b/src/Mod/Points/App/Points.h index 06efa3c4f..cec019cd5 100644 --- a/src/Mod/Points/App/Points.h +++ b/src/Mod/Points/App/Points.h @@ -90,7 +90,7 @@ public: void Save (Base::Writer &writer) const; void SaveDocFile (Base::Writer &writer) const; void Restore(Base::XMLReader &reader); - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); void save(const char* file) const; void save(std::ostream&) const; void load(const char* file); diff --git a/src/Mod/Points/App/PointsFeature.cpp b/src/Mod/Points/App/PointsFeature.cpp index d7fb7eb94..bc84a8321 100644 --- a/src/Mod/Points/App/PointsFeature.cpp +++ b/src/Mod/Points/App/PointsFeature.cpp @@ -64,10 +64,10 @@ void Feature::Restore(Base::XMLReader &reader) GeoFeature::Restore(reader); } -void Feature::RestoreDocFile(Base::Reader &reader) +void Feature::RestoreDocFile(Base::Reader &reader, const int FileVersion) { // This gets only invoked if a points file has been added from Restore() - Points.RestoreDocFile(reader); + Points.RestoreDocFile(reader, FileVersion); } void Feature::onChanged(const App::Property* prop) diff --git a/src/Mod/Points/App/PointsFeature.h b/src/Mod/Points/App/PointsFeature.h index 67f0cc9cc..8e2bae02b 100644 --- a/src/Mod/Points/App/PointsFeature.h +++ b/src/Mod/Points/App/PointsFeature.h @@ -60,7 +60,7 @@ public: /** @name methods overide Feature */ //@{ void Restore(Base::XMLReader &reader); - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); /// recalculate the Feature virtual App::DocumentObjectExecReturn *execute(void); /// returns the type name of the ViewProvider diff --git a/src/Mod/Points/App/Properties.cpp b/src/Mod/Points/App/Properties.cpp index ee8af76ca..99f71abef 100644 --- a/src/Mod/Points/App/Properties.cpp +++ b/src/Mod/Points/App/Properties.cpp @@ -291,7 +291,7 @@ void PropertyCurvatureList::SaveDocFile (Base::Writer &writer) const } } -void PropertyCurvatureList::RestoreDocFile(Base::Reader &reader) +void PropertyCurvatureList::RestoreDocFile(Base::Reader &reader, const int FileVersion) { Base::InputStream str(reader); uint32_t uCt=0; diff --git a/src/Mod/Points/App/Properties.h b/src/Mod/Points/App/Properties.h index 6832f5427..a48d6469d 100644 --- a/src/Mod/Points/App/Properties.h +++ b/src/Mod/Points/App/Properties.h @@ -141,7 +141,7 @@ public: void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); //@} /** @name Undo/Redo */ diff --git a/src/Mod/Points/App/PropertyPointKernel.cpp b/src/Mod/Points/App/PropertyPointKernel.cpp index f0dcf9498..624e4c210 100644 --- a/src/Mod/Points/App/PropertyPointKernel.cpp +++ b/src/Mod/Points/App/PropertyPointKernel.cpp @@ -134,10 +134,10 @@ void PropertyPointKernel::SaveDocFile (Base::Writer &writer) const // does nothing } -void PropertyPointKernel::RestoreDocFile(Base::Reader &reader) +void PropertyPointKernel::RestoreDocFile(Base::Reader &reader, const int FileVersion) { aboutToSetValue(); - _cPoints->RestoreDocFile(reader); + _cPoints->RestoreDocFile(reader, FileVersion); hasSetValue(); } diff --git a/src/Mod/Points/App/PropertyPointKernel.h b/src/Mod/Points/App/PropertyPointKernel.h index 6f08944b5..ee8fe9977 100644 --- a/src/Mod/Points/App/PropertyPointKernel.h +++ b/src/Mod/Points/App/PropertyPointKernel.h @@ -78,7 +78,7 @@ public: void Save (Base::Writer &writer) const; void Restore(Base::XMLReader &reader); void SaveDocFile (Base::Writer &writer) const; - void RestoreDocFile(Base::Reader &reader); + void RestoreDocFile(Base::Reader &reader, const int FileVersion); //@} /** @name Modification */