Esempio n. 1
0
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);

}