pablodp606

Quadriflow

Jun 28th, 2019
1,468
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.85 KB | None | 0 0
  1. import bpy
  2. import os
  3. from bpy.props import (
  4.     BoolProperty,
  5.     BoolVectorProperty,
  6.     FloatProperty,
  7.     FloatVectorProperty,
  8.     IntProperty,
  9. )
  10.  
  11.  
  12. QUADRIFLOW_PATH = ""
  13.  
  14. class QuadriflowRemeshOperator(bpy.types.Operator):
  15.     """Tooltip"""
  16.     bl_idname = "object.quadriflow_remesh"
  17.     bl_label = "Quadriflow Remesh"    
  18.  
  19.     @classmethod
  20.     def poll(cls, context):
  21.         return context.active_object is not None
  22.  
  23.     def execute(self, context):
  24.         ob = context.object
  25.         output_path = os.path.join(QUADRIFLOW_PATH, 'input.obj')
  26.         input_path = os.path.join(QUADRIFLOW_PATH, 'output.obj')
  27.         bpy.ops.export_scene.obj(filepath=output_path, check_existing=True, use_selection=True, use_mesh_modifiers=False, use_normals=True, use_uvs=True, use_materials=False, use_triangles=True, path_mode='AUTO')
  28.         quadriflow_command = os.path.join(QUADRIFLOW_PATH, 'quadriflow')
  29.         if ob.quadriflow_mcf:
  30.               quadriflow_command += " -mcf"
  31.              
  32.         if ob.quadriflow_sharp:
  33.               quadriflow_command += " -sharp"
  34.         quadriflow_command += " -i " + output_path
  35.         quadriflow_command += " -o " + input_path
  36.         quadriflow_command += " -f " + str(ob.quadriflow_resolution)
  37.         print(quadriflow_command)
  38.         os.system(quadriflow_command)
  39.         bpy.ops.object.delete()
  40.         bpy.ops.import_scene.obj(filepath=input_path)
  41.         return {'FINISHED'}
  42.  
  43.    
  44. class PT_quadriflow(bpy.types.Panel):
  45.     bl_idname = "OBJECT_PT_quadriflow"
  46.     bl_label = "Quadriflow"
  47.     bl_space_type = 'PROPERTIES'
  48.     bl_region_type = 'WINDOW'
  49.     bl_context = "data"
  50.  
  51.     def draw(self, context):
  52.         layout = self.layout
  53.         ob = context.object
  54.         layout.prop(ob, "quadriflow_resolution")
  55.         layout.prop(ob, "quadriflow_mcf")
  56.         layout.prop(ob, "quadriflow_sharp")
  57.         props = layout.operator("object.quadriflow_remesh", icon='MESH_CUBE', text="Quadriflow Remesh")
  58.        
  59.  
  60. def register():
  61.    
  62.     bpy.types.Object.quadriflow_resolution = bpy.props.IntProperty(
  63.         name="Resolution",
  64.         description="Target number of output faces",
  65.         min=5, max=10000,
  66.         default=300,
  67.     )
  68.     bpy.types.Object.quadriflow_mcf = bpy.props.BoolProperty(
  69.         name="Min-cost flow",
  70.         description="Adaptive network simplex minimum-cost flow solver",
  71.         default=False,
  72.     )
  73.     bpy.types.Object.quadriflow_sharp = bpy.props.BoolProperty(
  74.          name="Sharp preserverving",
  75.         description="Detect and perserve the sharp edges",
  76.         default=True,
  77.     )
  78.  
  79.     bpy.utils.register_class(QuadriflowRemeshOperator)
  80.     bpy.utils.register_class(PT_quadriflow)
  81.  
  82. def unregister():
  83.     bpy.utils.unregister_class(QuadriflowRemeshOperator)
  84.     bpy.utils.unregister_class(PT_quadriflow)
  85.  
  86.  
  87. if __name__ == "__main__":
  88.     register()
Advertisement
Add Comment
Please, Sign In to add comment