找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3696|回复: 10

[分享] 实体ToolTip显示XData

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-22 22:00:48 | 显示全部楼层 |阅读模式

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

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

×
http://379910987.blog.163.com/blog/static/335237972010111332519131/ 实体ToolTip显示XData  

首先要说明,实现方式不是我的原创,其中ToolTip的实现转自这里,然后XData的设置和获取来自Kean的博客,当然我自己也做了点研究,在这里,然后把这两个技术结合起来就是你将要看到的东西。
先上效果吧。

0.jpg
下面是实现的代码:
public class Class1:IExtensionApplication
    {
        void IExtensionApplication.Initialize()
        {
            Mytooltip();
        }
        void IExtensionApplication.Terminate()
        {
        }
        public void Mytooltip()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            ed.PointMonitor += new PointMonitorEventHandler(MytooltipOn);
        }
        private void MytooltipOn(object sender, PointMonitorEventArgs e)
        {
            Database db = Application.DocumentManager.MdiActiveDocument.Database;
            FullSubentityPath[] ePaths = e.Context.GetPickedEntities();
            if (ePaths.Length > 0)
            {
                FullSubentityPath ePath = ePaths[0];
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    ObjectId entId = ePath.GetObjectIds()[0];
                    Entity ent = (Entity)trans.GetObject(entId, OpenMode.ForRead);
                    e.AppendToolTipText(GetXData(ent));
                    trans.Commit();
                }
            }
            else
            {
                e.AppendToolTipText("\n未指向实体");
            }
        }
        static public string GetXData(Entity ent)
        {
            string ret = "";
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            ResultBuffer rb = ent.XData;
            if (rb == null)
                return "该实体不包含XData.";
            else
            {
                int n = 0;
                foreach (TypedValue tv in rb)
                {
                    ret += string.Format("类型值{0} - 类型: {1}, 值: {2}\n", n, tv.TypeCode, tv.Value);
                    n++;
                }
                rb.Dispose();
                return ret;
            }
        }
        [CommandMethod("SetXD")]
        static public void SetXData()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体:");
            PromptEntityResult per = ed.GetEntity(peo);
            if (per.Status == PromptStatus.OK)
            {
                Transaction trans = doc.TransactionManager.StartTransaction();
                DBObject obj = trans.GetObject(per.ObjectId, OpenMode.ForWrite);
                AddRegAppTableRecord("Test");
                ResultBuffer rb = new ResultBuffer();
                rb.Add(new TypedValue(1001, "Test"));
                rb.Add(new TypedValue(1000, "Greeting! I am the XData"));
                rb.Add(new TypedValue(1000, "Today is very Cold"));
                obj.XData = rb;
                rb.Dispose();
                trans.Commit();
                trans.Dispose();
            }
        }
        static void AddRegAppTableRecord(string regAppName)
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            Transaction trans = doc.TransactionManager.StartTransaction();
            RegAppTable rat = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForRead, false);
            if (!rat.Has(regAppName))
            {
                rat.UpgradeOpen();
                RegAppTableRecord ratr = new RegAppTableRecord();
                ratr.Name = regAppName;
                rat.Add(ratr);
                trans.AddNewlyCreatedDBObject(ratr, true);
            }
            trans.Commit();
            trans.Dispose();
        }
    }

命令SetXD用于设置XData,不然新建的实体是不包含XData的。指向一个实体后,将会自动显示该实体的XData

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-8-17 15:36:07 | 显示全部楼层
lisp怎么实现呢?  只有用“超级连接”吗?

点评

LISP的实现可以去看看这个帖子 http://bbs.xdcad.net/thread-671343-1-3.html  详情 回复 发表于 2016-8-17 16:19
lisp只有超链,tooltip没有autolisp实现,只能借助arx/c#拓展pointmonitor,如xdapi或高飞那个arx(已加入xdapi)  详情 回复 发表于 2016-8-17 15:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-8-17 15:42:55 来自手机 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2016-8-17 15:36
lisp怎么实现呢?  只有用“超级连接”吗?

lisp只有超链,tooltip没有autolisp实现,只能借助arx/c#拓展pointmonitor,如xdapi或高飞那个arx(已加入xdapi)

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-8-17 16:19:06 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2016-8-17 15:36
lisp怎么实现呢?  只有用“超级连接”吗?

LISP的实现可以去看看这个帖子  
http://bbs.xdcad.net/thread-671343-1-3.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-8-17 16:25:14 | 显示全部楼层
newer 发表于 2016-8-17 16:19
LISP的实现可以去看看这个帖子  
http://bbs.xdcad.net/thread-671343-1-3.html

显示对象本身一些东西,这个我知道。不用XD也可实现。我的想法是显示自己加进去的一东西,比如什么时间因什么修改。。。。

点评

那东西 你能读出什么,就能显示出什么,看你怎么写。  详情 回复 发表于 2016-8-17 17:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-8-17 17:08:17 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2016-8-17 16:25
显示对象本身一些东西,这个我知道。不用XD也可实现。我的想法是显示自己加进去的一东西,比如什么时间因 ...

那东西 你能读出什么,就能显示出什么,看你怎么写。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2017-12-17 23:22:27 | 显示全部楼层
感谢楼主分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

发表于 2018-11-20 22:24:12 | 显示全部楼层
感谢分享,学习了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-5-29 16:07:43 | 显示全部楼层
学习!!!!!!!!!!!谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 20:45 , Processed in 0.207734 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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