コード例 #1
0
void CEllipseContainer::Render(agg::rendering_buffer &buffer)
{

  if (!m_vec.size())
  {
    return;
  }
  agg::pixfmt_bgr24 pixfmt(buffer);


  typedef agg::renderer_base<agg::pixfmt_bgr24> renbase;
  typedef agg::renderer_scanline_aa_solid<renbase> render_solid;

  renbase rbase(pixfmt);
  render_solid renderSolid(rbase);
  rbase.clear(agg::rgba8(255, 255, 255));

  agg::rasterizer_scanline_aa<> ras;

  for (EllipseIterator first = m_vec.begin(); first != m_vec.end(); ++first)
  {
    ras.add_path(*(*first));
  }

  agg::path_storage line;
  CEllipseCtrl *ell = m_vec[0];
  line.move_to(ell->GetBase().m_x, ell->GetBase().m_y);

  for(unsigned int i = 1; i < m_vec.size(); ++i)
  {
    ell = m_vec[i];
    line.line_to(ell->GetBase().m_x, ell->GetBase().m_y);
  }
  agg::conv_stroke<agg::path_storage> strokeLine(line);
  strokeLine.width(1.0);

  ras.add_path(strokeLine);

  renderSolid.color(agg::rgba8(255, 0, 0));

  agg::scanline_u8 sl;

  agg::render_scanlines(ras, sl, renderSolid);

}
コード例 #2
0
ファイル: GLContext.hpp プロジェクト: jtyot/morse-pc
 void                strokeLine      (const Vec2f& p0, const Vec2f& p1, U32 abgr) { strokeLine(Vec4f(p0, 0.0f, 1.0f), Vec4f(p1, 0.0f, 1.0f), abgr); }
コード例 #3
0
void QCosmeticStroker::setup()
{
    blend = state->penData.blend;
    if (state->clip && state->clip->enabled && state->clip->hasRectClip && !state->clip->clipRect.isEmpty()) {
        clip &= state->clip->clipRect;
        blend = state->penData.unclipped_blend;
    }

    int strokeSelection = 0;
    if (blend == state->penData.unclipped_blend
        && state->penData.type == QSpanData::Solid
        && (state->penData.rasterBuffer->format == QImage::Format_ARGB32_Premultiplied
            || state->penData.rasterBuffer->format == QImage::Format_RGB32)
        && state->compositionMode() == QPainter::CompositionMode_SourceOver)
        strokeSelection |= FastDraw;

    if (state->renderHints & QPainter::Antialiasing)
        strokeSelection |= AntiAliased;

    const QVector<qreal> &penPattern = state->lastPen.dashPattern();
    if (penPattern.isEmpty()) {
        Q_ASSERT(!pattern && !reversePattern);
        pattern = 0;
        reversePattern = 0;
        patternLength = 0;
        patternSize = 0;
    } else {
        pattern = (int *)malloc(penPattern.size()*sizeof(int));
        reversePattern = (int *)malloc(penPattern.size()*sizeof(int));
        patternSize = penPattern.size();

        patternLength = 0;
        for (int i = 0; i < patternSize; ++i) {
            patternLength += (int) qMax(1. , penPattern.at(i)*64.);
            pattern[i] = patternLength;
        }
        patternLength = 0;
        for (int i = 0; i < patternSize; ++i) {
            patternLength += (int) qMax(1., penPattern.at(patternSize - 1 - i)*64.);
            reversePattern[i] = patternLength;
        }
        strokeSelection |= Dashed;
//        qDebug() << "setup: size=" << patternSize << "length=" << patternLength/64.;
    }

    stroke = strokeLine(strokeSelection);

    qreal width = state->lastPen.widthF();
    if (width == 0)
        opacity = 256;
    else if (state->lastPen.isCosmetic())
        opacity = (int) 256*width;
    else
        opacity = (int) 256*width*state->txscale;
    opacity = qBound(0, opacity, 256);

    drawCaps = state->lastPen.capStyle() != Qt::FlatCap;

    if (strokeSelection & FastDraw) {
        color = INTERPOLATE_PIXEL_256(state->penData.solid.color, opacity, 0, 0);
        QRasterBuffer *buffer = state->penData.rasterBuffer;
        pixels = (uint *)buffer->buffer();
        ppl = buffer->bytesPerLine()>>2;
    }