agg::conv_contour函数auto_detect_orientation作用

       正如名称所言:自动检测方向,什么方向,可能很多人不了解,通过AGG邮件了解到几点:扩展轮廓线跟图形的绘制方向有关(也就是move_to,line_to,构成的图形的顺时针,还是逆时针)。如下的两个例子,一个是顺时针绘制矩形,一个是逆时针绘制矩形,然后扩展轮廓线。

例子1逆时针

   agg::path_storage ps;

   ps.move_to(395.5,200.5);

   ps.line_to(295.5,200.5);

   ps.line_to(295.5,210.5);

   ps.line_to(395.5,210.5);

ps.close_polygon();

agg::conv_contour<agg::path_storage> contour(ps);

//contour.auto_detect_orientation(true);

contour.width(m_slider1.value());//获取滑动条的值

agg::conv_stroke<agg::conv_contour<agg::path_storage> >stroke(contour);

 ras.add_path(stroke);

 

例子2 顺时针

    agg::path_storage ps;

    ps.move_to(395.5,200.5);

    ps.line_to(395.5,210.5);

    ps.line_to(295.5,210.5);

ps.line_to(295.5,200.5);

    agg::conv_contour<agg::path_storage>contour(ps);

    contour.width(m_slider1.value());

    agg::conv_stroke<agg::conv_contour<agg::path_storage>> stroke(contour);

ras.add_path(stroke);

 

结果分析:第二个例子顺利的进行扩展线的放大或缩小,但是第一个例子刚好相反,两个例子之间的区别就是图形绘制的方向不同而已。所以为了解决这种问题,才引入了contour.auto_detect_orientation函数。

把第一个例子的上面函数去掉注释,就可以按照正常的逻辑进行缩放轮廓线。


你可能感兴趣的:(agg,contour,conv)