zoukankan      html  css  js  c++  java
  • 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);

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

  • 相关阅读:
    ModelState 错误信息输出
    c# 导入导出excel方法封装
    签名时出错: 未在路径 C:Program Files (x86)Microsoft SDKsWindowsv7.0Ain
    win 10 升级远程连接服务器 要求的函数不受支持
    请求被中止: 未能创建 SSL/TLS 安全通道
    访问iis 出现500.19错误
    ubuntu下交叉编译海思平台下的x264/x265
    C++编程规范
    C++入门--菱形继承与虚继承
    C++入门 --- 纯虚函数与抽象类
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/12307614.html
Copyright © 2011-2022 走看看