目前在研究通过DirectX 或者OpenGL来显示Dwg图纸,一些基本的功能已经完成,但是对于图形填充遇到了一些问题。
DirectX中基本的元素只有三角形,但是Autocad的图形填充可以是任意几何图形,所以我们需要将Autocad的图形填充转换为三角形。
虽然有很多图形计算理论,但是以前没做这一块,决定还是找现有的类库来完成这个过程。
由于Hatch的定义为若干个Loop之间的运算,目前看来是Xor 计算,所以,第一步为确定图块计算的类库。考虑到图块计算基于点线,而结果也是点线,暂时排除了C# 默认的System.Drawing里面的Geometry和WPF 里面的Path类库。而是采用了Clipper(http://angusj.com/delphi/clipper.php#features)。
参考代码如下:
Clipper cpr = new Clipper();
int idx = 0;
foreach (var subitem in item.SubItems) {
var path = new Path();
foreach (var p in subitem.Points) {
path.Add(new IntPoint(p.X, p.Y));
}