Esempio n. 1
0
/** Creates a ball of lines.*/
HRESULT EditorLinePrimitive::CreateLineBallPrimitive(UINT Detail, const D3DXVECTOR4* Color)
{
	// Allocate enough memory for all 3 slices
	LineVertex* vx = new LineVertex[(Detail*3)];

	float Step = (D3DX_PI*2)/((float)Detail-1);
	float s = 0;

	// Create first
	for(UINT i = 0; i < Detail; i++)
	{
		vx[i].Position = D3DXVECTOR3(sinf(s), 0, cosf(s));
			
		EncodeColor(&vx[i], Color);

		s+=Step;
	}

	s=0;

	// Create second
	for(UINT i = Detail; i < Detail*2; i++)
	{
		vx[i].Position = D3DXVECTOR3(0, sinf(s), cosf(s));
			
		EncodeColor(&vx[i], Color);

		s+=Step;
	}

	s=0;

	// Create third
	for(UINT i = Detail*2; i < Detail*3; i++)
	{
		vx[i].Position = D3DXVECTOR3(sinf(s), cosf(s), 0);
			
		EncodeColor(&vx[i], Color);

		s+=Step;
	}

	// Fix the last position
	//vx[(Detail*3)].Position = D3DXVECTOR3(sinf(s), cosf(s), 0);

	HRESULT hr = CreatePrimitive(vx, (Detail*3), D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP);
	delete[] vx;

	return hr;
}
Esempio n. 2
0
/** Creates a cone of lines */
HRESULT EditorLinePrimitive::CreateSimpleConePrimitive(float Length, float Radius, UINT Detail, const D3DXVECTOR4* Color)
{
	UINT NumVerts;
	NumVerts = Detail*2; // Two for each connection line
	NumVerts += Detail*2; // Two for each circle line

	LineVertex* vx = new LineVertex[NumVerts];

	float Step = (D3DX_PI*2)/((float)Detail-1);
	float s = 0;

	UINT i = 0;
	while(i < NumVerts)
	{
		// First vertex of the circle-line
		vx[i].Position = D3DXVECTOR3(Length, (sinf(s)*Radius), cosf(s)*Radius);	
		EncodeColor(&vx[i], Color);
		i++;

		s+=Step;

		// Second vertex of the circle-line
		vx[i].Position = D3DXVECTOR3(Length, (sinf(s)*Radius), cosf(s)*Radius);	
		EncodeColor(&vx[i], Color);

		i++;
		
		// Connector line #1
		vx[i].Position = vx[i-2].Position;
		EncodeColor(&vx[i], Color);
		i++;

		// Connector line #2
		vx[i].Position = D3DXVECTOR3(0, 0, 0);
		EncodeColor(&vx[i], Color);
		i++;

		

		
	}

	HRESULT hr = CreatePrimitive(vx, NumVerts);

	delete[] vx;

	return hr;
}
Esempio n. 3
0
/** Creates an arrow of lines */
HRESULT EditorLinePrimitive::CreateArrowPrimitive(const D3DXVECTOR4* Color,float ArrowRadius, float ArrowOffset)
{
	LineVertex vx[10];

	

	// Middle streak
	vx[0].Position = D3DXVECTOR3(0, 0, 0);
	vx[1].Position = D3DXVECTOR3(1, 0, 0);

	// Outer lines
	vx[2].Position = D3DXVECTOR3(1, 0, 0);
	vx[3].Position = D3DXVECTOR3(ArrowOffset, ArrowRadius, ArrowRadius);

	vx[4].Position = D3DXVECTOR3(1, 0, 0);
	vx[5].Position = D3DXVECTOR3(ArrowOffset, ArrowRadius, -ArrowRadius);

	vx[6].Position = D3DXVECTOR3(1, 0, 0);
	vx[7].Position = D3DXVECTOR3(ArrowOffset, -ArrowRadius, ArrowRadius);

	vx[8].Position = D3DXVECTOR3(1, 0, 0);
	vx[9].Position = D3DXVECTOR3(ArrowOffset, -ArrowRadius, -ArrowRadius);

	for(int i=0; i< 10; i++)
	{
		EncodeColor(&vx[i], Color);
	}
	HRESULT hr = CreatePrimitive(vx, 10);
	return hr;
}
Esempio n. 4
0
void Canvas_setColorRGB(int red, int green, int blue)
{
    CHECK_DRAWING(1);

    if (IN_BOUNDS(red, 0, 255) && IN_BOUNDS(green, 0, 255) && IN_BOUNDS(blue, 0, 255))
    {
        currentColor = EncodeColor(red, green, blue);
    }
}
Esempio n. 5
0
/** Creates a grid of lines */
HRESULT EditorLinePrimitive::CreateLineGrid(int LinesX,int LinesY,D3DXVECTOR2* Middle, D3DXVECTOR4* Color)
{
	HRESULT hr;
	LineVertex* vx = new LineVertex[(LinesX+1)*(LinesY+1)*4];
	UINT CurVertex=0;

	//Fill X based lines
	float x;
	float SpacingX=(1.0f/LinesX);
	for(x= -0.5; x<=0.5f+SpacingX; x+=SpacingX)
	{

		vx[CurVertex].Position=D3DXVECTOR3(x,0,-0.5)+D3DXVECTOR3(Middle->x,0,Middle->y);
		EncodeColor(&vx[CurVertex], Color);
		CurVertex++;
		vx[CurVertex].Position=D3DXVECTOR3(x,0,0.5)+D3DXVECTOR3(Middle->x,0,Middle->y);
		EncodeColor(&vx[CurVertex], Color);
		CurVertex++;
	}

	//Fill Z based lines
	float z;
	float SpacingY=(1.0f/LinesY);
	for(z= -0.5; z<=0.5f+SpacingY; z+=SpacingY)
	{
		vx[CurVertex].Position=D3DXVECTOR3(-0.5,0,z)+D3DXVECTOR3(Middle->x,0,Middle->y);
		EncodeColor(&vx[CurVertex], Color);
		CurVertex++;
		vx[CurVertex].Position=D3DXVECTOR3(0.5,0,z)+D3DXVECTOR3(Middle->x,0,Middle->y);
		EncodeColor(&vx[CurVertex], Color);
		CurVertex++;
	}


	LE(CreatePrimitive(vx, (LinesX+1)*(LinesY+1)*4));

	delete[] vx;
	return hr;
}
Esempio n. 6
0
/** Creates a circle of lines */
HRESULT EditorLinePrimitive::CreateCirclePrimitive(float Radius, UINT Detail, const D3DXVECTOR4* Color, int Axis)
{
	LineVertex* vx = new LineVertex[Detail];

	float Step = (D3DX_PI*2)/((float)Detail-1);
	float s = 0;

	for(UINT i = 0; i < Detail; i++)
	{
		switch(Axis)
		{
		case 0:
			// XZ-Axis
			vx[i].Position = D3DXVECTOR3(sinf(s), 0, cosf(s));
			break;
		
		case 1:
			// YZ-Axis
			vx[i].Position = D3DXVECTOR3(0, sinf(s), cosf(s));
			break;

		case 2:
			// ZY-Axis
			vx[i].Position = D3DXVECTOR3(sinf(s), cosf(s), 0);
			break;
		}
		
		EncodeColor(&vx[i], Color);

		s+=Step;
	}

	HRESULT hr = CreatePrimitive(vx, Detail, D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP);

	delete[] vx;
	return hr;
}
Esempio n. 7
0
/** Creates a box of lines */
HRESULT EditorLinePrimitive::CreateLineBoxPrimitive(D3DXVECTOR4* Color)
{
	LineVertex vx[24];

	// Bottom
	vx[0].Position = D3DXVECTOR3(-1,-1,-1);
	EncodeColor(&vx[0], Color);
	vx[1].Position = D3DXVECTOR3(1,-1,-1);
	EncodeColor(&vx[1], Color);

	vx[2].Position = D3DXVECTOR3(1,-1,-1);
	EncodeColor(&vx[2], Color);
	vx[3].Position = D3DXVECTOR3(1,-1,1);
	EncodeColor(&vx[3], Color);

	vx[4].Position = D3DXVECTOR3(1,-1,1);
	EncodeColor(&vx[4], Color);
	vx[5].Position = D3DXVECTOR3(-1,-1,1);
	EncodeColor(&vx[5], Color);

	vx[6].Position = D3DXVECTOR3(-1,-1,1);
	EncodeColor(&vx[6], Color);
	vx[7].Position = D3DXVECTOR3(-1,-1,-1);
	EncodeColor(&vx[7], Color);

	// Sides | | | |

	vx[8].Position = D3DXVECTOR3(-1,-1,-1);
	EncodeColor(&vx[8], Color);
	vx[9].Position = D3DXVECTOR3(-1,1,-1);
	EncodeColor(&vx[9], Color);

	vx[10].Position = D3DXVECTOR3(1,-1,-1);
	EncodeColor(&vx[10], Color);
	vx[11].Position = D3DXVECTOR3(1,1,-1);
	EncodeColor(&vx[11], Color);

	vx[12].Position = D3DXVECTOR3(1,-1,1);
	EncodeColor(&vx[12], Color);
	vx[13].Position = D3DXVECTOR3(1,1,1);
	EncodeColor(&vx[13], Color);

	vx[14].Position = D3DXVECTOR3(-1,-1,1);
	EncodeColor(&vx[14], Color);
	vx[15].Position = D3DXVECTOR3(-1,1,1);
	EncodeColor(&vx[15], Color);

	// Top
	vx[16].Position = D3DXVECTOR3(-1,1,-1);
	EncodeColor(&vx[16], Color);
	vx[17].Position = D3DXVECTOR3(1,1,-1);
	EncodeColor(&vx[17], Color);

	vx[18].Position = D3DXVECTOR3(1,1,-1);
	EncodeColor(&vx[18], Color);
	vx[19].Position = D3DXVECTOR3(1,1,1);
	EncodeColor(&vx[19], Color);

	vx[20].Position = D3DXVECTOR3(1,1,1);
	EncodeColor(&vx[20], Color);
	vx[21].Position = D3DXVECTOR3(-1,1,1);
	EncodeColor(&vx[21], Color);

	vx[22].Position = D3DXVECTOR3(-1,1,1);
	EncodeColor(&vx[22], Color);
	vx[23].Position = D3DXVECTOR3(-1,1,-1);
	EncodeColor(&vx[23], Color);

	HRESULT hr;
	LE(CreatePrimitive(vx, 24));

	return hr;
}
Esempio n. 8
0
/** Creates a plate, not of lines. Can't use intersection on this*/
HRESULT EditorLinePrimitive::CreateFilledCirclePrimitive(float Radius, UINT Detail, const D3DXVECTOR4* Color, int Axis)
{
	UINT NumVerts = Detail*3;
	LineVertex* vx = new LineVertex[NumVerts];

	float Step = (D3DX_PI*2)/((float)(Detail)-1);
	float s = 0;

	int i=0;
	while(i < NumVerts)
	{
		switch(Axis)
		{
		case 0:
			// XZ-Axis
			vx[i].Position = D3DXVECTOR3(sinf(s), 0, cosf(s));
			break;
		
		case 1:
			// YZ-Axis
			vx[i].Position = D3DXVECTOR3(0, sinf(s), cosf(s));
			break;

		case 2:
			// ZY-Axis
			vx[i].Position = D3DXVECTOR3(sinf(s), cosf(s), 0);
			break;
		}
		EncodeColor(&vx[i], Color);
		s+=Step;
		i++;


		switch(Axis)
		{
		case 0:
			// XZ-Axis
			vx[i].Position = D3DXVECTOR3(sinf(s), 0, cosf(s));
			break;
		
		case 1:
			// YZ-Axis
			vx[i].Position = D3DXVECTOR3(0, sinf(s), cosf(s));
			break;

		case 2:
			// ZY-Axis
			vx[i].Position = D3DXVECTOR3(sinf(s), cosf(s), 0);
			break;
		}
		EncodeColor(&vx[i], Color);
		//s+=Step;
		i++;

		vx[i].Position = D3DXVECTOR3(0, 0, 0);
		EncodeColor(&vx[i], Color);
		i++;

	}

	HRESULT hr = CreatePrimitive(vx, NumVerts, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

	delete[] vx;
	return hr;
}