明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3448|回复: 4

哪位大侠知道怎样创建一个新的布局并在此布局中创建一个新的视口?

[复制链接]
发表于 2007-8-27 15:14:00 | 显示全部楼层 |阅读模式
哪位大侠知道创建一个新的布局并在此布局中创建一个新的视口?能给出一些示例代码吗?非常感谢
 楼主| 发表于 2007-12-5 11:06:00 | 显示全部楼层
我已解决此问题
发表于 2007-12-7 14:27:00 | 显示全部楼层
怎么解决的啊?能否赐教一下啊?
发表于 2008-4-3 15:17:00 | 显示全部楼层

jichu

发表于 2012-3-29 09:29:25 | 显示全部楼层
视楼主为粪土!

  1. //************************************************
  2. // = 函数名称:  创建新的布局
  3. // = 函数说明:  在图纸空间中以指定的名称
  4. //                                strLayoutName创建新的布局
  5. // = 返回值:    创建成功/失败 T/F
  6. // = 参数:
  7. //                               
  8. // = 维护记录:
  9. //
  10. //************************************************

  11. bool CViewPort::CreatNewLayout(CString strLayoutName)
  12. {
  13.         AcDbLayout *pLayout = NULL;
  14.         pLayout = acdbHostApplicationServices()->
  15.                 layoutManager()->findLayoutNamed(strLayoutName);

  16.         if (pLayout)
  17.         {
  18.                 acutPrintf(_T("\n布局 %s 已存在"), strLayoutName);
  19.                 pLayout->close();
  20.                 return false;
  21.         }

  22.         Acad::ErrorStatus es;
  23.         AcDbBlockTable *pBlkTbl = NULL;
  24.         AcDbBlockTableRecord *pBlkTblRec= NULL;
  25.        
  26.         AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
  27.         es = pDb->getBlockTable(pBlkTbl, AcDb::kForWrite);

  28.         pBlkTblRec = new AcDbBlockTableRecord;
  29.         es = pBlkTblRec->setName(_T("*Paper_space"));        // 块表记录名称

  30.         AcDbObjectId recId;
  31.         es = pBlkTbl->add(recId, pBlkTblRec);
  32.         pBlkTblRec->close();
  33.         pBlkTbl->close();

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

  37.         AcDbObjectId layoutId;
  38.         pLayout->initialize(&layoutId);
  39.         pLayout->close();

  40.         acedCommand(RTSTR, _T("REGEN"), RTNONE);
  41.         return true;
  42. }
复制代码

  1. //************************************************
  2. // = 函数名称:  创建一个图纸空间视口
  3. // = 函数说明:  在布局空间中指定一个矩形,创建矩形大小的视口
  4. // = 返回值:    创建成功/失败 T/F
  5. // = 参数:
  6. //                               
  7. // = 维护记录:
  8. //
  9. //************************************************
  10. bool CViewPort::CreatLayoutViewPort(AcGePoint3dArray ptArr)
  11. {
  12.         Acad::ErrorStatus es;
  13.        
  14.         const ACHAR *pCh = new ACHAR[124];
  15.         pCh = acdbHostApplicationServices()->layoutManager()
  16.                 ->findActiveLayout(false);

  17.         es = acdbHostApplicationServices()->layoutManager()
  18.                 ->setCurrentLayout(pCh);

  19.         if (Acad::eOk != es)
  20.         {
  21.                 acutPrintf(_T("fail"));
  22.                 return false;
  23.         }

  24.         // 获取块表
  25.         AcDbBlockTable *pBlkTbl = NULL;
  26.         es = acdbHostApplicationServices()->workingDatabase()
  27.                 ->getBlockTable(pBlkTbl, AcDb::kForRead);

  28.         if (Acad::eOk != es)
  29.         {
  30.                 return false;
  31.         }

  32.         // 得到图纸空间中的块表记录
  33.         AcDbBlockTableRecord *pBlkTblRec = NULL;
  34.         pBlkTbl->getAt(ACDB_PAPER_SPACE, pBlkTblRec, AcDb::kForWrite);
  35.         pBlkTbl->close();
  36.        
  37.         int nNum = ptArr.length();
  38.         AcGePoint3d pt1, pt2, pt3, pt4;

  39.         pt1 = ptArr.at(1);
  40.         pt2 = ptArr.at(2);
  41.         double dWidth = fabs(pt1.x - pt2.x);
  42.         double dHight = fabs(pt1.y - pt2.y);

  43.         AcGePoint3d ptCent((pt1.x+pt2.x)/2, (pt1.y+pt2.y)/2, 0);
  44.        
  45.         // 新建一个视口
  46.         AcDbViewport *pViewPt = new AcDbViewport;
  47.         pViewPt->setCenterPoint(ptCent); // 设置中点
  48.         pViewPt->setHeight(dHight);                 // 设置大小
  49.         pViewPt->setWidth(dWidth);
  50.         pViewPt->setColorIndex(1);

  51.         AcDbObjectId viewptId;
  52.         pBlkTblRec->appendAcDbEntity(viewptId, pViewPt);
  53.         pViewPt->setOn();                                // 激活
  54.         pViewPt->close();
  55.         pBlkTblRec->close();

  56.         //acdbHostApplicationServices()->layoutManager()->findLayoutNamed(_T("test"));

  57.         return true;
  58. }
复制代码

评分

参与人数 1金钱 +5 收起 理由
王阿非 + 5 很给力!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-25 09:32 , Processed in 0.169399 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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