box2d<T>::box2d(const box2d_type &rhs, const agg::trans_affine& tr) { double x0 = rhs.minx_, y0 = rhs.miny_; double x1 = rhs.maxx_, y1 = rhs.miny_; double x2 = rhs.maxx_, y2 = rhs.maxy_; double x3 = rhs.minx_, y3 = rhs.maxy_; tr.transform(&x0, &y0); tr.transform(&x1, &y1); tr.transform(&x2, &y2); tr.transform(&x3, &y3); init(x0, y0, x2, y2); expand_to_include(x1, y1); expand_to_include(x3, y3); }
box2d<T>& box2d<T>::operator*=(agg::trans_affine const& tr) { double x0 = minx_, y0 = miny_; double x1 = maxx_, y1 = miny_; double x2 = maxx_, y2 = maxy_; double x3 = minx_, y3 = maxy_; tr.transform(&x0, &y0); tr.transform(&x1, &y1); tr.transform(&x2, &y2); tr.transform(&x3, &y3); init(x0, y0, x2, y2); expand_to_include(x1, y1); expand_to_include(x3, y3); return *this; }
// arrange group members in x horizontal pairs of 2, // one to the left and one to the right of center in each pair void operator()(pair_layout const& layout) const { member_offsets_.resize(member_boxes_.size()); double y_margin = layout.get_item_margin(); double x_margin = y_margin / 2.0; if (member_boxes_.size() == 1) { member_offsets_[0] = pixel_position(0, 0) - input_origin_; return; } auto max_diff = layout.get_max_difference(); auto layout_box = make_horiz_pair(0, 0.0, 0, x_margin, max_diff); auto y_shift = 0.5 * layout_box.height(); for (size_t i = 2; i < member_boxes_.size(); i += 2) { auto y = layout_box.maxy() + y_margin; auto pair_box = make_horiz_pair(i, y, 1, x_margin, max_diff); layout_box.expand_to_include(pair_box); } // layout_box.center corresponds to the center of the first row; // shift offsets so that the whole group is centered vertically y_shift -= 0.5 * layout_box.height(); for (auto & offset : member_offsets_) { offset.y += y_shift; } }
box2d<T>& box2d<T>::operator+=(box2d<T> const& other) { expand_to_include(other); return *this; }
inline #endif void box2d<T>::expand_to_include(const coord<T,2>& c) { expand_to_include(c.x,c.y); }
inline void Envelope<T>::expand_to_include(const coord<T,2>& c) { expand_to_include(c.x,c.y); }