Dear All,
In Python, I tried to write points in Rhino with their Objectname and Coordinates as a list to a .txt File. However, I don’t know how to combine the objectname string with the coordinate string value.
Maybe somebody knows how to:
Combine objectname with coordinate value in a .txt List?
How to insert delimiter signs/spaces such as a Tab?
How to round decimal values to the next integer?
How to control indents of a Python script? I noticed, when I move the file.write line one space to the right. I got a longer list with multiple values.(please see: Text-write-change indent(Multiple-texts).txt)
Test-Write.Text-Name-Coordinate.txt (303 Bytes)
Text-write-change indent(Multiple-texts).txt (880 Bytes)
Test-write.point-names-coordinate.3dm (21.3 KB)
Text-Write.py (714 Bytes)
Thank you very much for your time.
Kind regards,
Jaap Bijlstra
You might want to read up a little on how text strings are concatenated in Python. Also perhaps how indenting within a python script works - that is essential for making things work correctly.
Here is a small bit of sample code with a few comments:
(note I did not add any error checking or anything like that)
import rhinoscriptsyntax as rs
#Get the points to export
objectIds = rs.GetObjects("Select Points",1, True, True)
#Get the filename to create
filter = "Text File (*.txt)|*.txt|All Files (*.*)|*.*||"
filename = rs.SaveFileName("Save point coordinates as", filter)
delim="\t"
#for a tab delimiter it could also be chr(09)
#for a space delimiter it would just be delim=" "
#for a semicolon delimiter it would just be delim=";" etc.
#create an empty string to collect all data
to_write=""
with open(filename, "w") as file:
for id in objectIds:
#get point coords - result is a list of 3 numbers
point_coords = rs.PointCoordinates(id)
#to round to 3 places:
rd=[round(n,3) for n in point_coords]
#convert point coordinates to string with delimiters
#several ways to do this, I like to use the format (substitution) method
pt_str="{}{}{}{}{}".format(rd[0],delim,rd[1],delim,rd[2])
#get object name
obj_name = rs.ObjectName(id)
#name can be None if object has not been named, give it a default name
if not obj_name:
obj_name="Unnamed"
#add the current line to the existing string plus a newline character
to_write+=obj_name+delim+pt_str+"\n"
#write the whole file (one long string) at once
file.write(to_write)
2 Likes
Thank you Mitch for your time!
I overworked the script and it works now! I still need to learn more about indenting in a python script.
Wish you a nice day.
Regards,
Jaap Bijlstra