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?