Importing and exporting coordinates for an array of points
-
Hello All,
I have created a number of points, let's say for example 50 or a hundred points. Is it possible to export the point data to a file format (text file for example) where it can be imported later to create a spline or any other geometry using the Python API?
A second part to the question, how can I obtain the coordinates (x,y,z) of a point I draw in the GUI using a Python script? For a line for example we can get the start and end values, but I'm not sure how to do that for a single point.
Thank you for your time and help
-
Not sure if that will solve your problems. To export results, go to the 'analysis' page, in the 'output view' section, right-click on the one you want to export, choose 'Imp/Export----Text Exporter'. Then in the properties section, click the 'Refresh' button and you can find the file in the FIle path folder.
To get coordinates, go to the 'model' page, choose the model, then click 'tool---Geometry'.
-
hi @mkn
here is some example code that exports the currently selected points as a csv file:def dump_selected_points(fname): sel = XCoreModeling.GetActiveModel().SelectedEntities sel = XCoreModeling.CollectEntities(sel) with open(fname, "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]))
-
@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 entitiesif isinstance(e, XCoreModeling.Vertex):
will filter out any non-Vertex entities, like groups, meshes, etc.
-
@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!
-
-
os.path.join(dir, entity.Name + ".txt")
is a file path inside the directorydir
. 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. -
yes, just collect the points
x
and return them.
-
-
if you return the
pts
fromdump_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)