Communauté
BIM Revit, BIM et Autodesk Construction Cloud (ACC) - Français
Bienvenue sur le forum AEC francophone dédié aux solutions BIM de la société Autodesk. Cet espace est dédié aux professionnels et passionnés du secteur de l'Architecture, de l'Ingénierie et de la Construction (AEC) qui utilisent le logiciel Revit ainsi que les plateformes collaboratives d'Autodesk (ACC et Autodesk Forma). Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets, que vous soyez architecte, ingénieur, gestionnaire de projet ou tout autre acteur de l'AEC.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Problème pour attribuer une valeur à un paramètre

6 RÉPONSES 6
RÉSOLU
Répondre
Message 1 sur 7
Anonymous
433 Visites, 6 Réponses

Problème pour attribuer une valeur à un paramètre

Bonjour à tous,

 

Je débute en C# et je rencontre actuellement une difficulté lorsque que je veux Set la valeur d'un paramètre.

FamilySymbol resaVert = GetSymbol(doc, "PLB_RESERVATION_RECTANGULAIRE_VERTICALE", "RECTANGULAIRE");

Transaction t = new Transaction(doc, "Add instance");
t.Start();

List<String> DN = new List<string>();
DN.Clear();

for (int i = 0; i < diam.Count; i++)
{


    if (diam[i] >= 1.0 && diam[i] <= 40.0 && seg[i] == "Pvc")
    {
        DN.Add("P50");
    }

    else if (diam[i] >= 49 && diam[i] <= 51 && seg[i] == "Pvc")
    {
        DN.Add("P50");
    }

    else if (diam[i] >= 62 && diam[i] <= 64 && seg[i] == "Pvc")
    {
        DN.Add("P63");
    }

    else if (diam[i] >= 74 && diam[i] <= 76 && seg[i] == "Pvc")
    {
        DN.Add("P75");
    }

    else if (diam[i] >= 79 && diam[i] <= 81 && seg[i] == "Pvc")
    {
        DN.Add("P80");
    }

    else if (diam[i] >= 99 && diam[i] <= 101 && seg[i] == "Pvc")
    {
        DN.Add("P100");
    }

    else if (diam[i] >= 109 && diam[i] <= 111 && seg[i] == "Pvc")
    {
        DN.Add("P110");
    }

    else if (diam[i] >= 115 && diam[i] <= 129 && seg[i] == "Pvc")
    {
        DN.Add("P125");
    }

    else if (diam[i] >= 139 && diam[i] <= 141 && seg[i] == "Pvc")
    {
        DN.Add("P140");
    }

    else if (diam[i] >= 159 && diam[i] <= 161 && seg[i] == "Pvc")
    {
        DN.Add("P160");
    }

    else if (diam[i] >= 199 && diam[i] <= 201 && seg[i] == "Pvc")
    {
        DN.Add("P200");
    }

    else if (diam[i] >= 240 && diam[i] <= 255 && seg[i] == "Pvc")
    {
        DN.Add("P250");
    }

    else if (diam[i] >= 314 && diam[i] <= 316 && seg[i] == "Pvc")
    {
        DN.Add("P315");
    }

    else if (diam[i] >= 11.5 && diam[i] <= 12.5 && seg[i] == "Cu")
    {
        DN.Add("C12");
    }

    else if (diam[i] >= 13.5 && diam[i] <= 14.5 && seg[i] == "Cu")
    {
        DN.Add("C14");
    }

    else if (diam[i] >= 15.5 && diam[i] <= 16.5 && seg[i] == "Cu")
    {
        DN.Add("C16");
    }

    else if (diam[i] >= 17.5 && diam[i] <= 18.5 && seg[i] == "Cu")
    {
        DN.Add("C18");
    }

    else if (diam[i] >= 19.5 && diam[i] <= 20.5 && seg[i] == "Cu")
    {
        DN.Add("C18");
    }

    else if (diam[i] >= 21.5 && diam[i] <= 22.5 && seg[i] == "Cu")
    {
        DN.Add("C22");
    }

    else if (diam[i] >= 24.5 && diam[i] <= 25.5 && seg[i] == "Cu")
    {
        DN.Add("C28");
    }

    else if (diam[i] >= 27.5 && diam[i] <= 28.5 && seg[i] == "Cu")
    {
        DN.Add("C28");
    }

    else if (diam[i] >= 31.5 && diam[i] <= 32.5 && seg[i] == "Cu")
    {
        DN.Add("C32");
    }

    else if (diam[i] >= 34.5 && diam[i] <= 35.5 && seg[i] == "Cu")
    {
        DN.Add("C35");
    }

    else if (diam[i] >= 39.5 && diam[i] <= 40.5 && seg[i] == "Cu")
    {
        DN.Add("C40");
    }

    else if (diam[i] >= 41.5 && diam[i] <= 42.5 && seg[i] == "Cu")
    {
        DN.Add("C42");
    }

    else if (diam[i] >= 51.5 && diam[i] <= 52.5 && seg[i] == "Cu")
    {
        DN.Add("C52");
    }

    else if (diam[i] >= 53.5 && diam[i] <= 54.5 && seg[i] == "Cu")
    {
        DN.Add("C54");
    }

    else if (diam[i] >= 59 && diam[i] <= 65 && seg[i] == "Cu")
    {
        DN.Add("C63");
    }

    else if (diam[i] >= 19 && diam[i] <= 21 && seg[i] == "Pvc-P")
    {
        DN.Add("PP20");
    }

    else if (diam[i] >= 24 && diam[i] <= 26 && seg[i] == "Pvc-P")
    {
        DN.Add("PP25");
    }

    else if (diam[i] >= 31 && diam[i] <= 33 && seg[i] == "Pvc-P")
    {
        DN.Add("PP32");
    }

    else if (diam[i] >= 39 && diam[i] <= 41 && seg[i] == "Pvc-P")
    {
        DN.Add("PP40");
    }

    else if (diam[i] >= 49 && diam[i] <= 51 && seg[i] == "Pvc-P")
    {
        DN.Add("PP50");
    }

    else if (diam[i] >= 62 && diam[i] <= 64 && seg[i] == "Pvc-P")
    {
        DN.Add("PP63");
    }

    else if (diam[i] >= 74 && diam[i] <= 76 && seg[i] == "Pvc-P")
    {
        DN.Add("PP75");
    }

    else if (diam[i] >= 89 && diam[i] <= 91 && seg[i] == "Pvc-P")
    {
        DN.Add("PP90");
    }

    else if (diam[i] >= 109 && diam[i] <= 111 && seg[i] == "Pvc-P")
    {
        DN.Add("PP110");
    }

    else if (diam[i] >= 124 && diam[i] <= 126 && seg[i] == "Pvc-P")
    {
        DN.Add("PP125");
    }

    else if (diam[i] >= 139 && diam[i] <= 141 && seg[i] == "Pvc-P")
    {
        DN.Add("PP140");
    }

    else if (diam[i] >= 159 && diam[i] <= 161 && seg[i] == "Pvc-P")
    {
        DN.Add("PP160");
    }

    else if (diam[i] >= 39 && diam[i] <= 41 && seg[i] == "TAG")
    {
        DN.Add("T40");
    }

    else if (diam[i] >= 65 && diam[i] <= 67 && seg[i] == "TAG")
    {
        DN.Add("T66");
    }

    else if (diam[i] >= 99 && diam[i] <= 101 && seg[i] == "TAG")
    {
        DN.Add("T100");
    }

    else if (diam[i] >= 54 && diam[i] <= 56 && seg[i] == "Fte")
    {
        DN.Add("F50");
    }

    else if (diam[i] >= 74 && diam[i] <= 76 && seg[i] == "Fte")
    {
        DN.Add("F75");
    }

    else if (diam[i] >= 99 && diam[i] <= 101 && seg[i] == "Fte")
    {
        DN.Add("F100");
    }

    else if (diam[i] >= 120 && diam[i] <= 130 && seg[i] == "Fte")
    {
        DN.Add("F125");
    }

    else if (diam[i] >= 149 && diam[i] <= 151 && seg[i] == "Fte")
    {
        DN.Add("F150");
    }

    else if (diam[i] >= 199 && diam[i] <= 201 && seg[i] == "Fte")
    {
        DN.Add("F200");
    }

    else if (diam[i] >= 249 && diam[i] <= 251 && seg[i] == "Fte")
    {
        DN.Add("F250");
    }

    else if (diam[i] >= 299 && diam[i] <= 301 && seg[i] == "Fte")
    {
        DN.Add("F300");
    }

    else if (diam[i] >= 1 && diam[i] <= 20 && seg[i] == "Inox")
    {
        DN.Add("I20");
    }

    else if (diam[i] >= 21 && diam[i] <= 25 && seg[i] == "Inox")
    {
        DN.Add("I22");
    }

    else if (diam[i] >= 26 && diam[i] <= 28 && seg[i] == "Inox")
    {
        DN.Add("I28");
    }

    else if (diam[i] >= 29 && diam[i] <= 35 && seg[i] == "Inox")
    {
        DN.Add("I30");
    }

    else if (diam[i] >= 36 && diam[i] <= 45 && seg[i] == "Inox")
    {
        DN.Add("I42,4");
    }

    else if (diam[i] >= 46 && diam[i] <= 55 && seg[i] == "Inox")
    {
        DN.Add("I48,3");
    }

    else if (diam[i] >= 60 && diam[i] <= 80 && seg[i] == "Inox")
    {
        DN.Add("I76,1");
    }

    else if (diam[i] >= 81 && diam[i] <= 95 && seg[i] == "Inox")
    {
        DN.Add("I88,9");
    }

    else if (diam[i] >= 96 && diam[i] <= 130 && seg[i] == "Inox")
    {
        DN.Add("I114,3");
    }

    else if (diam[i] >= 131 && diam[i] <= 150 && seg[i] == "Inox")
    {
        DN.Add("I139,7");
    }

    else if (diam[i] >= 151 && diam[i] <= 190 && seg[i] == "Inox")
    {
        DN.Add("I168,3");
    }

    else if (diam[i] >= 191 && diam[i] <= 250 && seg[i] == "Inox")
    {
        DN.Add("I219,1");
    }

    else if (diam[i] >= 251 && diam[i] <= 300 && seg[i] == "Inox")
    {
        DN.Add("I273");
    }

    else
    {
        DN.Add("erreur");
    }


}

// Place la famille au point d'intersection
foreach (XYZ pt in pt_inter)
{

    FamilyInstance result = doc.Create.NewFamilyInstance(pt, resaVert, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);

    foreach (Double wi in width)
    {
        Parameter param = result.LookupParameter("HAUTEUR");
        param.Set(wi / 0.3048);

        foreach (String dn in DN)
        {

            Parameter param2 = result.LookupParameter("DN");
            param2.Set(dn);
           


        }

    }


}

t.Commit();

 

Le premier paramètre marche très bien mais le second (DN) ne s'applique pas. La famille met 5 fois plus de temps à se générer et le paramètre ne s'applique pas.

 

Es ce que vous sauriez où j'ai commis une erreur ?

 

 

Étiquettes (3)
6 RÉPONSES 6
Message 2 sur 7
Mikael_QUIJADA
en réponse à: Anonymous

Bonjour,

Pas vraiment de connaissances sur la programmation C# 😕

 

N'hésitez pas à poser la question dans la section anglaise dédiée aux API de Revit 🙂

https://forums.autodesk.com/t5/revit-api-forum/bd-p/160


Mikaël QUIJADA  
[LinkedIn]

      

Message 3 sur 7
patrick.emin
en réponse à: Mikael_QUIJADA

Bonjour, @_gile aurait peut-être une idée?


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
Message 4 sur 7
Mikael_QUIJADA
en réponse à: patrick.emin

ou @Charles.Piro 


Mikaël QUIJADA  
[LinkedIn]

      

Message 5 sur 7
_gile
en réponse à: patrick.emin

Salut,

 

Je ne connais pas Revit, mais cette partie du code me semble pour le moins curieuse mais certainement inefficiente :

    foreach (Double wi in width)
    {
        Parameter param = result.LookupParameter("HAUTEUR");
        param.Set(wi / 0.3048);

        foreach (String dn in DN)
        {

            Parameter param2 = result.LookupParameter("DN");
            param2.Set(dn);
           


        }

    }

Ça boucle sur toutes valeurs d'une liste de double (width) et pour chaque largeur de la liste :

- ça affecte la valeur à une nouvelle instance de Parameter (param) qui doit être à chaque fois la même (result.LookupParamater("HAUTEUR")) et donc, en toute logique écrase la valeur précédente pour ne conserver au final que la dernière valeur de la liste.

- ça relance une boucle sur toutes les valeurs d'une liste de chaîne pour affecter la valeur à une nouvelle instance de Parameter (param2) qui doit être à chaque fois la même (result.LookupParamater("DN")) et donc, en toute logique écraser la valeur précédente pour ne conserver au final que la dernière valeur de la liste.

 

Ces boucles imbriquées peuvent suffire à elles seule à explique la lenteur d'exécution si les listes sont longues.

 

Je ne peux pas en dire plus ne sachant pas de quoi il s'agit.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 6 sur 7
_gile
en réponse à: _gile

L'extrait de code ci-dessus aurait pu être écrit plus simplement :

 

    foreach (Double wi in width)
    {
        result.LookupParameter("HAUTEUR").Set(wi / 0.3048);
        foreach (String dn in DN)
        {
            result.LookupParameter("DN").Set(dn);
        }
    }

 

 

ce qui montre de façon plus explicite ce que fait le code et comment on arriverait au même résultat de manière directe en faisant :

 

	result.LookupParameter("HAUTEUR").Set(width[width.Count - 1] / 0.3048);
	result.LookupParameter("DN").Set(DN[DN.Count - 1]);

 

Mais je doute que ce soit le résultat escompté...

 



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 7 sur 7
Anonymous
en réponse à: Mikael_QUIJADA

Bonjour à tous,

 

J'ai en effet posé la question sur le forum anglais de l'api et j'ai trouvé la réponse. Le problème venait en effet de ma boucle et d'un problème de régénération.

 

Merci pour votre aide

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report