Skip to content

Commit 2a54ca4

Browse files
authored
Merge pull request #45 from klaussilveira/feat/scatter
Added scatter tool
2 parents 0ba8590 + ecbd8db commit 2a54ca4

File tree

11 files changed

+3858
-1
lines changed

11 files changed

+3858
-1
lines changed

include/iscatter.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#pragma once
2+
3+
namespace ui
4+
{
5+
6+
enum class ScatterDensityMethod
7+
{
8+
Density = 0,
9+
Amount = 1
10+
};
11+
12+
enum class ScatterDistribution
13+
{
14+
Random = 0,
15+
PoissonDisk = 1
16+
};
17+
18+
enum class ScatterFaceDirection
19+
{
20+
FacingCamera = 0,
21+
PositiveX = 1,
22+
NegativeX = 2,
23+
PositiveY = 3,
24+
NegativeY = 4,
25+
PositiveZ = 5,
26+
NegativeZ = 6
27+
};
28+
29+
} // namespace

install/menu.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@
169169

170170
<menuSeparator />
171171
<menuItem name="transformDialog" caption="Rotate and scale..." command="ToggleTransformPanel" />
172-
<menuItem name="array" caption="Create &amp;Array..." command="ArrayDialog" />
172+
<menuItem name="arrayDialog" caption="Create &amp;Array..." command="ArrayDialog" />
173+
<menuItem name="scatterDialog" caption="Scatter..." command="ScatterDialog" />
173174
</subMenu>
174175

175176
<subMenu name="grid" caption="&amp;Grid">

install/ui/scatterdialog.fbp

Lines changed: 2763 additions & 0 deletions
Large diffs are not rendered by default.

