找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 85|回复: 2

objextarx创建试图,视口

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-9-24 15:16:23 | 显示全部楼层
创建4个等大的视口:
  1. void ZffCHAP4Create4VPorts()
  2. {
  3. // 获得视口表
  4. AcDbViewportTable *pVPortTbl = NULL;
  5. acdbHostApplicationServices()->workingDatabase()->getViewportTable(pVPortTbl, AcDb::kForWrite);
  6. // 分别创建四个视口
  7. AcGePoint2d pt1, pt2;
  8. AcDbViewportTableRecord *pVPortTblRcd1=new AcDbViewportTableRecord;
  9. pt1.set(0, 0);
  10. pt2.set(0.5, 0.5);
  11. pVPortTblRcd1->setLowerLeftCorner(pt1);
  12. pVPortTblRcd1->setUpperRightCorner(pt2);
  13. pVPortTblRcd1->setName("4VPorts");
  14. AcDbViewportTableRecord *pVPortTblRcd2=new AcDbViewportTableRecord;
  15. pt1.set(0.5, 0);
  16. pt2.set(1, 0.5);
  17. pVPortTblRcd2->setLowerLeftCorner(pt1);
  18. pVPortTblRcd2->setUpperRightCorner(pt2);
  19. pVPortTblRcd2->setName("4VPorts");
  20. AcDbViewportTableRecord *pVPortTblRcd3=new AcDbViewportTableRecord;
  21. pt1.set(0, 0.5);
  22. pt2.set(0.5, 1);
  23. pVPortTblRcd3->setLowerLeftCorner(pt1);
  24. pVPortTblRcd3->setUpperRightCorner(pt2);
  25. pVPortTblRcd3->setName("4VPorts");
  26. AcDbViewportTableRecord *pVPortTblRcd4=new AcDbViewportTableRecord;
  27. pt1.set(0.5, 0.5);
  28. pt2.set(1, 1);
  29. pVPortTblRcd4->setLowerLeftCorner(pt1);
  30. pVPortTblRcd4->setUpperRightCorner(pt2);
  31. pVPortTblRcd4->setName("4VPorts");
  32. pVPortTbl->add(pVPortTblRcd1);
  33. pVPortTbl->add(pVPortTblRcd2);
  34. pVPortTbl->add(pVPortTblRcd3);
  35. pVPortTbl->add(pVPortTblRcd4);
  36. pVPortTbl->close();
  37. pVPortTblRcd1->close();
  38. pVPortTblRcd2->close();
  39. pVPortTblRcd3->close();
  40. pVPortTblRcd4->close();
  41. struct resbuf rb;
  42. acedGetVar("TILEMODE", &rb);
  43. if (rb.resval.rint == 1)  // 当前工作空间是模型空间
  44. {
  45. acedCommand(RTSTR, ".-VPORTS", RTSTR, "R",RTSTR, "4VPorts", RTNONE);
  46. }
  47. else // 当前工作空间是图纸空间
  48. {
  49. acedCommand(RTSTR, ".-VPORTS", RTSTR, "R",RTSTR, "4VPorts", RTSTR, "", RTNONE);
  50. }
  51. }
复制代码

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-9-24 15:17:16 | 显示全部楼层
图纸空间创建一个新的视口:
  1. void ZffCHAP4CreateVPortInSpace()
  2. {
  3. // 指定当前布局
  4. Acad::ErrorStatus es = acdbHostApplicationServices()->layoutManager()->setCurrentLayout("布局1");
  5. if (es != Acad::eOk)
  6. {
  7. return;
  8. }
  9. // 获得块表
  10. AcDbBlockTable *pBlkTbl = NULL;
  11. acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForRead);
  12. // 获得图纸空间的块表记录
  13. AcDbBlockTableRecord *pBlkTblRcd = NULL;
  14. pBlkTbl->getAt(ACDB_PAPER_SPACE, pBlkTblRcd,AcDb::kForWrite);
  15. pBlkTbl->close();
  16. // 创建新的布局对象
  17. AcDbViewport *pViewport = new AcDbViewport();
  18. pViewport->setCenterPoint(AcGePoint3d(100, 50, 0));
  19. pViewport->setHeight(80);
  20. pViewport->setWidth(120);
  21. // 将新的布局对象添加到图纸空间块表记录中
  22. AcDbObjectId viewportId;
  23. pBlkTblRcd->appendAcDbEntity(viewportId, pViewport);
  24. pViewport->close();
  25. pBlkTblRcd->close();
  26. // 将新建的视口作为当前视口
  27. AcDbViewport *pVP = NULL;
  28. acdbOpenObject(pVP, viewportId, AcDb::kForWrite);
  29. pViewport->setOn();//创建浮动视口之后,要想启用该视口,必须使用 setOn 函数
  30. acedSetCurrentVPort(pVP);
  31. pVP->close();
  32. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 21:38 , Processed in 0.107205 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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