View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0005122 | DarkRadiant | Selection System | public | 11.01.2020 14:20 | 08.11.2020 18:41 |
Reporter | Dragofer | Assigned To | greebo | ||
Priority | normal | Severity | minor | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Product Version | 2.6.0 | ||||
Target Version | 2.8.0 | Fixed in Version | 2.8.0 | ||
Summary | 0005122: Feature: Selection by Filter | ||||
Description | I'd often like to select or deselect everything that belongs to a filter; at the moment I can think of these example cases: - if I want to check for leaks I want to show nothing but worldspawn brushes and visportals - if I suspect there's a mistake in my AI paths I want to show nothing but paths, maybe also worldspawn brushes & monsterclip - sometimes I also make new filters if I want to isolate & work on a certain kind of entity, i.e. speakers or func_emitters I've devised my own technique to isolate constituents of a filter: - set the filter to hidden - select & hide the whole map - set the filter to visible I think it'd be a useful feature to be able to directly select and deselect according to filters. Maybe it could be done by adding 2 mutually exclusive toggles beneath "Deactivate all Filters" to the filter list: "select by filter", "deselect by filter"? If one of these toggles is active, any clicks on a filter in the list will select/deselect instead of hiding/showing. | ||||
Additional Information | A little cherry on top would be if the filters list stayed open after each click, whether showing/hiding or selecting/deselecting, and only disappeared if the mapper clicked somewhere else or on "Edit Filters". Would make it easier to change several filters at a time, but really it's just a small convenience. | ||||
Tags | No tags attached. | ||||
Will mark this as resolved until feedback during beta tests. Feature is accessible through the Orthoview's context menu, through the console ("SelectByFilterYYY"/"DeselectByFilterYYY") as well as custom bindings to those events. | |
Feedback: I think it'd be better if filter selection selected/deselected whole entities rather than only individual members. I've been trying to isolate i.e. all nodrawsolid brushes in the map, but a lot of them are in func_statics together with other brushes, so when I perform the following procedure I only get a small fraction of the nodrawsolid brushes in the map: Select by Filter -> Nodraw Textures -> press I & h to invert selection and hide everything else It'd be more useful for me to have too much (i.e. nodrawsolid brushes and other brushes/patches in the same func_statics) than too little (only those entities consisting of nothing but nodrawsolid). |
|
I understand what you want to achieve, but that's not how the filter system is working. When you specify to filter to hide or show a certain material (by name), it'd be against the logic if I told it to affect other objects too, just because they might share the same parent. Selecting objects based on filters has to use the same rules as the Filters for showing/hiding stuff. I guess what you need is a completely separate algorithm which checks the objects affected by a filter and then does something based on that, like selecting the parent entity. Maybe that would be a separate command or feature? Selecting the parent entity of any selected object? |
|
"Selection by filter" actually looks like it selects the parent entities, so much so that I could move my selection to a blank part of the map if I wanted to take a look at all the entities containing nodrawsolid brushes - something I couldn't achieve before. The problem only arises as soon as I press i to invert the selection, because then I tend to lose a lot of those parent entities because they weren't purely nodrawsolid brushes. Maybe if there were an alternate selection inversion, ctrl + i, that extends my current selection to the parent entities before it performs the inversion? |
|
Yes, I was having something like this in mind, like "Select Parent Entities" or something more intuitive sounding. | |
I've looked some more into why I was losing a lot of my "Select by Filter" selections when I perform invert & hide: it turns out that if I use "Select by Filter" -> press i, the currently selected children stay selected, now in addition to everything else belonging to that parent. This doesn't happen when I use "Select Group Parts" -> select a child -> press i. For demonstrating this, I've attached a room from a WIP, in which the focus is on the bed in the northeast which is a single func_static consisting of both clip and visible textures. My aim is to evaluate the bed's clip brushes, so I want to hide everything but keep the bed's clip brushes (or at least the whole bed entity) visible. 1) Select by Filter -> Clip Textures -> this selects the clip textures belonging to the bed func_static as well as the chest's lone setfrobable brush. 2) Move the clip textures into the void so you have a clear view of them for the next steps. (This would've been difficult to achieve without "Select by Filter") 3) Press i to invert -> the clip is still selected despite the inversion, together with everything else in the map 4) Press h to hide -> nothing is visible anymore. |
|
Also, I noticed that De/Select by Filter doesn't respect layer visibilities - so it'll select/deselect everything eligible in the whole map. | |
I can confirm the last one, invisible objects have been selected by the filter. I switched that off in the recent commit. As for the selection inversion weirdness, I think this behaviour is somewhat unrelated to this feature here. It's more of a general problem when single primitives of entities are selected and the selection is inverted. You can open a new issue report for that if you like, but I don't think that this can be solved easily since DR technically cannot invert the selection if a single child is selected. If the entity itself is selected, all the children are implicitly selected too. So, when inverting the selection of a single child, DR would need to select the parent entity and all its children *except* for that initially selected primitive - which is not possible, since the parent selection affects all the children. |
|
That's strange, because if I use "Select Group Parts" to select single primitives inside an entity I'm able to invert and hide correctly within this and other "Group" entities. The only problem in that case is that "Invert" ignores non-"Group" entities. I understand that "Select Group Parts" works differently from "Select by Filter" though, and if it's a larger problem I wouldn't want to hold back 2.8.0's release, which sure is already chock-full of goodies. |
|
Yes, the invert selection algorithm is sensitive to the selection mode you're in (Entity, Group Part, etc.) Maybe you can get near what you want in your scenario by switching the selection mode before hitting invert? |
|
Setting this to resolved since my quibble seems more related to the inversion algorithm than this new selection algorithm (child selections staying selected after performing "invert"). And it's in fact the new "Select Parents" feature that lets me achieve my desired functionality - not "Select Group Parts", since that deselects everything. | |
DarkRadiant: master b3c70171 29.03.2020 04:54 Details Diff |
Refactor filter system InstanceUpdateWalker |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/InstanceUpdateWalker.h | Diff File | ||
DarkRadiant: master 0da2832e 29.03.2020 08:00 Details Diff |
Straighten the BasicFilterSystem class a bit |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/XMLFilter.cpp | Diff File | ||
mod - radiant/filters/XMLFilter.h | Diff File | ||
DarkRadiant: master 7b57cad1 29.03.2020 11:19 Details Diff |
0005122: Add SelectByFilterWalker to evaluate whether a single XMLFilter applies to various nodes in which case they will be highlighted |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/BasicFilterSystem.h | Diff File | ||
mod - radiant/filters/InstanceUpdateWalker.h | Diff File | ||
add - radiant/filters/SelectByFilterWalker.h | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj.filters | Diff File | ||
DarkRadiant: master 5ecb33eb 29.03.2020 14:30 Details Diff |
0005122: Implement the DeselectObjectsByFilter command |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/BasicFilterSystem.h | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj.filters | Diff File | ||
DarkRadiant: master 78dd0d8f 29.03.2020 18:13 Details Diff |
0005122: Add ortho context menu entries to select/deselect by filter |
Affected Issues 0005122 |
|
mod - include/iorthocontextmenu.h | Diff File | ||
mod - radiant/Makefile.am | Diff File | ||
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/BasicFilterSystem.h | Diff File | ||
mod - radiant/ui/UserInterfaceModule.cpp | Diff File | ||
add - radiant/ui/filters/FilterContextMenu.cpp | Diff File | ||
add - radiant/ui/filters/FilterContextMenu.h | Diff File | ||
add - radiant/ui/filters/FilterOrthoContextMenuItem.cpp | Diff File | ||
add - radiant/ui/filters/FilterOrthoContextMenuItem.h | Diff File | ||
mod - radiant/ui/ortho/OrthoContextMenu.cpp | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj.filters | Diff File | ||
DarkRadiant: master 2e5d2380 29.03.2020 18:17 Details Diff |
0005122: Move FilterMenu class to ui/filters folder |
Affected Issues 0005122 |
|
mod - radiant/Makefile.am | Diff File | ||
mod - radiant/uimanager/UIManager.cpp | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj.filters | Diff File | ||
DarkRadiant: master e7849252 30.03.2020 05:53 Details Diff |
Minor refactoring |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/XMLFilter.h | Diff File | ||
DarkRadiant: master b216481b 30.03.2020 17:37 Details Diff |
Move filter event management to separate helper class |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/BasicFilterSystem.h | Diff File | ||
mod - radiant/filters/XMLFilter.cpp | Diff File | ||
mod - radiant/filters/XMLFilter.h | Diff File | ||
add - radiant/filters/XmlFilterEventAdapter.h | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj.filters | Diff File | ||
DarkRadiant: master 5c62786b 31.03.2020 02:41 Details Diff |
Use shared_ptrs to store XMLFilter to avoid copying stuff around too much. Some code cleanup. |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/BasicFilterSystem.h | Diff File | ||
mod - radiant/filters/XMLFilter.h | Diff File | ||
mod - radiant/filters/XmlFilterEventAdapter.h | Diff File | ||
DarkRadiant: master 4540cf23 31.03.2020 03:25 Details Diff |
0005122: Generate events to select/deselect objects by filter, such that shortcuts can be bound to it. Refactor the toggle binding to use the same approach as the select/deselect commands. |
Affected Issues 0005122 |
|
mod - radiant/Makefile.am | Diff File | ||
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
add - radiant/filters/XmlFilterEventAdapter.cpp | Diff File | ||
mod - radiant/filters/XmlFilterEventAdapter.h | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj | Diff File | ||
mod - tools/msvc/DarkRadiant.vcxproj.filters | Diff File | ||
DarkRadiant: master 505608ac 31.03.2020 05:14 Details Diff |
0005122: Add IEventManager::renameEvent method to avoid deleting and creating the event just to change its mapping. Fix a consequential bug when saving filters due to the FiltersMenu not being safely deconstructed before renaming events. |
Affected Issues 0005122 |
|
mod - include/ieventmanager.h | Diff File | ||
mod - radiant/eventmanager/EventManager.cpp | Diff File | ||
mod - radiant/eventmanager/EventManager.h | Diff File | ||
mod - radiant/filters/XmlFilterEventAdapter.cpp | Diff File | ||
mod - radiant/ui/filterdialog/FilterDialog.cpp | Diff File | ||
DarkRadiant: master 6b6398af 01.04.2020 04:30 Details Diff |
0005122: Refactor IFilterVisitor to be a functor, replace some insert(std::make_pair()) calls with emplace. |
Affected Issues 0005122 |
|
mod - include/ifilter.h | Diff File | ||
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/BasicFilterSystem.h | Diff File | ||
mod - radiant/ui/filterdialog/FilterDialog.cpp | Diff File | ||
mod - radiant/ui/filters/FilterContextMenu.cpp | Diff File | ||
mod - radiant/ui/filters/FilterContextMenu.h | Diff File | ||
mod - radiant/ui/filters/FilterMenu.cpp | Diff File | ||
mod - radiant/ui/filters/FilterMenu.h | Diff File | ||
mod - radiant/ui/menu/FiltersMenu.cpp | Diff File | ||
DarkRadiant: master 8d56b55a 01.04.2020 18:56 Details Diff |
0005122: Fix some warnings during module shutdown |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
mod - radiant/filters/XmlFilterEventAdapter.cpp | Diff File | ||
DarkRadiant: master f14869cc 06.04.2020 05:02 Details Diff |
0005122 Remove unused local variables |
Affected Issues 0005122 |
|
mod - radiant/filters/BasicFilterSystem.cpp | Diff File | ||
DarkRadiant: master 1f70ccdb 29.04.2020 15:54 Details Diff |
0005122: Don't select nodes that aren't visible |
Affected Issues 0005122 |
|
mod - radiant/filters/SetObjectSelectionByFilterWalker.h | Diff File | ||
DarkRadiant: master 16d2d84d 30.04.2020 03:41 Details Diff |
0005122: Ignore any children of invisible nodes when selecting by filter. |
Affected Issues 0005122 |
|
mod - radiant/filters/SetObjectSelectionByFilterWalker.h | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
11.01.2020 14:20 | Dragofer | New Issue | |
11.01.2020 14:26 | Dragofer | Description Updated | |
11.01.2020 14:26 | Dragofer | Additional Information Updated | |
11.01.2020 16:29 | greebo | Status | new => acknowledged |
29.03.2020 14:20 | greebo | Assigned To | => greebo |
29.03.2020 14:20 | greebo | Status | acknowledged => assigned |
29.03.2020 14:21 | greebo | Target Version | => 2.8.0 |
29.03.2020 18:26 | greebo | Changeset attached | => DarkRadiant master 2e5d2380 |
29.03.2020 18:26 | greebo | Changeset attached | => DarkRadiant master 78dd0d8f |
29.03.2020 18:27 | greebo | Changeset attached | => DarkRadiant master 5ecb33eb |
29.03.2020 18:27 | greebo | Changeset attached | => DarkRadiant master 7b57cad1 |
29.03.2020 18:27 | greebo | Changeset attached | => DarkRadiant master 0da2832e |
29.03.2020 18:27 | greebo | Changeset attached | => DarkRadiant master b3c70171 |
05.04.2020 14:57 | greebo | Changeset attached | => DarkRadiant master 8d56b55a |
05.04.2020 14:57 | greebo | Changeset attached | => DarkRadiant master 6b6398af |
05.04.2020 14:57 | greebo | Changeset attached | => DarkRadiant master 505608ac |
05.04.2020 14:57 | greebo | Changeset attached | => DarkRadiant master 4540cf23 |
05.04.2020 14:57 | greebo | Changeset attached | => DarkRadiant master 5c62786b |
05.04.2020 14:57 | greebo | Changeset attached | => DarkRadiant master e7849252 |
05.04.2020 14:58 | greebo | Changeset attached | => DarkRadiant master b216481b |
05.04.2020 15:00 | greebo | Status | assigned => resolved |
05.04.2020 15:00 | greebo | Resolution | open => fixed |
05.04.2020 15:00 | greebo | Fixed in Version | => 2.8.0 |
05.04.2020 15:00 | greebo | Note Added: 0012332 | |
06.04.2020 05:58 | greebo | Changeset attached | => DarkRadiant master f14869cc |
24.04.2020 11:54 | Dragofer | Assigned To | greebo => |
24.04.2020 11:54 | Dragofer | Status | resolved => feedback |
24.04.2020 11:54 | Dragofer | Resolution | fixed => reopened |
24.04.2020 11:54 | Dragofer | Note Added: 0012380 | |
24.04.2020 11:55 | Dragofer | Note Edited: 0012380 | |
24.04.2020 14:03 | greebo | Note Added: 0012384 | |
24.04.2020 21:47 | Dragofer | Note Added: 0012392 | |
24.04.2020 21:47 | Dragofer | Status | feedback => new |
24.04.2020 21:48 | Dragofer | Assigned To | => greebo |
24.04.2020 21:48 | Dragofer | Status | new => feedback |
25.04.2020 04:13 | greebo | Note Added: 0012395 | |
25.04.2020 09:48 | Dragofer | Relationship added | related to 0005226 |
25.04.2020 14:44 | Dragofer | Status | feedback => resolved |
25.04.2020 14:44 | Dragofer | Resolution | reopened => fixed |
25.04.2020 16:07 | Dragofer | Status | resolved => feedback |
25.04.2020 16:07 | Dragofer | Resolution | fixed => reopened |
25.04.2020 16:07 | Dragofer | Note Added: 0012406 | |
25.04.2020 16:08 | Dragofer | Note Added: 0012407 | |
25.04.2020 16:08 | Dragofer | File Added: invert.map | |
25.04.2020 16:08 | Dragofer | Status | feedback => assigned |
25.04.2020 16:09 | Dragofer | Note Edited: 0012406 | |
25.04.2020 16:10 | Dragofer | Status | assigned => feedback |
25.04.2020 16:10 | Dragofer | Note Edited: 0012406 | |
29.04.2020 07:43 | Dragofer | Note Added: 0012431 | |
29.04.2020 07:43 | Dragofer | Status | feedback => assigned |
29.04.2020 07:43 | Dragofer | Status | assigned => feedback |
29.04.2020 15:55 | greebo | Changeset attached | => DarkRadiant master 1f70ccdb |
29.04.2020 15:59 | greebo | Note Added: 0012432 | |
29.04.2020 20:19 | Dragofer | Note Added: 0012433 | |
29.04.2020 20:19 | Dragofer | Status | feedback => assigned |
29.04.2020 20:19 | Dragofer | Status | assigned => feedback |
30.04.2020 03:41 | greebo | Changeset attached | => DarkRadiant master 16d2d84d |
30.04.2020 03:43 | greebo | Note Added: 0012434 | |
02.05.2020 16:36 | Dragofer | Status | feedback => resolved |
02.05.2020 16:36 | Dragofer | Resolution | reopened => fixed |
02.05.2020 16:36 | Dragofer | Note Added: 0012445 | |
08.11.2020 18:41 | greebo | Status | resolved => closed |