加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(原创)C#-AutoCAD 3点创建圆弧

(2012-04-29 22:25:25)
标签:

杂谈

分类: C#-AutoCAD
  已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中列的。然后视情况是否互换起始角度和终止角度。接下来,不如我们散代码~~~~~
        /// <summary>
        ///3点创建圆弧到任意空间
        /// </summary>
        public static ObjectId AddArcToSomeSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, string LayoutName,Point3d PtStart, Point3d PtMid, Point3d PtEnd)
        {
            CircularArc3d ent = new CircularArc3d(PtStart, PtMid, PtEnd);
            Vector2d vecStart = new Vector2d(ent.StartPoint.X - ent.Center.X, ent.StartPoint.Y - ent.Center.Y);
            Vector2d vecEnd = new Vector2d(ent.EndPoint.X - ent.Center.X, ent.EndPoint.Y - ent.Center.Y);
            //这个时候可能点并不在想要画的那个弧上,假设是优弧,可能画出来的时劣弧。就要判断下是否在弧上。
           //方法就是判断角度是否在两个角度之间
            Vector2d vecMid = new Vector2d(PtMid.X - ent.Center.X, PtMid.Y - ent.Center.Y);
            double angMax=vecStart.Angle;
            double angMin=vecEnd.Angle;
            double angMid=vecMid.Angle;
            double temp;
            if(angMax<angMin)
            {
                temp=angMin;
                angMin=angMax;
                angMax=temp;
            }
            ObjectId entId;
            if (angMid > angMin && angMid < angMax)
            {
                entId = CurrentDatabase.AddArcToSomeSpace(LayoutName, ent.Center, ent.Radius, angMin, angMax);
            }
            else
            {
                entId = CurrentDatabase.AddArcToSomeSpace(LayoutName, ent.Center, ent.Radius, angMax, angMin);
            }
            return entId;
        }
        /// <summary>
        ///3点创建圆弧到模型空间
        /// </summary>
        public static ObjectId AddArcToModelSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, Point3d PtStart, Point3d PtMid, Point3d PtEnd)
        {
            return CurrentDatabase.AddArcToSomeSpace("Model", PtStart, PtMid, PtEnd);
        }


        // 由圆心、半径、起始角度和终止角度创建圆弧的函数.
        public static ObjectId AddArcToSomeSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, string LayoutName, Point3d cenPt, double radius, double startAng, double endAng)
        {
            Arc ent = new Arc(cenPt, radius, startAng, endAng);
            ObjectId entId = ent.AddToSomeSpace(LayoutName);
            return entId;
        }
        public static ObjectId AddArcToModelSpace(this Autodesk.AutoCAD.DatabaseServices.Database db, Point3d cenPt, double radius, double startAng, double endAng)
        {
            return CurrentDatabase.AddArcToSomeSpace("Model",cenPt, radius, startAng, endAng);
        }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有