diff --git a/python/py_igl_viewer.cpp b/python/py_igl_viewer.cpp index 2101b5bc5..224d7da46 100644 --- a/python/py_igl_viewer.cpp +++ b/python/py_igl_viewer.cpp @@ -2,6 +2,7 @@ #include #include "python.h" +#define ENABLE_SERIALIZATION #include #include #include @@ -287,6 +288,21 @@ py::class_ viewercore_class(me, "ViewerCore"); .def_readwrite("core", &igl::viewer::Viewer::core) .def("launch", &igl::viewer::Viewer::launch, py::arg("resizable") = true, py::arg("fullscreen") = false) .def("init", &igl::viewer::Viewer::init) + .def("serialize", [](igl::viewer::Viewer& viewer) + { + std::vector a; + igl::serialize(viewer.core,"Core",a); + igl::serialize(viewer.data,"Data",a); + + return a; + }) + + .def("deserialize", [](igl::viewer::Viewer& viewer, const std::vector& a) + { + igl::deserialize(viewer.core,"Core",a); + igl::deserialize(viewer.data,"Data",a); + return; + }) // Scene IO .def("load_scene", [](igl::viewer::Viewer& viewer) diff --git a/python/tcpviewer_client.py b/python/tcpviewer_client.py new file mode 100644 index 000000000..020a7cea2 --- /dev/null +++ b/python/tcpviewer_client.py @@ -0,0 +1,22 @@ +# Echo client program +import socket +import igl +import array + +HOST = '' # The remote host +PORT = 50008 # The same port as used by the server +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect((HOST, PORT)) + +V = igl.eigen.MatrixXd() +F = igl.eigen.MatrixXi() +igl.readOFF('../tutorial/shared/beetle.off', V, F) +viewer = igl.viewer.Viewer() +viewer.data.set_mesh(V,F) + +data = viewer.serialize() +print(type(data[0]).__name__) +viewer.deserialize(data) +a = array.array('u',data) +s.sendall(a) +s.close() diff --git a/python/tcpviewer_server.py b/python/tcpviewer_server.py new file mode 100644 index 000000000..2cfed0bb6 --- /dev/null +++ b/python/tcpviewer_server.py @@ -0,0 +1,35 @@ +# Echo server program +import socket +import multiprocessing +import igl + +HOST = '' # Symbolic name meaning all available interfaces +PORT = 50008 # Arbitrary non-privileged port +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.bind((HOST, PORT)) +s.listen(1) + +try: + while True: + conn, addr = s.accept() + print 'Connected by', addr + data = '' + while True: + datanew = conn.recv(1024) + if not datanew: + break + data = data+datanew + conn.close() + + def worker(data): + viewer = igl.viewer.Viewer() + temp = list(data.decode('unicode_internal','ignore')) + viewer.deserialize(temp) + viewer.launch(True,False) + return + + t = multiprocessing.Process(target=worker, args=(data,)) + t.start() +except: + print "Closing socket:" + s.close()