diff --git a/src/Mod/Mesh/App/Core/MeshIO.cpp b/src/Mod/Mesh/App/Core/MeshIO.cpp index d3bb385e1..841f0c743 100644 --- a/src/Mod/Mesh/App/Core/MeshIO.cpp +++ b/src/Mod/Mesh/App/Core/MeshIO.cpp @@ -1467,6 +1467,7 @@ bool MeshOutput::SaveAny(const char* FileName, MeshIO::Format format) const } else if (fileformat == MeshIO::ASTL) { MeshOutput aWriter(_rclMesh); + aWriter.SetObjectName(objectName); aWriter.Transform(this->_transform); // write file @@ -1557,7 +1558,10 @@ bool MeshOutput::SaveAsciiSTL (std::ostream &rstrOut) const rstrOut.setf(std::ios::fixed | std::ios::showpoint); Base::SequencerLauncher seq("saving...", _rclMesh.CountFacets() + 1); - rstrOut << "solid Mesh" << std::endl; + if (this->objectName.empty()) + rstrOut << "solid Mesh" << std::endl; + else + rstrOut << "solid " << this->objectName << std::endl; clIter.Begin(); clEnd.End(); diff --git a/src/Mod/Mesh/App/Core/MeshIO.h b/src/Mod/Mesh/App/Core/MeshIO.h index 1794461d4..0bde17f26 100644 --- a/src/Mod/Mesh/App/Core/MeshIO.h +++ b/src/Mod/Mesh/App/Core/MeshIO.h @@ -126,9 +126,11 @@ public: MeshOutput (const MeshKernel &rclM, const Material* m) : _rclMesh(rclM), _material(m), apply_transform(false){} virtual ~MeshOutput (void) { } + void SetObjectName(const std::string& n) + { objectName = n; } void Transform(const Base::Matrix4D&); /** Set custom data to the header of a binary STL. - * If the data exceeds 80 characters the the characters too much + * If the data exceeds 80 characters then the characters too much * are ignored. If the data has less than 80 characters they are * automatically filled up with spaces. */ @@ -170,6 +172,7 @@ protected: const Material* _material; Base::Matrix4D _transform; bool apply_transform; + std::string objectName; static std::string stl_header; }; diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index b65665805..4add7a0b1 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -303,9 +303,12 @@ void MeshObject::RestoreDocFile(Base::Reader &reader) } void MeshObject::save(const char* file, MeshCore::MeshIO::Format f, - const MeshCore::Material* mat) const + const MeshCore::Material* mat, + const char* objectname) const { MeshCore::MeshOutput aWriter(this->_kernel, mat); + if (objectname) + aWriter.SetObjectName(objectname); aWriter.Transform(this->_Mtrx); aWriter.SaveAny(file, f); } diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index 28e3e9728..d5ff421c3 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -149,7 +149,8 @@ public: void Restore(Base::XMLReader &reader); void RestoreDocFile(Base::Reader &reader); void save(const char* file,MeshCore::MeshIO::Format f=MeshCore::MeshIO::Undefined, - const MeshCore::Material* mat = 0) const; + const MeshCore::Material* mat = 0, + const char* objectname = 0) const; void save(std::ostream&) const; bool load(const char* file, MeshCore::Material* mat = 0); void load(std::istream&); diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 702ccc51d..45091110a 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -149,7 +149,8 @@ PyObject* MeshPy::write(PyObject *args) { const char* Name; char* Ext=0; - if (!PyArg_ParseTuple(args, "s|s",&Name,&Ext)) + char* ObjName; + if (!PyArg_ParseTuple(args, "s|ss",&Name,&Ext,&ObjName)) return NULL; MeshCore::MeshIO::Format format = MeshCore::MeshIO::Undefined; @@ -175,7 +176,7 @@ PyObject* MeshPy::write(PyObject *args) }; PY_TRY { - getMeshObjectPtr()->save(Name, format); + getMeshObjectPtr()->save(Name, format, 0, ObjName); } PY_CATCH; Py_Return; diff --git a/src/Mod/Mesh/Gui/Command.cpp b/src/Mod/Mesh/Gui/Command.cpp index f0876b6da..971ceafaf 100644 --- a/src/Mod/Mesh/Gui/Command.cpp +++ b/src/Mod/Mesh/Gui/Command.cpp @@ -381,10 +381,11 @@ void CmdMeshExport::activated(int iMsg) } //openCommand("Export Mesh"); - doCommand(Doc,"FreeCAD.ActiveDocument.getObject(\"%s\").Mesh.write(\"%s\",\"%s\")", + doCommand(Doc,"FreeCAD.ActiveDocument.getObject(\"%s\").Mesh.write(\"%s\",\"%s\",\"%s\")", docObj->getNameInDocument(), (const char*)fn.toUtf8(), - (const char*)extension); + (const char*)extension, + docObj->Label.getValue()); //commitCommand(); } }