hey guys i'm trying to use some blender commandes inside a async methodes, but it seemes like blender commands don't work insisde async methodes, i will apreciate any help:
from bpy import context
import asyncio
import time
import datetime
from spade.agent import Agent
from spade.behaviour import OneShotBehaviour
from spade.message import Message
from spade.template import Template
class ModeChangerAgent(Agent):
class ModeChangingBehav(OneShotBehaviour):
async def run(self):
print(f"Mode Changing Agent : Mode Changer Behaviour is running ... at {datetime.datetime.now().time()}")
print("Mode Changing Agent : Mode Changing ... ")
for obj in bpy.context.scene.objects:
bpy.context.view_layer.objects.active = bpy.context.scene.objects[2]
obj_act = bpy.context.view_layer.objects.active
if obj_act and obj_act.mode == 'OBJECT':
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.object.mode_set_with_submode(mode='OBJECT')
else:
pass
print("Mode Changing Agent : Mode changed to edit mode.")
#********message to the face changer agent*******************
msg = Message(to="anotherAgentJID@XMPPserver") # Instantiate the message
msg.set_metadata("performative", "inform") # Set the "inform" FIPA performative
msg.body = "you can start the face changing!" # Set the message content
await self.send(msg)
print("Mode Changing Agent : message sent!")
msg = await self.receive(timeout=30) # wait for a message for 10 seconds
if msg:
print("Mode Changing Agent : Message received with content: {}".format(msg.body))
async def on_end(self):
await self.agent.stop()
async def setup(self):
print(f"Mode Changing Agent : Mode Changer Agent started at {datetime.datetime.now().time()}")
b = self.ModeChangingBehav()
template = Template()
template.set_metadata("performative", "inform")
self.add_behaviour(b, template)
if name == "main":
#execution**********************
modechangeragent = ModeChangerAgent("agentJID@XMPPserver", "password")
future = modechangeragent.start()
future.result() # wait for receiver agent to be prepared.
while modechangeragent.is_alive():
try:
time.sleep(1)
except KeyboardInterrupt:
modechangeragent.stop()
break
print("Mode Changer Agent finished")"""
and this is the error i get every time and i didn't find a solution:
Mode Changing Agent : Mode Changer Behaviour is running ... at 13:51:51.036063
Mode Changing Agent : Mode Changing ...
Exception running behaviour OneShotBehaviour/ModeChangingBehav: Operator bpy.ops
.object.editmode_toggle.poll() failed, context is incorrect
Traceback (most recent call last):
File "C:\Program Files\Blender Foundation\Blender 2.83\2.83\python\lib\site-pa
ckages\spade\behaviour.py", line 264, in _step
await self._run()
File "C:\Program Files\Blender Foundation\Blender 2.83\2.83\python\lib\site-pa
ckages\spade\behaviour.py", line 253, in _run
await self.run()
File "\Text", line 27, in run
File "C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\modules\bp
y\ops.py", line 201, in __call__
ret = op_call(self.idname_py(), None, kw)
RuntimeError: Operator bpy.ops.object.editmode_toggle.poll() failed, context is
incorrect
Mode Changer Agent finished
```