15 Commits

Author SHA1 Message Date
0ff7cb769b Fix shading on CNC shape models
Luanti 5.11 showed a lot of flaws in the shading of the CNC models, some
of which were previously obscured. Fix the models so that smooth shading
is applied where appropriate and sharp/flat shading where appropriate.
The modified files have also been run through ExeVirus' CompressObj.
2025-03-01 10:27:59 +01:00
3bece9cec5 Fix incorrect recipe registration for craftguide and i3 2024-12-16 20:46:14 +01:00
59643c45d4 Chainsaw: Chat message for 'aborted by safe cut'
This provides a feedback to the player.
2024-12-07 22:15:43 +01:00
b268e3d526 Fix machines connected to multiple networks (#655)
Machines sometimes were be a part of multiple networks and generated power for each. This is fixed by checking if the machine is already part of an other network before assigning it to the current network.
2024-11-29 18:58:51 +01:00
87e512ff24 Fix power monitor instability (#654)
This fixes the power monitor instability where it was switching between having and not having network infotext. The cause was that the power monitor is LV MV and HV machine at the same time, and each tier has a countdown. If any of these countdowns were 0 it treated the machine as having no network. This was changed so that it only treats a machine as having no network if it is timed out in all tiers that it is a part of.
2024-11-22 21:19:49 +01:00
18df2813a0 Comment print statements in battery_box.lua (#650) 2024-09-06 19:10:04 +02:00
221fc1376e technic_cnc: use programs definition to generate formspec (#647)
This deprecates the variables onesize_products and twosize_products by using a shared definition table.
With these changes, it should be easier to add new programs in the future.

New feature: Tooltips are added to all programs. (only applies to newly placed nodes)
2024-08-10 10:50:51 +02:00
9f373d6528 technic_cnc: Add group 'cracky'
Fixes a regression from ba2bdf836 where stone-like nodes could no longer be dug.
New sanity check to avoid such issues in the future.
2024-08-03 08:25:13 +02:00
6731db14e5 Add compressor recipes for nether racks (#644) 2024-07-07 18:53:15 +02:00
a9079c49e0 Expose technic.get/set_charge functions (#645) 2024-07-07 18:45:03 +02:00
f80372a0f8 Frames: Fix error in node placement callback execution 2024-05-18 18:05:44 +02:00
80dee96dbe Add grinding recipe for nether lump + refactor grinder recipes (#638)
Maintenance:

* Sort dependency-based entries alphabetically
* Refactor dust registration

Features:

* Add grinding recipe for nether lump and ingot + image for nether dust
2024-05-06 17:33:22 +02:00
d65c4aadd2 Add grinder crafting recipe from everness desert stone (#637)
Add two alternative grinder crafting recipes with the two everness desert stones
2024-05-06 17:31:13 +02:00
98675a2ae9 Add compressor recipes for nether brick and lump (#639)
Another addition with nether, similar to the previous one, just this time for compressor.

Clears nether's default recipes for compressed nether brick and nether lump, using the compressor instead for these tasks.
2024-04-30 17:44:51 +02:00
ba2bdf8368 technic_cnc: Use client-side translation API (#636) 2024-04-28 18:41:52 +02:00
27 changed files with 1168 additions and 1132 deletions

View File

@ -160,6 +160,11 @@ Unsorted functions:
* If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this * If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this
function does nothing, else that value is the maximum charge. function does nothing, else that value is the maximum charge.
* The itemstack metadata is changed to contain the charge. * The itemstack metadata is changed to contain the charge.
* `technic.get_charge(itemstack)`
* Returns the charge and max charge of the given itemstack.
* If the itemstack is not an RE chargeable item, both return values will be zero.
* `technic.set_charge(itemstack, charge)`
* Modifies the charge of the given itemstack.
### Node-specific ### Node-specific
* `technic.get_or_load_node(pos)` * `technic.get_or_load_node(pos)`

View File

@ -9,5 +9,25 @@ minetest.register_craft({
} }
}) })
if (minetest.get_modpath('everness')) then
minetest.register_craft({
output = 'technic:lv_grinder',
recipe = {
{'everness:coral_desert_stone', 'default:diamond', 'everness:coral_desert_stone'},
{'everness:coral_desert_stone', 'technic:machine_casing', 'everness:coral_desert_stone'},
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
}
})
minetest.register_craft({
output = 'technic:lv_grinder',
recipe = {
{'everness:forsaken_desert_stone', 'default:diamond', 'everness:forsaken_desert_stone'},
{'everness:forsaken_desert_stone', 'technic:machine_casing', 'everness:forsaken_desert_stone'},
{'technic:granite', 'technic:lv_cable', 'technic:granite'},
}
})
end
technic.register_grinder({tier="LV", demand={200}, speed=1}) technic.register_grinder({tier="LV", demand={200}, speed=1})

View File

@ -324,6 +324,7 @@ for zp = 0, 1 do
on_rightclick = function(pos, node, placer, itemstack, pointed_thing) on_rightclick = function(pos, node, placer, itemstack, pointed_thing)
if is_supported_node(itemstack:get_name()) then if is_supported_node(itemstack:get_name()) then
-- Stripped down version of "core.item_place_node"
if minetest.is_protected(pos, placer:get_player_name()) then if minetest.is_protected(pos, placer:get_player_name()) then
minetest.log("action", placer:get_player_name() minetest.log("action", placer:get_player_name()
.. " tried to place " .. itemstack:get_name() .. " tried to place " .. itemstack:get_name()
@ -347,8 +348,7 @@ for zp = 0, 1 do
end end
-- Run script hook -- Run script hook
local callback = nil for _, callback in ipairs(minetest.registered_on_placenodes) do
for _, _ in ipairs(minetest.registered_on_placenodes) do
-- Copy pos and node because callback can modify them -- Copy pos and node because callback can modify them
local pos_copy = { x = pos.x, y = pos.y, z = pos.z } local pos_copy = { x = pos.x, y = pos.y, z = pos.z }
local newnode_copy = { name = def.name, param1 = 0, param2 = 0 } local newnode_copy = { name = def.name, param1 = 0, param2 = 0 }

View File

@ -92,7 +92,7 @@ local dirtab = {
local tube = { local tube = {
insert_object = function(pos, node, stack, direction) insert_object = function(pos, node, stack, direction)
print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) --print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2)
if direction.y == 1 if direction.y == 1
or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then
return stack return stack
@ -106,7 +106,7 @@ local tube = {
end end
end, end,
can_insert = function(pos, node, stack, direction) can_insert = function(pos, node, stack, direction)
print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2) --print(minetest.pos_to_string(direction), dirtab[direction.x+2+(direction.z+2)*2], node.param2)
if direction.y == 1 if direction.y == 1
or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then or (direction.y == 0 and dirtab[direction.x+2+(direction.z+2)*2] == node.param2) then
return false return false
@ -409,7 +409,7 @@ minetest.register_on_player_receive_fields(
end end
) )
local function default_get_charge(itemstack) function technic.get_charge(itemstack)
-- check if is chargable -- check if is chargable
local tool_name = itemstack:get_name() local tool_name = itemstack:get_name()
if not technic.power_tools[tool_name] then if not technic.power_tools[tool_name] then
@ -419,7 +419,7 @@ local function default_get_charge(itemstack)
return item_meta:get_int("technic:charge"), technic.power_tools[tool_name] return item_meta:get_int("technic:charge"), technic.power_tools[tool_name]
end end
local function default_set_charge(itemstack, charge) function technic.set_charge(itemstack, charge)
local tool_name = itemstack:get_name() local tool_name = itemstack:get_name()
if technic.power_tools[tool_name] then if technic.power_tools[tool_name] then
technic.set_RE_wear(itemstack, charge, technic.power_tools[tool_name]) technic.set_RE_wear(itemstack, charge, technic.power_tools[tool_name])
@ -437,8 +437,8 @@ function technic.charge_tools(meta, batt_charge, charge_step)
-- get callbacks -- get callbacks
local src_def = src_stack:get_definition() local src_def = src_stack:get_definition()
local technic_get_charge = src_def.technic_get_charge or default_get_charge local technic_get_charge = src_def.technic_get_charge or technic.get_charge
local technic_set_charge = src_def.technic_set_charge or default_set_charge local technic_set_charge = src_def.technic_set_charge or technic.set_charge
-- get tool charge -- get tool charge
local tool_charge, item_max_charge = technic_get_charge(src_stack) local tool_charge, item_max_charge = technic_get_charge(src_stack)
@ -471,8 +471,8 @@ function technic.discharge_tools(meta, batt_charge, charge_step, max_charge)
-- get callbacks -- get callbacks
local src_def = src_stack:get_definition() local src_def = src_stack:get_definition()
local technic_get_charge = src_def.technic_get_charge or default_get_charge local technic_get_charge = src_def.technic_get_charge or technic.get_charge
local technic_set_charge = src_def.technic_set_charge or default_set_charge local technic_set_charge = src_def.technic_set_charge or technic.set_charge
-- get tool charge -- get tool charge
local tool_charge, item_max_charge = technic_get_charge(src_stack) local tool_charge, item_max_charge = technic_get_charge(src_stack)

View File

@ -43,84 +43,106 @@ local function check_connections(pos)
return connections return connections
end end
local function clear_networks(pos) local clear_networks
local function clear_network(network_id)
if not network_id then
return
end
for _,v in pairs(technic.networks[network_id].all_nodes) do
local pos1 = minetest.hash_node_position(v)
technic.cables[pos1] = nil
end
local network_bckup = technic.networks[network_id]
technic.networks[network_id] = nil
for _,n_pos in pairs(network_bckup.PR_nodes) do
clear_networks(n_pos)
end
for _,n_pos in pairs(network_bckup.RE_nodes) do
clear_networks(n_pos)
end
for _,n_pos in pairs(network_bckup.BA_nodes) do
clear_networks(n_pos)
end
end
clear_networks = function(pos)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local placed = node.name ~= "air" local placed = node.name ~= "air"
local positions = check_connections(pos) local positions = check_connections(pos)
if #positions < 1 then return end if #positions < 1 then return end
local dead_end = #positions == 1
for _,connected_pos in pairs(positions) do
local net = technic.cables[minetest.hash_node_position(connected_pos)]
if net and technic.networks[net] then
if dead_end and placed then
-- Dead end placed, add it to the network
-- Get the network
local network_id = technic.cables[minetest.hash_node_position(positions[1])]
if not network_id then
-- We're evidently not on a network, nothing to add ourselves to
return
end
local sw_pos = minetest.get_position_from_hash(network_id)
sw_pos.y = sw_pos.y + 1
local network = technic.networks[network_id]
local tier = network.tier
-- Actually add it to the (cached) network if #positions == 1 then
-- !! IMPORTANT: ../switching_station.lua -> check_node_subp() must be kept in sync if placed then
-- Dead end placed, add it to the network
-- Get the network
local network_id = technic.cables[minetest.hash_node_position(positions[1])]
if not network_id then
-- We're evidently not on a network, nothing to add ourselves to
return
end
local network = technic.networks[network_id]
local tier = network.tier
-- Actually add it to the (cached) network
-- !! IMPORTANT: ../switching_station.lua -> check_node_subp() must be kept in sync
if technic.is_tier_cable(node.name, tier) then
technic.cables[minetest.hash_node_position(pos)] = network_id technic.cables[minetest.hash_node_position(pos)] = network_id
pos.visited = 1 table.insert(network.all_nodes,pos)
if technic.is_tier_cable(node.name, tier) then elseif technic.machines[tier][node.name] then
-- Found a cable -- Found a machine
table.insert(network.all_nodes,pos) local eu_type = technic.machines[tier][node.name]
elseif technic.machines[tier][node.name] then meta:set_string(tier.."_network", string.format("%.20g", network_id))
-- Found a machine meta:set_int(tier.."_EU_timeout", 2)
local eu_type = technic.machines[tier][node.name] if eu_type == technic.producer then
meta:set_string(tier.."_network", string.format("%.20g", network_id)) table.insert(network.PR_nodes, pos)
if eu_type == technic.producer then elseif eu_type == technic.receiver then
table.insert(network.PR_nodes, pos) table.insert(network.RE_nodes, pos)
elseif eu_type == technic.receiver then elseif eu_type == technic.producer_receiver then
table.insert(network.RE_nodes, pos) table.insert(network.PR_nodes, pos)
elseif eu_type == technic.producer_receiver then table.insert(network.RE_nodes, pos)
table.insert(network.PR_nodes, pos) elseif eu_type == technic.battery then
table.insert(network.RE_nodes, pos) table.insert(network.BA_nodes, pos)
elseif eu_type == technic.battery then
table.insert(network.BA_nodes, pos)
end
-- Note: SPECIAL (i.e. switching station) is not traversed!
end end
elseif dead_end and not placed then -- Note: SPECIAL (i.e. switching station) is not traversed!
-- Dead end removed, remove it from the network end
-- Get the network else
local network_id = technic.cables[minetest.hash_node_position(positions[1])] -- Dead end removed, remove it from the network
if not network_id then -- Get the network
-- We're evidently not on a network, nothing to add ourselves to local network_id = technic.cables[minetest.hash_node_position(positions[1])]
return if not network_id then
end -- We're evidently not on a network, nothing to add ourselves to
local network = technic.networks[network_id] return
end
local network = technic.networks[network_id]
-- Search for and remove machine -- Search for and remove machine
technic.cables[minetest.hash_node_position(pos)] = nil technic.cables[minetest.hash_node_position(pos)] = nil
for tblname,table in pairs(network) do for tblname,table in pairs(network) do
if tblname ~= "tier" then if tblname ~= "tier" then
for machinenum,machine in pairs(table) do for machinenum,machine in pairs(table) do
if machine.x == pos.x if machine.x == pos.x
and machine.y == pos.y and machine.y == pos.y
and machine.z == pos.z then and machine.z == pos.z then
table[machinenum] = nil table[machinenum] = nil
end
end end
end end
end end
else
-- Not a dead end, so the whole network needs to be recalculated
for _,v in pairs(technic.networks[net].all_nodes) do
local pos1 = minetest.hash_node_position(v)
technic.cables[pos1] = nil
end
technic.networks[net] = nil
end end
end end
return
end
clear_network(technic.cables[minetest.hash_node_position(pos)])
for _,connected_pos in pairs(positions) do
local network_id = technic.cables[minetest.hash_node_position(connected_pos)]
-- Not a dead end, so the whole network needs to be recalculated
clear_network(network_id)
end end
end end
@ -170,7 +192,7 @@ function technic.register_cable(tier, size)
connects_to = {"group:technic_"..ltier.."_cable", connects_to = {"group:technic_"..ltier.."_cable",
"group:technic_"..ltier, "group:technic_all_tiers"}, "group:technic_"..ltier, "group:technic_all_tiers"},
on_construct = clear_networks, on_construct = clear_networks,
on_destruct = clear_networks, after_destruct = clear_networks,
}) })
local xyz = { local xyz = {
@ -210,7 +232,7 @@ function technic.register_cable(tier, size)
connects_to = {"group:technic_"..ltier.."_cable", connects_to = {"group:technic_"..ltier.."_cable",
"group:technic_"..ltier, "group:technic_all_tiers"}, "group:technic_"..ltier, "group:technic_all_tiers"},
on_construct = clear_networks, on_construct = clear_networks,
on_destruct = clear_networks, after_destruct = clear_networks,
} }
def.node_box.fixed = { def.node_box.fixed = {
{-size, -size, -size, size, size, size}, {-size, -size, -size, size, size, size},

View File

@ -8,6 +8,71 @@ function technic.register_compressor_recipe(data)
technic.register_recipe("compressing", data) technic.register_recipe("compressing", data)
end end
-- Defuse the default recipes, since we have
-- the compressor to take over in a more realistic manner.
local crafts_to_clear = {
"default:desert_sand",
"default:sand",
"default:silver_sand",
}
local dependent_crafts_to_clear = {
everness = {
"everness:coral_sand",
"everness:coral_forest_deep_ocean_sand",
"everness:coral_white_sand",
"everness:crystal_sand",
"everness:cursed_sand",
"everness:cursed_lands_deep_ocean_sand",
"everness:crystal_forest_deep_ocean_sand",
"everness:mineral_sand",
},
nether = {
"nether:brick",
"nether:brick_compressed",
"nether:rack",
"nether:rack_deep",
},
}
-- Add dependent recipes to main collection of
-- recipes to be cleared if their mods are used.
for dependency, crafts in pairs(dependent_crafts_to_clear) do
if minetest.get_modpath(dependency) then
for _, craft_entry in ipairs(crafts) do
table.insert(crafts_to_clear, craft_entry)
end
end
end
-- Clear recipes
for _, craft_name in ipairs(crafts_to_clear) do
-- Regular bricks are 2x2 shaped, nether bricks are 3x3 shaped (irregular)
local is_regular = string.sub(craft_name, 1, 12) ~= "nether:brick"
local shaped_recipe
if is_regular then
shaped_recipe = {
{craft_name, craft_name},
{craft_name, craft_name},
}
else
shaped_recipe = {
{craft_name, craft_name, craft_name},
{craft_name, craft_name, craft_name},
{craft_name, craft_name, craft_name},
}
end
minetest.clear_craft({
type = "shaped",
recipe = shaped_recipe,
})
end
--
-- Compile compressor recipes
--
local recipes = { local recipes = {
{"default:snowblock", "default:ice"}, {"default:snowblock", "default:ice"},
{"default:sand 2", "default:sandstone"}, {"default:sand 2", "default:sandstone"},
@ -21,8 +86,8 @@ local recipes = {
{"technic:uranium35_ingot 5", "technic:uranium_fuel"}, {"technic:uranium35_ingot 5", "technic:uranium_fuel"},
} }
if minetest.get_modpath("everness") then local dependent_recipes = {
local everness_sand_to_sandstone_recipes = { everness = {
{"everness:coral_deep_ocean_sand 2", "everness:coral_deep_ocean_sandstone_block"}, {"everness:coral_deep_ocean_sand 2", "everness:coral_deep_ocean_sandstone_block"},
{"everness:coral_sand 2", "everness:coral_sandstone"}, {"everness:coral_sand 2", "everness:coral_sandstone"},
{"everness:coral_white_sand 2", "everness:coral_white_sandstone"}, {"everness:coral_white_sand 2", "everness:coral_white_sandstone"},
@ -31,47 +96,26 @@ if minetest.get_modpath("everness") then
{"everness:cursed_lands_deep_ocean_sand 2", "everness:cursed_lands_deep_ocean_sandstone_block"}, {"everness:cursed_lands_deep_ocean_sand 2", "everness:cursed_lands_deep_ocean_sandstone_block"},
{"everness:cursed_sand 2", "everness:cursed_sandstone_block"}, {"everness:cursed_sand 2", "everness:cursed_sandstone_block"},
{"everness:mineral_sand 2", "everness:mineral_sandstone"}, {"everness:mineral_sand 2", "everness:mineral_sandstone"},
} },
nether = {
for _, data in ipairs(everness_sand_to_sandstone_recipes) do {"nether:brick 9", "nether:brick_compressed"},
table.insert(recipes, {data[1], data[2]}) {"nether:brick_compressed 9", "nether:nether_lump"},
end {"nether:rack", "nether:brick",},
end {"nether:rack_deep", "nether:brick_deep"},
},
-- defuse the default sandstone recipe, since we have the compressor to take over in a more realistic manner
local crafts_to_clear = {
"default:desert_sand",
"default:sand",
"default:silver_sand"
} }
if minetest.get_modpath("everness") then -- Add dependent recipes to main recipe collection
local everness_crafts_to_clear = { -- if their mods are used.
"everness:coral_sand", for dependency, recipes_to_add in pairs(dependent_recipes) do
"everness:coral_forest_deep_ocean_sand", if minetest.get_modpath(dependency) then
"everness:coral_white_sand", for _, recipe_entry in ipairs(recipes_to_add) do
"everness:crystal_sand", table.insert(recipes, recipe_entry)
"everness:cursed_sand", end
"everness:cursed_lands_deep_ocean_sand",
"everness:crystal_forest_deep_ocean_sand",
"everness:mineral_sand",
}
for _, sand_name in ipairs(everness_crafts_to_clear) do
table.insert(crafts_to_clear, sand_name)
end end
end end
for _, sand_name in ipairs(crafts_to_clear) do -- Register compressor recipes
minetest.clear_craft({
type = "shaped",
recipe = {
{sand_name, sand_name},
{sand_name, sand_name},
},
})
end
for _, data in pairs(recipes) do for _, data in pairs(recipes) do
technic.register_compressor_recipe({input = {data[1]}, output = data[2]}) technic.register_compressor_recipe({input = {data[1]}, output = data[2]})
end end

View File

@ -36,73 +36,73 @@ local recipes = {
{"default:ice", "default:snowblock"}, {"default:ice", "default:snowblock"},
} }
if minetest.get_modpath("everness") then local dependent_recipes = {
table.insert(recipes, {"everness:coral_deep_ocean_sandstone_block", "everness:coral_deep_ocean_sand 2"}) -- Sandstones
table.insert(recipes, {"everness:coral_sandstone", "everness:coral_sand 2"}) everness = {
table.insert(recipes, {"everness:coral_white_sandstone", "everness:coral_white_sand 2"}) {"everness:coral_deep_ocean_sandstone_block", "everness:coral_deep_ocean_sand 2"},
table.insert(recipes, {"everness:crystal_forest_deep_ocean_sandstone_block", "everness:crystal_forest_deep_ocean_sand 2"}) {"everness:coral_sandstone", "everness:coral_sand 2"},
table.insert(recipes, {"everness:crystal_sandstone", "everness:crystal_sand 2"}) {"everness:coral_white_sandstone", "everness:coral_white_sand 2"},
table.insert(recipes, {"everness:cursed_lands_deep_ocean_sandstone_block", "everness:cursed_lands_deep_ocean_sand 2"}) {"everness:crystal_forest_deep_ocean_sandstone_block", "everness:crystal_forest_deep_ocean_sand 2"},
table.insert(recipes, {"everness:cursed_sandstone_block", "everness:cursed_sand 2"}) {"everness:crystal_sandstone", "everness:crystal_sand 2"},
table.insert(recipes, {"everness:mineral_sandstone", "everness:mineral_sand 2"}) {"everness:cursed_lands_deep_ocean_sandstone_block", "everness:cursed_lands_deep_ocean_sand 2"},
{"everness:cursed_sandstone_block", "everness:cursed_sand 2"},
{"everness:mineral_sandstone", "everness:mineral_sand 2"},
-- Lumps and wheat
{"everness:pyrite_lump", "technic:pyrite_dust 2"},
},
farming = {
{"farming:seed_wheat", "farming:flour 1"},
},
gloopores = {
{"gloopores:alatro_lump", "technic:alatro_dust 2"},
{"gloopores:kalite_lump", "technic:kalite_dust 2"},
{"gloopores:arol_lump", "technic:arol_dust 2"},
{"gloopores:talinite_lump", "technic:talinite_dust 2"},
{"gloopores:akalin_lump", "technic:akalin_dust 2"},
},
homedecor = {
{"home_decor:brass_ingot", "technic:brass_dust 1"},
},
moreores = {
{"moreores:mithril_lump", "technic:mithril_dust 2"},
{"moreores:silver_lump", "technic:silver_dust 2"},
},
nether = {
{"nether:nether_lump", "technic:nether_dust 2"},
},
}
for dependency, materials_to_add in pairs(dependent_recipes) do
if minetest.get_modpath(dependency) then
for _, material_entry in ipairs(materials_to_add) do
table.insert(recipes, material_entry)
end
end
end end
-- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe) -- defuse the sandstone -> 4 sand recipe to avoid infinite sand bugs (also consult the inverse compressor recipe)
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"default:sandstone"}},
{"default:sandstone"}
},
}) })
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"default:desert_sandstone"}},
{"default:desert_sandstone"}
},
}) })
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"default:silver_sandstone"}},
{"default:silver_sandstone"}
},
}) })
if minetest.get_modpath("everness") then if minetest.get_modpath("everness") then
minetest.clear_craft({ minetest.clear_craft({
recipe = { recipe = {{"everness:mineral_sandstone"}},
{"everness:mineral_sandstone"}
},
}) })
-- Currently (2024-03-09), there seem to be no reverse recipes for any of the other everness sandstones. -- Currently (2024-03-09), there seem to be no reverse recipes for any of the other everness sandstones.
end end
if minetest.get_modpath("farming") then for _, data in ipairs(recipes) do
table.insert(recipes, {"farming:seed_wheat", "farming:flour 1"})
end
if minetest.get_modpath("moreores") then
table.insert(recipes, {"moreores:mithril_lump", "technic:mithril_dust 2"})
table.insert(recipes, {"moreores:silver_lump", "technic:silver_dust 2"})
end
if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then
table.insert(recipes, {"gloopores:alatro_lump", "technic:alatro_dust 2"})
table.insert(recipes, {"gloopores:kalite_lump", "technic:kalite_dust 2"})
table.insert(recipes, {"gloopores:arol_lump", "technic:arol_dust 2"})
table.insert(recipes, {"gloopores:talinite_lump", "technic:talinite_dust 2"})
table.insert(recipes, {"gloopores:akalin_lump", "technic:akalin_dust 2"})
end
if minetest.get_modpath("homedecor") then
table.insert(recipes, {"home_decor:brass_ingot", "technic:brass_dust 1"})
end
if minetest.get_modpath("everness") then
table.insert(recipes, {"everness:pyrite_lump", "technic:pyrite_dust 2"})
end
for _, data in pairs(recipes) do
technic.register_grinder_recipe({input = {data[1]}, output = data[2]}) technic.register_grinder_recipe({input = {data[1]}, output = data[2]})
end end
-- dusts -- Dusts
local function register_dust(name, ingot) local function register_dust(name, ingot)
local lname = string.lower(name) local lname = string.lower(name)
lname = string.gsub(lname, ' ', '_') lname = string.gsub(lname, ' ', '_')
@ -120,36 +120,57 @@ local function register_dust(name, ingot)
end end
end end
-- Sorted alphibeticaly -- Sorted alphabetically
register_dust("Brass", "basic_materials:brass_ingot") local dusts = {
register_dust("Bronze", "default:bronze_ingot") {"Brass", "basic_materials:brass_ingot"},
register_dust("Carbon Steel", "technic:carbon_steel_ingot") {"Bronze", "default:bronze_ingot"},
register_dust("Cast Iron", "technic:cast_iron_ingot") {"Carbon Steel", "technic:carbon_steel_ingot"},
register_dust("Chernobylite", "technic:chernobylite_block") {"Cast Iron", "technic:cast_iron_ingot"},
register_dust("Chromium", "technic:chromium_ingot") {"Chernobylite", "technic:chernobylite_block"},
register_dust("Coal", nil) {"Chromium", "technic:chromium_ingot"},
register_dust("Copper", "default:copper_ingot") {"Coal", nil},
register_dust("Lead", "technic:lead_ingot") {"Copper", "default:copper_ingot"},
register_dust("Gold", "default:gold_ingot") {"Lead", "technic:lead_ingot"},
register_dust("Mithril", "moreores:mithril_ingot") {"Gold", "default:gold_ingot"},
register_dust("Silver", "moreores:silver_ingot") {"Mithril", "moreores:mithril_ingot"},
register_dust("Stainless Steel", "technic:stainless_steel_ingot") {"Silver", "moreores:silver_ingot"},
register_dust("Stone", "default:stone") {"Stainless Steel", "technic:stainless_steel_ingot"},
register_dust("Sulfur", nil) {"Stone", "default:stone"},
register_dust("Tin", "default:tin_ingot") {"Sulfur", nil},
register_dust("Wrought Iron", "technic:wrought_iron_ingot") {"Tin", "default:tin_ingot"},
register_dust("Zinc", "technic:zinc_ingot") {"Wrought Iron", "technic:wrought_iron_ingot"},
if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then {"Zinc", "technic:zinc_ingot"},
register_dust("Akalin", "glooptest:akalin_ingot") }
register_dust("Alatro", "glooptest:alatro_ingot")
register_dust("Arol", "glooptest:arol_ingot") local dependent_dusts = {
register_dust("Kalite", nil) everness = {
register_dust("Talinite", "glooptest:talinite_ingot") {"Pyrite", "everness:pyrite_ingot"},
end },
if minetest.get_modpath("everness") then gloopores = {
register_dust("Pyrite", "everness:pyrite_ingot") {"Akalin", "glooptest:akalin_ingot"},
{"Alatro", "glooptest:alatro_ingot"},
{"Arol", "glooptest:arol_ingot"},
{"Kalite", nil},
{"Talinite", "glooptest:talinite_ingot"},
},
nether = {
{"Nether", "nether:nether_ingot"},
},
}
for dependency, dusts_to_add in pairs(dependent_dusts) do
if minetest.get_modpath(dependency) then
for _, dust_entry in pairs(dusts_to_add) do
table.insert(dusts, dust_entry)
end
end
end end
for _, data in ipairs(dusts) do
register_dust(data[1], data[2])
end
-- Uranium
for p = 0, 35 do for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p local psuffix = p == 7 and "" or p
@ -185,6 +206,7 @@ for pa = 0, 34 do
end end
end end
-- Fuels
minetest.register_craft({ minetest.register_craft({
type = "fuel", type = "fuel",
recipe = "technic:coal_dust", recipe = "technic:coal_dust",

View File

@ -32,7 +32,10 @@ function technic.register_recipe_type(typename, origdata)
end end
local function get_recipe_index(items) local function get_recipe_index(items)
if not items or type(items) ~= "table" then return false end if type(items) ~= "table" then
return false
end
local l = {} local l = {}
for i, stack in ipairs(items) do for i, stack in ipairs(items) do
l[i] = ItemStack(stack):get_name() l[i] = ItemStack(stack):get_name()
@ -75,22 +78,21 @@ local function register_recipe(typename, data)
end end
if (have_cg or have_i3) and technic.recipes[typename].output_size == 1 then if (have_cg or have_i3) and technic.recipes[typename].output_size == 1 then
local result = data.output local result = data.output
if (type(result)=="table") then if type(result) == "table" then
result = result[1] result = result[1]
end end
local items = table.concat(data.input, ", ")
if have_cg and craftguide.register_craft then if have_cg and craftguide.register_craft then
craftguide.register_craft({ craftguide.register_craft({
type = typename, type = typename,
result = result, result = result,
items = {items}, items = data.input,
}) })
end end
if have_i3 then if have_i3 then
i3.register_craft({ i3.register_craft({
type = typename, type = typename,
result = result, result = result,
items = {items}, items = data.input,
}) })
end end
end end

View File

@ -97,12 +97,14 @@ local function flatten(map)
return list return list
end end
-- Add a wire node to the LV/MV/HV network -- Add a node to the LV/MV/HV network
-- Returns: indicator whether the cable is new in the network -- Returns: indicator whether the node is new in the network
local hash_node_position = minetest.hash_node_position local hash_node_position = minetest.hash_node_position
local function add_network_node(nodes, pos, network_id) local function add_network_node(nodes, pos, network_id)
local node_id = hash_node_position(pos) local node_id = hash_node_position(pos)
technic.cables[node_id] = network_id if network_id then
technic.cables[node_id] = network_id
end
if nodes[node_id] then if nodes[node_id] then
return false return false
end end
@ -136,21 +138,31 @@ local check_node_subp = function(network, pos, machines, sw_pos, from_below, net
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
-- Normal tostring() does not have enough precision, neither does meta:set_int() -- Normal tostring() does not have enough precision, neither does meta:set_int()
-- Lua 5.1 bug: Cannot use hexadecimal notation for compression (see LuaJIT #911) -- Lua 5.1 bug: Cannot use hexadecimal notation for compression (see LuaJIT #911)
meta:set_string(network.tier.."_network", string.format("%.20g", network_id)) local network_str = string.format("%.20g", network_id)
local network_key = network.tier.."_network"
local m_network_str = meta:get_string(network_key)
if m_network_str == "" then
meta:set_string(network_key, network_str)
else
if m_network_str ~= network_str then
return
end
end
if eu_type == technic.producer then if eu_type == technic.producer then
add_network_node(network.PR_nodes, pos, network_id) add_network_node(network.PR_nodes, pos)
elseif eu_type == technic.receiver then elseif eu_type == technic.receiver then
add_network_node(network.RE_nodes, pos, network_id) add_network_node(network.RE_nodes, pos)
elseif eu_type == technic.producer_receiver then elseif eu_type == technic.producer_receiver then
add_network_node(network.PR_nodes, pos, network_id) add_network_node(network.PR_nodes, pos)
add_network_node(network.RE_nodes, pos, network_id) add_network_node(network.RE_nodes, pos)
elseif eu_type == technic.battery then elseif eu_type == technic.battery then
add_network_node(network.BA_nodes, pos, network_id) add_network_node(network.BA_nodes, pos)
elseif eu_type == "SPECIAL" and from_below and elseif eu_type == "SPECIAL" and from_below and
not vector.equals(pos, sw_pos) then not vector.equals(pos, sw_pos) then
-- Another switching station -> disable it -- Another switching station -> disable it
add_network_node(network.SP_nodes, pos, network_id) add_network_node(network.SP_nodes, pos)
meta:set_int("active", 0) meta:set_int("active", 0)
end end
@ -193,7 +205,6 @@ local get_network = function(sw_pos, cable_pos, tier)
end end
return cached.PR_nodes, cached.BA_nodes, cached.RE_nodes return cached.PR_nodes, cached.BA_nodes, cached.RE_nodes
end end
local machines = technic.machines[tier] local machines = technic.machines[tier]
local network = { local network = {
tier = tier, tier = tier,
@ -455,6 +466,7 @@ local function switching_station_timeout_count(pos, tier)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local timeout = meta:get_int(tier.."_EU_timeout") local timeout = meta:get_int(tier.."_EU_timeout")
if timeout <= 0 then if timeout <= 0 then
meta:set_string(tier.."_network", "")
meta:set_int(tier.."_EU_input", 0) -- Not needed anymore <-- actually, it is for supply converter meta:set_int(tier.."_EU_input", 0) -- Not needed anymore <-- actually, it is for supply converter
return true return true
else else
@ -468,22 +480,29 @@ minetest.register_abm({
interval = 1, interval = 1,
chance = 1, chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider) action = function(pos, node, active_object_count, active_object_count_wider)
local has_network = false
local technic_machine = false
for tier, machines in pairs(technic.machines) do for tier, machines in pairs(technic.machines) do
if machines[node.name] and switching_station_timeout_count(pos, tier) then if machines[node.name] then
local nodedef = minetest.registered_nodes[node.name] technic_machine = true
if nodedef then if not switching_station_timeout_count(pos, tier) then
local meta = minetest.get_meta(pos) has_network = true
meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description))
end
if nodedef and nodedef.technic_disabled_machine_name then
node.name = nodedef.technic_disabled_machine_name
minetest.swap_node(pos, node)
end
if nodedef and nodedef.technic_on_disable then
nodedef.technic_on_disable(pos, node)
end end
end end
end end
if technic_machine and not has_network then
local nodedef = minetest.registered_nodes[node.name]
local meta = minetest.get_meta(pos)
meta:set_string("infotext", S("%s Has No Network"):format(nodedef.description))
if nodedef.technic_disabled_machine_name then
node.name = nodedef.technic_disabled_machine_name
minetest.swap_node(pos, node)
end
if nodedef.technic_on_disable then
nodedef.technic_on_disable(pos, node)
end
end
end, end,
}) })

View File

@ -1,3 +1,3 @@
name = technic name = technic
depends = default, pipeworks, technic_worldgen, basic_materials depends = default, pipeworks, technic_worldgen, basic_materials
optional_depends = bucket, screwdriver, mesecons, mesecons_mvps, digilines, digiline_remote, intllib, unified_inventory, vector_extras, dye, craftguide, i3, everness optional_depends = bucket, screwdriver, mesecons, mesecons_mvps, digilines, digiline_remote, intllib, unified_inventory, vector_extras, dye, craftguide, i3, everness, nether

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

View File

@ -128,6 +128,7 @@ local function dig_recursive(x, y, z)
if safe_cut and cutter.param2[i] ~= 0 then if safe_cut and cutter.param2[i] ~= 0 then
-- Do not dig manually placed nodes -- Do not dig manually placed nodes
-- Problem: moretrees' generated jungle trees use param2 = 2 -- Problem: moretrees' generated jungle trees use param2 = 2
cutter.stopped_by_safe_cut = true
return return
end end
@ -201,6 +202,11 @@ local function chainsaw_dig(player, pos, remaining_charge)
return return
end end
if cutter.stopped_by_safe_cut then
minetest.chat_send_player(player_name, S("The chainsaw could not dig all nodes" ..
" because the safety mechanism was activated."))
end
minetest.sound_play("chainsaw", { minetest.sound_play("chainsaw", {
pos = pos, pos = pos,
gain = 1.0, gain = 1.0,

View File

@ -29,7 +29,7 @@ if technic_cnc.use_technic then
allow_metadata_inventory_take = technic.machine_inventory_take allow_metadata_inventory_take = technic.machine_inventory_take
allow_metadata_inventory_move = technic.machine_inventory_move allow_metadata_inventory_move = technic.machine_inventory_move
can_dig = technic.machine_can_dig can_dig = technic.machine_can_dig
desc_tr = S("%s CNC Machine"):format("LV") desc_tr = S("@1 CNC Machine", S("LV"))
else else
minetest.register_craft({ minetest.register_craft({
output = 'technic:cnc', output = 'technic:cnc',
@ -72,74 +72,68 @@ else
end end
end end
local onesize_products = { local function add_buttons(do_variants, t, x, y)
slope = 2, local X_OFFSET = 1
slope_edge = 1, local BUTTONS_PER_ROW = 7
slope_inner_edge = 1,
pyramid = 2,
spike = 1,
cylinder = 2,
oblate_spheroid = 1,
sphere = 1,
stick = 8,
slope_upsdown = 2,
slope_edge_upsdown = 1,
slope_inner_edge_upsdown = 1,
cylinder_horizontal = 2,
slope_lying = 2,
onecurvededge = 1,
twocurvededge = 1,
}
local twosize_products = {
element_straight = 2,
element_end = 2,
element_cross = 1,
element_t = 1,
element_edge = 2,
}
local cnc_formspec = -- ipairs: only iterate over continuous integers
"size[9,11;]".. for _, data in ipairs(technic_cnc.programs) do
"label[1,0;"..S("Choose Milling Program:").."]".. -- Never add full variants. Only add half variants when asked
"image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]".. if not data.half_counterpart and (do_variants == (data.full_counterpart ~= nil)) then
"image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]".. --print("add", data.suffix)
"image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]".. t[#t + 1] = ("image_button[%g,%g;1,1;%s.png;%s; ]"):format(
"image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]".. x + X_OFFSET, y, data.suffix, data.short_name
"image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]".. )
"image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]".. t[#t + 1] = ("tooltip[%s;%s]"):format(
"image_button[7,0.5;1,1;technic_cnc_oblate_spheroid.png;oblate_spheroid; ]".. data.short_name, minetest.formspec_escape(data.desc .. " (* " .. data.output .. ")")
"image_button[8,0.5;1,1;technic_cnc_stick.png;stick; ]".. )
"image_button[1,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]".. x = x + 1
"image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]".. if x == BUTTONS_PER_ROW then
"image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]".. x = 0
"image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]".. y = y + 1
"image_button[5,1.5;1,1;technic_cnc_sphere.png;sphere; ]".. end
end
end
end
"image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]".. local function make_formspec()
"image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]".. local t = {
"image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]".. "size[9,11;]",
"label[1,0;"..S("Choose Milling Program:").."]",
}
add_buttons(false, t, 0, 0.5)
"label[1,3.5;"..S("Slim Elements half / normal height:").."]".. t[#t + 1] = (
"label[1,3.5;"..S("Slim Elements half / normal height:").."]"..
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]"..
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]"
)
add_buttons(true, t, 1, 4)
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]".. t[#t + 1] = (
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]".. "label[0, 5;"..S("In:").."]"..
"image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]".. "list[current_name;src;0.5,5.5;1,1;]"..
"image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]".. "label[4, 5;"..S("Out:").."]"..
"image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]".. "list[current_name;dst;5,5.5;4,1;]"..
"image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]"..
"image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
"label[0, 5.5;"..S("In:").."]".. "list[current_player;main;0,7;8,4;]"..
"list[current_name;src;0.5,5.5;1,1;]".. "listring[current_name;dst]"..
"label[4, 5.5;"..S("Out:").."]".. "listring[current_player;main]"..
"list[current_name;dst;5,5.5;4,1;]".. "listring[current_name;src]"..
"listring[current_player;main]"
)
return table.concat(t)
end
local cnc_formspec = nil
minetest.register_on_mods_loaded(function()
technic_cnc._populate_shortcuts()
cnc_formspec = make_formspec()
end)
"list[current_player;main;0,7;8,4;]"..
"listring[current_name;dst]"..
"listring[current_player;main]"..
"listring[current_name;src]"..
"listring[current_player;main]"
-- The form handler is declared here because we need it in both the inactive and active modes -- The form handler is declared here because we need it in both the inactive and active modes
-- in order to be able to change programs wile it is running. -- in order to be able to change programs wile it is running.
@ -168,27 +162,28 @@ local function form_handler(pos, formname, fields, sender)
for k, _ in pairs(fields) do for k, _ in pairs(fields) do
-- Set a multipier for the half/full size capable blocks -- Set a multipier for the half/full size capable blocks
local multiplier local program = technic_cnc.programs["technic_cnc_" .. k]
if twosize_products[k] ~= nil then if size == 1 and program and program.full_counterpart then
multiplier = size * twosize_products[k] program = technic_cnc.programs["technic_cnc_" .. k .. "_double"]
else
multiplier = onesize_products[k]
end end
if program then
local multiplier = program.output
local product = inputname .. "_" .. program.suffix
if onesize_products[k] ~= nil or twosize_products[k] ~= nil then
meta:set_float( "cnc_multiplier", multiplier) meta:set_float( "cnc_multiplier", multiplier)
meta:set_string("cnc_user", sender:get_player_name()) meta:set_string("cnc_user", sender:get_player_name())
end
if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then if program.half_counterpart then -- is full
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k) if size == 1 then
--print(inputname .. "_technic_cnc_" .. k) meta:set_string("cnc_product", product)
break --print(product, multiplier)
end end
break -- no larger sizes allowed
end
if twosize_products[k] ~= nil and size==1 then -- half for normal
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k .. "_double") meta:set_string("cnc_product", product)
--print(inputname .. "_technic_cnc_" .. k .. "_double") --print(product, multiplier)
break break
end end
end end
@ -221,7 +216,7 @@ local run = function(pos, node)
(not minetest.registered_nodes[result]) or (not minetest.registered_nodes[result]) or
(not inv:room_for_item("dst", result)) then (not inv:room_for_item("dst", result)) then
technic.swap_node(pos, machine_node) technic.swap_node(pos, machine_node)
meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_string("infotext", S("@1 Idle", machine_name))
meta:set_string("cnc_product", "") meta:set_string("cnc_product", "")
meta:set_int("LV_EU_demand", 0) meta:set_int("LV_EU_demand", 0)
return return
@ -229,14 +224,14 @@ local run = function(pos, node)
if eu_input < demand then if eu_input < demand then
technic.swap_node(pos, machine_node) technic.swap_node(pos, machine_node)
meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) meta:set_string("infotext", S("@1 Unpowered", machine_name))
elseif eu_input >= demand then elseif eu_input >= demand then
technic.swap_node(pos, machine_node.."_active") technic.swap_node(pos, machine_node.."_active")
meta:set_string("infotext", S("%s Active"):format(machine_name)) meta:set_string("infotext", S("@1 Active", machine_name))
meta:set_int("src_time", meta:get_int("src_time") + 1) meta:set_int("src_time", meta:get_int("src_time") + 1)
if meta:get_int("src_time") >= 3 then -- 3 ticks per output if meta:get_int("src_time") >= 3 then -- 3 ticks per output
meta:set_int("src_time", 0) meta:set_int("src_time", 0)
srcstack = inv:get_stack("src", 1) local srcstack = inv:get_stack("src", 1)
srcstack:take_item() srcstack:take_item()
inv:set_stack("src", 1, srcstack) inv:set_stack("src", 1, srcstack)
inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier")) inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier"))

View File

@ -8,16 +8,27 @@ local ALPHA_CLIP = minetest.features.use_texture_alpha_string_modes and "clip" o
------------------------------------------------------ ------------------------------------------------------
-- Define slope boxes for the various nodes -- Define slope boxes for the various nodes
--[[
Additional keys after registration:
programs[program.suffix] = program
Additional fields after registration:
program.short_name = (trimmed suffix)
program.full_counterpart = suffix (optional, for full/half variants)
program.half_counterpart = suffix (optional, for full/half variants)
]]
------------------------------------------- -------------------------------------------
technic_cnc.programs = { technic_cnc.programs = {
{ suffix = "technic_cnc_stick", { suffix = "technic_cnc_stick",
model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}, model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
desc = S("Stick") desc = S("Stick"),
output = 8
}, },
{ suffix = "technic_cnc_element_end_double", { suffix = "technic_cnc_element_end_double",
model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5}, model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
desc = S("Element End Double") desc = S("Element End Double"),
output = 2
}, },
{ suffix = "technic_cnc_element_cross_double", { suffix = "technic_cnc_element_cross_double",
@ -25,7 +36,8 @@ technic_cnc.programs = {
{0.3, -0.5, -0.3, 0.5, 0.5, 0.3}, {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
desc = S("Element Cross Double") desc = S("Element Cross Double"),
output = 1
}, },
{ suffix = "technic_cnc_element_t_double", { suffix = "technic_cnc_element_t_double",
@ -33,24 +45,28 @@ technic_cnc.programs = {
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}, {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
{0.3, -0.5, -0.3, 0.5, 0.5, 0.3}}, {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}},
desc = S("Element T Double") desc = S("Element T Double"),
output = 1
}, },
{ suffix = "technic_cnc_element_edge_double", { suffix = "technic_cnc_element_edge_double",
model = { model = {
{-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
{-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
desc = S("Element Edge Double") desc = S("Element Edge Double"),
output = 2
}, },
{ suffix = "technic_cnc_element_straight_double", { suffix = "technic_cnc_element_straight_double",
model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
desc = S("Element Straight Double") desc = S("Element Straight Double"),
output = 2
}, },
{ suffix = "technic_cnc_element_end", { suffix = "technic_cnc_element_end",
model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5}, model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
desc = S("Element End") desc = S("Element End"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_cross", { suffix = "technic_cnc_element_cross",
@ -58,7 +74,8 @@ technic_cnc.programs = {
{0.3, -0.5, -0.3, 0.5, 0, 0.3}, {0.3, -0.5, -0.3, 0.5, 0, 0.3},
{-0.3, -0.5, -0.5, 0.3, 0, 0.5}, {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
desc = S("Element Cross") desc = S("Element Cross"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_t", { suffix = "technic_cnc_element_t",
@ -66,19 +83,22 @@ technic_cnc.programs = {
{-0.3, -0.5, -0.5, 0.3, 0, 0.3}, {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}, {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
{0.3, -0.5, -0.3, 0.5, 0, 0.3}}, {0.3, -0.5, -0.3, 0.5, 0, 0.3}},
desc = S("Element T") desc = S("Element T"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_edge", { suffix = "technic_cnc_element_edge",
model = { model = {
{-0.3, -0.5, -0.5, 0.3, 0, 0.3}, {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
{-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
desc = S("Element Edge") desc = S("Element Edge"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_element_straight", { suffix = "technic_cnc_element_straight",
model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
desc = S("Element Straight") desc = S("Element Straight"),
output = nil -- calculated
}, },
{ suffix = "technic_cnc_oblate_spheroid", { suffix = "technic_cnc_oblate_spheroid",
@ -91,32 +111,38 @@ technic_cnc.programs = {
{ -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 }, { -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 },
{ -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 } { -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_sphere", { suffix = "technic_cnc_sphere",
model = "technic_cnc_sphere.obj", model = "technic_cnc_sphere.obj",
desc = S("Sphere") desc = S("Sphere"),
output = 1
}, },
{ suffix = "technic_cnc_cylinder_horizontal", { suffix = "technic_cnc_cylinder_horizontal",
model = "technic_cnc_cylinder_horizontal.obj", model = "technic_cnc_cylinder_horizontal.obj",
desc = S("Horizontal Cylinder") desc = S("Horizontal Cylinder"),
output = 2
}, },
{ suffix = "technic_cnc_cylinder", { suffix = "technic_cnc_cylinder",
model = "technic_cnc_cylinder.obj", model = "technic_cnc_cylinder.obj",
desc = S("Cylinder") desc = S("Cylinder"),
output = 2
}, },
{ suffix = "technic_cnc_twocurvededge", { suffix = "technic_cnc_twocurvededge",
model = "technic_cnc_two_curved_edge.obj", model = "technic_cnc_two_curved_edge.obj",
desc = S("Two Curved Edge/Corner Block") desc = S("Two Curved Edge/Corner Block"),
output = 1
}, },
{ suffix = "technic_cnc_onecurvededge", { suffix = "technic_cnc_onecurvededge",
model = "technic_cnc_one_curved_edge.obj", model = "technic_cnc_one_curved_edge.obj",
desc = S("One Curved Edge Block") desc = S("One Curved Edge Block"),
output = 1
}, },
{ suffix = "technic_cnc_spike", { suffix = "technic_cnc_spike",
@ -130,7 +156,8 @@ technic_cnc.programs = {
{ -6/16, -4/16, -6/16, 6/16, 0, 6/16 }, { -6/16, -4/16, -6/16, 6/16, 0, 6/16 },
{ -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_pyramid", { suffix = "technic_cnc_pyramid",
@ -144,7 +171,8 @@ technic_cnc.programs = {
{ -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 }, { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 },
{ -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
} }
} },
output = 2
}, },
{ suffix = "technic_cnc_slope_inner_edge_upsdown", { suffix = "technic_cnc_slope_inner_edge_upsdown",
@ -165,7 +193,8 @@ technic_cnc.programs = {
{ -0.5, 0.25, -0.25, 0.5, 0, 0.5 }, { -0.5, 0.25, -0.25, 0.5, 0, 0.5 },
{ -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 } { -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_edge_upsdown", { suffix = "technic_cnc_slope_edge_upsdown",
@ -179,7 +208,8 @@ technic_cnc.programs = {
{ 0, 0, 0, 8/16, -4/16, 8/16 }, { 0, 0, 0, 8/16, -4/16, 8/16 },
{ 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 } { 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_inner_edge", { suffix = "technic_cnc_slope_inner_edge",
@ -200,7 +230,8 @@ technic_cnc.programs = {
{ -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 }, { -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 },
{ 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 } { 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_edge", { suffix = "technic_cnc_slope_edge",
@ -214,7 +245,8 @@ technic_cnc.programs = {
{ -4/16, -4/16, -4/16, 8/16, 0, 8/16 }, { -4/16, -4/16, -4/16, 8/16, 0, 8/16 },
{ -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_upsdown", { suffix = "technic_cnc_slope_upsdown",
@ -228,7 +260,8 @@ technic_cnc.programs = {
{ -8/16, 0, 0, 8/16, -4/16, 8/16 }, { -8/16, 0, 0, 8/16, -4/16, 8/16 },
{ -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 } { -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 }
} }
} },
output = 1
}, },
{ suffix = "technic_cnc_slope_lying", { suffix = "technic_cnc_slope_lying",
@ -242,7 +275,8 @@ technic_cnc.programs = {
{ -4/16, -8/16, -4/16, 0, 8/16, 8/16 }, { -4/16, -8/16, -4/16, 0, 8/16, 8/16 },
{ -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 } { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 }
} }
} },
output = 2
}, },
{ suffix = "technic_cnc_slope", { suffix = "technic_cnc_slope",
@ -256,11 +290,40 @@ technic_cnc.programs = {
{ -8/16, -4/16, -4/16, 8/16, 0, 8/16 }, { -8/16, -4/16, -4/16, 8/16, 0, 8/16 },
{ -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
} }
} },
output = 2
}, },
} }
technic_cnc._populate_shortcuts = function()
-- Program quick access by string key
for _, data in ipairs(technic_cnc.programs) do
technic_cnc.programs[data.suffix] = data
data.short_name = assert(data.suffix:match("technic_cnc_(%S+)"))
end
-- Detect half/full counterparts
for k, data in pairs(technic_cnc.programs) do
if type(k) == "string" then
local full = technic_cnc.programs[k .. "_double"]
if full then
full.half_counterpart = k
data.full_counterpart = k .. "_double"
data.output = full.output * 2
--print("populate", k)
end
end
end
-- Final checks
for _, data in ipairs(technic_cnc.programs) do
assert(type(data.output) == "number", data.suffix)
assert(type(data.short_name) == "string", data.suffix)
end
end
-- Allow disabling certain programs for some node. Default is allowing all types for all nodes -- Allow disabling certain programs for some node. Default is allowing all types for all nodes
technic_cnc.programs_disable = { technic_cnc.programs_disable = {
-- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick
@ -327,44 +390,3 @@ function technic_cnc.register_all(recipeitem, groups, images, description)
end end
end end
-- REGISTER NEW TECHNIC_CNC_API's PART 2: technic_cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
-----------------------------------------------------------------------------------------------------------------------
function technic_cnc.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_spheroid, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
-- TODO: Remove this evil sorcery
technic_cnc.register_slope(recipeitem, groups, images, desc_slope)
technic_cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying)
technic_cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown)
technic_cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge)
technic_cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge)
technic_cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge)
technic_cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge)
technic_cnc.register_pyramid(recipeitem, groups, images, desc_pyramid)
technic_cnc.register_spike(recipeitem, groups, images, desc_spike)
technic_cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
technic_cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
technic_cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
technic_cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
technic_cnc.register_spheroid(recipeitem, groups, images, desc_spheroid)
technic_cnc.register_element_straight(recipeitem, groups, images, desc_element_straight)
technic_cnc.register_element_edge(recipeitem, groups, images, desc_element_edge)
technic_cnc.register_element_t(recipeitem, groups, images, desc_element_t)
technic_cnc.register_element_cross(recipeitem, groups, images, desc_element_cross)
technic_cnc.register_element_end(recipeitem, groups, images, desc_element_end)
end
-- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz)
------------------------------------------------------------------------------------------------------------
function technic_cnc.register_stick_etc(recipeitem, groups, images, desc_stick)
-- TODO: Remove this evil sorcery
technic_cnc.register_stick(recipeitem, groups, images, desc_stick)
end
function technic_cnc.register_elements(recipeitem, groups, images, desc_element_straight_double, desc_element_edge_double, desc_element_t_double, desc_element_cross_double, desc_element_end_double)
-- TODO: Remove this evil sorcery
technic_cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double)
technic_cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double)
technic_cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double)
technic_cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double)
technic_cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double)
end

View File

@ -3,129 +3,68 @@
local S = technic_cnc.getter local S = technic_cnc.getter
-- DIRT local function register_material(nodename, tiles_override, descr_override)
------- local ndef = minetest.registered_nodes[nodename]
technic_cnc.register_all("default:dirt", if not ndef then
{snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1}, return
{"default_dirt.png"}, end
S("Dirt"))
-- (DIRT WITH) GRASS
--------------------
technic_cnc.register_all("default:dirt_with_grass",
{snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
{"default_grass.png"},
S("Grassy dirt"))
-- WOOD
-------
technic_cnc.register_all("default:wood",
{snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
{"default_wood.png"},
S("Wooden"))
-- STONE
--------
technic_cnc.register_all("default:stone",
{cracky=3, not_in_creative_inventory=1},
{"default_stone.png"},
S("Stone"))
-- COBBLE
---------
technic_cnc.register_all("default:cobble",
{cracky=3, not_in_creative_inventory=1},
{"default_cobble.png"},
S("Cobble"))
-- BRICK
--------
technic_cnc.register_all("default:brick",
{cracky=3, not_in_creative_inventory=1},
{"default_brick.png"},
S("Brick"))
-- SANDSTONE local groups = {
------------ cracky = ndef.groups.cracky,
technic_cnc.register_all("default:sandstone", crumbly = ndef.groups.crumbly,
{crumbly=2, cracky=3, not_in_creative_inventory=1}, choppy = ndef.groups.choppy,
{"default_sandstone.png"}, flammable = ndef.groups.flammable,
S("Sandstone")) level = ndef.groups.level,
snappy = ndef.groups.snappy,
wood = ndef.groups.wood,
oddly_breakable_by_hand = ndef.groups.oddly_breakable_by_hand,
not_in_creative_inventory = 1,
}
local count = 0
for _ in pairs(groups) do
count = count + 1
end
assert(count >= 2, "Too few groups. node name=" .. nodename)
-- LEAVES local tiles = tiles_override or { ndef.tiles[#ndef.tiles] }
--------- assert(tiles and #tiles == 1, "Unknown tile format in node name=" .. nodename)
technic_cnc.register_all("default:leaves",
{snappy=2, choppy=2, oddly_breakable_by_hand=3, not_in_creative_inventory=1},
{"default_leaves.png"},
S("Leaves"))
-- TREE
-------
technic_cnc.register_all("default:tree",
{snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, wood=1, not_in_creative_inventory=1},
{"default_tree.png"},
S("Tree"))
-- Bronze technic_cnc.register_all(nodename,
-------- groups,
technic_cnc.register_all("default:bronzeblock", tiles,
{cracky=1, level=2, not_in_creative_inventory=1}, descr_override or ndef.description or "<unknown>"
{"default_bronze_block.png"}, )
S("Bronze"))
local steeltex = "default_steel_block.png"
local steelname = "Steel"
if technic_cnc.technic_modpath then
steeltex = "technic_wrought_iron_block.png"
steelname = "Wrought Iron"
-- Stainless Steel
--------
technic_cnc.register_all("technic:stainless_steel_block",
{cracky=1, level=2, not_in_creative_inventory=1},
{"technic_stainless_steel_block.png"},
S("Stainless Steel"))
-- Marble
------------
technic_cnc.register_all("technic:marble",
{cracky=3, not_in_creative_inventory=1},
{"technic_marble.png"},
S("Marble"))
-- Granite
------------
technic_cnc.register_all("technic:granite",
{cracky=1, not_in_creative_inventory=1},
{"technic_granite.png"},
S("Granite"))
-- Blast-resistant concrete
---------------------------
technic_cnc.register_all("technic:blast_resistant_concrete",
{cracky=2, level=2, not_in_creative_inventory=1},
{"technic_blast_resistant_concrete_block.png"},
S("Blast-resistant concrete"))
end end
-- STEEL register_material("default:dirt")
--------------- register_material("default:dirt_with_grass", {"default_grass.png"}, S("Grassy dirt"))
technic_cnc.register_all("default:steelblock", register_material("default:wood", nil, S("Wooden"))
{cracky=1, level=2, not_in_creative_inventory=1}, register_material("default:stone")
{steeltex}, register_material("default:cobble")
S(steelname)) register_material("default:sandstone")
register_material("default:leaves")
register_material("default:tree")
register_material("default:bronzeblock", nil, S("Bronze"))
local steelname = S("Steel")
if technic_cnc.technic_modpath then
steelname = S("Wrought Iron")
register_material("technic:stainless_steel_block", nil, S("Stainless Steel"))
register_material("technic:stainless_steel_block")
register_material("technic:marble")
register_material("technic:granite")
register_material("technic:blast_resistant_concrete")
register_material("technic:blast_resistant_concrete")
end
register_material("default:steelblock", nil, steelname)
-- CONCRETE AND CEMENT -- CONCRETE AND CEMENT
---------------------- ----------------------
technic_cnc.register_all("basic_materials:concrete_block", register_material("basic_materials:concrete_block")
{cracky=2, level=2, not_in_creative_inventory=1}, register_material("basic_materials:cement_block")
{"basic_materials_concrete_block.png"}, register_material("basic_materials:brass_block")
S("Concrete"))
technic_cnc.register_all("basic_materials:cement_block",
{cracky=2, level=2, not_in_creative_inventory=1},
{"basic_materials_cement_block.png"},
S("Cement"))
technic_cnc.register_all("basic_materials:brass_block",
{cracky=1, level=2, not_in_creative_inventory=1},
{"basic_materials_brass_block.png"},
S("Brass block"))

View File

@ -3,25 +3,11 @@ local modpath = minetest.get_modpath("technic_cnc")
technic_cnc = {} technic_cnc = {}
technic_cnc.technic_modpath = minetest.get_modpath("technic") technic_cnc.technic_modpath = minetest.get_modpath("technic")
technic_cnc.getter = minetest.get_translator("technic_cnc")
technic_cnc.use_technic = technic_cnc.technic_modpath technic_cnc.use_technic = technic_cnc.technic_modpath
and minetest.settings:get_bool("technic_cnc_use_technic") ~= false and minetest.settings:get_bool("technic_cnc_use_technic") ~= false
if rawget(_G, "intllib") then
technic_cnc.getter = intllib.Getter()
else
-- Intllib copypasta: TODO replace with the client-side translation API
technic_cnc.getter = function(s,a,...)
if a==nil then return s end
a={a,...}
return s:gsub("(@?)@(%(?)(%d+)(%)?)", function(e,o,n,c)
if e==""then
return a[tonumber(n)]..(o==""and c or"")
end
return "@"..o..n..c
end)
end
end
dofile(modpath.."/cnc.lua") dofile(modpath.."/cnc.lua")
dofile(modpath.."/cnc_api.lua") dofile(modpath.."/cnc_api.lua")

View File

@ -1,36 +0,0 @@
## CNC
CNC Machine = CNC-Maschine
%s CNC Machine = %s CNC-Maschine
Cylinder = Zylinder
Element Cross = Halbes Kreuzelement
Element Cross Double = Kreuzelement
Element Edge = Halbes Eckelement
Element Edge Double = Eckelement
Element End = Halbes Endelement
Element End Double = Endelement
Element Straight = Halbes aufrechtes Element
Element Straight Double = Aufrechtes Element
Element T = Halbes T-Element
Element T Double = T-Element
Horizontal Cylinder = Liegender Zylinder
One Curved Edge Block = Block mit einer abgerundeten Kante
Pyramid = Pyramide
Slope = Schraege
Slope Edge = Schraege mit Ecke
Slope Inner Edge = Schraege mit Innenecke
Slope Lying = Liegende Schraege
Slope Upside Down = Umgedrehte Schraege
Slope Upside Down Edge = Umgedrehte Schraege mit Ecke
Slope Upside Down Inner Edge = Umgedrehte Schraege mit Innenecke
Sphere = Kugel
Spike = Spitze
Stick = Stange
Two Curved Edge Block = Block mit zwei abgerundeten Kanten
Brick = Ziegel:
Cobble = Pflasterstein:
Dirt = Erde:
Leaves = Laub:
Sandstone = Sandstein:
Stone = Stein:
Tree = Baumstamm:
Wooden = Holz:

View File

@ -0,0 +1,50 @@
# textdomain: technic_cnc
## CNC
##[ cnc.lua ]##
CNC Machine=CNC-Maschine
@1 CNC Machine=@1 CNC-Maschine
LV=LV
Choose Milling Program:=Wähle das Fräsprogramm aus:
Slim Elements half / normal height:=Schmale halb- / normalhohe Elemente:
In:=Eingabe:
Out:=Ausgabe:
@1 Idle=@1 (wartend)
@1 Unpowered=@1 (unbestromt)
@1 Active=@1 (aktiv)
##[ cnc_api.lua ]##
Stick=Stock
Element End Double=Endelement
Element Cross Double=Kreuzelement
Element T Double=T-Element
Element Edge Double=Eckelement
Element Straight Double=Gerades Element
Element End=Halbes Endelement
Element Cross=Halbes Kreuzelement
Element T=Halbes T-Element
Element Edge=Halbes Eckelement
Element Straight=Halbes Gerades Eleent
Oblate spheroid=Sphärenstück
Sphere=Sphäre
Horizontal Cylinder=Horizontaler Zylinder
Cylinder=Zylinder
Two Curved Edge/Corner Block=Doppelt gekrümmter Eck/-Randblock
One Curved Edge Block=Einfach gekrümmter Eckblock
Spike=Spitze
Pyramid=Pyramide
Slope Upside Down Inner Edge/Corner=Schräge (kopfüber), innere Ecke
Slope Upside Down Outer Edge/Corner=Schräge (kopfüber), äussere Ecke
Slope Inner Edge/Corner=Schräge, innere Ecke
Slope Outer Edge/Corner=Schräge äussere Ecke
Slope Upside Down=Schräge (kopfüber)
Slope Lying=Liegende Schräge
Slope=Schräge
##[ cnc_materials.lua ]##
Grassy dirt=Erde mit Gras
Wooden=Holz
Bronze=Bronze
Steel=Stahl
Wrought Iron=Schmiedeeisen
Stainless Steel=Edelstahl

View File

@ -1,36 +1,50 @@
# textdomain: technic_cnc
## CNC ## CNC
CNC Machine =
%s CNC Machine = ##[ cnc.lua ]##
Cylinder = CNC Machine=
Element Cross = @1 CNC Machine=
Element Cross Double = LV=
Element Edge = Choose Milling Program:=
Element Edge Double = Slim Elements half / normal height:=
Element End = In:=
Element End Double = Out:=
Element Straight = @1 Idle=
Element Straight Double = @1 Unpowered=
Element T = @1 Active=
Element T Double =
Horizontal Cylinder = ##[ cnc_api.lua ]##
One Curved Edge Block = Stick=
Pyramid = Element End Double=
Slope = Element Cross Double=
Slope Edge = Element T Double=
Slope Inner Edge = Element Edge Double=
Slope Lying = Element Straight Double=
Slope Upside Down = Element End=
Slope Upside Down Edge = Element Cross=
Slope Upside Down Inner Edge = Element T=
Sphere = Element Edge=
Spike = Element Straight=
Stick = Oblate spheroid=
Two Curved Edge Block = Sphere=
Brick = Horizontal Cylinder=
Cobble = Cylinder=
Dirt = Two Curved Edge/Corner Block=
Leaves = One Curved Edge Block=
Sandstone = Spike=
Stone = Pyramid=
Tree = Slope Upside Down Inner Edge/Corner=
Wooden = Slope Upside Down Outer Edge/Corner=
Slope Inner Edge/Corner=
Slope Outer Edge/Corner=
Slope Upside Down=
Slope Lying=
Slope=
##[ cnc_materials.lua ]##
Grassy dirt=
Wooden=
Bronze=
Steel=
Wrought Iron=
Stainless Steel=

View File

@ -1,238 +1,205 @@
# Blender v2.73 (sub 0) OBJ File: 'slope_test_cylinder_onetexture.blend' v 0 -0.5 -0.5
# www.blender.org v 0 0.5 -0.5
o Cylinder_Cylinder.001 v 0.097545 0.5 -0.490393
v 0.000000 -0.500000 -0.500000 v 0.097545 -0.5 -0.490393
v 0.000000 0.500000 -0.500000 v 0.191342 0.5 -0.46194
v 0.097545 -0.500000 -0.490393 v 0.191342 -0.5 -0.46194
v 0.097545 0.500000 -0.490393 v 0.277785 0.5 -0.415735
v 0.191342 -0.500000 -0.461940 v 0.277785 -0.5 -0.415735
v 0.191342 0.500000 -0.461940 v 0.353553 0.5 -0.353554
v 0.277785 -0.500000 -0.415735 v 0.353553 -0.5 -0.353554
v 0.277785 0.500000 -0.415735 v 0.415735 0.5 -0.277785
v 0.353553 -0.500000 -0.353554 v 0.415735 -0.5 -0.277785
v 0.353553 0.500000 -0.353554 v 0.46194 0.5 -0.191342
v 0.415735 -0.500000 -0.277785 v 0.46194 -0.5 -0.191342
v 0.415735 0.500000 -0.277785 v 0.490393 0.5 -0.097545
v 0.461940 -0.500000 -0.191342 v 0.490393 -0.5 -0.097545
v 0.461940 0.500000 -0.191342 v 0.5 0.5 0
v 0.490393 -0.500000 -0.097545 v 0.5 -0.5 0
v 0.490393 0.500000 -0.097545 v 0.490393 0.5 0.097545
v 0.500000 -0.500000 -0.000000 v 0.490393 -0.5 0.097545
v 0.500000 0.500000 -0.000000 v 0.46194 0.5 0.191341
v 0.490393 -0.500000 0.097545 v 0.46194 -0.5 0.191341
v 0.490393 0.500000 0.097545 v 0.415735 0.5 0.277785
v 0.461940 -0.500000 0.191341 v 0.415735 -0.5 0.277785
v 0.461940 0.500000 0.191341 v 0.353553 0.5 0.353553
v 0.415735 -0.500000 0.277785 v 0.353553 -0.5 0.353553
v 0.415735 0.500000 0.277785 v 0.277785 0.5 0.415735
v 0.353553 -0.500000 0.353553 v 0.277785 -0.5 0.415735
v 0.353553 0.500000 0.353553 v 0.191342 0.5 0.46194
v 0.277785 -0.500000 0.415735 v 0.191342 -0.5 0.46194
v 0.277785 0.500000 0.415735 v 0.097545 0.5 0.490392
v 0.191342 -0.500000 0.461940 v 0.097545 -0.5 0.490392
v 0.191342 0.500000 0.461940 v 0 0.5 0.5
v 0.097545 -0.500000 0.490392 v 0 -0.5 0.5
v 0.097545 0.500000 0.490392 v -0.097545 0.5 0.490392
v -0.000000 -0.500000 0.500000 v -0.097545 -0.5 0.490392
v -0.000000 0.500000 0.500000 v -0.191342 0.5 0.461939
v -0.097545 -0.500000 0.490392 v -0.191342 -0.5 0.461939
v -0.097545 0.500000 0.490392 v -0.277785 0.5 0.415734
v -0.191342 -0.500000 0.461939 v -0.277785 -0.5 0.415734
v -0.191342 0.500000 0.461939 v -0.353554 0.5 0.353553
v -0.277785 -0.500000 0.415734 v -0.353554 -0.5 0.353553
v -0.277785 0.500000 0.415734 v -0.415735 0.5 0.277785
v -0.353554 -0.500000 0.353553 v -0.415735 -0.5 0.277785
v -0.353554 0.500000 0.353553 v -0.46194 0.5 0.191341
v -0.415735 -0.500000 0.277785 v -0.46194 -0.5 0.191341
v -0.415735 0.500000 0.277785 v -0.490393 0.5 0.097545
v -0.461940 -0.500000 0.191341 v -0.490393 -0.5 0.097545
v -0.461940 0.500000 0.191341 v -0.5 0.5 -0.000001
v -0.490393 -0.500000 0.097545 v -0.5 -0.5 -0.000001
v -0.490393 0.500000 0.097545 v -0.490393 0.5 -0.097546
v -0.500000 -0.500000 -0.000001 v -0.490393 -0.5 -0.097546
v -0.500000 0.500000 -0.000001 v -0.46194 0.5 -0.191342
v -0.490393 -0.500000 -0.097546 v -0.46194 -0.5 -0.191342
v -0.490393 0.500000 -0.097546 v -0.415734 0.5 -0.277786
v -0.461940 -0.500000 -0.191342 v -0.415734 -0.5 -0.277786
v -0.461940 0.500000 -0.191342 v -0.353553 0.5 -0.353554
v -0.415734 -0.500000 -0.277786 v -0.353553 -0.5 -0.353554
v -0.415734 0.500000 -0.277786 v -0.277785 0.5 -0.415735
v -0.353553 -0.500000 -0.353554 v -0.277785 -0.5 -0.415735
v -0.353553 0.500000 -0.353554 v -0.191341 0.5 -0.46194
v -0.277785 -0.500000 -0.415735 v -0.191341 -0.5 -0.46194
v -0.277785 0.500000 -0.415735 v -0.097544 0.5 -0.490393
v -0.191341 -0.500000 -0.461940 v -0.097544 -0.5 -0.490393
v -0.191341 0.500000 -0.461940 vn 0 0 -1
v -0.097544 -0.500000 -0.490393 vn 0.1951 0 -0.9808
v -0.097544 0.500000 -0.490393 vn 0.3827 0 -0.9239
vt 0.499996 0.999997 vn 0.5556 0 -0.8315
vt 0.499995 0.000005 vn 0.7071 0 -0.7071
vt 0.562495 0.000004 vn 0.8315 0 -0.5556
vt 0.562496 0.999997 vn 0.9239 0 -0.3827
vt 0.624995 0.000003 vn 0.9808 0 -0.1951
vt 0.624997 0.999997 vn 1 0 0
vt 0.687496 0.000002 vn 0.9808 0 0.1951
vt 0.687497 0.999998 vn 0.9239 0 0.3827
vt 0.749997 0.000001 vn 0.8315 0 0.5556
vt 0.749997 0.999998 vn 0.7071 0 0.7071
vt 0.812497 0.000001 vn 0.5556 0 0.8315
vt 0.812497 0.999998 vn 0.3827 0 0.9239
vt 0.874997 -0.000000 vn 0.1951 0 0.9808
vt 0.874997 0.999998 vn 0 0 1
vt 0.937498 -0.000000 vn -0.1951 0 0.9808
vt 0.937498 0.999998 vn -0.3827 0 0.9239
vt 0.999998 -0.000000 vn -0.5556 0 0.8315
vt 0.999998 0.999998 vn -0.7071 0 0.7071
vt 0.000005 0.999997 vn -0.8315 0 0.5556
vt 0.000001 0.000024 vn -0.9239 0 0.3827
vt 0.062500 0.000023 vn -0.9808 0 0.1951
vt 0.062505 0.999996 vn -1 0 0
vt 0.124999 0.000021 vn -0.9808 0 -0.1951
vt 0.125004 0.999996 vn -0.9239 0 -0.3827
vt 0.187498 0.000020 vn -0.8315 0 -0.5556
vt 0.187503 0.999995 vn -0.7071 0 -0.7071
vt 0.249997 0.000018 vn -0.5556 0 -0.8315
vt 0.250003 0.999994 vn -0.3827 0 -0.9239
vt 0.312497 0.000017 vn 0 1 0
vt 0.312502 0.999994 vn -0.1951 0 -0.9808
vt 0.374997 0.000015 vn 0 -1 0
vt 0.375002 0.999993 vt 0.500003 0.000001
vt 0.437496 0.000014 vt 0.500004 0.999993
vt 0.437501 0.999993 vt 0.437504 0.999994
vt 0.402487 0.009601 vt 0.437503 0.000001
vt 0.597576 0.009614 vt 0.375004 0.999995
vt 0.691371 0.038072 vt 0.375002 0.000001
vt 0.777811 0.084282 vt 0.312503 0.999996
vt 0.853576 0.146469 vt 0.312502 0
vt 0.915753 0.222242 vt 0.250002 0.999997
vt 0.961953 0.308689 vt 0.250002 0
vt 0.990399 0.402487 vt 0.187502 0.999997
vt 1.000000 0.500033 vt 0.187502 0
vt 0.990386 0.597577 vt 0.125002 0.999998
vt 0.961928 0.691370 vt 0.125002 0
vt 0.915717 0.777811 vt 0.062501 0.999998
vt 0.853531 0.853575 vt 0.062501 0
vt 0.777758 0.915753 vt 0.000001 0.999998
vt 0.691312 0.961952 vt 0.000001 0
vt 0.597514 0.990398 vt 0.999994 0.000001
vt 0.402424 0.990386 vt 0.999998 0.999974
vt 0.308630 0.961928 vt 0.937499 0.999975
vt 0.222188 0.915717 vt 0.937494 0.000002
vt 0.146424 0.853531 vt 0.875 0.999977
vt 0.874995 0.000002
vt 0.812501 0.999978
vt 0.812496 0.000003
vt 0.750002 0.99998
vt 0.749996 0.000004
vt 0.687502 0.999981
vt 0.687497 0.000004
vt 0.625002 0.999983
vt 0.624997 0.000005
vt 0.562503 0.999984
vt 0.562498 0.000005
vt 0.9904 0.402488
vt 0.999996 0.499996
vt 0.990387 0.597577
vt 0.961929 0.691372
vt 0.915719 0.777812
vt 0.853532 0.853577
vt 0.777759 0.915754
vt 0.691312 0.961954
vt 0.597514 0.9904
vt 0.402424 0.990387
vt 0.308631 0.961929
vt 0.22219 0.915718
vt 0.146426 0.853532
vt 0.084248 0.777759 vt 0.084248 0.777759
vt 0.038049 0.691313 vt 0.038049 0.691313
vt 0.009602 0.597515 vt 0.009603 0.597515
vt 0.000000 0.499970 vt 0.000004 0.499997
vt 0.009614 0.402425 vt 0.009615 0.402425
vt 0.038073 0.308630 vt 0.038073 0.308631
vt 0.084283 0.222189 vt 0.084284 0.222189
vt 0.146470 0.146424 vt 0.14647 0.146425
vt 0.222243 0.084248 vt 0.222242 0.084249
vt 0.308689 0.038048 vt 0.308688 0.03805
vt 0.499927 0.999999 vt 0.402486 0.009603
vt 0.084226 0.777725 vt 0.597576 0.009615
vt 0.000000 0.499927 vt 0.691371 0.038074
vt 0.222277 0.084224 vt 0.777812 0.084284
vt 0.500074 0.000000 vt 0.853577 0.146471
vt 0.915777 0.222279 vt 0.915753 0.222244
vt 1.000000 0.500077 vt 0.961953 0.30869
vt 0.777724 0.915775 vt 0.500073 0
vn 0.000000 -0.685700 -0.727900 vt 0.915774 0.222274
vn 0.000000 0.685700 -0.727900 vt 1 0.500072
vn 0.142000 0.685700 -0.713900 vt 0.777723 0.915775
vn 0.142000 -0.685700 -0.713900 vt 0.499926 0.999999
vn 0.278500 0.685700 -0.672500 vt 0.084223 0.77772
vn 0.278500 -0.685700 -0.672500 vt 0 0.499922
vn 0.404400 0.685700 -0.605200 vt 0.222276 0.084224
vn 0.404400 -0.685700 -0.605200
vn 0.514700 0.685700 -0.514700
vn 0.514700 -0.685700 -0.514700
vn 0.605200 0.685700 -0.404400
vn 0.605200 -0.685700 -0.404400
vn 0.672500 0.685700 -0.278500
vn 0.672500 -0.685700 -0.278500
vn 0.713900 0.685700 -0.142000
vn 0.713900 -0.685700 -0.142000
vn 0.727900 0.685700 0.000000
vn 0.727900 -0.685700 0.000000
vn 0.713900 0.685700 0.142000
vn 0.713900 -0.685700 0.142000
vn 0.672500 0.685700 0.278500
vn 0.672500 -0.685700 0.278500
vn 0.605200 0.685700 0.404400
vn 0.605200 -0.685700 0.404400
vn 0.514700 0.685700 0.514700
vn 0.514700 -0.685700 0.514700
vn 0.404400 0.685700 0.605200
vn 0.404400 -0.685700 0.605200
vn 0.278500 0.685700 0.672500
vn 0.278500 -0.685700 0.672500
vn 0.142000 0.685700 0.713900
vn 0.142000 -0.685700 0.713900
vn 0.000000 0.685700 0.727900
vn 0.000000 -0.685700 0.727900
vn -0.142000 0.685700 0.713900
vn -0.142000 -0.685700 0.713900
vn -0.278500 0.685700 0.672500
vn -0.278500 -0.685700 0.672500
vn -0.404400 0.685700 0.605200
vn -0.404400 -0.685700 0.605200
vn -0.514700 0.685700 0.514700
vn -0.514700 -0.685700 0.514700
vn -0.605200 0.685700 0.404400
vn -0.605200 -0.685700 0.404400
vn -0.672500 0.685700 0.278500
vn -0.672500 -0.685700 0.278500
vn -0.713900 0.685700 0.142000
vn -0.713900 -0.685700 0.142000
vn -0.727900 0.685700 0.000000
vn -0.727900 -0.685700 0.000000
vn -0.713900 0.685700 -0.142000
vn -0.713900 -0.685700 -0.142000
vn -0.672500 0.685700 -0.278500
vn -0.672500 -0.685700 -0.278500
vn -0.605200 0.685700 -0.404400
vn -0.605200 -0.685700 -0.404400
vn -0.514700 0.685700 -0.514700
vn -0.514700 -0.685700 -0.514700
vn -0.404400 0.685700 -0.605200
vn -0.404400 -0.685700 -0.605200
vn -0.278500 0.685700 -0.672500
vn -0.278500 -0.685700 -0.672500
vn -0.142000 0.685700 -0.713900
vn -0.142000 -0.685700 -0.713900
s 1 s 1
f 1/1/1 2/2/2 4/3/3 3/4/4 f 1/1/1 2/2/1 3/3/2 4/4/2
f 3/4/4 4/3/3 6/5/5 5/6/6 f 4/4/2 3/3/2 5/5/3 6/6/3
f 5/6/6 6/5/5 8/7/7 7/8/8 f 6/6/3 5/5/3 7/7/4 8/8/4
f 7/8/8 8/7/7 10/9/9 9/10/10 f 8/8/4 7/7/4 9/9/5 10/10/5
f 9/10/10 10/9/9 12/11/11 11/12/12 f 10/10/5 9/9/5 11/11/6 12/12/6
f 11/12/12 12/11/11 14/13/13 13/14/14 f 12/12/6 11/11/6 13/13/7 14/14/7
f 13/14/14 14/13/13 16/15/15 15/16/16 f 14/14/7 13/13/7 15/15/8 16/16/8
f 15/16/16 16/15/15 18/17/17 17/18/18 f 16/16/8 15/15/8 17/17/9 18/18/9
f 17/19/18 18/20/17 20/21/19 19/22/20 f 18/19/9 17/20/9 19/21/10 20/22/10
f 19/22/20 20/21/19 22/23/21 21/24/22 f 20/22/10 19/21/10 21/23/11 22/24/11
f 21/24/22 22/23/21 24/25/23 23/26/24 f 22/24/11 21/23/11 23/25/12 24/26/12
f 23/26/24 24/25/23 26/27/25 25/28/26 f 24/26/12 23/25/12 25/27/13 26/28/13
f 25/28/26 26/27/25 28/29/27 27/30/28 f 26/28/13 25/27/13 27/29/14 28/30/14
f 27/30/28 28/29/27 30/31/29 29/32/30 f 28/30/14 27/29/14 29/31/15 30/32/15
f 29/32/30 30/31/29 32/33/31 31/34/32 f 30/32/15 29/31/15 31/33/16 32/34/16
f 31/34/32 32/33/31 34/2/33 33/1/34 f 32/34/16 31/33/16 33/2/17 34/1/17
f 33/1/34 34/2/33 36/3/35 35/4/36 f 34/1/17 33/2/17 35/3/18 36/4/18
f 35/4/36 36/3/35 38/5/37 37/6/38 f 36/4/18 35/3/18 37/5/19 38/6/19
f 37/6/38 38/5/37 40/7/39 39/8/40 f 38/6/19 37/5/19 39/7/20 40/8/20
f 39/8/40 40/7/39 42/9/41 41/10/42 f 40/8/20 39/7/20 41/9/21 42/10/21
f 41/10/42 42/9/41 44/11/43 43/12/44 f 42/10/21 41/9/21 43/11/22 44/12/22
f 43/12/44 44/11/43 46/13/45 45/14/46 f 44/12/22 43/11/22 45/13/23 46/14/23
f 45/14/46 46/13/45 48/15/47 47/16/48 f 46/14/23 45/13/23 47/15/24 48/16/24
f 47/16/48 48/15/47 50/17/49 49/18/50 f 48/16/24 47/15/24 49/17/25 50/18/25
f 49/19/50 50/20/49 52/21/51 51/22/52 f 50/19/25 49/20/25 51/21/26 52/22/26
f 51/22/52 52/21/51 54/23/53 53/24/54 f 52/22/26 51/21/26 53/23/27 54/24/27
f 53/24/54 54/23/53 56/25/55 55/26/56 f 54/24/27 53/23/27 55/25/28 56/26/28
f 55/26/56 56/25/55 58/27/57 57/28/58 f 56/26/28 55/25/28 57/27/29 58/28/29
f 57/28/58 58/27/57 60/29/59 59/30/60 f 58/28/29 57/27/29 59/29/30 60/30/30
f 59/30/60 60/29/59 62/31/61 61/32/62 f 60/30/30 59/29/30 61/31/31 62/32/31
f 4/35/3 2/2/2 64/36/63 62/37/61 60/38/59 58/39/57 56/40/55 54/41/53 52/42/51 50/43/49 48/44/47 46/45/45 44/46/43 42/47/41 40/48/39 38/49/37 36/50/35 34/1/33 32/51/31 30/52/29 28/53/27 26/54/25 24/55/23 22/56/21 20/57/19 18/58/17 16/59/15 14/60/13 12/61/11 10/62/9 8/63/7 6/64/5 f 3/35/32 2/36/32 63/37/32 61/38/32 59/39/32 57/40/32 55/41/32 53/42/32 51/43/32 49/2/32 47/44/32 45/45/32 43/46/32 41/47/32 39/48/32 37/49/32 35/50/32 33/51/32 31/52/32 29/53/32 27/54/32 25/55/32 23/56/32 21/57/32 19/58/32 17/1/32 15/59/32 13/60/32 11/61/32 9/62/32 7/63/32 5/64/32
f 63/34/64 64/33/63 2/2/2 1/1/1 f 64/34/33 63/33/33 2/2/1 1/1/1
f 61/32/62 62/31/61 64/33/63 63/34/64 f 62/32/31 61/31/31 63/33/33 64/34/33
f 1/65/1 3/51/4 5/52/6 7/53/8 9/54/10 11/66/12 13/56/14 15/57/16 17/67/18 19/59/20 21/60/22 23/61/24 25/62/26 27/68/28 29/64/30 31/35/32 33/69/34 35/36/36 37/37/38 39/38/40 41/39/42 43/70/44 45/41/46 47/42/48 49/71/50 51/44/52 53/45/54 55/46/56 57/47/58 59/72/60 61/49/62 63/50/64 f 1/65/34 4/59/34 6/60/34 8/61/34 10/62/34 12/66/34 14/64/34 16/35/34 18/67/34 20/37/34 22/38/34 24/39/34 26/40/34 28/68/34 30/42/34 32/43/34 34/69/34 36/44/34 38/45/34 40/46/34 42/47/34 44/70/34 46/49/34 48/50/34 50/71/34 52/52/34 54/53/34 56/54/34 58/55/34 60/72/34 62/57/34 64/58/34

View File

@ -1,70 +1,101 @@
# Blender v2.73 (sub 0) OBJ File: 'technic-cylinder-horizontal.blend' v 0.5 0 -0.5
# www.blender.org v -0.5 0 -0.5
o Cylinder_Cylinder.001 v 0.5 0.097545 -0.490393
v 0.500000 0.000000 -0.500000 v -0.5 0.097545 -0.490393
v -0.500000 0.000000 -0.500000 v 0.5 0.191342 -0.46194
v 0.500000 0.097545 -0.490393 v -0.5 0.191342 -0.46194
v -0.500000 0.097545 -0.490393 v 0.5 0.277785 -0.415735
v 0.500000 0.191342 -0.461940 v -0.5 0.277785 -0.415735
v -0.500000 0.191342 -0.461940 v 0.5 0.353553 -0.353553
v 0.500000 0.277785 -0.415735 v -0.5 0.353553 -0.353554
v -0.500000 0.277785 -0.415735 v 0.5 0.415735 -0.277785
v 0.500000 0.353553 -0.353553 v -0.5 0.415735 -0.277785
v -0.500000 0.353553 -0.353554 v 0.5 0.46194 -0.191342
v 0.500000 0.415735 -0.277785 v -0.5 0.46194 -0.191342
v -0.500000 0.415735 -0.277785 v 0.5 0.490393 -0.097545
v 0.500000 0.461940 -0.191342 v -0.5 0.490393 -0.097545
v -0.500000 0.461940 -0.191342 v 0.5 0.5 0
v 0.500000 0.490393 -0.097545 v -0.5 0.5 0
v -0.500000 0.490393 -0.097545 v 0.5 0.490393 0.097545
v 0.500000 0.500000 -0.000000 v -0.5 0.490393 0.097545
v -0.500000 0.500000 -0.000000 v 0.5 0.46194 0.191342
v 0.500000 0.490393 0.097545 v -0.5 0.46194 0.191341
v -0.500000 0.490393 0.097545 v 0.5 0.415735 0.277785
v 0.500000 0.461940 0.191342 v -0.5 0.415735 0.277785
v -0.500000 0.461940 0.191341 v 0.5 0.353553 0.353553
v 0.500000 0.415735 0.277785 v -0.5 0.353553 0.353553
v -0.500000 0.415735 0.277785 v 0.5 0.277785 0.415735
v 0.500000 0.353553 0.353553 v -0.5 0.277785 0.415735
v -0.500000 0.353553 0.353553 v 0.5 0.191342 0.46194
v 0.500000 0.277785 0.415735 v -0.5 0.191342 0.46194
v -0.500000 0.277785 0.415735 v 0.5 0.097545 0.490393
v 0.500000 0.191342 0.461940 v -0.5 0.097545 0.490392
v -0.500000 0.191342 0.461940 v 0.5 0 0.5
v 0.500000 0.097545 0.490393 v -0.5 0 0.5
v -0.500000 0.097545 0.490392 v 0.5 -0.097546 0.490392
v 0.500000 -0.000000 0.500000 v -0.5 -0.097545 0.490392
v -0.500000 -0.000000 0.500000 v 0.5 -0.191342 0.46194
v 0.500000 -0.097546 0.490392 v -0.5 -0.191342 0.461939
v -0.500000 -0.097545 0.490392 v 0.5 -0.277785 0.415734
v 0.500000 -0.191342 0.461940 v -0.5 -0.277785 0.415734
v -0.500000 -0.191342 0.461939 v 0.5 -0.353554 0.353553
v 0.500000 -0.277785 0.415734 v -0.5 -0.353554 0.353553
v -0.500000 -0.277785 0.415734 v 0.5 -0.415735 0.277785
v 0.500000 -0.353554 0.353553 v -0.5 -0.415735 0.277785
v -0.500000 -0.353554 0.353553 v 0.5 -0.46194 0.191341
v 0.500000 -0.415735 0.277785 v -0.5 -0.46194 0.191341
v -0.500000 -0.415735 0.277785 v 0.5 -0.490393 0.097545
v 0.500000 -0.461940 0.191341 v -0.5 -0.490393 0.097544
v -0.500000 -0.461940 0.191341 v 0.5 -0.5 -0.000001
v 0.500000 -0.490393 0.097545 v -0.5 -0.5 -0.000001
v -0.500000 -0.490393 0.097544 v 0.5 -0.490393 -0.097546
v 0.500000 -0.500000 -0.000001 v -0.5 -0.490393 -0.097546
v -0.500000 -0.500000 -0.000001 v 0.5 -0.46194 -0.191342
v 0.500000 -0.490393 -0.097546 v -0.5 -0.46194 -0.191343
v -0.500000 -0.490393 -0.097546 v 0.5 -0.415734 -0.277786
v 0.500000 -0.461940 -0.191342 v -0.5 -0.415734 -0.277786
v -0.500000 -0.461940 -0.191343 v 0.5 -0.353553 -0.353554
v 0.500000 -0.415734 -0.277786 v -0.5 -0.353553 -0.353554
v -0.500000 -0.415734 -0.277786 v 0.5 -0.277785 -0.415735
v 0.500000 -0.353553 -0.353554 v -0.5 -0.277784 -0.415735
v -0.500000 -0.353553 -0.353554 v 0.5 -0.191341 -0.46194
v 0.500000 -0.277785 -0.415735 v -0.5 -0.191341 -0.46194
v -0.500000 -0.277784 -0.415735 v 0.5 -0.097544 -0.490393
v 0.500000 -0.191341 -0.461940 v -0.5 -0.097544 -0.490393
v -0.500000 -0.191341 -0.461940 vn 0 0 -1
v 0.500000 -0.097544 -0.490393 vn 0 0.1951 -0.9808
v -0.500000 -0.097544 -0.490393 vn 0 0.3827 -0.9239
vn 0 0.5556 -0.8315
vn 0 0.7071 -0.7071
vn 0 0.8315 -0.5556
vn 0 0.9239 -0.3827
vn 0 0.9808 -0.1951
vn 0 1 0
vn 0 0.9808 0.1951
vn 0 0.9239 0.3827
vn 0 0.8315 0.5556
vn 0 0.7071 0.7071
vn 0 0.5556 0.8315
vn 0 0.3827 0.9239
vn 0 0.1951 0.9808
vn 0 0 1
vn 0 -0.1951 0.9808
vn 0 -0.3827 0.9239
vn 0 -0.5556 0.8315
vn 0 -0.7071 0.7071
vn 0 -0.8315 0.5556
vn 0 -0.9239 0.3827
vn 0 -0.9808 0.1951
vn 0 -1 0
vn 0 -0.9808 -0.1951
vn 0 -0.9239 -0.3827
vn 0 -0.8315 -0.5556
vn 0 -0.7071 -0.7071
vn 0 -0.5556 -0.8315
vn 0 -0.3827 -0.9239
vn -1 0 0
vn 0 -0.1951 -0.9808
vn 1 0 0
vt 0.000003 0.499996 vt 0.000003 0.499996
vt 0.999995 0.499995 vt 0.999995 0.499995
vt 0.999996 0.562495 vt 0.999996 0.562495
@ -77,19 +108,19 @@ vt 0.999999 0.749997
vt 0.000002 0.749996 vt 0.000002 0.749996
vt 0.999999 0.812497 vt 0.999999 0.812497
vt 0.000002 0.812497 vt 0.000002 0.812497
vt 1.000000 0.874997 vt 1 0.874997
vt 0.000001 0.874997 vt 0.000001 0.874997
vt 1.000000 0.937498 vt 1 0.937498
vt 0.000001 0.937497 vt 0.000001 0.937497
vt 1.000000 0.999998 vt 1 0.999998
vt 0.000001 0.999998 vt 0.000001 0.999998
vt 0.000003 0.000005 vt 0.000003 0.000005
vt 0.999976 0.000001 vt 0.999976 0.000001
vt 0.999977 0.062500 vt 0.999977 0.0625
vt 0.000003 0.062505 vt 0.000003 0.062505
vt 0.999978 0.124999 vt 0.999978 0.124999
vt 0.000004 0.125004 vt 0.000004 0.125004
vt 0.999980 0.187498 vt 0.99998 0.187498
vt 0.000005 0.187503 vt 0.000005 0.187503
vt 0.999982 0.249997 vt 0.999982 0.249997
vt 0.000005 0.250003 vt 0.000005 0.250003
@ -107,7 +138,7 @@ vt 0.146469 0.146424
vt 0.222242 0.084247 vt 0.222242 0.084247
vt 0.308689 0.038047 vt 0.308689 0.038047
vt 0.402487 0.009601 vt 0.402487 0.009601
vt 0.500033 -0.000000 vt 0.500033 0
vt 0.597577 0.009613 vt 0.597577 0.009613
vt 0.691371 0.038072 vt 0.691371 0.038072
vt 0.777811 0.084283 vt 0.777811 0.084283
@ -116,123 +147,59 @@ vt 0.915753 0.222242
vt 0.961952 0.308688 vt 0.961952 0.308688
vt 0.990398 0.402486 vt 0.990398 0.402486
vt 0.990386 0.597576 vt 0.990386 0.597576
vt 0.961928 0.691370 vt 0.961928 0.69137
vt 0.915717 0.777812 vt 0.915717 0.777812
vt 0.853531 0.853576 vt 0.853531 0.853576
vt 0.777759 0.915752 vt 0.777759 0.915752
vt 0.691313 0.961951 vt 0.691313 0.961951
vt 0.597515 0.990398 vt 0.597515 0.990398
vt 0.499970 1.000000 vt 0.49997 1
vt 0.402425 0.990386 vt 0.402425 0.990386
vt 0.308630 0.961927 vt 0.30863 0.961927
vt 0.222189 0.915717 vt 0.222189 0.915717
vt 0.146424 0.853530 vt 0.146424 0.85353
vt 0.084248 0.777757 vt 0.084248 0.777757
vt 0.038048 0.691311 vt 0.038048 0.691311
vt 0.999999 0.500073 vt 0.999999 0.500073
vt 0.777724 0.915774 vt 0.777724 0.915774
vt 0.499927 0.999999 vt 0.499927 0.999999
vt 0.084224 0.777723 vt 0.084224 0.777723
vt 0.000000 0.499925 vt 0 0.499925
vt 0.222279 0.084223 vt 0.222279 0.084223
vt 0.500078 -0.000000 vt 0.500078 0
vt 0.915775 0.222276 vt 0.915775 0.222276
vn 0.685700 0.000000 -0.727900
vn -0.685700 0.000000 -0.727900
vn -0.685700 0.142000 -0.713900
vn 0.685700 0.142000 -0.713900
vn -0.685700 0.278500 -0.672500
vn 0.685700 0.278500 -0.672500
vn -0.685700 0.404400 -0.605200
vn 0.685700 0.404400 -0.605200
vn -0.685700 0.514700 -0.514700
vn 0.685700 0.514700 -0.514700
vn -0.685700 0.605200 -0.404400
vn 0.685700 0.605200 -0.404400
vn -0.685700 0.672500 -0.278500
vn 0.685700 0.672500 -0.278500
vn -0.685700 0.713900 -0.142000
vn 0.685700 0.713900 -0.142000
vn -0.685700 0.727900 0.000000
vn 0.685700 0.727900 0.000000
vn -0.685700 0.713900 0.142000
vn 0.685700 0.713900 0.142000
vn -0.685700 0.672500 0.278500
vn 0.685700 0.672500 0.278500
vn -0.685700 0.605200 0.404400
vn 0.685700 0.605200 0.404400
vn -0.685700 0.514700 0.514700
vn 0.685700 0.514700 0.514700
vn -0.685700 0.404400 0.605200
vn 0.685700 0.404400 0.605200
vn -0.685700 0.278500 0.672500
vn 0.685700 0.278500 0.672500
vn -0.685700 0.142000 0.713900
vn 0.685700 0.142000 0.713900
vn -0.685700 0.000000 0.727900
vn 0.685700 0.000000 0.727900
vn -0.685700 -0.142000 0.713900
vn 0.685700 -0.142000 0.713900
vn -0.685700 -0.278500 0.672500
vn 0.685700 -0.278500 0.672500
vn -0.685700 -0.404400 0.605200
vn 0.685700 -0.404400 0.605200
vn -0.685700 -0.514700 0.514700
vn 0.685700 -0.514700 0.514700
vn -0.685700 -0.605200 0.404400
vn 0.685700 -0.605200 0.404400
vn -0.685700 -0.672500 0.278500
vn 0.685700 -0.672500 0.278500
vn -0.685700 -0.713900 0.142000
vn 0.685700 -0.713900 0.142000
vn -0.685700 -0.727900 0.000000
vn 0.685700 -0.727900 0.000000
vn -0.685700 -0.713900 -0.142000
vn 0.685700 -0.713900 -0.142000
vn -0.685700 -0.672500 -0.278500
vn 0.685700 -0.672500 -0.278500
vn -0.685700 -0.605200 -0.404400
vn 0.685700 -0.605200 -0.404400
vn -0.685700 -0.514700 -0.514700
vn 0.685700 -0.514700 -0.514700
vn -0.685700 -0.404400 -0.605200
vn 0.685700 -0.404400 -0.605200
vn -0.685700 -0.278500 -0.672500
vn 0.685700 -0.278500 -0.672500
vn -0.685700 -0.142000 -0.713900
vn 0.685700 -0.142000 -0.713900
s 1 s 1
f 1/1/1 2/2/2 4/3/3 3/4/4 f 1/1/1 2/2/1 4/3/2 3/4/2
f 3/4/4 4/3/3 6/5/5 5/6/6 f 3/4/2 4/3/2 6/5/3 5/6/3
f 5/6/6 6/5/5 8/7/7 7/8/8 f 5/6/3 6/5/3 8/7/4 7/8/4
f 7/8/8 8/7/7 10/9/9 9/10/10 f 7/8/4 8/7/4 10/9/5 9/10/5
f 9/10/10 10/9/9 12/11/11 11/12/12 f 9/10/5 10/9/5 12/11/6 11/12/6
f 11/12/12 12/11/11 14/13/13 13/14/14 f 11/12/6 12/11/6 14/13/7 13/14/7
f 13/14/14 14/13/13 16/15/15 15/16/16 f 13/14/7 14/13/7 16/15/8 15/16/8
f 15/16/16 16/15/15 18/17/17 17/18/18 f 15/16/8 16/15/8 18/17/9 17/18/9
f 17/19/18 18/20/17 20/21/19 19/22/20 f 17/19/9 18/20/9 20/21/10 19/22/10
f 19/22/20 20/21/19 22/23/21 21/24/22 f 19/22/10 20/21/10 22/23/11 21/24/11
f 21/24/22 22/23/21 24/25/23 23/26/24 f 21/24/11 22/23/11 24/25/12 23/26/12
f 23/26/24 24/25/23 26/27/25 25/28/26 f 23/26/12 24/25/12 26/27/13 25/28/13
f 25/28/26 26/27/25 28/29/27 27/30/28 f 25/28/13 26/27/13 28/29/14 27/30/14
f 27/30/28 28/29/27 30/31/29 29/32/30 f 27/30/14 28/29/14 30/31/15 29/32/15
f 29/32/30 30/31/29 32/33/31 31/34/32 f 29/32/15 30/31/15 32/33/16 31/34/16
f 31/34/32 32/33/31 34/2/33 33/1/34 f 31/34/16 32/33/16 34/2/17 33/1/17
f 33/1/34 34/2/33 36/3/35 35/4/36 f 33/1/17 34/2/17 36/3/18 35/4/18
f 35/4/36 36/3/35 38/5/37 37/6/38 f 35/4/18 36/3/18 38/5/19 37/6/19
f 37/6/38 38/5/37 40/7/39 39/8/40 f 37/6/19 38/5/19 40/7/20 39/8/20
f 39/8/40 40/7/39 42/9/41 41/10/42 f 39/8/20 40/7/20 42/9/21 41/10/21
f 41/10/42 42/9/41 44/11/43 43/12/44 f 41/10/21 42/9/21 44/11/22 43/12/22
f 43/12/44 44/11/43 46/13/45 45/14/46 f 43/12/22 44/11/22 46/13/23 45/14/23
f 45/14/46 46/13/45 48/15/47 47/16/48 f 45/14/23 46/13/23 48/15/24 47/16/24
f 47/16/48 48/15/47 50/17/49 49/18/50 f 47/16/24 48/15/24 50/17/25 49/18/25
f 49/19/50 50/20/49 52/21/51 51/22/52 f 49/19/25 50/20/25 52/21/26 51/22/26
f 51/22/52 52/21/51 54/23/53 53/24/54 f 51/22/26 52/21/26 54/23/27 53/24/27
f 53/24/54 54/23/53 56/25/55 55/26/56 f 53/24/27 54/23/27 56/25/28 55/26/28
f 55/26/56 56/25/55 58/27/57 57/28/58 f 55/26/28 56/25/28 58/27/29 57/28/29
f 57/28/58 58/27/57 60/29/59 59/30/60 f 57/28/29 58/27/29 60/29/30 59/30/30
f 59/30/60 60/29/59 62/31/61 61/32/62 f 59/30/30 60/29/30 62/31/31 61/32/31
f 4/35/3 2/1/2 64/36/63 62/37/61 60/38/59 58/39/57 56/40/55 54/41/53 52/42/51 50/43/49 48/44/47 46/45/45 44/46/43 42/47/41 40/48/39 38/49/37 36/50/35 34/2/33 32/51/31 30/52/29 28/53/27 26/54/25 24/55/23 22/56/21 20/57/19 18/58/17 16/59/15 14/60/13 12/61/11 10/62/9 8/63/7 6/64/5 f 4/35/32 2/1/32 64/36/32 62/37/32 60/38/32 58/39/32 56/40/32 54/41/32 52/42/32 50/43/32 48/44/32 46/45/32 44/46/32 42/47/32 40/48/32 38/49/32 36/50/32 34/2/32 32/51/32 30/52/32 28/53/32 26/54/32 24/55/32 22/56/32 20/57/32 18/58/32 16/59/32 14/60/32 12/61/32 10/62/32 8/63/32 6/64/32
f 63/34/64 64/33/63 2/2/2 1/1/1 f 63/34/33 64/33/33 2/2/1 1/1/1
f 61/32/62 62/31/61 64/33/63 63/34/64 f 61/32/31 62/31/31 64/33/33 63/34/33
f 1/65/1 3/51/4 5/52/6 7/53/8 9/54/10 11/66/12 13/56/14 15/57/16 17/67/18 19/59/20 21/60/22 23/61/24 25/62/26 27/68/28 29/64/30 31/35/32 33/69/34 35/36/36 37/37/38 39/38/40 41/39/42 43/70/44 45/41/46 47/42/48 49/71/50 51/44/52 53/45/54 55/46/56 57/47/58 59/72/60 61/49/62 63/50/64 f 1/65/34 3/51/34 5/52/34 7/53/34 9/54/34 11/66/34 13/56/34 15/57/34 17/67/34 19/59/34 21/60/34 23/61/34 25/62/34 27/68/34 29/64/34 31/35/34 33/69/34 35/36/34 37/37/34 39/38/34 41/39/34 43/70/34 45/41/34 47/42/34 49/71/34 51/44/34 53/45/34 55/46/34 57/47/34 59/72/34 61/49/34 63/50/34

View File

@ -1,27 +1,24 @@
# Blender v2.73 (sub 0) OBJ File: 'technic-icorner.blend' v -0.5 0.5 0.5
# www.blender.org v -0.5 0.5 -0.5
o Cube_Cube.000 v -0.5 -0.5 -0.5
v -0.500000 0.500000 0.500000 v -0.5 -0.5 0.5
v -0.500000 0.500000 -0.500000 v 0.5 -0.5 -0.5
v -0.500000 -0.500000 -0.500000 v 0.5 0.5 0.5
v -0.500000 -0.500000 0.500000 v -0.5 -0.5 0.5
v 0.500000 -0.500000 -0.500000 v 0.5 -0.5 0.5
v 0.500000 0.500000 0.500000 v 0.5 -0.5 -0.5
v -0.500000 -0.500000 0.500000 vn 0 0 1
v 0.500000 -0.500000 0.500000 vn 0 0 -1
v 0.500000 -0.500000 -0.500000 vn 0.7071 0.7071 0
vt 1.000000 1.000000 vn 1 0 0
vt 0.000000 1.000000 vn 0 -1 0
vt 0.000000 0.000000 vn -1 0 0
vt 1.000000 0.000000 vn 0 0.7071 -0.7071
vn -0.000000 -0.000000 1.000000 vt 1 1
vn -0.000000 -0.000000 -1.000000 vt 0 1
vn 0.707100 0.707100 -0.000000 vt 0 0
vn 1.000000 0.000000 -0.000000 vt 1 0
vn 0.000000 -1.000000 -0.000000 s 0
vn -1.000000 -0.000000 -0.000000
vn 0.000000 0.707100 -0.707100
s off
f 6/1/1 1/2/1 7/3/1 8/4/1 f 6/1/1 1/2/1 7/3/1 8/4/1
f 2/1/2 5/3/2 3/4/2 f 2/1/2 5/3/2 3/4/2
f 2/1/3 1/2/3 5/4/3 f 2/1/3 1/2/3 5/4/3
@ -29,5 +26,3 @@ f 6/2/4 8/3/4 9/4/4
f 9/1/5 8/2/5 7/3/5 3/4/5 f 9/1/5 8/2/5 7/3/5 3/4/5
f 3/3/6 7/4/6 1/1/6 2/2/6 f 3/3/6 7/4/6 1/1/6 2/2/6
f 1/1/7 6/2/7 9/3/7 f 1/1/7 6/2/7 9/3/7
l 1 4
l 3 4

View File

@ -1,27 +1,24 @@
# Blender v2.73 (sub 0) OBJ File: 'technic-icorner-upsdown.blend' v -0.5 -0.5 0.5
# www.blender.org v 0.5 -0.5 0.5
o Cube_Cube.000 v 0.5 0.5 0.5
v -0.500000 -0.500000 0.500000 v -0.5 0.5 0.5
v 0.500000 -0.500000 0.500000 v 0.5 0.5 -0.5
v 0.500000 0.500000 0.500000 v -0.5 -0.5 -0.5
v -0.500000 0.500000 0.500000 v -0.5 0.5 0.5
v 0.500000 0.500000 -0.500000 v -0.5 0.5 -0.5
v -0.500000 -0.500000 -0.500000 v 0.5 0.5 -0.5
v -0.500000 0.500000 0.500000 vn -1 0 0
v -0.500000 0.500000 -0.500000 vn 1 0 0
v 0.500000 0.500000 -0.500000 vn 0 -0.7071 -0.7071
vt 0.000000 0.000000 vn 0 0 -1
vt 1.000000 0.000000 vn 0 1 0
vt 1.000000 1.000000 vn 0 0 1
vt 0.000000 1.000000 vn 0.7071 -0.7071 0
vn -1.000000 0.000000 0.000000 vt 0 0
vn 1.000000 -0.000000 0.000000 vt 1 0
vn -0.000000 -0.707100 -0.707100 vt 1 1
vn -0.000000 0.000000 -1.000000 vt 0 1
vn 0.000000 1.000000 0.000000 s 0
vn 0.000000 -0.000000 1.000000
vn 0.707100 -0.707100 -0.000000
s off
f 6/1/1 1/2/1 7/3/1 8/4/1 f 6/1/1 1/2/1 7/3/1 8/4/1
f 2/1/2 5/3/2 3/4/2 f 2/1/2 5/3/2 3/4/2
f 2/1/3 1/2/3 5/4/3 f 2/1/3 1/2/3 5/4/3
@ -29,5 +26,3 @@ f 6/2/4 8/3/4 9/4/4
f 9/1/5 8/2/5 7/3/5 3/4/5 f 9/1/5 8/2/5 7/3/5 3/4/5
f 3/3/6 7/4/6 1/1/6 2/2/6 f 3/3/6 7/4/6 1/1/6 2/2/6
f 1/1/7 6/2/7 9/3/7 f 1/1/7 6/2/7 9/3/7
l 1 4
l 3 4

View File

@ -1,84 +1,121 @@
# Blender v2.73 (sub 0) OBJ File: 'slope_test_quarter_round_corner_onetexture.blend'
# www.blender.org
o corner1_Cylinder
v 0.415732 0.277783 0.499997 v 0.415732 0.277783 0.499997
v 0.461936 0.191340 0.499997 v 0.461936 0.19134 0.499997
v 0.415735 0.277783 -0.415732 v 0.415735 0.277783 -0.415732
v 0.461940 0.191340 -0.461937 v 0.46194 0.19134 -0.461937
v 0.490389 0.097544 0.499997 v 0.490389 0.097544 0.499997
v 0.353551 0.353551 0.499997 v 0.353551 0.353551 0.499997
v 0.353555 0.353551 -0.353551 v 0.353555 0.353551 -0.353551
v 0.499996 -0.000000 0.499997 v 0.499996 0 0.499997
v 0.277783 0.415732 0.499997 v 0.277783 0.415732 0.499997
v 0.490393 0.097544 -0.490389 v 0.490393 0.097544 -0.490389
v 0.277787 0.415732 -0.277784 v 0.277787 0.415732 -0.277784
v 0.191340 0.461936 0.499997 v 0.19134 0.461936 0.499997
v 0.191344 0.461937 -0.191341 v 0.191344 0.461937 -0.191341
v 0.097544 0.490389 0.499997 v 0.097544 0.490389 0.499997
v 0.097547 0.490391 -0.097545 v 0.097547 0.490391 -0.097545
v -0.000000 0.499996 0.499997 v 0 0.499996 0.499997
v -0.499997 0.499997 0.499997 v -0.499997 0.499997 0.499997
v -0.499997 0.499997 -0.000030 v -0.499997 0.499997 -0.00003
v -0.499997 0.415735 -0.277785 v -0.499997 0.415735 -0.277785
v -0.499997 0.461940 -0.191342 v -0.499997 0.46194 -0.191342
v -0.499997 0.490393 -0.097545 v -0.499997 0.490393 -0.097545
v -0.500000 -0.500000 -0.500000 v -0.5 -0.5 -0.5
v -0.499997 -0.499997 0.499997 v -0.499997 -0.499997 0.499997
v 0.000000 0.499998 0.000000 v 0 0.499998 0
v -0.499998 0.000014 -0.499999 v -0.499998 0.000014 -0.499999
v -0.499997 0.353553 -0.353554 v -0.499997 0.353553 -0.353554
v -0.499998 0.097545 -0.490393 v -0.499998 0.097545 -0.490393
v -0.499997 0.277785 -0.415735 v -0.499997 0.277785 -0.415735
v -0.499998 0.191342 -0.461940 v -0.499998 0.191342 -0.46194
v 0.499997 -0.000000 -0.499996 v 0.499997 0 -0.499996
v 0.500000 -0.500000 -0.500000 v 0.5 -0.5 -0.5
v 0.499997 -0.499997 0.499997 v 0.499997 -0.499997 0.499997
v -0.499997 -0.499997 0.499997 v -0.499997 -0.499997 0.499997
v -0.499997 0.499997 0.499997 v -0.499997 0.499997 0.499997
v -0.499997 0.499997 -0.000030 v -0.499997 0.499997 -0.00003
v -0.499997 0.415735 -0.277785 v -0.499997 0.415735 -0.277785
v -0.499997 0.461940 -0.191342 v -0.499997 0.46194 -0.191342
v -0.499997 0.490393 -0.097545 v -0.499997 0.490393 -0.097545
v -0.500000 -0.500000 -0.500000 v -0.5 -0.5 -0.5
v -0.499998 0.000014 -0.499999 v -0.499998 0.000014 -0.499999
v -0.499997 0.353553 -0.353554 v -0.499997 0.353553 -0.353554
v -0.499998 0.097545 -0.490393 v -0.499998 0.097545 -0.490393
v -0.499997 0.277785 -0.415735 v -0.499997 0.277785 -0.415735
v -0.499998 0.191342 -0.461940 v -0.499998 0.191342 -0.46194
v -0.499998 -0.033351 0.033348 v -0.499998 -0.033351 0.033348
v -0.500000 -0.500000 -0.500000 v -0.5 -0.5 -0.5
v 0.500000 -0.500000 -0.500000 v 0.5 -0.5 -0.5
v 0.499997 -0.499997 0.499997 v 0.499997 -0.499997 0.499997
v 0.415732 0.277783 0.499997 v 0.415732 0.277783 0.499997
v 0.461936 0.191340 0.499997 v 0.461936 0.19134 0.499997
v 0.490389 0.097544 0.499997 v 0.490389 0.097544 0.499997
v 0.353551 0.353551 0.499997 v 0.353551 0.353551 0.499997
v 0.499996 -0.000000 0.499997 v 0.499996 0 0.499997
v 0.277783 0.415732 0.499997 v 0.277783 0.415732 0.499997
v 0.191340 0.461936 0.499997 v 0.19134 0.461936 0.499997
v -0.499997 -0.499997 0.499997 v -0.499997 -0.499997 0.499997
v 0.097544 0.490389 0.499997 v 0.097544 0.490389 0.499997
v -0.000000 0.499996 0.499997 v 0 0.499996 0.499997
v -0.499997 0.499997 0.499997 v -0.499997 0.499997 0.499997
v -0.033351 -0.033351 0.499997 v -0.033351 -0.033351 0.499997
v 0.499997 -0.499997 0.499997 v 0.499997 -0.499997 0.499997
vt 1.000000 0.500100 vn 0 0 1
vn 0 -1 0
vn -1 0 0
vn 0 0.8315 -0.5556
vn 0 0.8061 -0.5917
vn 0 0.6786 -0.7345
vn 0 0.7071 -0.7071
vn 0.8315 0.5556 0
vn 0.8493 0.528 0
vn 0.7345 0.6786 0
vn 0.7071 0.7071 0
vn 0 0.1951 -0.9808
vn 0 0.1827 -0.9832
vn 0 0.0475 -0.9989
vn 0 0.0491 -0.9988
vn 0.2427 0.9701 0
vn 0.098 0.9952 0
vn 0.1951 0.9808 0
vn 0 0.9808 -0.1951
vn 0 0.9952 -0.098
vn 0 0.9701 -0.2426
vn 0 0.528 -0.8493
vn 0 0.5556 -0.8315
vn 0.9832 0.1826 0
vn 0.9327 0.3605 0
vn 0.9239 0.3827 0
vn 0.9808 0.1951 0
vn 0.5917 0.8061 0
vn 0.4258 0.9048 0
vn 0.3827 0.9239 0
vn 0.5556 0.8315 0
vn 0 0.9048 -0.4258
vn 0 0.9239 -0.3827
vn 0 0.3605 -0.9327
vn 0 0.3827 -0.9239
vn 0.9988 0.0491 0
vn 0.9989 0.0475 0
vn 0 0 -1
vn 0 1 0
vn 1 0 0
vt 1 0.5001
vt 0.990395 0.597625 vt 0.990395 0.597625
vt 0.466756 0.466756 vt 0.466756 0.466756
vt 1.000000 0.000200 vt 1 0.0002
vt 0.000201 0.000201 vt 0.000201 0.000201
vt 0.597626 0.990394 vt 0.597626 0.990394
vt 0.500101 1.000000 vt 0.500101 1
vt 0.691404 0.961947 vt 0.691404 0.961947
vt 0.777830 0.915751 vt 0.77783 0.915751
vt 0.853583 0.853583 vt 0.853583 0.853583
vt 0.915752 0.777829 vt 0.915752 0.777829
vt 0.000201 1.000000 vt 0.000201 1
vt 0.961948 0.691403 vt 0.961948 0.691403
vt -0.000000 0.000000 vt 0 0
vt 1.000000 0.000000 vt 1 0
vt 1.000000 1.000000 vt 1 1
vt -0.000000 1.000000 vt 0 1
vt 0.533443 0.466757 vt 0.533443 0.466757
vt 0.000202 0.500115 vt 0.000202 0.500115
vt 0.402575 0.990397 vt 0.402575 0.990397
@ -94,7 +131,7 @@ vt 0.146597 0.000612
vt 0.999995 0.000594 vt 0.999995 0.000594
vt 0.000178 0.874582 vt 0.000178 0.874582
vt 0.915751 0.874577 vt 0.915751 0.874577
vt 0.853580 0.999436 vt 0.85358 0.999436
vt 0.000178 0.999439 vt 0.000178 0.999439
vt 0.999808 0.625427 vt 0.999808 0.625427
vt 0.009599 0.625446 vt 0.009599 0.625446
@ -102,14 +139,14 @@ vt -0.000005 0.500594
vt 0.999807 0.500594 vt 0.999807 0.500594
vt 0.597441 0.374574 vt 0.597441 0.374574
vt 0.499912 0.499435 vt 0.499912 0.499435
vt 0.000000 0.499434 vt 0 0.499434
vt 0.000000 0.374576 vt 0 0.374576
vt 0.999999 0.375154 vt 0.999999 0.375154
vt 1.000000 0.499969 vt 1 0.499969
vt 0.500093 0.500015 vt 0.500093 0.500015
vt 0.402562 0.375164 vt 0.402562 0.375164
vt 0.999812 0.999983 vt 0.999812 0.999983
vt 0.146415 1.000000 vt 0.146415 1
vt 0.084244 0.875149 vt 0.084244 0.875149
vt 0.999811 0.875131 vt 0.999811 0.875131
vt 0.990396 0.624861 vt 0.990396 0.624861
@ -122,48 +159,14 @@ vt 0.000001 0.249719
vt 0.000001 0.124861 vt 0.000001 0.124861
vt 0.308782 0.250314 vt 0.308782 0.250314
vt 0.999998 0.250301 vt 0.999998 0.250301
vt 0.853403 -0.000000 vt 0.853403 0
vt 0.038047 0.750298 vt 0.038047 0.750298
vt 0.999809 0.750280 vt 0.999809 0.75028
vt 0.000177 0.500008 vt 0.000177 0.500008
vt 0.000000 0.500000 vt 0 0.5
vt 0.500000 1.000000 vt 0.5 1
vt 0.500000 0.500000 vt 0.5 0.5
vn 0.000000 -0.000000 1.000000 s 1
vn -0.000000 -1.000000 0.000000
vn -1.000000 0.000000 0.000000
vn 0.000000 0.831500 -0.555600
vn 0.325800 0.887500 -0.325800
vn 0.429700 0.794100 -0.429700
vn 0.000000 0.707100 -0.707100
vn 0.831500 0.555600 0.000000
vn 0.531000 0.660300 -0.531000
vn 0.707100 0.707100 0.000000
vn 0.000000 0.195100 -0.980800
vn 0.683900 0.254100 -0.683900
vn 0.705500 0.067100 -0.705500
vn 0.000000 0.049100 -0.998800
vn 0.123100 0.984700 -0.123100
vn 0.036800 0.998600 -0.036800
vn 0.049100 0.998800 0.000000
vn 0.195100 0.980800 0.000000
vn 0.000000 0.980800 -0.195100
vn 0.000000 0.998800 -0.049100
vn 0.000000 0.555600 -0.831500
vn 0.620400 0.479600 -0.620400
vn 0.923900 0.382700 0.000000
vn 0.980800 0.195100 0.000000
vn 0.223300 0.948800 -0.223200
vn 0.382700 0.923900 0.000000
vn 0.555600 0.831500 0.000000
vn 0.000000 0.923900 -0.382700
vn 0.000000 0.382700 -0.923900
vn 0.998800 0.049100 0.000000
vn 0.707100 0.000000 -0.707100
vn 0.000000 0.000000 -1.000000
vn -0.000000 1.000000 0.000000
vn 1.000000 0.000000 0.000000
s off
f 53/1/1 51/2/1 60/3/1 f 53/1/1 51/2/1 60/3/1
f 61/4/1 53/1/1 60/3/1 56/5/1 f 61/4/1 53/1/1 60/3/1 56/5/1
f 57/6/1 58/7/1 60/3/1 f 57/6/1 58/7/1 60/3/1
@ -185,23 +188,22 @@ f 44/25/3 42/26/3 45/18/3
f 42/26/3 40/19/3 45/18/3 f 42/26/3 40/19/3 45/18/3
f 34/16/3 35/7/3 45/18/3 33/4/3 f 34/16/3 35/7/3 45/18/3 33/4/3
f 51/2/1 50/13/1 60/3/1 f 51/2/1 50/13/1 60/3/1
s 1
f 19/27/4 11/28/5 7/29/6 26/30/7 f 19/27/4 11/28/5 7/29/6 26/30/7
f 1/31/8 3/32/9 7/33/6 6/34/10 f 1/31/8 3/32/9 7/33/10 6/34/11
f 27/35/11 10/36/12 30/37/13 25/38/14 f 27/35/12 10/36/13 30/37/14 25/38/15
f 15/39/15 24/40/16 16/41/17 14/42/18 f 15/39/16 24/40/17 16/41/17 14/42/18
f 21/43/19 18/44/20 24/45/16 15/46/15 f 21/43/19 18/44/20 24/45/20 15/46/21
f 26/47/7 7/48/6 3/49/9 28/50/21 f 26/47/7 7/48/6 3/49/22 28/50/23
f 10/51/12 4/52/22 2/53/23 5/54/24 f 10/51/24 4/52/25 2/53/26 5/54/27
f 11/55/5 13/56/25 12/57/26 9/58/27 f 11/55/28 13/56/29 12/57/30 9/58/31
f 21/43/19 15/46/15 13/59/25 20/60/28 f 21/43/19 15/46/21 13/59/32 20/60/33
f 20/60/28 13/59/25 11/28/5 19/27/4 f 20/60/33 13/59/32 11/28/5 19/27/4
f 9/58/27 6/14/10 7/61/6 11/55/5 f 9/58/31 6/14/11 7/61/10 11/55/28
f 4/52/22 3/32/9 1/31/8 2/53/23 f 4/52/25 3/32/9 1/31/8 2/53/26
f 3/49/9 4/62/22 29/63/29 28/50/21 f 3/49/22 4/62/34 29/63/35 28/50/23
f 10/51/12 5/54/24 8/64/30 30/44/13 f 10/51/24 5/54/27 8/64/36 30/44/37
f 29/63/29 4/62/22 10/36/12 27/35/11 f 29/63/35 4/62/34 10/36/13 27/35/12
f 25/44/14 30/65/13 31/14/31 22/15/32 f 25/44/15 30/65/14 31/14/38 22/15/38
f 16/66/17 24/67/16 18/44/20 17/16/33 f 16/66/39 24/67/39 18/44/39 17/16/39
f 8/65/30 32/14/34 31/15/31 30/44/13 f 8/65/36 32/14/40 31/15/40 30/44/37
f 12/57/26 13/56/25 15/39/15 14/42/18 f 12/57/30 13/56/29 15/39/16 14/42/18

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB