static void ellipse_params(float Ux, float Uy, float Vx, float Vy, float &A, float &B, float &C, float &F, float &umax, float &vmax) { A = Vx * Vx + Vy * Vy; B = -2.0f * (Ux * Vx + Uy * Vy); C = Ux * Ux + Uy * Uy; F = A * C - B * B * 0.25f; float factor = (F != 0.0f ? (float)(EWA_MAXIDX + 1) / F : 0.0f); A *= factor; B *= factor; C *= factor; F = (float)(EWA_MAXIDX + 1); ellipse_bounds(A, B, C, sqrtf(F), umax, vmax); }
//------------------------------------------------------------------------------ // Name: make_ellipse_helper // Desc: //------------------------------------------------------------------------------ void GraphNode::make_ellipse_helper(node_t *node, QPainterPath &path) const { auto poly = static_cast<polygon_t *>(ND_shape_info(node)); if(poly->peripheries != 1) { qWarning("unsupported number of peripheries %d", poly->peripheries); } const int sides = poly->sides; const pointf* vertices = poly->vertices; QPolygonF polygon; for (int side = 0; side < sides; side++) { polygon.append(graph_->gToQ(vertices[side], false)); } QRectF ellipse_bounds(polygon[0], polygon[1]); for (int i = 0; i < poly->peripheries; ++i) { path.addEllipse(ellipse_bounds.adjusted(-2 * i, 2 * i, 2 * i, -2 * i)); } }