103 std::vector<QLineF> norms = {
112 const qreal xfactor = 23.0;
113 const qreal yfactor = 17.0;
128 QPointF start_offset(xoffset, yoffset);
129 QPointF end_offset(0, 0);
135 QPointF intersect_point_start, intersect_point_end;
136 QLineF intersect_norm_start, intersect_norm_end;
140 for (
int i = 1; i < end_polygon.count(); ++i )
144 QLineF item_side = QLineF (
p1,
p2 );
145 QLineF::IntersectType intersect_type = item_side.intersects ( center_line, &intersect_point_end );
147 if ( intersect_type == QLineF::BoundedIntersection ) {
148 intersect_norm_end = norms[i-1];
157 for (
int i = 1; i < start_polygon.count(); ++i )
160 QLineF item_side = QLineF (
p1,
p2 );
161 QLineF::IntersectType intersect_type = item_side.intersects ( center_line,
162 &intersect_point_start );
163 if ( intersect_type == QLineF::BoundedIntersection ) {
167 intersect_point_start.y()};
171 intersect_point_start.y()};
175 case 4: start_sp={intersect_point_start.x(),
179 intersect_norm_start = norms[i-1];
186 QLineF direct_line(start_sp, intersect_point_end);
189 label_br.translate(-label_br.width()/2, label_br.height()/2);
194 cardinality_br.translate(-cardinality_br.width()/2, cardinality_br.height()/2);
197 qreal label_x_padding = 2;
198 qreal label_y_padding = -2;
199 qreal card_x_padding = 20;
200 qreal card_y_padding = 0;
202 QPainterPath path( intersect_point_start );
204 if ((intersect_norm_start.dx() == 0) && (intersect_norm_end.dx() == 0)) {
206 QPointF wp1 = QPointF(direct_line.x1(),
207 direct_line.center().y()+yoffset);
208 QPointF wp2 = QPointF(direct_line.x2(),
209 direct_line.center().y()+yoffset);
210 path.moveTo(direct_line.x1(), direct_line.y1());
215 label_br.translate( wp2
217 (direct_line.dx() < 0 ? 1 : -1) * (label_x_padding+label_br.width()/2),
218 (direct_line.dy() > 0 ? 1 : -1) * (label_br.height()+label_y_padding)
222 cardinality_br.translate( intersect_point_start
224 (direct_line.dx() < 0 ? 1 : -1) * (card_x_padding+cardinality_br.width()/2),
225 (direct_line.dy() > 0 ? 1 : -1) * (cardinality_br.height()+card_y_padding)
229 }
else if ((intersect_norm_start.dy() == 0) && (intersect_norm_end.dy() == 0)) {
231 QPointF wp1 = QPointF(direct_line.center().x()-xoffset,
233 QPointF wp2 = QPointF(direct_line.center().x()-xoffset,
236 path.moveTo(direct_line.x1(), direct_line.y1());
241 label_br.translate( wp2
243 (direct_line.dx() > 0 ? 1 : -1) * (label_x_padding+label_br.width()/2),
244 (direct_line.dy() < 0 ? 1 : -1) * (label_br.height()+label_y_padding)
247 cardinality_br.translate( intersect_point_start
249 (direct_line.dx() > 0 ? 1 : -1) * (card_x_padding+cardinality_br.width()/2),
250 (direct_line.dy() < 0 ? 1 : -1) * (cardinality_br.height()+card_y_padding)
254 }
else if (intersect_norm_start.dx() == 0) {
256 QPointF wp1 = QPointF(direct_line.x1(), direct_line.y2());
258 path.moveTo(direct_line.x1(), direct_line.y1());
261 label_br.translate( wp1
263 (direct_line.dx() > 0 ? 1 : -1) * (label_x_padding+label_br.width()/2),
264 (direct_line.dy() < 0 ? 1 : -1) * (label_br.height()+label_y_padding)
267 cardinality_br.translate( intersect_point_start
269 (direct_line.dx() < 0 ? 1 : -1) * (card_x_padding+cardinality_br.width()/2),
270 (direct_line.dy() > 0 ? 1 : -1) * (cardinality_br.height()+card_y_padding)
274 }
else if (intersect_norm_start.dy() == 0) {
276 QPointF wp1 = QPointF(direct_line.x2(), direct_line.y1() );
277 path.moveTo(direct_line.x1(), direct_line.y1());
282 label_br.translate( wp1
284 (direct_line.dx() > 0 ? 1 : -1) * (label_x_padding+label_br.width()/2),
285 (direct_line.dy() < 0 ? 1 : -1) * (label_br.height()+label_y_padding)
288 cardinality_br.translate( intersect_point_start
290 (direct_line.dx() < 0 ? 1 : -1) * (card_x_padding+cardinality_br.width()/2),
291 (direct_line.dy() > 0 ? 1 : -1) * (cardinality_br.height()+card_y_padding)
297 path.lineTo( intersect_point_end );