Пример #1
0
void MakeBrushes(int NumTris, NODE *Node, TRI *Tri,bool surf,
				 int offset,char *texture0, char *texture1, char *texture2)
{
	extern double backface;
	BRUSH	brush;
	int		contents;
	int		i, j;
	float	Steep;
	vec3_t	PlaneNormal,SurfNormal;
	bool	CheckAngle;
	vec3_t	t[2];

	// if texture2 is identical to texture0, there's no need to
	// check surface angle
	if(!g_strcasecmp(texture0,texture2) || !strlen(texture2))
		CheckAngle = FALSE;
	else
	{
		CheckAngle = TRUE;
		Steep = (float)cos((double)SlantAngle/57.2957795);
		switch(Plane)
		{
		case PLANE_XY0: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break;
		case PLANE_XY1: PlaneNormal[0]= 0.;PlaneNormal[1]= 0.;PlaneNormal[2]=-1.;break;
		case PLANE_XZ0: PlaneNormal[0]= 0.;PlaneNormal[1]= 1.;PlaneNormal[2]= 1.;break;
		case PLANE_XZ1: PlaneNormal[0]= 0.;PlaneNormal[1]=-1.;PlaneNormal[2]= 1.;break;
		case PLANE_YZ0: PlaneNormal[0]= 1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break;
		case PLANE_YZ1: PlaneNormal[0]=-1.;PlaneNormal[1]= 0.;PlaneNormal[2]= 1.;break;
		}
	}

	contents = 0;
	if(surf)
	{
		if(UseDetail) contents += CONTENTS_DETAIL;
		if(UseLadder) contents += CONTENTS_LADDER;
	}

	OpenFuncGroup();
	for(i=0; i<NumTris; i++)
	{
		brush.Number   = i;
		brush.NumFaces = 5;
		// front
		brush.face[0].v[0][0] = Node[Tri[i].v[0]].p[0];
		brush.face[0].v[0][1] = Node[Tri[i].v[0]].p[1];
		brush.face[0].v[0][2] = Node[Tri[i].v[0]].p[2];

		brush.face[0].v[1][0] = Node[Tri[i].v[2]].p[0];
		brush.face[0].v[1][1] = Node[Tri[i].v[2]].p[1];
		brush.face[0].v[1][2] = Node[Tri[i].v[2]].p[2];

		brush.face[0].v[2][0] = Node[Tri[i].v[1]].p[0];
		brush.face[0].v[2][1] = Node[Tri[i].v[1]].p[1];
		brush.face[0].v[2][2] = Node[Tri[i].v[1]].p[2];

		if(offset != 0)
		{
			switch(Plane)
			{
			case PLANE_XY0:
				brush.face[0].v[0][2] += offset;
				brush.face[0].v[1][2] += offset;
				brush.face[0].v[1][2] += offset;
				break;
			case PLANE_XY1:
				brush.face[0].v[0][2] -= offset;
				brush.face[0].v[1][2] -= offset;
				brush.face[0].v[1][2] -= offset;
				break;
			case PLANE_XZ0:
				brush.face[0].v[0][1] += offset;
				brush.face[0].v[1][1] += offset;
				brush.face[0].v[1][1] += offset;
				break;
			case PLANE_XZ1:
				brush.face[0].v[0][1] -= offset;
				brush.face[0].v[1][1] -= offset;
				brush.face[0].v[1][1] -= offset;
				break;
			case PLANE_YZ0:
				brush.face[0].v[0][0] += offset;
				brush.face[0].v[1][0] += offset;
				brush.face[0].v[1][0] += offset;
				break;
			case PLANE_YZ1:
				brush.face[0].v[0][0] -= offset;
				brush.face[0].v[1][0] -= offset;
				brush.face[0].v[1][0] -= offset;
				break;
			}
		}
		switch(Plane)
		{
		case PLANE_XZ0:
		case PLANE_XZ1:
			// back
			brush.face[1].v[0][0] = Node[Tri[i].v[0]].p[0];
			brush.face[1].v[0][1] = (float)backface;
			brush.face[1].v[0][2] = Node[Tri[i].v[0]].p[2];

			brush.face[1].v[1][0] = Node[Tri[i].v[1]].p[0];
			brush.face[1].v[1][1] = (float)backface;
			brush.face[1].v[1][2] = Node[Tri[i].v[1]].p[2];

			brush.face[1].v[2][0] = Node[Tri[i].v[2]].p[0];
			brush.face[1].v[2][1] = (float)backface;
			brush.face[1].v[2][2] = Node[Tri[i].v[2]].p[2];

			// 0-1 side
			brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
			brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
			brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];

			brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
			brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
			brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];

			brush.face[2].v[2][0] = Node[Tri[i].v[1]].p[0];
			brush.face[2].v[2][1] = (float)backface;
			brush.face[2].v[2][2] = Node[Tri[i].v[1]].p[2];

			// 1-2 side
			brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
			brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
			brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];

			brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
			brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
			brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];

			brush.face[3].v[2][0] = Node[Tri[i].v[2]].p[0];
			brush.face[3].v[2][1] = (float)backface;
			brush.face[3].v[2][2] = Node[Tri[i].v[2]].p[2];

			// 2-0 side
			brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
			brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
			brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];

			brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
			brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
			brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];

			brush.face[4].v[2][0] = Node[Tri[i].v[0]].p[0];
			brush.face[4].v[2][1] = (float)backface;
			brush.face[4].v[2][2] = Node[Tri[i].v[0]].p[2];
			break;
		case PLANE_YZ0:
		case PLANE_YZ1:
			// back
			brush.face[1].v[0][0] = (float)backface;
			brush.face[1].v[0][1] = Node[Tri[i].v[0]].p[1];
			brush.face[1].v[0][2] = Node[Tri[i].v[0]].p[2];

			brush.face[1].v[1][0] = (float)backface;
			brush.face[1].v[1][1] = Node[Tri[i].v[1]].p[1];
			brush.face[1].v[1][2] = Node[Tri[i].v[1]].p[2];

			brush.face[1].v[2][0] = (float)backface;
			brush.face[1].v[2][1] = Node[Tri[i].v[2]].p[1];
			brush.face[1].v[2][2] = Node[Tri[i].v[2]].p[2];

			// 0-1 side
			brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
			brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
			brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];

			brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
			brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
			brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];

			brush.face[2].v[2][0] = (float)backface;
			brush.face[2].v[2][1] = Node[Tri[i].v[1]].p[1];
			brush.face[2].v[2][2] = Node[Tri[i].v[1]].p[2];

			// 1-2 side
			brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
			brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
			brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];

			brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
			brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
			brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];

			brush.face[3].v[2][0] = (float)backface;
			brush.face[3].v[2][1] = Node[Tri[i].v[2]].p[1];
			brush.face[3].v[2][2] = Node[Tri[i].v[2]].p[2];

			// 2-0 side
			brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
			brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
			brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];

			brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
			brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
			brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];

			brush.face[4].v[2][0] = (float)backface;
			brush.face[4].v[2][1] = Node[Tri[i].v[0]].p[1];
			brush.face[4].v[2][2] = Node[Tri[i].v[0]].p[2];
			break;
		default:
			// back
			brush.face[1].v[0][0] = Node[Tri[i].v[0]].p[0];
			brush.face[1].v[0][1] = Node[Tri[i].v[0]].p[1];
			brush.face[1].v[0][2] = (float)backface;

			brush.face[1].v[1][0] = Node[Tri[i].v[1]].p[0];
			brush.face[1].v[1][1] = Node[Tri[i].v[1]].p[1];
			brush.face[1].v[1][2] = (float)backface;

			brush.face[1].v[2][0] = Node[Tri[i].v[2]].p[0];
			brush.face[1].v[2][1] = Node[Tri[i].v[2]].p[1];
			brush.face[1].v[2][2] = (float)backface;

			// 0-1 side
			brush.face[2].v[0][0] = Node[Tri[i].v[0]].p[0];
			brush.face[2].v[0][1] = Node[Tri[i].v[0]].p[1];
			brush.face[2].v[0][2] = Node[Tri[i].v[0]].p[2];

			brush.face[2].v[1][0] = Node[Tri[i].v[1]].p[0];
			brush.face[2].v[1][1] = Node[Tri[i].v[1]].p[1];
			brush.face[2].v[1][2] = Node[Tri[i].v[1]].p[2];

			brush.face[2].v[2][0] = Node[Tri[i].v[1]].p[0];
			brush.face[2].v[2][1] = Node[Tri[i].v[1]].p[1];
			brush.face[2].v[2][2] = (float)backface;

			// 1-2 side
			brush.face[3].v[0][0] = Node[Tri[i].v[1]].p[0];
			brush.face[3].v[0][1] = Node[Tri[i].v[1]].p[1];
			brush.face[3].v[0][2] = Node[Tri[i].v[1]].p[2];

			brush.face[3].v[1][0] = Node[Tri[i].v[2]].p[0];
			brush.face[3].v[1][1] = Node[Tri[i].v[2]].p[1];
			brush.face[3].v[1][2] = Node[Tri[i].v[2]].p[2];

			brush.face[3].v[2][0] = Node[Tri[i].v[2]].p[0];
			brush.face[3].v[2][1] = Node[Tri[i].v[2]].p[1];
			brush.face[3].v[2][2] = (float)backface;

			// 2-0 side
			brush.face[4].v[0][0] = Node[Tri[i].v[2]].p[0];
			brush.face[4].v[0][1] = Node[Tri[i].v[2]].p[1];
			brush.face[4].v[0][2] = Node[Tri[i].v[2]].p[2];

			brush.face[4].v[1][0] = Node[Tri[i].v[0]].p[0];
			brush.face[4].v[1][1] = Node[Tri[i].v[0]].p[1];
			brush.face[4].v[1][2] = Node[Tri[i].v[0]].p[2];

			brush.face[4].v[2][0] = Node[Tri[i].v[0]].p[0];
			brush.face[4].v[2][1] = Node[Tri[i].v[0]].p[1];
			brush.face[4].v[2][2] = (float)backface;
		}

		for(j=0; j<5; j++)
		{
			strcpy(brush.face[j].texture,
				(strlen(texture1) ? texture1 : texture0));
			brush.face[j].Shift[0] = (float)TexOffset[0];
			brush.face[j].Shift[1] = (float)TexOffset[1];
			brush.face[j].Rotate   = 0.;
			brush.face[j].Scale[0] = (float)TexScale[0];
			brush.face[j].Scale[1] = (float)TexScale[1];
			brush.face[j].Contents = contents;
			if(surf)
				brush.face[j].Surface = 0;
			else
				brush.face[j].Surface = SURF_HINT;
			brush.face[j].Value    = 0;
		}

		if(CheckAngle)
		{
			XYZVectorSubtract(brush.face[0].v[2],brush.face[0].v[0],t[0]);
			XYZVectorSubtract(brush.face[0].v[1],brush.face[0].v[2],t[1]);
			CrossProduct(t[0],t[1],SurfNormal);
			VectorNormalize(SurfNormal,SurfNormal);
			if(DotProduct(SurfNormal,PlaneNormal) < Steep)
				strcpy(brush.face[0].texture,texture2);
			else
				strcpy(brush.face[0].texture,texture0);
		}
		else
			strcpy(brush.face[0].texture,texture0);

		if(surf) brush.face[0].Value    = ArghRad2;
		MakeBrush(&brush);
	}
	CloseFuncGroup();

} // end MakeBrushes
Пример #2
0
//=================================================================
void MapOut(int NumNodes,int NumTris, NODE *Node, TRI *Tri)
{
	extern	double backface;
	extern	double xmin, xmax, ymin, ymax, zmin, zmax;
	BRUSH	brush;
	char	hint[32], skip[32];
	int		i, j;
	int		face;
        /*
	ghCursorCurrent = LoadCursor(NULL,IDC_WAIT);
	SetCursor(ghCursorCurrent);
        */
	UseDetail = 1; // this is temporary
	MakeBrushes(NumTris,Node,Tri,TRUE,0,Texture[Game][0],Texture[Game][1],Texture[Game][2]);

	if(AddHints || GimpHints)
	{
		switch(Game)
		{
		case SIN:
			strcpy(hint,"generic/misc/hint");
			strcpy(skip,"generic/misc/skip");
			break;
		case HALFLIFE:
			strcpy(hint,"HINT");
			strcpy(skip,"HINT");
			break;
		case HERETIC2:
			strcpy(hint,"general/hint");
			strcpy(skip,"general/skip");
			break;
		case KINGPIN:
			strcpy(hint,"common/0_hint");
			strcpy(skip,"common/0_skip");
			break;
		case QUAKE3:
			strcpy(hint,"common/hint");
			strcpy(skip,"common/skip");
			break;
		default:
			strcpy(hint,"e1u1/hint");
			strcpy(skip,"e1u1/skip");
		}
	}

	if( GimpHints )
		MakeBrushes(NumTris,Node,Tri,FALSE,HINT_OFFSET,hint,hint,hint);

	if( AddHints==1 )
	{
		int   j0, j1, j2, k, k0, k1;
		int   q[4];
		int   w,h,h0,h1,t,OK;
		float s[3];
		double front;
		int   MaxHints; // We don't want a whole slew of hint brushes, which we'd get
		                // with low decimation values and our current placement scheme.
		                // Limit number of hint brushes to number of undecimated grid
		                // squares.

		switch(Plane)
		{
		case PLANE_XY1:
			front  = LessThan(zmin,32.);
			break;
		case PLANE_XZ0:
			front  = MoreThan(ymax,32.);
			break;
		case PLANE_XZ1:
			front  = LessThan(ymin,32.);
			break;
		case PLANE_YZ0:
			front  = MoreThan(xmax,32.);
			break;
		case PLANE_YZ1:
			front  = LessThan(xmin,32.);
			break;
		default:
			front  = MoreThan(zmax,32.);
		}

		for(i=0; i<NumTris; i++)
			Tri[i].flag = 0;

		switch(Plane)
		{
		case PLANE_XZ0:
		case PLANE_XZ1:
			j0 = 1;
			j1 = 0;
			j2 = 2;
			break;
		case PLANE_YZ0:
		case PLANE_YZ1:
			j0 = 0;
			j1 = 1;
			j2 = 2;
			break;
		default:
			j0 = 2;
			j1 = 0;
			j2 = 1;
		}

		brush.Number = 0;
		brush.NumFaces = 6;
		MaxHints = NH*NV-1;
		for(w=1; w<min(16,NH) && brush.Number < MaxHints; w++)
		{
			for(h=max(1,w/2); h<min(16,NV) && brush.Number < MaxHints; h++)
			{
				for(i=0; i<=NH-w && brush.Number < MaxHints; i++)
				{
					for(j=0; j<=NV-h && brush.Number < MaxHints; j++)
					{
						q[0] = i*NVP1+j;
						q[2] = q[0] + w*NVP1 + h;
						switch(Plane)
						{
						case PLANE_XY1:
						case PLANE_XZ0:
						case PLANE_YZ1:
							q[1] = q[0] + h;
							q[3] = q[2] - h;
							break;
						default:
							q[1] = q[2] - h;
							q[3] = q[0] + h;
						}
						for(k=0, OK=1; k<NumTris && OK; k++)
						{
							if(Tri[k].min[j1] >= max(Node[q[0]].p[j1],Node[q[2]].p[j1])) continue;
							if(Tri[k].min[j2] >= max(Node[q[0]].p[j2],Node[q[2]].p[j2])) continue;
							if(Tri[k].max[j1] <= min(Node[q[0]].p[j1],Node[q[2]].p[j1])) continue;
							if(Tri[k].max[j2] <= min(Node[q[0]].p[j2],Node[q[2]].p[j2])) continue;

							for(h0=0; h0<4 && OK; h0++)
							{
								h1 = (h0+1)%4;
								for(t=0; t<3 && OK; t++)
								{
									s[t] = side(Node[q[h0]].p[j1],Node[q[h0]].p[j2],
										Node[q[h1]].p[j1],Node[q[h1]].p[j2],
										Node[Tri[k].v[t]].p[j1],Node[Tri[k].v[t]].p[j2]);
								}
								if((s[1] > 0 || s[2] > 0) && s[0] < 0) OK=0;
								if((s[2] > 0 || s[0] > 0) && s[1] < 0) OK=0;
								if((s[0] > 0 || s[1] > 0) && s[2] < 0) OK=0;
							}
						}
						if(!OK) continue;
						switch(Plane)
						{
						case PLANE_XZ0:
						case PLANE_XZ1:
							// front
							brush.face[0].v[0][0] = Node[q[2]].p[0];
							brush.face[0].v[0][1] = (float)front;
							brush.face[0].v[0][2] = Node[q[2]].p[2];

							brush.face[0].v[1][0] = Node[q[1]].p[0];
							brush.face[0].v[1][1] = (float)front;
							brush.face[0].v[1][2] = Node[q[1]].p[2];

							brush.face[0].v[2][0] = Node[q[0]].p[0];
							brush.face[0].v[2][1] = (float)front;
							brush.face[0].v[2][2] = Node[q[0]].p[2];

							// back
							brush.face[1].v[0][0] = Node[q[0]].p[0];
							brush.face[1].v[0][1] = (float)backface;
							brush.face[1].v[0][2] = Node[q[0]].p[2];

							brush.face[1].v[1][0] = Node[q[1]].p[0];
							brush.face[1].v[1][1] = (float)backface;
							brush.face[1].v[1][2] = Node[q[1]].p[2];

							brush.face[1].v[2][0] = Node[q[2]].p[0];
							brush.face[1].v[2][1] = (float)backface;
							brush.face[1].v[2][2] = Node[q[2]].p[2];

							for(k0=0; k0<brush.NumFaces-2; k0++)
							{
								k =k0+2;
								k1=(k0+1) % (brush.NumFaces-2);

								brush.face[k].v[0][0] = Node[q[k0]].p[0];
								brush.face[k].v[0][1] = (float)front;
								brush.face[k].v[0][2] = Node[q[k0]].p[2];

								brush.face[k].v[1][0] = Node[q[k1]].p[0];
								brush.face[k].v[1][1] = (float)front;
								brush.face[k].v[1][2] = Node[q[k1]].p[2];

								brush.face[k].v[2][0] = Node[q[k1]].p[0];
								brush.face[k].v[2][1] = (float)backface;
								brush.face[k].v[2][2] = Node[q[k1]].p[2];
							}
							break;
						case PLANE_YZ0:
						case PLANE_YZ1:
							// front
							brush.face[0].v[0][0] = (float)front;
							brush.face[0].v[0][1] = Node[q[2]].p[1];
							brush.face[0].v[0][2] = Node[q[2]].p[2];

							brush.face[0].v[1][0] = (float)front;
							brush.face[0].v[1][1] = Node[q[1]].p[1];
							brush.face[0].v[1][2] = Node[q[1]].p[2];

							brush.face[0].v[2][0] = (float)front;
							brush.face[0].v[2][1] = Node[q[0]].p[1];
							brush.face[0].v[2][2] = Node[q[0]].p[2];

							// back
							brush.face[1].v[0][0] = (float)backface;
							brush.face[1].v[0][1] = Node[q[0]].p[1];
							brush.face[1].v[0][2] = Node[q[0]].p[2];

							brush.face[1].v[1][0] = (float)backface;
							brush.face[1].v[1][1] = Node[q[1]].p[1];
							brush.face[1].v[1][2] = Node[q[1]].p[2];

							brush.face[1].v[2][0] = (float)backface;
							brush.face[1].v[2][1] = Node[q[2]].p[1];
							brush.face[1].v[2][2] = Node[q[2]].p[2];

							for(k0=0; k0<brush.NumFaces-2; k0++)
							{
								k =k0+2;
								k1=(k0+1) % (brush.NumFaces-2);

								brush.face[k].v[0][0] = (float)front;
								brush.face[k].v[0][1] = Node[q[k0]].p[1];
								brush.face[k].v[0][2] = Node[q[k0]].p[2];

								brush.face[k].v[1][0] = (float)front;
								brush.face[k].v[1][1] = Node[q[k1]].p[1];
								brush.face[k].v[1][2] = Node[q[k1]].p[2];

								brush.face[k].v[2][0] = (float)backface;
								brush.face[k].v[2][1] = Node[q[k1]].p[1];
								brush.face[k].v[2][2] = Node[q[k1]].p[2];
							}
							break;
						default:
							// front
							brush.face[0].v[0][0] = Node[q[2]].p[0];
							brush.face[0].v[0][1] = Node[q[2]].p[1];
							brush.face[0].v[0][2] = (float)front;

							brush.face[0].v[1][0] = Node[q[1]].p[0];
							brush.face[0].v[1][1] = Node[q[1]].p[1];
							brush.face[0].v[1][2] = (float)front;

							brush.face[0].v[2][0] = Node[q[0]].p[0];
							brush.face[0].v[2][1] = Node[q[0]].p[1];
							brush.face[0].v[2][2] = (float)front;

							// back
							brush.face[1].v[0][0] = Node[q[0]].p[0];
							brush.face[1].v[0][1] = Node[q[0]].p[1];
							brush.face[1].v[0][2] = (float)backface;

							brush.face[1].v[1][0] = Node[q[1]].p[0];
							brush.face[1].v[1][1] = Node[q[1]].p[1];
							brush.face[1].v[1][2] = (float)backface;

							brush.face[1].v[2][0] = Node[q[2]].p[0];
							brush.face[1].v[2][1] = Node[q[2]].p[1];
							brush.face[1].v[2][2] = (float)backface;

							for(k0=0; k0<brush.NumFaces-2; k0++)
							{
								k =k0+2;
								k1=(k0+1) % (brush.NumFaces-2);

								brush.face[k].v[0][0] = Node[q[k0]].p[0];
								brush.face[k].v[0][1] = Node[q[k0]].p[1];
								brush.face[k].v[0][2] = (float)front;

								brush.face[k].v[1][0] = Node[q[k1]].p[0];
								brush.face[k].v[1][1] = Node[q[k1]].p[1];
								brush.face[k].v[1][2] = (float)front;

								brush.face[k].v[2][0] = Node[q[k1]].p[0];
								brush.face[k].v[2][1] = Node[q[k1]].p[1];
								brush.face[k].v[2][2] = (float)backface;
							}
							break;
						} // switch (Plane)
						for(face=0; face<6; face++)
						{
							strcpy(brush.face[face].texture,(face<=1 ? skip : hint));
							brush.face[face].Shift[0] = 0;
							brush.face[face].Shift[1] = 0;
							brush.face[face].Rotate   = 0.;
							brush.face[face].Scale[0] = 1;
							brush.face[face].Scale[1] = 1;
							brush.face[face].Contents = CONTENTS_DETAIL;
							brush.face[face].Surface  = (face<=1 ? SURF_SKIP : SURF_HINT);
							brush.face[face].Value    = 0;
						}
						if(!brush.Number) OpenFuncGroup();
						MakeBrush(&brush);
						brush.Number++;
					} // for(j=
				}     // for(i=
			}         // for(h=
		}             // for(w=
		if(brush.Number) CloseFuncGroup();
	}
        /*
	ghCursorCurrent = ghCursorDefault;
	SetCursor(ghCursorCurrent);
        */
}
void CCreateStaircaseDialog::DoDialog(CThredBrush* Brush)
{
	if(DoModal() == IDOK ) {
		MakeBrush(Brush );
	}
}