30 for (
int i = 0; i < handles.size(); ++i) {
31 outPolygon.push_back(*handles[i]);
34 if (!isAssistantComplete) {
41 for (
int i = 0; i < 4; ++i) {
42 int j = (i == 3) ? 0 : (i + 1);
43 int k = (j == 3) ? 0 : (j + 1);
50 for (
int i = 0; i < 4; ++i) {
51 int j = (i == 3) ? 0 : (i + 1);
52 if (signs[i] * signs[j] == -1) {
54 std::swap(outPolygon[i], outPolygon[j]);
60 }
else if (sum != 4 && sum != -4) {
62 if (sum == 2 || sum == -2) {
64 for (
int i = 0; i < 4; ++i) {
65 int j = (i == 3) ? 0 : (i + 1);
100 const qreal x = transform.m13() * pt.x(),
101 y = transform.m23() * pt.y(),
102 a = x + transform.m33(),
103 b = y + transform.m33(),
104 c = x + y + transform.m33(),
106 return fabs(a*(a + transform.m23())*b*(b + transform.m13()))/(d * d);
111 const qreal a = fabs((transform.m33() + transform.m13()) * (transform.m33() + transform.m23())),
112 b = fabs((transform.m33()) * (transform.m13() + transform.m33() + transform.m23())),
113 d00 = transform.m33() * transform.m33(),
114 d11 = (transform.m33() + transform.m23() + transform.m13())*(transform.m33() + transform.m23() + transform.m13()),
115 s0011 = qMin(d00, d11) / a,
116 d10 = (transform.m33() + transform.m13()) * (transform.m33() + transform.m13()),
117 d01 = (transform.m33() + transform.m23()) * (transform.m33() + transform.m23()),
118 s1001 = qMin(d10, d01) / b;
119 return qMin(s0011, s1001);
125 qreal defaultValue = 1;
133 boost::optional<QPointF> vp1;
134 boost::optional<QPointF> vp2;
139 }
else if (!vp1 || !vp2) {
146 horizon = QLineF(vp1.get(), vp1.get() + poly[1] - poly[0]);
148 horizon = QLineF(vp2.get(), vp2.get() + poly[2] - poly[1]);
153 for (
int i = 0; i < vertexCount; i++) {
155 if (vertexDist > distMax) {
156 distMax = vertexDist;
163 }
else if (vp1 && vp2) {
166 QLineF horizon = QLineF(vp1.get(), vp2.get());
170 for (
int i = 0; i < vertexCount; i++) {
172 if (vertexDist > distMax) {
173 distMax = vertexDist;
258 if (poly.size() < 4) {
262 QPointF intersection(0, 0);
265 if (fmod(QLineF(poly[0], poly[1]).angle(), 180.0)>=fmod(QLineF(poly[2], poly[3]).angle(), 180.0)+2.0
266 || fmod(QLineF(poly[0], poly[1]).angle(), 180.0)<=fmod(QLineF(poly[2], poly[3]).angle(), 180.0)-2.0) {
267 if (QLineF(poly[0], poly[1]).intersects(QLineF(poly[2], poly[3]), &intersection) != QLineF::NoIntersection) {
272 if (fmod(QLineF(poly[1], poly[2]).angle(), 180.0)>=fmod(QLineF(poly[3], poly[0]).angle(), 180.0)+2.0
273 || fmod(QLineF(poly[1], poly[2]).angle(), 180.0)<=fmod(QLineF(poly[3], poly[0]).angle(), 180.0)-2.0){
274 if (QLineF(poly[1], poly[2]).intersects(QLineF(poly[3], poly[0]), &intersection) != QLineF::NoIntersection) {