si quelqu'un ici à entendu parler de PureData, il connaît la puissance du bouzin.
Pour les autres
L'idée est donc de récupérer des messages sortant de PureData pour les utiliser dans FreeCad, cette petite macro fait exactement ça :wikipedia wrote:Pure Data (en abrégé pd) est un logiciel de programmation graphique pour la création musicale et multimédia en temps réel. Il permet également de gérer des signaux entrants dans l'ordinateur (signaux de capteurs ou événements réseau par exemple) et de gérer des signaux sortants (par des protocoles de réseau ou protocoles électroniques pour le pilotage de matériels divers). Ce logiciel permet un suivi de partition.
Code: Select all
#############################
FreeCAD PureData Message Server
flachyjoe 2020
#############################
# User Part #
ADDRESS = 'localhost'
PORT = 8888
#What to do with PD message
def pdMsgProcessor(words):
doc = App.ActiveDocument
if not doc:
return
objs = doc.findObjects(Name=words[0])
if not objs:
Err("Unknow object %s" % words[0])
else:
obj=objs[0]
obj.Placement.Base.x = float(words[1])
obj.Placement.Base.y = float(words[2])
#############
# System Part #
import select
import socket
run = True
userTerminate=False
def terminate(btn):
global run, userTerminate
run = False
userTerminate = btn is not None
def pdMsgListProcessor(msgList):
for msg in msgList:
#remove trailing semicolon
msg = msg[:-2]
#split words
words = msg.split(' ')
if words[0] == 'close':
terminate(None)
else:
pdMsgProcessor(words)
#Prepare dialog
from PySide import QtGui
mb = QtGui.QMessageBox()
mb.setIcon(mb.Icon.Warning)
mb.setText("Wait for PureData connection...")
mb.setWindowTitle("PureData connection")
mb.setModal(False)
mb.setStandardButtons(mb.StandardButton.Close)
mb.buttonClicked.connect(terminate)
mb.show()
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
server_socket.bind((ADDRESS, PORT))
server_socket.listen(5)
Msg("PDServer : Listening on port %i" % PORT)
read_list = [server_socket]
readBuffer = ""
while run:
FreeCADGui.updateGui()
readable, writable, errored = select.select(read_list, [], [],0.1)
for s in readable:
if s is server_socket:
client_socket, address = server_socket.accept()
read_list.append(client_socket)
Msg("PDServer : Connection from %s:%s" % address)
mb.setText("Connected with PureData")
else:
data = s.recv(1024)
if data:
readBuffer += data.decode('utf8')
msgList = readBuffer.splitlines(True)
#is last line complete ?
lastLine = msgList[-1]
readBuffer = ""
if not lastLine[-2:] == "\r\n":
msgList = msgList[:-1]
readBuffer = lastLine
pdMsgListProcessor(msgList)
else:
s.close()
read_list.remove(s)
except:
Err("PDServer : %s\r\n" % sys.exc_info()[1])
finally:
try:
server_socket.shutdown(socket.SHUT_RDWR)
except OSError:
pass
server_socket.close()
mb.close()