Как правильно определить логическое значение одного параметра, используя метод «Set ()» в Revit API? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь сгенерировать некоторые элементы в Revit, используя один макрос.Когда я пытаюсь определить какой-либо параметр для любого сгенерированного элемента, я использую метод Set() из класса Parameter.

Когда я пытаюсь определить любой параметр double, int или string, он работает нормально.Однако, когда я пытаюсь определить параметр bool, он не работает.

Я знаю, что в Revit вы должны определить все логические параметры как int, поэтому я преобразую все логические параметры в 0, когда ложь, и в 1, если истина.

    public void Define_Parameter()
    {
        // I get the family.
        Family family_test = Get_Family("STR_Top&BottomReinforcement_Fixed_pruebas");

        // I get the symbols of the family.
        FamilySymbol symbols_test = ActiveUIDocument.Document.GetElement(family_test.GetFamilySymbolIds().First()) as FamilySymbol;

        // I initiate one transaction.
        Transaction transaction_test = new Transaction(ActiveUIDocument.Document, "Test");
        transaction_test.Start();

        // I generate all elements requiered to generate a new family instance
        Line line_test = Line.CreateBound(new XYZ(0, 10, ActiveUIDocument.ActiveView.Origin.Z), new XYZ(10, 10, ActiveUIDocument.ActiveView.Origin.Z));
        FamilyInstance instance_test = ActiveUIDocument.Document.Create.NewFamilyInstance(line_test, symbols_test, ActiveUIDocument.ActiveView);

        // I modify the boolean parameter.
        Parameter parameter = Get_Parameter(instance_test, "Top_Hook90_Right");
        parameter.Set(1);
        transaction_test.Commit();
    }

    public static Family Get_Family(string Family_Name)
    {
        // I get all families of the model.
        FilteredElementCollector filter = new FilteredElementCollector(Phantom.BIM.Revit.Recursos.Datos.Documento_Revit.Document);
        List<Element> families = filter.OfClass(typeof(Family)).ToList();

        // I go through the list of families and I try to get the one requested
        foreach (Element family in families) if ((family as Family).Name == Family_Name) return family as Family;

        // The family requested doesn't exists.
        return null;
    }

    public static Parameter Get_Parameter(Element Host_Element, string Param_Name)
    {
        // I go through the list of parameters and I try to return the one requested.
        foreach (Parameter param in Host_Element.Parameters) if (param.Definition.Name == Param_Name) return param;

        // The parameter doesn't exists.
        return null;
    }

Это все требуемые методыдля макроса.Я не знаю, почему не работает с булевыми параметрами ... Есть идеи?

Спасибо

1 Ответ

1 голос
/ 08 июля 2019

Ну .... это действительно неловко, но я должен опубликовать ответ, чтобы помочь сообществу.

Правильный способ сделать это - заставить введенный тип быть уверенным, что значение является целым числом. Если вы не форсируете его, он будет представлен как double. Итак, правильный путь будет:

Parameter parameter = Get_Parameter(instance_test, "Top_Hook90_Right");
parameter.Set((int)1);
...