aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs72
1 files changed, 72 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
index fbc64e3..0c9295b 100644
--- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
@@ -157,6 +157,25 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
157 "Show details of scene object parts with the given name.", 157 "Show details of scene object parts with the given name.",
158 "If --regex is specified then the name is treatead as a regular expression", 158 "If --regex is specified then the name is treatead as a regular expression",
159 HandleShowPartByName); 159 HandleShowPartByName);
160
161 m_console.Commands.AddCommand(
162 "Objects",
163 false,
164 "show part pos",
165 "show part pos <start-coord> to <end-coord>",
166 "Show details of scene object parts within the given area.",
167 "Each component of the coord is comma separated. There must be no spaces between the commas.\n"
168 + "If you don't care about the z component you can simply omit it.\n"
169 + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n"
170 + "If you want to specify the maxmimum value of a component then you can use ~ instead of a number\n"
171 + "If you want to specify the minimum value of a component then you can use -~ instead of a number\n"
172 + "e.g.\n"
173 + "show object pos 20,20,20 to 40,40,40\n"
174 + "show object pos 20,20 to 40,40\n"
175 + "show object pos ,20,20 to ,40,40\n"
176 + "show object pos ,,30 to ,,~\n"
177 + "show object pos ,,-~ to ,,30",
178 HandleShowPartByPos);
160 } 179 }
161 180
162 public void RemoveRegion(Scene scene) 181 public void RemoveRegion(Scene scene)
@@ -318,6 +337,59 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
318 m_console.OutputFormat(sb.ToString()); 337 m_console.OutputFormat(sb.ToString());
319 } 338 }
320 339
340 private void HandleShowPartByPos(string module, string[] cmdparams)
341 {
342 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
343 return;
344
345 if (cmdparams.Length < 5)
346 {
347 m_console.OutputFormat("Usage: show part pos <start-coord> to <end-coord>");
348 return;
349 }
350
351 string rawConsoleStartVector = cmdparams[3];
352 Vector3 startVector;
353
354 if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector))
355 {
356 m_console.OutputFormat("Error: Start vector {0} does not have a valid format", rawConsoleStartVector);
357 return;
358 }
359
360 string rawConsoleEndVector = cmdparams[5];
361 Vector3 endVector;
362
363 if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector))
364 {
365 m_console.OutputFormat("Error: End vector {0} does not have a valid format", rawConsoleEndVector);
366 return;
367 }
368
369 Predicate<SceneObjectGroup> searchPredicate
370 = so => Util.IsInsideBox(so.AbsolutePosition, startVector, endVector);
371
372 List<SceneObjectPart> parts = new List<SceneObjectPart>();
373
374 Action<SceneObjectGroup> searchAction
375 = so
376 => so.ForEachPart(sop => { if (Util.IsInsideBox(so.AbsolutePosition, startVector, endVector)) { parts.Add(sop); }});
377
378 m_scene.ForEachSOG(searchAction);
379
380 StringBuilder sb = new StringBuilder();
381
382 foreach (SceneObjectPart part in parts)
383 {
384 AddScenePartReport(sb, part);
385 sb.Append("\n");
386 }
387
388 sb.AppendFormat("{0} parts found in {1}\n", parts.Count, m_scene.Name);
389
390 m_console.OutputFormat(sb.ToString());
391 }
392
321 private void HandleShowPartByName(string module, string[] cmdparams) 393 private void HandleShowPartByName(string module, string[] cmdparams)
322 { 394 {
323 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 395 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))