wwyfeng 发表于 2003-4-29 13:44:00

困惑!!

下面是小弟写的一个土块插入的程序!运行完后,图快能插入!但不久autocad弹出一个对话框,告诉有致命错误!!找了半天也没找到错误!请帮大虾们帮我看看程序:非常感谢!
void SelEntToLib()
{
        ads_name ssname,ent;
        ads_point selpt;
        AcDbObjectId enId,msrId;
        char bName,desName;
        AcDbEntity *pEnt;


        strcpy(bName,"yuanzhui");
        strcpy(desName,"F:\\FENGH\\program\\AutoCAD\\ObjectARX\\LibMag\\testlib.dwg");
       
        if( acedSSGet(NULL,NULL,NULL,NULL,ssname) != RTNORM)
        {
                acutPrintf("\n创建选择集失败!");
                return;
        }
        if( acedSSName(ssname,0L,ent) != RTNORM)
        {
                acutPrintf("\n获得实体失败!");
                return;
        }
        acedSSFree(ssname);

        if( acdbGetObjectId(enId,ent) != Acad::eOk)
        {
                acutPrintf("\nconver object id fail!");
                return;
        }
//        acdbOpenObject(pEnt,enId,AcDb::kForWrite);

        AcDbDatabase * curpDb = acdbHostApplicationServices()->workingDatabase();
        AcDbDatabase * tempDb = new AcDbDatabase(Adesk::kFalse);
        AcDbDatabase * pDbMS = new AcDbDatabase(Adesk::kFalse);
       
        if(pDbMS->readDwgFile(desName) != Acad::eOk)
        {
                acutPrintf("\nThe file %s cannot be opend",desName);
                return;


        }
        curpDb->wblock(tempDb,enId);//把图块写入一当前数据库中
//        pEnt->close();

//        tempDb->saveAs("cur.dwg");
       
        pDbMS->insert(msrId,bName,tempDb);//从临时数据库插入图库中

        AcDbBlockReference *pBlkRef = new AcDbBlockReference; //创建一个块表引用
        pBlkRef->setBlockTableRecord(msrId);// 指向blockId;

//        pBlkRef->setBlockTableRecord(enId);// 指向blockId;

//        pBlkRef->setPosition(Pt);//设置位置
//        pBlkRef->setRotation(Angle);//设置转角
//        pBlkRef->setScaleFactors( XrefScale);//设置放大比例


        AcDbBlockTable *curpBlockTable = NULL;
        pDbMS->getSymbolTable(curpBlockTable, AcDb::kForRead);
       
        AcDbBlockTableRecord *curpBlockTableRecord;
        curpBlockTable->getAt(ACDB_MODEL_SPACE, curpBlockTableRecord, AcDb::kForWrite);
        curpBlockTable->close();
        AcDbObjectId newEntId;
        curpBlockTableRecord->appendAcDbEntity(newEntId, pBlkRef);
        curpBlockTableRecord->close();
        pBlkRef->close();

        delete tempDb;
       
        pDbMS->saveAs("F:\\FENGH\\program\\AutoCAD\\ObjectARX\\LibMag\\sel.dwg");
        delete pDbMS;

        return;
}

goldenshin 发表于 2003-4-29 16:41:00

The first problem is: wblock()

in the ->wblock(tempDb) , you don't need to run the
tempDb=new AcDbDataBase();
页: [1]
查看完整版本: 困惑!!