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 : C# - Calcul des escaliers

10 RÉPONSES 10
RÉSOLU
Répondre
Message 1 sur 11
be-bj
351 Visites, 10 Réponses

Revit : C# - Calcul des escaliers

Bonjour

 

Dans REVIT il manque vraiment les information récupérable pour faire un métrage et un chiffrage.

 

Y a t'il une solution simple pour obtenir les informations suivantes éventuellement en C#

 

a) le nombre de marche, la hauteur des marches, la largeur des marches et la hauteur totale de l'escalier.

b) La surface du ou des paliers, la largeur et la longueur L1 et L2 selon copie d'écran

c) les surfaces des dessous des marches d'escalier (pour la peinture) largeur x longueur (pente partie en biais)

d) Avec tous les éléments nous serions en mesure de calculé les plinthes en carrelage.

 

Ci joint un exemple d'escalier courant 

 

Avec ses résultats ce serais une merveille de REVIT pour le chiffrage c'est vraiment un manque d'information !!!

 

Cordialement bonne journées.

bebj_0-1641225469178.png


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
C# - Calcul des escalier

 

 

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

Salut,

 

voici un exemple d'accès aux informations des escaliers : 

Reference refsel = uidoc.Selection.PickObject(ObjectType.Element,"Selectionner escalier");
Stairs m_stair = doc.GetElement(refsel.ElementId) as Stairs;
			 
StringBuilder infoEscalier = new StringBuilder();
infoEscalier.AppendLine(string.Format("Escalier {0} :\n",m_stair.Name));
			
//Hauteur réelle de l'escalier :
double dblMeterHeight = Math.Round(UnitUtils.ConvertFromInternalUnits(m_stair.Height,new ForgeTypeId("autodesk.unit.unit:meters-1.0.0")),2);
infoEscalier.AppendLine(string.Format("Hauteur Réele : {0}m",dblMeterHeight));
			
//infos de l'escalier :
infoEscalier.AppendLine(string.Format("Nombre réel de marches : {0}",m_stair.ActualRisersNumber));
double dblMeterHeightMarche = Math.Round(UnitUtils.ConvertFromInternalUnits(m_stair.ActualRiserHeight,new ForgeTypeId("autodesk.unit.unit:meters-1.0.0")),2); 
infoEscalier.AppendLine(string.Format("Hauteur de marche : {0}m\n",dblMeterHeightMarche));
			
//Accès aux paliers :
ICollection<ElementId> lstStairsLanding = m_stair.GetStairsLandings();
int countStairsLanding = 0;
foreach (ElementId _id in lstStairsLanding) 
{
	countStairsLanding++;
	StringBuilder infoStairLanding = new StringBuilder();
				 
        infoStairLanding.AppendLine(string.Format("Palier {0} :",countStairsLanding));
					
	try 
	{
		StairsLanding m_stairLanding = doc.GetElement(_id) as StairsLanding;

		double dblLandingThick =  m_stairLanding.Thickness;
		double dblMeterLandingThick = Math.Round(UnitUtils.ConvertFromInternalUnits(dblLandingThick,new ForgeTypeId("autodesk.unit.unit:meters-1.0.0")),2); 
		infoStairLanding.AppendLine(string.Format("Epaisseur : {0}m",dblMeterLandingThick));

		GeometryElement geomElem = m_stairLanding.get_Geometry(new Options());
		foreach (GeometryObject geomobj in geomElem) 
		{
			try 
			{
				if (null != geomsolid && geomsolid.Volume > 0.0)
                {
                	double dblVolume = geomsolid.Volume;
					double dblSurface = dblVolume / dblLandingThick;
                	double dblMeterSurface = Math.Round(UnitUtils.ConvertFromInternalUnits(dblSurface,new ForgeTypeId("autodesk.unit.unit:squareMeters-1.0.1")),2);
			        infoStairLanding.AppendLine(string.Format("Aire du palier : {0}m²",dblMeterSurface));                	
                }
			} 
			catch (Exception) 
			{}
		}
					
	} 
	catch (Exception) 
	{}
	finally
	{
		infoEscalier.AppendLine(infoStairLanding.ToString());
	}
}
			
