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);
}
Exemple #2
0
//------------------------------------------------------------------------------
// 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));
	}
}