添加项目文件。
This commit is contained in:
98
Szmedi.RvKits/ModelManager/HeadroomCheckCmd.cs
Normal file
98
Szmedi.RvKits/ModelManager/HeadroomCheckCmd.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
using Autodesk.Revit.Attributes;
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.DB.Electrical;
|
||||
using Autodesk.Revit.DB.Mechanical;
|
||||
using Autodesk.Revit.DB.Plumbing;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External;
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
using System.Windows;
|
||||
|
||||
|
||||
namespace Szmedi.RvKits.ModelManager;
|
||||
|
||||
/// <summary>
|
||||
/// Revit执行命令
|
||||
/// </summary>
|
||||
[Transaction(TransactionMode.Manual)]
|
||||
|
||||
public class HeadroomCheckCmd : ExternalCommand
|
||||
{
|
||||
public override void Execute()
|
||||
{
|
||||
var elems = UiDocument.Selection.PickElementsByRectangle(new FuncFilter(e => e is MEPCurve, (_, _) => true)).OfType<MEPCurve>();
|
||||
var messages = new List<MessageModel>();
|
||||
double compare = 2600 / 304.8;
|
||||
foreach (var item in elems)
|
||||
{
|
||||
var level = item.ReferenceLevel;
|
||||
|
||||
if (item is Duct duct && item.get_Parameter(BuiltInParameter.RBS_DUCT_SLOPE).HasValue)
|
||||
{
|
||||
var p1 = item.get_Parameter(BuiltInParameter.RBS_OFFSET_PARAM).AsDouble();
|
||||
double subtract = default;
|
||||
switch (duct.ConnectorManager.Connectors.OfType<Connector>().FirstOrDefault().Shape)
|
||||
{
|
||||
case ConnectorProfileType.Round:
|
||||
subtract = duct.Diameter / 2;
|
||||
break;
|
||||
case ConnectorProfileType.Rectangular:
|
||||
case ConnectorProfileType.Oval:
|
||||
subtract = duct.Height / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (LessThen(p1 - subtract, compare))
|
||||
{
|
||||
MessageModel checkElement = new(item, $"参照标高:{level.Name}\r\n--------\r\n底高程:{Math.Round((p1 - subtract) * 304.8)}");
|
||||
messages.Add(checkElement);
|
||||
}
|
||||
}
|
||||
|
||||
if (item is Pipe pipe && item.get_Parameter(BuiltInParameter.RBS_PIPE_SLOPE).HasValue)
|
||||
{
|
||||
var p1 = item.get_Parameter(BuiltInParameter.RBS_OFFSET_PARAM).AsDouble();
|
||||
if (LessThen(p1 - (pipe.Diameter / 2), compare))
|
||||
{
|
||||
MessageModel checkElement = new(item, $"参照标高:{level.Name}\r\n底高程:{Math.Round((p1 - (pipe.Diameter / 2)) * 304.8)}");
|
||||
messages.Add(checkElement);
|
||||
}
|
||||
}
|
||||
|
||||
if (item is Conduit conduit || item is CableTray)
|
||||
{
|
||||
var p1 = item.get_Parameter(BuiltInParameter.RBS_START_OFFSET_PARAM).AsDouble();
|
||||
var p2 = item.get_Parameter(BuiltInParameter.RBS_END_OFFSET_PARAM).AsDouble();
|
||||
if (Math.Abs(p1 - p2) < 0.00001)
|
||||
{
|
||||
var p3 = item.get_Parameter(BuiltInParameter.RBS_CTC_BOTTOM_ELEVATION).AsDouble();
|
||||
if (LessThen(p3, compare))
|
||||
{
|
||||
MessageModel checkElement = new(item, $"参照标高:{level.Name}\r\n底高程:{Math.Round(p3 * 304.8)}");
|
||||
messages.Add(checkElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
MessageWin win = new() { DataContext = new MessageViewModel(UiDocument, messages) };
|
||||
win.Show();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.Message);
|
||||
LogAssists.WriteLog(e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
private bool LessThen(double value, double compare)
|
||||
{
|
||||
return compare > value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user