ObjectARX_符号表---->视口

VPORTS 命令:视口

AcDbViewportTableRecord 类表示模型空间的视口(在 AutoCAD 中称为平铺视口) ,
AcDbViewport 类则表示图纸空间的视口(在 AutoCAD 中称为浮动视口) 。

创建4个等大的视口:

void ZffCHAP4Create4VPorts()
{
// 获得视口表
AcDbViewportTable *pVPortTbl = NULL;
acdbHostApplicationServices()->workingDatabase()->getViewportTable(pVPortTbl, AcDb::kForWrite);

// 分别创建四个视口
AcGePoint2d pt1, pt2;
AcDbViewportTableRecord *pVPortTblRcd1=new AcDbViewportTableRecord;
pt1.set(0, 0);
pt2.set(0.5, 0.5);
pVPortTblRcd1->setLowerLeftCorner(pt1);
pVPortTblRcd1->setUpperRightCorner(pt2);
pVPortTblRcd1->setName("4VPorts");

AcDbViewportTableRecord *pVPortTblRcd2=new AcDbViewportTableRecord;
pt1.set(0.5, 0);
pt2.set(1, 0.5);
pVPortTblRcd2->setLowerLeftCorner(pt1);
pVPortTblRcd2->setUpperRightCorner(pt2);
pVPortTblRcd2->setName("4VPorts");

AcDbViewportTableRecord *pVPortTblRcd3=new AcDbViewportTableRecord;
pt1.set(0, 0.5);
pt2.set(0.5, 1);
pVPortTblRcd3->setLowerLeftCorner(pt1);
pVPortTblRcd3->setUpperRightCorner(pt2);
pVPortTblRcd3->setName("4VPorts");

AcDbViewportTableRecord *pVPortTblRcd4=new AcDbViewportTableRecord;
pt1.set(0.5, 0.5);
pt2.set(1, 1);
pVPortTblRcd4->setLowerLeftCorner(pt1);
pVPortTblRcd4->setUpperRightCorner(pt2);
pVPortTblRcd4->setName("4VPorts");
 
pVPortTbl->add(pVPortTblRcd1);
pVPortTbl->add(pVPortTblRcd2);
pVPortTbl->add(pVPortTblRcd3);
pVPortTbl->add(pVPortTblRcd4);
pVPortTbl->close(); 
pVPortTblRcd1->close();
pVPortTblRcd2->close();
pVPortTblRcd3->close();
pVPortTblRcd4->close();

struct resbuf rb;
acedGetVar("TILEMODE", &rb);
if (rb.resval.rint == 1)  // 当前工作空间是模型空间
{
acedCommand(RTSTR, ".-VPORTS", RTSTR, "R",RTSTR, "4VPorts", RTNONE);
}
else // 当前工作空间是图纸空间
{
acedCommand(RTSTR, ".-VPORTS", RTSTR, "R",RTSTR, "4VPorts", RTSTR, "", RTNONE);
}
}

图纸空间创建一个新的视口:

void ZffCHAP4CreateVPortInSpace()
{
// 指定当前布局
Acad::ErrorStatus es = acdbHostApplicationServices()->layoutManager()->setCurrentLayout("布局1"); 
if (es != Acad::eOk)
{
return;
}

// 获得块表
AcDbBlockTable *pBlkTbl = NULL;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForRead);

// 获得图纸空间的块表记录
AcDbBlockTableRecord *pBlkTblRcd = NULL;
pBlkTbl->getAt(ACDB_PAPER_SPACE, pBlkTblRcd,AcDb::kForWrite);
pBlkTbl->close();

// 创建新的布局对象
AcDbViewport *pViewport = new AcDbViewport();
pViewport->setCenterPoint(AcGePoint3d(100, 50, 0));
pViewport->setHeight(80);
pViewport->setWidth(120);

// 将新的布局对象添加到图纸空间块表记录中
AcDbObjectId viewportId;
pBlkTblRcd->appendAcDbEntity(viewportId, pViewport);
pViewport->close();
pBlkTblRcd->close();

// 将新建的视口作为当前视口
AcDbViewport *pVP = NULL;
acdbOpenObject(pVP, viewportId, AcDb::kForWrite);
pViewport->setOn();//创建浮动视口之后,要想启用该视口,必须使用 setOn 函数
acedSetCurrentVPort(pVP);
pVP->close(); 
}

 

转载于:https://my.oschina.net/u/2930533/blog/1618928

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值