Message 1 of 2
Merge Script with Port listening
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi!
I'm working in a script to merge a model "modeltemp.max" always that the port 7500 listen to a external command
I have a python running this message with a 3d library
This is my script in maxscript:
--
fn mergeModel =
(
-- As opções de mesclagem são definidas aqui
mergeMAXFile "C:\\temp\\modeltemp.max" #autoRenameDups #renameMtlDups #select
print "Model merged successfully!"
)
fn createServer ipAddress port =
(
dotNetIPAddress = (DotNetClass "System.Net.IPAddress").Parse ipAddress
tcpListener = DotNetObject "System.Net.Sockets.TcpListener" dotNetIPAddress port
tcpListener.Start()
msgReceived = ""
print ("listening on " + (ipAddress as string) + ":" + (port as string))
while true do
(
print("waiting for a client socket")
socket = tcpListener.AcceptSocket()
print("client socket accepted")
while msgReceived != "exit" do
(
sendByteStream = DotNetObject "System.Byte[]" 10000
socket.Receive sendByteStream
encoding = DotnetClass "System.Text.UTF8Encoding"
msgReceived = trimright (encoding.UTF8.GetString(sendByteStream))
if msgReceived == "socketClosing" then (
print("closing socket")
socket.Close()
exit
)
else (
if msgReceived != "" then (
print("Received : " + msgReceived)
-- Instead of executing received message, just merge the model
try(
mergeModel()
result = "Success"
) catch (
error_str = "***" + getCurrentException() +"***\n"
print(error_str)
result = "Error"
)
-- send result
ascii_encoder = dotNetObject "System.Text.ASCIIEncoding"
bytes = ascii_encoder.GetBytes (result as string)
result = socket.Send bytes
)
)
)
)
)
fn BackgroundTcpListenerDoWork theSender theEvent =
(
ipAddress = "127.0.0.1"
port = 7500
try (
createServer ipAddress port
exit
)
catch(
print("server crashed or port " + (port as string) + " is already used")
)
)
BackgroundWorker = DotNetObject "System.ComponentModel.BackgroundWorker"
DotNet.AddEventHandler BackgroundWorker "DoWork" BackgroundTcpListenerDoWork
BackgroundWorker.WorkerSupportsCancellation = true
BackgroundWorker.RunWorkerAsync()
--
In Python i have:
--
def sendMessage(msg, sock😞
sock.send(msg.encode('utf-8'))
return sock.recv(responseBufferSize).decode('utf-8')
def send_to_max(filepath😞
def sendMessage(msg, sock😞
sock.send(msg.encode('utf-8')) # Converta a mensagem para bytes usando utf-8
return sock.recv(responseBufferSize).decode('utf-8') # Decodifique a resposta de volta para string
responseBufferSize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 7500))
merge_command = f'mergeMAXFile "{filepath}"'
sendMessage(merge_command, s)
sendMessage('socketClosing', s)
s.shutdown(socket.SHUT_RDWR)
s.close()
--
The script work, but after the merge 3ds max presents a weird behavior, moving objects gets "acelerated" for a while (and sometimes crashes)
Also the merged object isnt kept selected.
Any thought on that?
Thanks
Ronald