4

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 ```

0 Answers0