Вектор перевода в ElementTransformUtils.CopyElement Revit 2012

Я пытаюсь сделать экземпляр выбранного объекта, введенный пользователем в Revit Api 2012 C#, я обнаружил, что третий вход ElementTransformUtils.CopyElement - это вектор перевода, а не новое место, поэтому я пытаюсь выбрать фиксированную точку из элемента затем выберите новое место расположения и поместите результат в качестве вектора перевода. проблема заключается в следующем: я использую pickobject.globalPoint для получения точки от выбранного объекта, которая меняется каждый раз, когда я запускаю код, поэтому вопрос: как получить ту же точку каждый раз, когда я выбираю элемент, введенный пользователем? Заранее спасибо

1 ответ

Решение

Выберите исходный элемент, как описано здесь: создайте экземпляры выбранного объекта Revit Api

Получить местоположение элемента следующим образом:

Location location = originalElement.Location;

LocationPoint locationPoint = location as LocationPoint;

if (locationPoint != null)
{
  XYZ originalPoint = location.Point;
}

Выберите местоположение для нового элемента следующим образом:

UIDocument uidoc = this.ActiveUIDocument;

XYZ newPoint = uidoc.Selection.PickPoint("Select a location for the element");

Создайте вектор перевода:

XYZ translationVector = newPoint - originalPoint;

Скопируйте элемент:

Document doc = uidoc.Document;

ICollection<ElementId> copiedElementIds = ElementTransformUtils.CopyElement(doc, originalElement.Id, translationVector);

Согласно документации API, причина, по которой ICollection возвращается в отличие от одного ElementId: "Из-за зависимостей может быть создано более одного элемента".

Другие вопросы по тегам