|
// 设置视口范围
static void SetViewportExtents(AcDbViewport* pVp, AcGePoint2d& max, AcGePoint2d& min, double height)
{
// 设置视图中心
AcGePoint2d ViewCenter;
ViewCenter[X] = (max[X] + min[X]) / 2.0;
ViewCenter[Y] = (max[Y] + min[Y]) / 2.0;
pVp->setViewCenter(ViewCenter);
// 设置视图高 + 0.5
pVp->setViewHeight((max[Y] - min[Y]) + 0.5);
// 获取宽度与高度成正比
double WidthHeightRatio = (max[X] - min[X]) / (max[Y] - min[Y]);
pVp->setHeight(height);
// 视口的宽度保持范围窗口的比例
pVp->setWidth(height * WidthHeightRatio);
}
// 在视口的 x-y 平面中获取一个矩形窗口,表示绘图的范围
static void getUcsExts(AcGePoint2d& maxExt, AcGePoint2d& minExt, AcGeMatrix3d UcsMat)
{
AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
AcGePoint3d max = pDb->extmax(), min = pDb->extmin();
// 矩形
AcDbExtents ext(min, max);
// 将范围转换为 UCS
ext.transformBy(UcsMat);
max = ext.maxPoint();
min = ext.minPoint();
maxExt[X] = max[X];
maxExt[Y] = max[Y];
minExt[X] = min[X];
minExt[Y] = min[Y];
} |
|