Importing and exporting coordinates for an array of points

Thank you very much for your reply @bryn! I appreciate the help.

@bryn I am wondering if it is possible to specify groups of points rather than having to select the points manually. I have a large number of groups with points that I want to export to separate files, and selecting each and executing the code can be quite time consuming.

Thanks again!

the code will dump all points in a single file. this will work also if you select multiple groups.

  • sel = XCoreModeling.CollectEntities(sel) will recursively add all children of selected entities
  • if isinstance(e, XCoreModeling.Vertex): will filter out any non-Vertex entities, like groups, meshes, etc.

Thanks @bryn! That will dump them all points in a single file and I want the points in each group to be saved in a separate file. What I would like to do is carry out the same operation but for a certain group name rather than through selection.

@mkn
this could be done in different ways, but how about the following:

import os

def dump_selected_points(dir):
    for e in XCoreModeling.GetActiveModel().SelectedEntities:
        dump_recursively(e, dir)

def dump_recursively(entity, dir):
    sel = XCoreModeling.CollectEntities([entity])
    with open(os.path.join(dir, entity.Name + ".txt"), "w") as file:
        for e in sel:
            if isinstance(e, XCoreModeling.Vertex):
                x = e.Position
                file.write("%g, %g, %g\n" % (x[0], x[1], x[2]))

Thanks @bryn! Just to confirm directory here would be a list of text file names, correct?

Also, would it be possible to add the points from each group to a list while saving them to file? Sometimes I would need to do this to create splines or polylines using those point groups.

Thanks again!

  1. os.path.join(dir, entity.Name + ".txt") is a file path inside the directory dir. since the file name is taken from the entity name (depending on selection a group or some other entity), you should take care to assign unique names to the entities.

  2. yes, just collect the points x and return them.

Thanks! This what I did when adding elements to a single list:

pts = []
for e in sel:
if isinstance(e, xcm.Vertex):
x = e.Position
pts.append(x)

I'm not sure how to append to different lists.

I appreciate the help!

if you return the pts from dump_recursively, you can collect a list of list of points like so:

list_of_pts = []

for e in XCoreModeling.GetActiveModel().SelectedEntities:
    pts = dump_recursively(e) # returns the points list from inside a group
    list_of_pts.append(pts)

The code runs and 'txt' files are saved with the point coordinate, but 'list_of_pts' comes back empty for some odd reason.

@mkn how about you post your code. maybe somebody will show you where the bug is