Skip to content

Commit

Permalink
Merge pull request #38 from eEcoLiDAR/read-ply-logging
Browse files Browse the repository at this point in the history
read_ply.py now also reads comments
  • Loading branch information
cwmeijer committed Jan 23, 2018
2 parents c994319 + 1610d18 commit d3d894f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 10 deletions.
51 changes: 43 additions & 8 deletions laserchicken/read_ply.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import os
import json
import ast

import numpy as np


def read(path):
def read(path, verbose=False):
if not os.path.exists(path):
raise IOError('File not found: {}'.format(path))

Expand All @@ -18,34 +20,67 @@ def read(path):

index = read_header(ply)
result = {block['type']: read_block(block, ply) for block in index}
if verbose:
print('Header:')
print('-'*10)
for i, header_field in enumerate(index):
print(header_field)
print(index[i])
print
print('\nData:')
print('-'*10)
for data_field in result:
print(data_field)
print(result['%s' % data_field])

print('***************************')
print(result)

return result


def read_header(ply):
index = []
comments = []
line = ply.readline()
while line.strip() != 'end_header':
if line[:8] == 'element ':
if line.startswith('element'):
element_type = line.split()[1]
number_of_elements = int(line.split()[2])
current_properties = []
index.append(
{'type': element_type, 'number_of_elements': number_of_elements, 'properties': current_properties})

if line[:9] == 'property ':
if line.startswith('property'):
property_type, property_name = line[9:].strip('\n').split(' ')
current_properties.append({'type': property_type, 'name': property_name})

if line.startswith('comment'):
comment_line = line.strip('\n').split(' ', 1)[1]
comments.append(comment_line)

line = ply.readline()

if len(comments) > 0:
for i, comment_line in enumerate(comments):
comments[i] = ast.literal_eval(comment_line)

index.append({'type': 'log', 'log': comments})

return index


def read_block(block, ply_body):
properties, property_names = get_properties(block)
block_type = block['type']
number_of_elements = block['number_of_elements']
if block['type'] == 'log':
return block['log']
else:
properties, property_names = get_properties(block)
block_type = block['type']
number_of_elements = block['number_of_elements']

read_elements(ply_body, properties, property_names, block_type, number_of_elements)

read_elements(ply_body, properties, property_names, block_type, number_of_elements)
return properties
return properties


def cast(value, value_type):
Expand Down
4 changes: 2 additions & 2 deletions laserchicken/testdata/example.ply
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ply
format ascii 1.0
comment log0000 Processed by module load
comment log0001 Processed by module filter using parameters(x,y,z)
comment {'time': '2018-01-18 16:01', 'module': 'load', 'parameters': [], 'version': '0.9.2'}
comment {'time': '2018-01-18 16:01', 'module': 'filter', 'parameters': [('z', 'gt', '1.5')], 'version': '0.9.2'}
element vertex 3
property float x
property float y
Expand Down

0 comments on commit d3d894f

Please sign in to comment.