View Issue Details

IDProjectCategoryView StatusLast Update
0005635DarkRadiantMap Editingpublic02.04.2022 05:55
ReporterLDAsh Assigned Togreebo  
PrioritylowSeveritytweakReproducibilityN/A
Status closedResolutionfixed 
Product Version2.12.0 
Target Version2.13.0Fixed in Version2.13.0 
Summary0005635: Selection by coords.
DescriptionAbility to make selections by exact coordinates with a dialog, preferably with an ability for a Python plugin to help automate this process, so large maps can be easily exported by exact coordinates. Basically, the dialog has XYZ-min and XYZ-max fields, then makes a new selection using those coord values.
TagsNo tags attached.

Activities

greebo

greebo

03.06.2021 08:04

administrator   ~0014066

I think such an operation is possible through the "Select Complete Tall" feature, isn't it? You drag out a brush, then hit Select Complete Tall, which removes the brush and selects everything that is completely within its bounds. Not sure how it acts with light radii extending that box.
LDAsh

LDAsh

03.06.2021 08:30

reporter   ~0014068

There are 2 options, "select complete tall" and "select touching", which both have issues.
"Select complete tall" is confined to 2 axes, not 3, so one axis will be infinitely selected.
"Select touching" is not precise, because if the brush used for selection is even only flush with something else, those 'external' objects will also be selected.
A proper coord-based function would allow for very precise selections for all axes.
greebo

greebo

03.06.2021 10:12

administrator   ~0014069

Ok, do you think it's worth adding an option analogous to Select Complete Tall, like "Select within Brush Bounds"? Or should it rather be a script method / console command / dialog?
LDAsh

LDAsh

03.06.2021 11:27

reporter   ~0014070

I will say - whatever is easiest for you. I think it will be possible to script automation for either.
greebo

greebo

11.06.2021 10:24

administrator   ~0014079

Revisiting this, have you tried using the "Select Inside" command? You have to drag out a brush, "Select Inside" will remove the brush and select everything that is fully inside the brush bounds.
Is this working for you, also for your scripting purposes?
LDAsh

LDAsh

12.06.2021 01:56

reporter   ~0014082

'Select Inside' has essentially the same issue as 'Select Touching' - it will select external objects that are flush against the bounds of the brush used for the selection. This could be overcome by making the brush smaller by 0.125 units, but that's not an ideal solution, hence the request.
Select complete tall = does not select objects which are flush against the selection.
Select touching = selects external objects which are flush against the selection.
Select inside = same as "select touching".
What we really need is mathematically precise selection, especially because we're also dealing with extremely fine brush details.
greebo

greebo

12.06.2021 03:51

administrator   ~0014084

I see. Can you whip up a small test scene with a setup you'd like to have supported? That would be helpful.
LDAsh

LDAsh

12.06.2021 04:33

reporter   ~0014086

Here's a mockup, if that's what you were asking?:-
https://www.violae.net/temp/DRselectcoords.gif
greebo

greebo

12.06.2021 04:41

administrator   ~0014088

I've been hoping for a small .map file, actually. Which contains a few elements and a brush that you would like to use as selection bounds. Especially those cases you described as "flush against the selection", it'd be useful to have such examples in that map, then I can use that one to test my code.
LDAsh

LDAsh

12.06.2021 05:13

reporter   ~0014089

Something like this?:-
https://www.violae.net/temp/coordtest.map
greebo

greebo

12.06.2021 06:38

administrator   ~0014091

Last edited: 12.06.2021 06:38

Yes, thanks. That is useful.
So I assume the brushes which have their faces in the same plane as that one large brush should not be selected. The "is the candidate inside" part of the selection test should only succeed if the brush is really within the selector brush (< operator) instead of operator <=.
LDAsh

LDAsh

12.06.2021 06:52

reporter   ~0014092

In the case of this test map, if we are to select exactly within the ranges of -64 to 64 (all axes), it would be exactly 31 brushes. There are tiny 0.125-unit brushes in there that would either be incorrectly excluded internally or included externally from these bounds. I hope that clears it up. Sorry, I'm not a programmer so I just explain it the best I can.
greebo

greebo

13.06.2021 12:22

administrator   ~0014098

I've added a separate command "SelectFullyInside" (failed to come up with a better name), it's in the Edit menu right where the others are.
New in this build is the ability to pass arguments to the Select* commands in the console, so you can define the bounds used for these commands, like this:

SelectFullyInside "-64 -64 -64" "64 64 64"

I haven't added a dialog so far, not sure if you really need one?

On the testmap you sent me: when using this new command on this test scenario, nothing will be selected, as no brush is fully within the -64 -64 -64 to 64 64 64 bounds, at least that's what I could figure out. Can you confirm that this is correct?

