Как получить параметры типа конструкционной балки

Может ли кто-нибудь сказать мне, как получить параметры типа структурной балки? Такие параметры, как высота секции, ширина, площадь?

Я полагаю, что я должен начать что-то вроде этого:

    Selection sel = uidoc.Selection;

    Reference pickedRef = null;

    pickedRef = sel.PickObject(ObjectType.Element, "Please select beam");

    Element e = doc.GetElement(pickedRef);

    ElementType type = doc.GetElement(e.GetTypeId()) as ElementType;

    BuiltInParameter height = BuiltInParameter.FAMILY_HEIGHT_PARAM;

    Parameter h = type.get_Parameter(height);

    //OR
    Parameter hh = type.LookupParameter("Height");

    //Then don't know what to do
    double h1 = h.AsDouble(); //Or what?

Но я не получаю обязательные параметры типа, я получаю нулевое исключение.

Может ли кто-нибудь сказать мне, что я делаю неправильно? Я использую неправильный BuiltInParamater или что-то еще?

Спасибо! Милош


person Milos Rankovic    schedule 27.11.2015    source источник


Ответы (3)


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

person Augusto Goncalves    schedule 27.11.2015

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

Как и говорит Аугусто, для этого можно использовать RevitLookup или просмотреть свойства типа в пользовательском интерфейсе. Вы также можете взглянуть на (симпатичный) новый класс StructuralSection. Он был разработан специально для облегчения проблем, с которыми вы сейчас сталкиваетесь.

person Jeremy Tammik    schedule 28.11.2015

спасибо за оба ответа. Мне нужно было потратить больше времени на поиск имени параметра типа.

Вот как должен выглядеть код:

    Element e = doc.GetElement(pickedRef);
    Element e = doc.GetElement(pickedRef);
    ElementType type = doc.GetElement(e.GetTypeId()) as ElementType;
    //to get height of section
    Parameter h = type.LookupParameter("h");
    double height = h.AsDouble();
    //to get width of section
    Parameter b = type.LookupParameter("b");
    double width = b.AsDouble();
    //and so on...

Спасибо!

person Milos Rankovic    schedule 28.11.2015