本文整理汇总了C++中Box2d::intersectWith方法的典型用法代码示例。如果您正苦于以下问题:C++ Box2d::intersectWith方法的具体用法?C++ Box2d::intersectWith怎么用?C++ Box2d::intersectWith使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Box2d
的用法示例。
在下文中一共展示了Box2d::intersectWith方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setClipBox
bool GiGraphics::setClipBox(const RECT_2D& rc)
{
if (m_impl->drawRefcnt < 1)
return false;
bool ret = false;
Box2d rect;
if (!rect.intersectWith(Box2d(rc), Box2d(m_impl->clipBox0)).isEmpty())
{
if (rect != Box2d(m_impl->clipBox))
{
rect.get(m_impl->clipBox);
m_impl->rectDraw.set(Box2d(rc));
m_impl->rectDraw.inflate(GiGraphicsImpl::CLIP_INFLATE);
m_impl->rectDrawM = m_impl->rectDraw * xf().displayToModel();
m_impl->rectDrawW = m_impl->rectDrawM * xf().modelToWorld();
SafeCall(m_impl->canvas, clipRect(m_impl->clipBox.left, m_impl->clipBox.top,
m_impl->clipBox.width(),
m_impl->clipBox.height()));
}
ret = true;
}
return ret;
}
示例2: setClipWorld
bool GiGraphics::setClipWorld(const Box2d& rectWorld)
{
bool ret = false;
if (isDrawing() && !rectWorld.isEmpty())
{
Box2d box (rectWorld * xf().worldToDisplay());
box.intersectWith(Box2d(m_impl->clipBox0));
if (!box.isEmpty(Tol(1, 0)))
{
if (box != Box2d(m_impl->clipBox))
{
box.get(m_impl->clipBox);
m_impl->rectDraw = box;
m_impl->rectDraw.inflate(GiGraphicsImpl::CLIP_INFLATE);
m_impl->rectDrawM = m_impl->rectDraw * xf().displayToModel();
m_impl->rectDrawW = m_impl->rectDrawM * xf().modelToWorld();
SafeCall(m_impl->canvas, _clipBoxChanged(m_impl->clipBox));
}
ret = true;
}
}
return ret;
}
示例3: drawImage
bool GiCanvasGdipImpl::drawImage(G::Bitmap* pBmp, const Box2d& rectW, bool fast)
{
RECT_2D rc, rcDraw, rcFrom;
Box2d rect;
float width = (float)pBmp->GetWidth();
float height = (float)pBmp->GetHeight();
// rc: 整个图像对应的显示坐标区域
(rectW * gs()->xf().worldToDisplay()).get(rc);
// rcDraw: 图像经剪裁后的可显示部分
gs()->getClipBox(rcDraw);
if (rect.intersectWith(Box2d(rc), Box2d(rcDraw)).isEmpty())
return false;
rect.get(rcDraw);
// rcFrom: rcDraw在原始图像上对应的图像范围
rcFrom.left = (rcDraw.left - rc.left) * width / (rc.right - rc.left);
rcFrom.top = (rcDraw.top - rc.top) * height / (rc.bottom - rc.top);
rcFrom.right = (rcDraw.right - rc.left) * width / (rc.right - rc.left);
rcFrom.bottom = (rcDraw.bottom - rc.top) * height / (rc.bottom - rc.top);
// 根据rectW正负决定是否颠倒显示图像
if (rectW.xmin > rectW.xmax)
mgSwap(rcDraw.left, rcDraw.right);
if (rectW.ymin > rectW.ymax)
mgSwap(rcDraw.top, rcDraw.bottom);
G::InterpolationMode nOldMode = getDrawGs()->GetInterpolationMode();
getDrawGs()->SetInterpolationMode( (!fast || gs()->isPrint())
? G::InterpolationModeBilinear : G::InterpolationModeLowQuality);
G::Status ret = getDrawGs()->DrawImage(pBmp,
G::RectF(rcDraw.left, rcDraw.top,
rcDraw.right - rcDraw.left,
rcDraw.bottom - rcDraw.top),
rcFrom.left, rcFrom.top,
rcFrom.right - rcFrom.left,
rcFrom.bottom - rcFrom.top,
G::UnitPixel);
getDrawGs()->SetInterpolationMode(nOldMode);
return G::Ok == ret;
}