* fix: don't exclude worldspawn node on region() functions, so newly created brushes are visible afterwards
* fix: region() functions work for entities, having model, which is instantiated multiple times in a scene * warn on Map_RegionBrush with none selected * fix: 'region set brush' is deleting ultimateselected only (is using one to get bounds) * deselect components on any region() function: could be texturized or edited implicitly * allow 'region set selection' in components mode * Map_RegionXY: deselect anything (could leave stuff selected + invisible)
This commit is contained in:
parent
bd28ec81f7
commit
618d31bc96
|
|
@ -497,6 +497,7 @@ GLFont *glfont_create( const char* font_string ){
|
||||||
// new font code ripped from ZeroRadiant
|
// new font code ripped from ZeroRadiant
|
||||||
|
|
||||||
#include <pango/pangoft2.h>
|
#include <pango/pangoft2.h>
|
||||||
|
#include <pango/pango-features.h> //has PANGO_VERSION_CHECK
|
||||||
#include <pango/pango-utils.h>
|
#include <pango/pango-utils.h>
|
||||||
|
|
||||||
class GLFontInternal : public GLFont
|
class GLFontInternal : public GLFont
|
||||||
|
|
|
||||||
|
|
@ -2118,7 +2118,7 @@ GtkMenuItem* create_view_menu( MainFrame::EViewStyle style ){
|
||||||
create_menu_item_with_mnemonic( menu_in_menu, "_Off", "RegionOff" );
|
create_menu_item_with_mnemonic( menu_in_menu, "_Off", "RegionOff" );
|
||||||
create_menu_item_with_mnemonic( menu_in_menu, "_Set XY", "RegionSetXY" );
|
create_menu_item_with_mnemonic( menu_in_menu, "_Set XY", "RegionSetXY" );
|
||||||
create_menu_item_with_mnemonic( menu_in_menu, "Set _Brush", "RegionSetBrush" );
|
create_menu_item_with_mnemonic( menu_in_menu, "Set _Brush", "RegionSetBrush" );
|
||||||
create_check_menu_item_with_mnemonic( menu_in_menu, "Set Se_lected Brushes", "RegionSetSelection" );
|
create_check_menu_item_with_mnemonic( menu_in_menu, "Set Se_lection", "RegionSetSelection" );
|
||||||
}
|
}
|
||||||
|
|
||||||
//command_connect_accelerator( "CenterXYView" );
|
//command_connect_accelerator( "CenterXYView" );
|
||||||
|
|
|
||||||
|
|
@ -1543,7 +1543,8 @@ ExcludeSelectedWalker( bool exclude )
|
||||||
: m_exclude( exclude ){
|
: m_exclude( exclude ){
|
||||||
}
|
}
|
||||||
bool pre( const scene::Path& path, scene::Instance& instance ) const {
|
bool pre( const scene::Path& path, scene::Instance& instance ) const {
|
||||||
exclude_node( path.top(), ( instance.isSelected() || instance.childSelected() || instance.parentSelected() ) == m_exclude );
|
if( !path.top().get().isRoot() ) /* don't touch model node: disabling one will disable all instances! */
|
||||||
|
exclude_node( path.top(), ( instance.isSelected() || instance.childSelected() || instance.parentSelected() ) == m_exclude );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -1560,17 +1561,18 @@ ExcludeRegionedWalker( bool exclude )
|
||||||
: m_exclude( exclude ){
|
: m_exclude( exclude ){
|
||||||
}
|
}
|
||||||
bool pre( const scene::Path& path, scene::Instance& instance ) const {
|
bool pre( const scene::Path& path, scene::Instance& instance ) const {
|
||||||
exclude_node(
|
if( !path.top().get().isRoot() ) /* don't touch model node: disabling one will disable all its instances! */
|
||||||
path.top(),
|
exclude_node(
|
||||||
!(
|
path.top(),
|
||||||
(
|
!(
|
||||||
aabb_intersects_aabb(
|
(
|
||||||
instance.worldAABB(),
|
aabb_intersects_aabb(
|
||||||
aabb_for_minmax( g_region_mins, g_region_maxs )
|
instance.worldAABB(),
|
||||||
) != 0
|
aabb_for_minmax( g_region_mins, g_region_maxs )
|
||||||
) ^ m_exclude
|
) != 0
|
||||||
)
|
) ^ m_exclude
|
||||||
);
|
)
|
||||||
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -1591,21 +1593,26 @@ void Map_RegionOff(){
|
||||||
g_region_active = false;
|
g_region_active = false;
|
||||||
g_region_item.update();
|
g_region_item.update();
|
||||||
|
|
||||||
g_region_maxs[0] = g_MaxWorldCoord - 64;
|
g_region_maxs[0] = g_region_maxs[1] = g_region_maxs[2] = g_MaxWorldCoord - 64;
|
||||||
g_region_mins[0] = g_MinWorldCoord + 64;
|
g_region_mins[0] = g_region_mins[1] = g_region_mins[2] = g_MinWorldCoord + 64;
|
||||||
g_region_maxs[1] = g_MaxWorldCoord - 64;
|
|
||||||
g_region_mins[1] = g_MinWorldCoord + 64;
|
|
||||||
g_region_maxs[2] = g_MaxWorldCoord - 64;
|
|
||||||
g_region_mins[2] = g_MinWorldCoord + 64;
|
|
||||||
|
|
||||||
Scene_Exclude_All( false );
|
Scene_Exclude_All( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Map_ApplyRegion( void ){
|
void Map_ApplyRegion(){
|
||||||
|
if( GlobalSelectionSystem().countSelectedComponents() != 0 )
|
||||||
|
GlobalSelectionSystem().setSelectedAllComponents( false );
|
||||||
|
|
||||||
g_region_active = true;
|
g_region_active = true;
|
||||||
g_region_item.update();
|
g_region_item.update();
|
||||||
|
|
||||||
Scene_Exclude_Region( false );
|
Scene_Exclude_Region( false );
|
||||||
|
/* newly created brushes have to visible! */
|
||||||
|
if( scene::Node* w = Map_FindWorldspawn( g_map ) )
|
||||||
|
exclude_node( *w, false );
|
||||||
|
|
||||||
|
if( GlobalSelectionSystem().countSelected() != 0 )
|
||||||
|
GlobalSelectionSystem().setSelectedAll( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1614,19 +1621,25 @@ void Map_ApplyRegion( void ){
|
||||||
Map_RegionSelectedBrushes
|
Map_RegionSelectedBrushes
|
||||||
========================
|
========================
|
||||||
*/
|
*/
|
||||||
void Map_RegionSelectedBrushes( void ){
|
void Map_RegionSelectedBrushes(){
|
||||||
Map_RegionOff();
|
if ( GlobalSelectionSystem().countSelected() != 0 ) {
|
||||||
|
if( GlobalSelectionSystem().countSelectedComponents() != 0 )
|
||||||
|
GlobalSelectionSystem().setSelectedAllComponents( false );
|
||||||
|
|
||||||
if ( GlobalSelectionSystem().countSelected() != 0
|
|
||||||
&& GlobalSelectionSystem().Mode() == SelectionSystem::ePrimitive ) {
|
|
||||||
g_region_active = true;
|
g_region_active = true;
|
||||||
g_region_item.update();
|
g_region_item.update();
|
||||||
Select_GetBounds( g_region_mins, g_region_maxs );
|
Select_GetBounds( g_region_mins, g_region_maxs );
|
||||||
|
|
||||||
Scene_Exclude_Selected( false );
|
Scene_Exclude_Selected( false );
|
||||||
|
/* newly created brushes have to visible! */
|
||||||
|
if( scene::Node* w = Map_FindWorldspawn( g_map ) )
|
||||||
|
exclude_node( *w, false );
|
||||||
|
|
||||||
GlobalSelectionSystem().setSelectedAll( false );
|
GlobalSelectionSystem().setSelectedAll( false );
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
Map_RegionOff();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1651,7 +1664,7 @@ void Map_RegionBounds( const AABB& bounds ){
|
||||||
g_region_mins = vector3_subtracted( bounds.origin, bounds.extents );
|
g_region_mins = vector3_subtracted( bounds.origin, bounds.extents );
|
||||||
g_region_maxs = vector3_added( bounds.origin, bounds.extents );
|
g_region_maxs = vector3_added( bounds.origin, bounds.extents );
|
||||||
|
|
||||||
deleteSelection();
|
// deleteSelection();
|
||||||
|
|
||||||
Map_ApplyRegion();
|
Map_ApplyRegion();
|
||||||
}
|
}
|
||||||
|
|
@ -1665,6 +1678,14 @@ void Map_RegionBrush( void ){
|
||||||
if ( GlobalSelectionSystem().countSelected() != 0 ) {
|
if ( GlobalSelectionSystem().countSelected() != 0 ) {
|
||||||
scene::Instance& instance = GlobalSelectionSystem().ultimateSelected();
|
scene::Instance& instance = GlobalSelectionSystem().ultimateSelected();
|
||||||
Map_RegionBounds( instance.worldAABB() );
|
Map_RegionBounds( instance.worldAABB() );
|
||||||
|
|
||||||
|
if( Selectable* selectable = Instance_getSelectable( instance ) ){
|
||||||
|
selectable->setSelected( true );
|
||||||
|
deleteSelection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
globalErrorStream() << "Nothing is selected!\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user