Files
Shrlalgo.RvKits/RvAddinTest/FluentAddin.cs

317 lines
12 KiB
C#
Raw Normal View History

2024-09-22 11:05:41 +08:00

using System.Diagnostics;
using System.IO;
using System.Management.Instrumentation;
using System.Text;
2024-12-22 10:26:12 +08:00
using System.Windows;
2024-09-22 11:05:41 +08:00
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Mechanical;
2024-12-22 10:26:12 +08:00
using Autodesk.Revit.DB.Plumbing;
2024-09-22 11:05:41 +08:00
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
2024-12-22 10:26:12 +08:00
using eTransmitForRevitDB;
2024-09-22 11:05:41 +08:00
using Microsoft.Win32;
using Nice3point.Revit.Toolkit.External;
using Nice3point.Revit.Toolkit.Utils;
2024-12-22 10:26:12 +08:00
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
2024-09-22 11:05:41 +08:00
using Sai.Toolkit.Revit.Assist;
using Sai.Toolkit.Revit.Helpers;
namespace RvAddinTest;
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
internal class FluentAddin : ExternalCommand
{
2024-12-22 10:26:12 +08:00
public static bool Purge(Document doc)
{
var eTransmitUpgradeOMatic = new eTransmitUpgradeOMatic(doc.Application);
var result = eTransmitUpgradeOMatic.purgeUnused(doc);
return result == UpgradeFailureType.UpgradeSucceeded;
}
2024-09-22 11:05:41 +08:00
public override void Execute()
{
2024-12-22 10:26:12 +08:00
//var elemIds = Document.OfAllModelElements().Select(e=>e.Id).ToList();
//UiDocument.Selection.SetElementIds(elemIds);
var refer=UiDocument.Selection.PickObject(ObjectType.Element);
var elem=Document.GetElement(refer);
var conn=elem.GetConnectors().Cast<Connector>().Where(c=>c.IsConnected).FirstOrDefault();
var connto = conn.GetConnectedConnector();
Debug.WriteLine("管线:");
Debug.WriteLine(conn.CoordinateSystem.BasisX);
Debug.WriteLine(conn.CoordinateSystem.BasisY);
Debug.WriteLine(conn.CoordinateSystem.BasisZ);
Debug.WriteLine("管件:");
Debug.WriteLine(connto.CoordinateSystem.BasisX);
Debug.WriteLine(connto.CoordinateSystem.BasisY);
Debug.WriteLine(connto.CoordinateSystem.BasisZ);
//StringBuilder sb = new StringBuilder();
//var n = 1;
//foreach (var item in elems)
//{
// sb.Append(n +":"+ item.Name + item.Id.ToString()+"new");
// n++;
//}
//MessageBox.Show(sb.ToString());
//StringBuilder sb = new();
//var regions = Document.OfCollector().OfCategory(BuiltInCategory.OST_DetailComponents).WhereElementIsNotElementType().ToList();
//sb.AppendLine(regions.Count.ToString());
//regions.ToList().ForEach(f => sb.AppendLine($"{f.Id}"));
//MessageBox.Show(sb.ToString());
//UiDocument.Selection.SetElementIds(elements);
#region MyRegion
//OpenFileDialog openFileDialog = new OpenFileDialog() { Multiselect = true, Filter = "Revit文件|*.rvt" };
//if (openFileDialog.ShowDialog() == false)
//{
// return;
//};
//foreach (var file in openFileDialog.FileNames)
//{
// var doc = UiApplication.Application.OpenDocumentFile(file);
// var options = new SaveAsOptions()
// {
// Compact = true,
// OverwriteExistingFile = true,
// MaximumBackups = 3,
// };
// try
// {
// var ids = doc.OfCollector().OfCategory(BuiltInCategory.OST_Lines).Select(e => e.Id).ToList();
// doc.Modify(set => set.Transaction)
// .Commit(
// (doc, t) =>
// {
// doc.Delete(ids);
// });
// for (var i = 0; i < 5; i++)
// {
// Purge(doc);
// }
// //doc.SaveAs(file, options);
// doc.Close(true);
// }
// catch (Exception)
// {
// doc.Close();
// }
//}
//MessageBox.Show("处理完成");
#endregion
2024-09-22 11:05:41 +08:00
//var b = Document.ActiveView.ViewTemplateId == null;
//MessageExtensions.ShowMessage(b.ToString());
//var h = Document.ActiveView
// .OfClass<Duct>()
// .Cast<Duct>()
// .Where(
// d =>
// d.ConnectorManager.Connectors.OfType<Connector>().FirstOrDefault().Shape
// != ConnectorProfileType.Round
// )
// .Max(d => d.Height);
//Document.Invoke
2024-12-22 10:26:12 +08:00
#region RegionName
//OpenFileDialog dialog = new() { Filter = "Revit(*.rvt)|*.rvt", Multiselect = true };
//dialog.ShowDialog();
//foreach (var item in dialog.FileNames)
//{
// var sb = new StringBuilder();
// sb.AppendLine($"元素ID,族名称,类型名称,标记,");
// var doc = Application.OpenDocumentFile(item);
// var instances = doc.OfCollector().OfClass(typeof(FamilyInstance)).Cast<FamilyInstance>().Where(e => e.Symbol.FamilyName.Contains("摄像头"));
// foreach (var instance in instances)
// {
// var number = instance.get_Parameter(BuiltInParameter.DOOR_NUMBER);
// sb.AppendLine($"{instance.Id},{instance.Symbol.FamilyName},{instance.Name},{number.AsString()},");
// }
// var filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $"\\{doc.Title}.txt";
// File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
// doc.Close(false);
//}
#endregion
2024-09-22 11:05:41 +08:00
//Document.Modify(set => set.Transaction)
// .Commit(
// (doc, t) =>
// {
// #region MyRegion
// //var refer = UiDocument.Selection.PickObject(ObjectType.Element, new FuncFilter(e => e is DirectShape), "选择模型");
// //var shape = doc.GetElement(refer) as DirectShape;
// //shape.SetName("轨道");
// #endregion
// //var refer = UiDocument.Selection.PickObject(ObjectType.Element, new FuncFilter(e => e is ImportInstance importInstance), "请选择dwg实例");
// //var importInstance = doc.GetElement(refer) as ImportInstance;
// //ConvertToMassCurve(importInstance);
// });
//DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Transform.Origin));
//DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Min));
//DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Max));
//var mepCurve = UiDocument.SelectObject<MEPCurve>();
//if (mepCurve != null)
//{
// var list = new List<ElementId>();
// mepCurve.GetAllConnectedElements(list);
// UiDocument.Selection.SetElementIds(list);
//}
}
private void GetDiffSystemFittings()
{
var elbows = Document.OfClass<FamilyInstance>()
.OfCategory(BuiltInCategory.OST_PipeFitting)
.Cast<FamilyInstance>()
.Where(fi => fi.MEPModel is MechanicalFitting fitting && fitting.PartType == PartType.Elbow);
var elementId = ElementId.InvalidElementId;
foreach (var elbow in elbows)
{
if (elbow.Id.IntegerValue == 9437638)
{
}
try
{
var connectors = elbow.GetConnectors();
var connector1 = connectors.OfType<Connector>().ElementAt(0);
var connector2 = connectors.OfType<Connector>().ElementAt(1);
var system1 = connector1.AllRefs.OfType<Connector>().FirstOrDefault(c => c.Owner.Id != elbow.Id).MEPSystem;
var system2 = connector2.AllRefs.OfType<Connector>().FirstOrDefault(c => c.Owner.Id != elbow.Id).MEPSystem;
//MEPSystem tempSystem = null;
//foreach (Connector conn in connectors)
//{
// foreach (Connector item in conn.AllRefs)
// {
// if (tempSystem==null)
// {
// tempSystem = item.MEPSystem;
// continue;
// }
// if (tempSystem==item.MEPSystem)
// {
// continue;
// }
// if (tempSystem.Name)
// {
// }
// }
//}
if (system1.Name != system2.Name)
{
elementId = elbow.Id;
break;
}
}
catch (Exception)
{
//MessageBox.Show(elbow.Id.ToString());
continue;
}
}
if (elementId != ElementId.InvalidElementId)
{
UiDocument.Selection.SetElementIds([elementId]);
}
}
private void ModifyName()
{
Document.Modify(set => set.Transaction)
.Commit(
(d, t) =>
{
//var point = Point.Create(new XYZ(10,10,10), new ElementId(1236));
//Document.CreateTransientGeometries([point]);
var fittings = Document
.OfClass<FamilySymbol>()
.WhereElementIsElementType().Cast<FamilySymbol>();
//var fittings = Document.OfCollector()
// .OfCategory(BuiltInCategory.OST_DuctFitting)
// .WhereElementIsElementType().Cast<FamilySymbol>();
foreach (var item in fittings)
{
//point=Point.Create(XYZ.BasisX);
//if (item.Name.StartsWith("DN"))
//{
// item.Name = item.FamilyName + "-" + item.Name;
//}
if (item.Name == "标准")
{
item.Name = item.FamilyName;
}
//try
//{
// item.get_Parameter(BuiltInParameter.ALL_MODEL_URL).Set("");
// item.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).Set("");
//}
//catch (Exception)
//{
// MessageBox.Show(item.Name);
//}
}
});
}
private void CableTrayCheck()
{
//var list = Document.OfClass<CableTray>().Cast<CableTray>().ToList();
var list = Document.OfCollector().OfCategory(BuiltInCategory.OST_CableTrayFitting).WhereElementIsNotElementType().ToList();
var ids = new List<ElementId>();
foreach (var item in list)
{
var elem = Document.GetElement(item.GetTypeId());
var value = item.get_Parameter(BuiltInParameter.RBS_CTC_SERVICE_TYPE).AsString();
if (string.IsNullOrEmpty(value))
{
ids.Add(item.Id);
continue;
}
if (elem.Name.Contains(value))
{
continue;
}
ids.Add(item.Id);
}
UiDocument.Selection.SetElementIds(ids);
}
private void SlopeCheck()
{
var mepCurves = ActiveView.OfClass<MEPCurve>();
var ids = new List<ElementId>();
foreach (var mepCurve in mepCurves)
{
var p1 = mepCurve.get_Parameter(BuiltInParameter.RBS_START_OFFSET_PARAM).AsDouble();
var p2 = mepCurve.get_Parameter(BuiltInParameter.RBS_END_OFFSET_PARAM).AsDouble();
var l = mepCurve.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();
var sin = Math.Abs(p1 - p2) / l;
var radian = Math.Asin(sin);
var slope = Math.Tan(radian);
var isError = slope is (> 10E-6 and < 0.25) || (slope > Math.PI && Math.Abs(radian - Math.PI / 2) > 10E-6);
if (isError)
{
Debug.WriteLine($"角度:{radian}");
Debug.WriteLine($"坡度:{slope}");
ids.Add(mepCurve.Id);
}
}
UiDocument.Selection.SetElementIds(ids);
}
}