Revit – Aplicar superficie dividida a paredes.
Estoy escribiendo un programa que forma una superficie dividida utilizando una referencia a la cara de la forma. Sin embargo, cuando se aplica a paredes (la cadena de búsqueda con selección de categoría se resalta a continuación), el programa no hace nada. ¿Cómo aplico este programa solo a todas las paredes de un proyecto?
public class Comando : IExternalCommand
{
public Resultado Ejecutar(
DatosComandoExterno datosComando,
ref string mensaje,
ConjuntoElementos elementos)
{
UIApplication app = datosComando.Aplicación;
Documento doc = app.ActiveUIDocument.Document;
Autodesk.Revit.Creation.Application creApp
= app.Application.Create;
try
{
ColeccionElementosFiltrados formas = new ColeccionElementosFiltrados(doc);
formas.OfCategory(BuiltInCategory.OST_CurtainGridsWall); // !!cadena con problema!!
using (Transacción tx = new Transacción(doc))
{
tx.Start("Crear superficie dividida");
foreach (Forma forma in formas)
{
FamilyItemFactory factory = doc.FamilyCreate;
Opciones opciones = creApp.NewGeometryOptions();
opciones.ComputeReferences = true;
opciones.View = doc.ActiveView;
ElementoGeometría elemento = forma.get_Geometry(opciones);
foreach (ObjetoGeometría geoObject in elemento) // 2013
{
Sólido sólido = geoObject as Solid;
foreach (Cara cara in sólido.Caras)
{
if (cara.Reference != null)
{
if (null != cara)
{
}
}
}
}
}
tx.Commit();
}
return Result.Succeeded;
}
catch (Exception ex)
{
mensaje = ex.Message;
return Result.Failed;
}
}
}
davy.ai
Para aplicar este programa a todas las paredes en un proyecto, puede utilizar la clase
FilteredElementCollector
para recopilar todas las paredes en el proyecto. Luego, puede recorrer las paredes y aplicar el programa a cada pared. Por ejemplo:Usando (Transaction tx = new Transaction (doc))
{
tx.Start (“Create Devided Surface”);
}