freejustin 发表于 2005-7-3 12:15:00

[ARX]为什么我的自定义实体类加入对象字典 出错

本帖最后由 作者 于 2005-7-3 14:18:43 编辑 <br /><br /> // This is command 'TEST'<BR>void cascoTest()<BR>{                <BR>        acutPrintf("cascoCEntity was on the Drawing.\n");



        AcDbBlockTable *pBlkTbl;<BR>        acdbHostApplicationServices()-&gt;workingDatabase()<BR>                -&gt;getBlockTable(pBlkTbl, AcDb::kForRead);<BR>        AcDbBlockTableRecord *pTblRcd;<BR>        pBlkTbl-&gt;getAt(ACDB_MODEL_SPACE, pTblRcd, AcDb::kForWrite);<BR>        pBlkTbl-&gt;close();<BR>       <BR>        cascoCEntity *pMyEnt = new cascoCEntity();<FONT color=#ff0000>//自定义实体类cascoCEntity : public AcDbEntity</FONT><BR>        pTblRcd-&gt;appendAcDbEntity(objectID, pMyEnt);        <BR>        objectID_a = objectID;        <BR>        const AcGePoint3d start(pMyEnt-&gt;Center());<BR>        //pMyEnt-&gt;close();


        cascoCEntity *pMySecondEnt = new cascoCEntity("Drawing0.dwg", "TWO_RECT"); <FONT color=#ff0000>//自定义实体类cascoCEntity : public AcDbEntity<BR></FONT>        pTblRcd-&gt;appendAcDbEntity(objectID, pMySecondEnt);        <BR>                objectID_b = objectID;<BR>                const AcGePoint3d end(pMySecondEnt-&gt;Center());<BR>        //pMySecondEnt-&gt;close();


        AcDbLine *pLine = new AcDbLine(start, end);<BR>        pTblRcd-&gt;appendAcDbEntity(objectID, pLine); <BR>        pLine-&gt;close();       


                       AcDbDictionary *pNamedObj;<BR>                       AcDbDictionary *pNameList;<BR>                       acdbHostApplicationServices()-&gt;workingDatabase()<BR>                -&gt;getNamedObjectsDictionary(pNamedObj, AcDb::kForWrite);<BR>                       if (pNamedObj-&gt;getAt("ASDK_DICT", (AcDbObject*&amp;)pNameList, AcDb::kForWrite)<BR>                                                                                       == Acad::eKeyNotFound)<BR>                       {<BR>                                                       pNameList = new AcDbDictionary;<BR>                                                       AcDbObjectId DictId;<BR>                                                       pNamedObj-&gt;setAt("ASDK_DICT", pNameList, DictId);<BR>                       }<BR>                       pNamedObj-&gt;close();


                       CascoObjectToNotify *pObj = new CascoObjectToNotify(); <FONT color=#ff0000>//自定义实体类CascoObjectToNotify : public AcDbObject<BR></FONT>                       pObj-&gt;eLinkage(objectID, true);


                       AcDbObjectId objId;<BR>                       if ((pNameList-&gt;getAt("object_to_notify_A", objId))<BR>                                                       == Acad::eKeyNotFound)<BR>                       {<BR>                                                       pNameList-&gt;setAt("object_to_notify_A", pObj, objId);<BR>                                                       pObj-&gt;close();<BR>                       } else {<BR>                                                       delete pObj;<BR>                                                       ads_printf("object_to_notify_A already exists\n");<BR>                       }


                       pMyEnt-&gt;addPersistentReactor(objectID_a); <FONT color=#f70909>//原来是objId,关键objId为空</FONT><BR>                       pMyEnt-&gt;close();       


                       pObj = new CascoObjectToNotify();<BR>                       pObj-&gt;eLinkage(objectID, false);


                       if ((pNameList-&gt;getAt("object_to_notify_B", objId))<BR>                                                       == Acad::eKeyNotFound)<BR>                       {<BR>                                                       pNameList-&gt;setAt("object_to_notify_B", pObj, objId);<BR>                                                       pObj-&gt;close();<BR>                       } else {<BR>                                                       delete pObj;<BR>                                                       ads_printf("object_to_notify_B already exists\n");<BR>                       }


                       pMySecondEnt-&gt;addPersistentReactor(objectID_b);        //原来是objId<BR>        pMySecondEnt-&gt;close();<BR>                       pNameList-&gt;close();


        pTblRcd-&gt;close();       


}<BR>
页: [1]
查看完整版本: [ARX]为什么我的自定义实体类加入对象字典 出错