Added new textures of wood, added API for creating shelves with smoothly opening drawers/doors

master
Andrey2470T 2022-07-06 00:44:49 +03:00
parent 7ccb717176
commit 3422c93c08
20 changed files with 559 additions and 207 deletions

View File

@ -174,7 +174,7 @@ function register.register_furniture_unit(name, def, craft_def)
end
end
f_def.add_properties = def.add_properties
local f_name = def.style .. ":" .. name
local f_name = ":multidecor:" .. name
minetest.register_node(f_name, f_def)
if craft_def then

View File

@ -1,3 +1,254 @@
--[[
'shelves_data' is table containing:
{
type = "drawer",
pos = <position> (relative),
object = <object_name>,
inventory = <formspec_string>,
length = <number>
}
or
{
type = "door",
pos = <position> (relative),
object = <object_name>,
inventory = <formspec_string>,
side = "left"/"right"
}
]]
shelves = {}
-- Temporary saving objects of current "open" shelves in the following format: ["playername"] = objref
local open_shelves = {}
-- Rotates the shelf 'obj' around 'pos' position of the node
function shelves.rotate_shelf(pos, obj, is_drawer, move_dist)
if not obj:get_luaentity() then
return
end
local dir = shelves.get_dir(pos)
local rot_y = vector.dir_to_rotation(dir).y
local rel_obj_pos = vector.subtract(obj:get_pos(), pos)
rel_obj_pos = vector.rotate_around_axis(rel_obj_pos, {x=0, y=1, z=0}, rot_y)
obj:set_pos(vector.add(pos, rel_obj_pos))
local rot = obj:get_rotation()
obj:set_rotation({x=rot.x, y=rot_y, z=rot.z})
local self = obj:get_luaentity()
if is_drawer then
self.start_v = vector.add(pos, rel_obj_pos)
self.end_v = vector.add(pos, vector.add(rel_obj_pos, vector.multiply(dir, move_dist)))
else
self.start_v = rot_y
self.end_v = rot_y+move_dist
end
end
-- Returns a direction of the node with 'pos' position
function shelves.get_dir(pos)
local node = minetest.get_node(pos)
local def = minetest.registered_nodes[node.name]
local dir = def.paramtype2 == "facedir" and vector.copy(minetest.facedir_to_dir(node.param2)) or
def.paramtype2 == "wallmounted" and vector.copy(minetest.wallmounted_to_dir(node.param2))
dir = dir*-1
return dir
end
-- Animates opening or closing the shelf 'obj'. The action directly depends on 'dir_sign' value ('1' is open, '-1' is close)
function shelves.open_shelf(obj, dir_sign)
local self = obj:get_luaentity()
if not self then
return
end
if not self.connected_to then
return
end
local node_name = self.connected_to.name
local shelf_i
for i, data in ipairs(minetest.registered_nodes[node_name].add_properties.shelves_data) do
if self.name == data.object then
shelf_i = i
end
end
local shelf = minetest.registered_nodes[node_name].add_properties.shelves_data[shelf_i]
local dir = shelves.get_dir(self.connected_to.pos)
self.dir = dir_sign
if shelf.type == "drawer" then
-- Will pull out the drawer at the distance equal to 2/3 its length
obj:set_velocity(vector.multiply(dir*dir_sign, 0.4))
end
end
-- Adds shelf objects for the node with 'pos' position. They should save formspec inventory and position of the node which they are connected to
function shelves.set_shelves(pos)
local node = minetest.get_node(pos)
local def = minetest.registered_nodes[node.name]
if not def.add_properties or not def.add_properties.shelves_data then
return
end
local dir = def.paramtype2 == "facedir" and minetest.facedir_to_dir(node.param2) or
def.paramtype2 == "wallmounted" and minetest.wallmounted_to_dir(node.param2)
local rot_y = vector.dir_to_rotation(dir)
for i, shelf_data in ipairs(def.add_properties.shelves_data) do
local obj = minetest.add_entity(vector.add(pos, shelf_data.pos), shelf_data.object, minetest.serialize({shelf_data.inventory, {name=node.name, pos=pos}, 0}))
local move_dist
if shelf_data.type == "drawer" then
move_dist = 2/3*shelf_data.length
else
move_dist = shelf_data.side == "left" and -math.pi/2 or math.pi/2
end
shelves.rotate_shelf(pos, obj, shelf_data.type == "drawer", move_dist)
local inv_name = node.name:gsub(":", "_") .. "_" .. i .. "_inv"
minetest.debug(inv_name)
minetest.create_detached_inventory(inv_name, {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
return count
end,
allow_put = function(inv, listname, index, stack, player)
return stack:get_count()
end,
allow_take = function(inv, listname, index, stack, player)
return stack:get_count()
end
})
local inv = minetest.get_inventory({type="detached", name=inv_name})
local list_name = node.name:gsub(node.name:sub(1, node.name:find(":")), "") .. "_" .. shelf_data.type
inv:set_list(list_name, {})
inv:set_size(list_name, shelf_data.inv_size.w*shelf_data.inv_size.h)
inv:set_width(list_name, shelf_data.inv_size.w)
end
end
shelves.default_on_activate = function(self, staticdata)
if staticdata ~= "" then
local data = minetest.deserialize(staticdata)
self.inv = data[1]
self.connected_to = data[2]
self.dir = data[3]
self.start_v = data[4]
self.end_v = data[5]
end
end
shelves.default_get_staticdata = function(self)
return minetest.serialize({self.inv, self.connected_to, self.dir, self.start_v, self.end_v})
end
shelves.default_on_rightclick = function(self, clicker)
local def = minetest.registered_nodes[self.connected_to.name]
local shelf_i
for i, data in ipairs(def.add_properties.shelves_data) do
if self.name == data.object then
shelf_i = i
break
end
end
open_shelves[clicker:get_player_name()] = self.object
minetest.show_formspec(clicker:get_player_name(), self.connected_to.name .. "_" .. shelf_i .. "_fs", self.inv)
if self.dir == 0 then
shelves.open_shelf(self.object, 1)
end
end
shelves.default_drawer_on_step = function(self)
local node = minetest.get_node(self.connected_to.pos)
if node.name ~= self.connected_to.name then
self.object:remove()
return
end
if self.dir == 0 then
return
end
local target_pos = self.dir == 1 and self.end_v or self.start_v
local dist = vector.distance(self.object:get_pos(), target_pos)
if dist <= 0.1 then
self.dir = 0
self.object:set_velocity(vector.zero())
self.object:set_pos(target_pos)
end
end
shelves.default_door_on_step = function(self, dtime)
local node = minetest.get_node(self.connected_to.pos)
if node.name ~= self.connected_to.name then
self.object:remove()
return
end
if self.dir == 0 then
return
end
local rot = self.object:get_rotation()
local target_rot = self.dir == 1 and self.end_v or self.start_v
if math.abs(target_rot-rot.y) <= math.rad(10) then
self.dir = 0
self.object:set_rotation({x=rot.x, y=target_rot, z=rot.z})
return
end
-- Rotation speed is 45 degrees/sec
self.object:set_rotation({x=rot.x, y=rot.y+(-self.dir)*math.pi/3*dtime, z=rot.z})
end
shelves.default_on_receive_fields = function(player, formname, fields)
local is_table_inv = formname:find("%d+", -10)
if not is_table_inv then
return
end
local name = formname:sub(1, is_table_inv-2)
local def = minetest.registered_nodes[name]
if not def then
return
end
local is_table = false
for n, val in pairs(def.groups) do
if n == "table" then
is_table = true
break
end
end
if not name:sub(1, name:find(":")-1) == "multidecor" or not is_table then
return
end
local shelf = open_shelves[player:get_player_name()]
if fields.quit == "true" and shelf then
open_shelves[player:get_player_name()] = nil
shelves.open_shelf(shelf, -1)
end
end
function register.register_table(name, base_def, add_def, craft_def)
local c_def = table.copy(base_def)
@ -5,5 +256,12 @@ function register.register_table(name, base_def, add_def, craft_def)
c_def.add_properties = add_def
--[[if c_def.callbacks then
c_def.callbacks.on_construct = c_def.callbacks.on_construct or default_on_construct
else
c_def.callbacks = {on_construct = default_on_construct}
end]]
register.register_furniture_unit(name, c_def, craft_def)
end
minetest.register_on_player_receive_fields(shelves.default_on_receive_fields)

