[feat] update BMERevenge generation method
- use some laggy AST code to update BMERevenge generation method. - after this change, BMERevenge become more programable and easy to create more complex models - ready for wide floor generation development
This commit is contained in:
parent
d5cb8eb1ec
commit
2bd031784a
@ -1,9 +1,10 @@
|
|||||||
import bpy,mathutils
|
import bpy,mathutils
|
||||||
import os, math
|
import os, math
|
||||||
|
import ast
|
||||||
from bpy_extras import io_utils,node_shader_utils
|
from bpy_extras import io_utils,node_shader_utils
|
||||||
# from bpy_extras.io_utils import unpack_list
|
# from bpy_extras.io_utils import unpack_list
|
||||||
from bpy_extras.image_utils import load_image
|
from bpy_extras.image_utils import load_image
|
||||||
from . import UTILS_constants, UTILS_functions
|
from . import UTILS_constants, UTILS_functions, UTILS_safe_eval
|
||||||
|
|
||||||
class BALLANCE_OT_add_floors(bpy.types.Operator):
|
class BALLANCE_OT_add_floors(bpy.types.Operator):
|
||||||
"""Add Ballance floor"""
|
"""Add Ballance floor"""
|
||||||
@ -85,7 +86,7 @@ class BALLANCE_OT_add_floors(bpy.types.Operator):
|
|||||||
self.use_2d_left,
|
self.use_2d_left,
|
||||||
self.use_3d_top,
|
self.use_3d_top,
|
||||||
self.use_3d_bottom),
|
self.use_3d_bottom),
|
||||||
(0.0, 0.0),
|
(0.0, 0.0, 0.0),
|
||||||
prefs_externalTexture)
|
prefs_externalTexture)
|
||||||
elif self.floor_type in UTILS_constants.floor_derivedBlockList:
|
elif self.floor_type in UTILS_constants.floor_derivedBlockList:
|
||||||
_load_derived_floor(
|
_load_derived_floor(
|
||||||
@ -228,30 +229,27 @@ def _create_or_get_material(material_name, prefs_externalTexture):
|
|||||||
# return mtl
|
# return mtl
|
||||||
return mtl
|
return mtl
|
||||||
|
|
||||||
def _solve_vec_data(str_data, d1, d2, d3, unit, unit_height):
|
def _solve_vec_data(str_data, d1, d2, d3, unit):
|
||||||
sp = str_data.split(';')
|
(cmd_x, cmd_y, cmd_z) = map(lambda x: x.strip(), str_data.split(','))
|
||||||
sp_point = sp[0].split(',')
|
|
||||||
vec = [float(sp_point[0]), float(sp_point[1]), float(sp_point[2])]
|
|
||||||
|
|
||||||
for i in range(3):
|
# calc raw expand data
|
||||||
symbol = sp[i+1]
|
raw_d1 = d1 * unit
|
||||||
if symbol == '':
|
raw_d2 = d2 * unit
|
||||||
continue
|
raw_d3 = (d3 - 1) * 5.0 # the 3d heigh unit of ballance floor is always 5.0
|
||||||
|
|
||||||
factor = 1.0 if symbol[0] == '+' else -1.0
|
# do safe eval
|
||||||
p = symbol[1:]
|
return (
|
||||||
if p == 'd1':
|
UTILS_safe_eval.do_vec_calc(cmd_x, raw_d1, raw_d2, raw_d3),
|
||||||
vec[i] += d1 * unit * factor
|
UTILS_safe_eval.do_vec_calc(cmd_y, raw_d1, raw_d2, raw_d3),
|
||||||
elif p == 'd2':
|
UTILS_safe_eval.do_vec_calc(cmd_z, raw_d1, raw_d2, raw_d3)
|
||||||
vec[i] += d2 * unit * factor
|
)
|
||||||
elif p == 'd3':
|
|
||||||
vec[i] += (d3 - 1) * unit_height * factor
|
|
||||||
|
|
||||||
return vec
|
def _rotate_translate_vec(_vec, rotation, unit, extra_translate):
|
||||||
|
vec = (
|
||||||
def _rotate_translate_vec(vec, rotation, unit, extra_translate):
|
_vec[0] - unit / 2,
|
||||||
vec[0] -= unit / 2
|
_vec[1] - unit / 2,
|
||||||
vec[1] -= unit / 2
|
_vec[2]
|
||||||
|
)
|
||||||
|
|
||||||
if rotation == 'R0':
|
if rotation == 'R0':
|
||||||
coso=1
|
coso=1
|
||||||
@ -269,74 +267,49 @@ def _rotate_translate_vec(vec, rotation, unit, extra_translate):
|
|||||||
return (
|
return (
|
||||||
coso * vec[0] - sino * vec[1] + unit / 2 + extra_translate[0],
|
coso * vec[0] - sino * vec[1] + unit / 2 + extra_translate[0],
|
||||||
sino * vec[0] + coso * vec[1] + unit / 2 + extra_translate[1],
|
sino * vec[0] + coso * vec[1] + unit / 2 + extra_translate[1],
|
||||||
vec[2]
|
vec[2] + extra_translate[2]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _solve_uv_data(str_data, d1, d2, d3, unit):
|
def _solve_uv_data(str_data, d1, d2, d3, unit):
|
||||||
sp = str_data.split(';')
|
(cmd_u, cmd_v) = map(lambda x: x.strip(), str_data.split(','))
|
||||||
sp_point = sp[0].split(',')
|
|
||||||
vec = [float(sp_point[0]), float(sp_point[1])]
|
|
||||||
|
|
||||||
for i in range(2):
|
# calc raw expand data
|
||||||
symbol = sp[i+1]
|
raw_d1 = d1 * unit
|
||||||
if symbol == '':
|
raw_d2 = d2 * unit
|
||||||
continue
|
raw_d3 = float(d3 - 1) # the uv heigh unit of ballance floor is always 1.0
|
||||||
|
|
||||||
factor = 1.0 if symbol[0] == '+' else -1.0
|
# do safe eval
|
||||||
p = symbol[1:]
|
return (
|
||||||
if p == 'd1':
|
UTILS_safe_eval.do_vec_calc(cmd_u, raw_d1, raw_d2, raw_d3),
|
||||||
vec[i] += d1 * unit * factor
|
UTILS_safe_eval.do_vec_calc(cmd_v, raw_d1, raw_d2, raw_d3)
|
||||||
elif p == 'd2':
|
)
|
||||||
vec[i] += d2 * unit * factor
|
|
||||||
elif p == 'd3':
|
|
||||||
vec[i] += (d3 - 1) * unit * factor
|
|
||||||
|
|
||||||
return tuple(vec)
|
|
||||||
|
|
||||||
def _solve_normal_data(point1, point2, point3):
|
def _solve_normal_data(point1, point2, point3):
|
||||||
vector1 = (
|
p1 = mathutils.Vector(point1)
|
||||||
point2[0] - point1[0],
|
p2 = mathutils.Vector(point2)
|
||||||
point2[1] - point1[1],
|
p3 = mathutils.Vector(point3)
|
||||||
point2[2] - point1[2]
|
|
||||||
)
|
vector1 = p2 - p1
|
||||||
vector2 = (
|
vector2 = p3 - p2
|
||||||
point3[0] - point2[0],
|
|
||||||
point3[1] - point2[1],
|
|
||||||
point3[2] - point2[2]
|
|
||||||
)
|
|
||||||
|
|
||||||
# do vector x mutiply
|
# do vector x mutiply
|
||||||
# vector1 x vector2
|
# vector1 x vector2
|
||||||
nor = [
|
corss_mul = vector1.cross(vector2)
|
||||||
vector1[1] * vector2[2] - vector1[2] * vector2[1],
|
|
||||||
vector1[2] * vector2[0] - vector1[0] * vector2[2],
|
|
||||||
vector1[0] * vector2[1] - vector1[1] * vector2[0]
|
|
||||||
]
|
|
||||||
|
|
||||||
# do a normalization
|
# do a normalization
|
||||||
length = math.sqrt(nor[0] ** 2 + nor[1] ** 2 + nor[2] ** 2)
|
corss_mul.normalize()
|
||||||
nor[0] /= length
|
|
||||||
nor[1] /= length
|
|
||||||
nor[2] /= length
|
|
||||||
|
|
||||||
return tuple(nor)
|
return (corss_mul[0], corss_mul[1], corss_mul[2])
|
||||||
|
|
||||||
def _solve_smashed_position(str_data, d1, d2):
|
def _solve_expand_param(str_data, d1, d2):
|
||||||
sp=str_data.split(';')
|
(cmd_d1, cmd_d2) = map(lambda x: x.strip(), str_data.split(','))
|
||||||
sp_pos = sp[0].split(',')
|
|
||||||
sp_sync = sp[1].split(',')
|
|
||||||
|
|
||||||
vec = [int(sp_pos[0]), int(sp_pos[1])]
|
# do safe eval
|
||||||
|
return (
|
||||||
for i in range(2):
|
UTILS_safe_eval.do_expand_calc(cmd_d1, d1, d2),
|
||||||
offset = 0 if sp_sync[i * 2] == '' else int(sp_sync[i * 2])
|
UTILS_safe_eval.do_expand_calc(cmd_d2, d1, d2)
|
||||||
if sp_sync[i*2+1] == 'd1':
|
)
|
||||||
vec[i] += d1 + offset
|
|
||||||
elif sp_sync[i*2+1] == 'd2':
|
|
||||||
vec[i] += d2 + offset
|
|
||||||
|
|
||||||
return tuple(vec)
|
|
||||||
|
|
||||||
def _virtual_foreach_set(collection, field, base_num, data):
|
def _virtual_foreach_set(collection, field, base_num, data):
|
||||||
counter = 0
|
counter = 0
|
||||||
@ -362,7 +335,6 @@ def _load_basic_floor(mesh, floor_type, rotation, height_multiplier, d1, d2, sid
|
|||||||
floor_prototype = UTILS_constants.floor_blockDict[floor_type]
|
floor_prototype = UTILS_constants.floor_blockDict[floor_type]
|
||||||
|
|
||||||
# set some unit
|
# set some unit
|
||||||
height_unit = 5.0
|
|
||||||
if floor_prototype['UnitSize'] == 'Small':
|
if floor_prototype['UnitSize'] == 'Small':
|
||||||
block_3dworld_unit = 2.5
|
block_3dworld_unit = 2.5
|
||||||
block_uvworld_unit = 0.5
|
block_uvworld_unit = 0.5
|
||||||
@ -420,27 +392,17 @@ def _load_basic_floor(mesh, floor_type, rotation, height_multiplier, d1, d2, sid
|
|||||||
base_indices = len(vecList)
|
base_indices = len(vecList)
|
||||||
for vec in face_define['Vertices']:
|
for vec in face_define['Vertices']:
|
||||||
vecList.append(_rotate_translate_vec(
|
vecList.append(_rotate_translate_vec(
|
||||||
_solve_vec_data(vec, d1, d2, height_multiplier, block_3dworld_unit, height_unit),
|
_solve_vec_data(vec, d1, d2, height_multiplier, block_3dworld_unit),
|
||||||
rotation, block_3dworld_unit, extra_translate))
|
rotation, block_3dworld_unit, extra_translate))
|
||||||
|
|
||||||
for uv in face_define['UVs']:
|
|
||||||
uvList.append(_solve_uv_data(uv, d1, d2, height_multiplier, block_uvworld_unit))
|
|
||||||
|
|
||||||
for face in face_define['Faces']:
|
for face in face_define['Faces']:
|
||||||
if face['Type'] == 'RECTANGLE':
|
if face['Type'] == 'RECTANGLE':
|
||||||
# rectangle
|
# rectangle
|
||||||
vec_indices = (
|
vec_indices = tuple(map(lambda x: x + base_indices, face['Indices']))
|
||||||
face['P1'] + base_indices,
|
|
||||||
face['P2'] + base_indices,
|
|
||||||
face['P3'] + base_indices,
|
|
||||||
face['P4'] + base_indices)
|
|
||||||
indCount = 4
|
indCount = 4
|
||||||
elif face['Type'] == 'TRIANGLE':
|
elif face['Type'] == 'TRIANGLE':
|
||||||
# triangle
|
# triangle
|
||||||
vec_indices = (
|
vec_indices = tuple(map(lambda x: x + base_indices, face['Indices']))
|
||||||
face['P1'] + base_indices,
|
|
||||||
face['P2'] + base_indices,
|
|
||||||
face['P3'] + base_indices)
|
|
||||||
indCount = 3
|
indCount = 3
|
||||||
|
|
||||||
# we need calc normal and push it into list
|
# we need calc normal and push it into list
|
||||||
@ -452,6 +414,10 @@ def _load_basic_floor(mesh, floor_type, rotation, height_multiplier, d1, d2, sid
|
|||||||
for i in range(indCount):
|
for i in range(indCount):
|
||||||
faceList.append(vec_indices[i] + global_offset_vec)
|
faceList.append(vec_indices[i] + global_offset_vec)
|
||||||
|
|
||||||
|
# push uvs into list
|
||||||
|
for i in range(indCount):
|
||||||
|
uvList.append(_solve_uv_data(face['UVs'][i], d1, d2, height_multiplier, block_uvworld_unit))
|
||||||
|
|
||||||
# push material into list
|
# push material into list
|
||||||
faceMatList.append(materialDict[face['Textures']])
|
faceMatList.append(materialDict[face['Textures']])
|
||||||
|
|
||||||
@ -505,8 +471,8 @@ def _load_derived_floor(mesh, floor_type, height_multiplier, d1, d2, sides_struc
|
|||||||
|
|
||||||
# iterate smahsed blocks
|
# iterate smahsed blocks
|
||||||
for blk in floor_prototype['SmashedBlocks']:
|
for blk in floor_prototype['SmashedBlocks']:
|
||||||
start_pos = _solve_smashed_position(blk['StartPosition'], d1, d2)
|
start_pos = _solve_vec_data(blk['StartPosition'], d1, d2, height_multiplier, block_3dworld_unit)
|
||||||
expand_pos = _solve_smashed_position(blk['ExpandPosition'], d1, d2)
|
expand_param = _solve_expand_param(blk['ExpandParam'], d1, d2)
|
||||||
|
|
||||||
sides_data = tuple(sides_dict[x] for x in blk['SideSync'].split(';'))
|
sides_data = tuple(sides_dict[x] for x in blk['SideSync'].split(';'))
|
||||||
|
|
||||||
@ -516,10 +482,10 @@ def _load_derived_floor(mesh, floor_type, height_multiplier, d1, d2, sides_struc
|
|||||||
blk['Type'],
|
blk['Type'],
|
||||||
blk['Rotation'],
|
blk['Rotation'],
|
||||||
height_multiplier,
|
height_multiplier,
|
||||||
expand_pos[0],
|
expand_param[0],
|
||||||
expand_pos[1],
|
expand_param[1],
|
||||||
sides_data,
|
sides_data,
|
||||||
(start_pos[0] * block_3dworld_unit, start_pos[1] * block_3dworld_unit),
|
start_pos,
|
||||||
prefs_externalTexture
|
prefs_externalTexture
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -190,6 +190,7 @@ floor_materialStatistic = [
|
|||||||
"FloorTopBorder",
|
"FloorTopBorder",
|
||||||
"FloorTopBorderless",
|
"FloorTopBorderless",
|
||||||
"FloorTopFlat",
|
"FloorTopFlat",
|
||||||
|
"FloorTopProfil",
|
||||||
"FloorTopProfilFlat"
|
"FloorTopProfilFlat"
|
||||||
],
|
],
|
||||||
"data": {
|
"data": {
|
||||||
|
68
ballance_blender_plugin/UTILS_safe_eval.py
Normal file
68
ballance_blender_plugin/UTILS_safe_eval.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import ast
|
||||||
|
|
||||||
|
class SimpleCalcEnsurance(ast.NodeVisitor):
|
||||||
|
def __init__(self):
|
||||||
|
self.is_illegal_syntax: bool = False
|
||||||
|
self.allow_float: bool = True
|
||||||
|
self.param_name: tuple = tuple()
|
||||||
|
|
||||||
|
def wrapper_visit(self, node: ast.AST, allow_float: bool, param_name: tuple) -> bool:
|
||||||
|
self.is_illegal_syntax = False
|
||||||
|
self.allow_float = allow_float
|
||||||
|
self.param_name = param_name
|
||||||
|
|
||||||
|
self.visit(node)
|
||||||
|
return self.is_illegal_syntax
|
||||||
|
|
||||||
|
def generic_visit(node):
|
||||||
|
self.is_illegal_syntax = True
|
||||||
|
|
||||||
|
def visit_Expression(self, node: ast.Expression):
|
||||||
|
self.visit(node.body)
|
||||||
|
|
||||||
|
def visit_BinOp(self, node: ast.BinOp):
|
||||||
|
if isinstance(node.op, ast.Add) or isinstance(node.op, ast.Sub) or isinstance(node.op, ast.Mult) or isinstance(node.op, ast.Div):
|
||||||
|
self.visit(node.left)
|
||||||
|
self.visit(node.right)
|
||||||
|
else:
|
||||||
|
self.is_illegal_syntax = True
|
||||||
|
|
||||||
|
def visit_UnaryOp(self, node: ast.UnaryOp):
|
||||||
|
if isinstance(node.op, ast.USub):
|
||||||
|
self.visit(node.operand)
|
||||||
|
else:
|
||||||
|
self.is_illegal_syntax = True
|
||||||
|
|
||||||
|
def visit_Constant(self, node: ast.Constant):
|
||||||
|
if (self.allow_float and isinstance(node.value, float)) or isinstance(node.value, int):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self.is_illegal_syntax = True
|
||||||
|
|
||||||
|
|
||||||
|
def visit_Name(self, node: ast.Name):
|
||||||
|
if node.id in self.param_name and isinstance(node.ctx, ast.Load):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self.is_illegal_syntax = True
|
||||||
|
|
||||||
|
def _do_calc(szEval: str, allow_float: bool, d: dict):
|
||||||
|
ast_tree = ast.parse(szEval, mode='eval')
|
||||||
|
walker = SimpleCalcEnsurance()
|
||||||
|
if walker.wrapper_visit(ast_tree, allow_float, d.keys()):
|
||||||
|
raise Exception("Illegal AST Tree. Tree contain illegal syntax. Please check BMERevenge.")
|
||||||
|
|
||||||
|
return eval(compile(ast_tree, '', mode='eval'), {}, d)
|
||||||
|
|
||||||
|
def do_vec_calc(szEval: str, raw_d1: float, raw_d2: float, raw_d3: float) -> float:
|
||||||
|
return float(_do_calc(szEval, True, {
|
||||||
|
"d1": raw_d1,
|
||||||
|
"d2": raw_d2,
|
||||||
|
"d3": raw_d3
|
||||||
|
}))
|
||||||
|
|
||||||
|
def do_expand_calc(szEval: str, d1: int, d2: int) -> int:
|
||||||
|
return int(_do_calc(szEval, False, {
|
||||||
|
"d1": d1,
|
||||||
|
"d2": d2
|
||||||
|
}))
|
@ -31,6 +31,8 @@ if "bpy" in locals():
|
|||||||
importlib.reload(UTILS_zip_helper)
|
importlib.reload(UTILS_zip_helper)
|
||||||
if "UTILS_virtools_prop" in locals():
|
if "UTILS_virtools_prop" in locals():
|
||||||
importlib.reload(UTILS_virtools_prop)
|
importlib.reload(UTILS_virtools_prop)
|
||||||
|
if "UTILS_safe_eval" in locals():
|
||||||
|
importlib.reload(UTILS_safe_eval)
|
||||||
|
|
||||||
if "BMFILE_export" in locals():
|
if "BMFILE_export" in locals():
|
||||||
importlib.reload(BMFILE_export)
|
importlib.reload(BMFILE_export)
|
||||||
@ -61,7 +63,7 @@ if "bpy" in locals():
|
|||||||
if "PROPS_virtools_material" in locals():
|
if "PROPS_virtools_material" in locals():
|
||||||
importlib.reload(PROPS_virtools_material)
|
importlib.reload(PROPS_virtools_material)
|
||||||
|
|
||||||
from . import UTILS_constants, UTILS_functions, UTILS_preferences, UTILS_virtools_prop
|
from . import UTILS_constants, UTILS_functions, UTILS_preferences, UTILS_virtools_prop, UTILS_safe_eval
|
||||||
from . import BMFILE_export, BMFILE_import
|
from . import BMFILE_export, BMFILE_import
|
||||||
from . import MODS_3dsmax_align, MODS_flatten_uv, MODS_rail_uv
|
from . import MODS_3dsmax_align, MODS_flatten_uv, MODS_rail_uv
|
||||||
from . import OBJS_add_components, OBJS_add_floors, OBJS_add_rails, OBJS_group_opers
|
from . import OBJS_add_components, OBJS_add_floors, OBJS_add_rails, OBJS_group_opers
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -16,17 +16,17 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;2dBottom;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;2dBottom;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "0,1;,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;2dTop;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;2dTop;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0 +d1, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -47,17 +47,17 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;2dBottom;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;2dBottom;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,1;,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;2dTop;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;2dTop;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0 +d1, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -78,45 +78,45 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "1,1;,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "False;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1) +d1, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;2,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom"
|
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d1, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,1;2,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d1, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -137,45 +137,45 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "1,1;,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "False;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1) +d1, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,0;2,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom"
|
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d1, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,1;2,d1,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d1, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -196,31 +196,31 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom"
|
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -241,31 +241,31 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom"
|
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -286,66 +286,66 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "Flat",
|
"Type": "Flat",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,d2",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;False;False;False;3dTop;3dBottom"
|
"SideSync": "False;False;False;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0 +d2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,d2,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0 +d2, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,1;2,d2,,",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "False;False;False;2dBottom;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dBottom;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d2, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,0;1,d2,2,d1",
|
|
||||||
"ExpandPosition": "0,0;,d2,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "False;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1) +d2, (2.5*2) +d1, 0.0",
|
||||||
|
"ExpandParam": "0 +d2, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,0;,,1,d1",
|
|
||||||
"ExpandPosition": "0,0;,d1,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "False;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "False;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1) +d1, 0.0",
|
||||||
|
"ExpandParam": "0 +d1, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;2,d2,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom"
|
"SideSync": "2dLeft;False;False;2dBottom;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d2, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;2,d2,2,d1",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom"
|
"SideSync": "2dBottom;False;False;2dRight;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*2) +d2, (2.5*2) +d1, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;,,2,d1",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*2) +d1, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -366,31 +366,31 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "NormalOutterCorner",
|
"Type": "NormalOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;False;2dBottom;2dLeft;3dTop;3dBottom"
|
"SideSync": "False;False;2dBottom;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom"
|
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -411,24 +411,24 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom"
|
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom"
|
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalBorder",
|
"Type": "NormalBorder",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "1,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;2dLeft;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;2dLeft;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "1, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -449,31 +449,31 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom"
|
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "False;2dTop;2dRight;False;3dTop;3dBottom"
|
"SideSync": "False;2dTop;2dRight;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "False;2dLeft;2dTop;False;3dTop;3dBottom"
|
"SideSync": "False;2dLeft;2dTop;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NormalInnerCorner",
|
"Type": "NormalInnerCorner",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom"
|
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -494,31 +494,31 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "SinkOutterCorner",
|
"Type": "SinkOutterCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom"
|
"SideSync": "2dTop;False;False;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;False;2dBottom;2dLeft;3dTop;3dBottom"
|
"SideSync": "False;False;2dBottom;2dLeft;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom"
|
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;False;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -539,24 +539,24 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom"
|
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom"
|
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkBorder",
|
"Type": "SinkBorder",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "1,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "2dRight;False;2dLeft;2dTop;3dTop;3dBottom"
|
"SideSync": "2dRight;False;2dLeft;2dTop;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "1, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -577,31 +577,31 @@
|
|||||||
"SmashedBlocks": [
|
"SmashedBlocks": [
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "1,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R0",
|
"Rotation": "R0",
|
||||||
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom"
|
"SideSync": "False;2dRight;2dBottom;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "0,1;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R90",
|
"Rotation": "R90",
|
||||||
"SideSync": "False;2dTop;2dRight;False;3dTop;3dBottom"
|
"SideSync": "False;2dTop;2dRight;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, (2.5*1), 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "0,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R180",
|
"Rotation": "R180",
|
||||||
"SideSync": "False;2dLeft;2dTop;False;3dTop;3dBottom"
|
"SideSync": "False;2dLeft;2dTop;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "0, 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "SinkInnerCorner",
|
"Type": "SinkInnerCorner",
|
||||||
"StartPosition": "1,0;,,,",
|
|
||||||
"ExpandPosition": "0,0;,,,",
|
|
||||||
"Rotation": "R270",
|
"Rotation": "R270",
|
||||||
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom"
|
"SideSync": "False;2dBottom;2dLeft;False;3dTop;3dBottom",
|
||||||
|
"StartPosition": "(2.5*1), 0, 0.0",
|
||||||
|
"ExpandParam": "0, 0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user