这个插件支持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 批量倒角的更多相关文章

  1. 也谈ObjectARX多版本批量编译

    也谈ObjectARX多版本批量编译 by edata 2017-12-10 因某些原因,我的电脑系统依旧是windows XP,所以能安装的vs最高版本是vs2010,以下均在vs2010上实现,其 ...

  2. 再谈VS2010编译更高平台vs2012(v110),vs2015(v140)的objectARX程序

    前段时间我贴了一篇vs2010批量编译vc6~vs2008的ARX版本,实际上那一篇是我在研究vs2010编译v110,v140平台的附带收获,正应了那句话,有心栽花花不开,无心插柳柳成荫,因为vs2 ...

  3. [原创]ObjectARX开发环境搭建之VS2010+ObjectARX2012Wizard+Addin工具条问题修复

    目前ObjectARX版本越来越高,也越来越简化开发,如果需要同时开发低版本和高版本的ARX程序,就需要搭建批量编译环境,以满足ARX开发的需要. 批量编译的搭建网络上已经有了很多的教程,基本上都是基 ...

  4. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  5. SQL:指定名称查不到数据的衍伸~空格 换行符 回车符的批量处理

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 先看看啥情况 复制查询到的数据,粘贴一下看看啥情况 那就批量处理一下~ 就这样 ...

  6. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  7. php批量删除

    php批量删除可以实现多条或者全部数据一起删除 新建php文件 显示数据库中内容: <table width="100%" border="1" cell ...

  8. gulp批量打包文件并提取公共文件

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

  9. redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作

    前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为productID,value 就是具体的customerid集合, ...

随机推荐

  1. C语言调试器GDB和LLDB的使用方法

    调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb te ...

  2. 子组件props接受父组件传递的值 能修改吗?

    vue2.0 子组件props接受父组件传递的值,能不能修改的问题整理 父组件代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  3. LeetCode 349,350 数组的交集

    LeetCode 349: package com.lt.datastructure.Set; import java.util.ArrayList; import java.util.LinkedH ...

  4. S7-300 与TP900 组态 棒图 量表 滚动条 滚动条设置的值通过IO输出域显示出来

    切换编程语言 注意 一定要 先选中 某一个组织块 例如 OB1 然后单击 菜单 编辑 切换编程语言 组态 300 PLC 的CPU 点击 SIMENSE LOGO 查看 循环 中断 OB35 可以 在 ...

  5. 学习进度-16 python爬虫

    爬虫是一个程序,这个程序的目的就是为了抓取万维网信息资源,比如你日常使用的谷歌等搜索引擎,搜索结果就全都依赖爬虫来定时获取 从百度可以看出来 爬虫与python关系很紧密, 爬虫的目标对象也很丰富,不 ...

  6. vue2 Excel导出数据 js-xlsx的使用

    vue2 Excel导出数据 js-xlsx的使用 https://www.jianshu.com/p/ea115a8e9107 小世界最温暖 关注 2018.11.19 16:08 字数 280 阅 ...

  7. SystemVerilog基本语法总结(下)

    2018年IC设计企业笔试题解析-(验证方向) 1.请简述:定宽数组,动态数组,关联数组,队列四种数据类型的各自特点.解析:(1)定宽数组:其宽度在声明的时候就指定了,故其宽度在编译时就确定了.(2) ...

  8. Lognormal distribution 对数正态分布

    转载:https://blog.csdn.net/donggui8650/article/details/101556041 在概率论中,对数正态分布是一种连续概率分布,其随机变量的对数服从正态分布. ...

  9. LIS问题

    LIS定义LIS(Longest Increasing Subsequence)最长上升子序列 .一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的. ...

  10. Python运行目录或压缩文件

    如果你在你的工程文件根目录下放一个__main__.py文件,你就可以使用根目录运行整个程序. 你的工程像这样 ex. app/ |-test.py |-test2.py |-__main__.py ...