Message 1 of 5
Beam intersect whit Column cut
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I am trying to create a separation or cut in a selected beam whose elements that intersect it will be columns and for this I am using the following code. The problem is that apparently the solid of the beam is not being obtained. Can someone guide me how to achieve this and how to generate the cut.
One idea would be to consider the following method SolidSolidCutUtils.AddCutBetweenSolids(doc, lastBeam, column);
// Selecciona la viga.
Reference beamRef = uidoc.Selection.PickObject(ObjectType.Element,new StructuralFramingSelectionFilter(),"Selecciona una viga");
if (beamRef == null)
{
return Result.Cancelled;
}
ElementId beamId = beamRef.ElementId;
Element beam = doc.GetElement(beamId);
// Obtener la geometría de la viga
GeometryElement geomElem = beam.get_Geometry(new Options());
// Buscar la geometría sólida de la viga
Solid beamSolid = null;
foreach (GeometryObject geomObj in geomElem)
{
if (geomObj is Solid)
{
beamSolid = geomObj as Solid;
break;
}
}
// Verificar que se haya encontrado un sólido
if (beamSolid != null)
{
// Hacer algo con el sólido de la viga, por ejemplo, obtener su volumen
double beamVolume = beamSolid.Volume;
TaskDialog.Show("Volumen de la viga", "El volumen de la viga seleccionada es " + beamVolume.ToString());
}
else
{
TaskDialog.Show("Error", "No se pudo encontrar un sólido para la viga seleccionada.");
}
// Obtiene los elementos que intersectan con la viga.
BoundingBoxXYZ boundingBox = beam.get_BoundingBox(view);
Outline outline = new Outline(boundingBox.Min, boundingBox.Max);
BoundingBoxIntersectsFilter intersectsFilter = new BoundingBoxIntersectsFilter(outline);
FilteredElementCollector collector = new FilteredElementCollector(doc, view.Id);
IList<Element> intersectingElements = collector.WherePasses(intersectsFilter).WhereElementIsNotElementType().ToList();
// Muestra los elementos intersectados en una ventana de diálogo.
string messageBoxText = "Elementos intersectados:\n\n";
foreach (Element intersectingElement in intersectingElements)
{
messageBoxText += intersectingElement.Id + "\n";
//SolidSolidCutUtils.AddCutBetweenSolids(doc, beam, intersectingElement);
}
TaskDialog.Show("Intersección de elementos", messageBoxText);