函数签名

public DBObjectCollection GetOffsetCurves(double offsetDist)

创建偏移副本,可实现偏移,或等距离外扩或收缩。

红圆是原图,黄色圆圈是偏移10和20,绿色圆是偏移-10。这些圆的圆心相同,半径依次相差10。
正偏移,向圆外,即半径变大;负方向半径变小。

在这里插入图片描述

圆弧

在这里插入图片描述
弧和圆类似。

水平直线(起点在左)

红色线段是原始线段,起点在左,终点在右。黄色线段是偏移10和20,绿色线段是偏移-10。
正偏移,向线段上偏移;负偏移,线段下。
射线X起点和线段起点相同,方向也相同。逆时针旋转X180度,扫到的点在线段上;扫不到的,在线段下。
在这里插入图片描述

水平直线(起点在右)

红色线段是原始线段,起点在右,终点在左。黄色线段是偏移10和20,绿色线段是偏移-10。
正偏移,向线段上偏移;负偏移,线段下。
在这里插入图片描述

多义线矩形(节点顺时针)

和线段的方向相反。
正偏向,向内;负偏移,向外。和圆相反。
在这里插入图片描述

多义线(节点逆时针)

和线段的方向相反。
正偏向,向外;负偏移,向内。和圆相同。
在这里插入图片描述

包括圆弧的逆时针多义线段

方向和只包括直线的逆时针多义线完全相同。
在这里插入图片描述
在这里插入图片描述

比较少见的多义线

在这里插入图片描述
在这里插入图片描述

测试用代码

        [CommandMethod("Test")]
        public void Test()
        {
            CSelAEntity selDst = new CSelAEntity("请选择圆弧。");
            selDst.AddCurve();
            var prDst = selDst.Sel();
            if (prDst.Status != PromptStatus.OK)
            {
                return ;
            }
            var db = CadBase.GetDefaultDatabase();
            int x = 0, y = 10,x2=0,y2=0;
            DBObjectCollection obs;
            using (var tr = db.TransactionManager.StartTransaction())
            {
                Curve curve = tr.GetObject(prDst.ObjectId, OpenMode.ForWrite) as Curve;
                obs = curve.GetOffsetCurves(y);               
                tr.Commit();
            }
            foreach (Entity e in obs)
            {
                e.ColorIndex = 2;
                CEntHelp.AddEnity(e);
            }
        }

扩展阅读

我想对大家说的话
亲士CAD工具箱:支持AutoCad2013及以上
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
活到老,学到老。明朝中后期,大约50%的进士能当上堂官(副部及更高);能当上堂官的举人只有十余人。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