Add "Only project onto selected" for curve, GP3, and annotation drawing
Implementation of the proposal in: #121535 When drawing with "project to surface" turned on, it is now possible to restrict the projection to only the selected objects. This is really useful for drawing onto surfaces that has a lot of detail meshes that you don't want to project onto.
This commit is contained in:
committed by
Sebastian Parborg
parent
435b6743fd
commit
241c19a57a
@@ -199,12 +199,14 @@ class _defs_annotate:
|
||||
tool_settings = context.tool_settings
|
||||
|
||||
if space_type == 'VIEW_3D':
|
||||
row = layout.row(align=True)
|
||||
if region_type == 'TOOL_HEADER':
|
||||
row = layout.row(align=True)
|
||||
else:
|
||||
row = layout.row().column(align=True)
|
||||
row.prop(tool_settings, "annotation_stroke_placement_view3d", text="Placement")
|
||||
if tool_settings.gpencil_stroke_placement_view3d == 'CURSOR':
|
||||
row.prop(tool_settings.gpencil_sculpt, "lockaxis")
|
||||
elif tool_settings.gpencil_stroke_placement_view3d in {'SURFACE', 'STROKE'}:
|
||||
row.prop(tool_settings, "use_gpencil_stroke_endpoints")
|
||||
if tool_settings.annotation_stroke_placement_view3d in {'SURFACE', 'STROKE'}:
|
||||
row.prop(tool_settings, "use_annotation_stroke_endpoints")
|
||||
row.prop(tool_settings, "use_annotation_project_only_selected")
|
||||
|
||||
elif space_type in {'IMAGE_EDITOR', 'NODE_EDITOR', 'SEQUENCE_EDITOR', 'CLIP_EDITOR'}:
|
||||
row = layout.row(align=True)
|
||||
@@ -1209,6 +1211,7 @@ def curve_draw_settings(context, layout, tool, *, extra=False):
|
||||
row.prop(cps, "depth_mode", expand=True)
|
||||
if cps.depth_mode == 'SURFACE':
|
||||
col = layout.column()
|
||||
col.prop(cps, "use_project_only_selected")
|
||||
col.prop(cps, "surface_offset")
|
||||
col.prop(cps, "use_offset_absolute")
|
||||
col.prop(cps, "use_stroke_endpoints")
|
||||
|
||||
@@ -7955,6 +7955,8 @@ class VIEW3D_PT_gpencil_origin(Panel):
|
||||
row = layout.row()
|
||||
if context.preferences.experimental.use_grease_pencil_version3:
|
||||
row.prop(tool_settings, "gpencil_surface_offset", text="")
|
||||
row = layout.row()
|
||||
row.prop(tool_settings, "use_gpencil_project_only_selected")
|
||||
else:
|
||||
row.prop(gpd, "zdepth_offset", text="")
|
||||
|
||||
|
||||
@@ -129,7 +129,8 @@ void DRW_draw_depth_loop(Depsgraph *depsgraph,
|
||||
GPUViewport *viewport,
|
||||
const bool use_gpencil,
|
||||
const bool use_basic,
|
||||
const bool use_overlay);
|
||||
const bool use_overlay,
|
||||
const bool use_only_selected);
|
||||
/**
|
||||
* Clears the Depth Buffer and draws only the specified object.
|
||||
*/
|
||||
|
||||
@@ -2629,7 +2629,8 @@ void DRW_draw_depth_loop(Depsgraph *depsgraph,
|
||||
GPUViewport *viewport,
|
||||
const bool use_gpencil,
|
||||
const bool use_basic,
|
||||
const bool use_overlay)
|
||||
const bool use_overlay,
|
||||
const bool use_only_selected)
|
||||
{
|
||||
using namespace blender::draw;
|
||||
Scene *scene = DEG_get_evaluated_scene(depsgraph);
|
||||
@@ -2712,6 +2713,9 @@ void DRW_draw_depth_loop(Depsgraph *depsgraph,
|
||||
if (!BKE_object_is_visible_in_viewport(v3d, ob)) {
|
||||
continue;
|
||||
}
|
||||
if (use_only_selected && !(ob->base_flag & BASE_SELECTED)) {
|
||||
continue;
|
||||
}
|
||||
DST.dupli_parent = data_.dupli_parent;
|
||||
DST.dupli_source = data_.dupli_object_current;
|
||||
drw_duplidata_load(ob);
|
||||
|
||||
@@ -1107,12 +1107,13 @@ static int curve_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
/* needed or else the draw matrix can be incorrect */
|
||||
view3d_operator_needs_opengl(C);
|
||||
|
||||
ED_view3d_depth_override(cdd->vc.depsgraph,
|
||||
cdd->vc.region,
|
||||
cdd->vc.v3d,
|
||||
nullptr,
|
||||
V3D_DEPTH_NO_OVERLAYS,
|
||||
&cdd->depths);
|
||||
eV3DDepthOverrideMode depth_mode = V3D_DEPTH_NO_OVERLAYS;
|
||||
if (cps->flag & CURVE_PAINT_FLAG_DEPTH_ONLY_SELECTED) {
|
||||
depth_mode = V3D_DEPTH_SELECTED_ONLY;
|
||||
}
|
||||
|
||||
ED_view3d_depth_override(
|
||||
cdd->vc.depsgraph, cdd->vc.region, cdd->vc.v3d, nullptr, depth_mode, &cdd->depths);
|
||||
|
||||
if (cdd->depths != nullptr) {
|
||||
cdd->project.use_depth = true;
|
||||
|
||||
@@ -1083,12 +1083,13 @@ static int curves_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
/* needed or else the draw matrix can be incorrect */
|
||||
view3d_operator_needs_opengl(C);
|
||||
|
||||
ED_view3d_depth_override(cdd->vc.depsgraph,
|
||||
cdd->vc.region,
|
||||
cdd->vc.v3d,
|
||||
nullptr,
|
||||
V3D_DEPTH_NO_OVERLAYS,
|
||||
&cdd->depths);
|
||||
eV3DDepthOverrideMode depth_mode = V3D_DEPTH_NO_OVERLAYS;
|
||||
if (cps->flag & CURVE_PAINT_FLAG_DEPTH_ONLY_SELECTED) {
|
||||
depth_mode = V3D_DEPTH_SELECTED_ONLY;
|
||||
}
|
||||
|
||||
ED_view3d_depth_override(
|
||||
cdd->vc.depsgraph, cdd->vc.region, cdd->vc.v3d, nullptr, depth_mode, &cdd->depths);
|
||||
|
||||
if (cdd->depths != nullptr) {
|
||||
cdd->project.use_depth = true;
|
||||
|
||||
@@ -651,15 +651,19 @@ static short annotation_stroke_addpoint(tGPsdata *p,
|
||||
if (annotation_project_check(p)) {
|
||||
View3D *v3d = static_cast<View3D *>(p->area->spacedata.first);
|
||||
|
||||
eV3DDepthOverrideMode mode = V3D_DEPTH_GPENCIL_ONLY;
|
||||
|
||||
if (ts->annotate_v3d_align & GP_PROJECT_DEPTH_VIEW) {
|
||||
if (ts->annotate_v3d_align & GP_PROJECT_DEPTH_ONLY_SELECTED) {
|
||||
mode = V3D_DEPTH_SELECTED_ONLY;
|
||||
}
|
||||
else {
|
||||
mode = V3D_DEPTH_NO_OVERLAYS;
|
||||
}
|
||||
}
|
||||
|
||||
view3d_region_operator_needs_opengl(p->win, p->region);
|
||||
ED_view3d_depth_override(p->depsgraph,
|
||||
p->region,
|
||||
v3d,
|
||||
nullptr,
|
||||
(ts->annotate_v3d_align & GP_PROJECT_DEPTH_STROKE) ?
|
||||
V3D_DEPTH_GPENCIL_ONLY :
|
||||
V3D_DEPTH_NO_GPENCIL,
|
||||
nullptr);
|
||||
ED_view3d_depth_override(p->depsgraph, p->region, v3d, nullptr, mode, nullptr);
|
||||
}
|
||||
|
||||
/* convert screen-coordinates to appropriate coordinates (and store them) */
|
||||
@@ -1679,16 +1683,20 @@ static void annotation_paint_strokeend(tGPsdata *p)
|
||||
if (annotation_project_check(p)) {
|
||||
View3D *v3d = static_cast<View3D *>(p->area->spacedata.first);
|
||||
|
||||
eV3DDepthOverrideMode mode = V3D_DEPTH_GPENCIL_ONLY;
|
||||
|
||||
if (ts->annotate_v3d_align & GP_PROJECT_DEPTH_VIEW) {
|
||||
if (ts->annotate_v3d_align & GP_PROJECT_DEPTH_ONLY_SELECTED) {
|
||||
mode = V3D_DEPTH_SELECTED_ONLY;
|
||||
}
|
||||
else {
|
||||
mode = V3D_DEPTH_NO_OVERLAYS;
|
||||
}
|
||||
}
|
||||
/* need to restore the original projection settings before packing up */
|
||||
view3d_region_operator_needs_opengl(p->win, p->region);
|
||||
ED_view3d_depth_override(p->depsgraph,
|
||||
p->region,
|
||||
v3d,
|
||||
nullptr,
|
||||
(ts->annotate_v3d_align & GP_PROJECT_DEPTH_STROKE) ?
|
||||
V3D_DEPTH_GPENCIL_ONLY :
|
||||
V3D_DEPTH_NO_GPENCIL,
|
||||
is_eraser ? nullptr : &p->depths);
|
||||
ED_view3d_depth_override(
|
||||
p->depsgraph, p->region, v3d, nullptr, mode, is_eraser ? nullptr : &p->depths);
|
||||
}
|
||||
|
||||
/* check if doing eraser or not */
|
||||
|
||||
@@ -78,6 +78,9 @@ DrawingPlacement::DrawingPlacement(const Scene &scene,
|
||||
}
|
||||
else if (align_flag & GP_PROJECT_DEPTH_VIEW) {
|
||||
depth_ = DrawingPlacementDepth::Surface;
|
||||
if (align_flag & GP_PROJECT_DEPTH_ONLY_SELECTED) {
|
||||
use_project_only_selected_ = true;
|
||||
}
|
||||
surface_offset_ = scene.toolsettings->gpencil_surface_offset;
|
||||
/* Default to view placement with the object origin if we don't hit a surface. */
|
||||
placement_loc_ = layer_space_to_world_space_.location();
|
||||
@@ -130,9 +133,16 @@ bool DrawingPlacement::use_project_to_nearest_stroke() const
|
||||
|
||||
void DrawingPlacement::cache_viewport_depths(Depsgraph *depsgraph, ARegion *region, View3D *view3d)
|
||||
{
|
||||
const eV3DDepthOverrideMode mode = (depth_ == DrawingPlacementDepth::Surface) ?
|
||||
V3D_DEPTH_NO_OVERLAYS :
|
||||
V3D_DEPTH_GPENCIL_ONLY;
|
||||
eV3DDepthOverrideMode mode = V3D_DEPTH_GPENCIL_ONLY;
|
||||
|
||||
if (use_project_to_surface()) {
|
||||
if (use_project_only_selected_) {
|
||||
mode = V3D_DEPTH_SELECTED_ONLY;
|
||||
}
|
||||
else {
|
||||
mode = V3D_DEPTH_NO_OVERLAYS;
|
||||
}
|
||||
}
|
||||
ED_view3d_depth_override(depsgraph, region, view3d, nullptr, mode, &this->depth_cache_);
|
||||
}
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@ class DrawingPlacement {
|
||||
DrawingPlacementDepth depth_;
|
||||
DrawingPlacementPlane plane_;
|
||||
ViewDepths *depth_cache_ = nullptr;
|
||||
bool use_project_only_selected_ = false;
|
||||
float surface_offset_;
|
||||
|
||||
float3 placement_loc_;
|
||||
|
||||
@@ -190,6 +190,8 @@ enum eV3DDepthOverrideMode {
|
||||
V3D_DEPTH_GPENCIL_ONLY,
|
||||
/** Redraw viewport with active object only. */
|
||||
V3D_DEPTH_OBJECT_ONLY,
|
||||
/** Redraw viewport with objects from the supplied collection only. */
|
||||
V3D_DEPTH_SELECTED_ONLY,
|
||||
|
||||
};
|
||||
/**
|
||||
|
||||
@@ -2409,19 +2409,28 @@ void ED_view3d_depth_override(Depsgraph *depsgraph,
|
||||
if (viewport != nullptr) {
|
||||
switch (mode) {
|
||||
case V3D_DEPTH_NO_OVERLAYS:
|
||||
DRW_draw_depth_loop(depsgraph, region, v3d, viewport, false, true, false);
|
||||
DRW_draw_depth_loop(depsgraph, region, v3d, viewport, false, true, false, false);
|
||||
break;
|
||||
case V3D_DEPTH_NO_GPENCIL:
|
||||
DRW_draw_depth_loop(
|
||||
depsgraph, region, v3d, viewport, false, true, (v3d->flag2 & V3D_HIDE_OVERLAYS) == 0);
|
||||
DRW_draw_depth_loop(depsgraph,
|
||||
region,
|
||||
v3d,
|
||||
viewport,
|
||||
false,
|
||||
true,
|
||||
(v3d->flag2 & V3D_HIDE_OVERLAYS) == 0,
|
||||
false);
|
||||
break;
|
||||
case V3D_DEPTH_GPENCIL_ONLY:
|
||||
DRW_draw_depth_loop(depsgraph, region, v3d, viewport, true, false, false);
|
||||
DRW_draw_depth_loop(depsgraph, region, v3d, viewport, true, false, false, false);
|
||||
break;
|
||||
case V3D_DEPTH_OBJECT_ONLY:
|
||||
DRW_draw_depth_object(
|
||||
scene, region, v3d, viewport, DEG_get_evaluated_object(depsgraph, obact));
|
||||
break;
|
||||
case V3D_DEPTH_SELECTED_ONLY:
|
||||
DRW_draw_depth_loop(depsgraph, region, v3d, viewport, false, true, false, true);
|
||||
break;
|
||||
}
|
||||
|
||||
if (r_depths) {
|
||||
|
||||
@@ -1432,6 +1432,7 @@ enum {
|
||||
CURVE_PAINT_FLAG_PRESSURE_RADIUS = (1 << 1),
|
||||
CURVE_PAINT_FLAG_DEPTH_STROKE_ENDPOINTS = (1 << 2),
|
||||
CURVE_PAINT_FLAG_DEPTH_STROKE_OFFSET_ABS = (1 << 3),
|
||||
CURVE_PAINT_FLAG_DEPTH_ONLY_SELECTED = (1 << 4),
|
||||
};
|
||||
|
||||
/** #CurvePaintSettings::fit_method */
|
||||
@@ -2728,6 +2729,9 @@ typedef enum eGPencil_Placement_Flags {
|
||||
GP_PROJECT_DEPTH_STROKE_ENDPOINTS = (1 << 4),
|
||||
GP_PROJECT_CURSOR = (1 << 5),
|
||||
GP_PROJECT_DEPTH_STROKE_FIRST = (1 << 6),
|
||||
|
||||
/** Surface project, "Only project on selected objects". */
|
||||
GP_PROJECT_DEPTH_ONLY_SELECTED = (1 << 7),
|
||||
} eGPencil_Placement_Flags;
|
||||
|
||||
/** #ToolSettings::gpencil_selectmode */
|
||||
|
||||
@@ -3861,13 +3861,6 @@ static void rna_def_tool_settings(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Stroke Snap", "");
|
||||
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr);
|
||||
|
||||
prop = RNA_def_property(srna, "use_gpencil_stroke_endpoints", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(
|
||||
prop, nullptr, "gpencil_v3d_align", GP_PROJECT_DEPTH_STROKE_ENDPOINTS);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Only Endpoints", "Only use the first and last parts of the stroke for snapping");
|
||||
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr);
|
||||
|
||||
prop = RNA_def_property(srna, "gpencil_surface_offset", PROP_FLOAT, PROP_DISTANCE);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "gpencil_surface_offset");
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
@@ -3877,6 +3870,14 @@ static void rna_def_tool_settings(BlenderRNA *brna)
|
||||
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 3);
|
||||
RNA_def_property_float_default(prop, 0.150f);
|
||||
|
||||
prop = RNA_def_property(srna, "use_gpencil_project_only_selected", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(
|
||||
prop, nullptr, "gpencil_v3d_align", GP_PROJECT_DEPTH_ONLY_SELECTED);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Project Onto Selected", "Project the strokes only onto selected objects");
|
||||
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr);
|
||||
|
||||
/* Grease Pencil - Select mode Edit */
|
||||
prop = RNA_def_property(srna, "gpencil_selectmode_edit", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, nullptr, "gpencil_selectmode_edit");
|
||||
@@ -3985,6 +3986,22 @@ static void rna_def_tool_settings(BlenderRNA *brna)
|
||||
"How annotation strokes are orientated in 3D space");
|
||||
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr);
|
||||
|
||||
prop = RNA_def_property(srna, "use_annotation_stroke_endpoints", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(
|
||||
prop, nullptr, "annotate_v3d_align", GP_PROJECT_DEPTH_STROKE_ENDPOINTS);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Only Endpoints", "Only use the first and last parts of the stroke for snapping");
|
||||
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr);
|
||||
|
||||
prop = RNA_def_property(srna, "use_annotation_project_only_selected", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(
|
||||
prop, nullptr, "annotate_v3d_align", GP_PROJECT_DEPTH_ONLY_SELECTED);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Project Onto Selected", "Project the strokes only onto selected objects");
|
||||
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, nullptr);
|
||||
|
||||
/* Annotations - Stroke Thickness */
|
||||
prop = RNA_def_property(srna, "annotation_thickness", PROP_INT, PROP_PIXEL);
|
||||
RNA_def_property_int_sdna(prop, nullptr, "annotate_thickness");
|
||||
@@ -4365,42 +4382,57 @@ static void rna_def_curve_paint_settings(BlenderRNA *brna)
|
||||
};
|
||||
|
||||
prop = RNA_def_property(srna, "curve_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_enum_sdna(prop, nullptr, "curve_type");
|
||||
RNA_def_property_enum_items(prop, curve_type_items);
|
||||
RNA_def_property_ui_text(prop, "Type", "Type of curve to use for new strokes");
|
||||
|
||||
prop = RNA_def_property(srna, "use_corners_detect", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", CURVE_PAINT_FLAG_CORNERS_DETECT);
|
||||
RNA_def_property_ui_text(prop, "Detect Corners", "Detect corners and use non-aligned handles");
|
||||
|
||||
prop = RNA_def_property(srna, "use_pressure_radius", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", CURVE_PAINT_FLAG_PRESSURE_RADIUS);
|
||||
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
|
||||
RNA_def_property_ui_text(prop, "Use Pressure", "Map tablet pressure to curve radius");
|
||||
|
||||
prop = RNA_def_property(srna, "use_stroke_endpoints", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", CURVE_PAINT_FLAG_DEPTH_STROKE_ENDPOINTS);
|
||||
RNA_def_property_ui_text(prop, "Only First", "Use the start of the stroke for the depth");
|
||||
|
||||
prop = RNA_def_property(srna, "use_offset_absolute", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", CURVE_PAINT_FLAG_DEPTH_STROKE_OFFSET_ABS);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Absolute Offset", "Apply a fixed offset (don't scale by the radius)");
|
||||
|
||||
prop = RNA_def_property(srna, "use_project_only_selected", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "flag", CURVE_PAINT_FLAG_DEPTH_ONLY_SELECTED);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Project Onto Selected", "Project the strokes only onto selected objects");
|
||||
|
||||
prop = RNA_def_property(srna, "error_threshold", PROP_INT, PROP_PIXEL);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, 1, 100);
|
||||
RNA_def_property_ui_text(prop, "Tolerance", "Allow deviation for a smoother, less precise line");
|
||||
|
||||
prop = RNA_def_property(srna, "fit_method", PROP_ENUM, PROP_PIXEL);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_enum_sdna(prop, nullptr, "fit_method");
|
||||
RNA_def_property_enum_items(prop, rna_enum_curve_fit_method_items);
|
||||
RNA_def_property_ui_text(prop, "Method", "Curve fitting method");
|
||||
|
||||
prop = RNA_def_property(srna, "corner_angle", PROP_FLOAT, PROP_ANGLE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, 0, M_PI);
|
||||
RNA_def_property_ui_text(prop, "Corner Angle", "Angles above this are considered corners");
|
||||
|
||||
prop = RNA_def_property(srna, "radius_min", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, 0.0, 100.0);
|
||||
RNA_def_property_ui_range(prop, 0.0f, 10.0, 10, 2);
|
||||
RNA_def_property_ui_text(
|
||||
@@ -4409,6 +4441,7 @@ static void rna_def_curve_paint_settings(BlenderRNA *brna)
|
||||
"Minimum radius when the minimum pressure is applied (also the minimum when tapering)");
|
||||
|
||||
prop = RNA_def_property(srna, "radius_max", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, 0.0, 100.0);
|
||||
RNA_def_property_ui_range(prop, 0.0f, 10.0, 10, 2);
|
||||
RNA_def_property_ui_text(
|
||||
@@ -4417,18 +4450,21 @@ static void rna_def_curve_paint_settings(BlenderRNA *brna)
|
||||
"Radius to use when the maximum pressure is applied (or when a tablet isn't used)");
|
||||
|
||||
prop = RNA_def_property(srna, "radius_taper_start", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_range(prop, 0.0f, 1.0, 1, 2);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Radius Min", "Taper factor for the radius of each point along the curve");
|
||||
|
||||
prop = RNA_def_property(srna, "radius_taper_end", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, 0.0, 10.0);
|
||||
RNA_def_property_ui_range(prop, 0.0f, 1.0, 1, 2);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Radius Max", "Taper factor for the radius of each point along the curve");
|
||||
|
||||
prop = RNA_def_property(srna, "surface_offset", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_range(prop, -10.0, 10.0);
|
||||
RNA_def_property_ui_range(prop, -1.0f, 1.0, 1, 2);
|
||||
RNA_def_property_ui_text(prop, "Offset", "Offset the stroke from the surface");
|
||||
@@ -4440,6 +4476,7 @@ static void rna_def_curve_paint_settings(BlenderRNA *brna)
|
||||
};
|
||||
|
||||
prop = RNA_def_property(srna, "depth_mode", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_enum_sdna(prop, nullptr, "depth_mode");
|
||||
RNA_def_property_enum_items(prop, depth_mode_items);
|
||||
RNA_def_property_ui_text(prop, "Depth", "Method of projecting depth");
|
||||
@@ -4464,6 +4501,7 @@ static void rna_def_curve_paint_settings(BlenderRNA *brna)
|
||||
};
|
||||
|
||||
prop = RNA_def_property(srna, "surface_plane", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY);
|
||||
RNA_def_property_enum_sdna(prop, nullptr, "surface_plane");
|
||||
RNA_def_property_enum_items(prop, surface_plane_items);
|
||||
RNA_def_property_ui_text(prop, "Plane", "Plane for projected stroke");
|
||||
|
||||
Reference in New Issue
Block a user