乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 53|回复: 3

插入块的问题,致命错误

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 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();
}
编译没有问题,运行时,只要到了要关闭当前的图纸时,就有问题,致命错误。
能保存能另存为。不能打开别的图纸,不能关闭当前图纸。
如果手动将插入的块删掉再关闭,还是有问题。
请高手帮忙
回复

使用道具 举报

2

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
11
发表于 2009-7-15 20:26:00 | 显示全部楼层
用Release编译试试,不要用Debug
或者输入SDI  0
不知道对不对
回复

使用道具 举报

0

主题

31

帖子

4

银币

初来乍到

Rank: 1

铜币
31
发表于 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();
给你串能正常执行的代码,自己瞧瞧看自己存在哪方面的问题。至于你的代码我实在没得时间看了。自己写省事儿……。
回复

使用道具 举报

0

主题

38

帖子

1

银币

初来乍到

Rank: 1

铜币
38
发表于 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();宏即可实现临时锁定文档的功能。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 01:00 , Processed in 0.319267 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表