SVN maintenance.
[blender-addons-contrib.git] / io_points_pcd / pcd_utils.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 import bpy
20
21 from . import pcdparser
22
23
24 def create_and_link_mesh(name, points):
25     '''
26     Create a blender mesh and object called name from a list of
27     *points* and link it in the current scene.
28     '''
29
30     mesh = bpy.data.meshes.new(name)
31     mesh.from_pydata(points, [], [])
32
33     # update mesh to allow proper display
34     mesh.validate()
35     mesh.update()
36
37     scene = bpy.context.scene
38
39     obj = bpy.data.objects.new(name, mesh)
40     scene.objects.link(obj)
41     obj.select = True
42
43
44 def import_pcd(filepath, name="new_pointcloud"):
45     parser = pcdparser.PCDParser.factory(filepath, pcdparser.PointXYZ)
46     parser.parseFile()
47     points = parser.getPoints()
48
49     blender_points = []
50     for point in points:
51         blender_points.append((point.x, point.y, point.z))
52
53     create_and_link_mesh(name, blender_points)
54   
55