[Bf-blender-cvs] [f9fd613] temp-curve-draw: Move error calculation into its own function
Campbell Barton
noreply at git.blender.org
Fri Apr 15 01:44:24 CEST 2016
Commit: f9fd61360d6f9b56c88507b241a6644adf84bd81
Author: Campbell Barton
Date: Fri Apr 15 09:14:34 2016 +1000
Branches: temp-curve-draw
https://developer.blender.org/rBf9fd61360d6f9b56c88507b241a6644adf84bd81
Move error calculation into its own function
===================================================================
M source/blender/editors/curve/editcurve_paint.c
===================================================================
diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c
index a7375a6..66f308b 100644
--- a/source/blender/editors/curve/editcurve_paint.c
+++ b/source/blender/editors/curve/editcurve_paint.c
@@ -587,6 +587,37 @@ static void curve_draw_exit(wmOperator *op)
}
}
+/**
+ * Initialize values before calling 'exec' (when running interactively).
+ */
+static void curve_draw_exec_precalc(wmOperator *op)
+{
+ PropertyRNA *prop_error = RNA_struct_find_property(op->ptr, "error_threshold");
+ if (!RNA_property_is_set(op->ptr, prop_error)) {
+ struct CurveDrawData *cdd = op->customdata;
+ const CurvePaintSettings *cps = &cdd->vc.scene->toolsettings->curve_paint_settings;
+
+ /* error isnt set so we'll have to calculate it from the pixel values */
+ BLI_mempool_iter iter;
+ const struct StrokeElem *selem, *selem_prev;
+
+ float len_3d = 0.0f, len_2d = 0.0f;
+ float scale_px; /* pixel to local space scale */
+
+ int i = 0;
+ BLI_mempool_iternew(cdd->stroke_elem_pool, &iter);
+ selem_prev = BLI_mempool_iterstep(&iter);
+ for (selem = BLI_mempool_iterstep(&iter); selem; selem = BLI_mempool_iterstep(&iter), i++) {
+ len_3d += len_v3v3(selem->location_local, selem_prev->location_local);
+ len_2d += len_v2v2(selem->mval, selem_prev->mval);
+ selem_prev = selem;
+ }
+ scale_px = ((len_3d > 0.0f) && (len_2d > 0.0f)) ? (len_3d / len_2d) : 0.0f;
+ float error_threshold = (cps->error_threshold * U.pixelsize) * scale_px;
+ RNA_property_float_set(op->ptr, prop_error, error_threshold);
+ }
+}
+
static int curve_draw_exec(bContext *C, wmOperator *op)
{
if (op->customdata == NULL) {
@@ -636,33 +667,8 @@ static int curve_draw_exec(bContext *C, wmOperator *op)
float *cubic_spline = NULL;
unsigned int cubic_spline_len = 0;
- PropertyRNA *prop_error = RNA_struct_find_property(op->ptr, "error");
- float error_threshold; /* error in object local space */
-
-
- if (RNA_property_is_set(op->ptr, prop_error)) {
- error_threshold = RNA_property_float_get(op->ptr, prop_error);
- }
- else {
- /* error isnt set so we'll have to calculate it from the */
- BLI_mempool_iter iter;
- const struct StrokeElem *selem, *selem_prev;
-
- float len_3d = 0.0f, len_2d = 0.0f;
- float scale_px; /* pixel to local space scale */
-
- int i = 0;
- BLI_mempool_iternew(cdd->stroke_elem_pool, &iter);
- selem_prev = BLI_mempool_iterstep(&iter);
- for (selem = BLI_mempool_iterstep(&iter); selem; selem = BLI_mempool_iterstep(&iter), i++) {
- len_3d += len_v3v3(selem->location_local, selem_prev->location_local);
- len_2d += len_v2v2(selem->mval, selem_prev->mval);
- selem_prev = selem;
- }
- scale_px = ((len_3d > 0.0f) && (len_2d > 0.0f)) ? (len_3d / len_2d) : 0.0f;
- error_threshold = (cps->error_threshold * U.pixelsize) * scale_px;
- RNA_property_float_set(op->ptr, prop_error, error_threshold);
- }
+ /* error in object local space */
+ const float error_threshold = RNA_float_get(op->ptr, "error_threshold");
{
BLI_mempool_iter iter;
@@ -969,6 +975,7 @@ static int curve_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
curve_draw_stroke_to_operator(op);
+ curve_draw_exec_precalc(op);
curve_draw_exec(C, op);
return OPERATOR_FINISHED;
@@ -1004,7 +1011,11 @@ void CURVE_OT_draw(wmOperatorType *ot)
/* properties */
PropertyRNA *prop;
- RNA_def_float(ot->srna, "error", 0.0f, 0.0f, 10.0f, "Error", "", 0.0001f, 10.0f);
+ prop = RNA_def_float_distance(
+ ot->srna, "error_threshold", 0.0f, 0.0f, 10.0f, "Error",
+ "Error distance threshold (in object units)",
+ 0.0001f, 10.0f);
+ RNA_def_property_ui_range(prop, 0.0, 10, 1, 4);
prop = RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", "");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
More information about the Bf-blender-cvs
mailing list