找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1751|回复: 1

[分享] AutoCAD 3点创建圆弧

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-12 15:53:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
原文地址

已N久没有写点代码上来,朋友们是否已经忘记了我,嘿嘿,公布下3点创建圆弧的代码。   C#+AutoCAD中圆弧没有直接3点创建圆弧的构造函数,只有个由圆心、半径、起始角度和终止角度创建圆弧的构造函数.
  之前小搜索了下网络,有朋友提出通过计算的方式来画出来。但是费时费力,况且Geometry已经提供了函数。so,我们为什么不利用呢!!
  利用CircularArc3d这个类,有3点创建的构造函数,3点传入创建就是了,然后得到它的一些属性传入到Arc的构造函数中,但是有几个问题要注意:
  1.StartAngle和EndAngle并不是起终点的角度,StartAngle可以认为是个参考角,默认是0,如果将圆弧绕圆心旋转10度,那这个StartAngle就是10度,EndAngle始终不变,是圆弧的圆心角。
  2.得到起始角度和终止角度的方法:
   创建圆弧起始点到圆心的Vector2d,然后读取它的Angle就是起始角度了,同样方法得到终止角度。
  3.注意上面得到了起始角度和终止角度可能是反的,并不能保证中间那点正好在创建出的圆弧上,因为可能是优弧,也可能是劣弧。方法就是判断下中间的那点的角度,方法同上面的2中列的。然后视情况是否互换起始角度和终止角度。接下来,不如我们散代码~~~~~

  1. /// <summary>
  2.         ///3点创建圆弧到任意空间
  3.         /// </summary>
  4.         public static ObjectId AddArcToSomeSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, string LayoutName,Point3d PtStart, Point3d PtMid, Point3d PtEnd)
  5.         {
  6.             CircularArc3d ent = new CircularArc3d(PtStart, PtMid, PtEnd);
  7.             Vector2d vecStart = new Vector2d(ent.StartPoint.X - ent.Center.X, ent.StartPoint.Y - ent.Center.Y);
  8.             Vector2d vecEnd = new Vector2d(ent.EndPoint.X - ent.Center.X, ent.EndPoint.Y - ent.Center.Y);
  9.             //这个时候可能点并不在想要画的那个弧上,假设是优弧,可能画出来的时劣弧。就要判断下是否在弧上。
  10.            //方法就是判断角度是否在两个角度之间
  11.             Vector2d vecMid = new Vector2d(PtMid.X - ent.Center.X, PtMid.Y - ent.Center.Y);
  12.             double angMax=vecStart.Angle;
  13.             double angMin=vecEnd.Angle;
  14.             double angMid=vecMid.Angle;
  15.             double temp;
  16.             if(angMax<angMin)
  17.             {
  18.                 temp=angMin;
  19.                 angMin=angMax;
  20.                 angMax=temp;
  21.             }
  22.             ObjectId entId;
  23.             if (angMid > angMin && angMid < angMax)
  24.             {
  25.                 entId = CurrentDatabase.AddArcToSomeSpace(LayoutName, ent.Center, ent.Radius, angMin, angMax);
  26.             }
  27.             else
  28.             {
  29.                 entId = CurrentDatabase.AddArcToSomeSpace(LayoutName, ent.Center, ent.Radius, angMax, angMin);
  30.             }
  31.             return entId;
  32.         }
  33.         /// <summary>
  34.         ///3点创建圆弧到模型空间
  35.         /// </summary>
  36.         public static ObjectId AddArcToModelSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, Point3d PtStart, Point3d PtMid, Point3d PtEnd)
  37.         {
  38.             return CurrentDatabase.AddArcToSomeSpace("Model", PtStart, PtMid, PtEnd);
  39.         }
  40.         // 由圆心、半径、起始角度和终止角度创建圆弧的函数.
  41.         public static ObjectId AddArcToSomeSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, string LayoutName, Point3d cenPt, double radius, double startAng, double endAng)
  42.         {
  43.             Arc ent = new Arc(cenPt, radius, startAng, endAng);
  44.             ObjectId entId = ent.AddToSomeSpace(LayoutName);
  45.             return entId;
  46.         }
  47.         public static ObjectId AddArcToModelSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, Point3d cenPt, double radius, double startAng, double endAng)
  48.         {
  49.             return CurrentDatabase.AddArcToSomeSpace("Model",cenPt, radius, startAng, endAng);
  50.         }




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2015-2-4 00:59:44 | 显示全部楼层
我是菜鸟一个,这个程序怎么运行呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:28 , Processed in 0.223576 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表