Rhinoscript MoveObject Python для C # - PullRequest
       110

Rhinoscript MoveObject Python для C #

0 голосов
/ 06 ноября 2018

Я конвертирую скрипт Python в C # и сталкиваюсь со случайной проблемой на этом пути. На этот раз это с перемещением точки из одного места в другое. В скрипте Python это вторая строка метода, который я не знаю, как конвертировать. Я просмотрел документацию Rhino, но все еще в замешательстве.

def move(self):
    self.trailPts.append(self.pos)
    self.pos = rs.PointCoordinates(rs.MoveObject(self.id, self.vec))

Вот где я сейчас:

Transform trans = new Transform(Transform.Translation(Vec));
Pos = PointID.Transform(Pos, trans, true);

Но это не правильно. Я получаю ошибку перегрузки для Transform в строке 2. Любая помощь будет отличной. Спасибо!

Вот и мой конструктор C #:

public Agent(Point3d pos, Vector3d vec, Point3d pointID, List<Point3d> listOfAgents, List<Point3d> navPoints, List<Circle> pipeProfiles)
        {
            Pos = pos;
            Vec = vec;
            PointID = pointID;
            ListOfAgents = listOfAgents;
            NavPoints = navPoints;
            PipeProfiles = pipeProfiles;

            TrailPoints.Add(new Point3d(Pos));
        }

И оригинальный конструктор Python:

 def __init__(self, POS, VEC, POINTID, LISTOFAGENTS, NAVPOINTS, PIPEPROFILES):
        self.pos = POS
        self.vec = VEC
        self.id = POINTID
        self.list = LISTOFAGENTS
        self.nav = NAVPOINTS
        self.trailPts = []
        self.trailPts.append(self.pos)
        self.trailID = "empty"
        self.pipeProfiles = PIPEPROFILES
        print("made an agent")

1 Ответ

0 голосов
/ 06 ноября 2018

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.

...