Uy Võ Lê 232 Uy Võ Lê

Revit API Cơ bản buổi 14 | Revit API Lesson 14 (06/08/2020)

Nội dung

  1. Các hàm xử lý Solid hay dùng:
    • BooleanOperationsUtils
    • SolidUtils
  2. Cách sử dụng và ví dụ.

 

Video bài 14

Đừng quên subcribe kênh youtube của mình để cập nhật video mới nhất.

 

Code trong bài

#region Namespaces
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using LUV_RevitAPI_Extensions;
using Application = Autodesk.Revit.ApplicationServices.Application;
#endregion

namespace LREProject
{
    [Transaction(TransactionMode.Manual)]
    public class Command14 : IExternalCommand
    {
        public Result Execute(
          ExternalCommandData commandData,
          ref string message,
          ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Application app = uiapp.Application;
            Document doc = uidoc.Document;

            //Pick elements
            Reference reference1 = uidoc.Selection.PickObject(ObjectType.Element);
            Reference reference2 = uidoc.Selection.PickObject(ObjectType.Element);
            Element element1 = doc.GetElement(reference1);
            Element element2 = doc.GetElement(reference2);


            //Get solid
            Solid solid1 = element1.GetSolids().JoinAllSolid().Result;
            Solid solid2 = element2.GetSolids().JoinAllSolid().Result;


            //BooleanOperationsUtils
            //Solid solidResult = BooleanOperationsUtils.ExecuteBooleanOperation(solid1, solid2, BooleanOperationsType.Union);
            //Solid solidResult = BooleanOperationsUtils.ExecuteBooleanOperation(solid1, solid2, BooleanOperationsType.Difference);
            //Solid duplicatedSolid1 = SolidUtils.Clone(solid1);
            //BooleanOperationsUtils.ExecuteBooleanOperationModifyingOriginalSolid(duplicatedSolid1, solid2, BooleanOperationsType.Difference);
            //XYZ origin = new XYZ(-96.9111754567479, 37.9648912077351, 40.2235047776193);
            //Plane plane = Plane.CreateByNormalAndOrigin(-XYZ.BasisZ, origin);
            //Solid solidResult = BooleanOperationsUtils.CutWithHalfSpace(solid1, plane);

            //SolidUtils
            //XYZ vector = new XYZ(10, 0, 0);
            //Transform transform = Transform.CreateTranslation(vector);
            IList<Solid> solids1 = SolidUtils.SplitVolumes(solid1);
            IList<Solid> solids2 = SolidUtils.SplitVolumes(solid2);
            //Create direct shape from solid
            using (Transaction t = new Transaction(doc, "Create DS"))
            {
                t.Start();

                //duplicatedSolid1.CreateDirectShape(doc, BuiltInCategory.OST_GenericModel, "Solid 1");
                //solid2.CreateDirectShape(doc, BuiltInCategory.OST_GenericModel, "Solid 2");
                //solid1.CreateDirectShape(doc, BuiltInCategory.OST_GenericModel, "Solid 1");
                //solidResult.CreateDirectShape(doc, BuiltInCategory.OST_GenericModel, "Solid result");

                int i = 1;
                foreach(Solid solid in solids1)
                {
                    solid.CreateDirectShape(doc, BuiltInCategory.OST_GenericModel, "Solid 1 result " + (i++).ToString());
                }

                i = 1;
                foreach (Solid solid in solids2)
                {
                    solid.CreateDirectShape(doc, BuiltInCategory.OST_GenericModel, "Solid 2 result " + (i++).ToString());
                }

                t.Commit();
            }


            return Result.Succeeded;
        }
    }
}

 


Link download thư viện LRE: https://leuyvo.com/getLRE

  • LRE bản 1.0.4.
  • Chọn phiên bản Revit bạn sử dụng tương ứng, hiện tại chỉ có Revit 2018. Tạm thời bạn có thể sử dụng bản 2018 này trên cả Revit 2019 và 2020.
  • Giải nén file .zip bạn có file *.dll, Add Reference vào dự án của bạn và thử sử dụng.

 


Reply 0