修复bug和新增部分功能
This commit is contained in:
@@ -22,6 +22,7 @@ using OfficeOpenXml;
|
||||
|
||||
using Sai.Toolkit.Revit.Helpers;
|
||||
|
||||
|
||||
namespace RvAddinTest;
|
||||
|
||||
/// <summary>
|
||||
@@ -30,258 +31,258 @@ namespace RvAddinTest;
|
||||
[ObservableObject]
|
||||
public partial class ActionWindow
|
||||
{
|
||||
public List<Customer> Customers => GetCustomers().ToList();
|
||||
public List<Customer> Customers => GetCustomers().ToList();
|
||||
|
||||
public ActionWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = this;
|
||||
}
|
||||
public ActionWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = this;
|
||||
}
|
||||
|
||||
public IEnumerable<Customer> GetCustomers()
|
||||
{
|
||||
Randomizer.Seed = new Random(123456);
|
||||
var ordergenerator = new Faker<Order>()
|
||||
.RuleFor(o => o.Id, Guid.NewGuid)
|
||||
.RuleFor(o => o.Date, f => f.Date.Past(3))
|
||||
.RuleFor(o => o.OrderValue, f => f.Finance.Amount(0, 10000))
|
||||
.RuleFor(o => o.Shipped, f => f.Random.Bool(0.9f));
|
||||
var customerGenerator = new Faker<Customer>()
|
||||
.RuleFor(c => c.Id, Guid.NewGuid())
|
||||
.RuleFor(c => c.Name, f => f.Company.CompanyName())
|
||||
.RuleFor(c => c.Address, f => f.Address.FullAddress())
|
||||
.RuleFor(c => c.City, f => f.Address.City())
|
||||
.RuleFor(c => c.Country, f => f.Address.Country())
|
||||
.RuleFor(c => c.ZipCode, f => f.Address.ZipCode())
|
||||
.RuleFor(c => c.Phone, f => f.Phone.PhoneNumber())
|
||||
.RuleFor(c => c.Email, f => f.Internet.Email())
|
||||
.RuleFor(c => c.ContactName, (f, c) => f.Name.FullName())
|
||||
.RuleFor(c => c.Orders, f => ordergenerator.Generate(f.Random.Number(10)).ToList());
|
||||
return customerGenerator.Generate(100);
|
||||
}
|
||||
public IEnumerable<Customer> GetCustomers()
|
||||
{
|
||||
Randomizer.Seed = new Random(123456);
|
||||
var ordergenerator = new Faker<Order>()
|
||||
.RuleFor(o => o.Id, Guid.NewGuid)
|
||||
.RuleFor(o => o.Date, f => f.Date.Past(3))
|
||||
.RuleFor(o => o.OrderValue, f => f.Finance.Amount(0, 10000))
|
||||
.RuleFor(o => o.Shipped, f => f.Random.Bool(0.9f));
|
||||
var customerGenerator = new Faker<Customer>()
|
||||
.RuleFor(c => c.Id, Guid.NewGuid())
|
||||
.RuleFor(c => c.Name, f => f.Company.CompanyName())
|
||||
.RuleFor(c => c.Address, f => f.Address.FullAddress())
|
||||
.RuleFor(c => c.City, f => f.Address.City())
|
||||
.RuleFor(c => c.Country, f => f.Address.Country())
|
||||
.RuleFor(c => c.ZipCode, f => f.Address.ZipCode())
|
||||
.RuleFor(c => c.Phone, f => f.Phone.PhoneNumber())
|
||||
.RuleFor(c => c.Email, f => f.Internet.Email())
|
||||
.RuleFor(c => c.ContactName, (f, c) => f.Name.FullName())
|
||||
.RuleFor(c => c.Orders, f => ordergenerator.Generate(f.Random.Number(10)).ToList());
|
||||
return customerGenerator.Generate(100);
|
||||
}
|
||||
|
||||
[ObservableProperty]
|
||||
private string code;
|
||||
[ObservableProperty]
|
||||
private string code;
|
||||
|
||||
[ObservableProperty]
|
||||
private int count;
|
||||
[ObservableProperty]
|
||||
private int count;
|
||||
|
||||
[ObservableProperty]
|
||||
private string prex;
|
||||
[ObservableProperty]
|
||||
private string prex;
|
||||
|
||||
private readonly ActionEventHandler handler = new();
|
||||
private readonly ActionEventHandler handler = new();
|
||||
|
||||
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
|
||||
{
|
||||
handler.Raise(uiapp =>
|
||||
{
|
||||
try
|
||||
{
|
||||
Element elem;
|
||||
var uidoc = uiapp.ActiveUIDocument;
|
||||
var doc = uidoc.Document;
|
||||
if (uidoc.Selection.GetElementIds().Any())
|
||||
{
|
||||
elem = doc.GetElement(uidoc.Selection.GetElementIds().FirstOrDefault());
|
||||
}
|
||||
else
|
||||
{
|
||||
var reference = uidoc.Selection.PickObject(ObjectType.Element, new GenericFilter<FamilyInstance>());
|
||||
elem = doc.GetElement(reference);
|
||||
}
|
||||
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
|
||||
{
|
||||
handler.Raise(uiapp =>
|
||||
{
|
||||
try
|
||||
{
|
||||
Element elem;
|
||||
var uidoc = uiapp.ActiveUIDocument;
|
||||
var doc = uidoc.Document;
|
||||
if (uidoc.Selection.GetElementIds().Any())
|
||||
{
|
||||
elem = doc.GetElement(uidoc.Selection.GetElementIds().FirstOrDefault());
|
||||
}
|
||||
else
|
||||
{
|
||||
var reference = uidoc.Selection.PickObject(ObjectType.Element, new GenericFilter<FamilyInstance>());
|
||||
elem = doc.GetElement(reference);
|
||||
}
|
||||
|
||||
if (!elem.IsValidObject)
|
||||
{
|
||||
return;
|
||||
}
|
||||
using var trans = new Transaction(doc, "编号填写");
|
||||
trans.Start();
|
||||
if (!elem.IsValidObject)
|
||||
{
|
||||
return;
|
||||
}
|
||||
using var trans = new Transaction(doc, "编号填写");
|
||||
trans.Start();
|
||||
|
||||
var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
var code = Convert.ToInt32(Code);
|
||||
if (Count == 1)
|
||||
{
|
||||
param?.Set($"{Prex}0{code}");
|
||||
}
|
||||
if (Count == 2)
|
||||
{
|
||||
param?.Set($"{Prex}00{code}");
|
||||
}
|
||||
trans.Commit();
|
||||
Code = $"{code + 1}";
|
||||
//trans.Start();
|
||||
var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
var code = Convert.ToInt32(Code);
|
||||
if (Count == 1)
|
||||
{
|
||||
param?.Set($"{Prex}0{code}");
|
||||
}
|
||||
if (Count == 2)
|
||||
{
|
||||
param?.Set($"{Prex}00{code}");
|
||||
}
|
||||
trans.Commit();
|
||||
Code = $"{code + 1}";
|
||||
//trans.Start();
|
||||
|
||||
//foreach (var elementId in uidoc.Selection.GetElementIds())
|
||||
//{
|
||||
// var elem = doc.GetElement(elementId);
|
||||
// var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
//foreach (var elementId in uidoc.Selection.GetElementIds())
|
||||
//{
|
||||
// var elem = doc.GetElement(elementId);
|
||||
// var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
|
||||
// param?.Set($"{Code}");
|
||||
//}
|
||||
// param?.Set($"{Code}");
|
||||
//}
|
||||
|
||||
//trans.Commit();
|
||||
}
|
||||
catch (Autodesk.Revit.Exceptions.OperationCanceledException) { }
|
||||
});
|
||||
}
|
||||
//trans.Commit();
|
||||
}
|
||||
catch (Autodesk.Revit.Exceptions.OperationCanceledException) { }
|
||||
});
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void BrowserExcelFile()
|
||||
{
|
||||
OpenFileDialog dialog =
|
||||
new()
|
||||
{
|
||||
CheckFileExists = true,
|
||||
Filter = "Excel文件|*.xlsx",
|
||||
Multiselect = false,
|
||||
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
|
||||
};
|
||||
if (dialog.ShowDialog() != true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
ReadExcel(dialog.FileName);
|
||||
}
|
||||
[RelayCommand]
|
||||
private void BrowserExcelFile()
|
||||
{
|
||||
OpenFileDialog dialog =
|
||||
new()
|
||||
{
|
||||
CheckFileExists = true,
|
||||
Filter = "Excel文件|*.xlsx",
|
||||
Multiselect = false,
|
||||
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
|
||||
};
|
||||
if (dialog.ShowDialog() != true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
ReadExcel(dialog.FileName);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ExportExcelFile()
|
||||
{
|
||||
handler.Raise(uiapp =>
|
||||
{
|
||||
StringBuilder sb = new();
|
||||
var n = 0;
|
||||
var doc = uiapp.ActiveUIDocument.Document;
|
||||
var elems = new FilteredElementCollector(doc)
|
||||
.OfCategory(BuiltInCategory.OST_SecurityDevices)
|
||||
.WhereElementIsNotElementType()
|
||||
.OfType<FamilyInstance>();
|
||||
foreach (var elem in elems)
|
||||
{
|
||||
if (!elem.Symbol.FamilyName.Contains("摄像"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
[RelayCommand]
|
||||
private void ExportExcelFile()
|
||||
{
|
||||
handler.Raise(uiapp =>
|
||||
{
|
||||
StringBuilder sb = new();
|
||||
var n = 0;
|
||||
var doc = uiapp.ActiveUIDocument.Document;
|
||||
var elems = new FilteredElementCollector(doc)
|
||||
.OfCategory(BuiltInCategory.OST_SecurityDevices)
|
||||
.WhereElementIsNotElementType()
|
||||
.OfType<FamilyInstance>();
|
||||
foreach (var elem in elems)
|
||||
{
|
||||
if (!elem.Symbol.FamilyName.Contains("摄像"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER);
|
||||
sb.AppendLine($"{elem.Name}--{elem.Id}--{param.AsString()}--{param1.AsString()}");
|
||||
n++;
|
||||
}
|
||||
sb.AppendLine($"合计{n}个");
|
||||
var filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\导出结果.txt";
|
||||
File.WriteAllText(filePath, sb.ToString());
|
||||
Process.Start(filePath);
|
||||
});
|
||||
}
|
||||
var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER);
|
||||
sb.AppendLine($"{elem.Name}--{elem.Id}--{param.AsString()}--{param1.AsString()}");
|
||||
n++;
|
||||
}
|
||||
sb.AppendLine($"合计{n}个");
|
||||
var filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\导出结果.txt";
|
||||
File.WriteAllText(filePath, sb.ToString());
|
||||
Process.Start(filePath);
|
||||
});
|
||||
}
|
||||
|
||||
private void ReadExcel(string path)
|
||||
{
|
||||
FileInfo fi = new(path);
|
||||
using ExcelPackage package = new(fi);
|
||||
var worksheet = package.Workbook.Worksheets[1];
|
||||
////获取worksheet的行数
|
||||
//int rows = worksheet .Dimension.End.Row;
|
||||
////获取worksheet的列数
|
||||
//int cols = worksheet .Dimension.End.Column;
|
||||
//worksheet.TrimLastEmptyRows();
|
||||
private void ReadExcel(string path)
|
||||
{
|
||||
FileInfo fi = new(path);
|
||||
using ExcelPackage package = new(fi);
|
||||
var worksheet = package.Workbook.Worksheets[1];
|
||||
////获取worksheet的行数
|
||||
//int rows = worksheet .Dimension.End.Row;
|
||||
////获取worksheet的列数
|
||||
//int cols = worksheet .Dimension.End.Column;
|
||||
//worksheet.TrimLastEmptyRows();
|
||||
|
||||
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
|
||||
try
|
||||
{
|
||||
var items = package.ToList<CodeItem>(1, configuration => configuration.SkipCastingErrors());
|
||||
handler.Raise(uiapp =>
|
||||
{
|
||||
var doc = uiapp.ActiveUIDocument.Document;
|
||||
var elems = new FilteredElementCollector(doc)
|
||||
.OfCategory(BuiltInCategory.OST_SecurityDevices)
|
||||
.WhereElementIsNotElementType();
|
||||
StringBuilder sb = new();
|
||||
using var trans = new Transaction(doc, "替换字段");
|
||||
trans.Start();
|
||||
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
|
||||
try
|
||||
{
|
||||
var items = package.ToList<CodeItem>(1, configuration => configuration.SkipCastingErrors());
|
||||
handler.Raise(uiapp =>
|
||||
{
|
||||
var doc = uiapp.ActiveUIDocument.Document;
|
||||
var elems = new FilteredElementCollector(doc)
|
||||
.OfCategory(BuiltInCategory.OST_SecurityDevices)
|
||||
.WhereElementIsNotElementType();
|
||||
StringBuilder sb = new();
|
||||
using var trans = new Transaction(doc, "替换字段");
|
||||
trans.Start();
|
||||
|
||||
foreach (var elem in elems)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
if (param?.HasValue != true)
|
||||
{
|
||||
sb.AppendLine(elem.Id.ToString());
|
||||
}
|
||||
var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER);
|
||||
if (param.AsString() == item.Origin)
|
||||
{
|
||||
param1.Set($"{item.Target}");
|
||||
}
|
||||
}
|
||||
}
|
||||
trans.Commit();
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
System.Windows.MessageBox.Show(sb.ToString());
|
||||
}
|
||||
});
|
||||
foreach (var elem in elems)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
|
||||
if (param?.HasValue != true)
|
||||
{
|
||||
sb.AppendLine(elem.Id.ToString());
|
||||
}
|
||||
var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER);
|
||||
if (param.AsString() == item.Origin)
|
||||
{
|
||||
param1.Set($"{item.Target}");
|
||||
}
|
||||
}
|
||||
}
|
||||
trans.Commit();
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
System.Windows.MessageBox.Show(sb.ToString());
|
||||
}
|
||||
});
|
||||
|
||||
//foreach (ParamterModel eamFacility in Items) { }
|
||||
//foreach (ParamterModel eamFacility in Items) { }
|
||||
|
||||
//var groups = Facilities .GroupBy(x => x.Story);
|
||||
//foreach (var group in groups)
|
||||
//{
|
||||
// if (group .Key == null)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// StoryCodeMappers .Add(new() { Story = group.Key, });
|
||||
//}
|
||||
//var groups = Facilities .GroupBy(x => x.Story);
|
||||
//foreach (var group in groups)
|
||||
//{
|
||||
// if (group .Key == null)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// StoryCodeMappers .Add(new() { Story = group.Key, });
|
||||
//}
|
||||
|
||||
//IsMapper = false;
|
||||
//IsComparison = false;
|
||||
//Instances .ForEach(ins => ins.IsMapped = false);
|
||||
}
|
||||
catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException)
|
||||
{
|
||||
System.Windows.MessageBox.Show("列名不存在或不匹配或检查表头是否存在换行。");
|
||||
}
|
||||
finally
|
||||
{
|
||||
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomainOnAssemblyResolve;
|
||||
}
|
||||
}
|
||||
//IsMapper = false;
|
||||
//IsComparison = false;
|
||||
//Instances .ForEach(ins => ins.IsMapped = false);
|
||||
}
|
||||
catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException)
|
||||
{
|
||||
System.Windows.MessageBox.Show("列名不存在或不匹配或检查表头是否存在换行。");
|
||||
}
|
||||
finally
|
||||
{
|
||||
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomainOnAssemblyResolve;
|
||||
}
|
||||
}
|
||||
|
||||
private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
|
||||
{
|
||||
if (!args.Name.Contains("ComponentModel.Annotations"))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
|
||||
{
|
||||
if (!args.Name.Contains("ComponentModel.Annotations"))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var assemblyFile = Path.Combine(
|
||||
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
|
||||
"System.ComponentModel.Annotations.dll"
|
||||
);
|
||||
return File.Exists(assemblyFile) ? Assembly.LoadFrom(assemblyFile) : null;
|
||||
}
|
||||
var assemblyFile = Path.Combine(
|
||||
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
|
||||
"System.ComponentModel.Annotations.dll"
|
||||
);
|
||||
return File.Exists(assemblyFile) ? Assembly.LoadFrom(assemblyFile) : null;
|
||||
}
|
||||
}
|
||||
|
||||
public class Customer
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string City { get; set; }
|
||||
public string Country { get; set; }
|
||||
public string ZipCode { get; set; }
|
||||
public string Phone { get; set; }
|
||||
public string Email { get; set; }
|
||||
public string ContactName { get; set; }
|
||||
public IEnumerable<Order> Orders { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string City { get; set; }
|
||||
public string Country { get; set; }
|
||||
public string ZipCode { get; set; }
|
||||
public string Phone { get; set; }
|
||||
public string Email { get; set; }
|
||||
public string ContactName { get; set; }
|
||||
public IEnumerable<Order> Orders { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class Order
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public Decimal OrderValue { get; set; }
|
||||
public bool Shipped { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public decimal OrderValue { get; set; }
|
||||
public bool Shipped { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Autodesk.Revit.Attributes;
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.DB.Plumbing;
|
||||
using Autodesk.Revit.UI;
|
||||
|
||||
namespace RvAddinTest
|
||||
@@ -19,22 +14,18 @@ namespace RvAddinTest
|
||||
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
||||
{
|
||||
//程序UI界面
|
||||
UIApplication uiapp = commandData.Application;
|
||||
var uiapp = commandData.Application;
|
||||
//获取元素(选择) 显示元素 视图(活动视图)管理(对象)
|
||||
UIDocument uidoc = uiapp.ActiveUIDocument;
|
||||
//程序
|
||||
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
|
||||
var uidoc = uiapp.ActiveUIDocument;
|
||||
//获取位置和场地 视图(多个视图)管理 获取元素(Revit 项目里的全部元素)
|
||||
Document doc = uidoc.Document;
|
||||
//获取所有打开文档
|
||||
DocumentSet docset = uiapp.Application.Documents;
|
||||
var doc = uidoc.Document;
|
||||
//当前视图
|
||||
View view = doc.ActiveView;
|
||||
List<Element> collector = new FilteredElementCollector(doc, view.Id)
|
||||
var view = doc.ActiveView;
|
||||
var collector = new FilteredElementCollector(doc, view.Id)
|
||||
.OfClass(typeof(MEPCurve))
|
||||
.WhereElementIsNotElementType().ToList();
|
||||
// 检查管线之间的碰撞
|
||||
List<Tuple<Element, Element>> collisions = CheckPipeCollisionsParallel(doc, collector);
|
||||
var collisions = CheckPipeCollisionsParallel(doc, collector);
|
||||
|
||||
// 显示碰撞结果
|
||||
ShowCollisionResults(collisions);
|
||||
@@ -42,18 +33,18 @@ namespace RvAddinTest
|
||||
}
|
||||
public List<Tuple<Element, Element>> CheckPipeCollisionsParallel(Document doc, List<Element> pipes)
|
||||
{
|
||||
List<Tuple<Element, Element>> collisions = new List<Tuple<Element, Element>>();
|
||||
var collisions = new List<Tuple<Element, Element>>();
|
||||
// 使用 Parallel.For 并行检查碰撞
|
||||
Parallel.For(0, pipes.Count, i =>
|
||||
{
|
||||
for (int j = i + 1; j < pipes.Count; j++)
|
||||
for (var j = i + 1; j < pipes.Count; j++)
|
||||
{
|
||||
Element pipe1 = pipes[i];
|
||||
Element pipe2 = pipes[j];
|
||||
var pipe1 = pipes[i];
|
||||
var pipe2 = pipes[j];
|
||||
|
||||
// 使用 ElementIntersectsElementFilter 检查碰撞
|
||||
ElementIntersectsElementFilter filter = new ElementIntersectsElementFilter(pipe1);
|
||||
FilteredElementCollector collector = new FilteredElementCollector(doc, new ElementId[] { pipe2.Id });
|
||||
var filter = new ElementIntersectsElementFilter(pipe1);
|
||||
var collector = new FilteredElementCollector(doc, [pipe2.Id]);
|
||||
collector.WherePasses(filter);
|
||||
|
||||
if (collector.Any())
|
||||
@@ -77,9 +68,9 @@ namespace RvAddinTest
|
||||
}
|
||||
else
|
||||
{
|
||||
StringBuilder message = new StringBuilder();
|
||||
var message = new StringBuilder();
|
||||
message.AppendLine("发现碰撞:");
|
||||
foreach (Tuple<Element, Element> collision in collisions)
|
||||
foreach (var collision in collisions)
|
||||
{
|
||||
message.AppendLine($"管线 {collision.Item1.Id} 与管线 {collision.Item2.Id} 发生碰撞");
|
||||
}
|
||||
@@ -90,10 +81,10 @@ namespace RvAddinTest
|
||||
public void ExportCollisionResultsToFile(string content)
|
||||
{
|
||||
// 获取桌面路径
|
||||
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
||||
var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
||||
|
||||
// 创建文件路径
|
||||
string filePath = Path.Combine(desktopPath, "碰撞检查.txt");
|
||||
var filePath = Path.Combine(desktopPath, "碰撞检查.txt");
|
||||
|
||||
// 写入文件
|
||||
File.WriteAllText(filePath, content);
|
||||
|
||||
@@ -45,14 +45,14 @@ internal class FluentAddin : ExternalCommand
|
||||
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 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);
|
||||
File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
|
||||
doc.Close(false);
|
||||
}
|
||||
//Document.Modify(set => set.Transaction)
|
||||
|
||||
@@ -127,7 +127,7 @@ public class RevitAddin : ExternalCommand
|
||||
{
|
||||
try
|
||||
{
|
||||
var reference = UiDocument.Selection.PickObject(ObjectType.PointOnElement, new DwgBlockSelection(), "请选择dwg块");
|
||||
var reference = UiDocument.Selection.PickObject(ObjectType.PointOnElement, new DwgBlockSelection(), "请选择dwg链接的块参照");
|
||||
var dwg = Document.GetElement(reference) as ImportInstance;
|
||||
var dwgTransform = dwg!.GetTotalTransform();
|
||||
|
||||
|
||||
@@ -21,19 +21,24 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Bogus" Version="35.5.1" />
|
||||
<PackageReference Include="EleCho.WpfSuite.FluentDesign" Version="0.0.1" />
|
||||
<PackageReference Include="iNKORE.UI.WPF.Modern" Version="0.9.30" />
|
||||
<PackageReference Include="LiteDB" Version="5.0.21" />
|
||||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.122" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.Adwindows" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.UIFramework" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.RevitAPI" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.Adwindows" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.UIFramework" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.RevitAPI" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.RevitAPIUI" Version="2018.*" PrivateAssets="All" />
|
||||
<PackageReference Include="Nice3point.Revit.Api.UIFrameworkServices" Version="2020.2.60" PrivateAssets="All" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1" />
|
||||
<PackageReference Include="CommunityToolkit.Common" Version="8.3.2" />
|
||||
<PackageReference Include="CommunityToolkit.Diagnostics" Version="8.3.2" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
|
||||
<PackageReference Include="EPPlus.Core.Extensions" Version="2.4.0" />
|
||||
<PackageReference Include="JerryShaw.AduSkin" Version="1.1.1.11" />
|
||||
<PackageReference Include="Nice3point.Revit.Toolkit" Version="2019.0.12" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\Sai.Toolkit.Revit\Sai.Toolkit.Revit.projitems" Label="Shared" />
|
||||
<Import Project="..\Sai.Toolkit.Core\Sai.Toolkit.Core.projitems" Label="Shared" />
|
||||
|
||||
<!--<Target Name="PreventRevitSDKCopyLocal" AfterTargets="ResolveReferences">
|
||||
<ItemGroup>
|
||||
@@ -41,8 +46,4 @@
|
||||
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'Autodesk.Revit.SDK'" />
|
||||
</ItemGroup>
|
||||
</Target>-->
|
||||
|
||||
<Import Project="..\Sai.Toolkit.Revit\Sai.Toolkit.Revit.projitems" Label="Shared" />
|
||||
|
||||
<Import Project="..\Sai.Toolkit.Core\Sai.Toolkit.Core.projitems" Label="Shared" />
|
||||
</Project>
|
||||
64
RvAddinTest/TestGDI.cs
Normal file
64
RvAddinTest/TestGDI.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System.Drawing;
|
||||
using System.Timers;
|
||||
|
||||
using Autodesk.Revit.Attributes;
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.UI;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External;
|
||||
|
||||
using Sai.Toolkit.Core.Helpers;
|
||||
|
||||
namespace RvAddinTest;
|
||||
|
||||
[Transaction(TransactionMode.Manual)]
|
||||
[Regeneration(RegenerationOption.Manual)]
|
||||
public class TestGDI : ExternalCommand
|
||||
{
|
||||
private UIView ui;
|
||||
/// <summary>
|
||||
/// 设置项目基点
|
||||
/// </summary>
|
||||
/// <param name="position"></param>
|
||||
private void SetProjectPosition(XYZ position)
|
||||
{
|
||||
using Transaction trans = new(Document);
|
||||
trans.Start("设置项目基点");
|
||||
XYZ p = new();
|
||||
|
||||
ProjectPosition pp = new(position.X, position.Y, position.Z, 0);
|
||||
//设置项目基点
|
||||
|
||||
Document.ActiveProjectLocation.SetProjectPosition(p, pp);
|
||||
trans.Commit();
|
||||
}
|
||||
public override void Execute()
|
||||
{
|
||||
|
||||
ui = UiDocument.GetOpenUIViews().FirstOrDefault(uiView => uiView.ViewId == UiDocument.ActiveView.Id);
|
||||
|
||||
var corners = ui.GetZoomCorners();
|
||||
//var inptr = HookInptr.FindWindow(null, view.Name);
|
||||
//Graphics graphics = Graphics.FromHwnd(inptr);
|
||||
|
||||
//graphics.RenderingOrigin=
|
||||
//Graphics graphics = Graphics.FromHwnd(System.Diagnostics.Process.GetCurrentProcess().Handle);
|
||||
System.Timers.Timer timer =
|
||||
new(2000)
|
||||
{
|
||||
Interval = 500,
|
||||
Enabled = true
|
||||
//AutoReset = true
|
||||
};
|
||||
timer.Elapsed += Timer_Elapsed;
|
||||
}
|
||||
|
||||
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
var rectangle = ui.GetWindowRectangle(); //屏幕坐标;原点在右上角
|
||||
var graphics = Graphics.FromHwnd(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);
|
||||
var p = new System.Drawing.Point(rectangle.Left + 1920, rectangle.Top);
|
||||
var p1 = new System.Drawing.Point(rectangle.Right + 1920, rectangle.Bottom);
|
||||
GdiHelper.DrawLine(graphics, p, p1);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user