From 639c2061efa28d288c333262d646bb903f9cc091 Mon Sep 17 00:00:00 2001 From: VorTechnix <45538536+VorTechnix@users.noreply.github.com> Date: Mon, 17 May 2021 09:13:43 -0700 Subject: [PATCH] Bugfix/torus: fix hollow implementation; improve clarity --- worldeditadditions/lib/torus.lua | 8 +++--- .../commands/torus.lua | 26 ++++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/worldeditadditions/lib/torus.lua b/worldeditadditions/lib/torus.lua index 66d5c99..fcf57d7 100644 --- a/worldeditadditions/lib/torus.lua +++ b/worldeditadditions/lib/torus.lua @@ -1,5 +1,5 @@ ---- Overlap command. Places a specified node on top of --- @module worldeditadditions.overlay +--- Generates torus shapes. +-- @module worldeditadditions.torus --- Generates a torus shape at the given position with the given parameters. -- @param position Vector The position at which to generate the torus. @@ -57,8 +57,8 @@ function worldeditadditions.torus(position, major_radius, minor_radius, target_n -- (x^2+y^2+z^2-(a^2+b^2))^2-4 a b (b^2-z^2) -- Where: -- (x, y, z) is the point - -- a is the major radius (centre to centre of circle) - -- b is the minor radius (radius of circle) + -- a is the major radius (centre of the ring to the centre of the torus) + -- b is the minor radius (radius of the ring) local comp_a = (sq.x+sq.y+sq.z - (major_radius_sq+minor_radius_sq)) local test_value = comp_a*comp_a - 4*major_radius*minor_radius*(minor_radius_sq-sq.z) diff --git a/worldeditadditions_commands/commands/torus.lua b/worldeditadditions_commands/commands/torus.lua index cbaf93f..1593b2d 100644 --- a/worldeditadditions_commands/commands/torus.lua +++ b/worldeditadditions_commands/commands/torus.lua @@ -39,8 +39,10 @@ local function parse_params_torus(params_text) return false, "Error: 2 or less axes must be specified. For example, xy is valid, but xzy is not." end - local hollow = parts[5] - if hollow == "false" then hollow = false end + local hollow = false + if parts[5] == "hollow" or parts[5] == "h" then + hollow = true + end -- Sort the axis names (this is important to ensure we can identify the direction properly) if axes == "yx" then axes = "xy" end @@ -51,7 +53,7 @@ local function parse_params_torus(params_text) end worldedit.register_command("torus", { - params = " [] [h[ollow]]", + params = " [ [h[ollow]]]", description = "Creates a 3D torus with a major radius of and a minor radius of at pos1, filled with , on axes (i.e. 2 axis names: xz, zy, etc).", privs = { worldedit = true }, require_pos = 1, @@ -64,7 +66,13 @@ worldedit.register_command("torus", { end, func = function(name, target_node, major_radius, minor_radius, axes, hollow) local start_time = worldeditadditions.get_ms_time() - local replaced = worldeditadditions.torus(worldedit.pos1[name], major_radius, minor_radius, target_node, axes, hollow) + local replaced = worldeditadditions.torus( + worldedit.pos1[name], + major_radius, minor_radius, + target_node, + axes, + hollow + ) local time_taken = worldeditadditions.get_ms_time() - start_time minetest.log("action", name .. " used //torus at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. replaced .. " nodes in " .. time_taken .. "s") @@ -85,9 +93,15 @@ worldedit.register_command("hollowtorus", { nodes_needed = function(name, target_node, major_radius, minor_radius, axes) return math.ceil(2 * math.pi*math.pi * major_radius * minor_radius*minor_radius) end, - func = function(name, target_node, major_radius, minor_radius) + func = function(name, target_node, major_radius, minor_radius, axes) local start_time = worldeditadditions.get_ms_time() - local replaced = worldeditadditions.torus(worldedit.pos1[name], major_radius, minor_radius, target_node, axes, true) + local replaced = worldeditadditions.torus( + worldedit.pos1[name], + major_radius, minor_radius, + target_node, + axes, + true -- hollow + ) local time_taken = worldeditadditions.get_ms_time() - start_time minetest.log("action", name .. " used //hollowtorus at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. replaced .. " nodes in " .. time_taken .. "s")