summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2006-11-14 00:43:28 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2006-11-14 00:43:28 +0000
commitfb0a27f9accf3a054573a220bf1b449f697a1355 (patch)
tree91f3c2a0f165589224d5cf4ed153c71b92af4b92
parentpatch for emf export on win32 (diff)
downloadinkscape-fb0a27f9accf3a054573a220bf1b449f697a1355.tar.gz
inkscape-fb0a27f9accf3a054573a220bf1b449f697a1355.zip
patch 1591723 for extra tracing parameters
(bzr r1948)
-rw-r--r--src/trace/potrace/inkscape-potrace.cpp23
-rw-r--r--src/trace/potrace/inkscape-potrace.h49
-rw-r--r--src/ui/dialog/tracedialog.cpp89
3 files changed, 143 insertions, 18 deletions
diff --git a/src/trace/potrace/inkscape-potrace.cpp b/src/trace/potrace/inkscape-potrace.cpp
index 404d25d3a..e36673e4f 100644
--- a/src/trace/potrace/inkscape-potrace.cpp
+++ b/src/trace/potrace/inkscape-potrace.cpp
@@ -3,8 +3,9 @@
*
* Authors:
* Bob Jamison <rjamison@titan.com>
+ * Stéphane Gimenez <dev@gim.name>
*
- * Copyright (C) 2004 Bob Jamison
+ * Copyright (C) 2004-2006 Authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
*
@@ -70,18 +71,23 @@ namespace Potrace {
*/
PotraceTracingEngine::PotraceTracingEngine()
{
+ /* get default parameters */
+ potraceParams = potrace_param_default();
+ potraceParams->progress.callback = potraceStatusCallback;
+ potraceParams->progress.data = (void *)this;
//##### Our defaults
invert = false;
traceType = TRACE_BRIGHTNESS;
-
quantizationNrColors = 8;
-
brightnessThreshold = 0.45;
-
cannyHighThreshold = 0.65;
+}
+PotraceTracingEngine::~PotraceTracingEngine()
+{
+ potrace_param_free(potraceParams);
}
@@ -366,13 +372,6 @@ PotraceTracingEngine::preview(Glib::RefPtr<Gdk::Pixbuf> thePixbuf)
std::string
PotraceTracingEngine::grayMapToPath(GrayMap *grayMap, long *nodeCount)
{
-
- /* get default parameters */
- potrace_param_t *potraceParams = potrace_param_default();
-
- potraceParams->progress.callback = potraceStatusCallback;
- potraceParams->progress.data = (void *)this;
-
potrace_bitmap_t *potraceBitmap = bm_new(grayMap->width, grayMap->height);
bm_clear(potraceBitmap, 0);
@@ -410,7 +409,6 @@ PotraceTracingEngine::grayMapToPath(GrayMap *grayMap, long *nodeCount)
{
g_warning("aborted");
potrace_state_free(potraceState);
- potrace_param_free(potraceParams);
return "";
}
@@ -424,7 +422,6 @@ PotraceTracingEngine::grayMapToPath(GrayMap *grayMap, long *nodeCount)
/* free a potrace items */
potrace_state_free(potraceState);
- potrace_param_free(potraceParams);
if (!keepGoing)
return "";
diff --git a/src/trace/potrace/inkscape-potrace.h b/src/trace/potrace/inkscape-potrace.h
index f3459159f..838a1363a 100644
--- a/src/trace/potrace/inkscape-potrace.h
+++ b/src/trace/potrace/inkscape-potrace.h
@@ -3,8 +3,9 @@
*
* Authors:
* Bob Jamison <rjamison@titan.com>
+ * Stéphane Gimenez <dev@gim.name>
*
- * Copyright (C) 2004 Bob Jamison
+ * Copyright (C) 2004-2006 Authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
*
@@ -20,6 +21,8 @@
#include <trace/trace.h>
#include <trace/imagemap.h>
+#include "potracelib.h"
+
namespace Inkscape {
namespace Trace {
@@ -50,8 +53,47 @@ class PotraceTracingEngine : public TracingEngine
/**
*
*/
- virtual ~PotraceTracingEngine()
- {}
+ ~PotraceTracingEngine();
+
+
+ /**
+ * Sets/gets potrace parameters
+ */
+ void setParamsTurdSize(int val)
+ {
+ potraceParams->turdsize = val;
+ }
+ int getParamsTurdSize()
+ {
+ return potraceParams->turdsize;
+ }
+
+ void setParamsAlphaMax(double val)
+ {
+ potraceParams->alphamax = val;
+ }
+ double getParamsAlphaMax()
+ {
+ return potraceParams->alphamax;
+ }
+
+ void setParamsOptiCurve(bool val)
+ {
+ potraceParams->opticurve = val;
+ }
+ bool getParamsOptiCurve()
+ {
+ return potraceParams->opticurve;
+ }
+
+ void setParamsOptTolerance(double val)
+ {
+ potraceParams->opttolerance = val;
+ }
+ double getParamsOptTolerance()
+ {
+ return potraceParams->opttolerance;
+ }
void setTraceType(TraceType val)
{
@@ -199,6 +241,7 @@ class PotraceTracingEngine : public TracingEngine
private:
+ potrace_param_t *potraceParams;
TraceType traceType;
//## do i invert at the end?
diff --git a/src/ui/dialog/tracedialog.cpp b/src/ui/dialog/tracedialog.cpp
index 6182954f6..645ce885f 100644
--- a/src/ui/dialog/tracedialog.cpp
+++ b/src/ui/dialog/tracedialog.cpp
@@ -3,10 +3,11 @@
* bitmap <image> into an svg <path>
*
* Authors:
- * Bob Jamison
+ * Bob Jamison <rjamison@titan.com>
+ * Stéphane Gimenez <dev@gim.name>
* Other dudes from The Inkscape Organization
*
- * Copyright (C) 2004, 2005 Authors
+ * Copyright (C) 2004-2006 Authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -98,6 +99,22 @@ class TraceDialogImpl : public TraceDialog
Gtk::Button *potraceOkButton;
Gtk::Button *potraceCancelButton;
+ //params
+ Gtk::Frame potraceParamsFrame;
+ Gtk::VBox potraceParamsVBox;
+ Gtk::HBox potraceParamsSpecklesBox;
+ Gtk::CheckButton potraceParamsSpecklesButton;
+ Gtk::Label potraceParamsSpecklesSizeLabel;
+ Gtk::SpinButton potraceParamsSpecklesSizeSpinner;
+ Gtk::HBox potraceParamsCornersBox;
+ Gtk::CheckButton potraceParamsCornersButton;
+ Gtk::Label potraceParamsCornersThresholdLabel;
+ Gtk::SpinButton potraceParamsCornersThresholdSpinner;
+ Gtk::HBox potraceParamsOptimBox;
+ Gtk::CheckButton potraceParamsOptimButton;
+ Gtk::Label potraceParamsOptimToleranceLabel;
+ Gtk::SpinButton potraceParamsOptimToleranceSpinner;
+
//brightness
Gtk::Frame potraceBrightnessFrame;
Gtk::VBox potraceBrightnessVBox;
@@ -211,7 +228,24 @@ void TraceDialogImpl::potraceProcess(bool do_i_trace)
pte.setInvert(false);
}
+ /* params */
+ int paramsSpecklesSize =
+ potraceParamsSpecklesButton.get_active() ?
+ potraceParamsSpecklesSizeSpinner.get_value_as_int() :
+ 0;
+ pte.setParamsTurdSize(paramsSpecklesSize);
+ double paramsCornersThreshold =
+ potraceParamsCornersButton.get_active() ?
+ potraceParamsCornersThresholdSpinner.get_value() :
+ 0.;
+ pte.setParamsAlphaMax(paramsCornersThreshold);
+ bool paramsOptim = potraceParamsOptimButton.get_active();
+ pte.setParamsOptiCurve(paramsOptim);
+ double paramsOptimTolerance = potraceParamsOptimToleranceSpinner.get_value();
+ pte.setParamsOptTolerance(paramsOptimTolerance);
+
//##### Get the single-scan settings
+
/* brightness */
double brightnessThreshold = potraceBrightnessSpinner.get_value();
pte.setBrightnessThreshold(brightnessThreshold);
@@ -357,6 +391,57 @@ TraceDialogImpl::TraceDialogImpl()
//##Set up the Potrace panel
+ /*#### params ####*/
+ potraceParamsSpecklesButton.set_label(_("Speckles Filtering"));
+ potraceParamsSpecklesButton.set_active(true);
+ //tips.set_tip(potraceParamsSpecklesButton, _(""));
+ potraceParamsSpecklesBox.pack_start(potraceParamsSpecklesButton, false, false, MARGIN);
+ potraceParamsSpecklesSizeSpinner.set_digits(0);
+ potraceParamsSpecklesSizeSpinner.set_increments(1, 10);
+ potraceParamsSpecklesSizeSpinner.set_range(0, 1000);
+ potraceParamsSpecklesSizeSpinner.set_value(2);
+ tips.set_tip(potraceParamsSpecklesSizeSpinner,
+ _("Suppress speckles of up to this many pixels"));
+ potraceParamsSpecklesBox.pack_end(potraceParamsSpecklesSizeSpinner, false, false, MARGIN);
+ potraceParamsSpecklesSizeLabel.set_label(_("Size:"));
+ potraceParamsSpecklesBox.pack_end(potraceParamsSpecklesSizeLabel, false, false, MARGIN);
+
+ potraceParamsCornersButton.set_label(_("Corner Smoothing"));
+ potraceParamsCornersButton.set_active(true);
+ //tips.set_tip(potraceParamsCornersButton, _(""));
+ potraceParamsCornersBox.pack_start(potraceParamsCornersButton, false, false, MARGIN);
+ potraceParamsCornersThresholdSpinner.set_digits(2);
+ potraceParamsCornersThresholdSpinner.set_increments(0.01, 0.1);
+ potraceParamsCornersThresholdSpinner.set_range(0.0, 1.34);
+ potraceParamsCornersThresholdSpinner.set_value(1.0);
+ potraceParamsCornersBox.pack_end(potraceParamsCornersThresholdSpinner, false, false, MARGIN);
+ tips.set_tip(potraceParamsCornersThresholdSpinner,
+ _("The higher this value, the smoother corners will be produced"));
+ potraceParamsCornersThresholdLabel.set_label(_("Threshold:"));
+ potraceParamsCornersBox.pack_end(potraceParamsCornersThresholdLabel, false, false, MARGIN);
+
+ potraceParamsOptimButton.set_label(_("Curve Optimization"));
+ potraceParamsOptimButton.set_active(true);
+ tips.set_tip(potraceParamsOptimButton,
+ _("Try to join adjacent Bezier curve segments"));
+ potraceParamsOptimBox.pack_start(potraceParamsOptimButton, false, false, MARGIN);
+ potraceParamsOptimToleranceSpinner.set_digits(2);
+ potraceParamsOptimToleranceSpinner.set_increments(0.05, 0.25);
+ potraceParamsOptimToleranceSpinner.set_range(0.0, 5.0);
+ potraceParamsOptimToleranceSpinner.set_value(0.2);
+ potraceParamsOptimBox.pack_end(potraceParamsOptimToleranceSpinner, false, false, MARGIN);
+ tips.set_tip(potraceParamsOptimToleranceSpinner,
+ _("Set the curve optimization tolerance"));
+ potraceParamsOptimToleranceLabel.set_label(_("Tolerance:"));
+ potraceParamsOptimBox.pack_end(potraceParamsOptimToleranceLabel, false, false, MARGIN);
+
+ potraceParamsVBox.pack_start(potraceParamsSpecklesBox, false, false, MARGIN);
+ potraceParamsVBox.pack_start(potraceParamsCornersBox, false, false, MARGIN);
+ potraceParamsVBox.pack_start(potraceParamsOptimBox, false, false, MARGIN);
+ potraceParamsFrame.set_label(_("Parameters"));
+ potraceParamsFrame.add(potraceParamsVBox);
+ potraceBox.pack_start(potraceParamsFrame, false, false, 0);
+
/*#### brightness ####*/
potraceBrightnessRadioButton.set_label(_("Brightness"));
potraceGroup = potraceBrightnessRadioButton.get_group();