Revit API Cơ bản buổi 14 | Revit API Lesson 14 (06/08/2020)
2613
Uy Võ Lê
Revit API Cơ bản buổi 14 | Revit API Lesson 14 (06/08/2020)
Nội dung
- Các hàm xử lý Solid hay dùng:
- BooleanOperationsUtils
- SolidUtils
- 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.
Liên kết hữu ích
Reply 0
You need to Login to Reply!