样式demo

This commit is contained in:
GG Z
2025-12-28 11:47:54 +08:00
parent ceccab9abb
commit 1fd8d2ced7
65 changed files with 2369 additions and 799 deletions

View File

@@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
namespace ShrlAlgoToolkit.Core.Assists
{
public class ColorAssist
{
public static Color GetDistinctColorById(ElementId id)
{
int hash = id.GetHashCode();
// 修正点:强制转换为 (int),利用 unchecked 溢出机制
// 2654435761 在 int 中就是 -1640531527
// unchecked 关键字确保在某些开启了溢出检查的项目配置中不会报错
unchecked
{
hash = hash * (int)2654435761;
}
// 2. 将哈希值映射到 0.0 - 1.0 的色相 (Hue)
// 使用黄金分割比 0.6180339887... 累加可以让颜色在色环上分布最均匀
double goldenRatioConjugate = 0.618033988749895;
double h = (hash * goldenRatioConjugate) % 1.0;
// 保证 h 为正数
if (h < 0) h += 1.0;
// 3. 固定饱和度 (S) 和 亮度 (V) 为较高值,保证颜色鲜艳
double s = 0.7; // 饱和度 0.0-1.0
double v = 0.9; // 亮度 0.0-1.0
// 4. HSV 转 Revit Color (RGB)
return HsvToRgb(h, s, v);
}
// 辅助函数HSV 转 Revit Color
private static Color HsvToRgb(double h, double s, double v)
{
int hi = (int)(h * 6);
double f = h * 6 - hi;
byte p = (byte)(v * (1 - s) * 255);
byte q = (byte)(v * (1 - f * s) * 255);
byte t = (byte)(v * (1 - (1 - f) * s) * 255);
byte vByte = (byte)(v * 255);
switch (hi % 6)
{
case 0: return new Color(vByte, t, p);
case 1: return new Color(q, vByte, p);
case 2: return new Color(p, vByte, t);
case 3: return new Color(p, q, vByte);
case 4: return new Color(t, p, vByte);
default: return new Color(vByte, p, q);
}
}
}
}

View File

@@ -6,7 +6,7 @@ namespace ShrlAlgoToolkit.Revit.Assists;
/// <summary>
/// 三维视图可用
/// </summary>
internal class EnableInView3D : IExternalCommandAvailability
public class EnableInView3D : IExternalCommandAvailability
{
public bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) =>
applicationData.ActiveUIDocument?.Document.ActiveView is View3D && applicationData.ActiveUIDocument?.Document.IsFamilyDocument == false;

View File

@@ -9,16 +9,13 @@ namespace ShrlAlgoToolkit.Revit.Assists;
public class FuncFilter(Func<Element, bool> allowElement, Func<Reference, XYZ, bool> allowReference = null)
: ISelectionFilter
{
private readonly Func<Element, bool> elementFunc = allowElement;
private readonly Func<Reference, XYZ, bool> referenceFunc = allowReference;
public bool AllowElement(Element elem)
{
return elementFunc(elem);
return allowElement(elem);
}
public bool AllowReference(Reference reference, XYZ position)
{
return referenceFunc == null || referenceFunc(reference, position);
return allowReference == null || allowReference(reference, position);
}
}

View File

