Автор Тема: Люди помогите по Python! Нужно изменить текст в реальном времени  (Прочитано 2697 раз)

Оффлайн dean

  • Житель
Нужно изменить текст в реально времени без перезапуска сцены но почему то не работает  надо делать рестарт сцены либо перезапуст пробовал bpy.types.Scene.update() тоже нифига созданием и перемещение объектов такая же фигня кто знает как это делать либо я чего то не знаю
import bpy
import bge
bge.logic.getCurrentScene()
bpy.ops.object.text_add(location=(0, 0, 0), rotation=(0, 0, 0))
txt = bpy.data.objects['Text']
txt.data.body = 'Testing'
bpy.types.Scene.update()

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... а чем тебе этот код не понравился?! ...

Код: python
import bpy
import time
 
class ModalTimerOperator(bpy.types.Operator):
    """Operator which runs its self from a timer"""
    bl_idname = "wm.modal_timer_operator"
    bl_label = "Modal Timer Operator"
 
    limits = bpy.props.IntProperty(default=0)
    _timer = None
 
    def modal(self, context, event):
        if event.type in {'RIGHTMOUSE', 'ESC'} or self.limits > 30:
            self.limits = 0
            self.cancel(context)
            return {'FINISHED'}
 
        if event.type == 'TIMER':
            if not ("Text" in bpy.data.objects):
                bpy.ops.object.text_add(location=(0, 0, 0), rotation=(0, 0, 0))
            txt = bpy.data.objects['Text']
            txt.data.body = 'Testing'+ time.ctime()
            #self.limits += 1
        return {'PASS_THROUGH'}
 
    def execute(self, context):
        wm = context.window_manager
        self._timer = wm.event_timer_add(time_step=0.1, window=context.window)
        wm.modal_handler_add(self)
        return {'RUNNING_MODAL'}
 
    def cancel(self, context):
        wm = context.window_manager
        wm.event_timer_remove(self._timer)
 
def register():
    bpy.utils.register_class(ModalTimerOperator)
 
 
def unregister():
    bpy.utils.unregister_class(ModalTimerOperator)
 
if __name__ == "__main__":
    register()
 
    # test call
    bpy.ops.wm.modal_timer_operator()
Для Кота

Оффлайн dean

  • Житель
Он не работает!! Опять такая же фигня запустил blender game текст нифига не меняет только работает когда run скрипт запускаешь и сцена не запущена! Нажимаю клавишу текст не поменялся!!! Останавливаю сцену текст изменился такая жэе фигня в реальном времени не пашет почему то!! ВОТ ИСХОДНИК

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... то есть тебе нужно для bge? менять текст в зависимости от условия? ...
Для Кота

Оффлайн dean

  • Житель
В смысле с условием? Blender game Engine я игру делаю движок нравится но бесит что скрипты не работаю! мне нужно чтобы в реальном времени все менялось а не после перезапуска сцены я игру делаю а скрипты как то тупят в реальном ничего не менятеся!
http://rgho.st/8bRHpYdmY вот исходник нажимаю клавишу Q ничего не происходит останавливая сцену текст сменился почему так ??? аналогично с объектами не перемещаются тоже у тебя код в сто раз больше моего хотя и мой работает но прикол в том что ни один из них в реальном времени текст не меняется никак не могу сдвинуться с метвой точки из из за этой фигни

Не пойму!! Вот мой код работает же почему он в реально времени не работает я же обновляю сцену bpy.types.Scene.update() но тоже бестолку помогает только Scene RESTART!!
import bpy
import bge
bge.logic.getCurrentScene()
bpy.ops.object.text_add(location=(0, 0, 0), rotation=(0, 0, 0))
txt = bpy.data.objects['Text']
txt.data.body = 'Testing'
bpy.types.Scene.update()

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Код: bge
import bpy
import bge
import time

for scene in bge.logic.getSceneList():
    for obj in scene.objects:
        if obj.name=='Text':
            obj.text='Testing'+time.ctime()
Для Кота

Оффлайн dean

  • Житель
ура ДРУГ ТЫ ПРОСТО МАСТЕР как ты до этого додумался я уже 6 месяц ищу как решить проблему а как переместить куб ? В позицию ???  по координатам ? аналогично в реальном времени ? Даже на официальном сайте по документациям как в реальном времени менять не нашел а ты узнал пффф

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
>> реальном времени текст не меняется никак не могу сдвинуться с метвой точки из из за этой фигни
... в предыдущем сообщении рабочий пример отображения времени в bge в реальном времени ...

>> нажимаю клавишу Q ничего не происходит останавливая сцену текст сменился почему так ???
... дело в том что bpy и bge имеют свои области представления данных, то есть когда ты запускаешь bge то по факту создаетс дополнительные структуры для обеспечения его работы и нужно получать доступ к объектам bge, а не bpy ...
... а так получается ты меняешь объект из bpy и он отображается только после того как заканчивает работать bge ...
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... если в сцене есть объект Cube, то аналогично получи к нему доступ в bge и меняй worldPosition (это вектор) ...

