找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 921|回复: 4

[求助]:图块插入的问题

[复制链接]
发表于 2007-4-6 12:15:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在插入块时.
如果当前文挡没有指定的块名
怎样做到像CAD名命令INSERT那样
没找到就搜索CAD的所有支持路径.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-4-9 15:05:45 | 显示全部楼层

当然可以啊

当然可以啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-10 16:40:36 | 显示全部楼层
没有指定的块名时
那段程序怎么写?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-4-26 11:30:41 | 显示全部楼层
如果插入失败,你可以将条件转向其它路径的搜索,不可以吗?或者在插入前遍历块定义
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-25 09:17:14 | 显示全部楼层
aAcDbObjectId CAdsGraphics::InsertBlock(LPCTSTR BlockName, CAdsPoint &BasePoint,ds_real Scale,ads_real Angle) const
{
//插入块
        AcDbObjectId ObjectId = GetBlockId(BlockName);

        if (ObjectId==AcDbObjectId::kNull)
        {
                return AcDbObjectId::kNull;
        }

        AcDbBlockReference *pBlkRef = new AcDbBlockReference(BasePoint,ObjectId);
        pBlkRef->setScaleFactors(AcGeScale3d(Scale,Scale,1.0));
        pBlkRef->setRotation(Angle);

        ObjectId = AcDbObjectId::kNull;
       
        ObjectId = AddEntity(pBlkRef);

    pBlkRef->close();

        return ObjectId;
}

AcDbObjectId CAdsGraphics::GetBlockId(LPCTSTR BlockName) const
{
       
        AcDbBlockTable *pBlockTable = NULL;
        AcDbDatabase *pDb = CUR_DB;

        pDb->getSymbolTable(pBlockTable,AcDb::kForWrite);
        if (pBlockTable==NULL)
        {
                return AcDbObjectId::kNull;
        }

        AcDbObjectId ObjectId=AcDbObjectId::kNull;

        if (pBlockTable->has(BlockName))
        {
                pBlockTable->getAt(BlockName,ObjectId);
                pBlockTable->close();
                return ObjectId;
        }

        CString FileName;
        CString strBlockName=BlockName;
       
        if (strBlockName.Right(4)!=".dwg")
        {
                strBlockName+=".dwg";
        }

        acedFindFile(strBlockName,FileName.GetBuffer(MAX_PATH));
        FileName.ReleaseBuffer();

        if (FileName.IsEmpty())
        {
                pBlockTable->close();
                return AcDbObjectId::kNull;
        }

        AcDbDatabase *pDwg =new AcDbDatabase (Adesk::kFalse) ;
        if(Acad::eOk!=pDwg->readDwgFile (FileName))
        {
                pBlockTable->close();
                return AcDbObjectId::kNull;
        }

        AcDbBlockTableIterator *pIterator=NULL;
        AcDbBlockTable *pDwgBlockTable = NULL;
        AcDbBlockTableRecord * pBlockTableRecord = NULL;
        if (Acad::eOk!=pDwg->getBlockTable(pDwgBlockTable,AcDb::kForWrite))
        {
                delete pDwg;
                pBlockTable->close();
                return AcDbObjectId::kNull;
        }

        //遍历所有发表块表记录,把所有相同的块删除
        pDwgBlockTable->newIterator(pIterator);
        for (pIterator->start();!pIterator->done();pIterator->step())
        {
                if (Acad::eOk!=pIterator->getRecord(pBlockTableRecord,AcDb::kForWrite))
                {
                        pDwgBlockTable->close();
                        pBlockTable->close();
                        delete pDwg;
                        return AcDbObjectId::kNull;
                }

                LPSTR pName = NULL;
                pBlockTableRecord->getName(pName);
        CString sName=pName;
                delete pName;

        AcDbObjectId BlockId=pBlockTableRecord->id();
         
                if (pBlockTable->has(sName))
                {
                        if (sName[0]!='*')
                        {
                                pBlockTableRecord->erase();
                        }
                }
                pBlockTableRecord->close();
        }
        pDwgBlockTable->close();
        pBlockTable->close();

        CString strName(BlockName);
        if (strName.Right(4)==".dwg")
        {
                int index=strName.ReverseFind('\\');
                strName=strName.Mid(index+1);
                strName=strName.Left(strName.GetLength()-4);
        }
        if (Acad::eOk!=pDb->insert(ObjectId,_T(strName),pDwg))
        {
                delete pDwg;
                return AcDbObjectId::kNull;
        }

        delete pDwg;
        return ObjectId;
}

AcDbObjectId CAdsGraphics::AddEntity(AcDbEntity * pEnt ,
                                                                         BOOL bInit /*= TRUE */,
                                                                         AcDbDatabase* pDb /*= NULL */,
                                                                         BOOL bClose /*= FALSE */ ) const
{
        AcDbObjectId idNew=AcDbObjectId::kNull;
        AcDbBlockTableRecord *pRecord=NULL;
       
        if(pDb==NULL)
    {
                pRecord = GetBlockTableRecord();
    }
        else
        {
                AcDbBlockTable *pTable=NULL;
                pDb->getBlockTable(pTable, AcDb::kForRead);
                if(pTable==NULL)
                {
                        return idNew;
                }
               
                pTable->getAt(ACDB_MODEL_SPACE,pRecord,AcDb::kForWrite);
                pTable->close();
                if(pRecord==NULL)
                {
                        return idNew;
                }
        }

        if (bInit)
        {
                pEnt->setColor(m_Color);
                pEnt->setLayer(m_Layer);
                pEnt->setLinetype(m_LineType);
        }

       
        pRecord->appendAcDbEntity(idNew,pEnt);
        pRecord->close();
       
        if(bClose)
        {
                pEnt->close();
        }
       
        return idNew;        
       
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-11 08:38 , Processed in 0.188363 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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