install/ui/scatterdialog.xrc

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
3+
<object class="wxPanel" name="ScatterDialogMainPanel">
4+
<style>wxTAB_TRAVERSAL</style>
5+
<object class="wxBoxSizer" name="">
6+
<orient>wxVERTICAL</orient>
7+
<object class="sizeritem">
8+
<flag>wxALL</flag>
9+
<border>5</border>
10+
<option>0</option>
11+
<object class="wxStaticText" name="ScatterDialogTopLabel">
12+
<label>Scatter Objects on Selected Surfaces</label>
13+
<wrap>-1</wrap>
14+
</object>
15+
</object>
16+
<object class="sizeritem">
17+
<flag>wxLEFT|wxRIGHT|wxBOTTOM</flag>
18+
<border>12</border>
19+
<option>0</option>
20+
<object class="wxStaticText" name="ScatterDialogInfoLabel">
21+
<label>Scatter entities on top of a surface</label>
22+
<wrap>350</wrap>
23+
</object>
24+
</object>
25+
<object class="sizeritem">
26+
<flag>wxEXPAND|wxLEFT|wxRIGHT</flag>
27+
<border>12</border>
28+
<option>0</option>
29+
<object class="wxFlexGridSizer" name="">
30+
<vgap>6</vgap>
31+
<hgap>12</hgap>
32+
<growablerows></growablerows>
33+
<growablecols>1</growablecols>
34+
<rows>2</rows>
35+
<cols>2</cols>
36+
<object class="sizeritem">
37+
<flag>wxALIGN_CENTER_VERTICAL</flag>
38+
<border>0</border>
39+
<option>0</option>
40+
<object class="wxStaticText" name="">
41+
<label>Density Method:</label>
42+
<wrap>-1</wrap>
43+
</object>
44+
</object>
45+
<object class="sizeritem">
46+
<flag>wxEXPAND</flag>
47+
<border>0</border>
48+
<option>1</option>
49+
<object class="wxChoice" name="ScatterDialogDensityMethod">
50+
<selection>1</selection>
51+
<content>
52+
<item>Density (per unit area)</item>
53+
<item>Amount (fixed count)</item>
54+
</content>
55+
</object>
56+
</object>
57+
<object class="sizeritem">
58+
<flag>wxALIGN_CENTER_VERTICAL</flag>
59+
<border>0</border>
60+
<option>0</option>
61+
<object class="wxStaticText" name="">
62+
<label>Distribution:</label>
63+
<wrap>-1</wrap>
64+
</object>
65+
</object>
66+
<object class="sizeritem">
67+
<flag>wxEXPAND</flag>
68+
<border>0</border>
69+
<option>1</option>
70+
<object class="wxChoice" name="ScatterDialogDistribution">
71+
<selection>0</selection>
72+
<content>
73+
<item>Random</item>
74+
<item>Poisson Disk</item>
75+
</content>
76+
</object>
77+
</object>
78+
</object>
79+
</object>
80+
<object class="sizeritem">
81+
<flag>wxALL|wxEXPAND</flag>
82+
<border>12</border>
83+
<option>1</option>
84+
<object class="wxStaticBoxSizer" name="ScatterDialogDensitySizer">
85+
<orient>wxVERTICAL</orient>
86+
<label>Density Settings</label>
87+
<object class="sizeritem">
88+
<flag>wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</flag>
89+
<border>12</border>
90+
<option>0</option>
91+
<object class="wxFlexGridSizer" name="">
92+
<vgap>6</vgap>
93+
<hgap>12</hgap>
94+
<growablerows></growablerows>
95+
<growablecols>1</growablecols>
96+
<rows>2</rows>
97+
<cols>2</cols>
98+
<object class="sizeritem">
99+
<flag>wxALIGN_CENTER_VERTICAL</flag>
100+
<border>0</border>
101+
<option>0</option>
102+
<object class="wxStaticText" name="ScatterDialogDensityLabel">
103+
<label>Density:</label>
104+
<wrap>-1</wrap>
105+
</object>
106+
</object>
107+
<object class="sizeritem">
108+
<flag>wxEXPAND</flag>
109+
<border>0</border>
110+
<option>1</option>
111+
<object class="wxTextCtrl" name="ScatterDialogDensity">
112+
<value>0.01</value>
113+
<maxlength>0</maxlength>
114+
</object>
115+
</object>
116+
<object class="sizeritem">
117+
<flag>wxALIGN_CENTER_VERTICAL</flag>
118+
<border>0</border>
119+
<option>0</option>
120+
<object class="wxStaticText" name="ScatterDialogAmountLabel">
121+
<label>Amount:</label>
122+
<wrap>-1</wrap>
123+
</object>
124+
</object>
125+
<object class="sizeritem">
126+
<flag>wxEXPAND</flag>
127+
<border>0</border>
128+
<option>1</option>
129+
<object class="wxSpinCtrl" name="ScatterDialogAmount">
130+
<style>wxSP_ARROW_KEYS</style>
131+
<value>10</value>
132+
<min>1</min>
133+
<max>10000</max>
134+
</object>
135+
</object>
136+
</object>
137+
</object>
138+
</object>
139+
</object>
140+
<object class="sizeritem">
141+
<flag>wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND</flag>
142+
<border>12</border>
143+
<option>0</option>
144+
<object class="wxFlexGridSizer" name="">
145+
<vgap>6</vgap>
146+
<hgap>12</hgap>
147+
<growablerows></growablerows>
148+
<growablecols>1</growablecols>
149+
<cols>2</cols>
150+
<object class="sizeritem">
151+
<flag>wxALIGN_CENTER_VERTICAL</flag>
152+
<border>0</border>
153+
<option>0</option>
154+
<object class="wxStaticText" name="">
155+
<label>Face Direction:</label>
156+
<wrap>-1</wrap>
157+
</object>
158+
</object>
159+
<object class="sizeritem">
160+
<flag>wxEXPAND</flag>
161+
<border>0</border>
162+
<option>1</option>
163+
<object class="wxChoice" name="ScatterDialogFaceDirection">
164+
<selection>0</selection>
165+
<content>
166+
<item>Facing Camera</item>
167+
<item>East (+X)</item>
168+
<item>West (-X)</item>
169+
<item>North (+Y)</item>
170+
<item>South (-Y)</item>
171+
<item>Up (+Z)</item>
172+
<item>Down (-Z)</item>
173+
</content>
174+
</object>
175+
</object>
176+
</object>
177+
</object>
178+
<object class="sizeritem">
179+
<flag>wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND</flag>
180+
<border>12</border>
181+
<option>0</option>
182+
<object class="wxStaticBoxSizer" name="ScatterDialogDistributionSizer">
183+
<orient>wxVERTICAL</orient>
184+
<label>Distribution Settings</label>
185+
<object class="sizeritem">
186+
<flag>wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</flag>
187+
<border>12</border>
188+
<option>0</option>
189+
<object class="wxFlexGridSizer" name="">
190+
<vgap>6</vgap>
191+
<hgap>12</hgap>
192+
<growablerows></growablerows>
193+
<growablecols>1</growablecols>
194+
<cols>2</cols>
195+
<object class="sizeritem">
196+
<flag>wxALIGN_CENTER_VERTICAL</flag>
197+
<border>0</border>
198+
<option>0</option>
199+
<object class="wxStaticText" name="ScatterDialogMinDistanceLabel">
200+
<label>Min Distance:</label>
201+
<wrap>-1</wrap>
202+
</object>
203+
</object>
204+
<object class="sizeritem">
205+
<flag>wxEXPAND</flag>
206+
<border>0</border>
207+
<option>1</option>
208+
<object class="wxTextCtrl" name="ScatterDialogMinDistance">
209+
<value>32</value>
210+
<maxlength>0</maxlength>
211+
</object>
212+
</object>
213+
<object class="sizeritem">
214+
<flag>wxALIGN_CENTER_VERTICAL</flag>
215+
<border>0</border>
216+
<option>0</option>
217+
<object class="wxStaticText" name="">
218+
<label>Seed:</label>
219+
<wrap>-1</wrap>
220+
</object>
221+
</object>
222+
<object class="sizeritem">
223+
<flag>wxEXPAND</flag>
224+
<border>0</border>
225+
<option>1</option>
226+
<object class="wxSpinCtrl" name="ScatterDialogSeed">
227+
<style>wxSP_ARROW_KEYS</style>
228+
<value>12345</value>
229+
<min>0</min>
230+
<max>999999</max>
231+
</object>
232+
</object>
233+
</object>
234+
</object>
235+
</object>
236+
</object>
237+
<object class="sizeritem">
238+
<flag>wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND</flag>
239+
<border>12</border>
240+
<option>0</option>
241+
<object class="wxStaticBoxSizer" name="">
242+
<orient>wxVERTICAL</orient>
243+
<label>Transform</label>
244+
<object class="sizeritem">
245+
<flag>wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</flag>
246+
<border>12</border>
247+
<option>0</option>
248+
<object class="wxFlexGridSizer" name="">
249+
<vgap>6</vgap>
250+
<hgap>12</hgap>
251+
<growablerows></growablerows>
252+
<growablecols>1</growablecols>
253+
<cols>2</cols>
254+
<object class="sizeritem">
255+
<flag>wxALIGN_CENTER_VERTICAL</flag>
256+
<border>0</border>
257+
<option>0</option>
258+
<object class="wxStaticText" name="">
259+
<label>Z Rotation Range:</label>
260+
<wrap>-1</wrap>
261+
</object>
262+
</object>
263+
<object class="sizeritem">
264+
<flag>wxEXPAND</flag>
265+
<border>0</border>
266+
<option>1</option>
267+
<object class="wxTextCtrl" name="ScatterDialogRotationRange">
268+
<value>360</value>
269+
<maxlength>0</maxlength>
270+
</object>
271+
</object>
272+
<object class="sizeritem">
273+
<flag>wxTOP</flag>
274+
<border>6</border>
275+
<option>0</option>
276+
<object class="wxCheckBox" name="ScatterDialogAlignToNormal">
277+
<label>Align to surface normal</label>
278+
<checked>1</checked>
279+
</object>
280+
</object>
281+
</object>
282+
</object>
283+
</object>
284+
</object>
285+
</object>
286+
</object>
287+
</resource>

