2016-09-26 160 views
0

我想绘制带孔的图形。(已解决)poly2tri - 三角形的IsInterior属性 - 正确配置

result I wanna

要做到这一点,我不得不削减身影三角形和一个吸引他们的。

triangulated picture

在这里,我有八个外部三角形和两个室内。我想,我会只取外景,并提请他们像

const int y = 100; 
const int x = 100; 
const int offset = 20; 

IList<PolygonPoint> bounds = new List<PolygonPoint> 
{ 
    new PolygonPoint(0,0), 
    new PolygonPoint(0, y), 
    new PolygonPoint(x, y), 
    new PolygonPoint(x, 0), 
}; 

IList<PolygonPoint> hole = new List<PolygonPoint> 
{ 
    new PolygonPoint(offset, offset), 
    new PolygonPoint(x - offset, offset), 
    new PolygonPoint(offset, y - offset), 
    new PolygonPoint(x - offset, y - offset), 
}; 

Polygon polygon = new Polygon(bounds); // here polygon contains four dots 
polygon.AddHole(new Polygon(hole)); // and here - eight 

P2T.Triangulate(polygon); // here I get ten triangles 

foreach (var triangle in polygon.Triangles.Where(tr => tr.IsInterior)) // <-- problem 
{ 
    // draw 
} 

但在多边形每个三角形有IsInterior ==真。我做错了什么?

P.S.对于PointSet,这个属性在相同情况下总是为false。

+0

每个三角形都在矩形ABCD内部,所以它们都是内部的。你只需要三角形内部/外部的洞。 – jdweng

+0

@jdweng,如果是这样的话,这是一个问题。我没有洞:他们是私人的。 – homk

+0

进行以下更改:polygon.AddHole(new Polygon(hole)); To:多边形孔=新多边形(孔); polygon.AddHole(空穴); – jdweng

回答

2

该死的,这很容易,我想。

我点错了顺序。

它必须

IList<PolygonPoint> hole = new List<PolygonPoint> 
{ 
    new PolygonPoint(offset, offset), 
    new PolygonPoint(offset, y - offset), 
    new PolygonPoint(x - offset, y - offset), 
    new PolygonPoint(x - offset, offset), 
}; 

除了所有这部分工作得很好,并且结果是这样的:

correct triangles

感谢所有在这里!