objectarx 批量倒角

Posted helloqlq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了objectarx 批量倒角相关的知识,希望对你有一定的参考价值。

技术图片

这个插件支持AcDbPolyline的倒角,封闭的和没封闭的都可以。刚开始做的时候,发现倒一个角借助云幽课堂里的代码就可以做,后来做一条从左开始画的非封闭的多段线,发现向上凹和向下凹的角不能同时被倒,代码只能倒向上凹的,向下凹的代码时反着的,后来我把凸度取反,向下凹的又可以倒角了。这时我觉得就行了,后来又出现问题,发现顺时针或逆时针画个半包围的图形时,在顶上的角或者底下的角倒出的角又是反着的。最后是画只有一个角的多段线,根据代码的bug,一个个的写判断条件瞎做出来的。光是if else 我都写了一两百行吧。因为自己不懂凸度,没有深入的去想课堂里学的倒角功能的代码,觉得只要会用,有得抄就可以了,根本不去下功夫理解。也不想在写代码的过程中停下来先学会凸度在做,自己就瞎写,我现在觉得这样是不对的,所谓磨刀不误砍柴功,这些道理知道是知道,但真正做的时候,就做不到了。这里我就不想贴出我写的代码了,主要思路是:
判断要倒角的点所在的两条边的向量,根据终边的向量所处与起边的向量的位置关系,根据向量的x,y值确定它是在哪一个象限的,加入向量vec1是1象限,我就把vec2处于2象限的情况都写倒条件里面去,然后写上凸度,跑程序,画线,看结果这样试出来的。还要考虑90度的情况,判断的时候最好不要用等于去判断,用个误差范围去判断。

把云幽课堂的代码倒一个角的代码拿出来,是.C#语言写的的,但改成C++的也很简单。

/// <summary>
        /// 倒圆角。生成两点,按左右上下序。
        /// </summary>
        /// <param name="vertex">要被倒角的点</param>
        /// <param name="vec1">角两边的向量,向量的起点是vertex</param>
        /// <param name="vec2"></param>
        /// <param name="radius">倒角半径</param>
        /// <returns>生成的点</returns>
        public static Point2d[] Fillet(Point2d vertex,
            Vector2d vec1, Vector2d vec2, double radius)
        {
            var uvec1 = vec1.GetNormal();
            var uvec2 = vec2.GetNormal();
            var vecToCenterUnit = (uvec1 + uvec2).GetNormal();

            var vecToCenter = vecToCenterUnit * radius /
                Math.Sin(Math.Min(vecToCenterUnit.GetAngleTo(uvec1),
                         vecToCenterUnit.GetAngleTo(uvec2)));

            var projVec1 = uvec1 * uvec1.DotProduct(vecToCenter);
            var projVec2 = uvec2 * uvec2.DotProduct(vecToCenter);

            return new[] { vertex + projVec1, vertex + projVec2 }
                .OrderBy(p => p.X)
                .ThenBy(p => p.Y)
                .ToArray();
        }

 凸度的计算:
bulge = tan((CMathUtil::PI() - vec2.angleTo(vec1)) / 4);

最后总结平时自己写的代码 大部分都是东平西凑,没有百度,我根本就做不出来。

以上是关于objectarx 批量倒角的主要内容,如果未能解决你的问题,请参考以下文章

ANSYS apdl怎么让体出现倒角

怎么用objectarx对cad添加菜单栏,求详细步骤

求教大神 我现在想学ARX编译CAD图形,恩。也就是CAD二次开发(一定是用ObjectARX开发环境)

ObjectARX-给cad实体贴图

CAD导角

如何在 Objectarx C# 中将椭圆转换为折线