Here is an add-on I'm trying to create:
import bpy
import os
import sys
import subprocess
import time
from threading import *
class Repeat(Thread):
def __init__(self,delay,function,*args,**kwargs):
Thread.__init__(self)
self.abort = Event()
self.delay = delay
self.args = args
self.kwargs = kwargs
self.function = function
def stop(self):
self.abort.set()
def run(self):
while not self.abort.isSet():
self.function(*self.args,**self.kwargs)
self.abort.wait(self.delay)
class ExportToGIMP(bpy.types.Operator):
bl_idname = "uv.exporttogimp"
bl_label = "Export to GIMP"
def execute(self, context):
f = open("/home/antoni4040/blender.txt", "w").close()
self.filepath = os.path.join(os.path.dirname(bpy.data.filepath), "Layout")
bpy.ops.uv.export_layout(filepath=self.filepath, check_existing=True, export_all=False, modified=False, mode='PNG', size=(1024, 1024), opacity=0.25, tessellated=False)
self.files = os.path.dirname(bpy.data.filepath)
cmd = " (python-fu-bgsync RUN-NONINTERACTIVE)"
subprocess.Popen(['gimp', '-b', cmd])
file = Repeat(3, self.up)
file.start()
return {'FINISHED'};
def doit(self):
r = Repeat(3, self.update)
r.start()
def up(self):
f = open("/home/antoni4040/blender.txt", "r")
string = f.read()
if "ok" in string:
self.materialize()
self.doit()
file.stop()
else:
pass
def update(self):
self.layout_texture.image.reload()
for area in bpy.data.screens['Default'].areas:
if area.type in ['IMAGE_EDITOR', 'VIEW_3D']:
area.tag_redraw()
def materialize(self):
self.layout_texture = bpy.data.textures.new(name = "Layout_Texture", type = "IMAGE")
self.material = bpy.data.materials.new(name="Layout")
self.object = bpy.context.active_object
self.material_texture = self.material.texture_slots.add()
self.material_texture.texture = self.layout_texture
self.material_texture.texture_coords = "UV"
self.filepath2 = "/home/antoni4040/Έγγραφα/Layout1.png"
self.texture_image = bpy.data.images.load(self.filepath2)
self.layout_texture.image = self.texture_image
self.con_obj = self.object.data
self.con_obj.materials.append(self.material)
bpy.data.screens['UV Editing'].areas[1].spaces[0].image = self.texture_image
def exporttogimp_menu(self, context):
self.layout.operator(ExportToGIMP.bl_idname, text="Export To GIMP")
bpy.utils.register_class(ExportToGIMP)
bpy.types.IMAGE_MT_uvs.append(exporttogimp_menu)
Which works along with this:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gimpfu import *
import time
import sys
def blender_gimp_sync():
im_dir = "/home/antoni4040/Έγγραφα/Layout.png"
image = gimp.pdb.gimp_file_load(im_dir, im_dir)
gimp.Display(image)
layer = gimp.pdb.gimp_layer_new(image, 1024, 1024, RGBA_IMAGE, "PaintHere", 100.0, NORMAL_MODE)
image.add_layer(layer)
drawable = pdb.gimp_image_get_active_layer(image)
num = 1
while True:
time.sleep(3.0)
if image is not None:
ims_dir = "/home/antoni4040/Έγγραφα/Layout1.png"
gimp.pdb.file_png_save(image, drawable, ims_dir, ims_dir, 0, 0, 0, 0, 0, 0, 0)
f = open("/home/antoni4040/blender.txt", "w")
f.write("ok")
else:
pass
register(
"python_fu_bgsync",
"Blender-Gimp Sync",
"Syncronize Gimp with Blender for texturing",
"Antonis Karvelas",
"Antonis Karvelas",
"2012",
"Sync",
"",
[],
[],
blender_gimp_sync,
menu="<Image>/Image/Blender-Gimp"
)
main()
But, I always get a segmentation fault error... Why is that happening? What I'm doing wrong?
Well, you can find this in the code Templates as "Operator Modal Timer", that shows how to do things continuously in Blender: