乐筑天下

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

点与坐标文字关联

[复制链接]

3

主题

31

帖子

5

银币

初来乍到

Rank: 1

铜币
43
发表于 2015-9-11 14:09:00 | 显示全部楼层 |阅读模式

hhecyskshqv.gif

hhecyskshqv.gif


该程序为根据扩展信息来判断关联。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Autodesk..Runtime;
  5. using Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using Autodesk.AutoCAD.Geometry;
  9. using DotNetARX;
  10. using System.Text.RegularExpressions;
  11. using Autodesk.AutoCAD.Windows;
  12. using System.Windows.Forms;
  13. namespace MoveCircleEvent
  14. {
  15.     public class MovePoint
  16.     {
  17.         Database db = HostApplicationServices.WorkingDatabase;
  18.         Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  19.         Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  20.         bool bMove;
  21.         Point3d startPoint;
  22.         void commandWillStart(object sender, CommandEventArgs e)
  23.         {
  24.             //设置全局变量bMove为True,表示移动命令开始
  25.             bMove = true;
  26.         }
  27.         void objectOpenedForModify(object sender, ObjectEventArgs e)
  28.         {
  29.             //判断AutoCAD命令是否为移动
  30.             if (bMove == false)
  31.                 //如果AutoCAD命令为非移动,则返回
  32.                 return;
  33.             DBPoint pt = e.DBObject as DBPoint;
  34.             //判断将要移动的对象是否为
  35.             if (pt != null)
  36.             {
  37.                 //获取文字的中心,就是同心文字的文字心
  38.                 startPoint = pt.Position;
  39.             }
  40.         }
  41.         ///
  42.         /// 去掉字符串中的数字及小数点
  43.         ///
  44.         ///
  45.         ///
  46.         public static string RemoveNumber(string key)
  47.         {
  48.             return System.Text.RegularExpressions.Regex.Replace(key, @"[\d \.]", "");
  49.         }
  50.         ///
  51.         /// 去掉字符串中的字母及等号
  52.         ///
  53.         ///
  54.         ///
  55.         public static string RemoveNotNumber(string key)
  56.         {
  57.             return System.Text.RegularExpressions.Regex.Replace(key, @"[A-Z a-z \=]*", "");
  58.         }
  59.         void objectModified(object sender, ObjectEventArgs e)
  60.         {
  61.             //判断AutoCAD命令是否为移动
  62.             if (bMove == false)
  63.                 //如果AutoCAD命令为非移动,则返回
  64.                 return;
  65.             //断开所有的事件处理函数
  66.             removeEvents();
  67.             //判断移动过的对象是否为点
  68.             DBPoint startPoint = e.DBObject as DBPoint;
  69.             if (startPoint == null)
  70.                 return;
  71.             //设置选择集过滤器,只选择图形中的文字
  72.             TypedValueList values = new TypedValueList();
  73.             values.Add(typeof(DBText));
  74.             SelectionFilter filter = new SelectionFilter(values);
  75.             PromptSelectionResult resSel = ed.SelectAll(filter);
  76.             //如果选择的是文字
  77.             if (resSel.Status == PromptStatus.OK)
  78.             {
  79.                 //获取选择集中的文字对象
  80.                 SelectionSet sSet = resSel.Value;
  81.                 ObjectId[] ids = sSet.GetObjectIds();
  82.                 //开始事务处理
  83.                 try
  84.                 {
  85.                     using (Transaction trans = db.TransactionManager.StartTransaction())
  86.                     {
  87.                         TypedValueList list1 = startPoint.ObjectId.GetXData("测点");
  88.                         if (list1 == null)
  89.                         {
  90.                             MessageBox.Show("点无扩展信息");
  91.                         }
  92.                         //循环遍历选择集中的文字
  93.                         foreach (ObjectId id in ids)
  94.                         {
  95.                             //以读的方式打开文字对象
  96.                             DBText followText = trans.GetObject(id, OpenMode.ForRead) as DBText;
  97.                             double fText = Convert.ToDouble(RemoveNotNumber(followText.TextString.ToString()));
  98.                             string qText = RemoveNumber(followText.TextString.ToString());
  99.                             TypedValueList list2 = id.GetXData("测点");
  100.                             string mc1 = "a", mc2 = "b", dh1 = "c", dh2 = "d";
  101.                             if (list2 != null)
  102.                             {
  103.                                 mc1 = Convert.ToString(list1[0].Value.ToString());
  104.                                 mc2 = Convert.ToString(list2[0].Value.ToString());
  105.                                 dh1 = Convert.ToString(list1[2].Value.ToString());
  106.                                 dh2 = Convert.ToString(list2[2].Value.ToString());
  107.                             }
  108.                             else
  109.                             {
  110.                                 continue;
  111.                             }
  112.                             //通过判断点与文字的扩展信息是否相同
  113.                             if (qText == "Y=" && mc1 == mc2 && dh1 == dh2)
  114.                             {
  115.                                 //因为上面以读的方式打开了文字,所以必须改变为写
  116.                                 followText.UpgradeOpen();
  117.                                 //改变文字的内容保持和点位置Y坐标相同
  118.                                 followText.TextString = "Y=" + startPoint.Position.X.ToString("0.000");
  119.                             }
  120.                             else if (qText == "Z=" && mc1 == mc2 && dh1 == dh2)
  121.                             {
  122.                                 //因为上面以读的方式打开了文字,所以为了改变文字的文字心必须改变为写
  123.                                 followText.UpgradeOpen();
  124.                                 //改变文字的内容保持和点位置Z坐标相同
  125.                                 followText.TextString = "Z=" + startPoint.Position.Z.ToString("0.000");
  126.                             }
  127.                             else if (qText == "X=" && mc1 == mc2 && dh1 == dh2)
  128.                             {
  129.                                 //因为上面以读的方式打开了文字,所以为了改变文字的文字心必须改变为写
  130.                                 followText.UpgradeOpen();
  131.                                 //改变文字的内容保持和点位置X坐标相同
  132.                                 followText.TextString = "X=" + startPoint.Position.Y.ToString("0.000");
  133.                             }
  134.                         }
  135.                         //提交事务处理
  136.                         trans.Commit();
  137.                     }
  138.                 }
  139.                 catch
  140.                 {
  141.                     ed.WriteMessage("\n错误");
  142.                 }
  143.             }
  144.             //连接所有的事件处理函数
  145.             AddEvents();
  146.         }
  147.         void commandEnded(object sender, CommandEventArgs e)
  148.         {
  149.             if (bMove == true)//判断AutoCAD命令是否为移动
  150.                 bMove = false;//设置全局变量bMove为False,表示移动命令结束
  151.         }
  152.         [CommandMethod("Add")]
  153.         public void AddEvents()
  154.         {
  155.             //把事件处理函数与相应的事件进行连接
  156.             db.ObjectOpenedForModify += objectOpenedForModify;
  157.             db.ObjectModified += objectModified;
  158.             doc.CommandWillStart += commandWillStart;
  159.             doc.CommandEnded += commandEnded;
  160.         }
  161.         [CommandMethod("Remove")]
  162.         public void removeEvents()
  163.         {
  164.             //断开所有的事件处理函数
  165.             db.ObjectOpenedForModify -= objectOpenedForModify;
  166.             db.ObjectModified -= objectModified;
  167.             doc.CommandWillStart -= commandWillStart;
  168.             doc.CommandEnded -= commandEnded;
  169.         }
  170.     }
  171. }
回复

使用道具 举报

15

主题

53

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2020-2-19 21:58:00 | 显示全部楼层
using DotNetARX这个应用的文件呢,建议可以上传到论坛,谢谢了!
回复

使用道具 举报

1

主题

13

帖子

2

银币

初来乍到

Rank: 1

铜币
17
发表于 2020-3-31 09:26:00 | 显示全部楼层
就是这么精彩。。
回复

使用道具 举报

0

主题

7

帖子

4

银币

初来乍到

Rank: 1

铜币
7
发表于 2020-7-10 18:15:00 | 显示全部楼层
点与坐标文字关联就是这么精彩。。
回复

使用道具 举报

0

主题

32

帖子

10

银币

初来乍到

Rank: 1

铜币
34
发表于 2020-8-21 21:33:00 | 显示全部楼层
这个看起来不多的样子
回复

使用道具 举报

0

主题

278

帖子

30

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
259
发表于 2020-8-22 09:27:00 | 显示全部楼层
using DotNetARX这个应用的文件呢,建议可以上传到论坛,谢谢了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 02:13 , Processed in 0.559120 second(s), 67 queries .

© 2020-2025 乐筑天下

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