首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >裁剪圆和多边形并生成CAD绘图

裁剪圆和多边形并生成CAD绘图
EN

Computer Graphics用户
提问于 2017-12-16 18:54:29
回答 3查看 573关注 0票数 2

我正在使用C#和netdxf库(https://github.com/haplokuon/netDxf)开发一个CAD绘图生成器

该应用程序首先对多边形执行布尔运算(特别是联合和减法),并在.dxf文件上绘制结果路径。

我用安格斯·约翰逊的快船库(快船-一个开源的免费的多边形裁剪库( angusj.com ))来剪裁

对于多边形,一切都很好,问题是当我需要裁剪圆圈和多边形时,结果是一个大的点列表(表示要在dxf上绘制的图形的路径)。

所以路径的弯曲部分是由很小的部分组成的,这对于以后使用的CAM软件来说是个大问题。

下面是这样一个图像(裁剪圆和多边形的结果)。灰色部分充满了细小的线段。

问题-

1)如何使用点列表将这些微小的线段转换为圆圈/圆弧?

2)我是否可以采取完全不同的方法来避免这个问题?

谢谢!

EN

回答 3

Computer Graphics用户

发布于 2017-12-17 21:59:40

我不知道您使用的裁剪库是如何返回剪裁对象的,但是如果我理解您的问题,您想要一种表示不需要太多内存的圆圈的方法?如果你只使用完美的圆(而不是椭圆),你可以将每个圆弧段简单地表示为一个起点、一个半径和一个开始/停止角。

这是了解裁剪库返回的内容的一部分。如果它返回一个点链作为每个裁剪弧段的单独对象,并且您已经知道圆的半径和中心(从裁剪前开始),您可以获取返回链中的第一个和最后一个点,并计算每个角。

代码语言:javascript
运行
复制
atan2(x - origin.x, y - origin.y)

然后,当你想画的东西,你可以写和算法跟踪弧从开始到停止的角度。如果您想做进一步的裁剪,您可以重新创建弧线作为一个点链。

注意返回的部分是顺时针方向还是逆时针方向。

票数 1
EN

Computer Graphics用户

发布于 2023-03-25 15:35:00

如果Clipper具有处理标记边缘的功能(例如,您可以将一些标签关联到输入多边形的每个边缘,并在裁剪后检索这些标签),那么您可以使用与单个原始原语(您的圆形弧)相关的标签标记这些边缘。然后,通过查看输出中的标签,您可以重建修改后的弧,并从端点确定新的角度范围。请注意,单个弧可能在几个弧中分解。

如果只有顶点可以被标记,那么您可以进行类似的操作,使用只有一个顶点和正确标记的边,并从这些边的另一边获取弧端点。

如果没有标签是可能的,你仍然可以执行一个几何匹配之间的原始扁平弧和轮廓产生的快船。原则上,严格相等的比较应该有效,因为Clipper没有理由改变原始顶点的坐标。为了提高匹配效率,scanline法比穷举法要好得多。

请注意,在您的示例中,弧线的离散化似乎太好了。一个简单的规则是调整离散度,使和弦和弧线之间的距离不超过给定的最大距离。

现在,在Clipper计算了线和弧之间的近似交点(或两个弧之间)之后,如果您知道原始原语的身份,您可以使用解析公式精确地重新计算这些交叉点,并重建正确的弧/线序列。由于基元可以在多个点上相交,所以使用与剪刀点最近的交点。

票数 1
EN

Computer Graphics用户

发布于 2018-08-17 08:22:36

您不能使用“剪刀”来期望分析结果。圆弧将由线段组成。也就是说,您知道您的布尔操作数,所以应该可以并且相当容易地将所有线段映射回它们的原点操作数,并自己提取弧。

票数 0
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/5996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档