Код: python
import bpy
import bge
import time

for scene in bge.logic.getSceneList():
    for obj in scene.objects:
        if obj.name=='Text':
            obj.text='Testing'+time.ctime()
        if obj.name=='Cube':
            obj.worldPosition[0]+=0.1
            obj.color[0]-=0.01
Для Кота

Оффлайн dean

  • Житель

Слушай а по координатам как переместить ???
у меня есть xpos ypos zpos в них например данные и как это все вписать ?:

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Есть код получает данные с сервера и выводит в консоль через print(data) мне нужно выводить данные на объект text но почему то выходит ошибка no module named bge и код перестает работать как исправить
--------------------------------
Этот код надо вставить

import bpy
import bge
import time

for scene in bge.logic.getSceneList():
    for obj in scene.objects:
        if obj.name=='Text':
            obj.text='SSS'
---------------------------------------------------------------------------------------------
Вот сам код

import bpy
import bge
import time
import socket

from threading import Thread # This is the right package name
TCP_IP = '127.0.0.1'
TCP_PORT = 5792
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

class UpdateThread(Thread):
   
    def __init__(self):
        self.stopped = False
        Thread.__init__(self) # Call the super construcor (Thread's one)
    def run(self):
        while not self.stopped:
            self.downloadValue()

    def downloadValue(self):
        data = s.recv(1024).decode()
        print (data)

myThread = UpdateThread()
myThread.start()

for scene in bge.logic.getSceneList():
    for obj in scene.objects:
        if obj.name == 'Text':
            obj.text = data

--------------

>> но почему то выходит ошибка no module named bge и код перестает работать как исправить
... у тебя сервер как запускается через bge или как скрипт?! судя по сообщению - очевидно как скрипт, так на момент запуска скрипта у тебя нет запущенного bge ...
... на самом деле это не простой вопрос - тебе нужно прописать архитектуру твоего приложения, взаимодействие между клиентами и сервером и уже после этого кодить ...

... ещё обрати внимание
https://wiki.blender.org/index.php/Doc:/Tutorials/Game_Engine/ScriptMode_vs_ModuleMode
http://blender.stackexchange.com/questions/53291/how-can-i-make-save-and-load-for-bge

... и полезности в примерах
http://www.tutorialsforblender3d.com/
Для Кота

Оффлайн dean

  • Житель
Сангрин вот исходник сервер то все работает сервер сделал на VB
глюки в самом блендере и pythone
test.py положи в папку Blender'a scripts/modules
нажми на H в проекте только консоль не забудь запустить данные приходят в консоль но мне надо вывести на обект текст который ты мне дал не мог бы ты помоч подкорректировать исходнить + добавить код который закрывает консоль блендера потому что после остановки проекта он не откючается от сервера. + Добавить клавишу ESC на команду s.close() в этот же test.py модуль как нить по умному через def main() а то у меня все в одной куче так как я еще многого не знаю
Твой код впиши в модуль test.py чтобы приходили данные в обект текст

и еще ОЧЕНЬ БОЛЬШОЙ МИНУС КОГДА ДАННЫЕ НЕ ПРИХОДЯТ!! Blender зависает очень плохо если знаешь как это исправить тоже подправь код буду очень благодарен

точнее когда вызывается команда s.Recv и данных нет то зависает читал что надо использовать socket.setblocking() но так и не получилось встроить его в код
import bpy
import bge
import time

for scene in bge.logic.getSceneList():
    for obj in scene.objects:
        if obj.name=='Text':
            obj.text='SSS'
-----------------------------------

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
... сорри, у меня нет возможности запускать .exe ...
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Для Кота

Оффлайн dean

  • Житель
Не устанавливается почему то (( хотя написано что поддерживается питон версии 3
It supports Python 2.7 or 3.x, with limited support for Python 2.6.

И его фиг установишь не мог бы ты помоч ? У меня стоит Python 3.6.0 в системе
в папке с питоном в скриптах нашел pip.exe ntgthm мне кидать paho-mqtt-1.1 чтобы его установить ?
По виду он легче даже есть вижу событые мою любимое как VB on message наподобие Data_arrival но и документации не вижу по нему

pip install paho-mqtt написано так но куда же то надо кинуть эту папку paho чтобы он ее увидел рядом в скритах где лежит pip.exe ?

И как его использовать ?? В Питоне на блендере? сервер то у меня на VB будет
а клиент в блендере блендер клиент будет принимать данные в виде cube1:x:y:z и  потом сплиттом данные разбирать и координаты подставлять уже в блендере под куб например
« Последнее редактирование: 13 Январь 2017, 12:43:52 от dean »

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 112
Автор: LEXA ANЭGROWND
blender.png
Скачано: 118
Автор: ipv2007
4.png
Скачано: 148
Автор: hiroyukiss
2.png
Скачано: 172
Автор: hiroyukiss

Скачано: 183
Автор: Dilifa12