I’m looking for the .net equivalent of RhinoScript’s function
Angle(point1, point2, plane) but I can’t find it.
there is a rhinocommon method that you could use:
maybe something like this?
v1 = Rhino.Geometry.Vector3d(pt1 - pl.Origin) v2 = Rhino.Geometry.Vector3d(pt2 - pl.Origin) a = Rhino.Geometry.Vector3d.VectorAngle(v1, v2)
Thanks @chanley, I’ll try this when I have the time, although I’m not sure if the result would be the same.
By the way, since origin is zero, I think we can directly cast the points as vectors:
a = Rhino.Geometry.Vector3d.VectorAngle(new vector(Pt1),new vector(Pt2))
I’ll give you a feedback later
ah, i think you are correct. My answer is not what you are looking for! I didn’t fully read what that function actually returned.
For what it’s worth, this is is the rhinocommon/python code behind the rs function you initially posted about.
(it’s taken from the utility.py file, which is located on your computer here: (version may vary)
def Angle(point1, point2, plane=True): """Measures the angle between two points Parameters: point1, point2 (point): the input points plane (bool, optional): Boolean or Plane If True, angle calculation is based on the world coordinate system. If False, angle calculation is based on the active construction plane If a plane is provided, angle calculation is with respect to this plane Returns: tuple(tuple(number, number), number, number, number, number): containing the following elements if successful element 0 = the X,Y angle in degrees element 1 = the elevation element 2 = delta in the X direction element 3 = delta in the Y direction element 4 = delta in the Z direction None: if not successful Example: import rhinoscriptsyntax as rs point1 = rs.GetPoint("First point") if point1: point2 = rs.GetPoint("Second point") if point2: angle = rs.Angle(point1, point2) if angle: print "Angle: ", angle See Also: Angle2 Distance """ pt1 = coerce3dpoint(point1) if pt1 is None: pt1 = coercerhinoobject(point1) if isinstance(pt1, Rhino.DocObjects.PointObject): pt1 = pt1.Geometry.Location else: pt1=None pt2 = coerce3dpoint(point2) if pt2 is None: pt2 = coercerhinoobject(point2) if isinstance(pt2, Rhino.DocObjects.PointObject): pt2 = pt2.Geometry.Location else: pt2=None point1 = pt1 point2 = pt2 if point1 is None or point2 is None: return scriptcontext.errorhandler() vector = point2 - point1 x = vector.X y = vector.Y z = vector.Z if plane!=True: plane = coerceplane(plane) if plane is None: plane = scriptcontext.doc.Views.ActiveView.ActiveViewport.ConstructionPlane() vfrom = point1 - plane.Origin vto = point2 - plane.Origin x = vto * plane.XAxis - vfrom * plane.XAxis y = vto * plane.YAxis - vfrom * plane.YAxis z = vto * plane.ZAxis - vfrom * plane.ZAxis h = math.sqrt( x * x + y * y) angle_xy = math.degrees( math.atan2( y, x ) ) elevation = math.degrees( math.atan2( z, h ) ) return angle_xy, elevation, x, y, z