forked from bartvdbraak/blender
- crash fix for setting a curve smooth operator
- added curve attribute use_twist_correction - added nurb attribute type - NURBS, POLY, BEZIER - renamed a number of curve attributes with the use_ prefix. - UI layout adjustments to only show buttons that are needed and reflect internals for nurbs. ... Note that many of the buttons only apply to NURBS, and all the "V" buttons only apply to surfaces, remove when not needed.
This commit is contained in:
parent
70c4898db8
commit
4c859897f6
@ -6,6 +6,13 @@ class DataButtonsPanel(bpy.types.Panel):
|
||||
__region_type__ = 'WINDOW'
|
||||
__context__ = "data"
|
||||
|
||||
def poll(self, context):
|
||||
return (context.object and context.object.type in ('CURVE', 'SURFACE') and context.curve)
|
||||
|
||||
class DataButtonsPanelCurve(DataButtonsPanel):
|
||||
'''
|
||||
Same as above but for curves only
|
||||
'''
|
||||
def poll(self, context):
|
||||
return (context.object and context.object.type == 'CURVE' and context.curve)
|
||||
|
||||
@ -37,17 +44,24 @@ class DATA_PT_shape_curve(DataButtonsPanel):
|
||||
ob = context.object
|
||||
curve = context.curve
|
||||
space = context.space_data
|
||||
is_surf = (ob.type == 'SURFACE')
|
||||
|
||||
layout.itemR(curve, "curve_2d")
|
||||
row = layout.row()
|
||||
row.itemR(curve, "curve_2d")
|
||||
row.itemR(curve, "use_twist_correction")
|
||||
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
sub = col.column()
|
||||
sub.active = curve.curve_2d
|
||||
sub.itemL(text="Caps:")
|
||||
sub.itemR(curve, "front")
|
||||
sub.itemR(curve, "back")
|
||||
|
||||
if not is_surf:
|
||||
sub = col.column()
|
||||
sub.active = curve.curve_2d
|
||||
sub.itemL(text="Caps:")
|
||||
row = sub.row()
|
||||
row.itemR(curve, "front")
|
||||
row.itemR(curve, "back")
|
||||
|
||||
col.itemL(text="Textures:")
|
||||
# col.itemR(curve, "uv_orco")
|
||||
@ -58,23 +72,26 @@ class DATA_PT_shape_curve(DataButtonsPanel):
|
||||
sub = col.column(align=True)
|
||||
sub.itemR(curve, "resolution_u", text="Preview U")
|
||||
sub.itemR(curve, "render_resolution_u", text="Render U")
|
||||
sub = col.column(align=True)
|
||||
sub.itemR(curve, "resolution_v", text="Preview V")
|
||||
sub.itemR(curve, "render_resolution_v", text="Render V")
|
||||
|
||||
if is_surf:
|
||||
sub = col.column(align=True)
|
||||
sub.itemR(curve, "resolution_v", text="Preview V")
|
||||
sub.itemR(curve, "render_resolution_v", text="Render V")
|
||||
|
||||
|
||||
# col.itemL(text="Display:")
|
||||
# col.itemL(text="HANDLES")
|
||||
# col.itemL(text="NORMALS")
|
||||
# col.itemR(curve, "vertex_normal_flip")
|
||||
|
||||
class DATA_PT_geometry_curve(DataButtonsPanel):
|
||||
class DATA_PT_geometry_curve(DataButtonsPanelCurve):
|
||||
__label__ = "Geometry "
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
curve = context.curve
|
||||
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
@ -88,31 +105,32 @@ class DATA_PT_geometry_curve(DataButtonsPanel):
|
||||
col.itemR(curve, "bevel_depth", text="Depth")
|
||||
col.itemR(curve, "bevel_resolution", text="Resolution")
|
||||
col.itemR(curve, "bevel_object", icon='ICON_OUTLINER_OB_CURVE')
|
||||
|
||||
|
||||
class DATA_PT_pathanim(DataButtonsPanel):
|
||||
class DATA_PT_pathanim(DataButtonsPanelCurve):
|
||||
__label__ = "Path Animation"
|
||||
|
||||
def draw_header(self, context):
|
||||
curve = context.curve
|
||||
|
||||
self.layout.itemR(curve, "path", text="")
|
||||
self.layout.itemR(curve, "use_path", text="")
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
curve = context.curve
|
||||
|
||||
layout.active = curve.path
|
||||
layout.active = curve.use_path
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.itemR(curve, "path_length", text="Frames")
|
||||
col.itemR(curve, "follow")
|
||||
col.itemR(curve, "use_path_follow")
|
||||
|
||||
col = split.column()
|
||||
col.itemR(curve, "stretch")
|
||||
col.itemR(curve, "offset_path_distance", text="Offset Children")
|
||||
col.itemR(curve, "use_stretch")
|
||||
col.itemR(curve, "use_time_offset", text="Offset Children")
|
||||
|
||||
class DATA_PT_current_curve(DataButtonsPanel):
|
||||
__label__ = "Current Curve"
|
||||
@ -120,33 +138,56 @@ class DATA_PT_current_curve(DataButtonsPanel):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
ob = context.object
|
||||
currentcurve = context.curve.curves[0] # XXX
|
||||
|
||||
is_surf = (ob.type == 'SURFACE')
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.itemL(text="Cyclic:")
|
||||
col.itemR(currentcurve, "cyclic_u", text="U")
|
||||
col.itemR(currentcurve, "cyclic_v", text="V")
|
||||
col.itemL(text="Order:")
|
||||
col.itemR(currentcurve, "order_u", text="U")
|
||||
col.itemR(currentcurve, "order_v", text="V")
|
||||
col.itemL(text="Endpoints:")
|
||||
col.itemR(currentcurve, "endpoint_u", text="U")
|
||||
col.itemR(currentcurve, "endpoint_v", text="V")
|
||||
|
||||
col = split.column()
|
||||
col.itemL(text="Bezier:")
|
||||
col.itemR(currentcurve, "bezier_u", text="U")
|
||||
col.itemR(currentcurve, "bezier_v", text="V")
|
||||
col.itemL(text="Cyclic:")
|
||||
if currentcurve.type == 'NURBS':
|
||||
col.itemL(text="Bezier:")
|
||||
col.itemL(text="Endpoint:")
|
||||
col.itemL(text="Order:")
|
||||
col.itemL(text="Resolution:")
|
||||
|
||||
|
||||
col = split.column()
|
||||
col.itemR(currentcurve, "cyclic_u", text="U")
|
||||
|
||||
if currentcurve.type == 'NURBS':
|
||||
sub = col.column()
|
||||
sub.active = (not currentcurve.cyclic_u)
|
||||
sub.itemR(currentcurve, "bezier_u", text="U")
|
||||
sub.itemR(currentcurve, "endpoint_u", text="U")
|
||||
|
||||
sub = col.column()
|
||||
sub.itemR(currentcurve, "order_u", text="U")
|
||||
col.itemR(currentcurve, "resolution_u", text="U")
|
||||
col.itemR(currentcurve, "resolution_v", text="V")
|
||||
|
||||
if is_surf:
|
||||
col = split.column()
|
||||
col.itemR(currentcurve, "cyclic_v", text="V")
|
||||
|
||||
# its a surface, assume its a nurb.
|
||||
sub = col.column()
|
||||
sub.active = (not currentcurve.cyclic_v)
|
||||
sub.itemR(currentcurve, "bezier_v", text="V")
|
||||
sub.itemR(currentcurve, "endpoint_v", text="V")
|
||||
sub = col.column()
|
||||
sub.itemR(currentcurve, "resolution_v", text="V")
|
||||
sub.itemR(currentcurve, "order_v", text="V")
|
||||
|
||||
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
col.itemL(text="Interpolation:")
|
||||
col.itemR(currentcurve, "tilt_interpolation", text="Tilt")
|
||||
col.itemR(currentcurve, "radius_interpolation", text="Tilt")
|
||||
col.itemR(currentcurve, "radius_interpolation", text="Radius")
|
||||
col.itemR(currentcurve, "smooth")
|
||||
|
||||
|
||||
bpy.types.register(DATA_PT_context_curve)
|
||||
bpy.types.register(DATA_PT_shape_curve)
|
||||
bpy.types.register(DATA_PT_geometry_curve)
|
||||
|
@ -6816,7 +6816,6 @@ static int shade_smooth_exec(bContext *C, wmOperator *op)
|
||||
for(nu=cu->nurb.first; nu; nu=nu->next) {
|
||||
if(!clear) nu->flag |= ME_SMOOTH;
|
||||
else nu->flag &= ~ME_SMOOTH;
|
||||
nu= nu->next;
|
||||
}
|
||||
|
||||
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
|
||||
|
@ -148,6 +148,20 @@ static int rna_Nurb_length(PointerRNA *ptr)
|
||||
return nu->pntsv>0 ? nu->pntsu*nu->pntsv : nu->pntsu;
|
||||
}
|
||||
|
||||
/* grr! mixing CU_2D with type is dodgy */
|
||||
static int rna_Nurb_type_get(PointerRNA *ptr)
|
||||
{
|
||||
Nurb *nu= (Nurb*)ptr->data;
|
||||
return nu->type & 7;
|
||||
}
|
||||
|
||||
static void rna_Nurb_type_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
Nurb *nu= (Nurb*)ptr->data;
|
||||
nu->type &= CU_2D;
|
||||
nu->type |= value;
|
||||
}
|
||||
|
||||
static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
||||
{
|
||||
Nurb *nu= (Nurb*)ptr->data;
|
||||
@ -161,7 +175,6 @@ static void rna_Curve_update_data(bContext *C, PointerRNA *ptr)
|
||||
DAG_id_flush_update(id, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_GEOM|ND_DATA, id);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void rna_def_bpoint(BlenderRNA *brna)
|
||||
@ -203,7 +216,7 @@ static void rna_def_bpoint(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Weight", "Softbody goal weight");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "bevel_radius", PROP_FLOAT, PROP_NONE);
|
||||
prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "radius");
|
||||
/*RNA_def_property_range(prop, 0.0f, 1.0f);*/
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
@ -297,7 +310,7 @@ static void rna_def_beztriple(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Weight", "Softbody goal weight");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "bevel_radius", PROP_FLOAT, PROP_NONE);
|
||||
prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "radius");
|
||||
/*RNA_def_property_range(prop, 0.0f, 1.0f);*/
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
@ -317,22 +330,22 @@ static void rna_def_path(BlenderRNA *brna, StructRNA *srna)
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
/* flags */
|
||||
prop= RNA_def_property(srna, "path", PROP_BOOLEAN, PROP_NONE);
|
||||
prop= RNA_def_property(srna, "use_path", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_PATH);
|
||||
RNA_def_property_ui_text(prop, "Path", "Enable the curve to become a translation path.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "follow", PROP_BOOLEAN, PROP_NONE);
|
||||
prop= RNA_def_property(srna, "use_path_follow", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_FOLLOW);
|
||||
RNA_def_property_ui_text(prop, "Follow", "Make curve path children to rotate along the path.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "stretch", PROP_BOOLEAN, PROP_NONE);
|
||||
prop= RNA_def_property(srna, "use_stretch", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_STRETCH);
|
||||
RNA_def_property_ui_text(prop, "Stretch", "Option for curve-deform: makes deformed child to stretch along entire path.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "offset_path_distance", PROP_BOOLEAN, PROP_NONE);
|
||||
prop= RNA_def_property(srna, "use_time_offset", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_OFFS_PATHDIST);
|
||||
RNA_def_property_ui_text(prop, "Offset Path Distance", "Children will use TimeOffs value as path distance offset.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
@ -677,6 +690,11 @@ static void rna_def_curve(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Back", "Draw filled back for extruded/beveled curves.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "use_twist_correction", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_NO_TWIST);
|
||||
RNA_def_property_ui_text(prop, "Minimal Twist", "Correct for twisting.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "retopo", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_RETOPO);
|
||||
RNA_def_property_ui_text(prop, "Retopo", "Turn on the re-topology tool.");
|
||||
@ -685,6 +703,14 @@ static void rna_def_curve(BlenderRNA *brna)
|
||||
|
||||
static void rna_def_curve_nurb(BlenderRNA *brna)
|
||||
{
|
||||
static EnumPropertyItem curve_type_items[] = {
|
||||
{CU_POLY, "POLY", 0, "Poly", ""},
|
||||
{CU_BEZIER, "BEZIER", 0, "Bezier", ""},
|
||||
{CU_BSPLINE, "BSPLINE", 0, "BSpline", ""},
|
||||
{CU_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
|
||||
{CU_NURBS, "NURBS", 0, "Ease", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem spline_interpolation_items[] = {
|
||||
{BEZT_IPO_CONST, "LINEAR", 0, "Linear", ""},
|
||||
{BEZT_IPO_LIN, "CARDINAL", 0, "Cardinal", ""},
|
||||
@ -722,6 +748,12 @@ static void rna_def_curve_nurb(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Radius Interpolation", "The type of radius interpolation for Bezier curves.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
// XXX - switching type probably needs comprehensive recalc of data like in 2.4x
|
||||
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_items(prop, curve_type_items);
|
||||
RNA_def_property_enum_funcs(prop, "rna_Nurb_type_get", "rna_Nurb_type_set", NULL);
|
||||
RNA_def_property_ui_text(prop, "Type", "The interpolation type for this curve element.");
|
||||
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
|
||||
|
||||
prop= RNA_def_property(srna, "point_count_u", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* editing this needs knot recalc*/
|
||||
|
Loading…
Reference in New Issue
Block a user