blender-addons/btrace/bTrace_props.py

568 lines
20 KiB
Python

# ##### 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 LICENSE BLOCK #####
import bpy
from bpy.types import (
Panel,
PropertyGroup,
)
from bpy.props import (
FloatProperty,
EnumProperty,
IntProperty,
BoolProperty,
FloatVectorProperty,
)
# Class to define properties
class TracerProperties(PropertyGroup):
"""Options for tools"""
curve_spline: EnumProperty(
name="Spline",
items=(("POLY", "Poly", "Use Poly spline type"),
("NURBS", "Nurbs", "Use Nurbs spline type"),
("BEZIER", "Bezier", "Use Bezier spline type")),
description="Choose which type of spline to use when curve is created",
default="BEZIER"
)
curve_handle: EnumProperty(
name="Handle",
items=(("ALIGNED", "Aligned", "Use Aligned Handle Type"),
("AUTOMATIC", "Automatic", "Use Auto Handle Type"),
("FREE_ALIGN", "Free Align", "Use Free Handle Type"),
("VECTOR", "Vector", "Use Vector Handle Type")),
description="Choose which type of handle to use when curve is created",
default="VECTOR"
)
curve_resolution: IntProperty(
name="Bevel Resolution",
min=1, max=32,
default=4,
description="Adjust the Bevel resolution"
)
curve_depth: FloatProperty(
name="Bevel Depth",
min=0.0, max=100.0,
default=0.1,
description="Adjust the Bevel depth"
)
curve_u: IntProperty(
name="Resolution U",
min=0, max=64,
default=12,
description="Adjust the Surface resolution"
)
curve_join: BoolProperty(
name="Join Curves",
default=False,
description="Join all the curves after they have been created"
)
curve_smooth: BoolProperty(
name="Smooth",
default=True,
description="Render curve smooth"
)
# Option to Duplicate Mesh
object_duplicate: BoolProperty(
name="Apply to Copy",
default=False,
description="Apply curve to a copy of object"
)
# Distort Mesh options
distort_modscale: IntProperty(
name="Modulation Scale",
min=0, max=50,
default=2,
description="Add a scale to modulate the curve at random points, set to 0 to disable"
)
distort_noise: FloatProperty(
name="Mesh Noise",
min=0.0, max=50.0,
default=0.00,
description="Adjust noise added to mesh before adding curve"
)
# Particle Options
particle_step: IntProperty(
name="Step Size",
min=1, max=50,
default=5,
description="Sample one every this number of frames"
)
particle_auto: BoolProperty(
name="Auto Frame Range",
default=True,
description="Calculate Frame Range from particles life"
)
particle_f_start: IntProperty(
name='Start Frame',
min=1, max=5000,
default=1,
description='Start frame'
)
particle_f_end: IntProperty(
name="End Frame",
min=1, max=5000,
default=250,
description="End frame"
)
# F-Curve Modifier Properties
fcnoise_rot: BoolProperty(
name="Rotation",
default=False,
description="Affect Rotation"
)
fcnoise_loc: BoolProperty(
name="Location",
default=True,
description="Affect Location"
)
fcnoise_scale: BoolProperty(
name="Scale",
default=False,
description="Affect Scale"
)
fcnoise_amp: IntProperty(
name="Amp",
min=1, max=500,
default=5,
description="Adjust the amplitude"
)
fcnoise_timescale: FloatProperty(
name="Time Scale",
min=1, max=500,
default=50,
description="Adjust the time scale"
)
fcnoise_key: BoolProperty(
name="Add Keyframe",
default=True,
description="Keyframe is needed for tool, this adds a LocRotScale keyframe"
)
show_curve_settings: BoolProperty(
name="Curve Settings",
default=False,
description="Change the curve settings for the created curve"
)
material_settings: BoolProperty(
name="Material Settings",
default=False,
description="Change the material settings for the created curve"
)
particle_settings: BoolProperty(
name="Particle Settings",
default=False,
description="Show the settings for the created curve"
)
animation_settings: BoolProperty(
name="Animation Settings",
default=False,
description="Show the settings for the Animations"
)
distort_curve: BoolProperty(
name="Add Distortion",
default=False,
description="Set options to distort the final curve"
)
connect_noise: BoolProperty(
name="F-Curve Noise",
default=False,
description="Adds F-Curve Noise Modifier to selected objects"
)
settings_objectTrace: BoolProperty(
name="Object Trace Settings",
default=False,
description="Trace selected mesh object with a curve"
)
settings_objectsConnect: BoolProperty(
name="Objects Connect Settings",
default=False,
description="Connect objects with a curve controlled by hooks"
)
settings_objectTrace: BoolProperty(
name="Object Trace Settings",
default=False,
description="Trace selected mesh object with a curve"
)
respect_order: BoolProperty(
name="Order",
default=False,
description="Remember order objects were selected"
)
settings_particleTrace: BoolProperty(
name="Particle Trace Settings",
default=False,
description="Trace particle path with a curve"
)
settings_particleConnect: BoolProperty(
name="Particle Connect Settings",
default=False,
description="Connect particles with a curves and animated over particle lifetime"
)
settings_growCurve: BoolProperty(
name="Grow Curve Settings",
default=False,
description="Animate curve bevel over time by keyframing points radius"
)
settings_fcurve: BoolProperty(
name="F-Curve Settings",
default=False,
description="F-Curve Settings"
)
settings_toggle: BoolProperty(
name="Settings",
default=False,
description="Toggle Settings"
)
# Animation Options
anim_auto: BoolProperty(
name="Auto Frame Range",
default=True,
description="Automatically calculate Frame Range"
)
anim_f_start: IntProperty(
name="Start",
min=1, max=2500,
default=1,
description="Start frame / Hidden object"
)
anim_length: IntProperty(
name="Duration",
min=1,
soft_max=1000, max=2500,
default=100,
description="Animation Length"
)
anim_f_fade: IntProperty(
name="Fade After",
min=0,
soft_max=250, max=2500,
default=10,
description="Fade after this frames / Zero means no fade"
)
anim_delay: IntProperty(
name="Grow",
min=0, max=50,
default=5,
description="Frames it takes a point to grow"
)
anim_tails: BoolProperty(
name='Tails on endpoints',
default=True,
description='Set radius to zero for open splines endpoints'
)
anim_keepr: BoolProperty(
name="Keep Radius",
default=True,
description="Try to keep radius data from original curve"
)
animate: BoolProperty(
name="Animate Result",
default=False,
description="Animate the final curve objects"
)
# Convert to Curve options
convert_conti: BoolProperty(
name="Continuous",
default=True,
description="Create a continuous curve using verts from mesh"
)
convert_everyedge: BoolProperty(
name="Every Edge",
default=False,
description="Create a curve from all verts in a mesh"
)
convert_edgetype: EnumProperty(
name="Edge Type for Curves",
items=(("CONTI", "Continuous", "Create a continuous curve using verts from mesh"),
("EDGEALL", "All Edges", "Create a curve from every edge in a mesh")),
description="Choose which type of spline to use when curve is created",
default="CONTI"
)
convert_joinbefore: BoolProperty(
name="Join objects before convert",
default=False,
description="Join all selected mesh to one object before converting to mesh"
)
# Mesh Follow Options
fol_edge_select: BoolProperty(
name="Edge",
default=False,
description="Grow from edges"
)
fol_vert_select: BoolProperty(
name="Vertex",
default=False,
description="Grow from verts"
)
fol_face_select: BoolProperty(
name="Face",
default=True,
description="Grow from faces"
)
fol_mesh_type: EnumProperty(
name="Mesh type",
default="VERTS",
description="Mesh feature to draw cruves from",
items=(("VERTS", "Verts", "Draw from Verts"),
("EDGES", "Edges", "Draw from Edges"),
("FACES", "Faces", "Draw from Faces"),
("OBJECT", "Object", "Draw from Object origin"))
)
fol_start_frame: IntProperty(
name="Start Frame",
min=1, max=2500,
default=1,
description="Start frame for range to trace"
)
fol_end_frame: IntProperty(
name="End Frame",
min=1, max=2500,
default=250,
description="End frame for range to trace"
)
fol_perc_verts: FloatProperty(
name="Reduce selection by",
min=0.001, max=1.000,
default=0.5,
description="percentage of total verts to trace"
)
fol_sel_option: EnumProperty(
name="Selection type",
description="Choose which objects to follow",
default="RANDOM",
items=(("RANDOM", "Random", "Follow Random items"),
("CUSTOM", "Custom Select", "Follow selected items"),
("ALL", "All", "Follow all items"))
)
trace_mat_color: FloatVectorProperty(
name="Material Color",
description="Choose material color",
min=0, max=1,
default=(0.0, 0.3, 0.6),
subtype="COLOR"
)
trace_mat_random: BoolProperty(
name="Random Color",
default=False,
description='Make the material colors random'
)
# Material custom Properties properties
mat_simple_adv_toggle: EnumProperty(
name="Material Options",
items=(("SIMPLE", "Simple", "Show Simple Material Options"),
("ADVANCED", "Advanced", "Show Advanced Material Options")),
description="Choose which Material Options to show",
default="SIMPLE"
)
mat_run_color_blender: BoolProperty(
name="Run Color Blender",
default=False,
description="Generate colors from a color scheme"
)
mmColors: EnumProperty(
items=(("RANDOM", "Random", "Use random colors"),
("CUSTOM", "Custom", "Use custom colors"),
("BW", "Black/White", "Use Black and White"),
("BRIGHT", "Bright Colors", "Use Bright colors"),
("EARTH", "Earth", "Use Earth colors"),
("GREENBLUE", "Green to Blue", "Use Green to Blue colors")),
description="Choose which type of colors the materials uses",
default="BRIGHT",
name="Define a color palette"
)
# Custom property for how many keyframes to skip
mmSkip: IntProperty(
name="frames",
min=1, max=500,
default=20,
description="Number of frames between each keyframes"
)
# Custom property to enable/disable random order for the
mmBoolRandom: BoolProperty(
name="Random Order",
default=False,
description="Randomize the order of the colors"
)
# Custom Color properties
mmColor1: FloatVectorProperty(
min=0, max=1,
default=(0.8, 0.8, 0.8),
description="Custom Color 1", subtype="COLOR"
)
mmColor2: FloatVectorProperty(
min=0, max=1,
default=(0.8, 0.8, 0.3),
description="Custom Color 2",
subtype="COLOR"
)
mmColor3: FloatVectorProperty(
min=0, max=1,
default=(0.8, 0.5, 0.6),
description="Custom Color 3",
subtype="COLOR"
)
mmColor4: FloatVectorProperty(
min=0, max=1,
default=(0.2, 0.8, 0.289),
description="Custom Color 4",
subtype="COLOR"
)
mmColor5: FloatVectorProperty(
min=0, max=1,
default=(1.0, 0.348, 0.8),
description="Custom Color 5",
subtype="COLOR"
)
mmColor6: FloatVectorProperty(
min=0, max=1,
default=(0.4, 0.67, 0.8),
description="Custom Color 6",
subtype="COLOR"
)
mmColor7: FloatVectorProperty(
min=0, max=1,
default=(0.66, 0.88, 0.8),
description="Custom Color 7",
subtype="COLOR"
)
mmColor8: FloatVectorProperty(
min=0, max=1,
default=(0.8, 0.38, 0.22),
description="Custom Color 8",
subtype="COLOR"
)
# BW Color properties
bwColor1: FloatVectorProperty(
min=0, max=1,
default=(0.0, 0.0, 0.0),
description="Black/White Color 1",
subtype="COLOR"
)
bwColor2: FloatVectorProperty(
min=0, max=1,
default=(1.0, 1.0, 1.0),
description="Black/White Color 2",
subtype="COLOR"
)
# Bright Color properties
brightColor1: FloatVectorProperty(
min=0, max=1,
default=(1.0, 0.0, 0.75),
description="Bright Color 1",
subtype="COLOR"
)
brightColor2: FloatVectorProperty(
min=0, max=1,
default=(0.0, 1.0, 1.0),
description="Bright Color 2",
subtype="COLOR"
)
brightColor3: FloatVectorProperty(
min=0, max=1,
default=(0.0, 1.0, 0.0),
description="Bright Color 3",
subtype="COLOR"
)
brightColor4: FloatVectorProperty(
min=0, max=1,
default=(1.0, 1.0, 0.0),
description="Bright Color 4", subtype="COLOR"
)
# Earth Color Properties
earthColor1: FloatVectorProperty(
min=0, max=1,
default=(0.068, 0.019, 0.014),
description="Earth Color 1",
subtype="COLOR"
)
earthColor2: FloatVectorProperty(
min=0, max=1,
default=(0.089, 0.060, 0.047),
description="Earth Color 2",
subtype="COLOR"
)
earthColor3: FloatVectorProperty(
min=0, max=1,
default=(0.188, 0.168, 0.066),
description="Earth Color 3",
subtype="COLOR"
)
earthColor4: FloatVectorProperty(
min=0, max=1,
default=(0.445, 0.296, 0.065),
description="Earth Color 4",
subtype="COLOR"
)
earthColor5: FloatVectorProperty(
min=0, max=1,
default=(0.745, 0.332, 0.065),
description="Earth Color 5",
subtype="COLOR"
)
# Green to Blue Color properties
greenblueColor1: FloatVectorProperty(
min=0, max=1,
default=(0.296, 0.445, 0.074),
description="Green/Blue Color 1",
subtype="COLOR"
)
greenblueColor2: FloatVectorProperty(
min=0, max=1,
default=(0.651, 1.0, 0.223),
description="Green/Blue Color 2",
subtype="COLOR"
)
greenblueColor3: FloatVectorProperty(
min=0, max=1,
default=(0.037, 0.047, 0.084),
description="Green/Blue Color 3",
subtype="COLOR"
)
# Toolbar show/hide booleans for tool options
btrace_menu_items = [
('tool_help', "Choose Tool",
"Pick one of the options below", "INFO", 0),
('tool_objectTrace', "Object Trace",
"Trace selected mesh object with a curve", "FORCE_MAGNETIC", 1),
('tool_objectsConnect', "Objects Connect",
"Connect objects with a curve controlled by hooks", "OUTLINER_OB_EMPTY", 2),
('tool_meshFollow', "Mesh Follow",
"Follow selection items on animated mesh object", "DRIVER", 3),
# ('tool_handwrite', "Handwriting",
# "Create and Animate curve using the grease pencil", "BRUSH_DATA", 4),
('tool_particleTrace', "Particle Trace",
"Trace particle path with a curve", "PARTICLES", 5),
('tool_particleConnect', "Particle Connect",
"Connect particles with a curves and animated over particle lifetime", "MOD_PARTICLES", 6),
('tool_growCurve', "Grow Curve",
"Animate curve bevel over time by keyframing points radius", "META_BALL", 7),
('tool_fcurve', "F-Curve Noise",
"Add F-Curve noise to selected objects", "RNDCURVE", 8),
('tool_colorblender', "Color Blender",
"Pick the color of the created curves", "COLOR", 9),
]
btrace_toolmenu: EnumProperty(
name="Tools",
items=btrace_menu_items,
description="",
default='tool_help'
)