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 批量倒角的更多相关文章
- 也谈ObjectARX多版本批量编译
也谈ObjectARX多版本批量编译 by edata 2017-12-10 因某些原因,我的电脑系统依旧是windows XP,所以能安装的vs最高版本是vs2010,以下均在vs2010上实现,其 ...
- 再谈VS2010编译更高平台vs2012(v110),vs2015(v140)的objectARX程序
前段时间我贴了一篇vs2010批量编译vc6~vs2008的ARX版本,实际上那一篇是我在研究vs2010编译v110,v140平台的附带收获,正应了那句话,有心栽花花不开,无心插柳柳成荫,因为vs2 ...
- [原创]ObjectARX开发环境搭建之VS2010+ObjectARX2012Wizard+Addin工具条问题修复
目前ObjectARX版本越来越高,也越来越简化开发,如果需要同时开发低版本和高版本的ARX程序,就需要搭建批量编译环境,以满足ARX开发的需要. 批量编译的搭建网络上已经有了很多的教程,基本上都是基 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- SQL:指定名称查不到数据的衍伸~空格 换行符 回车符的批量处理
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 先看看啥情况 复制查询到的数据,粘贴一下看看啥情况 那就批量处理一下~ 就这样 ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- php批量删除
php批量删除可以实现多条或者全部数据一起删除 新建php文件 显示数据库中内容: <table width="100%" border="1" cell ...
- gulp批量打包文件并提取公共文件
gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...
- redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为productID,value 就是具体的customerid集合, ...
随机推荐
- crontab Yii commands 使用方法
基本知识介绍 #crontab -u <-l, -r, -e> -u指定一个用户-l列出某个用户的任务计划-r删除某个用户的任务-e编辑某个用户的任务 cron文件语法与写法 Minute ...
- 114、Java中String类之字符串文本复杂二次拆分
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- iis下发布MVC网站
1.首先检查有没有安装iis,没有的话先安装iis 2. 3.选择应用程序池的时候看有没有asp.net 4.0 如果没有先安装. 首先以管理员身份打开“运行”输入cd C:\Windows\Micr ...
- PyCharm底部控制台console界面开启/取消自动换行
File --> Settings --> Editor --> General --> Console中 勾选右侧第一项Use soft wraps in console(选 ...
- 1_03_MSSQL课程_约束详解
复习: ->创建数据库的SQL:******** create database 数据库名 on ( name=‘’, size=5MB, filegrowth=2MB, filename=&q ...
- 厉害了!SpringBoot是如何动起来的!
程序入口 SpringApplication.run(BeautyApplication.class, args); 执行此方法来加载整个SpringBoot的环境. 1. 从哪儿开始? Spring ...
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- LNMP 常见问题(FAQ)
常见问题(FAQ)常见问题关键词快速索引 我们为什么需要采用LNMP架构?原因不在重复,请看:关于 LNMP一键安装包支持哪些Linux发行版?目前支持CentOS(RadHat).Debian.Ub ...
- ie brower 点击用默认浏览器打开链接
<script> function GetCurrentJumpUrl(){ var eleLink = document.getElementById('adLink'); if(ele ...
- rinetd 进行转发
目前云数据库 Redis 版需要通过 ECS 进行内网连接访问.如果您本地需要通过公网访问云数据库 Redis,可以在 ECS Linux 云服务器中安装 rinetd 进行转发实现. 在云服务器 E ...