BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 100|回复: 2

想用text editor实现实时导入ply文件的功能

[复制链接]
发表于 2018-11-15 09:44:18 | 显示全部楼层 |阅读模式
      我想实现的是隔5秒导入一个ply文件,然后在下一个读入的时候删除上一个文件,类似于实时导入
一些画面,想最终实现实时浏览物体运动,代码如下。但是这个代码运行之后不会出现中间导入结果,
只会在最后显示最后一个导入的模型。请各位朋友们帮忙看看有什么问题,需要怎么改进一下。




import time
from import_ply import *

def run(interval, ply_file, num):
      for i in range(num):
           print ("[%s]" % (time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime())))
           if i ==0:
                load_ply(ply_file[i])
                ply_name = bpy.path.display_name_from_filepath(ply_file[i])
                bpy.ops.material.new()
                mat1 = bpy.data.materials['Material']
                bpy.data.objects[ply_name].data.materials.append(mat1)
                mat1.use_shadeless = True
                mat1.use_vertex_color_paint = True
                time_remaining = interval - time.time() % interval
                time.sleep(time_remaining)
           else:
                 bpy.data.objects[ply_name].select = True
                 bpy.ops.object.delete(use_global = False)
                 load_ply(ply_file[i])
                 ply_name = bpy.path.display_name_from_filepath(ply_file[i])
                 bpy.data.objects[ply_name].data.materials.append(mat1)
                 mat1.use_shadeless = True
                 mat1.use_vertex_color_paint = True
                 time_remaining = interval - time.time() % interval
                 time.sleep(time_remaining)


interval = 5
num = 3
ply_file = []
filepath = 'C:\\Users\\12.ply"
ply_file.append(filepath)
filepath = 'C:\\Users\\13.ply"
ply_file.append(filepath)

filepath = 'C:\\Users\\14.ply"
ply_file.append(filepath)


run(interval, ply_file,num)
 楼主| 发表于 2018-11-16 11:35:18 | 显示全部楼层
我找到了解决方案,还是自己回答下吧 。。可以加这一句实现实时更新
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-16 11:36:40 | 显示全部楼层
或者也可以采取下面这种方法,都是我从别的网站上copy下来的
import bpy
import random

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':
            XYZcoord = (random.random()*100, random.random()*100, random.random()*100)
            bpy.ops.mesh.primitive_uv_sphere_add(location=XYZcoord)
            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()
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2018-12-14 14:46 , Processed in 0.014677 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表