radiant/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ add_executable(darkradiant
152152
ui/prefdialog/PrefDialog.cpp
153153
ui/prefdialog/PreferenceItem.cpp
154154
ui/prefdialog/PrefPage.cpp
155+
ui/scatter/ScatterDialog.cpp
155156
ui/script/ScriptMenu.cpp
156157
ui/script/ScriptWindow.cpp
157158
ui/selectionset/SelectionSetToolmenu.cpp

radiant/ui/UserInterfaceModule.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
#include "ui/layers/CreateLayerDialog.h"
6262
#include "ui/patch/PatchCreateDialog.h"
6363
#include "ui/patch/BulgePatchDialog.h"
64+
#include "ui/scatter/ScatterDialog.h"
6465
#include "ui/selectionset/SelectionSetToolmenu.h"
6566
#include "ui/brush/QuerySidesDialog.h"
6667
#include "ui/brush/FindBrush.h"
@@ -550,6 +551,10 @@ void UserInterfaceModule::registerUICommands()
550551

551552
GlobalCommandSystem().addCommand("LoadPrefab", ui::loadPrefabDialog);
552553
GlobalCommandSystem().addCommand("OpenMapFromProject", ui::MapSelector::OpenMapFromProject);
554+
555+
// Scatter dialog for placing entities on surfaces
556+
GlobalCommandSystem().addWithCheck("ScatterDialog", ScatterDialog::Show,
557+
[] { return GlobalSelectionSystem().countSelected() > 0; });
553558
}
554559

555560
// Static module registration

0 commit comments

Comments
 (0)