There will be a portable package available shortly in the artifacts of the build run: https://github.com/codereader/DarkRadiant/runs/2813617745
LDAsh

LDAsh

13.06.2021 14:30

reporter   ~0014099

This shouldn't be correct. Here's some code identical to the big middle brush in the coordtest.map:-
_____________________________________

brushDef3
{
( 0 0 1 -64 ) ( ( 0.0078125 0 0.5 ) ( 0 0.0078125 0.5 ) ) "_emptyname"
( 0 1 0 -64 ) ( ( 0.0078125 0 0.5 ) ( 0 0.0078125 0.4999999702 ) ) "_emptyname"
( 1 0 0 -64 ) ( ( 0.0078125 0 0.5 ) ( 0 0.0078125 0.4999999702 ) ) "_emptyname"
( 0 0 -1 -64 ) ( ( 0.0078125 0 0.5 ) ( 0 0.0078125 0.5 ) ) "_emptyname"
( 0 -1 0 -64 ) ( ( 0.0078125 0 0.5 ) ( 0 0.0078125 0.5 ) ) "_emptyname"
( -1 0 0 -64 ) ( ( 0.0078125 0 0.5 ) ( 0 0.0078125 0.4999999702 ) ) "_emptyname"
}
_____________________________________

So the numbers you posted should be correct and select this brush, but it depends what axes is considered the negative? The math confuses me.
If to go from north/west/up to south/east/down, then the coords are actually "-64 64 64" to "64 -64 -64", if that has any meaning at all...
greebo

greebo

14.06.2021 09:26

administrator   ~0014100

The brushDef you posted is indeed a 128x128x128 brush centered at the origin, it's bounds are from "-64 -64 -64" to "64 64 64".
A brush with the exact same size should not be able to select this object using SelectFullyInside, but Select Inside will select it.

It seems I'm not fully getting your request, so I re-read your comments above. I have questions about this one:
>> 'Select Inside' has essentially the same issue as 'Select Touching' - it will select external objects that are flush against the bounds of the brush used for the selection.
But that's not what I see. If I create two cubes next to each other (touching at one face), and use one of them for "Select Inside", the touching brush will not be selected.
LDAsh

LDAsh

14.06.2021 09:52

reporter   ~0014101

I checked it again and you're right, it seems I made a huge mistake - but that's a good thing! It means precise selections were possible all along.
Still, a way to do this via a dialog or the console would be easier to automate using something like AutoHotkey or similar software. Depending on how much of your time that would take.
Keep in mind, I set all of these requests to low priority tweaks, so, don't feel like you need to spend so much time on it or get it into this particular version.
greebo

greebo

14.06.2021 09:58

administrator   ~0014102

Ok, thanks for the confirmation.
The build here https://github.com/codereader/DarkRadiant/actions/runs/933147540 contains a change to the commands, so you can indeed call the selection commands with two vector arguments, like I described above. It's possible to launch commands through Python scripts too, if the console is not flexible enough.

Console:
SelectInside "-64 -64 -64" "64 64 64"

Python:
GlobalCommandSystem.execute('SelectInside "-64 -64 -64" "64 64 64"') # mind the single and double quotes

Can you give this a shot?
LDAsh

LDAsh

14.06.2021 13:21

reporter   ~0014103

Eheh, forgive me but I have no idea what to do with this GitHub page... Do you have a direct link to a build?
LDAsh

LDAsh

14.06.2021 13:26

reporter   ~0014104

Oops, just turns out I had to sign in! Nevermind!
LDAsh

LDAsh

14.06.2021 13:33

reporter   ~0014105

It works great. My only gripe is now with the console view itself. The input field is not active when it's opened. I can work around this but only if I know the exact location of the field on the screen. Being about to TAB around different elements in different windows is pretty important to automation.
greebo

greebo

14.06.2021 13:53

administrator   ~0014106

You mean the entry box is not focused when the Console tab is activated?
LDAsh

LDAsh

14.06.2021 13:58

reporter   ~0014107

Yes and I hate to sound too fussy. If I can get every mapper to full-screen the console before doing automated processes, then I can at least TAB into the input field.
So it's not a huge deal, I'll leave it up to you if it's easy to fix or not. Otherwise, great work!
greebo

greebo

14.06.2021 14:10

administrator   ~0014108

I added a quick fix to propagate the focus to the command entry box. If the build is succeeding, you should find the artifact soon here, to try it out: https://github.com/codereader/DarkRadiant/actions/runs/936051677

And sorry, I wasn't aware that you had to sign in to download anything, obviously I've been logged in all the time.
LDAsh

