|
@@ -22,6 +22,18 @@ arg_parser.add_argument('Input', |
|
|
help='Path where the FLIR tiles are') |
|
|
help='Path where the FLIR tiles are') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
arg_parser.add_argument( |
|
|
|
|
|
'--scale', action='store', default=15, |
|
|
|
|
|
help="Scaling (higher number leads to bigger canvas and less dense tiles) (defaults to 15)", |
|
|
|
|
|
type=int, dest='scale' |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
arg_parser.add_argument( |
|
|
|
|
|
'--direction', action='store', default='both', |
|
|
|
|
|
help="left, right, both (both is default)", |
|
|
|
|
|
type=str, dest='direction' |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
arg_parser.add_argument( |
|
|
arg_parser.add_argument( |
|
|
'--base_rotation', action='store', default=115, |
|
|
'--base_rotation', action='store', default=115, |
|
|
help="Base orientation of drone in degrees (0-360) Defaults to 115", |
|
|
help="Base orientation of drone in degrees (0-360) Defaults to 115", |
|
@@ -30,29 +42,30 @@ arg_parser.add_argument( |
|
|
|
|
|
|
|
|
arg_parser.add_argument( |
|
|
arg_parser.add_argument( |
|
|
'--rotation_corr_right', action='store', default=0, |
|
|
'--rotation_corr_right', action='store', default=0, |
|
|
help="correction for tiles where drone flies into right direction", |
|
|
|
|
|
|
|
|
help="rotation correction for tiles where drone flies into right direction", |
|
|
type=int, dest='rotation_corr_right' |
|
|
type=int, dest='rotation_corr_right' |
|
|
) |
|
|
) |
|
|
arg_parser.add_argument( |
|
|
arg_parser.add_argument( |
|
|
'--rotation_corr_left', action='store', default=0, |
|
|
'--rotation_corr_left', action='store', default=0, |
|
|
help="correction for tiles where drone flies into left direction", |
|
|
|
|
|
|
|
|
help="rotation correction for tiles where drone flies into left direction", |
|
|
type=int, dest='rotation_corr_left' |
|
|
type=int, dest='rotation_corr_left' |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
arg_parser.add_argument( |
|
|
arg_parser.add_argument( |
|
|
'--scale', action='store', default=15, |
|
|
|
|
|
help="Scaling (higher number leads to bigger canvas and less dense tiles) (defaults to 15)", |
|
|
|
|
|
type=int, dest='scale' |
|
|
|
|
|
|
|
|
'--pos_corr_right', action='store', default="0x0", |
|
|
|
|
|
help="position correction for tiles where drone flies into right direction in pixels. eg. 10x80", |
|
|
|
|
|
type=str, dest='pos_corr_right' |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
arg_parser.add_argument( |
|
|
arg_parser.add_argument( |
|
|
'--direction', action='store', default='both', |
|
|
|
|
|
help="left, right, both (both is default)", |
|
|
|
|
|
type=str, dest='direction' |
|
|
|
|
|
|
|
|
'--pos_corr_left', action='store', default="0x0", |
|
|
|
|
|
help="position correction for tiles where drone flies into left direction in pixels. eg. 10x80", |
|
|
|
|
|
type=str, dest='pos_corr_left' |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
args = arg_parser.parse_args() |
|
|
args = arg_parser.parse_args() |
|
|
|
|
|
|
|
|
dirname = os.path.dirname(__file__) |
|
|
dirname = os.path.dirname(__file__) |
|
@@ -213,6 +226,8 @@ for root_path, directories, file in os.walk(os.path.join(dirname, working_dir)): |
|
|
g_pos_el = ET.SubElement(main_layer, 'g', attrib=g_pos_el_attributes) |
|
|
g_pos_el = ET.SubElement(main_layer, 'g', attrib=g_pos_el_attributes) |
|
|
|
|
|
|
|
|
g_offset_corr_el_attributes = { |
|
|
g_offset_corr_el_attributes = { |
|
|
|
|
|
'data-offset-corr-x': "{}".format(-image.width/2), |
|
|
|
|
|
'data-offset-corr-y': "{}".format(-image.height/2), |
|
|
'transform': "translate({}, {})".format(-image.width/2, -image.height/2), |
|
|
'transform': "translate({}, {})".format(-image.width/2, -image.height/2), |
|
|
'class': 'tile-offset-corr', |
|
|
'class': 'tile-offset-corr', |
|
|
} |
|
|
} |
|
@@ -256,18 +271,47 @@ for index, el in enumerate(main_layer): |
|
|
if(el.getprevious() is not None): |
|
|
if(el.getprevious() is not None): |
|
|
prev_lon_offset = el.getprevious().attrib['data-lon-offset'] |
|
|
prev_lon_offset = el.getprevious().attrib['data-lon-offset'] |
|
|
lon_offset = el.attrib['data-lon-offset'] |
|
|
lon_offset = el.attrib['data-lon-offset'] |
|
|
if (prev_lon_offset > lon_offset or (prev_lon_offset == lon_offset and last_direction == 'left')): |
|
|
|
|
|
# print('left {} -> {}'.format(prev_lon_offset, lon_offset)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# determine direction |
|
|
|
|
|
direction = None |
|
|
|
|
|
# print(prev_lon_offset - lon_offset) |
|
|
|
|
|
if (prev_lon_offset == lon_offset): |
|
|
|
|
|
direction = last_direction |
|
|
|
|
|
# print('same lon!') |
|
|
|
|
|
elif (float(prev_lon_offset) > float(lon_offset)): |
|
|
|
|
|
direction = 'left' |
|
|
|
|
|
elif (float(prev_lon_offset) < float(lon_offset)): |
|
|
|
|
|
direction = 'right' |
|
|
|
|
|
|
|
|
|
|
|
if (direction == 'left'): |
|
|
|
|
|
# print('left {} | {} -> {}'.format(el.attrib['id'], prev_lon_offset, lon_offset)) |
|
|
el.attrib['data-direction'] = 'left' |
|
|
el.attrib['data-direction'] = 'left' |
|
|
|
|
|
if (args.pos_corr_left): |
|
|
|
|
|
offset_corr_x, offset_corr_y = args.pos_corr_left.split('x') |
|
|
|
|
|
# print(offset_corr_x, offset_corr_y) |
|
|
|
|
|
pos_corr_el = el[0] |
|
|
|
|
|
corrected_pos_x = float(pos_corr_el.attrib['data-offset-corr-x']) + float(offset_corr_x) |
|
|
|
|
|
corrected_pos_y = float(pos_corr_el.attrib['data-offset-corr-y']) + float(offset_corr_y) |
|
|
|
|
|
pos_corr_el.attrib['transform'] = "translate({}px, {}px)".format(corrected_pos_x, corrected_pos_y) |
|
|
|
|
|
|
|
|
if (args.rotation_corr_left): |
|
|
if (args.rotation_corr_left): |
|
|
rot_el = el[0][0] |
|
|
rot_el = el[0][0] |
|
|
corrected_rotation = float(rot_el.attrib['data-image-rotation']) + args.rotation_corr_left |
|
|
corrected_rotation = float(rot_el.attrib['data-image-rotation']) + args.rotation_corr_left |
|
|
rot_el.attrib['data-image-rotation'] = str(corrected_rotation) |
|
|
rot_el.attrib['data-image-rotation'] = str(corrected_rotation) |
|
|
image = rot_el[0] |
|
|
image = rot_el[0] |
|
|
rot_el.attrib['transform'] = 'rotate({} {} {})'.format(str(corrected_rotation), str(int(image.attrib['width'])/2), str(int(image.attrib['height'])/2)) |
|
|
rot_el.attrib['transform'] = 'rotate({} {} {})'.format(str(corrected_rotation), str(int(image.attrib['width'])/2), str(int(image.attrib['height'])/2)) |
|
|
else: |
|
|
|
|
|
# print('right {} -> {}'.format(prev_lon_offset, lon_offset)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (direction == 'right'): |
|
|
|
|
|
# print('right {} | {} -> {}'.format(el.attrib['id'], prev_lon_offset, lon_offset)) |
|
|
el.attrib['data-direction'] = 'right' |
|
|
el.attrib['data-direction'] = 'right' |
|
|
|
|
|
if (args.pos_corr_right): |
|
|
|
|
|
offset_corr_x, offset_corr_y = args.pos_corr_right.split('x') |
|
|
|
|
|
# print(offset_corr_x, offset_corr_y) |
|
|
|
|
|
pos_corr_el = el[0] |
|
|
|
|
|
corrected_pos_x = float(pos_corr_el.attrib['data-offset-corr-x']) + float(offset_corr_x) |
|
|
|
|
|
corrected_pos_y = float(pos_corr_el.attrib['data-offset-corr-y']) + float(offset_corr_y) |
|
|
|
|
|
pos_corr_el.attrib['transform'] = "translate({}px, {}px)".format(corrected_pos_x, corrected_pos_y) |
|
|
|
|
|
|
|
|
if (args.rotation_corr_right): |
|
|
if (args.rotation_corr_right): |
|
|
rot_el = el[0][0] |
|
|
rot_el = el[0][0] |
|
|
corrected_rotation = float(rot_el.attrib['data-image-rotation']) + args.rotation_corr_right |
|
|
corrected_rotation = float(rot_el.attrib['data-image-rotation']) + args.rotation_corr_right |
|
@@ -278,13 +322,16 @@ for index, el in enumerate(main_layer): |
|
|
# merge tiles into groups |
|
|
# merge tiles into groups |
|
|
# Start new line |
|
|
# Start new line |
|
|
if (args.direction == 'both' or args.direction == el.attrib['data-direction']): |
|
|
if (args.direction == 'both' or args.direction == el.attrib['data-direction']): |
|
|
if (index == 1 or last_direction is not el.attrib['data-direction']): |
|
|
|
|
|
current_row = ET.SubElement(tile_rows, 'g', attrib={ 'class': 'tile-row' }) |
|
|
|
|
|
copyElem = copy.deepcopy(el) |
|
|
copyElem = copy.deepcopy(el) |
|
|
|
|
|
# if direction changes |
|
|
|
|
|
if (index == 1 or last_direction != el.attrib['data-direction']): |
|
|
|
|
|
# print('new row!') |
|
|
|
|
|
current_row = ET.SubElement(tile_rows, 'g', attrib={ 'class': 'tile-row' }) |
|
|
|
|
|
# print (el.attrib['id'], el.attrib['data-direction']) |
|
|
current_row.insert(0, copyElem) |
|
|
current_row.insert(0, copyElem) |
|
|
|
|
|
|
|
|
last_direction = el.attrib['data-direction'] |
|
|
last_direction = el.attrib['data-direction'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# remove temporary group |
|
|
# remove temporary group |
|
|
root.remove(main_layer) |
|
|
root.remove(main_layer) |
|
|
|
|
|
|
|
|