//Accès aux volées :
ICollection<ElementId> lstStairsRuns = m_stair.GetStairsRuns();
int countStairsRuns = 0;
foreach (ElementId _id in lstStairsRuns) 
{
	countStairsRuns++;
	StringBuilder infoStairRun = new StringBuilder();
	infoStairRun.AppendLine(string.Format("Volée {0} :",countStairsRuns));
	try 
	{
		StairsRun m_stairRun = doc.GetElement(_id) as StairsRun;
					
		infoStairRun.AppendLine(string.Format("Nombre réel de marches : {0}", m_stairRun.ActualRisersNumber));
		infoStairRun.AppendLine(string.Format("Nombre réel de contremarches : {0}", m_stairRun.ActualTreadsNumber));
					
		double dblMeterWidthStairStep = Math.Round(UnitUtils.ConvertFromInternalUnits(m_stairRun.ActualRunWidth,new ForgeTypeId("autodesk.unit.unit:meters-1.0.0")),2); 
		infoStairRun.AppendLine(string.Format("Largeur d'une marche : {0}m",dblMeterWidthStairStep));
					
		double dblThickStairStep =  m_stairRun.get_Parameter(BuiltInParameter.STAIRS_RUN_ACTUAL_TREAD_DEPTH).AsDouble();;
		double dblMeterThickStairStep = Math.Round(UnitUtils.ConvertFromInternalUnits(dblThickStairStep,new ForgeTypeId("autodesk.unit.unit:meters-1.0.0")),2);
		infoStairRun.AppendLine(string.Format("Profondeur d'une marche : {0}m",dblMeterThickStairStep));

		double dblAreaStairStep = dblMeterWidthStairStep*dblMeterThickStairStep;
		infoStairRun.AppendLine(string.Format("Aire d'une marche : {0}m²",dblAreaStairStep));
					
	} 
	catch (Exception) 
	{}
	finally
	{
		infoEscalier.AppendLine(infoStairRun.ToString());
	}
}
			
TaskDialog.Show("demo",infoEscalier.ToString());

D'autres informations sont accessible et utilisables en fonction des besoins.

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 3 sur 11
be-bj
en réponse à: Charles.Piro

Bonjour

 

Merci beaucoup pour votre rapidité.

 

je teste demain ci j'ai tous mes renseignements c'est un gain de temps appréciable. 

 

Merci, bonne journée

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

Bonjour

Désolé mais je ne vois pas comment faire les déclaration des deux variables en rouge dans mon début de programme 

 

Merci, bonne journée 

bebj_1-1641300783732.png

 

 

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

Il suffit de les remplacer par vos propres variables.

En l'occurrence, uidoc => uiDoc et doc => rvtDoc

 

Ceci est un code exemple qui vous montre comment accéder à certaines informations des escaliers. Ces éléments possèdent bien d'autres propriétés que vous pouvez découvrir.

Vous pouvez également récupérer les lignes de géométrie ou les solides et constituer vos propres algorithme afin d'en ressortir les informations souhaitée.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


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

Bonjour

 

SUPER CA FONCTIONNE

 

vous êtes des chefs c'est un plaisir de travailler avec vous, merci encore.

Bonne journées

Message 7 sur 11
patrick.emin
en réponse à: be-bj

@be-bj content que @Charles.Piro aie pu vous aider. Voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?


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 8 sur 11
be-bj
en réponse à: patrick.emin

Bonjour désolé j'ai un problème que je ne comprends pas impossible de trouver la solution !!!
Je n'arrive pas à résoudre le problème dans la partie du programme, le reste fonctionne très bien.

Je bloque sur : [ geomsolid.Volume ] la partie : Volume.
Cordialement bonne journée

foreach (GeometryObject geomobj in geomElem)
{

try
{
if (null != geomsolid && geomsolid.Volume > 0.0)
{
double dblVolume = geomsolid.Volume;
double dblSurface = dblVolume / dblLandingThick;
double dblMeterSurface = Math.Round(UnitUtils.ConvertFromInternalUnits(dblSurface, new ForgeTypeId("autodesk.unit.unit:squareMeters-1.0.1")), 2);
infoStairLanding.AppendLine(string.Format("Aire du palier : {0}m²", dblMeterSurface));
}
}
catch (Exception)
{ }
}
Message 9 sur 11
Charles.Piro
en réponse à: be-bj

Oui, petite erreur de ma part, voici une correction pour la récupération de la surface du palier :

 

Options opt = new Options();
opt.View = doc.ActiveView;
opt.IncludeNonVisibleObjects = true;

GeometryElement geomElem = m_stairLanding.get_Geometry(opt);
foreach (GeometryObject geomobj in geomElem) 
{
	try 
	{
		Solid geomsolid = geomobj as Solid;
		if (null != geomsolid && geomsolid.Volume > 0.0)
        {
            double dblVolume = geomsolid.Volume;
			double dblSurface = dblVolume / dblLandingThick;
            double dblMeterSurface = Math.Round(UnitUtils.ConvertFromInternalUnits(dblSurface,new ForgeTypeId("autodesk.unit.unit:squareMeters-1.0.1")),2);
			infoStairLanding.AppendLine(string.Format("Aire du palier : {0}m²",dblMeterSurface));                	
        }
	} 
	catch (Exception) 
	{}
}

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


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

Bonjour

 

Super ça fonctionne très bien, maintenant il me manque uniquement la surface des dessous d'escalier !!!

 

Mille merci

 

Bonne journée

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

La surface du dessous de l'escalier n'est pas directement disponible.

Si vous souhaitez l'obtenir, il va falloir récupérer la géométrie de l'objet et reconstruire les lignes de contour correspondant au dessous de l'escalier afin d'en créer une surface.

Gros travail en perspective afin d'avoir un algorithme qui fonctionne pour tous les types d'escalier.

 

Bon courage 😉



PIRO Charles
Developer

PIRO CIE
Linkedin


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