QScriptValue PHIEllipseItem::spanAngle( const QScriptValue &v )
{
    if ( !isServerItem() ) return scriptEngine()->undefinedValue();
    if ( !v.isValid() ) return realSpanAngle();
    setSpanAngle( v.toInt32() );
    setDirtyFlag( DFDoNotCache );
    return self();
}
void EllipseScatterer::setParamFromWidget( ) {
    //QLOG_DEBUG() << "EllipseScatterer::setParamFromWidget";
    EllipseParam param = innerState->form.getParam();
    setRect( param.rect );
    setStartAngle( param.startAngle );
    setSpanAngle( param.spanAngle );
    setRotationAngle( param.rotationAngle );
    paint( state->scene, state->xMin, state->xMax, state->yMin, state->yMax );
}
Beispiel #3
0
/**
 * @brief WayPointCurve::refreshLocations Update the settings for the
 * arc when it is moved or the zoom changes
 */
void WayPointCurve::refreshLocations()
{
    double m_n, m_e, p_n, p_e, d, center_x, center_y;

    // Center between start and end
    m_n = (m_start->pos().x() + m_dest->pos().x()) / 2;
    m_e = (m_start->pos().y() + m_dest->pos().y()) / 2;

    // Normal vector the line between start and end.
    if (!m_clockwise) {
        p_n = -(m_dest->pos().y() - m_start->pos().y());
        p_e = (m_dest->pos().x() - m_start->pos().x());
    } else {
        p_n = (m_dest->pos().y() - m_start->pos().y());
        p_e = -(m_dest->pos().x() - m_start->pos().x());
    }

    double radius_sign = (m_radius > 0) ? 1 : -1;
    double pixels2meters = my_map->Projection()->GetGroundResolution(my_map->ZoomTotal(), m_start->Coord().Lat());
    double radius = fabs(m_radius / pixels2meters);

    // Work out how far to go along the perpendicular bisector
    d = sqrt(radius * radius / (p_n * p_n + p_e * p_e) - 0.25f);

    if (fabs(p_n) < 1e-3 && fabs(p_e) < 1e-3) {
        center_x = m_n;
        center_y = m_e;
    } else {
        center_x = m_n + p_n * d * radius_sign;
        center_y = m_e + p_e * d * radius_sign;
    }

    // Store the center
    center.setX(center_x);
    center.setY(center_y);

    // Compute the midpoint along the arc for the arrow
    d = sqrt(radius * radius / (p_n * p_n + p_e * p_e));
    midpoint.setX(center_x - p_n * d);
    midpoint.setY(center_y - p_e * d);
    midpoint_angle = -atan2(m_dest->pos().y() - m_start->pos().y(), m_dest->pos().x() - m_start->pos().x());

    double startAngle = atan2(-(m_start->pos().y() - center_y), m_start->pos().x() - center_x);
    double endAngle = atan2(-(m_dest->pos().y() - center_y), m_dest->pos().x() - center_x);
    double span = endAngle - startAngle;
    if (!m_clockwise) {
        if (span > 0)
            span = span - 2 * M_PI;
    } else {
        if (span < 0)
            span = span + 2 * M_PI;
    }
    setRect(center_x - radius, center_y - radius, 2 * radius, 2 * radius);
    setStartAngle(startAngle * 180.0 / M_PI * 16.0);
    setSpanAngle(span * 180.0 / M_PI * 16.0);
    update();
}
Beispiel #4
0
PART_CIRC::PART_CIRC(int i, QRect pos, QColor colFont, double angDeb, double angTaille, QGraphicsScene *s, QString n)
{
    scene=s;
    id=i;
    setBrush(QBrush(colFont));
    setRect(pos);
    setStartAngle((angDeb)*16);
    setSpanAngle(angTaille*16);
    if(n!="")
    {
        nom=n;
        nomGraph = new QGraphicsTextItem(nom,this);
        nomGraph->setPos(0, pos.height()/2);
        nomGraph->setTransformOriginPoint(pos.width()/4,pos.height()/4);
        scene->addItem(this);
        nomGraph->setRotation(360-(int(angDeb+angTaille/2+180)%360));
        nomGraph->setPos(pos.width()/4,pos.height()/4);
    }
}
UBGraphicsProtractor::UBGraphicsProtractor()
        : QGraphicsEllipseItem(sDefaultRect)
        , mCurrentTool(None)
        , mShowButtons(false)
        , mCurrentAngle(0)
        , mSpan(180)
        , mStartAngle(0)
        , mScaleFactor(1)
        , mResetSvgItem(0)
        , mResizeSvgItem(0)
        , mMarkerSvgItem(0)
{
    sFillTransparency = 127;
    sDrawTransparency = 192;
    create(*this);

    setCacheMode(QGraphicsItem::DeviceCoordinateCache);

    setStartAngle(0);
    setSpanAngle(180 * 16);

    mResetSvgItem = new QGraphicsSvgItem(":/images/resetTool.svg", this);
    mResetSvgItem->setVisible(false);
    mResetSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));

    mResizeSvgItem = new QGraphicsSvgItem(":/images/resizeTool.svg", this);
    mResizeSvgItem->setVisible(false);
    mResizeSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));

    mMarkerSvgItem = new QGraphicsSvgItem(":/images/angleMarker.svg", this);
    mMarkerSvgItem->setVisible(false);
    mMarkerSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool));

    mRotateSvgItem = new QGraphicsSvgItem(":/images/rotateTool.svg", this);
    mRotateSvgItem->setVisible(false);
    mRotateSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));

    setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::CppTool)); //Necessary to set if we want z value to be assigned correctly
    setFlag(QGraphicsItem::ItemIsSelectable, false);

    scale(1.5, 1.5);
}
Beispiel #6
0
/*************************************************************************
  函数名称:SetSpanAngle(int nAngle)
  nAngle:一个跨度角度,坐标系,x方向向右为0度,往逆时针方向角度逐渐变大
  函数作用:设置一个跨度角度,获得不同形状的扇形
 *************************************************************************/
void QElipseItem::SetSpanAngle(int nAngle) //设置跨度角度,要乘16
{
   int nspanAngle = nAngle * 16;
   setSpanAngle(nspanAngle);
}