LDAsh

14.06.2021 14:54

reporter   ~0014109

Didn't work, but honestly, don't worry about it too much. This is really only for us to do mass automated exports of "sectors" of maps. If we need to make the console fullscreen before doing this, and just click+TAB, then everything will work just fine. We're already very happy! :D
greebo

greebo

14.06.2021 14:57

administrator   ~0014110

Ok, fine by me. :) I'll set this to resolved then.

Related Changesets

DarkRadiant: master b90f834e

13.06.2021 11:17

greebo


Details Diff
0005635: Add "Select Fully Inside" which is discarding items if their bounds are flush with the selection bounds. Affected Issues
0005635
mod - install/menu.xml Diff File
mod - radiantcore/selection/algorithm/General.cpp Diff File
mod - radiantcore/selection/algorithm/SelectionPolicies.h Diff File

DarkRadiant: master 1a217b09

13.06.2021 11:38

greebo


Details Diff
0005635: Add optional Vector3 arguments to SelectInside, SelectFullyInside, SelectCompleteTall and SelectTouching.
This way users can use these commands from the console without having to drag out the selection brushes.
Affected Issues
0005635
mod - radiantcore/selection/algorithm/General.cpp Diff File

DarkRadiant: master 9d08ce23

14.06.2021 14:08

greebo


Details Diff
0005635: Set focus on the command entry when the console panel is getting focused Affected Issues
0005635
mod - radiant/log/Console.cpp Diff File
mod - radiant/log/Console.h Diff File

Issue History

Date Modified Username Field Change
03.06.2021 05:29 LDAsh New Issue
03.06.2021 05:51 greebo Status new => acknowledged
03.06.2021 08:04 greebo Note Added: 0014066
03.06.2021 08:04 greebo Status acknowledged => feedback
03.06.2021 08:30 LDAsh Note Added: 0014068
03.06.2021 08:30 LDAsh Status feedback => new
03.06.2021 10:12 greebo Note Added: 0014069
03.06.2021 10:12 greebo Status new => feedback
03.06.2021 11:27 LDAsh Note Added: 0014070
03.06.2021 11:27 LDAsh Status feedback => new
03.06.2021 12:18 greebo Status new => acknowledged
11.06.2021 10:24 greebo Note Added: 0014079
11.06.2021 10:24 greebo Status acknowledged => feedback
12.06.2021 01:56 LDAsh Note Added: 0014082
12.06.2021 01:56 LDAsh Status feedback => new
12.06.2021 03:51 greebo Note Added: 0014084
12.06.2021 03:51 greebo Status new => feedback
12.06.2021 04:33 LDAsh Note Added: 0014086
12.06.2021 04:33 LDAsh Status feedback => new
12.06.2021 04:41 greebo Note Added: 0014088
12.06.2021 05:13 LDAsh Note Added: 0014089
12.06.2021 06:38 greebo Note Added: 0014091
12.06.2021 06:38 greebo Note Edited: 0014091
12.06.2021 06:52 LDAsh Note Added: 0014092
13.06.2021 12:15 greebo Assigned To => greebo
13.06.2021 12:15 greebo Status new => assigned
13.06.2021 12:16 greebo Changeset attached => DarkRadiant master b90f834e
13.06.2021 12:16 greebo Changeset attached => DarkRadiant master 1a217b09
13.06.2021 12:22 greebo Note Added: 0014098
13.06.2021 14:30 LDAsh Note Added: 0014099
14.06.2021 09:26 greebo Note Added: 0014100
14.06.2021 09:52 LDAsh Note Added: 0014101
14.06.2021 09:58 greebo Note Added: 0014102
14.06.2021 13:21 LDAsh Note Added: 0014103
14.06.2021 13:26 LDAsh Note Added: 0014104
14.06.2021 13:33 LDAsh Note Added: 0014105
14.06.2021 13:53 greebo Note Added: 0014106
14.06.2021 13:58 LDAsh Note Added: 0014107
14.06.2021 14:08 greebo Changeset attached => DarkRadiant master 9d08ce23
14.06.2021 14:10 greebo Note Added: 0014108
14.06.2021 14:54 LDAsh Note Added: 0014109
14.06.2021 14:57 greebo Note Added: 0014110
14.06.2021 14:57 greebo Status assigned => resolved
14.06.2021 14:57 greebo Resolution open => fixed
14.06.2021 14:57 greebo Fixed in Version => 2.13.0
14.06.2021 14:58 greebo Product Version => 2.12.0
14.06.2021 14:58 greebo Target Version => 2.13.0
02.04.2022 05:55 greebo Status resolved => closed