I need to import an ASC, which is a Digital Terrain Model, file into blender. Basically it's a matrix of points, each represented by a number corrisponding to his height. What's the best way to do that? Is there anything you know that it's pre build or I have to write my own loader in Phyton? Thanks
for one of my project i was using this addon: https://sourceforge.net/projects/pointcloudskin/files/latest/download?source=files
it did its job very well - just had to make sure the ASCII data is correct (x,y,z)
I am not sure if its compatible with 2.76a - but once you manage to import the data and skin the point cloud - you can always go for newer blender version.
He has also a CSV import addon - which also comes very handy in this matters.
As for the skinning process: it a bit of try and error process.
Last year I wrote a simple importer for ASC files (see: this blenderartists thread http://blenderartists.org/forum/archive/index.php/t-357605.html )
import bpy import time import csv A = time.time() dfile = r"C:\Users\dealga\Desktop\Archive\SU8606_DSM_1M.asc" getval = lambda i: int(next(i).split()) with open(dfile) as ofile: ncols = getval(ofile) nrows = getval(ofile) xllcorner = getval(ofile) yllcorner = getval(ofile) cellsize = getval(ofile) NODATA_value = getval(ofile) print(ncols, nrows, xllcorner, yllcorner, cellsize, NODATA_value) # this will read the rest verts =  add_vert = verts.append asc_reader = csv.reader(ofile, delimiter=' ') # ni = nrows #? +1 -1 # nj = ncols #? +1 -1 ni = 1000 nj = 1000 for i, row in enumerate(asc_reader): if i >= ni: break for j in range(int(ncols)): if j >= nj: break z = (float(row[j]) / 60) x = j * 0.01 # cell x width y = i * 0.01 # cell y width add_vert((x,y,z)) print('done') print('last vertex:', verts[-1]) B = time.time() total_time = B-A print('total_time:', total_time) faces =  add_face = faces.append # generate_edges, i = verts y, j = verts x total_range = ((ni-1) * (nj)) indices =  for i in range(total_range): if not ((i+1) % nj == 0): add_face([i, i+nj, i+nj+1, i+1]) # do your own error handling mesh_data = bpy.data.meshes.new("LIDAR_mesh_data3") mesh_data.from_pydata(verts, , faces) mesh_data.update() LIDAR_object = bpy.data.objects.new("LIDAR_Object3", mesh_data) scene = bpy.context.scene scene.objects.link(LIDAR_object) LIDAR_object.select = True
I also needed to import an ASC file into Blender. I found that the open source program MeshLab could import ASC files and then export it to an OBJ file, which I could import in Blender. Pretty easy actually.