kopia lustrzana https://github.com/vilemduha/blendercam
first try on background operations.
rodzic
f85b8ac588
commit
2f14dad681
|
|
@ -31,6 +31,7 @@ from . import utils#, post_processors
|
||||||
import numpy
|
import numpy
|
||||||
import Polygon
|
import Polygon
|
||||||
from bpy.app.handlers import persistent
|
from bpy.app.handlers import persistent
|
||||||
|
import subprocess,os
|
||||||
#from .utils import *
|
#from .utils import *
|
||||||
|
|
||||||
bl_info = {
|
bl_info = {
|
||||||
|
|
@ -299,10 +300,10 @@ class camOperation(bpy.types.PropertyGroup):
|
||||||
#class camOperationChain(bpy.types.PropertyGroup):
|
#class camOperationChain(bpy.types.PropertyGroup):
|
||||||
# c=bpy.props.collectionProperty()
|
# c=bpy.props.collectionProperty()
|
||||||
'''
|
'''
|
||||||
class ModalTimerOperator(bpy.types.Operator):
|
class CamBackgroundMonitor(bpy.types.Operator):
|
||||||
"""Operator which runs its self from a timer"""
|
"""Manages CAM background operations"""
|
||||||
bl_idname = "wm.modal_timer_operator"
|
bl_idname = "wm.cam_background_manager"
|
||||||
bl_label = "Modal Timer Operator"
|
bl_label = "CAM background manager"
|
||||||
|
|
||||||
_timer = None
|
_timer = None
|
||||||
|
|
||||||
|
|
@ -327,83 +328,28 @@ class ModalTimerOperator(bpy.types.Operator):
|
||||||
context.window_manager.event_timer_remove(self._timer)
|
context.window_manager.event_timer_remove(self._timer)
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
'''
|
'''
|
||||||
"""
|
class PathsBackground(bpy.types.Operator):
|
||||||
class PathsModal(bpy.types.Operator):
|
'''calculate CAM paths in background'''
|
||||||
'''calculate CAM paths'''
|
bl_idname = "object.calculate_cam_paths_background"
|
||||||
bl_idname = "object.calculate_cam_paths_modal"
|
bl_label = "Calculate CAM paths in background"
|
||||||
bl_label = "Calculate CAM paths modal"
|
|
||||||
bl_options = {'REGISTER', 'UNDO'}
|
bl_options = {'REGISTER', 'UNDO'}
|
||||||
|
|
||||||
#this property was actually ignored, so removing it in 0.3
|
|
||||||
#operation= StringProperty(name="Operation",
|
|
||||||
# description="Specify the operation to calculate",default='Operation')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
#getIslands(context.object)
|
bpy.ops.wm.save_mainfile()
|
||||||
s=bpy.context.scene
|
bpath=bpy.app.binary_path
|
||||||
operation = s.cam_operations[s.cam_active_operation]
|
fpath=bpy.data.filepath
|
||||||
if not operation.valid:
|
scriptpath=bpy.utils.script_paths()[0]+os.sep+'addons'+os.sep+'cam'+os.sep+'backgroundop.py_'
|
||||||
self.report({'ERROR_INVALID_INPUT'}, "Operation can't be performed, see warnings for info")
|
|
||||||
#print("Operation can't be performed, see warnings for info")
|
proc = subprocess.Popen([bpath, '-b', fpath,'-P',scriptpath])#, stdout=subprocess.PIPE, shell=True)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
# for a in range(0,10000):
|
||||||
|
# #print(proc.stdout.readline())
|
||||||
|
# inline = proc.stdout.readline()
|
||||||
|
# if not inline:
|
||||||
|
# break
|
||||||
|
# sys.stdout.write(str(inline))
|
||||||
|
# sys.stdout.flush()
|
||||||
|
|
||||||
|
|
||||||
#these tags are for some optimisations, unfinished
|
|
||||||
operation.update_offsetimage_tag=True
|
|
||||||
operation.update_zbufferimage_tag=True
|
|
||||||
operation.update_silhouete_tag=True
|
|
||||||
operation.update_ambient_tag=True
|
|
||||||
operation.update_bullet_collision_tag=True
|
|
||||||
#operation.material=bpy.context.scene.cam_material[0]
|
|
||||||
operation.operator=self
|
|
||||||
#'''#removed for groups support, this has to be done object by object...
|
|
||||||
if operation.geometry_source=='OBJECT':
|
|
||||||
|
|
||||||
#bpy.ops.object.select_all(action='DESELECT')
|
|
||||||
ob=bpy.data.objects[operation.object_name]
|
|
||||||
operation.objects=[ob]
|
|
||||||
elif operation.geometry_source=='GROUP':
|
|
||||||
group=bpy.data.groups[operation.group_name]
|
|
||||||
operation.objects=group.objects
|
|
||||||
elif operation.geometry_source=='IMAGE':
|
|
||||||
operation.use_exact=False;
|
|
||||||
if operation.geometry_source=='OBJECT' or operation.geometry_source=='GROUP':
|
|
||||||
operation.onlycurves=True
|
|
||||||
for ob in operation.objects:
|
|
||||||
if ob.type=='MESH':
|
|
||||||
operation.onlycurves=False;
|
|
||||||
operation.warnings=''
|
|
||||||
|
|
||||||
self.operation=operation
|
|
||||||
self.operation.test=0
|
|
||||||
self._timer = context.window_manager.event_timer_add(0.1, context.window)
|
|
||||||
context.window_manager.modal_handler_add(self)
|
|
||||||
return {'RUNNING_MODAL'}
|
|
||||||
#utils.getPaths(context,operation)
|
|
||||||
|
|
||||||
def modal(self, context, event):
|
|
||||||
if event.type == 'ESC':
|
|
||||||
return self.cancel(context)
|
|
||||||
|
|
||||||
if event.type == 'TIMER':
|
|
||||||
#print('running')
|
|
||||||
self.operation.test+=1
|
|
||||||
for a in range(0,10000):
|
|
||||||
b=round(100*200/532/567.5)
|
|
||||||
# change theme color, silly!
|
|
||||||
|
|
||||||
context.area.header_text_set("doing heavy calculations here " + str( self.operation.test))
|
|
||||||
|
|
||||||
return {'PASS_THROUGH'}
|
|
||||||
|
|
||||||
def cancel(self, context):
|
|
||||||
context.window_manager.event_timer_remove(self._timer)
|
|
||||||
context.area.header_text_set()
|
|
||||||
return {'CANCELLED'}
|
|
||||||
#return {'FINISHED'}
|
|
||||||
"""
|
|
||||||
class PathsSimple(bpy.types.Operator):
|
class PathsSimple(bpy.types.Operator):
|
||||||
'''calculate CAM paths'''
|
'''calculate CAM paths'''
|
||||||
bl_idname = "object.calculate_cam_paths"
|
bl_idname = "object.calculate_cam_paths"
|
||||||
|
|
@ -1233,6 +1179,7 @@ def get_panels():
|
||||||
CAM_CUTTER_Panel,
|
CAM_CUTTER_Panel,
|
||||||
CAM_MACHINE_Panel,
|
CAM_MACHINE_Panel,
|
||||||
|
|
||||||
|
PathsBackground,
|
||||||
PathsSimple,
|
PathsSimple,
|
||||||
#PathsModal,
|
#PathsModal,
|
||||||
PathsAll,
|
PathsAll,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
# blender CAM utils.py (c) 2012 Vilem Novak
|
||||||
|
#
|
||||||
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# ***** END GPL LICENCE BLOCK *****
|
||||||
|
|
||||||
|
import bpy
|
||||||
|
bpy.ops.object.calculate_cam_paths()
|
||||||
Ładowanie…
Reference in New Issue