diff --git a/src/VrmlAPI/VrmlAPI.cxx b/src/VrmlAPI/VrmlAPI.cxx index 2cd2158a78..03f378f461 100644 --- a/src/VrmlAPI/VrmlAPI.cxx +++ b/src/VrmlAPI/VrmlAPI.cxx @@ -18,7 +18,7 @@ #include #include -void VrmlAPI::Write(const TopoDS_Shape& aShape, const Standard_CString aFileName, const Standard_Integer aVersion) { +Standard_Boolean VrmlAPI::Write(const TopoDS_Shape& aShape, const Standard_CString aFileName, const Standard_Integer aVersion) { VrmlAPI_Writer writer; - writer.Write(aShape, aFileName, aVersion); + return writer.Write(aShape, aFileName, aVersion); } diff --git a/src/VrmlAPI/VrmlAPI.hxx b/src/VrmlAPI/VrmlAPI.hxx index d362acd070..ec12058926 100644 --- a/src/VrmlAPI/VrmlAPI.hxx +++ b/src/VrmlAPI/VrmlAPI.hxx @@ -37,7 +37,7 @@ public: //! With help of this class user can change parameters of writing. //! Converts the shape aShape to VRML format of the passed version and writes it //! to the file identified by aFileName using default parameters. - Standard_EXPORT static void Write (const TopoDS_Shape& aShape, const Standard_CString aFileName, const Standard_Integer aVersion = 2); + Standard_EXPORT static Standard_Boolean Write (const TopoDS_Shape& aShape, const Standard_CString aFileName, const Standard_Integer aVersion = 2); diff --git a/src/VrmlAPI/VrmlAPI_Writer.cxx b/src/VrmlAPI/VrmlAPI_Writer.cxx index a61110f833..523168cac0 100644 --- a/src/VrmlAPI/VrmlAPI_Writer.cxx +++ b/src/VrmlAPI/VrmlAPI_Writer.cxx @@ -222,20 +222,26 @@ Handle(Vrml_Material) VrmlAPI_Writer::GetUnfreeBoundsMaterial() const return myUnfreeBoundsMaterial; } -void VrmlAPI_Writer::Write(const TopoDS_Shape& aShape,const Standard_CString aFile, const Standard_Integer aVersion) const +Standard_Boolean VrmlAPI_Writer::Write(const TopoDS_Shape& aShape,const Standard_CString aFile, const Standard_Integer aVersion) const { if (aVersion == 1) - write_v1(aShape, aFile); + return write_v1 (aShape, aFile); else if (aVersion == 2) - write_v2(aShape, aFile); + return write_v2 (aShape, aFile); + + return Standard_False; } -void VrmlAPI_Writer::write_v1(const TopoDS_Shape& aShape,const Standard_CString aFile) const +Standard_Boolean VrmlAPI_Writer::write_v1(const TopoDS_Shape& aShape,const Standard_CString aFile) const { OSD_Path thePath(aFile); TCollection_AsciiString theFile;thePath.SystemName(theFile); std::ofstream outfile; OSD_OpenStream(outfile, theFile.ToCString(), std::ios::out); + if (!outfile) + { + return Standard_False; + } Handle(VrmlConverter_IsoAspect) ia = new VrmlConverter_IsoAspect; // UIso Handle(VrmlConverter_IsoAspect) ia1 = new VrmlConverter_IsoAspect; //VIso ia->SetMaterial(myUisoMaterial); @@ -352,18 +358,21 @@ void VrmlAPI_Writer::write_v1(const TopoDS_Shape& aShape,const Standard_CString VrmlConverter_WFDeflectionShape::Add(outfile,aShape,myDrawer); Group2.Print(outfile); } - S2.Print(outfile); - S1.Print(outfile); + S2.Print(outfile); + S1.Print(outfile); + + outfile.close(); + return outfile.good(); } -void VrmlAPI_Writer::write_v2(const TopoDS_Shape& aShape,const Standard_CString aFile) const +Standard_Boolean VrmlAPI_Writer::write_v2(const TopoDS_Shape& aShape,const Standard_CString aFile) const { Standard_Boolean anExtFace = Standard_False; if(myRepresentation == VrmlAPI_ShadedRepresentation || myRepresentation == VrmlAPI_BothRepresentation) anExtFace = Standard_True; Standard_Boolean anExtEdge = Standard_False; - if(myRepresentation == VrmlAPI_WireFrameRepresentation|| myRepresentation == VrmlAPI_BothRepresentation) + if(myRepresentation == VrmlAPI_WireFrameRepresentation || myRepresentation == VrmlAPI_BothRepresentation) anExtEdge = Standard_True; VrmlData_Scene aScene; @@ -373,17 +382,21 @@ void VrmlAPI_Writer::write_v2(const TopoDS_Shape& aShape,const Standard_CString std::ofstream anOutStream; OSD_OpenStream(anOutStream, aFile, std::ios::out); - if (!anOutStream.fail()) + if (anOutStream) { - anOutStream << aScene; + anOutStream << aScene; + anOutStream.close(); + return anOutStream.good(); } + + return Standard_False; } //======================================================================= //function : WriteDoc //purpose : //======================================================================= -void VrmlAPI_Writer::WriteDoc( +Standard_Boolean VrmlAPI_Writer::WriteDoc( const Handle(TDocStd_Document) &theDoc, const Standard_CString theFile, const Standard_Real theScale) const @@ -394,9 +407,13 @@ void VrmlAPI_Writer::WriteDoc( std::ofstream anOutStream; OSD_OpenStream(anOutStream, theFile, std::ios::out); - if (!anOutStream.fail()) + if (anOutStream) { - anOutStream << aScene; + anOutStream << aScene; + anOutStream.close(); + return anOutStream.good(); } + + return Standard_False; } diff --git a/src/VrmlAPI/VrmlAPI_Writer.hxx b/src/VrmlAPI/VrmlAPI_Writer.hxx index 4d77a865e2..46a23cf2f9 100644 --- a/src/VrmlAPI/VrmlAPI_Writer.hxx +++ b/src/VrmlAPI/VrmlAPI_Writer.hxx @@ -105,12 +105,12 @@ public: //! Converts the shape aShape to //! VRML format of the passed version and writes it to the file identified by aFile. - Standard_EXPORT void Write (const TopoDS_Shape& aShape, const Standard_CString aFile, + Standard_EXPORT Standard_Boolean Write (const TopoDS_Shape& aShape, const Standard_CString aFile, const Standard_Integer aVersion = 2) const; //! Converts the document to VRML format of the passed version //! and writes it to the file identified by aFile. - Standard_EXPORT void WriteDoc( + Standard_EXPORT Standard_Boolean WriteDoc( const Handle(TDocStd_Document) &theDoc, const Standard_CString theFile, const Standard_Real theScale) const; @@ -119,11 +119,11 @@ protected: //! Converts the shape aShape to VRML format of version 1.0 and writes it //! to the file identified by aFileName using default parameters. - Standard_EXPORT void write_v1 (const TopoDS_Shape& aShape, const Standard_CString aFileName) const; + Standard_EXPORT Standard_Boolean write_v1 (const TopoDS_Shape& aShape, const Standard_CString aFileName) const; //! Converts the shape aShape to VRML format of version 2.0 and writes it //! to the file identified by aFileName using default parameters. - Standard_EXPORT void write_v2 (const TopoDS_Shape& aShape, const Standard_CString aFileName) const; + Standard_EXPORT Standard_Boolean write_v2 (const TopoDS_Shape& aShape, const Standard_CString aFileName) const; private: diff --git a/src/XDEDRAW/XDEDRAW_Common.cxx b/src/XDEDRAW/XDEDRAW_Common.cxx index 98eaa4dc1b..07d71d165c 100644 --- a/src/XDEDRAW/XDEDRAW_Common.cxx +++ b/src/XDEDRAW/XDEDRAW_Common.cxx @@ -597,7 +597,10 @@ static Standard_Integer WriteVrml(Draw_Interpretor& di, Standard_Integer argc, c Standard_Real anOCCLengthUnit = UnitsMethods::GetLengthFactorValue(Interface_Static::IVal("xstep.cascade.unit")); Standard_Real aScale = 0.001*anOCCLengthUnit; - writer.WriteDoc(aDoc, argv[2], aScale); + if (!writer.WriteDoc(aDoc, argv[2], aScale)) + { + di << "Error: File " << argv[2] << " was not written\n"; + } return 0; } diff --git a/src/XSDRAWSTLVRML/XSDRAWSTLVRML.cxx b/src/XSDRAWSTLVRML/XSDRAWSTLVRML.cxx index eee2583a78..cf86dc0b4f 100644 --- a/src/XSDRAWSTLVRML/XSDRAWSTLVRML.cxx +++ b/src/XSDRAWSTLVRML/XSDRAWSTLVRML.cxx @@ -532,7 +532,10 @@ static Standard_Integer writevrml case 2: writer.SetRepresentation(VrmlAPI_BothRepresentation); break; } - writer.Write(aShape, argv[2], aVersion); + if (!writer.Write(aShape, argv[2], aVersion)) + { + di << "Error: File " << argv[2] << " was not written\n"; + } return 0; }