summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 55693f8)
raw | patch | inline | side by side (parent: 55693f8)
author | johanengelen <johanengelen@users.sourceforge.net> | |
Wed, 31 Dec 2008 00:23:40 +0000 (00:23 +0000) | ||
committer | johanengelen <johanengelen@users.sourceforge.net> | |
Wed, 31 Dec 2008 00:23:40 +0000 (00:23 +0000) |
src/display/nr-filter-units.cpp | patch | blob | history | |
src/display/nr-filter-units.h | patch | blob | history | |
src/display/nr-filter.cpp | patch | blob | history |
index 6836e39af8771ccac3d7ef729f00f58732d9aa47..c26d56ad64d50fc3746ea7e8aa168393703c4afc 100644 (file)
#include "libnr/nr-rect-l.h"
#include "libnr/nr-scale.h"
#include "sp-filter-units.h"
+#include <2geom/transforms.h>
namespace NR {
paraller_axis(false), automatic_resolution(true)
{}
-void FilterUnits::set_ctm(Matrix const &ctm) {
+void FilterUnits::set_ctm(Geom::Matrix const &ctm) {
this->ctm = ctm;
}
resolution_y = y_res;
}
-void FilterUnits::set_item_bbox(Rect const &bbox) {
+void FilterUnits::set_item_bbox(Geom::OptRect const &bbox) {
item_bbox = bbox;
}
-void FilterUnits::set_filter_area(Rect const &area) {
+void FilterUnits::set_filter_area(Geom::OptRect const &area) {
filter_area = area;
}
automatic_resolution = automatic;
}
-Matrix FilterUnits::get_matrix_user2pb() const {
+Geom::Matrix FilterUnits::get_matrix_user2pb() const {
g_assert(resolution_x > 0);
g_assert(resolution_y > 0);
+ g_assert(filter_area);
- Matrix u2pb = ctm;
+ Geom::Matrix u2pb = ctm;
if (paraller_axis || !automatic_resolution) {
- u2pb[0] = resolution_x / (filter_area.max()[X] - filter_area.min()[X]);
+ u2pb[0] = resolution_x / (filter_area->max()[X] - filter_area->min()[X]);
u2pb[1] = 0;
u2pb[2] = 0;
- u2pb[3] = resolution_y / (filter_area.max()[Y] - filter_area.min()[Y]);
+ u2pb[3] = resolution_y / (filter_area->max()[Y] - filter_area->min()[Y]);
u2pb[4] = ctm[4];
u2pb[5] = ctm[5];
}
return u2pb;
}
-Matrix FilterUnits::get_matrix_units2pb(SPFilterUnits units) const {
- if (units == SP_FILTER_UNITS_OBJECTBOUNDINGBOX) {
- Matrix u2pb = get_matrix_user2pb();
- Point origo(item_bbox.min());
+Geom::Matrix FilterUnits::get_matrix_units2pb(SPFilterUnits units) const {
+ if ( item_bbox && (units == SP_FILTER_UNITS_OBJECTBOUNDINGBOX) ) {
+ Geom::Matrix u2pb = get_matrix_user2pb();
+ Geom::Point origo(item_bbox->min());
origo *= u2pb;
- Point i_end(item_bbox.max()[X], item_bbox.min()[Y]);
+ Geom::Point i_end(item_bbox->max()[X], item_bbox->min()[Y]);
i_end *= u2pb;
- Point j_end(item_bbox.min()[X], item_bbox.max()[Y]);
+ Geom::Point j_end(item_bbox->min()[X], item_bbox->max()[Y]);
j_end *= u2pb;
double len_i = sqrt((origo[X] - i_end[X]) * (origo[X] - i_end[X])
/* TODO: make sure that user coordinate system (0,0) is in correct
* place in pixblock coordinates */
- scale scaling(1.0 / len_i, 1.0 / len_j);
+ Geom::Scale scaling(1.0 / len_i, 1.0 / len_j);
u2pb *= scaling;
return u2pb;
} else if (units == SP_FILTER_UNITS_USERSPACEONUSE) {
return get_matrix_user2pb();
} else {
g_warning("Error in NR::FilterUnits::get_matrix_units2pb: unrecognized unit type (%d)", units);
- return Matrix();
+ return Geom::Matrix();
}
}
-Matrix FilterUnits::get_matrix_filterunits2pb() const {
+Geom::Matrix FilterUnits::get_matrix_filterunits2pb() const {
return get_matrix_units2pb(filterUnits);
}
-Matrix FilterUnits::get_matrix_primitiveunits2pb() const {
+Geom::Matrix FilterUnits::get_matrix_primitiveunits2pb() const {
return get_matrix_units2pb(primitiveUnits);
}
-Matrix FilterUnits::get_matrix_display2pb() const {
- Matrix d2pb = ctm.inverse();
+Geom::Matrix FilterUnits::get_matrix_display2pb() const {
+ Geom::Matrix d2pb = ctm.inverse();
d2pb *= get_matrix_user2pb();
return d2pb;
}
-Matrix FilterUnits::get_matrix_pb2display() const {
- Matrix pb2d = get_matrix_user2pb().inverse();
+Geom::Matrix FilterUnits::get_matrix_pb2display() const {
+ Geom::Matrix pb2d = get_matrix_user2pb().inverse();
pb2d *= ctm;
return pb2d;
}
-Matrix FilterUnits::get_matrix_user2units(SPFilterUnits units) const {
- if (units == SP_FILTER_UNITS_OBJECTBOUNDINGBOX) {
+Geom::Matrix FilterUnits::get_matrix_user2units(SPFilterUnits units) const {
+ if (item_bbox && units == SP_FILTER_UNITS_OBJECTBOUNDINGBOX) {
/* No need to worry about rotations: bounding box coordinates
* always have base vectors paraller with userspace coordinates */
- Point min(item_bbox.min());
- Point max(item_bbox.max());
+ Point min(item_bbox->min());
+ Point max(item_bbox->max());
double scale_x = 1.0 / (max[X] - min[X]);
double scale_y = 1.0 / (max[Y] - min[Y]);
- return Matrix(scale_x, 0,
- 0, scale_y,
- min[X] * scale_x, min[Y] * scale_y);
+ //return Geom::Translate(min) * Geom::Scale(scale_x,scale_y); ?
+ return Geom::Matrix(scale_x, 0,
+ 0, scale_y,
+ min[X] * scale_x, min[Y] * scale_y);
} else if (units == SP_FILTER_UNITS_USERSPACEONUSE) {
- return identity();
+ return Geom::identity();
} else {
g_warning("Error in NR::FilterUnits::get_matrix_user2units: unrecognized unit type (%d)", units);
- return Matrix();
+ return Geom::Matrix();
}
}
-Matrix FilterUnits::get_matrix_user2filterunits() const {
+Geom::Matrix FilterUnits::get_matrix_user2filterunits() const {
return get_matrix_user2units(filterUnits);
}
-Matrix FilterUnits::get_matrix_user2primitiveunits() const {
+Geom::Matrix FilterUnits::get_matrix_user2primitiveunits() const {
return get_matrix_user2units(primitiveUnits);
}
IRect FilterUnits::get_pixblock_filterarea_paraller() const {
+ g_assert(filter_area);
+
int min_x = INT_MAX, min_y = INT_MAX, max_x = INT_MIN, max_y = INT_MIN;
- Matrix u2pb = get_matrix_user2pb();
+ Geom::Matrix u2pb = get_matrix_user2pb();
for (int i = 0 ; i < 4 ; i++) {
- Point p = filter_area.corner(i);
+ Geom::Point p = filter_area->corner(i);
p *= u2pb;
if (p[X] < min_x) min_x = (int)std::floor(p[X]);
if (p[X] > max_x) max_x = (int)std::ceil(p[X]);
index a24e0682fa957ce0677d634fb183caedcef7a070..d11df621f441b3604c419403265734347e800e30 100644 (file)
#include "sp-filter-units.h"
#include "libnr/nr-matrix.h"
-#include <2geom/matrix.h>
#include "libnr/nr-rect.h"
#include "libnr/nr-rect-l.h"
+#include <2geom/matrix.h>
#include <2geom/rect.h>
namespace NR {
* Sets the current transformation matrix, i.e. transformation matrix
* from object's user coordinates to screen coordinates
*/
- void set_ctm(Matrix const &ctm);
+ void set_ctm(Geom::Matrix const &ctm);
/**
* Sets the resolution, the filter should be rendered with.
/**
* Sets the item bounding box in user coordinates
*/
- void set_item_bbox(Rect const &bbox);
+ void set_item_bbox(Geom::OptRect const &bbox);
/**
* Sets the filter effects area in user coordinates
*/
- void set_filter_area(Rect const &area);
+ void set_filter_area(Geom::OptRect const &area);
/**
* Sets, if x and y axis in pixblock coordinates should be paraller
/**
* Gets the user coordinates to pixblock coordinates transformation matrix.
*/
- Matrix get_matrix_user2pb() const;
+ Geom::Matrix get_matrix_user2pb() const;
/**
* Gets the filterUnits to pixblock coordinates transformation matrix.
*/
- Matrix get_matrix_filterunits2pb() const;
+ Geom::Matrix get_matrix_filterunits2pb() const;
/**
* Gets the primitiveUnits to pixblock coordinates transformation matrix.
*/
- Matrix get_matrix_primitiveunits2pb() const;
+ Geom::Matrix get_matrix_primitiveunits2pb() const;
/**
* Gets the display coordinates to pixblock coordinates transformation
* matrix.
*/
- Matrix get_matrix_display2pb() const;
+ Geom::Matrix get_matrix_display2pb() const;
/**
* Gets the pixblock coordinates to display coordinates transformation
* matrix
*/
- Matrix get_matrix_pb2display() const;
+ Geom::Matrix get_matrix_pb2display() const;
/**
* Gets the user coordinates to filterUnits transformation matrix.
*/
- Matrix get_matrix_user2filterunits() const;
+ Geom::Matrix get_matrix_user2filterunits() const;
/**
* Gets the user coordinates to primitiveUnits transformation matrix.
*/
- Matrix get_matrix_user2primitiveunits() const;
+ Geom::Matrix get_matrix_user2primitiveunits() const;
/**
* Returns the filter area in pixblock coordinates.
FilterUnits& operator=(FilterUnits const &other);
private:
- Matrix get_matrix_units2pb(SPFilterUnits units) const;
- Matrix get_matrix_user2units(SPFilterUnits units) const;
+ Geom::Matrix get_matrix_units2pb(SPFilterUnits units) const;
+ Geom::Matrix get_matrix_user2units(SPFilterUnits units) const;
SPFilterUnits filterUnits, primitiveUnits;
double resolution_x, resolution_y;
bool paraller_axis;
bool automatic_resolution;
- Matrix ctm;
- Rect item_bbox;
- Rect filter_area;
+ Geom::Matrix ctm;
+ Geom::OptRect item_bbox;
+ Geom::OptRect filter_area;
};
index 2f437ba6cbbdfb7975a4da5d2fae5969c0ef3f1f..36ba3704e64e633345cfd29f9d268ccf026b5eb1 100644 (file)
FilterUnits units(_filter_units, _primitive_units);
units.set_ctm(trans);
- units.set_item_bbox(from_2geom(item_bbox));
- units.set_filter_area(from_2geom(filter_area));
+ units.set_item_bbox(item_bbox);
+ units.set_filter_area(filter_area);
// TODO: with filterRes of 0x0 should return an empty image
std::pair<double,double> resolution