Importing and exporting coordinates for an array of points
-
wrote on 9 Nov 2021, 08:49 last edited by
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 :smiling_face_with_smiling_eyes:
-
wrote on 15 Nov 2021, 06:57 last edited by
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]))
-
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]))
wrote on 3 Mar 2022, 20:02 last edited by@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.
-
wrote on 3 Mar 2022, 21:39 last edited by
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]))
-
wrote on 7 Mar 2022, 22:05 last edited by
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.
-
-
wrote on 8 Mar 2022, 09:25 last edited by
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
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)
-
wrote on 8 Mar 2022, 20:47 last edited by
The code runs and 'txt' files are saved with the point coordinate, but 'list_of_pts' comes back empty for some odd reason.