Всем привет. Столкнулся со странным поведением
Итак: Имеем - Revit 2015, План первого этажа с одной колонной на нем.
Что делаю - указываю две точки через PickPoint. По этим точкам создаю отрезок Line.CreateBound().
Дальше, через get_Geometry() из колонны собираю все отрезки:
public static void GetGeometryFromGeometryElement(
GeometryElement geometryElement,
ref List<Face> faces,
ref List<Curve> curves,
ref List<Solid> solids
)
{
foreach (GeometryObject geometryObject in geometryElement)
{
Face face = geometryObject as Face;
if (face != null)
{
faces.Add(face);
continue;
}
Curve curve = geometryObject as Curve;
if (curve != null)
{
if (curve.Reference != null)
curves.Add(curve);
continue;
}
Solid solid = geometryObject as Solid;
if (solid != null)
{
solids.Add(solid);
continue;
}
GeometryInstance geometryInstance = geometryObject as GeometryInstance;
if (geometryInstance != null)
{
GeometryElement transformedGeometryElement =
geometryInstance.GetInstanceGeometry();
GetGeometryFromGeometryElement(transformedGeometryElement, ref faces, ref curves, ref solids);
}
}
}
Из всех солидов и фейсов тоже собираю отрезки:
if (faces.Any())
foreach (Face face in faces)
GeometryHelpers.GetCurvesFromFace(face, ref curves);
if (solids.Any())
foreach (Solid solid in solids)
GeometryHelpers.GetCurvesFromSolid(solid, ref curves);
...........................
public static void GetCurvesFromSolid(Solid solid, ref List<Curve> curves)
{
foreach (Edge edge in solid.Edges)
{
if (edge.AsCurve().Reference != null)
curves.Add(edge.AsCurve());
}
foreach (var f in solid.Faces)
{
if (f is Face face)
GetCurvesFromFace(face, ref curves);
if (f is PlanarFace planarFace)
GetCurvesFromFace(planarFace, ref curves);
}
}
public static void GetCurvesFromFace(Face face, ref List<Curve> curves)
{
EdgeArrayArray edgeArrayArray = face.EdgeLoops;
foreach (EdgeArray edgeArray in edgeArrayArray)
{
foreach (Edge edge in edgeArray)
{
if (edge.AsCurve().Reference != null)
curves.Add(edge.AsCurve());
}
}
}
public static void GetCurvesFromFace(PlanarFace face, ref List<Curve> curves)
{
EdgeArrayArray edgeArrayArray = face.EdgeLoops;
foreach (EdgeArray edgeArray in edgeArrayArray)
{
foreach (Edge edge in edgeArray)
{
if (edge.AsCurve().Reference != null)
curves.Add(edge.AsCurve());
}
}
}
Для всех этих манипуляций использую опции:
Options options = new Options { ComputeReferences = true, View = doc.ActiveView, IncludeNonVisibleObjects = true };
Затем, после некоторых простых математических манипуляций у меня остается только два крайних отрезка. Я беру их референсы и по ним создаю новый размер
И вот тут происходит самое интересное - я получаю размер Шредингера! =))) Размер создается! Через отладку кода я получаю его Id. Но на плане он НЕ ПОЯВЛЯЕТСЯ! Его просто нету.
При этом, используя команду "Выбрать по коду" это размер выбирается. Через LookUp смотрю - все с ним нормально. Но его при этом нет!
Кто сталкивался с таким?