12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import socket
- import threading
- import pyigl as igl
- import array
- import time
- HOST = 'localhost'
- PORT = 50008
- def worker(viewer,lock,s):
- print("TCP iglviewer server listening on port " + str(PORT))
- try:
- while True:
- conn, addr = s.accept()
- lock.acquire()
- slist = []
- while True:
- buf = conn.recv(4096)
- if not buf:
- break
- slist.append(buf.decode('unicode_internal','ignore'))
- conn.close()
- data = ''.join(slist)
- temp = list(data)
- isempty = viewer.data().V.rows() == 0
- viewer.data().deserialize(temp)
- if isempty and viewer.data().V.rows() != 0:
- viewer.core.align_camera_center(viewer.data().V,viewer.data().F)
- lock.release()
- except:
- s.close()
- return
- class TCPViewer(igl.glfw.Viewer):
- def launch(self):
- try:
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.connect((HOST, PORT))
- ser = self.data().serialize()
- a = array.array('u', ser)
- s.sendall(a)
- s.close()
- except:
- print("Failed to open socket, is tcpviewer running?")
- if __name__ == "__main__":
-
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- s.bind((HOST, PORT))
- except:
- print("Failed to bind, port already used.")
- exit(1)
- s.listen(1)
- viewer = igl.glfw.Viewer()
- lock = threading.Lock()
- t = threading.Thread(target=worker, args=(viewer,lock,s,))
- t.setDaemon(True)
- t.start()
- viewer.core.is_animating = True
-
- viewer.launch_init(True,False)
- done = False
- while not done:
- lock.acquire()
- done = not viewer.launch_rendering(False)
- lock.release()
- time.sleep(0.000001)
- viewer.launch_shut()
|