/*------------------------------------------------------------------------- * 功能描述:SolidUtil * 作者:xulisong * 创建时间: 2019/3/12 10:13:46 * 版本号:v1.0 * -------------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; namespace FWindSoft.Revit.Utils { public static class SolidUtil { #region 静态方法 /// /// 替换视图中的图形,来修改颜色 /// public static void SetColor(Element elem, Color color, View view = null, int transparency = 0) { var ogs = new OverrideGraphicSettings(); #region 表面填充图案 //可见 ogs.SetProjectionFillPatternVisible(true); //颜色 ogs.SetProjectionFillColor(color); //透明度 ogs.SetSurfaceTransparency(transparency); #endregion #region 截面填充图案 //可见 ogs.SetCutFillPatternVisible(true); //颜色 ogs.SetCutFillColor(color); //填充图案 #endregion if (view != null) { view.SetElementOverrides(elem.Id, ogs); } else { elem.Document.ActiveView.SetElementOverrides(elem.Id, ogs); } } /// /// 使用指定的球心和半径创建球体 /// public static Solid CreateSphereAtPoint( XYZ center, double radius) { // 使用标准的全局坐标系创建 Frame Frame frame = new Frame(center, XYZ.BasisX, XYZ.BasisY, XYZ.BasisZ); // 创建一个Z轴方向的半圆闭合曲线(注意所有的坐标都是相对全局坐标系的) Arc arc = Arc.Create( center - radius * XYZ.BasisZ, center + radius * XYZ.BasisZ, center + radius * XYZ.BasisX); Line line = Line.CreateBound( arc.EndPoint(), arc.StartPoint()); CurveLoop halfCircle = new CurveLoop(); halfCircle.Append(arc); halfCircle.Append(line); List loops = new List(1); loops.Add(halfCircle); return GeometryCreationUtilities .CreateRevolvedGeometry( frame, loops, 0, 2 * Math.PI); } public static Solid CreateSphere(List loops,XYZ vector) { return GeometryCreationUtilities.CreateExtrusionGeometry(loops, vector.Normalize(), vector.GetLength()); } #endregion } }