乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 110|回复: 7

圆弧标注程序 源码(JIG)

[复制链接]

3

主题

31

帖子

5

银币

初来乍到

Rank: 1

铜币
43
发表于 2015-3-26 12:43:00 | 显示全部楼层 |阅读模式
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk..DatabaseServices;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using Autodesk.AutoCAD.Colors;
  9. using Autodesk.AutoCAD.Runtime;
  10. using Autodesk.AutoCAD.ApplicationServices;
  11. using System.ComponentModel;
  12. using System.Data;
  13. using System.Data.OleDb;
  14. using System.Text.RegularExpressions;
  15. using System.Collections;
  16. namespace YFBZ
  17. {
  18.     public class Class1
  19.     {
  20.         const int WM_RBUTTONDOWN = 516;
  21.         int flag = 0;
  22.         private void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
  23.         {
  24.             if (e.Message.message == WM_RBUTTONDOWN)
  25.             {
  26.                 flag = 1;
  27.             }
  28.         }
  29.         [CommandMethod("yfzj")]
  30.         public void yfbzj()
  31.         {
  32.             Database db = HostApplicationServices.WorkingDatabase;
  33.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  34.             Editor ed = doc.Editor;
  35.         handle01:
  36.             PromptEntityOptions options = new PromptEntityOptions(" \n请选择圆弧");
  37.             options.SetRejectMessage("\n所选择实体不是圆弧,请重新选择");
  38.             options.AddAllowedClass(typeof(Arc), true);
  39.             PromptEntityResult per = ed.GetEntity(options);
  40.             ObjectId arced;
  41.             if (per.Status == PromptStatus.Cancel)
  42.             {
  43.                 return;
  44.             }
  45.             if (per.Status == PromptStatus.OK)
  46.             {
  47.                 arced = per.ObjectId;
  48.             }
  49.             else
  50.             {
  51.                 arced = per.ObjectId;
  52.                 return;
  53.             }
  54.             using (DocumentLock acLock = doc.LockDocument())
  55.             {
  56.                 using (Transaction tran = db.TransactionManager.StartOpenCloseTransaction())
  57.                 {
  58.                     Arc arc = tran.GetObject(arced, OpenMode.ForRead) as Arc;
  59.                     Point3d pt1 = arc.StartPoint;
  60.                     Point3d pt2 = arc.EndPoint;
  61.                     Point3d cen = arc.Center;
  62.                     Line line1 = new Line(cen, pt1);
  63.                     Line line2 = new Line(cen, pt2);
  64.                     line1.ColorIndex = 5;
  65.                     line2.ColorIndex = 5;
  66.                     double R = arc.Radius;
  67.                     double Length = arc.Length;
  68.                     double l = arc.GetDistanceAtParameter(Length / 2);
  69.                     Point3d pt = arc.GetPointAtDist(Length / 2);
  70.                     double cenRo = Math.Abs(arc.StartAngle - arc.EndAngle);
  71.                     double BottomRo = (Math.PI - cenRo) / 2;
  72.                     double xianLength = Math.Sqrt((pt1.X - pt2.X) * (pt1.X - pt2.X) + (pt1.Y - pt2.Y) * (pt1.Y - pt2.Y));
  73.                     double T = xianLength / 2 / Math.Sin(BottomRo);
  74.                     Point3d pt3 = xTextStyleTools.midPoint(cen, pt);
  75.                     db.AddToModelSpace(line1);
  76.                     db.AddToModelSpace(line2);
  77.                     for (; ; )
  78.                     {
  79.                         Point3d point1 = pt3;
  80.                         DBText text1 = new DBText();
  81.                         text1.TextString="R = "+R.ToString("0.000");
  82.                         ObjectId text1Id = db.AddToModelSpace(text1);
  83.                         DBText text2 = new DBText();
  84.                         //text1.Height = 3;
  85.                         text2.TextString="K = "+ Length.ToString("0.000");
  86.                         //text2.Height = 3;
  87.                         ObjectId text2Id = db.AddToModelSpace(text2);
  88.                         DBText text3 = new DBText();
  89.                         text3.TextString = "α = "+ xTextStyleTools.DFM(cenRo);
  90.                         ObjectId text3Id = db.AddToModelSpace(text3);
  91.                         DBText text4 = new DBText();
  92.                         text4.TextString = "T = " + T.ToString("0.000");
  93.                         ObjectId text4Id = db.AddToModelSpace(text4);
  94.                         YFBZ.EntYFJip pointBz = new YFBZ.EntYFJip(text1Id, text2Id, text3Id,text4Id, point1);
  95.                         PromptResult resJip = ed.Drag(pointBz);
  96.                         if (resJip.Status == PromptStatus.Cancel)
  97.                         {
  98.                             using (Transaction tr = db.TransactionManager.StartTransaction())
  99.                             {
  100.                                 text1 = (DBText)tr.GetObject(pointBz.m_text1, OpenMode.ForWrite);
  101.                                 text1.Erase();
  102.                                 text2 = (DBText)tr.GetObject(pointBz.m_text2, OpenMode.ForWrite);
  103.                                 text2.Erase();
  104.                                 text3 = (DBText)tr.GetObject(pointBz.m_text3, OpenMode.ForWrite);
  105.                                 text3.Erase();
  106.                                 text4 = (DBText)tr.GetObject(pointBz.m_text4, OpenMode.ForWrite);
  107.                                 text4.Erase();
  108.                                 tr.Commit();
  109.                             }
  110.                             break;
  111.                         }
  112.                         Autodesk.AutoCAD.ApplicationServices.Application.PreTranslateMessage += new PreTranslateMessageEventHandler(Application_PreTranslateMessage);
  113.                         if (flag == 1)
  114.                         {
  115.                             using (Transaction tr = db.TransactionManager.StartTransaction())
  116.                             {
  117.                                 text1 = (DBText)tr.GetObject(pointBz.m_text1, OpenMode.ForWrite);
  118.                                 text1.Erase();
  119.                                 text2 = (DBText)tr.GetObject(pointBz.m_text2, OpenMode.ForWrite);
  120.                                 text2.Erase();
  121.                                 text3 = (DBText)tr.GetObject(pointBz.m_text3, OpenMode.ForWrite);
  122.                                 text3.Erase();
  123.                                 text4 = (DBText)tr.GetObject(pointBz.m_text4, OpenMode.ForWrite);
  124.                                 text4.Erase();
  125.                                 tr.Commit();
  126.                             }
  127.                             break;
  128.                         }
  129.                         if (resJip.Status == PromptStatus.OK)
  130.                         {
  131.                             db.AddToModelSpace(pointBz.GetEntity());
  132.                             flag = 0;
  133.                             goto  handle01;
  134.                         }
  135.                     }
  136.                     flag = 0;
  137.                     tran.Commit();
  138.                 }
  139.             }
  140.         }
  141.     }
  142. }
  143. using System;
  144. using System.Collections.Generic;
  145. using System.Linq;
  146. using System.Text;
  147. using Autodesk.AutoCAD.EditorInput;
  148. using Autodesk.AutoCAD.Geometry;
  149. using Autodesk.AutoCAD.DatabaseServices;namespace YFBZ
  150. {
  151.     public class EntYFJip : EntityJig
  152.     {
  153.         private Point2d[] m_pts = new Point2d[3];
  154.         private Point3d m_peakPt;
  155.         private double length1, length2, length,length3,length4;
  156.         private Point3d firstPoint;
  157.         private Point3d m_textPt1;
  158.         private Point3d m_textPt2;
  159.         private Point3d m_textPt3;
  160.         private Point3d m_textPt4;
  161.         private Matrix3d m_mt = Matrix3d.Identity;
  162.         public ObjectId m_text1 = ObjectId.Null;
  163.         public ObjectId m_text2 = ObjectId.Null;
  164.         public ObjectId m_text3 = ObjectId.Null;
  165.         public ObjectId m_text4 = ObjectId.Null;
  166.         public EntYFJip(ObjectId text1, ObjectId text2, ObjectId text3, ObjectId text4, Point3d Point1)
  167.             : base(new Polyline())
  168.         {
  169.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  170.             m_mt = ed.CurrentUserCoordinateSystem;
  171.             //初始化引线
  172.             ((Polyline)Entity).AddVertexAt(0, Point2d.Origin, 0.0, 0.0, 0.0);
  173.             ((Polyline)Entity).AddVertexAt(1, Point2d.Origin, 0.0, 0.4, 0.4);
  174.             ((Polyline)Entity).AddVertexAt(2, Point2d.Origin, 0.0, 0.4, 0.4);
  175.             //参数传递
  176.             firstPoint = Point1;
  177.             m_text1 = text1;
  178.             m_text2 = text2;
  179.             m_text3 = text3;
  180.             m_text4 = text4;
  181.         }
  182.         protected override bool Update()
  183.         {
  184.             //throw new NotImplementedException();
  185.             Database db = HostApplicationServices.WorkingDatabase;
  186.             ((Polyline)Entity).SetPointAt(0, m_pts[0]);
  187.             ((Polyline)Entity).SetPointAt(1, m_pts[1]);
  188.             ((Polyline)Entity).SetPointAt(2, m_pts[2]);
  189.             ((Polyline)Entity).Normal = Vector3d.ZAxis;
  190.             ((Polyline)Entity).Elevation = 0.0;
  191.             //((Polyline)Entity).ConstantWidth = 0.4;
  192.             //((Polyline)Entity).TransformBy(m_mt);
  193.             using (Transaction tr = db.TransactionManager.StartTransaction())
  194.             {
  195.                 DBText dtext1 = (DBText)tr.GetObject(m_text1, OpenMode.ForWrite);
  196.                 dtext1.Position = m_textPt1;
  197.                 dtext1.Height = 3;
  198.                 dtext1.WidthFactor = 0.8;
  199.                 dtext1.ColorIndex = 80;
  200.                 //dtext1.TextString = "X=" + m_pts[0].Y.ToString("0.000");
  201.                 length1 = Autodesk.AutoCAD.Internal.Utils.GetTextExtents(m_text1, dtext1.TextString, 2.4).X;
  202.                 DBText dtext2 = (DBText)tr.GetObject(m_text2, OpenMode.ForWrite);
  203.                 dtext2.Position = m_textPt2;
  204.                 dtext2.Height = 3;
  205.                 dtext2.WidthFactor = 0.8;
  206.                 dtext2.ColorIndex = 80;
  207.                 //dtext2.TextString = "Y=" + m_pts[0].X.ToString("0.000");
  208.                 length2 = Autodesk.AutoCAD.Internal.Utils.GetTextExtents(m_text2, dtext2.TextString, 2.4).X;
  209.                 DBText dtext3 = (DBText)tr.GetObject(m_text3, OpenMode.ForWrite);
  210.                 dtext3.Position = m_textPt3;
  211.                 dtext3.Height = 3;
  212.                 dtext3.ColorIndex = 80;
  213.                 dtext3.WidthFactor = 0.8;
  214.                 length3 = Autodesk.AutoCAD.Internal.Utils.GetTextExtents(m_text3, dtext3.TextString, 2.4).X;
  215.                 DBText dtext4 = (DBText)tr.GetObject(m_text4, OpenMode.ForWrite);
  216.                 dtext4.Position = m_textPt4;
  217.                 dtext4.Height = 3;
  218.                 dtext4.ColorIndex = 80;
  219.                 dtext4.WidthFactor = 0.8;
  220.                 length4 = Autodesk.AutoCAD.Internal.Utils.GetTextExtents(m_text4, dtext4.TextString, 2.4).X;
  221.                 if (length1 >= length2)
  222.                 {
  223.                     length = length1;
  224.                 }
  225.                 else
  226.                 {
  227.                     length = length2;
  228.                 }
  229.                 if (length = 0 && curPt.Y - firstPoint.Y >= 0) || (curPt.X - firstPoint.X >= 0 && curPt.Y - firstPoint.Y
  230.         /// 获取与定点指定角度与距离的点
  231.         ///
  232.         /// 多段线对象
  233.         public static Point3d polarPoint(this Point3d point, double angle, double dist)
  234.         {
  235.             return new Point3d(point.X + dist * Math.Cos(angle), point.Y + dist * Math.Sin(angle), point.Z);
  236.         }
  237.         ///
  238.         /// 弧度转度分秒
  239.         ///
  240.         /// 弧度数组
  241.         public static string DFM(double Alpha)
  242.         {
  243.             string dfm;
  244.             dfm = "0.00";
  245.             double t = 180.0 * Alpha / 3.1415926;
  246.             int d = (int)t;
  247.             int m = (int)((t - d) * 60);
  248.             int s = (int)((t - d - m / 60.0) * 3600);
  249.             dfm = d.ToString() + "o" + m.ToString() + "\'" + s.ToString() + """;
  250.             return dfm;
  251.         }
  252.         ///
  253.         /// 获取两点直线中点
  254.         ///
  255.         /// 多段线对象
  256.         public static Point3d midPoint(Point3d point1, Point3d point2)
  257.         {
  258.             return new Point3d((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2, (point1.Z + point2.Z) / 2);
  259.         }
  260.     }
  261. }

z2gonco3b5w.gif

z2gonco3b5w.gif

回复

使用道具 举报

3

主题

31

帖子

5

银币

初来乍到

Rank: 1

铜币
43
发表于 2015-3-28 16:56:00 | 显示全部楼层
自己顶一下
回复

使用道具 举报

110

主题

324

帖子

10

银币

中流砥柱

Rank: 25

铜币
764
发表于 2015-4-28 16:25:00 | 显示全部楼层
学习,谢谢!
回复

使用道具 举报

110

主题

324

帖子

10

银币

中流砥柱

Rank: 25

铜币
764
发表于 2015-4-28 16:35:00 | 显示全部楼层
编译错误,xTextStyleTools不存在,没有定义吗?能否把整个工程放上来供大家学习呢?谢谢!
回复

使用道具 举报

3

主题

31

帖子

5

银币

初来乍到

Rank: 1

铜币
43
发表于 2015-4-29 08:58:00 | 显示全部楼层

我把度分秒函数给出来了的,你随便放到那个类里面不就可以了。xTextStyleTools.DFM,如果你新建一个类,类名假如为TOOLS ,并把DFM函数放进去,那么他的引用就是TOOLS.DFM;所以这个不影响你的。
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2020-3-4 18:30:00 | 显示全部楼层
这个代码真的很不错啊,参考后可以用于标注程序,实用性非常强,赞一个,顶起来!
回复

使用道具 举报

1

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
17
发表于 2020-4-2 10:02:00 | 显示全部楼层
学习了
回复

使用道具 举报

110

主题

324

帖子

10

银币

中流砥柱

Rank: 25

铜币
764
发表于 2020-4-11 08:22:00 | 显示全部楼层
很好,谢谢!学习一下!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:09 , Processed in 0.215965 second(s), 71 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表