Fix for incorrect clipping of Freestyle strokes when the viewport preview is used.
This commit is contained in:
@@ -32,7 +32,7 @@ from freestyle import BackboneStretcherShader, BezierCurveShader, BinaryPredicat
|
|||||||
FalseBP1D, FalseUP1D, GuidingLinesShader, Interface0DIterator, Nature, Noise, Normal2DF0D, Operators, \
|
FalseBP1D, FalseUP1D, GuidingLinesShader, Interface0DIterator, Nature, Noise, Normal2DF0D, Operators, \
|
||||||
PolygonalizationShader, QuantitativeInvisibilityF1D, QuantitativeInvisibilityUP1D, SamplingShader, \
|
PolygonalizationShader, QuantitativeInvisibilityF1D, QuantitativeInvisibilityUP1D, SamplingShader, \
|
||||||
SpatialNoiseShader, StrokeAttribute, StrokeShader, TipRemoverShader, TrueBP1D, TrueUP1D, UnaryPredicate0D, \
|
SpatialNoiseShader, StrokeAttribute, StrokeShader, TipRemoverShader, TrueBP1D, TrueUP1D, UnaryPredicate0D, \
|
||||||
UnaryPredicate1D, VertexOrientation2DF0D, WithinImageBoundaryUP1D
|
UnaryPredicate1D, VertexOrientation2DF0D, WithinImageBoundaryUP1D, ContextFunctions
|
||||||
from Functions0D import CurveMaterialF0D
|
from Functions0D import CurveMaterialF0D
|
||||||
from PredicatesU1D import pyNatureUP1D
|
from PredicatesU1D import pyNatureUP1D
|
||||||
from logical_operators import AndUP1D, NotUP1D, OrUP1D
|
from logical_operators import AndUP1D, NotUP1D, OrUP1D
|
||||||
@@ -1046,17 +1046,7 @@ def process(layer_name, lineset_name):
|
|||||||
selection_criteria.append(upred)
|
selection_criteria.append(upred)
|
||||||
# prepare selection criteria by image border
|
# prepare selection criteria by image border
|
||||||
if lineset.select_by_image_border:
|
if lineset.select_by_image_border:
|
||||||
fac = scene.render.resolution_percentage / 100.0
|
xmin, ymin, xmax, ymax = ContextFunctions.get_border()
|
||||||
w = scene.render.resolution_x * fac
|
|
||||||
h = scene.render.resolution_y * fac
|
|
||||||
if scene.render.use_border:
|
|
||||||
xmin = scene.render.border_min_x * w
|
|
||||||
xmax = scene.render.border_max_x * w
|
|
||||||
ymin = scene.render.border_min_y * h
|
|
||||||
ymax = scene.render.border_max_y * h
|
|
||||||
else:
|
|
||||||
xmin, xmax = 0.0, float(w)
|
|
||||||
ymin, ymax = 0.0, float(h)
|
|
||||||
upred = WithinImageBoundaryUP1D(xmin, ymin, xmax, ymax)
|
upred = WithinImageBoundaryUP1D(xmin, ymin, xmax, ymax)
|
||||||
selection_criteria.append(upred)
|
selection_criteria.append(upred)
|
||||||
# select feature edges
|
# select feature edges
|
||||||
|
@@ -79,6 +79,26 @@ ContextFunctions_get_canvas_height(PyObject *self)
|
|||||||
return PyLong_FromLong(ContextFunctions::GetCanvasHeightCF());
|
return PyLong_FromLong(ContextFunctions::GetCanvasHeightCF());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char ContextFunctions_get_border___doc__[] =
|
||||||
|
".. method:: get_border()\n"
|
||||||
|
"\n"
|
||||||
|
" Returns the border.\n"
|
||||||
|
"\n"
|
||||||
|
" :return: A tuple of 4 numbers (xmin, ymin, xmax, ymax).\n"
|
||||||
|
" :rtype: tuple\n";
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
ContextFunctions_get_border(PyObject *self)
|
||||||
|
{
|
||||||
|
BBox<Vec2i> border(ContextFunctions::GetBorderCF());
|
||||||
|
PyObject *v = PyTuple_New(4);
|
||||||
|
PyTuple_SET_ITEM(v, 0, PyLong_FromLong(border.getMin().x()));
|
||||||
|
PyTuple_SET_ITEM(v, 1, PyLong_FromLong(border.getMin().y()));
|
||||||
|
PyTuple_SET_ITEM(v, 2, PyLong_FromLong(border.getMax().x()));
|
||||||
|
PyTuple_SET_ITEM(v, 3, PyLong_FromLong(border.getMax().y()));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
static char ContextFunctions_load_map___doc__[] =
|
static char ContextFunctions_load_map___doc__[] =
|
||||||
".. function:: load_map(file_name, map_name, num_levels=4, sigma=1.0)\n"
|
".. function:: load_map(file_name, map_name, num_levels=4, sigma=1.0)\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -232,6 +252,8 @@ static PyMethodDef module_functions[] = {
|
|||||||
ContextFunctions_get_canvas_width___doc__},
|
ContextFunctions_get_canvas_width___doc__},
|
||||||
{"get_canvas_height", (PyCFunction)ContextFunctions_get_canvas_height, METH_NOARGS,
|
{"get_canvas_height", (PyCFunction)ContextFunctions_get_canvas_height, METH_NOARGS,
|
||||||
ContextFunctions_get_canvas_height___doc__},
|
ContextFunctions_get_canvas_height___doc__},
|
||||||
|
{"get_border", (PyCFunction)ContextFunctions_get_border, METH_NOARGS,
|
||||||
|
ContextFunctions_get_border___doc__},
|
||||||
{"load_map", (PyCFunction)ContextFunctions_load_map, METH_VARARGS | METH_KEYWORDS,
|
{"load_map", (PyCFunction)ContextFunctions_load_map, METH_VARARGS | METH_KEYWORDS,
|
||||||
ContextFunctions_load_map___doc__},
|
ContextFunctions_load_map___doc__},
|
||||||
{"read_map_pixel", (PyCFunction)ContextFunctions_read_map_pixel, METH_VARARGS | METH_KEYWORDS,
|
{"read_map_pixel", (PyCFunction)ContextFunctions_read_map_pixel, METH_VARARGS | METH_KEYWORDS,
|
||||||
|
@@ -195,6 +195,7 @@ public:
|
|||||||
|
|
||||||
virtual int width() const = 0;
|
virtual int width() const = 0;
|
||||||
virtual int height() const = 0;
|
virtual int height() const = 0;
|
||||||
|
virtual BBox<Vec2i> border() const = 0;
|
||||||
virtual BBox<Vec3r> scene3DBBox() const = 0;
|
virtual BBox<Vec3r> scene3DBBox() const = 0;
|
||||||
|
|
||||||
inline const StrokeRenderer *renderer() const
|
inline const StrokeRenderer *renderer() const
|
||||||
|
@@ -51,6 +51,11 @@ unsigned GetCanvasHeightCF()
|
|||||||
return Canvas::getInstance()->height();
|
return Canvas::getInstance()->height();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BBox<Vec2i> GetBorderCF()
|
||||||
|
{
|
||||||
|
return Canvas::getInstance()->border();
|
||||||
|
}
|
||||||
|
|
||||||
void LoadMapCF(const char *iFileName, const char *iMapName, unsigned iNbLevels, float iSigma)
|
void LoadMapCF(const char *iFileName, const char *iMapName, unsigned iNbLevels, float iSigma)
|
||||||
{
|
{
|
||||||
return Canvas::getInstance()->loadMap(iFileName, iMapName, iNbLevels, iSigma);
|
return Canvas::getInstance()->loadMap(iFileName, iMapName, iNbLevels, iSigma);
|
||||||
|
@@ -54,10 +54,15 @@ LIB_STROKE_EXPORT
|
|||||||
unsigned GetCanvasWidthCF();
|
unsigned GetCanvasWidthCF();
|
||||||
|
|
||||||
// GetCanvasHeight
|
// GetCanvasHeight
|
||||||
/*! Returns the canvas width */
|
/*! Returns the canvas height */
|
||||||
LIB_STROKE_EXPORT
|
LIB_STROKE_EXPORT
|
||||||
unsigned GetCanvasHeightCF();
|
unsigned GetCanvasHeightCF();
|
||||||
|
|
||||||
|
// GetBorder
|
||||||
|
/*! Returns the border */
|
||||||
|
LIB_STROKE_EXPORT
|
||||||
|
BBox<Vec2i> GetBorderCF();
|
||||||
|
|
||||||
// Load map
|
// Load map
|
||||||
/*! Loads an image map for further reading */
|
/*! Loads an image map for further reading */
|
||||||
LIB_STROKE_EXPORT
|
LIB_STROKE_EXPORT
|
||||||
|
Reference in New Issue
Block a user