Пример #1
0
void Select_FlipAxis (int axis)
{
	int		i;

	Select_GetMid (select_origin);
	for (i=0 ; i<3 ; i++)
	{
		Math_VectorCopy (vec3_origin, select_matrix[i]);
		select_matrix[i][i] = 1;
	}
	select_matrix[axis][axis] = -1;

	select_fliporder = TRUE;
	Select_AplyMatrix ();
}
Пример #2
0
void Select_FlipAxis( int axis )
{
	int     i;
	
	Select_GetMid( select_origin );
	for ( i = 0 ; i < 3 ; i++ )
	{
		select_matrix[i].clear();
		select_matrix[i][i] = 1;
	}
	select_matrix[axis][axis] = -1;
	
	select_fliporder = true;
	Select_ApplyMatrix( true, false, 0, 0 );
	Sys_UpdateWindows( W_ALL );
}
Пример #3
0
void Select_FlipAxis (int axis)
{
	int		i;

	Select_GetMid (select_origin);
	for (i=0 ; i<3 ; i++)
	{
		VectorCopy (vec3_origin, select_matrix[i]);
		select_matrix[i][i] = 1;
	}
	select_matrix[axis][axis] = -1;

	select_fliporder = true;
	Select_AplyMatrix (true);
	Sys_UpdateWindows (W_ALL);
}
Пример #4
0
void Select_Scale(float x, float y, float z)
{
	Select_GetMid (select_origin);
	for (brush_t* b=selected_brushes.next ; b != &selected_brushes ; b=b->next)
	{
		for (face_t* f=b->brush_faces ; f ; f=f->next)
		{
			for (int i=0 ; i<3 ; i++)
			{
				f->planepts[i][0] -= select_origin[0];
				f->planepts[i][1] -= select_origin[1];
				f->planepts[i][2] -= select_origin[2];
				f->planepts[i][0] *= x;
				//f->planepts[i][0] = floor(f->planepts[i][0] / g_qeglobals.d_gridsize + 0.5) * g_qeglobals.d_gridsize;

				f->planepts[i][1] *= y;
				//f->planepts[i][1] = floor(f->planepts[i][1] / g_qeglobals.d_gridsize + 0.5) * g_qeglobals.d_gridsize;

				f->planepts[i][2] *= z;
				//f->planepts[i][2] = floor(f->planepts[i][2] / g_qeglobals.d_gridsize + 0.5) * g_qeglobals.d_gridsize;

				f->planepts[i][0] += select_origin[0];
				f->planepts[i][1] += select_origin[1];
				f->planepts[i][2] += select_origin[2];
			}
		}
		Brush_Build(b, false);
		if (b->patchBrush)
		{
			vec3_t v;
			v[0] = x;
			v[1] = y;
			v[2] = z;
			//Patch_Scale(b->nPatchID, select_origin, v);
			Patch_Scale(b->pPatch, select_origin, v);
		}
		if (b->terrainBrush)
		{
			vec3_t v;
			v[0] = x;
			v[1] = y;
			v[2] = z;
			Terrain_Scale(b->pTerrain, select_origin, v);
		}
	}
}
Пример #5
0
void Select_RotateAxis( int axis, float deg, bool bPaint, bool bMouse )
{
	edVec3_c    temp;
	int     i, j;
	vec_t   c, s;
	
	if ( deg == 0 )
	{
		//Sys_Printf("0 deg\n");
		return;
	}
	
	if ( bMouse )
	{
		select_origin = g_pParentWnd->ActiveXY()->RotateOrigin();
	}
	else
	{
		Select_GetMid( select_origin );
	}
	
	select_fliporder = false;
	
	if ( deg == 90 )
	{
		for ( i = 0 ; i < 3 ; i++ )
		{
			select_matrix[i].clear();
			select_matrix[i][i] = 1;
		}
		i = ( axis + 1 ) % 3;
		j = ( axis + 2 ) % 3;
		temp = select_matrix[i];
		select_matrix[i] = select_matrix[j];
		select_matrix[j] = -temp;
	}
	else
	{
		deg = -deg;
		if ( deg == -180.0 )
		{
			c = -1;
			s = 0;
		}
		else if ( deg == -270.0 )
		{
			c = 0;
			s = -1;
		}
		else
		{
			c = cos( DEG2RAD( deg ) );
			s = sin( DEG2RAD( deg ) );
		}
		
		for ( i = 0 ; i < 3 ; i++ )
		{
			select_matrix[i].clear();
			select_matrix[i][i] = 1;
		}
		
		switch ( axis )
		{
			case 0:
				select_matrix[1][1] = c;
				select_matrix[1][2] = -s;
				select_matrix[2][1] = s;
				select_matrix[2][2] = c;
				break;
			case 1:
				select_matrix[0][0] = c;
				select_matrix[0][2] = s;
				select_matrix[2][0] = -s;
				select_matrix[2][2] = c;
				break;
			case 2:
				select_matrix[0][0] = c;
				select_matrix[0][1] = -s;
				select_matrix[1][0] = s;
				select_matrix[1][1] = c;
				break;
		}
	}
	
	if ( g_PrefsDlg.m_bRotateLock )
		RotateTextures( axis, deg, select_origin );
	Select_ApplyMatrix( !bMouse, true, axis, deg );
	
	if ( bPaint )
		Sys_UpdateWindows( W_ALL );
}
Пример #6
0
void Select_RotateAxis (int axis, float deg)
{
	vec3_t	temp;
	int		i, j;
	vec_t	c, s;

	if (deg == 0)
		return;

	Select_GetMid (select_origin);
	select_fliporder = FALSE;

	if (deg == 90)
	{
		for (i=0 ; i<3 ; i++)
		{
			Math_VectorCopy (vec3_origin, select_matrix[i]);
			select_matrix[i][i] = 1;
		}
		i = (axis+1)%3;
		j = (axis+2)%3;

		Math_VectorCopy(select_matrix[i],temp);
		Math_VectorCopy(select_matrix[j],select_matrix[i]);
		Math_VectorSubtract(vec3_origin,temp,select_matrix[j]);
	}
	else
	{
		deg = -deg;
		if (deg == -180)
		{
			c = -1;
			s = 0;
		}
		else if (deg == -270)
		{
			c = 0;
			s = -1;
		}
		else
		{
			c = cos(deg/180*3.14159);
			s = sin (deg/180*3.14159);
		}

		for (i=0 ; i<3 ; i++)
		{
			Math_VectorCopy (vec3_origin, select_matrix[i]);
			select_matrix[i][i] = 1;
		}

		switch (axis)
		{
		case 0:
			select_matrix[1][1] = c;
			select_matrix[1][2] = -s;
			select_matrix[2][1] = s;
			select_matrix[2][2] = c;
			break;
		case 1:
			select_matrix[0][0] = c;
			select_matrix[0][2] = s;
			select_matrix[2][0] = -s;
			select_matrix[2][2] = c;
			break;
		case 2:
			select_matrix[0][0] = c;
			select_matrix[0][1] = -s;
			select_matrix[1][0] = s;
			select_matrix[1][1] = c;
			break;
		}
	}

	Select_AplyMatrix ();
}
Пример #7
0
/*
 =======================================================================================================================
    Entity_Create Creates a new entity out of the selected_brushes list. If the entity class is fixed size, the brushes
    are only used to find a midpoint. Otherwise, the brushes have their ownership transfered to the new entity.
 =======================================================================================================================
 */
