MoveObject()
- это оболочка для MoveObjects
, где возвращается первое значение результата, а не список. Глядя на реализацию RhinoScript для MoveObjects
, мы видим:
xf = Rhino.Geometry.Transform.Translation(translation)
rc = TransformObjects(object_ids, xf)
return rc
, где translation
- это Vector3d
объект.
Затем, глядя на TransformObjects
звонок сводится к
scriptcontext.doc.Objects.Transform(id, xf, True)
Функция PointCoordinates()
берет GUID, который вернул MoveObject()
, снова находит вас объект, затем дает вам местоположение для геометрии этого объекта (через coercegeometry()
и при условии .Geometry
является Point
экземпляр ); пропуская тесты и функции для преобразования возможных других приемлемых типов, это сводится к:
scriptcontext.doc.Objects.Find(id).Geometry.Location
Перевод этих объектов RhinoCommon:
using Rhino.Geometry;
using System;
Transform xf = Transform.Translation(vec);
id = doc.Objects.Transform(id, xf, true);
Point pos = doc.Objects.Find(id).Geometry as Point
Point3d pos3d = pos.Location;
, где vec
- это экземпляр Rhino.Geometry.Vector3d
, а id
ссылка на объект.
Также см. Документацию Rhino.Geometry.Transform.Translation()
, которая включает в себя пример C #, и методы ObjectTable.Transform
.
Обратите внимание, что статический метод Rhino.Geometry.Transform.Translation()
уже возвращает экземпляр Transform
, здесь нет необходимости использовать new Transform()
. И нет типа PointID
; возможно вы искали Rhino.Geometry.Point3D
? Однако метод Point3D.Transform()
будет работать с этой точкой, а не с объектом с данным id
.