明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2830|回复: 3

插入块的问题,致命错误

[复制链接]
发表于 2005-4-11 11:16:00 | 显示全部楼层 |阅读模式
//设置好文件名称 插入点 插入角度 后调用此函数完成
void InsertTo_Demo(CString dwgFileName,AcGePoint3d ptInsert ,float fAngle)
{

AcDbObjectId id;
AcDbDatabase *pDatabase;
AcDbDatabase *pdb;
pDatabase=new AcDbDatabase(FALSE);
HRESULT hr = S_OK;
hr=pDatabase->readDwgFile(baseFunc->CStringToPChar(dwgFileName));
if (hr!=S_OK)
{
CString strError;
strError.Format("读取%s文件时出错!可能版本不匹配!",dwgFileName);
AfxMessageBox(strError);
return;
}
pdb=acdbHostApplicationServices()->workingDatabase();
pdb->insert(id,
baseFunc->CStringToPChar(dwgFileName),pDatabase);
//delete pDatabase;
pDatabase=NULL;
AcDbBlockTable *pTable=NULL;
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pTable,
AcDb::kForRead);

ASSERT(pTable!=NULL);
AcDbBlockTableRecord *pModelSpace;
pTable->getAt(ACDB_MODEL_SPACE,pModelSpace,AcDb::kForWrite);
pTable->close();
AcDbBlockReference *pBlockRef;
pBlockRef=new AcDbBlockReference(ptInsert,id);

pBlockRef->setRotation(fAngle);
AcGeScale3d scale;
scale.sx=1;
scale.sy=1;
scale.sz=1;
pBlockRef->setScaleFactors (scale);
pModelSpace->appendAcDbEntity(pBlockRef);
pModelSpace->close();
pBlockRef->close();
}
编译没有问题,运行时,只要到了要关闭当前的图纸时,就有问题,致命错误。 能保存能另存为。不能打开别的图纸,不能关闭当前图纸。 如果手动将插入的块删掉再关闭,还是有问题。 请高手帮忙
发表于 2009-7-15 20:26:00 | 显示全部楼层
用Release编译试试,不要用Debug
或者输入SDI  0
不知道对不对
发表于 2009-7-17 01:18:00 | 显示全部楼层
        AcDbDatabase *pDb=new AcDbDatabase();
        pDb->readDwgFile("d:\\test.dwg");
        AcDbObjectId id;
        acdbCurDwg()->insert(id,"测试",pDb);
        delete pDb;
        AcGePoint3d pos(0,0,0);
        AcDbBlockReference *pRef=new AcDbBlockReference(pos,id);
        AcDbBlockTable *pBlk=NULL;
        AcDbBlockTableRecord *pBlkR=NULL;
        acdbCurDwg()->getBlockTable(pBlk,OpenMode::kForRead);
        pBlk->getAt(ACDB_MODEL_SPACE,pBlkR,OpenMode::kForWrite);
        pBlk->close();
        if (Acad::ErrorStatus::eOk!=pBlkR->appendAcDbEntity(pRef))
        {
            delete pRef;
        }
        else
        {
            pRef->close();
        }
        pBlkR->close();
给你串能正常执行的代码,自己瞧瞧看自己存在哪方面的问题。至于你的代码我实在没得时间看了。自己写省事儿……。
发表于 2009-7-19 20:50:00 | 显示全部楼层

如果在多文档环境下,使用pDb->readDwgFile("d:\\test.dwg");函数需要锁定文档,可以使用如下代码来实现临时锁定文档,

class AFX_CLASS_EXPORT CTempDocLockOverride
{
public:
 CTempDocLockOverride();
 virtual ~CTempDocLockOverride();

private:
 AcApDocument* m_pDoc;
};

CTempDocLockOverride::CTempDocLockOverride()
{
 m_pDoc = acDocManager->curDocument();
 if(m_pDoc)
  acDocManager->lockDocument(m_pDoc);
}

CTempDocLockOverride::~CTempDocLockOverride()
{
 acDocManager->unlockDocument(m_pDoc);
}

//暂时锁定当前文档
#define  TEMPDOCLOCK()   CTempDocLockOverride tempDocLock;

使用 TEMPDOCLOCK();宏即可实现临时锁定文档的功能。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 14:29 , Processed in 0.166248 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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