entity_t *Entity_Create(eclass_t *c, bool forceFixed)
{
    entity_t	*e;
    brush_t		*b;
    idVec3		mins, maxs, origin;
    char		text[32];
    texdef_t td;
    brushprimit_texdef_t bp;

    // check to make sure the brushes are ok
    for (b = selected_brushes.next; b != &selected_brushes; b = b->next)
    {
        if (b->owner != world_entity)
        {
            Sys_Status("Entity NOT created, brushes not all from world\n");
            Sys_Beep();
            return NULL;
        }
    }

    idStr str;
    if (c->defArgs.GetString("model", "", str) && c->entityModel == NULL)
    {
        c->entityModel = gameEdit->ANIM_GetModelFromEntityDef( &c->defArgs );
    }

    // create it
    e = Entity_New();
    e->brushes.onext = e->brushes.oprev = &e->brushes;
    e->eclass = c;
    e->epairs.Copy(c->args);
    SetKeyValue(e, "classname", c->name);
    Entity_Name(e, false);

    // add the entity to the entity list
    Entity_AddToList(e, &entities);

    if (c->fixedsize)
    {
        //
        // just use the selection for positioning b = selected_brushes.next; for (i=0 ;
        // i<3 ; i++) { e->origin[i] = b->mins[i] - c->mins[i]; }
        //
        Select_GetMid(e->origin);
        VectorCopy(e->origin, origin);

        // create a custom brush
        VectorAdd(c->mins, e->origin, mins);
        VectorAdd(c->maxs, e->origin, maxs);

        b = Brush_Create(mins, maxs, &c->texdef);

        Entity_LinkBrush(e, b);

        if (c->defMaterial.Length())
        {
            td.SetName(c->defMaterial);
            Brush_SetTexture(b, &td, &bp, false);
        }


        // delete the current selection
        Select_Delete();

        // select the new brush
        b->next = b->prev = &selected_brushes;
        selected_brushes.next = selected_brushes.prev = b;

        Brush_Build(b);
    }
    else
    {

        Select_GetMid(origin);

        // change the selected brushes over to the new entity
        for (b = selected_brushes.next; b != &selected_brushes; b = b->next)
        {
            Entity_UnlinkBrush(b);
            Entity_LinkBrush(e, b);
            Brush_Build(b); // so the key brush gets a name
            if (c->defMaterial.Length())
            {
                td.SetName(c->defMaterial);
                Brush_SetTexture(b, &td, &bp, false);
            }

        }

        //for (int i = 0; i < 3; i++) {
        //	origin[i] = vMin[i] + vMax[i] * 0.5;
        //}

        if (!forceFixed)
        {
            SetKeyValue(e, "model", ValueForKey(e, "name"));
        }
    }

    sprintf(text, "%i %i %i", (int)origin[0], (int)origin[1], (int)origin[2]);
    SetKeyValue(e, "origin", text);
    VectorCopy(origin, e->origin);

    Sys_UpdateWindows(W_ALL);
    return e;
}
Пример #8
0
void Select_RotateAxis (int axis, float deg, bool bPaint, bool bMouse)
{
	vec3_t	temp;
	int		i, j;
	vec_t	c, s;

	if (deg == 0)
  {
    //Sys_Printf("0 deg\n");
		return;
  }

  if (bMouse)
  {
    VectorCopy(g_pParentWnd->ActiveXY()->RotateOrigin(), select_origin);
  }
  else
  {
	  Select_GetMid (select_origin);
  }

	select_fliporder = false;

	if (deg == 90)
	{
		for (i=0 ; i<3 ; i++)
		{
			VectorCopy (vec3_origin, select_matrix[i]);
			select_matrix[i][i] = 1;
		}
		i = (axis+1)%3;
		j = (axis+2)%3;
		VectorCopy (select_matrix[i], temp);
		VectorCopy (select_matrix[j], select_matrix[i]);
		VectorSubtract (vec3_origin, temp, select_matrix[j]);
	}
	else
	{
		deg = -deg;
		if (deg == -180.0)
		{
			c = -1;
			s = 0;
		}
		else if (deg == -270.0)
		{
			c = 0;
			s = -1;
		}
		else
		{
			c = cos(deg * Q_PI / 180.0);
			s = sin(deg * Q_PI / 180.0);
		}

		for (i=0 ; i<3 ; i++)
		{
			VectorCopy (vec3_origin, select_matrix[i]);
			select_matrix[i][i] = 1;
		}

		switch (axis)
		{
		case 0:
			select_matrix[1][1] = c;
			select_matrix[1][2] = -s;
			select_matrix[2][1] = s;
			select_matrix[2][2] = c;
			break;
		case 1:
			select_matrix[0][0] = c;
			select_matrix[0][2] = s;
			select_matrix[2][0] = -s;
			select_matrix[2][2] = c;
			break;
		case 2:
			select_matrix[0][0] = c;
			select_matrix[0][1] = -s;
			select_matrix[1][0] = s;
			select_matrix[1][1] = c;
			break;
		}
	}


  if (g_PrefsDlg.m_bRotateLock)
    RotateTextures(axis, deg, select_origin);

	Select_AplyMatrix(!bMouse);

  if (bPaint)
	  Sys_UpdateWindows (W_ALL);
}