una sentido rampas rampa poner irregulares hacer como cambiar calcular c# api autodesk revit-api revit

c# - sentido - ¿Cómo encontrar el inicio/final de la rampa en revit, quizás con bocetos?



rampas en revit 2018 (1)

Asumiendo que su Ramp es una FamilyInstance :

var fecRamps = new FilteredElementCollector(doc) .OfClass(typeof(FamilyInstance)) .Where(pElt => { int lCatId = pElt.Category.Id.IntegerValue; return lCatId == (int)BuiltInCategory.OST_Ramps; }) .OfType<FamilyInstance>() .ToList(); List<XYZ> lRampLocs = new List<XYZ>(); foreach (var pFam in fecRamps) { var fLoc = pFam.Location as LocationCurve; var fRampSide1 = new XYZ(fLoc.Curve.GetEndPoint(0); var fRampSide2 = new XYZ(fLoc.Curve.GetEndPoint(1); lRampLocs.Add(fRampSide1); lRampLocs.Add(fRampSide2); }

Cada FamilyInstance tiene una Location y puede FamilyInstance la Location como LocationCurve . Desde la curva, puede obtener los puntos finales a través del espacio de nombres Autodesk.Revit.DB .

Tengo un montón de rampas en las que me gustaría saber los puntos de inicio y fin de (y en caso de múltiples puntos de inicio / finalización me gustaría saber cómo se conectan). Actualmente obtengo estos como

List<TransitionPoint> ret = new List<TransitionPoint>(); FilteredElementCollector collector = new FilteredElementCollector(doc); ICollection<Element> ramps = collector.OfCategory(BuiltInCategory.OST_Ramps).ToElements(); foreach (var ramp in ramps) { //what goes here? }

Estas rampas contienen las siguientes propiedades:

Type Comments Ramp Max Slope (1/x) Category URL Design Option Type Name Ramp Material Function Manufacturer Family Name Model Keynote Type Image Text Size Shape Text Font Maximum Incline Length Assembly Description Assembly Code Type Mark Category Thickness Cost Description

Ahora bien, si estos fueran escaleras, usaría stairs = collector.OfCategory(BuiltInCategory.OST_Stairs).OfClass(typeof(Stairs)).ToElements(); ICollection stairs = collector.OfCategory(BuiltInCategory.OST_Stairs).OfClass(typeof(Stairs)).ToElements(); y luego puedo convertir los objetos en Escaleras, sin embargo, no parece haber una clase simulativa de Escaleras que me permita Stairs.GetStairsRuns(). a Stairs.GetStairsRuns().

¿Alguien sabe cómo obtener algo así como un RampRun o encontrar el inicio y el final de una rampa?

También probé la siguiente solución pero eso tampoco funcionó

public static void MapRunsToRamps(Document doc) { var rule = ParameterFilterRuleFactory.CreateNotEqualsRule(new ElementId(BuiltInParameter.HOST_ID_PARAM), "null", true); ElementParameterFilter filter = new ElementParameterFilter(rule); FilteredElementCollector collector = new FilteredElementCollector(doc); List<Element> rampsRuns = collector.WherePasses(filter).ToElements().ToList<Element>(); foreach (Element e in rampsRuns) { var hostpara = e.get_Parameter(BuiltInParameter.HOST_ID_PARAM); if (hostpara != null) { var host = doc.GetElement(new ElementId(hostpara.AsInteger())); if (host.Category.Equals(BuiltInCategory.OST_Ramps)) { //breakpoint that is never activated } } } }

Esto encuentra muchos objetos, ninguno con una rampa como anfitrión.

Aquí hay un ejemplo de una rampa y la ubicación que trato de encontrar marcada con flechas rojas.

esta https://forums.autodesk.com/t5/revit-api/how-do-we-get-the-x-y-z-cordinates-for-stairs-ramps/td-p/2575349 sugiere que podemos usar una curva de ubicación, ¿Alguna forma de hacer esto?

editar: Parece que hay bocetos basados ​​en los cuales podríamos encontrar las rampas, la pregunta es si tengo un boceto que diga con

var rampCategoryfilter = new ElementCategoryFilter(BuiltInCategory.OST_StairsSketchRunLines); var rampsRuns = new FilteredElementCollector(doc).WherePasses(rampCategoryfilter);

entonces sí puedo obtener las ubicaciones, pero lo que no tengo es la rampa a la que también pertenece, ¿alguna idea de cómo encontrar eso?