明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2414|回复: 1

请教:创建一个新布局,并在新布局上插入图块.

[复制链接]
发表于 2012-4-9 16:50:06 | 显示全部楼层 |阅读模式
创建一个新布局:

  1. AcDbBlockTableRecord* CViewPort::CreatNewLayout(CString strLayoutName)
  2. {
  3.     AcDbLayout *pLayout = NULL;
  4.          AcDbBlockTableRecord *pBlkTblRec= NULL;
  5.     pLayout = acdbHostApplicationServices()->
  6.             layoutManager()->findLayoutNamed(strLayoutName);

  7.     if (pLayout)
  8.     {
  9.         acutPrintf(_T("\n布局 %s 已存在"), strLayoutName);
  10.         pLayout->close();
  11.         return pBlkTblRec;
  12.     }

  13.     Acad::ErrorStatus es;
  14.     AcDbBlockTable *pBlkTbl = NULL;
  15.    
  16.     AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
  17.     es = pDb->getBlockTable(pBlkTbl, AcDb::kForWrite);
  18.         if (Acad::eOk != es)
  19.         {
  20.                 return pBlkTblRec;
  21.         }

  22.     pBlkTblRec = new AcDbBlockTableRecord;
  23.     es = pBlkTblRec->setName(_T("*Paper_Space"));        // 块表记录名称
  24.         if (Acad::eOk != es)
  25.         {
  26.                 return pBlkTblRec;
  27.         }
  28.    
  29.     es = pBlkTbl->add(recId, pBlkTblRec);
  30.     pBlkTblRec->close();
  31.     pBlkTbl->close();

  32.     pLayout = new AcDbLayout;                            // 创建新的布局
  33.     es = pLayout->setLayoutName(strLayoutName);          // 布局显示名称
  34.     es = pLayout->addToLayoutDict(pDb,recId);
  35.     pLayout->close();

  36.     acedCommand(RTSTR, _T("REGEN"), RTNONE);
  37.     return pBlkTblRec;
  38. }
复制代码


创建好后, 我再将一个外部的DWG文件作为一个块插入到新建的布局中

  1. bool CEntSet::InsBlk(CString strBlkName,AcGePoint3dArray ptArr)
  2. {
  3.         Acad::ErrorStatus es;
  4.         AcDbBlockTable *pBlkTbl = NULL;
  5.         es = acdbHostApplicationServices()->workingDatabase()
  6.                 ->getBlockTable(pBlkTbl, AcDb::kForRead);

  7.         if (Acad::eOk != es)
  8.         {
  9.                 acutPrintf(_T("\n获取块表失败"));
  10.                 return false;
  11.         }

  12.         if(!pBlkTbl->has(strBlkName))
  13.         {
  14.                 acutPrintf(_T("\n当前图形中未包含此块:%s"), strBlkName);
  15.                 pBlkTbl->close();
  16.                 return false;
  17.         }

  18.         AcDbObjectId blkTRecId;
  19.         es = pBlkTbl->getAt(strBlkName, blkTRecId);                // 获取块表ID
  20.         if(Acad::eOk != es)
  21.         {
  22.                 return false;
  23.         }

  24.         // 新建块表引用
  25.         AcGePoint3d ptOri(0,0,0);
  26.         AcDbBlockReference *pBlkRef = new AcDbBlockReference(ptOri,blkTRecId);
  27.        
  28.         // 得到图纸空间块表记录
  29.         AcDbBlockTableRecord *pBlkTblRec = NULL;
  30.         es = pBlkTbl->getAt(_T("*Paper_Space"), pBlkTblRec, AcDb::kForWrite);
  31.         pBlkTbl->close();

  32.         AcDbObjectId objId;
  33.         es = pBlkTblRec->appendAcDbEntity(objId, pBlkRef);        // 加入图纸空间

  34.         CString strFrmName;
  35.         int nPos = g_strFramePath.ReverseFind(_T('\\'));
  36.         strFrmName = g_strFramePath.Mid(nPos+1);
  37.         strFrmName = strFrmName.TrimRight(_T(".dwg"));

  38.         pBlkRef->close();
  39.         pBlkTblRec->close();
  40.         acedCommand(RTSTR, _T("REGEN"), RTNONE);
  41.         return true;       
  42. }
复制代码



现在的问题是, 每次都都插在"布局1"上, 怎么使这个块插入到新建的布局空间上呢?  谢谢啊


发表于 2013-6-22 02:33:16 | 显示全部楼层
期待高手路过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 06:31 , Processed in 0.148448 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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