misc...
	* fix: select inside and touching: ignored ANY filters and hiding, and region
	* fix: M3 tex paint/grab ignored _hidden_ models
	* fix: M3 tex paint/grab ignored group ent (world, triggers, et cetera), model filters
	* fix: shift+a by tex: ignored group ent (world, triggers, et cetera) filters
	* fix: tex find/replace: ignored any filters, regioning & hiding
	* fix: shift+a by classname: ignored filters, hiding, region
	* fix: floor walker ignored group ent filters
	* fix: csg subtract ignored group ent filters
	* fix: invert selection: ignored group ent filters
	* fix: tex find/replace: 'select by shader' mode for patches (was replacing with notex instead)
	* fix: select inside and touching: were selecting group ents, as single unit (=sensitive to parent node and its bbox)
	* fix: csg merge two group ents = empty group ent
	* fix: csg subtract group ent completely = empty group ent
	* fix: hollow group ent: could produce empty group ent
	* func_groups are filtered by world filter only, not entities one
	* new func_group filter, filterBar button; Rightclick = create func_group
This commit is contained in:
Garux
2017-08-01 14:27:03 +03:00
parent 7ca59bef0a
commit dce6730b39
14 changed files with 164 additions and 27 deletions

View File

@@ -110,26 +110,32 @@ SelectByBounds( AABB* aabbs, Unsigned count )
}
bool pre( const scene::Path& path, scene::Instance& instance ) const {
Selectable* selectable = Instance_getSelectable( instance );
if( path.top().get().visible() ){
Selectable* selectable = Instance_getSelectable( instance );
// ignore worldspawn
Entity* entity = Node_getEntity( path.top() );
if ( entity ) {
if ( string_equal( entity->getKeyValue( "classname" ), "worldspawn" ) ) {
return true;
}
}
if ( ( path.size() > 1 ) &&
( !path.top().get().isRoot() ) &&
( selectable != 0 )
) {
for ( Unsigned i = 0; i < m_count; ++i )
{
if ( policy.Evaluate( m_aabbs[i], instance ) ) {
selectable->setSelected( true );
// ignore worldspawn
Entity* entity = Node_getEntity( path.top() );
if ( entity ) {
if ( string_equal( entity->getKeyValue( "classname" ), "worldspawn" ) ) {
return true;
}
}
if ( ( path.size() > 1 ) &&
( !path.top().get().isRoot() ) &&
( selectable != 0 ) &&
( !node_is_group( path.top() ) )
) {
for ( Unsigned i = 0; i < m_count; ++i )
{
if ( policy.Evaluate( m_aabbs[i], instance ) ) {
selectable->setSelected( true );
}
}
}
}
else{
return false;
}
return true;
@@ -275,6 +281,10 @@ InvertSelectionWalker( SelectionSystem::EMode mode )
: m_mode( mode ), m_selectable( 0 ){
}
bool pre( const scene::Path& path, scene::Instance& instance ) const {
if( !path.top().get().visible() ){
m_selectable = 0;
return false;
}
Selectable* selectable = Instance_getSelectable( instance );
if ( selectable ) {
switch ( m_mode )
@@ -608,6 +618,9 @@ EntityFindByPropertyValueWalker( const char *prop, const PropertyValues& propert
: m_propertyvalues( propertyvalues ), m_prop( prop ){
}
bool pre( const scene::Path& path, scene::Instance& instance ) const {
if( !path.top().get().visible() ){
return false;
}
Entity* entity = Node_getEntity( path.top() );
if ( entity != 0
&& propertyvalues_contain( m_propertyvalues, entity->getKeyValue( m_prop ) ) ) {