Изменение размера экземпляра семейства во время вставки

Я создаю надстройку для Revit 2014. Я хочу вставить параллелепипед в проект, ширина, глубина и/или высота параллелепипеда должны быть установлены во время вставки. Я создал семейство с кубом 1x1x1 и тремя параметрами экземпляра, которые автоматически изменяют размеры куба в соответствии с их значениями (параметры называются «Ширина», «Глубина», «Высота»).

Если я импортирую семейство на чертеж и помещаю его экземпляр, а ПОСЛЕ размещения меняю параметр, то размер куба изменяется правильно.

Интересно, есть ли способ изменить размер куба ДО вставки экземпляра внутрь проекта, я хочу, чтобы превью под курсором мыши имело правильный размер.

Я использую следующие инструкции для размещения экземпляра:

Application.ActiveUIDocument.PromptForFamilyInstancePlacement(familySymbol);

Спасибо


person Tobia Zambon    schedule 20.02.2014    source источник


Ответы (3)


Я согласен со всем сказанным выше.

Да, вы можете изменить значения параметров измерения экземпляра семейства только после размещения экземпляра.

Да, вы можете определить разные типы для разных значений, а затем поместить тип.

Вы можете создавать эти типы «на лету» непосредственно перед размещением экземпляра.

В Revit 2015 можно определить, какой тип семейства размещается с помощью PromptForFamilyInstancePlacement.

Откуда берутся ширина, высота и т.д.?

Можно ли определить их непосредственно перед вызовом PromptForFamilyInstancePlacement?

Если это так, то вы можете создать новый тип семейства с этими размерами на лету и установить его как активный тип прямо перед вызовом PromptForFamilyInstancePlacement.

Привет, Джереми.

person Jeremy Tammik    schedule 19.04.2014
comment
Измерения хранятся в базе данных, поэтому они определяются до вызова. Как я могу создать этот тип на лету? Можно ли использовать эту процедуру и в Rvt2014? - person Tobia Zambon; 22.04.2014

Я считаю, что единственным решением для изменения размера элемента перед его размещением будет создание разных типов семейств для каждого нужного вам размера. В зависимости от ваших потребностей, это может быть или не быть практичным решением.

Остальная часть моего ответа сосредоточена на управлении элементами после размещения.

Вам нужно, чтобы ваши пользователи могли выбирать место размещения? Если нет, то вы можете использовать метод NewFamilyInstance для размещения элемента (предварительный просмотр невозможен, и вы должны указать точку местоположения).
Эта функция возвращает только что размещенный элемент, чтобы вы могли его изменить. после размещения.
Вы можете использовать метод Selection.PickPoint, чтобы позволить пользователю выбрать точку для размещения, которую вы можете передать в NewFamilyInstance, но я не уверен, как это работает с высотами.

Альтернативой является использование FilteredElementCollector после размещения элемента. Вы можете использовать FamilyInstanceFilter, чтобы найти все экземпляры FamilySymbol, которые вы используете.
Поскольку ElementId в Revit увеличивается по мере размещения новых элементов (за некоторыми исключениями из-за совместной работы/синхронизации, которые здесь не актуальны), вы можете получить элемент с наибольшим значением ElementId и можно с уверенностью предположить, что это тот элемент, который вы только что разместили.
Другим предложением может быть запуск FilteredElementCollector перед размещением элементов, а затем повторный запуск после этого. Разница будет заключаться в элементах, которые вы только что разместили.

person Colin Stark    schedule 21.02.2014
comment
Спасибо за ответ, я уже знаю все эти функции, мне нужно, чтобы пользователь мог видеть предварительный просмотр под мышью и выбирать местоположение, поэтому я использую описанный метод в сочетании с событием DocumentChanged. О предлагаемом вами решении (одно семейство для каждого размера): к сожалению, это не решение для меня, потому что размеры могут варьироваться миллиметр за миллиметром от 1 миллиметра до нескольких метров и для каждого измерения (Ш-Г-В). В любом случае, спасибо - person Tobia Zambon; 21.02.2014

Разве у объекта familySymbol нет метода get_Parameter()?

Я думаю, вы можете использовать его для достижения своей цели.

person Israel Rodriguez    schedule 21.02.2014
comment
Нет, это параметры экземпляра, потому что я могу вставить несколько кубов разных размеров, поэтому, если я вызову get_paramter(Width) для familySymbol, он вернет null - person Tobia Zambon; 21.02.2014