@@ -6,6 +6,45 @@ namespace ShrlAlgoToolkit.Revit.Assists
{
internal class GeometryAssist
{
/// <summary>
///获取元素的包围框
/// </summary>
/// <param name="elements"></param>
/// <returns></returns>
public static BoundingBoxXYZ GetBoundingBox(List<Element> elements)
{
if (elements == null || elements.Count == 0)
{
return new BoundingBoxXYZ();
}
var gmax = XYZ.Zero;
var gmin = XYZ.Zero;
var elementIds = elements.Select(e => e.Id).ToList();
var doc = elements.FirstOrDefault()?.Document;
using (SubTransaction sub = new SubTransaction(doc))
{
sub.Start();
Group g;
if (doc.IsFamilyDocument)
{
g = doc.FamilyCreate.NewGroup(elementIds);
}
else
{
g = doc.Create.NewGroup(elementIds);
}
gmax = g.get_BoundingBox(null).Max;
gmin = g.get_BoundingBox(null).Min;
sub.RollBack();
}
return new BoundingBoxXYZ
{
Max = gmax,
Min = gmin
};
}
/// <summary>
/// 对曲线列表进行排序,使其正确排序和定向,形成线串。
/// </summary>

View File

@@ -3,8 +3,6 @@ using System.Runtime.InteropServices;
using System.Text;
using System.Windows;
using System.Windows.Interop;
using Autodesk.Revit.UI;
using Autodesk.Windows;
namespace ShrlAlgoToolkit.Revit.Assists;
@@ -17,10 +15,10 @@ public class KeyIntPtrHelper
private static void CompleteMultiSelection()
{
var rvtwindow = ComponentManager.ApplicationWindow;
var window = ComponentManager.ApplicationWindow;
var list = new List<IntPtr>();
var flag = EnumChildWindows(
rvtwindow,
window,
(hwnd, l) =>
{
var windowText = new StringBuilder(200);
@@ -79,15 +77,13 @@ public class KeyIntPtrHelper
foreach (var intPtr2 in handles)
{
var windowTextLength = GetWindowTextLength(intPtr2);
if (windowTextLength != 0)
if (windowTextLength == 0) continue;
var stringBuilder = new StringBuilder(windowTextLength);
_ = GetWindowText(intPtr2, stringBuilder, windowTextLength + 1);
if (stringBuilder.ToString().ToLower().Contains("autodesk revit"))
{
var stringBuilder = new StringBuilder(windowTextLength);
_ = GetWindowText(intPtr2, stringBuilder, windowTextLength + 1);
if (stringBuilder.ToString().ToLower().Contains("autodesk revit"))
{
intPtr = intPtr2;
break;
}
intPtr = intPtr2;
break;
}
}
}

View File

@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Events;
namespace ShrlAlgoToolkit.Revit.Assists
@@ -18,32 +12,32 @@ namespace ShrlAlgoToolkit.Revit.Assists
/// var command = RevitCommandId.LookupPostableCommandId(PostableCommand.TypeProperties);
/// UiApplication.PostCommand(command);</c>
/// </example>
internal class RevitCommandEndedMonitor
public class RevitCommandEndedMonitor
{
private readonly UIApplication _revitUiApplication;
private readonly UIApplication revitUiApplication;
private bool _initializingCommandMonitor;
private bool initializingCommandMonitor;
public event EventHandler CommandEnded;
public RevitCommandEndedMonitor(UIApplication revituiApplication)
public RevitCommandEndedMonitor(UIApplication uIApplication)
{
_revitUiApplication = revituiApplication;
revitUiApplication = uIApplication;
_initializingCommandMonitor = true;
initializingCommandMonitor = true;
_revitUiApplication.Idling += OnRevitUiApplicationIdling;
revitUiApplication.Idling += OnRevitUiApplicationIdling;
}
private void OnRevitUiApplicationIdling(object sender, IdlingEventArgs idlingEventArgs)
{
if (_initializingCommandMonitor)
if (initializingCommandMonitor)
{
_initializingCommandMonitor = false;
initializingCommandMonitor = false;
return;
}
_revitUiApplication.Idling -= OnRevitUiApplicationIdling;
revitUiApplication.Idling -= OnRevitUiApplicationIdling;
OnCommandEnded();
}

View File

@@ -2,7 +2,7 @@
namespace ShrlAlgoToolkit.Revit.Assists;
internal static class SpatialAssist
public static class SpatialAssist
{
//private static List<Curve> _curvesSorted;
/// <summary>
@@ -432,7 +432,8 @@ internal static class SpatialAssist
// return list;
//}
}
internal interface ICurveContainer
public interface ICurveContainer
{
}

View File

@@ -1,8 +1,4 @@
using Autodesk.Revit.DB;
using ShrlAlgoToolkit.Revit.Extensions;
using System;
using System.IO;
using System.Windows;

View File

@@ -1,8 +1,8 @@
using Autodesk.Revit.DB;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class CategoryAssist
public static class CategoryExtension
{
public static Element ToElement(this ElementId elementId, Document doc)
{

View File

@@ -2,7 +2,7 @@
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Electrical;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class ConnectorExtensions
{

View File

@@ -3,9 +3,9 @@ using System.Reflection;
using Autodesk.Revit.DB;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class DebugAssist
public static class DebugExtensions
{
/// <summary>
/// 生成瞬态显示的方法

View File

@@ -6,13 +6,12 @@ using System.Windows;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Visual;
using Autodesk.Revit.UI;
using ShrlAlgoToolkit.Revit.Assists;
using ShrlAlgoToolkit.Revit.Extensions;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class DocumentAssist
public static class DocumentExtensions
{
/// <summary>
/// 轴网标注
@@ -881,7 +880,6 @@ public static class DocumentAssist
/// <param name="definitionId">定义名称,即是族名称、类型名称(强制一致),创建多个实例时,如果相同,则会合并在一个族中</param>
/// <param name="category">族类别</param>
/// <param name="geos">几何</param>
/// <param name="transform">位置</param>
/// <returns></returns>
public static DirectShape CreateDirectShapeInstance(this Document doc, string definitionId, BuiltInCategory category, List<GeometryObject> geos)
{

View File

@@ -1,7 +1,7 @@
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class ElementCollectorExtensions
{

View File

@@ -1,51 +1,9 @@
using Autodesk.Revit.DB;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
namespace ShrlAlgoToolkit.Revit.Extensions;
namespace ShrlAlgoToolkit.Revit.Assists;
public static class ElementAssist
public static class ElementExtensions
{
/// <summary>
///获取元素的包围框
/// </summary>
/// <param name="elements"></param>
/// <returns></returns>
public static BoundingBoxXYZ GetBoundingBox(List<Element> elements)
{
if (elements == null || elements.Count == 0)
{
return new BoundingBoxXYZ();
}
var gmax = XYZ.Zero;
var gmin = XYZ.Zero;
var elementIds = elements.Select(e => e.Id).ToList();
var doc = elements.FirstOrDefault()?.Document;
using (SubTransaction sub = new SubTransaction(doc))
{
sub.Start();
Group g;
if (doc.IsFamilyDocument)
{
g = doc.FamilyCreate.NewGroup(elementIds);
}
else
{
g = doc.Create.NewGroup(elementIds);
}
gmax = g.get_BoundingBox(null).Max;
gmin = g.get_BoundingBox(null).Min;
sub.RollBack();
}
return new BoundingBoxXYZ
{
Max = gmax,
Min = gmin
};
}
/// <summary>
/// 镜像元素
/// </summary>

View File

@@ -4,7 +4,7 @@ using System.Windows;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.ExtensibleStorage;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
/// <summary>
/// 可扩展存储工具Schema框架->由字段Field组成是定义
@@ -148,8 +148,7 @@ public static class ExtensibleStorageExtensions
/// <summary>
/// 通过guid名称获取Schema
/// </summary>
/// <param name="elm"></param>
/// <param name="schemaName"></param>
/// <param name="schemaGuid"></param>
/// <returns></returns>
public static Schema GetSchemaByGuid(Guid schemaGuid)
{

View File

@@ -1,6 +1,6 @@
using Autodesk.Revit.DB;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
internal static class HostObjectExtensions
{

View File

@@ -3,9 +3,9 @@ using System.Text;
using Autodesk.Revit.DB;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class ImportInstanceAssist
public static class ImportInstanceExtensions
{
/// <summary>
/// 根据所选的参考,获取所有相同的块参照

View File

@@ -1,6 +0,0 @@
namespace ShrlAlgoToolkit.Revit.Extensions
{
internal class JIGAssist
{
}
}

View File

@@ -5,7 +5,7 @@ using Autodesk.Revit.DB.Plumbing;
using System.Diagnostics;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
/// <summary>
/// MEP扩展类

View File

@@ -6,7 +6,7 @@ using System.Diagnostics;
using System.IO;
using System.Text;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class MaterialExtensions

View File

@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB;
namespace ShrlAlgoToolkit.Revit.Extensions
{

View File

@@ -1,7 +1,8 @@
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using ShrlAlgoToolkit.Core.Assists;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
/// <summary>
@@ -224,13 +225,12 @@ public static class RoomExtensions
material == null
? new SolidOptions(ElementId.InvalidElementId, ElementId.InvalidElementId)
: new SolidOptions(material.Id, ElementId.InvalidElementId);
options = new SolidOptions(material.Id, ElementId.InvalidElementId);
var solid = GeometryCreationUtilities.CreateExtrusionGeometry(curveLoops, XYZ.BasisZ, height);
var solid = GeometryCreationUtilities.CreateExtrusionGeometry(curveLoops, XYZ.BasisZ, height, options);
var directShape = doc.CreateDirectShapeInstance(
"房间实体",
BuiltInCategory.OST_GenericModel,
new List<GeometryObject> { solid });
[solid]);
directShape.get_Parameter(BuiltInParameter.DOOR_NUMBER).Set(room.Name);
//ds.SetName(room.Name);
//var option = ds.GetOptions();
@@ -241,11 +241,7 @@ public static class RoomExtensions
var elements = new FilteredElementCollector(doc);
var solidFillPattern = elements.OfClass(typeof(FillPatternElement)).Cast<FillPatternElement>().First(a => a.GetFillPattern().IsSolidFill);
var random = new Random(DateTime.Now.Millisecond);
var r = Convert.ToByte(random.Next(0, 255));
var g = Convert.ToByte(random.Next(0, 255));
var b = Convert.ToByte(random.Next(0, 255));
var color = new Color(r, g, b);
var color = ColorAssist.GetDistinctColorById(directShape.Id);
var ogs = new OverrideGraphicSettings();
ogs.SetProjectionLineColor(color);
#if REVIT2018

View File

@@ -1,12 +1,10 @@
using Autodesk.Revit.DB;
using ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class SpatialExtensions
{
private static readonly double _curveTolerance = 0.0025;
private static readonly double CurveTolerance = 0.0025;
/// <summary>
/// 容差
/// </summary>
@@ -117,7 +115,7 @@ public static class SpatialExtensions
startParameter += param1;
if (curve.IsInside(startParameter))
{
if (startParameter < _curveTolerance || originParameter < _curveTolerance)//过短返回空一般是0
if (startParameter < CurveTolerance || originParameter < CurveTolerance)//过短返回空一般是0
{
startCurve = null;
}

View File

@@ -1,11 +1,10 @@
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class UIDocumentAssist
public static class UIDocumentExtensons
{
/// <summary>
/// 运行命令选择元素或选择元素执行操作

View File

@@ -10,15 +10,13 @@ using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
using adWin = Autodesk.Windows;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class UIExtensions
{

View File

@@ -3,9 +3,7 @@
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using ShrlAlgoToolkit.Revit.Extensions;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
/// SectionView:
/// RightDirection = CropBox.Transform.BasisX;

View File

@@ -1,10 +1,7 @@
using Autodesk.Revit.DB;
using ShrlAlgoToolkit.Revit.Assists;
using ShrlAlgoToolkit.Revit.Extensions;
using ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Assists;
namespace ShrlAlgoToolkit.Revit.Extensions;
public static class WallExtensions
{

View File

@@ -9,7 +9,8 @@
<Import_RootNamespace>ShrlAlgoToolkit.Revit</Import_RootNamespace>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)Assists\CategoryAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\CategoryExtension.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\ColorAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\DuplicateTypeNamesHandler.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\RevitCommandEndedMonitor.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ReferenceExtensions.cs" />
@@ -38,7 +39,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Assists\OptionsBarAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\ParameterAssist.cs" />
<Compile Include="..\ShrlAlgoToolkit.Revit\Extensions\ParameterExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\PointerExtension.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\PointerExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\RevitIniAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\ShortcutRepAttribute.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assists\SpatialAssist.cs" />
@@ -49,15 +50,14 @@
<Compile Include="$(MSBuildThisFileDirectory)Assists\VisualAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ApplicationExtensions.cs" />
<Compile Include="..\ShrlAlgoToolkit.Revit\Extensions\ConnectorExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\DebugAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\DocumentAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ElementAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\DebugExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\DocumentExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ElementExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ElementCollectorExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ExtensibleStorageExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\FamilyExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\HostObjectExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ImportInstanceAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\JIGAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ImportInstanceExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\KeyboardShortcutExtension.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\LevelExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\MaterialExtensions.cs" />
@@ -66,7 +66,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ScheduleExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SpatialExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\TransactionExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\UIDocumentAssist.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\UIDocumentExtensons.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\UIExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\UnitExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ViewExtensions.cs" />