double QgsGeometryUtils::circleTangentDirection( const QgsPointV2& tangentPoint, const QgsPointV2& cp1, const QgsPointV2& cp2, const QgsPointV2& cp3 ) { //calculate circle midpoint double mX, mY, radius; circleCenterRadius( cp1, cp2, cp3, radius, mX, mY ); double p1Angle = QgsGeometryUtils::ccwAngle( cp1.y() - mY, cp1.x() - mX ); double p2Angle = QgsGeometryUtils::ccwAngle( cp2.y() - mY, cp2.x() - mX ); double p3Angle = QgsGeometryUtils::ccwAngle( cp3.y() - mY, cp3.x() - mX ); if ( circleClockwise( p1Angle, p2Angle, p3Angle ) ) { return lineAngle( tangentPoint.x(), tangentPoint.y(), mX, mY ); } else { return lineAngle( mX, mY, tangentPoint.x(), tangentPoint.y() ); } }
void CircleLayout::layout() { int total = vertexdraws.count(); QPointF center = centerOf(vertexdraws); float radius = qMax(25.0, vertexdraws[0]->radius()*total/1.0); QMultiMap<double, VertexDraw*> sorteddraws; foreach(VertexDraw* draw, vertexdraws) { sorteddraws.insert(lineAngle(center, draw->pos()), draw); }