Returns (r1, r2, height, segments, center).
( args: &mlua::MultiValue, )
| 142 | |
| 143 | // size = {w, d, h} |
| 144 | if let Ok(LuaValue::Table(size_t)) = t.get::<mlua::Value>("size") { |
| 145 | return read(&size_t, count); |
| 146 | } |
| 147 | // size = n, the same length along every axis |
| 148 | if let Ok(size) = t.get::<f32>("size") { |
| 149 | return vec![Some(size); count]; |
| 150 | } |
| 151 | // {{w, d, h}, center = true} |
| 152 | if let Ok(LuaValue::Table(inner)) = t.get::<mlua::Value>(1) { |
| 153 | return read(&inner, count); |
| 154 | } |
| 155 | // {w, d, h} |
| 156 | read(t, count) |
| 157 | } |
| 158 | |
| 159 | // --------------------------------------------------------------------------- |
| 160 | // cube() argument parsing |
| 161 | // --------------------------------------------------------------------------- |
| 162 | |
| 163 | /// Parse cube() arguments: supports all LuaCAD forms. |
| 164 | /// Returns (w, d, h, center). |
| 165 | fn parse_cube_args( |
| 166 | args: &mlua::MultiValue, |
| 167 | ) -> mlua::Result<(f32, f32, f32, bool)> { |
| 168 | if args.is_empty() { |
| 169 | return Err(mlua::Error::RuntimeError( |
| 170 | "cube() requires at least 1 argument".to_string(), |
| 171 | )); |
| 172 | } |
| 173 | |
| 174 | let first = &args[0]; |
| 175 | |
| 176 | if let LuaValue::Table(t) = first { |
| 177 | check_table_keys(t, "cube", &["size", "center"])?; |
| 178 | |
| 179 | let size = table_size_components(t, 3); |
| 180 | let w = size[0].unwrap_or(1.0); |
| 181 | let d = size[1].unwrap_or(1.0); |
| 182 | let h = size[2].unwrap_or(1.0); |
| 183 | let center = table_get_bool(t, "cube", "center")?; |
| 184 | return Ok((w, d, h, center)); |
| 185 | } |
| 186 | |
| 187 | // Number forms |
| 188 | let s = lua_val_to_f32(first).ok_or_else(|| { |
| 189 | mlua::Error::RuntimeError( |
| 190 | "cube() argument must be a number, three numbers, or a table".to_string(), |
| 191 | ) |
| 192 | })?; |
| 193 | |
| 194 | // cube(w, d, h) — three separate number args |
| 195 | if args.len() >= 3 { |
no test coverage detected