Exemplo n.º 1
0
 /// <summary>
 /// Get the singleton instance of GeometryCreation
 /// </summary>
 /// <param name="app">Revit application</param>
 /// <returns>The singleton instance of GeometryCreation</returns>
 public static GeometryCreation getInstance(Autodesk.Revit.ApplicationServices.Application app)
 {
     if (Instance == null)
     {
         Instance = new GeometryCreation(app);
     }
     return(Instance);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Create a constructive solid geometry - CSG tree
        /// http://en.wikipedia.org/wiki/Constructive_solid_geometry
        /// http://en.wikipedia.org/wiki/File:Csg_tree.png
        /// </summary>
        /// <param name="geometrycreation">The object that is responsible for creating the solids</param>
        /// <param name="avf">The object that is responsible for displaying the solids</param>
        private void CSGTree(GeometryCreation geometrycreation, AnalysisVisualizationFramework avf)
        {
            List <Solid> materialSolids = prepareSolids(geometrycreation);

            // Operation 1 : Intersect
            Solid CSGTree_solid1 = BooleanOperation.BooleanOperation_Intersect(materialSolids[0], materialSolids[1]);

            // Operation 2 : Union
            Solid CSGTree_solid2 = BooleanOperation.BooleanOperation_Union(materialSolids[2], materialSolids[3]);

            // Operation 3 : Union
            BooleanOperation.BooleanOperation_Union(ref CSGTree_solid2, materialSolids[4]);

            // Operation 4 : Difference
            BooleanOperation.BooleanOperation_Difference(ref CSGTree_solid1, CSGTree_solid2);

            avf.PaintSolid(CSGTree_solid1, "CSGTree");
        }
Exemplo n.º 3
0
        /// <summary>
        /// Prepare 5 solids materials for CSG tree
        /// </summary>
        /// <param name="geometrycreation">The object that is responsible for creating the solids</param>
        /// <returns>The solids materials list</returns>
        private List <Solid> prepareSolids(GeometryCreation geometrycreation)
        {
            List <Solid> resultSolids = new List <Solid>();

            resultSolids.Add(geometrycreation.CreateCenterbasedBox(Autodesk.Revit.DB.XYZ.Zero, 25));

            resultSolids.Add(geometrycreation.CreateCenterbasedSphere(Autodesk.Revit.DB.XYZ.Zero, 20));

            resultSolids.Add(geometrycreation.CreateCenterbasedCylinder(Autodesk.Revit.DB.XYZ.Zero, 5, 40,
                                                                        GeometryCreation.CylinderDirection.BasisX));

            resultSolids.Add(geometrycreation.CreateCenterbasedCylinder(Autodesk.Revit.DB.XYZ.Zero, 5, 40,
                                                                        GeometryCreation.CylinderDirection.BasisY));

            resultSolids.Add(geometrycreation.CreateCenterbasedCylinder(Autodesk.Revit.DB.XYZ.Zero, 5, 40,
                                                                        GeometryCreation.CylinderDirection.BasisZ));

            return(resultSolids);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Implement this method as an external command for Revit.
        /// </summary>
        /// <param name="commandData">An object that is passed to the external application
        /// which contains data related to the command,
        /// such as the application object and active view.</param>
        /// <param name="message">A message that can be set by the external application
        /// which will be displayed if a failure or cancellation is returned by
        /// the external command.</param>
        /// <param name="elements">A set of elements to which the external application
        /// can add elements that are to be highlighted in case of failure or cancellation.</param>
        /// <returns>Return the status of the external command.
        /// A result of Succeeded means that the API external method functioned as expected.
        /// Cancelled can be used to signify that the user cancelled the external operation
        /// at some point. Failure should be returned if the application is unable to proceed with
        /// the operation.</returns>
        public virtual Result Execute(ExternalCommandData commandData
                                      , ref string message, ElementSet elements)
        {
            try
            {
                Autodesk.Revit.DB.Document document = commandData.Application.ActiveUIDocument.Document;

                // Create a new transaction
                Transaction tran = new Transaction(document, "GeometryCreation_BooleanOperation");
                tran.Start();

                // Create an object that is responsible for creating the solids
                GeometryCreation geometryCreation = GeometryCreation.getInstance(commandData.Application.Application);

                // Create an object that is responsible for displaying the solids
                AnalysisVisualizationFramework AVF = AnalysisVisualizationFramework.getInstance(document);

                // Create a CSG tree solid
                CSGTree(geometryCreation, AVF);

                tran.Commit();

                // Set the view which display the solid active
                commandData.Application.ActiveUIDocument.ActiveView =
                    (((new FilteredElementCollector(document).
                       OfClass(typeof(Autodesk.Revit.DB.View))).
                      Cast <Autodesk.Revit.DB.View>()).
                     Where(e => e.Name == "CSGTree")).
                    First <Autodesk.Revit.DB.View>();

                return(Result.Succeeded);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                return(Result.Failed);
            }
        }
Exemplo n.º 5
0
 /// <summary>
 /// Get the singleton instance of GeometryCreation
 /// </summary>
 /// <param name="app">Revit application</param>
 /// <returns>The singleton instance of GeometryCreation</returns>
 public static GeometryCreation getInstance(Autodesk.Revit.ApplicationServices.Application app)
 {
     if (Instance == null)
      {
     Instance = new GeometryCreation(app);
      }
      return Instance;
 }
Exemplo n.º 6
0
        /// <summary>
        /// Prepare 5 solids materials for CSG tree
        /// </summary>
        /// <param name="geometrycreation">The object that is responsible for creating the solids</param>
        /// <returns>The solids materials list</returns>
        private List<Solid> prepareSolids(GeometryCreation geometrycreation)
        {
            List<Solid> resultSolids = new List<Solid>();

               resultSolids.Add(geometrycreation.CreateCenterbasedBox(Autodesk.Revit.DB.XYZ.Zero, 25));

               resultSolids.Add(geometrycreation.CreateCenterbasedSphere(Autodesk.Revit.DB.XYZ.Zero, 20));

               resultSolids.Add(geometrycreation.CreateCenterbasedCylinder(Autodesk.Revit.DB.XYZ.Zero, 5, 40,
              GeometryCreation.CylinderDirection.BasisX));

               resultSolids.Add(geometrycreation.CreateCenterbasedCylinder(Autodesk.Revit.DB.XYZ.Zero, 5, 40,
              GeometryCreation.CylinderDirection.BasisY));

               resultSolids.Add(geometrycreation.CreateCenterbasedCylinder(Autodesk.Revit.DB.XYZ.Zero, 5, 40,
              GeometryCreation.CylinderDirection.BasisZ));

               return resultSolids;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Create a constructive solid geometry - CSG tree
        /// http://en.wikipedia.org/wiki/Constructive_solid_geometry
        /// http://en.wikipedia.org/wiki/File:Csg_tree.png
        /// </summary>
        /// <param name="geometrycreation">The object that is responsible for creating the solids</param>
        /// <param name="avf">The object that is responsible for displaying the solids</param>
        private void CSGTree(GeometryCreation geometrycreation, AnalysisVisualizationFramework avf)
        {
            List<Solid> materialSolids = prepareSolids(geometrycreation);

               // Operation 1 : Intersect
               Solid CSGTree_solid1 = BooleanOperation.BooleanOperation_Intersect(materialSolids[0], materialSolids[1]);

               // Operation 2 : Union
               Solid CSGTree_solid2 = BooleanOperation.BooleanOperation_Union(materialSolids[2], materialSolids[3]);
               // Operation 3 : Union
               BooleanOperation.BooleanOperation_Union(ref CSGTree_solid2, materialSolids[4]);

               // Operation 4 : Difference
               BooleanOperation.BooleanOperation_Difference(ref CSGTree_solid1, CSGTree_solid2);

               avf.PaintSolid(CSGTree_solid1, "CSGTree");
        }