找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 603|回复: 7

[ARX程序]:图中的效果如何实现的?

[复制链接]
发表于 2006-4-1 16:03:48 | 显示全部楼层 |阅读模式

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

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

×
下面图中,当鼠标移动到某个对象上,可以将对象的扩展属性取出,这个是如何实现?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-1 20:04:26 | 显示全部楼层
创建一个自定义输入点监视器(AcEdInputPointMonitor)类的实例追加到当前文档的输入点管理器(AcEdInputPointManager)中就可以实现此类功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-2 16:57:50 | 显示全部楼层
继续请教:Autocad是多文档的,如何在多文档下对每个文档添加输入点管理器?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2006-4-4 00:30:04 | 显示全部楼层
template <class T> class AsdkDataManager : public AcApDocManagerReactor
{
public:
    AsdkDataManager()
    {
        acDocManager->addReactor(this);
                m_pDataReactor=new lwrsDatabaseReactor;
                m_pEditorReactor=new lwrsEditorReactor;
                m_plwInputPoint=new lwInputPoint;
                acedEditor->addReactor(m_pEditorReactor);               
                documentToBeActivated(curDoc());
    }
       
    ~AsdkDataManager()
    {
        acDocManager->removeReactor(this);

                AcApDocument* pDoc;
                AcApDocumentIterator* pDocIter;
                pDocIter = acDocManager->newAcApDocumentIterator();
                for ( ;!pDocIter->done(); pDocIter->step())
                {
                        pDoc = pDocIter->document();
                        if(pDoc->database())
                                pDoc->database()->removeReactor(m_pDataReactor);
                        if(pDoc->inputPointManager())
                                pDoc->inputPointManager()->removePointMonitor(m_plwInputPoint);
                }
                delete pDocIter;
               
                acedEditor->removeReactor(m_pEditorReactor);
                delete m_pDataReactor;
                delete m_plwInputPoint;
                delete m_pEditorReactor;
    }
       
    virtual void documentToBeDestroyed( AcApDocument *pDoc )
    {
        m_dataMap.erase(pDoc);
    }
   
        virtual void documentToBeActivated(AcApDocument *pDoc)
        {
                if(pDoc->database())
                        pDoc->database()->addReactor(m_pDataReactor);                       
                if(pDoc->inputPointManager())
                        pDoc->inputPointManager()->addPointMonitor(m_plwInputPoint);
        }

    T& docData(AcApDocument* pDoc)
    {
        std::map<AcApDocument*, T>::iterator i;
        i = m_dataMap.find(pDoc);
        if (i==m_dataMap.end())
            return  m_dataMap[ pDoc ];
        else
            return (*i).second;
    }
    T& docData()
    {
        return docData(acDocManager->curDocument());
    }
   
private:
    std::map<AcApDocument*, T> m_dataMap;
        lwrsDatabaseReactor*   m_pDataReactor;
        lwrsEditorReactor* m_pEditorReactor;
        lwInputPoint* m_plwInputPoint;
} ;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-4 12:06:02 | 显示全部楼层
在documentToBeActivated函数下添加监视器的话,会不会有重复添加的可能?这样改后是不是好些

  1.   [FONT=courier new]
  2. template <class T> class AsdkDataManager : public AcApDocManagerReactor
  3. {
  4. public:
  5.     AsdkDataManager()
  6.     {
  7.         acDocManager->addReactor(this);
  8.                 this->m_pIPM = new CFengyuanIPM();

  9.                 AcApDocumentIterator *docIter;
  10.                 docIter = acDocManager->newAcApDocumentIterator();
  11.                 while(!docIter->done())
  12.                 {
  13.                         AcApDocument* pDoc = docIter->document();
  14.                         if(pDoc->inputPointManager())
  15.                         {
  16.                                 pDoc->inputPointManager()->addPointMonitor(m_pIPM);
  17.                         }
  18.                         docIter->step();
  19.                 }
  20.                 delete docIter;
  21.     }
  22.        
  23.         ~AsdkDataManager()
  24.     {
  25.         acDocManager->removeReactor(this);

  26.                 AcApDocumentIterator *docIter;
  27.                 docIter = acDocManager->newAcApDocumentIterator();
  28.                 while(!docIter->done())
  29.                 {
  30.                         AcApDocument* pDoc = docIter->document();
  31.                         if(pDoc->inputPointManager())
  32.                         {
  33.                                 pDoc->inputPointManager()->removePointMonitor(m_pIPM);
  34.                         }
  35.                         docIter->step();
  36.                 }
  37.                 delete docIter;
  38.                 delete m_pIPM;
  39.     }

  40.         virtual void documentCreated(AcApDocument* pDoc)
  41.         {
  42.                 if(pDoc->inputPointManager())
  43.                 {
  44.                         pDoc->inputPointManager()->addPointMonitor(m_pIPM);
  45.                 }
  46.         }
  47.         virtual void documentToBeDestroyed( AcApDocument *pDoc )
  48.     {
  49.                 // 移除输入点监视器
  50.                 if (pDoc)
  51.                 {
  52.                         if(pDoc->inputPointManager())
  53.                         {
  54.                                 pDoc->inputPointManager()->removePointMonitor(m_pIPM);
  55.                         }
  56.                 }

  57.         m_dataMap.erase(pDoc);
  58.     }
  59.    
  60.     T& docData(AcApDocument* pDoc)
  61.     {
  62.         std::map<AcApDocument*, T>::iterator i;
  63.         i = m_dataMap.find(pDoc);
  64.         if (i==m_dataMap.end())
  65.             return  m_dataMap[ pDoc ];
  66.         else
  67.             return (*i).second;
  68.     }
  69.     T& docData()
  70.     {
  71.         return docData(acDocManager->curDocument());
  72.     }
  73.    
  74. private:
  75.     std::map<AcApDocument*, T> m_dataMap;
  76.         CFengyuanIPM* m_pIPM;
  77. };  [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 11:01 , Processed in 0.367540 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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