bool SnapPivot_Mode::DrawBounds(ViewExp *vpt, bool hitTest, bool hightLight, Point3& hitPoint)
{
	if (mPreviewMesh == nullptr) return false;

	GraphicsWindow *gw = vpt->getGW();

	gw->setTransform(mBoundingTM);

	if (hitTest)
	{
		gw->setRndLimits(gw->getRndLimits() | GW_PICK);
		gw->clearHitCode();
	}


	Box3 bounds;
	bounds.Init();

	bool useSel = false;
	for (int i = 0; i < mPreviewMesh->numv; i++)
	{
		if (mPreviewMesh->v[i].GetFlag(MN_DEAD)) continue;
		if (mPreviewMesh->v[i].GetFlag(MN_SEL))
		{
			useSel = true;
			break;
		}
	}

	Matrix3 tm;
	Matrix3 boundsTMInverse;
	boundsTMInverse = Inverse(mBoundingTM);
	tm = mMeshTM * boundsTMInverse;

	for (int i = 0; i < mPreviewMesh->numv; i++)
	{
		if (mPreviewMesh->v[i].GetFlag(MN_DEAD)) continue;
		if (useSel)
		{
			if (mPreviewMesh->v[i].GetFlag(MN_SEL))
				bounds += mPreviewMesh->v[i].p*tm;
		}
		else

			bounds += mPreviewMesh->v[i].p*tm;

	}
	
	
	Point3 p[9];	
	gw->setColor(ColorType::LINE_COLOR, mBoundsColor);

	gw->startMarkers();


	p[0] = bounds[0];
	p[1] = bounds[1];
	p[2] = bounds[2];
	p[3] = bounds[3];
	bool hit = DrawBoxFace(gw, p, hitTest, hitPoint);
	if (hit && hitTest)
		return true;

	p[0] = bounds[4];
	p[1] = bounds[5];
	p[2] = bounds[6];
	p[3] = bounds[7];
	hit = DrawBoxFace(gw, p, hitTest, hitPoint);
	if (hit && hitTest)
		return true;

	p[0] = (bounds[0] + bounds[4])*0.5f;
	p[1] = (bounds[1] + bounds[5])*0.5f;
	p[2] = (bounds[2] + bounds[6])*0.5f;
	p[3] = (bounds[3] + bounds[7])*0.5f;
	hit = DrawBoxFace(gw, p, hitTest, hitPoint);
	if (hit && hitTest)
		return true;



	gw->endMarkers();

	Point3 edgeColor(mBoundsColor);
	edgeColor *= 0.8f;
	gw->setColor(ColorType::LINE_COLOR, edgeColor);

	gw->startSegments();

	p[0] = bounds[0];
	p[1] = bounds[1];
	p[2] = bounds[3];
	p[3] = bounds[2];
	p[4] = bounds[0];
	for (int i = 0; i < 4; i++)
		gw->segment(&p[i], 1);

	p[0] = bounds[4];
	p[1] = bounds[5];
	p[2] = bounds[7];
	p[3] = bounds[6];
	p[4] = bounds[4];
	for (int i = 0; i < 4; i++)
		gw->segment(&p[i], 1);


	p[0] = bounds[0];
	p[1] = bounds[4];
	gw->segment(&p[0], 1);

	p[0] = bounds[1];
	p[1] = bounds[5];
	gw->segment(&p[0], 1);

	p[0] = bounds[2];
	p[1] = bounds[6];
	gw->segment(&p[0], 1);

	p[0] = bounds[3];
	p[1] = bounds[7];
	gw->segment(&p[0], 1);




	gw->endSegments();

	
	return false;
}