diff --git a/direct/src/cluster/ClusterClient.py b/direct/src/cluster/ClusterClient.py index 08cd2b661c..8796b2158e 100644 --- a/direct/src/cluster/ClusterClient.py +++ b/direct/src/cluster/ClusterClient.py @@ -83,7 +83,7 @@ class ClusterClient(DirectObject.DirectObject): scale = VBase3(1) decomposeMatrix(last.getMat(), scale, hpr, xyz) for server in self.serverList: - server.sendMoveSelected(xyz,hpr) + server.sendMoveSelected(xyz,hpr,scale) return Task.cont def getNodePathFindCmd(self, nodePath): @@ -206,13 +206,15 @@ class DisplayConnection: datagram = self.msgHandler.makeCamMovementDatagram(xyz, hpr) self.cw.send(datagram, self.tcpConn) - def sendMoveSelected(self,xyz,hpr): + def sendMoveSelected(self,xyz,hpr,scale): ClusterClient.notify.debug("send move selected...") - ClusterClient.notify.debug("packet %d xyz,hpr=%f %f %f %f %f %f" % - (self.msgHandler.packetNumber, - xyz[0],xyz[1],xyz[2], - hpr[0],hpr[1],hpr[2])) - datagram = self.msgHandler.makeSelectedMovementDatagram(xyz, hpr) + ClusterClient.notify.debug( + "packet %d xyz,hpr=%f %f %f %f %f %f %f %f %f" % + (self.msgHandler.packetNumber, + xyz[0],xyz[1],xyz[2], + hpr[0],hpr[1],hpr[2], + scale[0],scale[1],scale[2])) + datagram = self.msgHandler.makeSelectedMovementDatagram(xyz, hpr,scale) self.cw.send(datagram, self.tcpConn) # the following should only be called by a synchronized cluster manger diff --git a/direct/src/cluster/ClusterMsgs.py b/direct/src/cluster/ClusterMsgs.py index 1299a84492..28913356fe 100644 --- a/direct/src/cluster/ClusterMsgs.py +++ b/direct/src/cluster/ClusterMsgs.py @@ -154,7 +154,7 @@ class ClusterMsgHandler: (x,y,z,h,p,r))) return (x,y,z,h,p,r) - def makeSelectedMovementDatagram(self,xyz,hpr): + def makeSelectedMovementDatagram(self,xyz,hpr,scale): datagram = Datagram.Datagram() datagram.addUint32(self.packetNumber) self.packetNumber = self.packetNumber + 1 @@ -165,6 +165,9 @@ class ClusterMsgHandler: datagram.addFloat32(hpr[0]) datagram.addFloat32(hpr[1]) datagram.addFloat32(hpr[2]) + datagram.addFloat32(scale[0]) + datagram.addFloat32(scale[1]) + datagram.addFloat32(scale[2]) return datagram def parseSelectedMovementDatagram(self, dgi): @@ -174,9 +177,12 @@ class ClusterMsgHandler: h=dgi.getFloat32() p=dgi.getFloat32() r=dgi.getFloat32() - self.notify.debug(' new position=%f %f %f %f %f %f' % - (x,y,z,h,p,r)) - return (x,y,z,h,p,r) + sx=dgi.getFloat32() + sy=dgi.getFloat32() + sz=dgi.getFloat32() + self.notify.debug(' new position=%f %f %f %f %f %f %f %f %f' % + (x,y,z,h,p,r,sx,sy,sz)) + return (x,y,z,h,p,r,sx,sy,sz) def makeCommandStringDatagram(self, commandString): datagram = Datagram.Datagram() diff --git a/direct/src/cluster/ClusterServer.py b/direct/src/cluster/ClusterServer.py index 7daf84f9b2..c4c82212c4 100644 --- a/direct/src/cluster/ClusterServer.py +++ b/direct/src/cluster/ClusterServer.py @@ -193,9 +193,10 @@ class ClusterServer(DirectObject.DirectObject): def handleSelectedMovement(self,dgi): """ Update cameraJig position to reflect latest position """ - (x,y,z,h,p,r) = self.msgHandler.parseSelectedMovementDatagram(dgi) + (x,y,z,h,p,r,sx,sy,sz) = self.msgHandler.parseSelectedMovementDatagram( + dgi) if last: - last.setPosHpr(x,y,z,h,p,r) + last.setPosHprScale(x,y,z,h,p,r,sx,sy,sz) def handleCommandString(self, dgi): """ Handle arbitrary command string from client """ diff --git a/direct/src/directtools/DirectSession.py b/direct/src/directtools/DirectSession.py index 9aab9c6ff1..767a261bd1 100644 --- a/direct/src/directtools/DirectSession.py +++ b/direct/src/directtools/DirectSession.py @@ -173,6 +173,7 @@ class DirectSession(PandaObject): self.cluster = ClusterServer(base.cameraList[0], base.camList[0]) else: self.cluster = DummyClusterClient() + __builtin__.cluster = self.cluster def enable(self): # Make sure old tasks are shut down