找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 890|回复: 13

[求助]:紧急求助:自定义类还是无法加入字典!

[复制链接]
发表于 2003-2-22 18:52:04 | 显示全部楼层 |阅读模式

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

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

×
在使用函数Acad::ErrorStatus AcDbDictionary::setAt(const char*   pSrchKey,  AcDbObject*   pNewValue,
                                                                                    AcDbObjectId& retObjId);
将自定义类实体加入字典时,函数老返回eWrongObject,请问这是怎么回事那?
我的自定义类究竟可能在哪出了问题?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-2-22 19:17:53 | 显示全部楼层
只有从AcDbObject派生的物体才可以加入!!!从AcDbEntity派生的不行!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-24 11:28:48 | 显示全部楼层

还是不行!

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-2-24 21:31:50 | 显示全部楼层
AsdkCAreaLine是我的要加入字典的自定义类,就这个类出错,
AsdkObjectToNotify1和AsdkObjectToNotify2是两个反应器他们加入字典时
就没出问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-26 19:03:23 | 显示全部楼层
//{{AFX_ARX_MACRO
ACRX_DXF_DEFINE_MEMBERS(AsdkCAreaLine, AcDbEntity,
                                                AcDb::kDHL_CURRENT,

AcDb::kMReleaseCurrent,
                        AcDbProxyEntity::kNoOperation,
                                                ASDKCAREALINE, AsdkCAreaLine);
//}}AFX_ARX_MACRO

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

使用道具 举报

 楼主| 发表于 2003-3-1 01:05:03 | 显示全部楼层

谢谢binbin了

首先十分感谢binbin的热情帮助,在你的帮助下,自定义实体加入字典的问题解决了,多谢了。
自定义实体现在可以加入字典了,可是又出现了新问题,自定义实体类不调用worldDraw函数,这是什么原因呀,百思不得起解!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-3-1 14:35:09 | 显示全部楼层
为了将自定义实体加入字典,我必须从AcDbObjet类派生自定义实体类,但AdDbObjet类又不能调用worldDraw函数,难道我要自己在代码中写入worldDraw函数的调用吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-1 16:16:50 | 显示全部楼层
己在代码中写入worldDraw函数的调用是不行的,因为参数是指针,你不知道指向哪
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-1 21:06:01 | 显示全部楼层
wuwu,难道就没有办法解决了吗?那我的从AcDbObject派生的自定义实体还怎么画出来亚?
binbin大侠求求你帮帮忙亚!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-3-2 10:27:05 | 显示全部楼层
binbin,我这下又把自定义类改写为从AcDbEntity派生,然后将他加入模型空间,这样也可以得到其ID,但是出现了新的问题,在操作一个用户绘制的pline对象时(在我向其加入一个永久反应器成功后,然后关闭他时),出现了如下错误提示:
内部错误:!U:coreacad\INCLUDE\dbqspace.h@386:eWasOpenForWrite
这是怎么回事亚,以下是我操作模型空间的函数addToModelSpace()
void
addToModelSpace(AcDbObjectId &objId, AcDbEntity* pEntity)
{
    ads_printf("\nEnter addToModelSpace\n");
    Acad::ErrorStatus es;
    AcDbBlockTable   *pBlockTable;
    AcDbDatabase *pDb=acdbHostApplicationServices()->workingDatabase();
    es = pDb->getBlockTable(pBlockTable,AcDb::kForWrite);
    if (es != Acad::eOk)
         return;       
     AcDbBlockTableRecord *pSpaceRecord;
     es = pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord,AcDb::kForWrite,FALSE);
     if (es != Acad::eOk)   {
          pBlockTable->close();
          return;}
     es = pSpaceRecord->appendAcDbEntity(objId,pEntity);
     if (es != Acad::eOk) {
           ads_printf("\n自定义实体加入模型空间失败\n");
           delete pEntity;  return;}
     es = pSpaceRecord->close();
     if (es != Acad::eOk)
             acrx_abort("\nUnable to close block table record");
      es = pBlockTable->close();
      if (es != Acad::eOk)
              acrx_abort("\nUnable to close block table");  
      ads_printf("\nExit addToModelSpace\n");
      return ;
}
我跟踪程序时,发现这段并没有错误,而是在另外一个函数assocZuoXi()中出错
void assocZuoxi(AcDbObjectId Id1,AcDbObjectId Id2,AcDbObjectId Id3)
//将坐席区,方向线,座椅布置线之间挂上反应器
{
        AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
        AcDbDictionary *pNamedObj;
        pDb->getNamedObjectsDictionary(pNamedObj,AcDb::kForWrite);
        AcDbDictionary *pNameList;
        if (pNamedObj->getAt("Area_line_Dict",   (AcDbObject*&)pNameList, AcDb::kForWrite) ==      
                Acad::eKeyNotFound)
       {
              pNameList = new AcDbDictionary;
               AcDbObjectId DictId;
               pNamedObj->setAt("Area_line_Dict", pNameList, DictId);  }
        // 为坐席区创建一个AsdkObjectToNotify1反应器
    AsdkObjectToNotify1 *pObj1 = new AsdkObjectToNotify1();
        pObj1->eLinkage(Id3,Id2);
        CString tmpstr;
         tmpstr.Format("object_to_notity_%lx",Id1);               
         AcDbObjectId objId1;
         if ((pNameList->getAt(tmpstr,objId1))==Acad::eKeyNotFound)
         {
        pNameList->setAt(tmpstr, pObj1, objId1);
        ads_printf("objId1 is %lx.............\n",objId1);
                      pObj1->close(); }
         else
         {
          delete pObj1; ads_printf("%s已经存在!\n",tmpstr);        }
          AcDbEntity *pPline;
          int retStat;
          if ((retStat=acdbOpenObject(pPline,Id1,AcDb::kForWrite))!=Acad::eOk) return;
          pPline->addPersistentReactor(objId1);                           
          pPline->close();
          /*****************************程序在这里出错*************************************************/
          ads_printf("为坐席区创建一个AsdkObjectToNotify1反应器\n");
          pNameList->close();   
          pNamedObj->close();
          ads_printf("\nExit assocZuoxi(AcDbObjectId plineId)\n");
}
完整的程序我也上传一下,再次麻烦binbin大侠,多谢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-3-2 10:30:08 | 显示全部楼层
最初由 geminigui 发布
[B]binbin,我这下又把自定义类改写为从AcDbEntity派生,然后将他加入模型空间,这样也可以得到其ID,但是出现了新的问题,在操作一个用户绘制的pline对象时(在我向其加入一个永久反应器成功后,然后关闭他时),出现了如... [/B]


打开过的对象(写),没有关闭。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 06:56 , Processed in 0.189470 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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