Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bl_info = {
- "name": "TunnelGen",
- "category": "Curve"
- }
- # /usr/share/blender/scripts
- import bpy
- import bpy.types
- from bpy.utils import register_module, unregister_module
- from bpy.props import StringProperty, FloatProperty, IntProperty, BoolProperty
- import math
- class TunnelGenProps(bpy.types.PropertyGroup):
- showPanel = BoolProperty()
- trackLength = FloatProperty(
- name="Track length",
- description="Track length in meters", default=1000.0, min=100.0)
- radius = FloatProperty(
- name="Tunnel radius",
- description="Radius of the tunnel in meters", default=16.0,
- min=6.0, max=32.0)
- segments = IntProperty(
- name="Circle segments",
- min=6, max=64, default=32)
- bezierResolution = IntProperty(
- name="Bezier resolution",
- min=32, max=1024, default=256)
- class SetShowPanelOperator(bpy.types.Operator):
- '''Set Show Panel'''
- bl_idname = "curve.set_show_panel_operator"
- bl_label = "Set Show Panel"
- bl_options = {'REGISTER', 'UNDO'}
- def execute(self, context):
- bpy.types.Scene.tunnelGenProps.showPanel = True
- return {'FINISHED'}
- class TunnelGen(bpy.types.Operator):
- """Tunnel Generator"""
- bl_idname = "curve.tunnel_generator"
- bl_label = "Tunnel Generator"
- bl_options = {'REGISTER', 'UNDO'}
- #sizeDesc = StringProperty(name="Size", default="x=0, y=0, z=0",
- # description='Bounds of master line')
- @classmethod
- def poll(cls, context):
- # obj = context.active_object
- # return (obj and obj.type == 'CURVE')
- return True
- def debug(self, msg):
- self.report({'INFO'}, msg)
- def preInit(self):
- props = bpy.types.Scene.tunnelGenProps
- segmentAngle = 2 * math.pi / props.segments
- self.circleSegmentSize = 2 * props.radius * math.sin(0.5 * segmentAngle)
- pass
- def execute(self, context):
- scene = context.scene
- curve = scene.objects.active
- self.debug('obj is {}.'.format(type(curve)))
- self.debug('splines: {}'.format(len(curve.data.splines)))
- spline = curve.data.splines[0]
- self.debug('bezier points: {}'.format(len(spline.bezier_points)))
- # mathutils.geometry.interpolate_bezier(knot1, handle1, handle2, knot2, resolution)ΒΆ
- # TODO do stuff
- bpy.types.Scene.tunnelGenProps.showPanel = False
- return {'FINISHED'}
- class TunnelGenPanel(bpy.types.Panel):
- bl_label = "Tunnel Generator"
- bl_space_type = "VIEW_3D"
- bl_region_type = "TOOL_PROPS"
- def debug(self, msg):
- self.report({'INFO'}, msg)
- @classmethod
- def poll(cls, context):
- obj = context.active_object
- return obj and obj.type == 'CURVE' and bpy.types.Scene.tunnelGenProps.showPanel
- def draw(self, context):
- self.layout.operator("curve.tunnel_generator")
- def menu_func(self, context):
- self.layout.operator(SetShowPanelOperator.bl_idname)
- def register():
- # register_class(TunnelGen)
- # bpy.types.VIEW3D_MT_edit_mesh_specials.append(menu_func)
- register_module(__name__)
- bpy.types.Scene.tunnelGenProps = TunnelGenProps()
- bpy.types.VIEW3D_MT_edit_curve_specials.append(menu_func)
- def unregister():
- bpy.types.VIEW3D_MT_edit_curve_specials.remove(menu_func)
- unregister_module(__name__)
- del bpy.types.Scene.tunnelGenProps
- if __name__ == '__main__':
- register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement