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 : 

Revit : programmation C#, Impossible de récupérer les informations de : Indice de charge

20 RÉPONSES 20
RÉSOLU
Répondre
Message 1 sur 21
be-bj
631 Visites, 20 Réponses

Revit : programmation C#, Impossible de récupérer les informations de : Indice de charge

Bonjour

 

J'ai un problème que je ne comprend pas pour quelle raison :

a) Impossible de récupérer les informations de : Indice de charge (la variable avec DYNABO fonctionne bien)

Exemple les informations de mes paramètres projet ou partagés fonctionne très bien.

exemple :

IList<Parameter> NomLuminaireS = e.GetParameters("Panneau");
Parameter p = NomLuminaireS.First();
Sortie = p.AsString() + " ";
Sortie = Sortie.Trim();
// Lecture pour BAES dans la variable BJ_Textes
Sortie5 = "";
IList<Parameter> IndCharge = e.GetParameters("BJ_Textes");

//IList<Parameter> IndCharge = e.GetParameters("Indice de charge");

if (IndCharge.Count > 0)
{
Parameter p1 = IndCharge.First();
Sortie5 =""+ p1.AsString();
//Sortie5 = Sortie5.Trim();
}
//Tmp += "Indice de charge "+ Sortie5 + "\n";

 

 

Cordialement bonne journée.

 


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
C# REVIT ELECTRICITE

 

 

20 RÉPONSES 20
Message 2 sur 21
Charles.Piro
en réponse à: be-bj

Salut,

 

la demande n'est pas très clair.

Tout d'abord pour mieux comprend votre code, il serait souhaitable d'utiliser les balises code dans ton message.

Ensuite concernant ta demande, il faut être plus précis. Quel type d'élément ? Quel accès ? Quelle type de valeur retour attendue ?

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 3 sur 21
be-bj
en réponse à: be-bj

C'est le paramétré du nom dans REVIT en ELECTRICITE de : Indice de charge 

Dans ma requête  c'est une lecture  dans une liste qui a le nom de IndCharge

IList<Parameter> IndCharge = e.GetParameters("Indice de charge");

 

Il y a uniquement le paramètre indice se charge qui ne fonctionne pas je n'ai pas de problème sur d'autre lecture sauf celui-là ?

 

Utiliser les balises j'ai pas compris votre question

 

Cordialement

Message 4 sur 21
Charles.Piro
en réponse à: be-bj

Salut,

 

lorsque l'on tape un message sur ce forum, on peu mettre des balises autour du code via ce bouton :

Capture d’écran 2021-12-06 174641.png

Cela permet de mettre en forme son message de manière plus lisible.

 

Désolé mais je ne comprend toujours pas ta requête.

Je connais la commande "indice de charge" dans Revit mais dans ton code a quoi correspond le "e" ? Il nous faut un peu plus de code pour bien comprendre. Que se passe t-il en amont ?

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 5 sur 21
be-bj
en réponse à: Charles.Piro

Bonjour

Ci joint le code de la boucle de lecture

 

foreach (Element e in walls2)
{
LocationPoint lcpoint = e.Location as LocationPoint;
XYZ position = lcpoint.Point;
x = position.X;
y = position.Y;
z = position.Z;
IList<Parameter> NomLuminaireS = e.GetParameters("Panneau");
Parameter p = NomLuminaireS.First();
Sortie = p.AsString() + " ";
Sortie = Sortie.Trim();
// Lecture pour BAES dans la variable BJ_Textes
Sortie5 = "";
IList<Parameter> IndCharge = e.GetParameters("BJ_Textes");
//IList<Parameter> IndCharge = e.GetParameters("Indice de charge");
if (IndCharge.Count > 0)
{
Parameter p1 = IndCharge.First();
Sortie5 =""+ p1.AsString();// + " ";
//Sortie5 = Sortie5.Trim();
}
//Tmp += "Indice de charge "+ Sortie5 + "\n";
// Crt si il est bien raccordépas panneau
if (Sortie != "")
{
NomPanneauLuminaire.Add(Sortie);
Sortie1 = e.Name;
NomLuminaire.Add(Sortie1);
Sortie =""+ e.Id;
IndexLuminaire.Add(Sortie);
Luminaire_X.Add(x * 0.3048);
Luminaire_Y.Add(y * 0.3048);
Luminaire_Z.Add(z * 0.3048);
LongueurCableLuminaire.Add(0);
IndiceDeCharge.Add(Sortie5);
}
}

 

J'ai besoin pour la suite du programme de  mémorisé l'indice de charge dans les actions suivantes

Tous les autres paramétrés fonctionne correctement sauf celui-la

 

Désolé

 

Cordialement.

 

Message 6 sur 21
Charles.Piro
en réponse à: be-bj

Désolé mais ce n'est pas plus clair.

Dans ton code, tu fais une boucle foreach sur une liste intitulées "walls2". D'après son nom cela signifie que ce sont des murs mais quand je vois les propriétés qui sont recherchées je doute que ce soit le cas.

Je ne voit aucun élément contenant un paramètre "Indice de charge". Peux tu joindre un fichier exemple ?

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 7 sur 21
be-bj
en réponse à: Charles.Piro

 

Bonjour

 

Dans la boucle je fait la lecture de tous les luminaires du projet la boucle Wall2

 

Par exemple avec le paramètre "BJ_Textes" je récupère bien mes informations dans la variable pas pas dans le 

 

e.GetParameters("Indice de charge") il y a rien alors que j'ais par exemple "Eclairage"

 

J'espère être plus clair ci joint la partie du programme je récupéré bien tous les autres informations

 

Cordialement

 

bebj_0-1638824682583.png

 

Message 8 sur 21
Charles.Piro
en réponse à: be-bj

Peux-tu joindre un fichier Revit sur-lequel tu essaye d'appliquer ce code ?

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 9 sur 21
mposkurlat
en réponse à: be-bj

Bonjour,

Il me semble qu'il faut récupérer d'abord le type de luminaire, à partir de l'occurrence (puisque l'indice de charge est un paramètre de type) et deuxièmement c'est un élément qui est stocké dans ce paramètre et pas un texte, donc à priori il faudra essayer ( iList<Element> ) par exemple. Ensuite il faudra recherche dans cet élément une valeur textuelle souhaitée, son nom par exemple.

Cordialement

Message 10 sur 21
be-bj
en réponse à: Charles.Piro

Bonjour

 

Merci pour tes raiponces

 

Ci joint mon fichier REVIT pour essais

Ci joint également les parties du programme en C# la 1er partie du programme, la lecture des paramètres Luminaires, tableaux baies et installation électrique en fichier TXT c'est plus clair.

 

2 eme partie l'endroit ou je fait mes lectures sur tous les autres parties du programme ça fonctionne correctement, sauf l'indice de charge ???

 

Mon programme me permet de calculer les longueurs des câbles en additionnant mes valeurs Y/Y et Z  entre les prises au boites. de calculer les liaisons des armoires divisionnaires au TGBT la longueur du câble de de calculer la section en fonction de la puissance de chaque armoires, c'est le TOP.

 

L'indice de charge va me permettre de déterminer le type de câble 1.5 ou 2.5 entre les prises et l'éclairage en automatique par le programme.

Ci j

 

Cordialement bonne journée

 

Message 11 sur 21
mposkurlat
en réponse à: be-bj

Bonjour,

Le paramètre de type "Indice de charge" contient un objet (capture ci-dessous). Est-ce que le nom de cet objet c'est ce qu'il vous faut?

Indice_de_charge.jpg

Message 12 sur 21
be-bj
en réponse à: mposkurlat

Bonjour

 

Oui parfaitement

 

Merci

 

Cordialement bonne journée

Message 13 sur 21
mposkurlat
en réponse à: be-bj

Bonjour,

J'ai pris votre boucle foreach, puis j'ai ajouté la partie ci-dessous. Cela suit la logique que j'ai indiqué précédemment.

            foreach (Element e in walls2)
            {
            	LocationPoint lcpoint = e.Location as LocationPoint;
            	XYZ position = lcpoint.Point;
            	Double x = position.X;
                Double y = position.Y;
                Double z = position.Z;
                IList<Parameter> NomLuminaireS = e.GetParameters("Panneau");
                Parameter p = NomLuminaireS.First();
                String Sortie = p.AsString() + " ";
                Sortie = Sortie.Trim();
                

                //Nom de l'objet de l'indice de charge
                ElementId typeId = e.get_Parameter(BuiltInParameter.SYMBOL_ID_PARAM).AsElementId();
                Element type = rvtDoc.GetElement(typeId) as Element;
                IList<Parameter> typeParams = type.GetParameters("Indice de charge");
                ElementId elId = typeParams.First().AsElementId();
                Element ic = rvtDoc.GetElement(elId) as Element;
                String icName = ic.Name;
                
                
            }

 Cordialement,

Mihhaïl Poskurlat

Message 14 sur 21
be-bj
en réponse à: mposkurlat

OK, merci beaucoup

Bonne journée.
Message 15 sur 21
be-bj
en réponse à: mposkurlat

Bonsoir

 

Désole j'ai une erreur en ligne 3

 

IList<Parameter> typeParams = type.GetParameters("Indice de charge");

 

Cordialement

 

Message 16 sur 21
mposkurlat
en réponse à: be-bj

Bonsoir

Je n'ai pas d'erreur de mon côté.

Est-ce que le paramètre "Indice de charge" existe dans toutes vos familles de Luminaires? 

Message 17 sur 21
be-bj
en réponse à: mposkurlat

Bonjour

 

Désolé  mais ça ne fonctionne pas

 

ci joint le fichier REVIT avec des liminaires et le fichier en TXT en C# de la partie du programme j'ai uniquement l'indice de charge qui ne fonctionne pas ?

 

Cordialement

Message 18 sur 21
Charles.Piro
en réponse à: be-bj

Salut,

 

le problème c'est que tu utilise des fonctions Linq (."First()") sans aucune protection donc les erreurs interrompent le programme.

Le paramètre "indice de charge" n'est pas présent nativement dans toutes les familles donc il est possible qu'il ne soit pas présent dans l'une de ton fichier (cf message de @mposkurlat).

Voici une meilleur méthode d'accès à cette propriétée : 

foreach (Element e in walls2)
                    {
                        
                        try {
                        		
                        	FamilyInstance famInst = e as FamilyInstance;
                        	ElementId symbolId = famInst.Symbol.Id;
                        	Element familytype = rvtDoc.GetElement(symbolId);
                        	Parameter param = familytype.LookupParameter("Indice de charge");
                        	
                        	if(param != null && param.StorageType == StorageType.ElementId)
                        	{
                        		//Get String Value
                        		string strValue = param.AsValueString();
                        		
                        		//GetElementId
                        		Element elementType = rvtDoc.GetElement(param.AsElementId());
                        		string strTypeName = elementType.Name;
                        	}
                        	else
                        	{
                        		TaskDialog.Show("debug","Parameter doesn't exist")
                        	}
                        } catch (Exception) {
                        	
                        	continue;
                        }
                        
                    }

 

En allant d'abord chercher le paramètre "parameter" on s'assure que celui-ci n'est pas null donc qu'il existe. J'ai ajouté la recherche de StorageType care dans le cas présent tu recherche un ElementId. 

Bien evidemment, pour un code plus fonctionnel, il serait préférable de créer une fonction générique ressortant les valeurs suivant le type de stockage.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 19 sur 21
mposkurlat
en réponse à: be-bj

Bonjour,

Il n'y a pas de fichier Revit ci-joint. Essayez d'ajouter à nouveau le fichier Revit. 

Je vous conseil d'ajouter le try-catch block une fois vous avez débuggé votre code, et pas avant. Sinon quand votre code ne marche pas vous ne savez pas d'où vient l'erreur.

Dans votre code, devant "  Sortie = p.AsString() + " ";  " j'ai dû ajouter " String " pour déclarer la variable puisque je ne sais pas si c'était fait au-dessus, et je ne vois pas la variable " N1 ". Après cela le code s'exécute sans problèmes.

 

Message 20 sur 21
patrick.emin
en réponse à: be-bj

Bonjour @be-bj 

Parmi les réponses qui vous ont été données, si une (ou plusieurs) d'entre elles apporte une solution à votre problème ou vous a permis de mieux l'analyser et le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


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

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

Publier dans les forums