• 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);

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

  • 相关阅读:
    人类登月不可或缺 大型机半个世纪发展史
    宽带上网知识(如何进行上网流程配置,路由器上网配置)
    团队项目第二阶段——第二天
    用户体验评价之QQ浏览器
    团队项目第二阶段——第一天
    第十四周学习进度总结
    《梦断代码》阅读笔记02
    第十三周学习进度总结
    第一阶段意见评论
    第十二周学习进度总结
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/12307614.html
Copyright © 2020-2023  润新知