Вектор перевода в 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: "Из-за зависимостей может быть создано более одного элемента".