Advertisement
ebak32

tunnelgen.py

Jul 16th, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.51 KB | None | 0 0
  1. bl_info = {
  2.     "name": "TunnelGen",
  3.     "category": "Curve"
  4. }
  5.  
  6. # /usr/share/blender/scripts
  7.  
  8. import bpy
  9. import bpy.types
  10.  
  11. from bpy.utils import register_module, unregister_module
  12. from bpy.props import StringProperty, FloatProperty, IntProperty, BoolProperty
  13.  
  14. import math
  15.  
  16.  
  17.  
  18. class TunnelGenProps(bpy.types.PropertyGroup):
  19.    
  20.     showPanel = BoolProperty()
  21.    
  22.     trackLength = FloatProperty(
  23.         name="Track length",
  24.         description="Track length in meters", default=1000.0, min=100.0)
  25.    
  26.     radius = FloatProperty(
  27.         name="Tunnel radius",
  28.         description="Radius of the tunnel in meters", default=16.0,
  29.         min=6.0, max=32.0)
  30.    
  31.     segments = IntProperty(
  32.         name="Circle segments",
  33.         min=6, max=64, default=32)
  34.    
  35.     bezierResolution = IntProperty(
  36.         name="Bezier resolution",
  37.         min=32, max=1024, default=256)
  38.  
  39.  
  40.  
  41. class SetShowPanelOperator(bpy.types.Operator):
  42.     '''Set Show Panel'''
  43.     bl_idname = "curve.set_show_panel_operator"
  44.     bl_label = "Set Show Panel"
  45.     bl_options = {'REGISTER', 'UNDO'}
  46.  
  47.     def execute(self, context):
  48.         bpy.types.Scene.tunnelGenProps.showPanel = True
  49.         return {'FINISHED'}
  50.  
  51.  
  52. class TunnelGen(bpy.types.Operator):
  53.     """Tunnel Generator"""
  54.     bl_idname = "curve.tunnel_generator"
  55.     bl_label = "Tunnel Generator"
  56.     bl_options = {'REGISTER', 'UNDO'}
  57.    
  58.     #sizeDesc = StringProperty(name="Size", default="x=0, y=0, z=0",
  59.     #    description='Bounds of master line')
  60.    
  61.     @classmethod
  62.     def poll(cls, context):
  63.         # obj = context.active_object
  64.         # return (obj and obj.type == 'CURVE')
  65.         return True
  66.    
  67.     def debug(self, msg):
  68.         self.report({'INFO'}, msg)
  69.    
  70.     def preInit(self):
  71.         props = bpy.types.Scene.tunnelGenProps
  72.         segmentAngle = 2 * math.pi / props.segments
  73.         self.circleSegmentSize = 2 * props.radius * math.sin(0.5 * segmentAngle)
  74.         pass
  75.  
  76.     def execute(self, context):
  77.         scene = context.scene
  78.         curve = scene.objects.active
  79.         self.debug('obj is {}.'.format(type(curve)))
  80.         self.debug('splines: {}'.format(len(curve.data.splines)))
  81.         spline = curve.data.splines[0]
  82.         self.debug('bezier points: {}'.format(len(spline.bezier_points)))
  83.         # mathutils.geometry.interpolate_bezier(knot1, handle1, handle2, knot2, resolution)ΒΆ
  84.         # TODO do stuff
  85.         bpy.types.Scene.tunnelGenProps.showPanel = False
  86.         return {'FINISHED'}
  87.  
  88.  
  89. class TunnelGenPanel(bpy.types.Panel):
  90.  
  91.     bl_label = "Tunnel Generator"
  92.     bl_space_type = "VIEW_3D"
  93.     bl_region_type = "TOOL_PROPS"
  94.  
  95.    
  96.     def debug(self, msg):
  97.         self.report({'INFO'}, msg)
  98.    
  99.     @classmethod
  100.     def poll(cls, context):
  101.         obj = context.active_object
  102.         return obj and obj.type == 'CURVE' and bpy.types.Scene.tunnelGenProps.showPanel
  103.  
  104.     def draw(self, context):
  105.         self.layout.operator("curve.tunnel_generator")
  106.  
  107.  
  108. def menu_func(self, context):
  109.     self.layout.operator(SetShowPanelOperator.bl_idname)
  110.  
  111.  
  112. def register():
  113.     # register_class(TunnelGen)
  114.     # bpy.types.VIEW3D_MT_edit_mesh_specials.append(menu_func)
  115.     register_module(__name__)
  116.     bpy.types.Scene.tunnelGenProps = TunnelGenProps()
  117.     bpy.types.VIEW3D_MT_edit_curve_specials.append(menu_func)
  118.  
  119.  
  120. def unregister():
  121.     bpy.types.VIEW3D_MT_edit_curve_specials.remove(menu_func)
  122.     unregister_module(__name__)
  123.     del bpy.types.Scene.tunnelGenProps
  124.  
  125.  
  126. if __name__ == '__main__':
  127.     register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement