es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
        }
    }
}
Tags:  ,

Answer

  1. Avatar for 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:

    FilteredElementCollector walls = new FilteredElementCollector(doc);
    walls.OfCategory(BuiltInCategory.OST_Walls);
    

    Usando (Transaction tx = new Transaction (doc))
    {
    tx.Start (“Create Devided Surface”);

    foreach (Wall wall in walls)
    {
        // Apply program to wall here
    }
    tx.Commit ();
    

    }

Comments are closed.