- UID
- 14
- 积分
- 8264
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-4
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
原文地址
已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);
- }
|
|