2007-11-04 03:51:54 +00:00
|
|
|
/*
|
2012-03-17 20:01:54 +00:00
|
|
|
Copyright (C) 1999-2007 id Software, Inc. and contributors.
|
|
|
|
For a list of contributors, see the accompanying CONTRIBUTORS file.
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
This file is part of GtkRadiant.
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
GtkRadiant is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
GtkRadiant is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with GtkRadiant; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
2007-11-04 03:51:54 +00:00
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
// DESCRIPTION:
|
|
|
|
// implementation of isurfaceplugin-interface specifics
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
void QERApp_GetTwoSelectedPatch( patchMesh_t **p1, patchMesh_t **p2 ){
|
|
|
|
*p1 = NULL; *p2 = NULL;
|
|
|
|
for ( brush_t *pb = selected_brushes.next ; pb != &selected_brushes ; pb = pb->next )
|
|
|
|
{
|
|
|
|
if ( pb->patchBrush ) {
|
|
|
|
if ( !( *p1 ) ) {
|
|
|
|
*p1 = pb->pPatch;
|
|
|
|
}
|
|
|
|
else if ( !( *p2 ) ) {
|
|
|
|
*p2 = pb->pPatch;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2007-11-04 03:51:54 +00:00
|
|
|
#ifdef _DEBUG
|
2016-05-16 19:20:20 +00:00
|
|
|
Sys_FPrintf( SYS_WRN, "WARNING: QERApp_GetTwoSelectedPatch failed (did not find two patches)\n" );
|
2007-11-04 03:51:54 +00:00
|
|
|
#endif
|
2012-03-17 20:01:54 +00:00
|
|
|
return;
|
2007-11-04 03:51:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Nurail: The following functions are used by the Surface Inspector module
|
|
|
|
|
|
|
|
// Queries the number of faces from selected brushes
|
2012-03-17 20:01:54 +00:00
|
|
|
int SI_GetSelectedFaceCountfromBrushes( void ){
|
|
|
|
face_t *f;
|
|
|
|
brush_t *b;
|
|
|
|
int num_of_faces = 0;
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
if ( selected_brushes.next == &selected_brushes ) {
|
|
|
|
return( 0 );
|
|
|
|
}
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
for ( b = selected_brushes.next; b != &selected_brushes; b = b->next )
|
|
|
|
if ( !( b->patchBrush ) ) {
|
|
|
|
for ( f = b->brush_faces; f ; f = f->next, num_of_faces++ ) ;
|
|
|
|
}
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
return num_of_faces;
|
2007-11-04 03:51:54 +00:00
|
|
|
}
|
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
void SI_GetSelFacesTexdef( texdef_to_face_t *allocd_block_texdef ){
|
|
|
|
int i;
|
|
|
|
face_t *f;
|
|
|
|
brush_t *b;
|
|
|
|
texdef_to_face_t *position, *prev_pos;
|
|
|
|
brushprimit_texdef_t bp;
|
|
|
|
|
|
|
|
if ( selected_brushes.next != &selected_brushes ) {
|
|
|
|
prev_pos = position = allocd_block_texdef;
|
|
|
|
for ( b = selected_brushes.next; b != &selected_brushes; b = b->next )
|
|
|
|
{
|
|
|
|
if ( !( b->patchBrush ) ) {
|
|
|
|
for ( f = b->brush_faces; f ; f = f->next )
|
|
|
|
{
|
|
|
|
position->face = f;
|
|
|
|
position->brush = b;
|
|
|
|
position->texdef = f->texdef;
|
|
|
|
if ( g_qeglobals.m_bBrushPrimitMode ) {
|
|
|
|
ConvertTexMatWithQTexture( &f->brushprimit_texdef, QERApp_Shader_ForName( f->texdef.GetName() )->getTexture(), &bp, NULL );
|
|
|
|
TexMatToFakeTexCoords( bp.coords, position->texdef.shift, &position->texdef.rotate, position->texdef.scale );
|
|
|
|
position->orig_bp_texdef = bp;
|
|
|
|
}
|
|
|
|
position->orig_texdef = position->texdef;
|
|
|
|
prev_pos->next = position;
|
|
|
|
prev_pos = position;
|
|
|
|
position++;
|
|
|
|
}
|
|
|
|
prev_pos->next = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( g_ptrSelectedFaces.GetSize() != 0 ) {
|
|
|
|
f = (face_t *) g_ptrSelectedFaces.GetAt( 0 );
|
|
|
|
b = (brush_t *) g_ptrSelectedFaceBrushes.GetAt( 0 );
|
|
|
|
position = (texdef_to_face_t*) allocd_block_texdef;
|
|
|
|
position->face = f;
|
|
|
|
position->brush = b;
|
|
|
|
position->texdef = f->texdef;
|
|
|
|
if ( g_qeglobals.m_bBrushPrimitMode ) {
|
|
|
|
ConvertTexMatWithQTexture( &f->brushprimit_texdef, QERApp_Shader_ForName( f->texdef.GetName() )->getTexture(), &bp, NULL );
|
|
|
|
TexMatToFakeTexCoords( bp.coords, position->texdef.shift, &position->texdef.rotate, position->texdef.scale );
|
|
|
|
position->orig_bp_texdef = bp;
|
|
|
|
}
|
|
|
|
position->orig_texdef = position->texdef;
|
|
|
|
prev_pos = position;
|
|
|
|
for ( i = 1; i < g_ptrSelectedFaces.GetSize(); i++ )
|
|
|
|
{
|
|
|
|
f = (face_t *) g_ptrSelectedFaces.GetAt( i );
|
|
|
|
b = (brush_t *) g_ptrSelectedFaceBrushes.GetAt( i );
|
|
|
|
position = allocd_block_texdef + i;
|
|
|
|
position->face = f;
|
|
|
|
position->brush = b;
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
position->texdef = f->texdef;
|
2012-03-17 20:01:54 +00:00
|
|
|
if ( g_qeglobals.m_bBrushPrimitMode ) {
|
|
|
|
ConvertTexMatWithQTexture( &f->brushprimit_texdef, QERApp_Shader_ForName( f->texdef.GetName() )->getTexture(), &bp, NULL );
|
|
|
|
TexMatToFakeTexCoords( bp.coords, position->texdef.shift, &position->texdef.rotate, position->texdef.scale );
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
position->orig_bp_texdef = bp;
|
|
|
|
}
|
|
|
|
position->orig_texdef = position->texdef;
|
2012-03-17 20:01:54 +00:00
|
|
|
prev_pos->next = position;
|
|
|
|
prev_pos = position;
|
|
|
|
}
|
|
|
|
position->next = NULL;
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
}
|
2007-11-04 03:51:54 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2012-03-17 20:01:54 +00:00
|
|
|
SetFaceTexdef_Q2
|
|
|
|
|
|
|
|
This doesn't mess with CONTENTS_DETAIL needed for Quake2 content flag
|
|
|
|
|
|
|
|
*/
|
|
|
|
void SetFaceTexdef_Q2( face_t *f, texdef_t *texdef, bool bFitScale ){
|
|
|
|
|
|
|
|
if ( strcmp( f->texdef.GetName(), texdef->GetName() ) != 0 ) { // set shader here instead of Brush_Build
|
|
|
|
Face_SetShader( f, texdef->GetName() );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( bFitScale ) {
|
|
|
|
f->texdef = *texdef;
|
|
|
|
// fit the scaling of the texture on the actual plane
|
|
|
|
vec3_t p1,p2,p3; // absolute coordinates
|
|
|
|
// compute absolute coordinates
|
|
|
|
ComputeAbsolute( f,p1,p2,p3 );
|
|
|
|
// compute the scale
|
|
|
|
vec3_t vx,vy;
|
|
|
|
VectorSubtract( p2,p1,vx );
|
|
|
|
VectorNormalize( vx, vx );
|
|
|
|
VectorSubtract( p3,p1,vy );
|
|
|
|
VectorNormalize( vy, vy );
|
|
|
|
// assign scale
|
|
|
|
VectorScale( vx,texdef->scale[0],vx );
|
|
|
|
VectorScale( vy,texdef->scale[1],vy );
|
|
|
|
VectorAdd( p1,vx,p2 );
|
|
|
|
VectorAdd( p1,vy,p3 );
|
|
|
|
// compute back shift scale rot
|
|
|
|
AbsoluteToLocal( f->plane,f,p1,p2,p3 );
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
}
|
2007-11-04 03:51:54 +00:00
|
|
|
else
|
2012-03-17 20:01:54 +00:00
|
|
|
{
|
|
|
|
f->texdef = *texdef;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-05 10:21:36 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
void SI_SetTexdef_FaceList( texdef_to_face_t* texdef_face_list, bool b_SetUndoPoint, bool bFit_to_Scale ){
|
|
|
|
texdef_to_face_t* texdef_to_face;
|
|
|
|
|
|
|
|
if ( !texdef_face_list ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( b_SetUndoPoint ) {
|
|
|
|
if ( g_ptrSelectedFaces.GetSize() > 1 ) {
|
|
|
|
Sys_FPrintf( SYS_WRN, "WARNING: Undo NOT supported for multiple face selections\n" );
|
|
|
|
}
|
|
|
|
else if ( ( selected_brushes.next != &selected_brushes ) || ( g_ptrSelectedFaces.GetSize() == 1 ) ) {
|
|
|
|
// Give something to undo to
|
2013-09-22 21:07:47 +00:00
|
|
|
for ( texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next ) {
|
|
|
|
SetFaceTexdef( texdef_to_face->face, &texdef_to_face->orig_texdef, &texdef_to_face->orig_bp_texdef, bFit_to_Scale );
|
|
|
|
}
|
2012-03-17 20:01:54 +00:00
|
|
|
|
|
|
|
Undo_Start( "set facelist texdefs" );
|
|
|
|
|
|
|
|
if ( selected_brushes.next != &selected_brushes ) {
|
|
|
|
Undo_AddBrushList( &selected_brushes );
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
Undo_AddBrush( texdef_face_list->brush );
|
|
|
|
}
|
|
|
|
|
2013-09-22 21:07:47 +00:00
|
|
|
}
|
2012-03-17 20:01:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for ( texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next )
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
{
|
2012-03-17 20:01:54 +00:00
|
|
|
{
|
|
|
|
brushprimit_texdef_t brushprimit_texdef;
|
|
|
|
FakeTexCoordsToTexMat( texdef_to_face->texdef.shift, texdef_to_face->texdef.rotate, texdef_to_face->texdef.scale, brushprimit_texdef.coords );
|
|
|
|
SetFaceTexdef( texdef_to_face->face, &texdef_to_face->texdef, &brushprimit_texdef, bFit_to_Scale );
|
|
|
|
}
|
|
|
|
Brush_Build( texdef_to_face->brush );
|
|
|
|
if ( bFit_to_Scale ) {
|
|
|
|
texdef_to_face->texdef = texdef_to_face->face->texdef;
|
|
|
|
}
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
}
|
2008-07-05 10:21:36 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
if ( b_SetUndoPoint ) {
|
|
|
|
if ( ( selected_brushes.next != &selected_brushes ) || ( g_ptrSelectedFaces.GetSize() == 1 ) ) {
|
|
|
|
if ( selected_brushes.next != &selected_brushes ) {
|
|
|
|
Undo_EndBrushList( &selected_brushes );
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
Undo_EndBrush( texdef_face_list->brush );
|
|
|
|
}
|
|
|
|
|
|
|
|
Undo_End();
|
|
|
|
// Over-write the orig_texdef list, cementing the change.
|
|
|
|
for ( texdef_to_face = texdef_face_list; texdef_to_face; texdef_to_face = texdef_to_face->next )
|
|
|
|
{
|
|
|
|
texdef_to_face->orig_texdef = texdef_to_face->texdef;
|
|
|
|
texdef_to_face->orig_bp_texdef = texdef_to_face->face->brushprimit_texdef;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Sys_UpdateWindows( W_ALL );
|
2007-11-04 03:51:54 +00:00
|
|
|
}
|
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
void SI_FaceList_FitTexture( texdef_to_face_t* si_texdef_face_list, int nHeight, int nWidth ){
|
|
|
|
texdef_to_face_t* temp_texdef_face_list;
|
|
|
|
brushprimit_texdef_t bp;
|
|
|
|
|
|
|
|
if ( !si_texdef_face_list ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
for ( temp_texdef_face_list = si_texdef_face_list; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next )
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
{
|
2012-03-17 20:01:54 +00:00
|
|
|
Face_FitTexture( temp_texdef_face_list->face, nHeight, nWidth );
|
|
|
|
Brush_Build( temp_texdef_face_list->brush,true,true,false,false );
|
|
|
|
// Write changes to our working Texdef list
|
|
|
|
|
|
|
|
if ( g_qeglobals.m_bBrushPrimitMode ) {
|
|
|
|
ConvertTexMatWithQTexture( &temp_texdef_face_list->face->brushprimit_texdef, QERApp_Shader_ForName( temp_texdef_face_list->face->texdef.GetName() )->getTexture(), &bp, NULL );
|
|
|
|
TexMatToFakeTexCoords( bp.coords, temp_texdef_face_list->face->texdef.shift, &temp_texdef_face_list->face->texdef.rotate, temp_texdef_face_list->face->texdef.scale );
|
|
|
|
}
|
|
|
|
temp_texdef_face_list->texdef = temp_texdef_face_list->face->texdef;
|
* divVerent's patch for the brush primitives surface dialog (fixed segfault due to NULL pointer)
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush
primitives surface dialog. It is an ugly hack, as it converts between
fake texdef notations and brush primitives whenever values are needed.
Had to fix an accuracy bug: the surface dialog rounded all rotation
values to integer angles, which SEVERELY broke things for me (changed
the Gtk spin object to use 4 digits, which is enough for me).
Also, I changed the fake texdef / brush primitives conversions to use
long double internally, as float's roundoff errors were quite visible to
me when testing.
Hope the remaining roundoff errors from converting back and forth won't
kill me, but it worked for a simple map example.
Also, I had to separate out "Snap to grid" and "Don't clamp" into two
separare options. They now mean:
- Snap to grid: snaps drag/etc. actions to the grid
- Don't clamp: disable brush point snapping during many operations, like
merely shifting brushes, editing texturing parameters, map loading,
etc.
The reason is that I do need the grid, but I don't want to get my
objects messed up by the snapping in my map. As I am using free
rotations, this DOES change quite much.
The config.py change is needed for compilation on Debian stable;
Debian's scons does not use the CFLAGS variable, but just CCFLAGS and
CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and
C++, so if you want to require these, you don't need to include the
CFLAGS in CXXFLAGS too.
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
2008-07-10 08:30:47 +00:00
|
|
|
}
|
2007-11-04 03:51:54 +00:00
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
Sys_UpdateWindows( W_CAMERA );
|
2007-11-04 03:51:54 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
GtkWindow* SI_GetMainWindow( void ){
|
|
|
|
return GTK_WINDOW( g_qeglobals_gui.d_main_window );
|
2007-11-04 03:51:54 +00:00
|
|
|
}
|
|
|
|
|
2012-03-17 20:01:54 +00:00
|
|
|
void SI_SetWinPos_from_Prefs( GtkWidget *win ){
|
|
|
|
load_window_pos( win, g_PrefsDlg.mWindowInfo.posSurfaceWnd );
|
2007-11-04 03:51:54 +00:00
|
|
|
}
|