void Label::Draw(const Point2i& /*mousePosition*/) { switch (align) { case Text::ALIGN_CENTER: DrawCenter(position + size/2); break; case Text::ALIGN_CENTER_TOP: DrawCenterTop(Point2i(position.x + size.x/2, position.y)); break; case Text::ALIGN_CENTER_BOTTOM: DrawCenterBottom(Point2i(position.x + size.x/2, position.y + size.y)); break; case Text::ALIGN_LEFT_CENTER: DrawLeftCenter(Point2i(position.x, position.y + size.y/2)); break; case Text::ALIGN_RIGHT_CENTER: DrawRightCenter(Point2i(position.x + size.x, position.y + size.y/2)); break; case Text::ALIGN_RIGHT_TOP: DrawRightTop(Point2i(position.x + size.x, position.y)); break; case Text::ALIGN_LEFT_TOP: default: DrawLeftTop(position); break; } }
//from ViewportDisplayCallback void SnapPivot_Mode::Display(TimeValue t, ViewExp *vpt, int flags) { if (!vpt || !vpt->IsAlive()) { // why are we here DbgAssert(!_T("Invalid viewport!")); return; } GraphicsWindow *gw = vpt->getGW(); int savedLimits; gw->setRndLimits((savedLimits = gw->getRndLimits()) & (~GW_ILLUM) & GW_Z_BUFFER); gw->setTransform(mMeshTM); //draw mesh preview hight light if ((mProc.mPreviewSubLevel >= 1) && (mProc.mPreviewSubLevel <= 3) && (mPreviewMesh!=nullptr)) { gw->setColor(ColorType::LINE_COLOR, mMeshPreviewColor); if (mProc.mPreviewSubLevel == 1) { Point3 p = mPreviewMesh->v[mProc.mPreviewSubIndex].p; gw->startMarkers(); gw->marker(&p, MarkerType::CIRCLE_MRKR); gw->endMarkers(); } else if (mProc.mPreviewSubLevel == 2) { int a = mPreviewMesh->e[mProc.mPreviewSubIndex].v1; int b = mPreviewMesh->e[mProc.mPreviewSubIndex].v2; Point3 p[3]; p[0] = mPreviewMesh->v[a].p; p[1] = mPreviewMesh->v[b].p; gw->startSegments(); gw->segment(p, 1); gw->endSegments(); } else if (mProc.mPreviewSubLevel == 3) { MNFace& f = mPreviewMesh->f[mProc.mPreviewSubIndex]; int deg = f.deg; Point3 p[3]; gw->startSegments(); for (int i = 0; i < deg; i++) { int index1 = f.vtx[i]; int index2 = f.vtx[0]; if (i < deg - 1) index2 = f.vtx[i+1]; p[0] = mPreviewMesh->v[index1].p; p[1] = mPreviewMesh->v[index2].p; gw->segment(p, 1); } gw->endSegments(); } } { Point3 p[3]; p[0] = mProc.mHitOnSurface; p[1] = mProc.mHitOnSurface + (mProc.mLastNormal * mSize * 0.1f); gw->startMarkers(); gw->marker(p, MarkerType::DOT2_MRKR); gw->endMarkers(); gw->startSegments(); gw->segment(p, 1); gw->endSegments(); } Point3 hp; DrawBounds(vpt, false, false,hp); gw->setTransform(mSnapTM); float dist = 0.0f; //draw the transform handles DrawAxis(vpt, 0, mSize, false, false, dist); DrawAxis(vpt, 1, mSize, false, false, dist); DrawAxis(vpt, 2, mSize, false, false, dist); //draw the transform planes //draw the rotate handles DrawAxisLock(vpt, 0, mSize, false, false, dist); DrawAxisLock(vpt, 1, mSize, false, false, dist); DrawAxisLock(vpt, 2, mSize, false, false, dist); //draw the scale handles //draw the center hit DrawCenter(vpt, mSize, false, false, dist); gw->setRndLimits(savedLimits); }