明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3872|回复: 10

[事件] 获取选择实体问题

[复制链接]
发表于 2013-6-26 12:42:25 | 显示全部楼层 |阅读模式
我写了一个双击弹出自定义实体,但是需要加一个读取实体扩展数据的判断,如果名字为Myshujia的扩展表存在则实现双击弹出窗体,如果不存在该表则不弹出,代码如下
  1. private void dm_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
  2.         {
  3.             //双击事件
  4.             if (e.GlobalCommandName.ToUpper() == "PROPERTIES")
  5.             {
  6.                 e.Veto();
  7.                 Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  8.                 Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  9.                                PromptEntityResult ent=ed.Editor
  10.                 using (Transaction tran = db.TransactionManager.StartTransaction())
  11.                 {
  12.                     if (ent.Status == PromptStatus.OK)
  13.                     {
  14.                         Entity eent = (Entity)tran.GetObject(ent.ObjectId, OpenMode.ForWrite);
  15.                         ResultBuffer rb = eent.XData;
  16.                         TypedValue[] vals = rb.AsArray();
  17.                         for (int i = 0; i < vals.Length; i++)
  18.                         {
  19.                             TypedValue[] val = vals;
  20.                             if(val.Value.ToString=="Myshujia"     )
  21. {
  22. using (Form2 form2 = new Form2())
  23.                     {
  24.                         Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(form2);
  25.                     }
  26. }
  27.                   }
  28.                     }
  29.                 }
  30.                                 }

 楼主| 发表于 2013-6-26 12:44:12 | 显示全部楼层
我需要的是默认的判断 不需要提示用户选择实体 怎么才能在双击时获取实体并读取扩展数据呢;帮我改改
 楼主| 发表于 2013-6-26 16:13:11 | 显示全部楼层
private void dm_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
        {
            
            if (e.GlobalCommandName.ToUpper() == "PROPERTIES")
            {
               
                Document dt = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                PromptSelectionResult res = dt.Editor.SelectImplied();

                ObjectId idsel=res.Value[0].ObjectId;
                using (Transaction tran = dt.TransactionManager.StartTransaction())
                {
                    Entity eent = (Entity)tran.GetObject(idsel, OpenMode.ForWrite);
                    ResultBuffer rb = eent.XData;
                    if (eent.XData != null)
                    {
                        
                        TypedValue[] vals = rb.AsArray();
                        if (vals[0].Value.ToString() == "Myshujia")
                        {
                            e.Veto();
                            using (Form2 form2 = new Form2())
                            {
                                Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(form2);
                            }
                        }
                    }
                }
            }
        }
发表于 2013-11-12 13:07:54 | 显示全部楼层
xingang1005 发表于 2013-6-26 16:13
private void dm_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
        ...

我也想做这样的事情。
因为有些图形是用我自己开发的程序生成的块,我希望在双击我自己开发的块对照时可以根据块中保存的扩展数据来区分块的类型,从而弹出不同的修改程序的窗体。
 楼主| 发表于 2013-11-12 13:11:09 | 显示全部楼层
SWAYWOOD 发表于 2013-11-12 13:07
我也想做这样的事情。
因为有些图形是用我自己开发的程序生成的块,我希望在双击我自己开发的块对照时可 ...

写扩展数据,当双击实体时读取扩展数据,判断扩展数据内容根据不同的内容弹出不同的窗体
发表于 2013-11-12 13:50:04 | 显示全部楼层
xingang1005 发表于 2013-11-12 13:11
写扩展数据,当双击实体时读取扩展数据,判断扩展数据内容根据不同的内容弹出不同的窗体

是的,你有写好的代码让我参考一下吗?谢谢了
 楼主| 发表于 2013-11-12 13:51:49 | 显示全部楼层
SWAYWOOD 发表于 2013-11-12 13:50
是的,你有写好的代码让我参考一下吗?谢谢了

我有写好的双击实体的代码,根据实体ID读取扩展数据你自己写
发表于 2013-11-12 14:24:18 | 显示全部楼层
xingang1005 发表于 2013-11-12 13:51
我有写好的双击实体的代码,根据实体ID读取扩展数据你自己写

获取扩展数据我有方法,你把双击实体的代码发上来一下,谢谢!
 楼主| 发表于 2013-11-12 14:30:58 | 显示全部楼层
SWAYWOOD 发表于 2013-11-12 14:24
获取扩展数据我有方法,你把双击实体的代码发上来一下,谢谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
namespace doubleclick25
{
    public class doubleclick
    {
        [CommandMethod("add")]
        public void add()
        {
            Initialize();
            Application.ShowAlertDialog("添加双击事件成功!");
        }
        static DocumentCollection dm = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
        static int num = 0;
        public void Initialize()
        {
            //初始化关联
            dm.DocumentLockModeChanged += new DocumentLockModeChangedEventHandler(dm_DocumentLockModeChanged);
        }
        public void Terminate()
        {
            //终止关联
            dm.DocumentLockModeChanged -= new DocumentLockModeChangedEventHandler(dm_DocumentLockModeChanged);
        }
         private void dm_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
        {
            dm.DocumentLockModeChanged -= new DocumentLockModeChangedEventHandler(dm_DocumentLockModeChanged);
            if (num == 2)
            {
                if (e.GlobalCommandName.ToUpper() == "PROPERTIES")
                {
                    Editor ed = dm.MdiActiveDocument.Editor;
                   // PromptSelectionResult res = ed.GetSelection();
                    PromptSelectionResult res = ed.SelectImplied();
                    ObjectId[] objids = res.Value.GetObjectIds();
                    if (res.Status == PromptStatus.OK)
                    {
                        e.Veto();
                        Application.ShowAlertDialog("你双击了" + objids[objids.GetLength(0) - 1]);
                    }
                    num = 0;
                }
            }
            else
                num++;
            dm.DocumentLockModeChanged += new DocumentLockModeChangedEventHandler(dm_DocumentLockModeChanged);
         }
    }
}
发表于 2014-1-16 20:37:39 | 显示全部楼层
这个思路不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 13:46 , Processed in 0.184582 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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