View File

@ -3,7 +3,7 @@ register.register_seat("kitchen_modern_wooden_chair", {
material = "wood",
description = "Kitchen Modern Wooden Chair",
mesh = "multidecor_kitchen_modern_wooden_chair.b3d",
tiles = {"multidecor_wood.jpg"},
tiles = {"multidecor_wood.png"},
bounding_boxes = {
{-0.36, -0.5, -0.36, 0.36, 0.3, 0.26},
{-0.36, -0.5, 0.26, 0.36, 1.3, 0.36}
@ -27,7 +27,7 @@ register.register_seat("soft_kitchen_modern_wooden_chair", {
material = "wood",
description = "Soft Kitchen Modern Wooden Chair",
mesh = "multidecor_soft_kitchen_modern_wooden_chair.b3d",
tiles = {"multidecor_wood.jpg", "multidecor_wool_material.png"},
tiles = {"multidecor_wood.png", "multidecor_wool_material.png"},
bounding_boxes = {
{-0.36, -0.5, -0.36, 0.36, 0.35, 0.26},
{-0.36, -0.5, 0.26, 0.36, 1.3, 0.36}
@ -122,7 +122,7 @@ register.register_table("kitchen_modern_wooden_table", {
material = "wood",
description = "Kitchen Modern Wooden Table",
mesh = "multidecor_kitchen_modern_wooden_table.obj",
tiles = {"multidecor_wood.jpg"},
tiles = {"multidecor_wood.png"},
bounding_boxes = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
}
@ -144,7 +144,7 @@ register.register_table("round_modern_wooden_table", {
material = "wood",
description = "Round Modern Wooden Table",
mesh = "multidecor_round_wooden_table.obj",
tiles = {"multidecor_jungle_wood.jpg"},
tiles = {"multidecor_jungle_wood.png"},
bounding_boxes = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
}
@ -155,10 +155,69 @@ register.register_table("modern_wooden_desk", {
material = "wood",
description = "Modern Wooden Desk",
mesh = "multidecor_wooden_desk.obj",
tiles = {"multidecor_jungle_wood.jpg"},
tiles = {"multidecor_jungle_wood.png"},
bounding_boxes = {
{-0.5, -0.5, -0.5, 1.0, 0.5, 0.5}
{-0.5, -0.5, -0.5, 1.5, 0.5, 0.5}
},
callbacks = {
on_construct = function(pos)
shelves.set_shelves(pos)
end
}
},
{
shelves_data = {
{
type = "drawer",
pos = {x=-1.15, y=0.225, z=0.05},
object = "modern:wooden_desk_drawer",
length = 0.8,
inventory = [[
formspec_version[5]size[8,3]
list[detached:multidecor_modern_wooden_desk_1_inv;modern_wooden_desk_drawer;0.5,1;6,1;]
]],
inv_size = {w=1,h=6}
},
{
type = "door",
pos = {x=-0.825, y=-0.15, z=0.45},
object = "modern:wooden_desk_door",
side = "left",
inventory = [[
formspec_version[5]size[8,5]
list[detached:multidecor_modern_wooden_desk_2_inv;modern_wooden_desk_door;0.5,1;6,3;]
]],
inv_size = {w=3,h=6}
}
}
})
minetest.register_entity("modern:wooden_desk_drawer", {
visual = "mesh",
visual_size = {x=5, y=5, z=5},
mesh = "multidecor_wooden_desk_drawer.obj",
textures = {"multidecor_wooden_desk2.png"},
physical = false,
selection_box = {-0.2, -0.15, -0.25, 0.2, 0.15, 0.25},
static_save = true,
on_activate = shelves.default_on_activate,
on_rightclick = shelves.default_on_rightclick,
on_step = shelves.default_drawer_on_step,
get_staticdata = shelves.default_get_staticdata
})
minetest.register_entity("modern:wooden_desk_door", {
visual = "mesh",
visual_size = {x=5, y=5, z=5},
mesh = "multidecor_wooden_desk_door.obj",
textures = {"multidecor_wooden_desk2.png"},
physical = false,
selection_box = {-0.2, -0.2, -0.25, 0.2, 0.2, 0.25},
static_save = true,
on_activate = shelves.default_on_activate,
on_rightclick = shelves.default_on_rightclick,
on_step = shelves.default_door_on_step,
get_staticdata = shelves.default_get_staticdata
})
register.register_table("modern_wooden_table_with_metallic_legs", {
@ -171,3 +230,38 @@ register.register_table("modern_wooden_table_with_metallic_legs", {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
}
})
for _, wood_n in ipairs({"", "jungle", "pine", "birch"}) do
local tex = "multidecor_" .. wood_n .. (wood_n ~= "" and "_" or "") .. "wood.png^[sheet:2x2:0,0"
register.register_table("modern_wooden_" .. wood_n .. (wood_n ~= "" and "_" or "") .. "closed_shelf", {
style = "modern",
material = "wood",
drawtype = "nodebox",
visual_scale = 1,
description = "Modern Wooden " .. wood_n:sub(1, 1):upper() .. wood_n:sub(2) .. " Closed Shelf (without back)",
tiles = {tex, tex, tex, tex, tex, tex},
bounding_boxes = {
{-0.5, -0.4, -0.5, -0.4, 0.4, 0.5}, -- Left side
{0.4, -0.4, -0.5, 0.5, 0.4, 0.5}, -- Right side
{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}, -- Bottom side
{-0.5, 0.4, -0.5, 0.5, 0.5, 0.5} -- Top side
}
})
register.register_table("modern_wooden_" .. wood_n .. (wood_n ~= "" and "_" or "") .. "closed_shelf_with_back", {
style = "modern",
material = "wood",
drawtype = "nodebox",
visual_scale = 1,
description = "Modern Wooden " .. wood_n:sub(1, 1):upper() .. wood_n:sub(2) .. " Closed Shelf (with back)",
tiles = {tex, tex, tex, tex, tex, tex},
bounding_boxes = {
{-0.5, -0.4, -0.5, -0.4, 0.4, 0.5}, -- Left side
{0.4, -0.4, -0.5, 0.5, 0.4, 0.5}, -- Right side
{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}, -- Bottom side
{-0.5, 0.4, -0.5, 0.5, 0.5, 0.5}, -- Top side
{-0.4, -0.4, 0.4, 0.4, 0.4, 0.5} -- Back side
}
})
end

View File

@ -1,46 +1,46 @@
# Blender v3.0.0 OBJ File: 'multidecor_wooden_desk_door.blend'
# www.blender.org
o Cube.002_Cube.001
v -0.052356 0.501493 -0.642826
v -0.052356 0.501493 0.657173
v -0.052356 -0.498507 -0.642826
v -0.052356 -0.498507 0.657173
v 0.047644 0.501493 -0.642826
v 0.047644 -0.498507 -0.642826
v 0.047644 0.501493 0.657173
v 0.047644 -0.498507 0.657173
v 0.047644 -0.190007 -0.506924
v 0.047644 -0.190007 -0.416924
v 0.047644 -0.165007 -0.506924
v 0.047644 -0.165007 -0.416924
v 0.122644 -0.190007 -0.506924
v 0.122644 -0.190007 -0.416924
v 0.122644 -0.165007 -0.506924
v 0.122644 -0.165007 -0.416924
v 0.047644 0.309993 -0.506924
v 0.047644 0.309993 -0.416924
v 0.047644 0.284993 -0.506924
v 0.047644 0.284993 -0.416924
v 0.122644 0.309993 -0.506924
v 0.122644 0.309993 -0.416924
v 0.122644 0.284993 -0.506924
v 0.122644 0.284993 -0.416924
v 0.122644 -0.215007 -0.520424
v 0.122644 -0.215007 -0.403424
v 0.122644 -0.165007 -0.520424
v 0.122644 -0.165007 -0.403424
v 0.122644 0.334993 -0.520424
v 0.122644 0.334993 -0.403424
v 0.122644 0.284993 -0.520424
v 0.122644 0.284993 -0.403424
v 0.172644 -0.215007 -0.520424
v 0.172644 -0.215007 -0.403424
v 0.172644 -0.165007 -0.520424
v 0.172644 -0.165007 -0.403424
v 0.172644 0.334993 -0.520424
v 0.172644 0.334993 -0.403424
v 0.172644 0.284993 -0.520424
v 0.172644 0.284993 -0.403424
v 1.300000 0.500000 -0.050000
v 0.000000 0.500000 -0.050000
v 1.300000 -0.500000 -0.050000
v 0.000000 -0.500000 -0.050000
v 1.300000 0.500000 0.050000
v 1.300000 -0.500000 0.050000
v -0.000000 0.500000 0.050000
v -0.000000 -0.500000 0.050000
v 1.164098 -0.191500 0.050000
v 1.074098 -0.191500 0.050000
v 1.164098 -0.166500 0.050000
v 1.074098 -0.166500 0.050000
v 1.164098 -0.191500 0.125000
v 1.074098 -0.191500 0.125000
v 1.164098 -0.166500 0.125000
v 1.074098 -0.166500 0.125000
v 1.164098 0.308500 0.050000
v 1.074098 0.308500 0.050000
v 1.164098 0.283500 0.050000
v 1.074098 0.283500 0.050000
v 1.164098 0.308500 0.125000
v 1.074098 0.308500 0.125000
v 1.164098 0.283500 0.125000
v 1.074098 0.283500 0.125000
v 1.177598 -0.216500 0.125000
v 1.060598 -0.216500 0.125000
v 1.177598 -0.166500 0.125000
v 1.060598 -0.166500 0.125000
v 1.177598 0.333500 0.125000
v 1.060598 0.333500 0.125000
v 1.177598 0.283500 0.125000
v 1.060598 0.283500 0.125000
v 1.177598 -0.216500 0.175000
v 1.060598 -0.216500 0.175000
v 1.177598 -0.166500 0.175000
v 1.060598 -0.166500 0.175000
v 1.177598 0.333500 0.175000
v 1.060598 0.333500 0.175000
v 1.177598 0.283500 0.175000
v 1.060598 0.283500 0.175000
vt 1.004234 0.963160
vt 1.004234 0.599610
vt 0.967879 0.599610
@ -79,23 +79,23 @@ vt 0.102184 0.263981
vt 0.102185 0.047140
vt 0.152058 0.047140
vt 0.152057 0.263981
vt 0.145552 0.276028
vt 0.152057 0.288075
vt 0.145552 0.276028
vt 0.145553 0.035094
vt 0.102185 0.035094
vt 0.095680 0.023047
vt 0.152058 0.023047
vt 0.095680 0.047140
vt 0.095678 0.263981
vt 0.102184 0.276028
vt 0.095678 0.288075
vt 0.102184 0.276028
vt 0.176151 0.312168
vt 0.232530 0.312168
vt 0.232530 0.288075
vt 0.176151 0.288075
vt 0.232530 0.288075
vt 0.232530 0.312168
vt 0.256623 0.288075
vt 0.256623 0.263981
vt 0.232530 0.263981
vt 0.256623 0.263981
vt 0.176151 0.023047
vt 0.176151 0.047140
vt 0.176151 0.263981
@ -109,12 +109,12 @@ vt 0.967879 0.563254
vt 0.495263 0.563254
vt 0.967880 0.199703
vt 0.495264 0.199703
vn 0.0000 0.0000 -1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 -0.0000
vn 0.0000 1.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
s off
f 3/1/1 1/2/1 5/3/1 6/4/1
f 4/5/2 3/6/2 6/4/2 8/7/2
@ -129,24 +129,24 @@ f 19/23/3 23/26/3 21/31/3 17/32/3
f 24/25/1 20/24/1 18/29/1 22/28/1
f 16/33/5 24/34/5 23/35/5 15/36/5
f 24/34/5 16/33/5 28/37/5 32/38/5
f 24/34/6 22/39/6 30/40/6 32/38/6
f 24/34/5 32/38/5 30/39/5 22/40/5
f 14/41/5 13/42/5 25/43/5 26/44/5
f 13/42/5 15/36/5 27/45/5 25/43/5
f 15/36/5 23/35/5 31/46/5 27/45/5
f 22/39/6 21/47/6 29/48/6 30/40/6
f 22/40/5 30/39/5 29/47/5 21/48/5
f 16/33/5 14/41/5 26/44/5 28/37/5
f 21/47/6 23/35/6 31/46/6 29/48/6
f 30/49/2 29/50/2 37/51/2 38/52/2
f 29/53/3 31/54/3 39/55/3 37/51/3
f 21/48/5 29/47/5 31/46/5 23/35/5
f 30/49/4 38/50/4 37/51/4 29/52/4
f 29/53/1 37/51/1 39/54/1 31/55/1
f 28/37/3 26/44/3 34/56/3 36/57/3
f 32/38/3 28/37/3 36/57/3 40/58/3
f 32/38/1 30/40/1 38/52/1 40/58/1
f 32/38/3 40/58/3 38/50/3 30/39/3
f 26/59/2 25/60/2 33/61/2 34/56/2
f 25/62/1 27/63/1 35/64/1 33/61/1
f 27/63/1 31/54/1 39/55/1 35/64/1
f 35/64/6 39/55/6 40/58/6 36/57/6
f 27/63/1 31/55/1 39/54/1 35/64/1
f 35/64/6 39/54/6 40/58/6 36/57/6
f 36/57/6 34/56/6 33/61/6 35/64/6
f 40/58/6 39/55/6 37/51/6 38/52/6
f 40/58/6 39/54/6 37/51/6 38/50/6
f 5/3/4 1/65/4 2/66/4 7/10/4
f 3/67/5 4/68/5 2/66/5 1/65/5
f 6/4/6 5/3/6 7/10/6 8/7/6

View File

@ -1,74 +1,74 @@
# Blender v3.0.0 OBJ File: 'multidecor_wooden_desk_drawer.blend'
# www.blender.org
o Cube.001_Cube.005
v -1.572414 0.192260 0.549999
v -1.572414 0.192260 -0.550001
v 0.127586 0.192260 0.549999
v 0.127586 0.192260 -0.550001
v -1.572414 -0.207740 0.549999
v -1.572414 -0.207740 -0.550001
v 0.127586 -0.207740 0.549999
v 0.127586 -0.207740 -0.550001
v -1.522414 0.192260 0.499999
v -1.522414 0.192260 -0.500001
v 0.127586 0.192260 0.499999
v -1.522414 -0.157740 0.499999
v -1.522414 -0.157740 -0.500001
v 0.127586 -0.157740 0.499999
v 0.127586 -0.157740 -0.500001
v 0.127586 0.192260 0.649999
v 0.127586 -0.207740 0.649999
v 0.127586 0.192260 -0.650001
v 0.127586 -0.207740 -0.650001
v 0.227586 -0.207740 0.549999
v 0.227586 -0.207740 -0.550001
v 0.227586 0.192260 0.649999
v 0.227586 -0.207740 0.649999
v 0.227586 0.192260 -0.650001
v 0.227586 -0.207740 -0.650001
v 0.127586 0.192260 -0.500001
v 0.227586 -0.032462 0.249999
v 0.227586 0.057538 0.249999
v 0.227586 -0.032462 0.224999
v 0.227586 0.057538 0.224999
v 0.302586 -0.032462 0.249999
v 0.302586 0.057538 0.249999
v 0.302586 -0.032462 0.224999
v 0.302586 0.057538 0.224999
v 0.227586 -0.032462 -0.250001
v 0.227586 0.057538 -0.250001
v 0.227586 -0.032462 -0.225001
v 0.227586 0.057538 -0.225001
v 0.302586 -0.032462 -0.250001
v 0.302586 0.057538 -0.250001
v 0.302586 -0.032462 -0.225001
v 0.302586 0.057538 -0.225001
v 0.302586 -0.045962 0.274999
v 0.302586 0.071038 0.274999
v 0.302586 -0.045962 0.224999
v 0.302586 0.071038 0.224999
v 0.302586 -0.045962 -0.275001
v 0.302586 0.071038 -0.275001
v 0.302586 -0.045962 -0.225001
v 0.302586 0.071038 -0.225001
v 0.352586 -0.045962 0.274999
v 0.352586 0.071038 0.274999
v 0.352586 -0.045962 0.224999
v 0.352586 0.071038 0.224999
v 0.352586 -0.045962 -0.275001
v 0.352586 0.071038 -0.275001
v 0.352586 -0.045962 -0.225001
v 0.352586 0.071038 -0.225001
v -0.550000 0.261510 -0.940533
v 0.550000 0.261510 -0.940533
v -0.550000 0.261510 0.759467
v 0.550000 0.261510 0.759467
v -0.550000 -0.138490 -0.940533
v 0.550000 -0.138490 -0.940533
v -0.550000 -0.138490 0.759467
v 0.550000 -0.138490 0.759467
v -0.500000 0.261510 -0.890533
v 0.500000 0.261510 -0.890533
v -0.500000 0.261510 0.759467
v -0.500000 -0.088490 -0.890533
v 0.500000 -0.088490 -0.890533
v -0.500000 -0.088490 0.759467
v 0.500000 -0.088490 0.759467
v -0.650000 0.261510 0.759467
v -0.650000 -0.138490 0.759467
v 0.650000 0.261510 0.759467
v 0.650000 -0.138490 0.759467
v -0.550000 -0.138490 0.859467
v 0.550000 -0.138490 0.859467
v -0.650000 0.261510 0.859467
v -0.650000 -0.138490 0.859467
v 0.650000 0.261510 0.859467
v 0.650000 -0.138490 0.859467
v 0.500000 0.261510 0.759467
v -0.250000 0.036789 0.859467
v -0.250000 0.126789 0.859467
v -0.225000 0.036789 0.859467
v -0.225000 0.126789 0.859467
v -0.250000 0.036789 0.934467
v -0.250000 0.126789 0.934467
v -0.225000 0.036789 0.934467
v -0.225000 0.126789 0.934467
v 0.250000 0.036789 0.859467
v 0.250000 0.126789 0.859467
v 0.225000 0.036789 0.859467
v 0.225000 0.126789 0.859467
v 0.250000 0.036789 0.934467
v 0.250000 0.126789 0.934467
v 0.225000 0.036789 0.934467
v 0.225000 0.126789 0.934467
v -0.275000 0.023289 0.934467
v -0.275000 0.140289 0.934467
v -0.225000 0.023289 0.934467
v -0.225000 0.140289 0.934467
v 0.275000 0.023289 0.934467
v 0.275000 0.140289 0.934467
v 0.225000 0.023289 0.934467
v 0.225000 0.140289 0.934467
v -0.275000 0.023289 0.984467
v -0.275000 0.140289 0.984467
v -0.225000 0.023289 0.984467
v -0.225000 0.140289 0.984467
v 0.275000 0.023289 0.984467
v 0.275000 0.140289 0.984467
v 0.225000 0.023289 0.984467
v 0.225000 0.140289 0.984467
vt 0.557219 0.492142
vt 0.998511 0.492142
vt 0.998511 0.595975
vt 0.557219 0.595975
vt 0.998511 0.595975
vt 0.998511 0.492142
vt 0.453386 0.881517
vt 0.453386 0.595975
vt 0.557219 0.881517
vt 0.453386 0.595975
vt 0.998511 0.985350
vt 0.557219 0.985350
vt 0.998511 0.881517
vt 0.557219 0.985350
vt 0.999849 0.091005
vt 0.999849 0.519318
vt 0.908995 0.519318
@ -80,19 +80,19 @@ vt 0.558557 0.519318
vt 0.558557 0.091005
vt 0.649411 0.519318
vt 0.441443 0.619989
vt 0.441443 0.723823
vt 0.415485 0.723823
vt 0.415485 0.619989
vt 0.415485 0.723823
vt 0.441443 0.723823
vt 0.000151 0.723823
vt 0.000151 0.619989
vt 0.026109 0.619989
vt 0.026109 0.723823
vt 0.052067 0.619989
vt 0.026109 0.619989
vt 0.000151 0.619989
vt 0.052068 0.723823
vt 0.052067 0.619989
vt 0.363568 0.594031
vt 0.389526 0.594031
vt 0.389526 0.619989
vt 0.363568 0.619989
vt 0.389526 0.619989
vt 0.389526 0.594031
vt 0.078026 0.594031
vt 0.078026 0.619989
vt 0.389526 0.723823
@ -100,10 +100,10 @@ vt 0.052067 0.594031
vt 0.363568 0.749781
vt 0.350588 0.749781
vt 0.649411 0.610173
vt 0.570199 0.479162
vt 0.998511 0.479161
vt 0.440407 0.868538
vt 0.570199 0.479162
vt 0.440407 0.608954
vt 0.440407 0.868538
vt 0.998511 0.998330
vt 0.570198 0.998329
vt 0.266463 0.167541
@ -117,38 +117,38 @@ vt 0.266463 0.155714
vt 0.266463 0.221947
vt 0.230981 0.221947
vt 0.266463 0.058179
vt 0.266463 0.100758
vt 0.230981 0.100758
vt 0.230981 0.058179
vt 0.230981 0.100758
vt 0.266463 0.100758
vt 0.230981 0.046352
vt 0.230981 0.003773
vt 0.266463 0.003773
vt 0.266463 0.046352
vt 0.266463 0.112585
vt 0.266463 0.003773
vt 0.230981 0.003773
vt 0.230981 0.112585
vt 0.266463 0.112585
vt 0.181465 0.263977
vt 0.181465 0.051083
vt 0.224044 0.051083
vt 0.224044 0.263977
vt 0.175078 0.263977
vt 0.175078 0.051083
vt 0.181465 0.039255
vt 0.175078 0.027428
vt 0.181465 0.039255
vt 0.181465 0.275804
vt 0.224044 0.275804
vt 0.230431 0.287632
vt 0.175078 0.287631
vt 0.230431 0.263977
vt 0.230431 0.051083
vt 0.224044 0.039256
vt 0.230431 0.027428
vt 0.224044 0.039256
vt 0.151423 0.003773
vt 0.096071 0.003773
vt 0.096071 0.027428
vt 0.151423 0.027428
vt 0.096071 0.027428
vt 0.096071 0.003773
vt 0.072416 0.027428
vt 0.072416 0.051083
vt 0.096071 0.051083
vt 0.072416 0.051083
vt 0.151423 0.287631
vt 0.151423 0.263977
vt 0.151423 0.051083
@ -163,68 +163,68 @@ vt 0.078026 0.749781
vt 0.052068 0.749781
vt 0.389526 0.749781
vt 0.908995 0.610173
vn -1.0000 0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
s off
f 1/1/1 3/2/1 7/3/1 5/4/1
f 2/5/2 1/6/2 5/4/2 6/7/2
f 4/8/3 2/9/3 6/7/3 8/10/3
f 6/7/4 5/4/4 7/3/4 8/10/4
f 9/11/1 11/12/1 14/13/1 12/14/1
f 10/15/2 9/16/2 12/14/2 13/17/2
f 26/18/3 10/19/3 13/17/3 15/20/3
f 13/17/4 12/14/4 14/13/4 15/20/4
f 7/21/2 3/22/2 16/23/2 17/24/2
f 4/25/2 8/26/2 19/27/2 18/28/2
f 18/28/3 19/27/3 25/29/3 24/30/3
f 7/31/4 17/32/4 23/33/4 20/34/4
f 8/35/4 7/31/4 20/34/4 21/36/4
f 17/24/1 16/23/1 22/37/1 23/33/1
f 19/38/4 8/35/4 21/36/4 25/29/4
f 24/30/5 21/36/5 20/34/5
f 3/39/6 11/40/6 22/37/6
f 14/13/5 26/41/5 15/20/5
f 3/2/6 1/1/6 9/42/6 11/43/6
f 2/5/6 10/44/6 9/45/6 1/6/6
f 26/46/6 10/47/6 2/9/6 4/8/6
f 29/48/1 30/49/1 34/50/1 33/51/1
f 31/52/3 32/53/3 28/54/3 27/55/3
f 29/48/6 33/51/6 31/52/6 27/55/6
f 34/50/4 30/49/4 28/56/4 32/57/4
f 37/58/1 38/59/1 42/60/1 41/61/1
f 39/62/3 40/63/3 36/64/3 35/65/3
f 37/58/4 41/61/4 39/62/4 35/65/4
f 42/60/6 38/59/6 36/66/6 40/67/6
f 34/68/5 42/69/5 41/70/5 33/71/5
f 42/69/5 34/68/5 46/72/5 50/73/5
f 42/69/2 40/74/2 48/75/2 50/73/2
f 32/76/5 31/77/5 43/78/5 44/79/5
f 31/77/5 33/71/5 45/80/5 43/78/5
f 33/71/5 41/70/5 49/81/5 45/80/5
f 40/74/2 39/82/2 47/83/2 48/75/2
f 34/68/5 32/76/5 44/79/5 46/72/5
f 39/82/2 41/70/2 49/81/2 47/83/2
f 48/84/3 47/85/3 55/86/3 56/87/3
f 47/88/4 49/89/4 57/90/4 55/86/4
f 46/72/4 44/79/4 52/91/4 54/92/4
f 50/73/4 46/72/4 54/92/4 58/93/4
f 50/73/6 48/75/6 56/87/6 58/93/6
f 44/94/3 43/95/3 51/96/3 52/91/3
f 43/97/6 45/98/6 53/99/6 51/96/6
f 45/98/6 49/89/6 57/90/6 53/99/6
f 53/99/2 57/90/2 58/93/2 54/92/2
f 11/40/6 26/100/6 24/30/6
f 54/92/2 52/91/2 51/96/2 53/99/2
f 58/93/2 57/90/2 55/86/2 56/87/2
f 26/100/6 4/101/6 24/30/6
f 4/101/6 18/102/6 24/30/6
f 24/30/6 22/37/6 11/40/6
f 22/37/6 16/103/6 3/39/6
f 23/33/5 22/37/5 20/34/5
f 22/37/5 24/30/5 20/34/5
f 24/30/5 25/29/5 21/36/5
f 14/13/5 11/104/5 26/41/5
f 1/1/1 5/2/1 7/3/1 3/4/1
f 2/5/2 6/6/2 5/2/2 1/7/2
f 4/8/3 8/9/3 6/6/3 2/10/3
f 6/6/4 8/9/4 7/3/4 5/2/4
f 9/11/3 11/12/3 14/13/3 12/14/3
f 10/15/5 9/16/5 12/14/5 13/17/5
f 26/18/1 10/19/1 13/17/1 15/20/1
f 13/17/6 12/14/6 14/13/6 15/20/6
f 7/21/2 17/22/2 16/23/2 3/24/2
f 4/25/2 18/26/2 19/27/2 8/28/2
f 18/26/3 24/29/3 25/30/3 19/27/3
f 7/31/4 20/32/4 23/33/4 17/34/4
f 8/35/4 21/36/4 20/32/4 7/31/4
f 17/22/1 23/33/1 22/37/1 16/23/1
f 19/38/4 25/30/4 21/36/4 8/35/4
f 24/29/5 20/32/5 21/36/5
f 3/39/6 22/37/6 11/40/6
f 14/13/2 26/41/2 15/20/2
f 3/4/6 11/42/6 9/43/6 1/1/6
f 2/5/6 1/7/6 9/44/6 10/45/6
f 26/46/6 4/8/6 2/10/6 10/47/6
f 29/48/3 30/49/3 34/50/3 33/51/3
f 31/52/1 32/53/1 28/54/1 27/55/1
f 29/48/4 33/51/4 31/52/4 27/55/4
f 34/50/6 30/49/6 28/56/6 32/57/6
f 37/58/1 41/59/1 42/60/1 38/61/1
f 39/62/3 35/63/3 36/64/3 40/65/3
f 37/58/4 35/63/4 39/62/4 41/59/4
f 42/60/6 40/66/6 36/67/6 38/61/6
f 34/68/2 42/69/2 41/70/2 33/71/2
f 42/69/2 34/68/2 46/72/2 50/73/2
f 42/69/2 50/73/2 48/74/2 40/75/2
f 32/76/2 31/77/2 43/78/2 44/79/2
f 31/77/2 33/71/2 45/80/2 43/78/2
f 33/71/2 41/70/2 49/81/2 45/80/2
f 40/75/2 48/74/2 47/82/2 39/83/2
f 34/68/2 32/76/2 44/79/2 46/72/2
f 39/83/2 47/82/2 49/81/2 41/70/2
f 48/84/3 56/85/3 55/86/3 47/87/3
f 47/88/4 55/86/4 57/89/4 49/90/4
f 46/72/6 44/79/6 52/91/6 54/92/6
f 50/73/6 46/72/6 54/92/6 58/93/6
f 50/73/6 58/93/6 56/85/6 48/74/6
f 44/94/1 43/95/1 51/96/1 52/91/1
f 43/97/4 45/98/4 53/99/4 51/96/4
f 45/98/4 49/90/4 57/89/4 53/99/4
f 53/99/5 57/89/5 58/93/5 54/92/5
f 11/40/6 24/29/6 26/100/6
f 54/92/5 52/91/5 51/96/5 53/99/5
f 58/93/5 57/89/5 55/86/5 56/85/5
f 26/100/6 24/29/6 4/101/6
f 4/101/6 24/29/6 18/102/6
f 24/29/6 11/40/6 22/37/6
f 22/37/6 3/39/6 16/103/6
f 23/33/5 20/32/5 22/37/5
f 22/37/5 20/32/5 24/29/5
f 24/29/5 21/36/5 25/30/5
f 14/13/2 11/104/2 26/41/2

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB