# Help: what makes a point3d?

I am messing about in Python and need some help.

How can I easily define a point3d ?

I know I can use:

`end=rs.Str2Pt("1,2,3")`

but is that the only way? It becomes messy when I have to put values in there like:

`end=rs.Str2Pt(str(value1)+","+str(value2)+","+str(value3))`

If I just do: `end=[1,2,3]` then it becomes just a list, and not a valid point3d.

What I do now that works look like this:

``````start=rs.Str2Pt("0,0,0")
end=rs.Str2Pt("0,0,"+str(dblTol))
translation=start-end
rs.MoveObject(strCopy,translation)
``````

This works, but it is not â€śtidyâ€ť

Thanks for any feedback

1 Like

``````import Rhino
point=Rhino.Geometry.Point3d(1,2,3)
``````

or,

``````import rhinoscriptsyntax as rs
point=rs.coerce3dpoint([1,2,3])
``````

â€“Mitch

1 Like

Hi Jurgen
import rhinoscriptsyntax as rs
end=[1,2,3]
end=rs.coerce3dpoint(end)
start=rs.coerce3dpoint((4,5,6))
translation=end-start

Ciao Vittorio

1 Like

Hi Jurgen
Another metod:
a=4,5,6
b=1,2,3
translation=map(float.sub,a,b)
Ciao Vittorio

Thanks @Helvetosaur and @vittorio, I would never had understood that â€ścoerceâ€ť would be the word to use.
Because what else is a 3D point than a list of three values? Does it have other values that X, Y and Z?

I googled Coerce and found that it means to force something into something it is not, so this did not make a logical sense to me. Please fill me inn, so it will be easier to remember the logic behind that name for the future

Actually, a Python (or RhinoCommon) Point3d object is NOT a listâ€¦

First, one thing to know about Python is that it is an object oriented programming language (sometimes abbreviated as OOP), and the first thing that is usually stated in a Python programming book is â€śIn Python, EVERYTHING is an objectâ€ťâ€¦ But what is an object, exactlyâ€¦?

That can take a whole book chapter to explain, but briefly, objects can have both methods and properties associated with them.

• Properties are easy - it is something intrinsic to the object. If
the object was an apple, its properties might be size, color,
texture, ripeness, etc.
• Methods are things (actions) that you can do with the object. For an
apple that might be pick, peel, cut, eat, throwâ€¦

So, a Point3d OBJECT in Python has both methods and properties. They are pretty simple, as a Point3D is not a very complex object.

Some properties of a Point3d would be `Point3d.X, Point3d.Y, Point3d.Z` which are its coordinatesâ€¦ Some Point3d methods would be addition, subtraction, multiplication and division, but also things like `Point3d.ToString()` (which does what it says), `Point3d.CompareTo(pt)` (compare to another point), etc.

Anyway, itâ€™s a bit difficult to wrap your head around (mineâ€™s maybe halfway at this point), but once you get it, itâ€™s pretty powerful. It is a different way of looking at things compared to classic Rhinoscript.

As far as â€ścoerceâ€¦â€ť is concerned, the name is actually pretty appropriate - it is attempting to force the creation of an object from something that it is not, but could be with a little effort. One thing to know about the coerce functions is that they can accept different inputs. For example corecepoint3d can not only accept a 3 number list or tuple, it can also accept a Rhino point object in the file (GUID) or a even a string representing a point:

``````import rhinoscriptsyntax as rs
string = "1,2,3"
list = [1,2,3]
ptObj = rs.AddPoint(1,2,3)  #ptObj will be a GUID (object ID)

result = rs.coerce3dpoint(string)
print result, type(result)
result = rs.coerce3dpoint(list)
print result, type(result)
result = rs.coerce3dpoint(ptObj)
print result, type(result)
``````

â€“Mitch

4 Likes

Yesâ€¦ and Iâ€™ve got more questions nowâ€¦

Thank you very much for shining light on this!

One other thing and then Iâ€™ll get off this - I have to run out anyway -

As far as object properties go, most of them you can either Get or Setâ€¦ To set them you just use them on the left with â€ś=â€ťâ€¦

``````import Rhino

myPoint=Rhino.Geometry.Point3d(1,2,3)
print myPoint, type(myPoint)
print myPoint.X, myPoint.Y, myPoint.Z

myPoint.X=4
myPoint.Y=5
myPoint.Z=6

print myPoint, type(myPoint)
print myPoint.X, myPoint.Y, myPoint.Z
``````

â€“Mitch

1 Like

Ok, that puts things into perspective.
It is a bit confusing but great at the same time!