- UID
- 8619
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-8-8
- 最后登录
- 1970-1-1
|
楼主 |
发表于 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大侠,多谢了。 |
|