diff --git a/src/Mod/JtReader/App/AppJtReader.cpp b/src/Mod/JtReader/App/AppJtReader.cpp
index 847971af75..3918ea2cdf 100644
--- a/src/Mod/JtReader/App/AppJtReader.cpp
+++ b/src/Mod/JtReader/App/AppJtReader.cpp
@@ -24,18 +24,16 @@
#include
#include
+#include
-
-extern struct PyMethodDef JtReader_methods[];
-
-
-extern "C" {
-void AppJtReaderExport initJtReader()
+namespace JtReaderNS
{
+extern PyObject* initModule();
+}
- static struct PyModuleDef JtReaderAPIDef =
- {PyModuleDef_HEAD_INIT, "JtReader", 0, -1, JtReader_methods, NULL, NULL, NULL, NULL};
- PyModule_Create(&JtReaderAPIDef);
+PyMOD_INIT_FUNC(JtReader)
+{
+ PyObject* jtReaderModule = JtReaderNS::initModule();
// load dependent module
Base::Interpreter().loadModule("Mesh");
@@ -52,8 +50,5 @@ void AppJtReaderExport initJtReader()
Base::Console().Log("Loading JtReader module... done\n");
- return;
+ PyMOD_Return(jtReaderModule);
}
-
-
-} // extern "C" {
diff --git a/src/Mod/JtReader/App/AppJtReaderPy.cpp b/src/Mod/JtReader/App/AppJtReaderPy.cpp
index bedcda48b3..ddeb0ec6cc 100644
--- a/src/Mod/JtReader/App/AppJtReaderPy.cpp
+++ b/src/Mod/JtReader/App/AppJtReaderPy.cpp
@@ -26,209 +26,107 @@
#include
#include
#include
+#include
#include
#include
#include
+#include
+
#include "TestJtReader.h"
using std::vector;
using namespace MeshCore;
-// using namespace JtReader;
-/* module functions */
-static PyObject* read(PyObject* /*self*/, PyObject* args)
+namespace JtReaderNS
{
- char* Name;
- if (!PyArg_ParseTuple(args, "et", "utf-8", &Name)) {
- return NULL;
- }
- std::string EncodedName = std::string(Name);
- PyMem_Free(Name);
-
- PY_TRY
- {
- // std::auto_ptr apcKernel(new MeshCore::MeshKernel());
-
- // vector facets;
- // facets.resize(0 /* some size*/);
-
- // const SimpleMeshFacet* It=iterStart();
- // int i=0;
- // while(It=iterGetNext())
- //{
- // facets[i]._aclPoints[0].x = It->p1[0];
- // facets[i]._aclPoints[0].y = It->p1[1];
- // facets[i]._aclPoints[0].z = It->p1[2];
- // facets[i]._aclPoints[1].x = It->p2[0];
- // facets[i]._aclPoints[1].y = It->p2[1];
- // facets[i]._aclPoints[1].z = It->p2[2];
- // facets[i]._aclPoints[2].x = It->p3[0];
- // facets[i]._aclPoints[2].y = It->p3[1];
- // facets[i]._aclPoints[2].z = It->p3[2];
- // }
-
- //(*apcKernel) = facets;
-
- // return new Mesh::MeshPy(new Mesh::MeshObject(*(apcKernel.release())));
- }
- PY_CATCH;
-
- Py_Return;
-}
-
-static PyObject* open(PyObject* /*self*/, PyObject* args)
+class Module: public Py::ExtensionModule
{
- char* Name;
- if (!PyArg_ParseTuple(args, "et", "utf-8", &Name)) {
- return NULL;
- }
- std::string EncodedName = std::string(Name);
- PyMem_Free(Name);
-
- PY_TRY
+public:
+ Module()
+ : Py::ExtensionModule("JtReader")
{
+ add_varargs_method("read",
+ &Module::read,
+ "Read the mesh from a JT file and return a mesh object.");
+ add_varargs_method("open",
+ &Module::open,
+ "open(string)\n"
+ "Create a new document and load the JT file into\n"
+ "the document.");
+ add_varargs_method("insert",
+ &Module::importer,
+ "insert(string|mesh,[string])\n"
+ "Load or insert a JT file into the given or active document.");
+ initialize("This module is the JtReader module.");
+ }
+
+private:
+ Py::Object read(const Py::Tuple& args)
+ {
+ char* Name;
+ if (!PyArg_ParseTuple(args.ptr(), "et", "utf-8", &Name)) {
+ throw Py::Exception();
+ }
+
+ std::string EncodedName = std::string(Name);
+ PyMem_Free(Name);
+ return Py::None();
+ }
+ Py::Object open(const Py::Tuple& args)
+ {
+ char* Name;
+ if (!PyArg_ParseTuple(args.ptr(), "et", "utf-8", &Name)) {
+ throw Py::Exception();
+ }
+
+ std::string EncodedName = std::string(Name);
+ PyMem_Free(Name);
+
// Base::Console().Log("Open in Mesh with %s",Name);
Base::FileInfo file(EncodedName.c_str());
-
- // extract ending
- if (file.extension() == "") {
- Py_Error(Base::PyExc_FC_GeneralError, "no file ending");
- }
-
if (file.hasExtension("jt")) {
TestJtReader reader;
reader.setFile(EncodedName.c_str());
reader.read();
-
- // create new document and add Import feature
- // App::Document *pcDoc = App::GetApplication().newDocument("Unnamed");
- // Mesh::Feature *pcFeature =
- // (Mesh::Feature*)pcDoc->addObject("Mesh::Feature",file.fileNamePure().c_str());
- //
- // std::auto_ptr apcKernel(new MeshCore::MeshKernel());
-
- // readFile(EncodedName.c_str(),0);
-
- // vector facets;
- // facets.resize(iterSize());
-
- // const SimpleMeshFacet* It=iterStart();
- // int i=0;
- // while(It=iterGetNext())
- // {
- // facets[i]._aclPoints[0].x = It->p1[0];
- // facets[i]._aclPoints[0].y = It->p1[1];
- // facets[i]._aclPoints[0].z = It->p1[2];
- // facets[i]._aclPoints[1].x = It->p2[0];
- // facets[i]._aclPoints[1].y = It->p2[1];
- // facets[i]._aclPoints[1].z = It->p2[2];
- // facets[i]._aclPoints[2].x = It->p3[0];
- // facets[i]._aclPoints[2].y = It->p3[1];
- // facets[i]._aclPoints[2].z = It->p3[2];
- // i++;
- // }
- // clearData();
- // (*apcKernel) = facets;
- // pcFeature->Mesh.setValue(*(apcKernel.get()));
-
- ////pcFeature->FileName.setValue( Name );
- // pcDoc->recompute();
- }
- else {
- Py_Error(Base::PyExc_FC_GeneralError, "unknown file ending");
+ return Py::None();
}
+
+ throw Py::RuntimeError("unknown file ending");
}
- PY_CATCH;
-
- Py_Return;
-}
-
-
-/* module functions */
-static PyObject* insert(PyObject* /*self*/, PyObject* args)
-{
- char* Name;
- const char* DocName;
- if (!PyArg_ParseTuple(args, "ets", "utf-8", &Name, &DocName)) {
- return NULL;
- }
- std::string EncodedName = std::string(Name);
- PyMem_Free(Name);
-
- PY_TRY
+ Py::Object importer(const Py::Tuple& args)
{
+ char* Name;
+ const char* DocName;
+ if (!PyArg_ParseTuple(args.ptr(), "ets", "utf-8", &Name, &DocName)) {
+ throw Py::Exception();
+ }
+
+ std::string EncodedName = std::string(Name);
+ PyMem_Free(Name);
Base::FileInfo file(EncodedName.c_str());
- // extract ending
- if (file.extension() == "") {
- Py_Error(Base::PyExc_FC_GeneralError, "no file ending");
- }
-
if (file.hasExtension("jt")) {
// add Import feature
App::Document* pcDoc = App::GetApplication().getDocument(DocName);
if (!pcDoc) {
- char szBuf[200];
- snprintf(szBuf, 200, "Import called to the non-existing document '%s'", DocName);
- Py_Error(Base::PyExc_FC_GeneralError, szBuf);
+ pcDoc = App::GetApplication().newDocument(DocName);
}
- // readFile(EncodedName.c_str(),0);
-
- // vector facets;
-
- // if(iterSize()>0){
- // facets.resize(iterSize());
-
- // const SimpleMeshFacet* It=iterStart();
- // int i=0;
- // while(It=iterGetNext())
- // {
- // facets[i]._aclPoints[0].x = It->p1[0];
- // facets[i]._aclPoints[0].y = It->p1[1];
- // facets[i]._aclPoints[0].z = It->p1[2];
- // facets[i]._aclPoints[1].x = It->p2[0];
- // facets[i]._aclPoints[1].y = It->p2[1];
- // facets[i]._aclPoints[1].z = It->p2[2];
- // facets[i]._aclPoints[2].x = It->p3[0];
- // facets[i]._aclPoints[2].y = It->p3[1];
- // facets[i]._aclPoints[2].z = It->p3[2];
- // i++;
- // }
- // clearData();
- // Mesh::Feature *pcFeature =
- // (Mesh::Feature*)pcDoc->addObject("Mesh::Feature",file.fileNamePure().c_str());
- //
- // std::auto_ptr apcKernel(new MeshCore::MeshKernel());
- // (*apcKernel) = facets;
- // pcFeature->Mesh.setValue(*(apcKernel.get()));
-
- // //pcDoc->recompute();
-
- //}else{
- // clearData();
- // //Py_Error(Base::BaseExceptionFreeCADError,"No Mesh in file");
- // Base::Console().Warning("No Mesh in file: %s\n",EncodedName.c_str());
- //}
- }
- else {
- Py_Error(Base::PyExc_FC_GeneralError, "unknown file ending");
+ return Py::None();
}
+
+ throw Py::RuntimeError("unknown file ending");
}
- PY_CATCH;
+};
- Py_Return;
+PyObject* initModule()
+{
+ return Base::Interpreter().addModule(new Module);
}
-
-/* registration table */
-struct PyMethodDef JtReader_methods[] = {
- {"open", open, Py_NEWARGS, "open a jt file in a new Document"},
- {"insert", insert, Py_NEWARGS, "isert a jt file in a existing document"},
- {"read", read, Py_NEWARGS, "Read a Mesh from a jt file and returns a Mesh object."},
- {NULL, NULL, 0, NULL}};
+} // namespace JtReaderNS
diff --git a/src/Mod/JtReader/App/JrJt/Context.h b/src/Mod/JtReader/App/JrJt/Context.h
index 7673e9e5cf..b2408c3b9a 100644
--- a/src/Mod/JtReader/App/JrJt/Context.h
+++ b/src/Mod/JtReader/App/JrJt/Context.h
@@ -23,7 +23,6 @@
#ifndef Context_HEADER
#define Context_HEADER
-#include "Context.h"
#include
#include
diff --git a/src/Mod/JtReader/App/JrJt/I32.h b/src/Mod/JtReader/App/JrJt/I32.h
index 3d90020cf0..6f2f83eb19 100644
--- a/src/Mod/JtReader/App/JrJt/I32.h
+++ b/src/Mod/JtReader/App/JrJt/I32.h
@@ -23,6 +23,7 @@
#ifndef I32_HEADER
#define I32_HEADER
+#include "Context.h"
#include
#include
diff --git a/src/Mod/JtReader/App/JrJt/U16.h b/src/Mod/JtReader/App/JrJt/U16.h
index 433ca8fde5..e8cae13389 100644
--- a/src/Mod/JtReader/App/JrJt/U16.h
+++ b/src/Mod/JtReader/App/JrJt/U16.h
@@ -23,6 +23,7 @@
#ifndef U16_HEADER
#define U16_HEADER
+#include "Context.h"
#include
#include
diff --git a/src/Mod/JtReader/App/JrJt/U32.h b/src/Mod/JtReader/App/JrJt/U32.h
index 908f928367..1e73d919c8 100644
--- a/src/Mod/JtReader/App/JrJt/U32.h
+++ b/src/Mod/JtReader/App/JrJt/U32.h
@@ -23,6 +23,7 @@
#ifndef U32_HEADER
#define U32_HEADER
+#include "Context.h"
#include
#include