Exemplo n.º 1
0
void asciimage::Shape::renderLine(QPainter* painter, int scale, const Style& style) const
{
    Q_ASSERT(type() == Type::LINE);
    Q_ASSERT(points().size() == 2);

    if (scale == 1)
    {
        if (!isStraightLine())
        {
            painter->setRenderHint(QPainter::Antialiasing, true);
        }
        painter->setPen(style.color());
        painter->drawLine(points()[0], points()[1]);
    }
    else
    {
        if (isStraightLine())
        {
            const QRect b = boundingRect();
            painter->setPen(style.color());
            painter->setBrush(style.color());
            painter->drawRect(scaledOuterRect(b, scale));
        }
        else
        {
            painter->setRenderHint(QPainter::Antialiasing, true);
            painter->setPen(QPen(style.color(), scale, Qt::SolidLine, Qt::SquareCap));
            painter->drawLine(p(points()[0], scale), p(points()[1], scale));
        }
    }
}
Exemplo n.º 2
0
void cleanUpPointsInStraightLines( const std::vector<CGPoint> &i_points, std::vector<CGPoint> &o_expath, CGFloat i_error2 )
{
	size_t nbOfPts = i_points.size();
	if ( nbOfPts < 3 )
	{
		o_expath.assign( i_points.begin(), i_points.end() );
		return;
	}
	
	auto current = i_points.begin();
	o_expath.push_back( *current );
	while ( current != i_points.end() )
	{
		size_t remaining = i_points.end() - current;
		if ( remaining < 3 )
		{
			o_expath.push_back( *current );
			++current;
		}
		else
		{
			auto segEnd = current + 3;
			while ( segEnd != i_points.end() and isStraightLine( current, segEnd, i_error2 ) )
			{
				++segEnd;
			}
			current = segEnd;
			--segEnd;	// back track
			o_expath.push_back( *segEnd );
		}
	}
}