功能更新
This commit is contained in:
@@ -12,255 +12,14 @@ using EPPlus.Core.Extensions;
|
||||
using Nice3point.Revit.Toolkit.External;
|
||||
using Nice3point.Revit.Toolkit.Utils;
|
||||
|
||||
using OfficeOpenXml;
|
||||
|
||||
using RevitAddins;
|
||||
|
||||
using Szmedi.RvKits.Mvvm.Attributes;
|
||||
|
||||
namespace Szmedi.Test
|
||||
{
|
||||
[Transaction(TransactionMode.Manual)]
|
||||
[Regeneration(RegenerationOption.Manual)]
|
||||
[ShortcutRep("TEST")]
|
||||
public class TestCmd : ExternalCommand
|
||||
{
|
||||
//一个判断两条模型线是否平行的方法
|
||||
/// <summary>
|
||||
/// 扩展包围盒的大小
|
||||
/// </summary>
|
||||
/// <param name="boundingBox"></param>
|
||||
/// <param name="distance"></param>
|
||||
/// <returns></returns>
|
||||
public static BoundingBoxXYZ Extend(BoundingBoxXYZ boundingBox, double distance = 2.0)
|
||||
{
|
||||
var transform = boundingBox.Transform;
|
||||
var max = boundingBox.Max + (distance * (transform.BasisX + transform.BasisY + transform.BasisZ));
|
||||
var min = boundingBox.Min - (distance * (transform.BasisX + transform.BasisY + transform.BasisZ));
|
||||
return new BoundingBoxXYZ { Max = max, Min = min, Transform = transform };
|
||||
}
|
||||
|
||||
// 合法化 Sheet 名称
|
||||
private string MakeValidSheetName(string name)
|
||||
{
|
||||
var invalid = new[] { '\\', '/', '*', '[', ']', ':', '?' };
|
||||
foreach (var ch in invalid)
|
||||
{
|
||||
name = name.Replace(ch, '_');
|
||||
}
|
||||
|
||||
return name.Length > 31 ? name.Substring(0, 31) : name;
|
||||
}
|
||||
|
||||
private void NewMethod(IEnumerable<IGrouping<string, ElementModel>> groupedModels)
|
||||
{
|
||||
using (var pkg = new ExcelPackage())
|
||||
{
|
||||
//深圳构件标识
|
||||
foreach (var g in groupedModels)
|
||||
{
|
||||
var sheetName = MakeValidSheetName(g.Key);
|
||||
|
||||
var ws = pkg.Workbook.Worksheets.Add(sheetName);
|
||||
//第一行
|
||||
ws.Cells[1, 1].Value = g.Key;
|
||||
var columns = g.Sum(m => m.Count);
|
||||
//合并单元格
|
||||
ws.Cells[1, 1, 1, columns].Merge = true;
|
||||
ws.Cells[1, 1].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
|
||||
ws.Cells[1, 1].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
|
||||
ws.Cells[1, 1].Style.Font.Size = 20;
|
||||
ws.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 255, 0));
|
||||
ws.Cells[1, 1].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin);
|
||||
var currentColumns = 1;
|
||||
var models = g.ToList();
|
||||
foreach (var m in models)
|
||||
{
|
||||
var subColumns = m.Count;
|
||||
//第二行
|
||||
ws.Cells[2, currentColumns, 2, subColumns].Merge = true;
|
||||
|
||||
//合并单元格
|
||||
ws.Cells[2, currentColumns].Value = models.FirstOrDefault().Groups.Keys;
|
||||
|
||||
currentColumns += 1 + subColumns;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsParallel(Line line1, Line line2)
|
||||
{
|
||||
return line1.Direction.IsAlmostEqualTo(line2.Direction) ||
|
||||
line1.Direction.IsAlmostEqualTo(-line2.Direction);
|
||||
}
|
||||
//private bool IsConnectToSystem(FamilyInstance ins)
|
||||
//{
|
||||
// bool hasConnectToSystem = false;
|
||||
// if (ins.Category.CategoryType != CategoryType.FacilityNumber)
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// if (ins.get_BoundingBox(null) != null &&
|
||||
// ins.MEPModel?.ConnectorManager != null)
|
||||
// {
|
||||
// var cons = ins.GetConnectors(false);
|
||||
|
||||
// foreach (Connector con in cons)
|
||||
// {
|
||||
// if (con.Domain != Domain.DomainElectrical && con.Domain != Domain.DomainUndefined)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// if (con.IsConnected)
|
||||
// {
|
||||
// hasConnectToSystem = true;
|
||||
// }
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return hasConnectToSystem;
|
||||
|
||||
//}
|
||||
|
||||
public List<Family> GetUsedFamilies(Document doc)
|
||||
{
|
||||
// 获取所有实例元素(这里不需要由ToElements()转化全部对象,节省内存,仅遍历)
|
||||
var instances = doc.OfClass<FamilyInstance>();
|
||||
|
||||
// 3. 收集所有被使用的“类型ID” (使用HashSet自动去重)
|
||||
HashSet<ElementId> usedTypeIds = new HashSet<ElementId>();
|
||||
|
||||
foreach (Element elem in instances)
|
||||
{
|
||||
ElementId typeId = elem.GetTypeId();
|
||||
if (typeId != ElementId.InvalidElementId)
|
||||
{
|
||||
usedTypeIds.Add(typeId);
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 从类型反向获取族 (使用HashSet再次去重族ID,防止多个类型属于同一个族)
|
||||
HashSet<ElementId> usedFamilyIds = new HashSet<ElementId>();
|
||||
List<Family> resultFamilies = new List<Family>();
|
||||
|
||||
foreach (ElementId typeId in usedTypeIds)
|
||||
{
|
||||
// 获取类型元素 (FamilySymbol)
|
||||
Element typeElem = doc.GetElement(typeId);
|
||||
FamilySymbol symbol = typeElem as FamilySymbol;
|
||||
|
||||
if (symbol != null)
|
||||
{
|
||||
Family family = symbol.Family;
|
||||
|
||||
// 确保族存在且未被添加过
|
||||
if (family != null && !usedFamilyIds.Contains(family.Id))
|
||||
{
|
||||
usedFamilyIds.Add(family.Id);
|
||||
resultFamilies.Add(family);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resultFamilies;
|
||||
}
|
||||
public static void ToExcel(string excelPath, List<TestExcel> infos)
|
||||
{
|
||||
FileInfo fi = new(excelPath);
|
||||
ExcelPackage package = infos.ToWorksheet("构件数量变动对比表")
|
||||
.WithConfiguration(cfg => cfg.WithColumnConfiguration(c => c.AutoFit()))
|
||||
.ToExcelPackage();
|
||||
|
||||
package.SaveAs(fi);
|
||||
}
|
||||
public override void Execute()
|
||||
{
|
||||
//var parameter = Document.FamilyManager.GetParameters().FirstOrDefault(p => p.Definition.Name == "额定电流");
|
||||
//Document.Invoke(
|
||||
// ts =>
|
||||
// {
|
||||
// Document.FamilyManager.ReplaceParameter(parameter, "测试", BuiltInParameterGroup.PG_TEXT, true);
|
||||
// });
|
||||
var docs = Application.Documents;
|
||||
if (docs.Size != 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var doc1 = docs.OfType<Document>().First();
|
||||
var doc2 = docs.OfType<Document>().Last();
|
||||
var elements1 = doc1.OfCollector().WhereElementIsNotElementType().Where(e => e.Category?.CategoryType == CategoryType.Model && e.get_BoundingBox(null) != null);
|
||||
var elements2 = doc2.OfCollector().WhereElementIsNotElementType().Where(e => e.Category?.CategoryType == CategoryType.Model && e.get_BoundingBox(null) != null);
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
foreach (var e1 in elements1)
|
||||
{
|
||||
foreach (var e2 in elements2)
|
||||
{
|
||||
if (e1.Id.IntegerValue == e2.Id.IntegerValue)
|
||||
{
|
||||
stringBuilder.Append($"重复图元:{e1.Id};");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MessageBox.Show(stringBuilder.ToString());
|
||||
return;
|
||||
var doc = Document;
|
||||
if (doc.IsFamilyDocument)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var familyCollector = new FilteredElementCollector(doc)
|
||||
.OfClass(typeof(Family))
|
||||
.Cast<Family>()
|
||||
.ToList();
|
||||
MessageBox.Show(familyCollector.Count().ToString());
|
||||
|
||||
var fams = GetUsedFamilies(doc)
|
||||
.Cast<Family>()
|
||||
.Where(
|
||||
fam => fam.FamilyCategory.AllowsBoundParameters &&
|
||||
fam.IsEditable &&
|
||||
fam.FamilyCategory.CategoryType == CategoryType.Model &&
|
||||
!Enum.GetName(typeof(BuiltInCategory), fam.FamilyCategoryId.IntegerValue)!.Contains(
|
||||
"Fitting") &&
|
||||
fam.FamilyCategoryId.IntegerValue != -2008013).ToList();//风道末端
|
||||
MessageBox.Show(fams.Count().ToString());
|
||||
return;
|
||||
|
||||
var elements = new FilteredElementCollector(Document).WhereElementIsNotElementType()
|
||||
.ToElements()
|
||||
.ToList();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var elementIds = new List<ElementId>();
|
||||
foreach (var item in elements)
|
||||
{
|
||||
var level = Document.GetElement(item.GetLevelId())?.Name;
|
||||
var param = item.get_Parameter(BuiltInParameter.DOOR_NUMBER)?.AsString();
|
||||
if (param != null && level != null && param.Contains("B2") && level.Contains("站厅"))
|
||||
{
|
||||
sb.AppendLine($"{item.Id}");
|
||||
elementIds.Add(item.Id);
|
||||
|
||||
}
|
||||
if (param != null && level != null && param.Contains("B1") && level.Contains("站台"))
|
||||
{
|
||||
sb.AppendLine($"{item.Id}");
|
||||
elementIds.Add(item.Id);
|
||||
|
||||
}
|
||||
}
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
UiDocument.Selection.SetElementIds(elementIds);
|
||||
}
|
||||
return;
|
||||
{
|
||||
var walls = new FilteredElementCollector(Document).WhereElementIsNotElementType()
|
||||
.OfClass(typeof(Wall))
|
||||
.ToElements()
|
||||
@@ -309,373 +68,7 @@ namespace Szmedi.Test
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//var elements = UiDocument.Selection
|
||||
// .GetElementIds()
|
||||
// .Select(Document.GetElement)
|
||||
// .Cast<FamilyInstance>()
|
||||
// .Where(e => e.get_Parameter(BuiltInParameter.INSTANCE_ELEVATION_PARAM).AsDouble() < 10e-5)
|
||||
// .Select(e => e.Id).ToList();
|
||||
//UiDocument.Selection.SetElementIds(elements);
|
||||
|
||||
return;
|
||||
//Document.Invoke(ts =>
|
||||
//{
|
||||
// elements.ForEach(e=>e.Host)
|
||||
//})
|
||||
//Material.Create(Document, "测试材质");
|
||||
|
||||
//var reference = UiDocument.Selection.PickObject(ObjectType.Element);
|
||||
//var ins = Document.GetElement(reference) as FamilyInstance;
|
||||
//var bo = IsConnectToSystem(ins);
|
||||
|
||||
//MessageBox.Show(bo.ToString());
|
||||
|
||||
//return;
|
||||
#if false
|
||||
var manager = Document.FamilyManager;
|
||||
|
||||
var names = manager.Types.OfType<FamilyType>().Select(t => t.Name);
|
||||
bool b = names.Contains(" ");
|
||||
MessageBox.Show(manager.Types.Size.ToString());
|
||||
return;
|
||||
|
||||
var e = UiDocument.Selection.PickElementsByRectangle().Cast<MEPCurve>().FirstOrDefault();
|
||||
//var b1 = e.Diameter == null;
|
||||
//var b2 = e.Height == null;
|
||||
//MessageBox.Show(.ToString());
|
||||
return;
|
||||
var refer1 = UiDocument.Selection.PickObject(ObjectType.Element, new GenericFilter<ModelCurve>(), "选择模型线");
|
||||
var elem = Document.GetElement(refer1) as ModelCurve;
|
||||
var col = new FilteredElementCollector(Document, Document.ActiveView.Id).WhereElementIsNotElementType()
|
||||
.Where(e => e is ModelCurve mc && mc.LineStyle.Id == elem.LineStyle.Id).Select(e => e.Id).ToList();
|
||||
UiDocument.Selection.SetElementIds(col);
|
||||
//var refer2 = UiDocument.Selection.PickObject(ObjectType.Element, new GenericFilter<ModelCurve>(), "选择模型线");
|
||||
//var elem2 = Document.GetElement(refer2) as ModelCurve;
|
||||
//if (IsParallel(elem.GeometryCurve as Line, elem2.GeometryCurve as Line))
|
||||
//{
|
||||
// MessageBox.Show("平行");
|
||||
//}
|
||||
|
||||
//var groups = Document.OfParentModelCollector().WhereElementIsNotElementType()
|
||||
// .GroupBy(e => e.GetParameters("深圳构件标识").FirstOrDefault().AsString());
|
||||
//StringBuilder sb = new StringBuilder();
|
||||
//foreach (var element in groups)
|
||||
//{
|
||||
// sb.AppendLine(element.Key);
|
||||
//}
|
||||
//MessageBox.Show(sb.ToString());
|
||||
|
||||
//var reference = UiDocument.Selection.PickObject(ObjectType.PointOnElement, new GenericFilter<ImportInstance>(), "请选择CAD文字");
|
||||
//var instance = doc.GetElement(reference) as ImportInstance;
|
||||
//var ids = UiDocument.Selection.GetElementIds();
|
||||
|
||||
|
||||
//Document.Modify(
|
||||
// settings => settings.Transaction).Commit((doc, _) =>
|
||||
// {
|
||||
//var familyName = "族名称";
|
||||
//using (Transaction ts = new Transaction(doc, "更新族类型名称"))
|
||||
//{
|
||||
// ts.Start();
|
||||
// //获取某个族
|
||||
// var element = new FilteredElementCollector(doc).OfClass(typeof(Family)).Where(e => e.Name == familyName).Cast<Family>().FirstOrDefault();
|
||||
// if (element == null)
|
||||
// {
|
||||
// TaskDialog.Show("提示", "没有找到指定的族");
|
||||
// ts.RollBack();
|
||||
// return;
|
||||
// }
|
||||
// var ids = element.GetFamilySymbolIds();
|
||||
// foreach (var id in ids)
|
||||
// {
|
||||
// //获取族类型
|
||||
// var symbol = doc.GetElement(id) as FamilySymbol;
|
||||
// //宽度
|
||||
// var w = Convert.ToDouble(symbol.GetParameters("宽度").FirstOrDefault().AsValueString());
|
||||
// //高度
|
||||
// var h = Convert.ToDouble(symbol.GetParameters("高度").FirstOrDefault().AsValueString());
|
||||
// if (ids != null)
|
||||
|
||||
// {
|
||||
// //前缀
|
||||
// var prefix = string.Empty;
|
||||
// //后缀
|
||||
// var suffix = string.Empty;
|
||||
|
||||
// string width = string.Empty;
|
||||
// string height = string.Empty;
|
||||
|
||||
// if (w / 1000 < 1)
|
||||
// {
|
||||
// width = $"0{w}mm";
|
||||
// }
|
||||
// if (h / 1000 < 1)
|
||||
// {
|
||||
// height = $"0{h}mm";
|
||||
// }
|
||||
// //如果width和height最后一个数字是5,则把5改成a
|
||||
// if (width.Last() == '5')
|
||||
// {
|
||||
// width = width.Remove(width.Length - 1) + "a";
|
||||
// }
|
||||
// if (height.Last() == '5')
|
||||
// {
|
||||
// height = height.Remove(height.Length - 1) + "a";
|
||||
// }
|
||||
// var newName = $"{prefix}{width} x {height}{suffix}";
|
||||
// symbol.Name = newName;
|
||||
// }
|
||||
// }
|
||||
// ts.Commit();
|
||||
//}
|
||||
// });
|
||||
|
||||
|
||||
//var ids = Document.ActiveView
|
||||
// .OfCollector()
|
||||
// .Where(e => e.get_Parameter(BuiltInParameter.DOOR_NUMBER)?.AsString() == "J4921321-11332-(005)DK0001").Select(e => e.Id).ToList();
|
||||
//MessageBox.Show(ids.Count.ToString());
|
||||
//UiDocument.Selection.SetElementIds(ids);
|
||||
//var elemIds = GetElementIds();
|
||||
//var ids = UiDocument.Selection.GetElementIds();
|
||||
//var start = new XYZ(-61995.832703373, 4243.667605320, 5999.999999997);
|
||||
//var end = new XYZ(0.000000000, 0.000000000, 5999.999999997);
|
||||
//var translate = (end - start) / 304.8;
|
||||
//using (Transaction ts = new Transaction(doc, "移动"))
|
||||
//{
|
||||
// ts.Start();
|
||||
// ElementTransformUtils.MoveElements(doc, ids, translate);
|
||||
// ts.Commit();
|
||||
//}
|
||||
|
||||
//var id = UiDocument.Selection.GetElementIds().FirstOrDefault();
|
||||
//var ids = doc.GetElement(id) as FamilyInstance;
|
||||
//var n = ids.GetSubComponentIds().Count;
|
||||
//MessageBox.Show(n.ToString());
|
||||
//var ids = UiDocument.Selection.GetElementIds();
|
||||
//var translate = XYZ.BasisZ * 20;
|
||||
//using (Transaction ts = new Transaction(doc, "移动"))
|
||||
//{
|
||||
// ts.Start();
|
||||
// ElementTransformUtils.CopyElements(doc, ids, translate);
|
||||
// ElementTransformUtils.MoveElements(doc, ids, translate);
|
||||
// ts.Commit();
|
||||
//}
|
||||
#endif
|
||||
#if false
|
||||
var symbols = new FilteredElementCollector(Document).OfClass(typeof(Wall)).ToElementIds();
|
||||
foreach (var item in symbols)
|
||||
{
|
||||
var elem = Document.GetElement(item);
|
||||
var cat = elem.Category.Name;
|
||||
var cate = Category.GetCategory(Document, elem.Category.Id);
|
||||
var cate1 = Category.GetCategory(Document, (BuiltInCategory)elem.Category.Id.IntegerValue);
|
||||
}
|
||||
var dict = new FilteredElementCollector(Document).OfClass(typeof(ElementType))
|
||||
.OfType<ElementType>()
|
||||
.Where(
|
||||
t => t.CanBeRenamed && t.Category is { CategoryType: CategoryType.Model or CategoryType.Annotation })
|
||||
.GroupBy(t => t.Category.Id)
|
||||
.Where(g => !string.IsNullOrEmpty(g.FirstOrDefault().Category?.Name))
|
||||
.ToDictionary(g => g.FirstOrDefault().Category.Name, g => g.ToList());
|
||||
//UiDocument.Selection.SetElementIds(symbols);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (var kv in dict)
|
||||
{
|
||||
foreach (var item in kv.Value)
|
||||
{
|
||||
if (item is WallType t)
|
||||
{
|
||||
sb.AppendLine($"{kv.Key}-{t.Kind}-{item.Name}");
|
||||
}
|
||||
}
|
||||
}
|
||||
MessageBox.Show(sb.ToString());
|
||||
#endif
|
||||
//foreach (BuiltInCategory id in Enum.GetValues(typeof(BuiltInCategory)))
|
||||
//{
|
||||
// var names = Enum.GetName(typeof(BuiltInCategory), id);
|
||||
//}
|
||||
|
||||
//using (Transaction ts = new Transaction(doc, "修改类型名称"))
|
||||
//{
|
||||
// ts.Start();
|
||||
// try
|
||||
// {
|
||||
// foreach (var id in symbols)
|
||||
// {
|
||||
// if (id.Name == "标准")
|
||||
// {
|
||||
// if (id is FamilySymbol ids)
|
||||
// {
|
||||
// id.Name = ids.FamilyName;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
|
||||
// throw;
|
||||
// }
|
||||
|
||||
// ts.Commit();
|
||||
//}
|
||||
//UiDocument.Selection.SetElementIds([new ElementId(2222596)]);
|
||||
|
||||
//var dims = doc.QueryElementsByType<Dimension>().WhereElementIsNotElementType().ToElementIds();
|
||||
|
||||
//UiDocument.Selection.SetElementIds(dims);
|
||||
//var refer = UiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
|
||||
//var ids = doc.GetElement(refer);
|
||||
//foreach (Parameter param in ids.Parameters)
|
||||
//{
|
||||
|
||||
//}
|
||||
|
||||
#region MyRegion
|
||||
|
||||
////var service = new ricaun.Revit.ExtensibleShortcuts.Services.KeyboardShortcutService();
|
||||
////service.SetRibbonItemShortcut("CustomCtrl_%CustomCtrl_%SZMEDI工具%机电工具%MoveConnectCmd", "MC");
|
||||
//var dict = ShortcutsHelper.Commands;
|
||||
//StringBuilder sb = new StringBuilder();
|
||||
//sb.AppendLine("Name,CommandName,CommandId,CommandPaths,CommandScope,Shortcuts,ShortcutType,ShortcutsRep,");
|
||||
//foreach (var id in dict)
|
||||
//{
|
||||
// string text = id.Value.CommandName;
|
||||
// string commandName = string.Join("", text.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries));
|
||||
// sb.AppendLine(
|
||||
// $"{id.Key},{commandName},{id.Value.CommandId},{id.Value.CommandPaths},{id.Value.CommandScope},{id.Value.Shortcuts},{id.Value.ShortcutType},{id.Value.ShortcutsRep},");
|
||||
// //if (ShortcutsHelper.Commands.TryGetValue("CustomCtrl_%CustomCtrl_%SZMEDI工具%机电工具%MoveConnectCmd", out var shortcutItem))
|
||||
// //{
|
||||
// // //为命令指定快捷键QQQQ
|
||||
// // shortcutItem.Shortcuts.Add("MC");
|
||||
// // break;
|
||||
// // //为命令删除快捷键QQQQ
|
||||
// // //shortcutItem.Shortcuts.Remove("QQQQ");
|
||||
// // //为命令清空快捷键
|
||||
// // //shortcutItem.Shortcuts.Clear();
|
||||
// //}
|
||||
//}
|
||||
//LogUtil.WriteTxtFile("快捷键", sb.ToString());
|
||||
|
||||
////KeyboardShortcutService.applyShortcutChanges(dict);
|
||||
|
||||
#endregion
|
||||
|
||||
//var window = new MainWindow() { DataContext = new MainWindowViewModel(UiDocument) };
|
||||
//window.Show();
|
||||
//var refer = UiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
|
||||
//var ids = doc.GetElement(refer);
|
||||
//var boundingbox = ids.get_BoundingBox(null);
|
||||
//using var ts = new Transaction(doc, "Test");
|
||||
//ts.Start();
|
||||
//if (doc.ActiveView is View3D view3D)
|
||||
//{
|
||||
// view3D.SetSectionBox(Extend(boundingbox));
|
||||
//}
|
||||
//ts.Commit();
|
||||
//var ids = UiDocument.Selection.GetElementIds();
|
||||
|
||||
//using (var ts = new Transaction(doc, "Test"))
|
||||
//{
|
||||
// ts.Start();
|
||||
// foreach (var id in ids)
|
||||
// {
|
||||
// var ids = doc.GetElement(id) as FamilyInstance;
|
||||
// //ElementTransformUtils.RotateElement(doc, id, Line.CreateUnbound((ids.Location as LocationPoint).Point, XYZ.BasisZ), /*65.43 / 180 * */Math.PI);
|
||||
// ElementTransformUtils.MoveElement(doc, id, ids.HandOrientation * 1200 / 304.8);
|
||||
// doc.Regenerate();
|
||||
// //ElementTransformUtils.RotateElement(doc, id, Line.CreateUnbound((ids.Location as LocationPoint).Point, XYZ.BasisZ), /*65.43 / 180 * */Math.PI);
|
||||
// }
|
||||
// ts.Commit();
|
||||
//}
|
||||
|
||||
#region Updater
|
||||
|
||||
//ChangeTypeUpdater _updater = new(UiApplication, new Guid("{A3441B77-7558-41EF-A3BF-4690C99F67C0}"));
|
||||
//UpdaterRegistry.RegisterUpdater(_updater, true);
|
||||
//UpdaterRegistry.AddTrigger(_updater.GetUpdaterId(), new ElementClassFilter(typeof(FamilyInstance)), Element.GetChangeTypeAny());
|
||||
|
||||
#endregion
|
||||
|
||||
//var ids = UiDocument.Selection.GetElementIds().Select(id=>doc.GetElement(id)).OfType<ModelCurve>().Select(mc=>mc.GeometryCurve).ToList();
|
||||
|
||||
//SetComparisonResult comparisonR = ids[0].Intersect(ids[1], out var intersectionResult);
|
||||
//System.Windows.MessageBox.Show($"{comparisonR}");
|
||||
//try
|
||||
//{
|
||||
// var cl = CurveLoop.Create(ids);
|
||||
//}
|
||||
//catch (Exception)
|
||||
//{
|
||||
// throw;
|
||||
//}
|
||||
//Application.DocumentChanged -= Application_DocumentChanged;
|
||||
//Application.DocumentChanged += Application_DocumentChanged;
|
||||
|
||||
#region MyRegion
|
||||
|
||||
var refer = UiDocument.Selection.PickObject(ObjectType.Element);
|
||||
var ids = (Document.GetElement(refer) as FamilyInstance).Symbol;
|
||||
Document.Modify(set => set.Transaction)
|
||||
.Commit((d, _) =>
|
||||
{
|
||||
if (!ids.IsActive)
|
||||
{
|
||||
ids.Activate();
|
||||
}
|
||||
|
||||
var level = new FilteredElementCollector(d).OfClass(typeof(Level))
|
||||
.OfType<Level>()
|
||||
.FirstOrDefault(l => l.Elevation > 0);
|
||||
d.Create
|
||||
.NewFamilyInstance(
|
||||
new XYZ(0, 0, 0),
|
||||
ids,
|
||||
level,
|
||||
Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
//XYZ p1 = new XYZ();
|
||||
//XYZ p2 = XYZ.BasisX;
|
||||
//XYZ p3 = XYZ.BasisY;
|
||||
//XYZ p4 = XYZ.BasisZ;
|
||||
//var list = new List<XYZ>() { p1, p2, p3 };
|
||||
//HermiteSpline curve = HermiteSpline.Create(list, false);
|
||||
//using (Transaction ts = new Transaction(doc, "test"))
|
||||
//{
|
||||
// ts.Start();
|
||||
// SketchPlane sketch = SketchPlane.Create(doc, Plane.CreateByNormalAndOrigin(p4, p1));
|
||||
// var mc = doc.Create.NewModelCurve(curve, sketch);
|
||||
// ts.Commit();
|
||||
//}
|
||||
//Autodesk.Revit.DB.Reference e = UiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
|
||||
}
|
||||
|
||||
private static void MoveRoomSeparator(Document doc, ICollection<ElementId> ids, double dis)
|
||||
{
|
||||
var distance = dis / 304.8;
|
||||
foreach (var id in ids)
|
||||
{
|
||||
var element = doc.GetElement(id);
|
||||
if (element is ModelCurve modelCurve)
|
||||
{
|
||||
var start = modelCurve.GeometryCurve.GetEndPoint(0);
|
||||
var end = modelCurve.GeometryCurve.GetEndPoint(1);
|
||||
var sketch = SketchPlane.Create(doc,
|
||||
Plane.CreateByNormalAndOrigin(XYZ.BasisZ, start + (XYZ.BasisZ * distance)));
|
||||
var line = Line.CreateBound(start + (XYZ.BasisZ * distance), end + (XYZ.BasisZ * distance));
|
||||
var array = new CurveArray();
|
||||
array.Append(line);
|
||||
doc.Create.NewRoomBoundaryLines(sketch, array, doc.ActiveView);
|
||||
}
|
||||
}
|
||||
|
||||
doc.Delete(ids);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -731,99 +124,6 @@ namespace Szmedi.Test
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public class SelectionFilter : ISelectionFilter
|
||||
{
|
||||
public bool AllowElement(Element elem)
|
||||
{
|
||||
return elem is Wall;
|
||||
}
|
||||
|
||||
public bool AllowReference(Reference reference, XYZ position)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class ChangeTypeUpdater : IUpdater
|
||||
{
|
||||
private UpdaterId _uid;
|
||||
|
||||
public ChangeTypeUpdater(UIApplication uiapp, Guid guid)
|
||||
{
|
||||
_uid = new UpdaterId(uiapp.ActiveAddInId,
|
||||
guid);
|
||||
}
|
||||
|
||||
public void Execute(UpdaterData data)
|
||||
{
|
||||
Func<ICollection<ElementId>, string> toString = ids =>
|
||||
ids.Aggregate(string.Empty, (ss, id) => ss + "," + id).TrimStart(',');
|
||||
StringBuilder sb = new();
|
||||
sb.AppendLine("added:" + toString(data.GetAddedElementIds()));
|
||||
sb.AppendLine("modified:" + toString(data.GetModifiedElementIds()));
|
||||
sb.AppendLine("deleted:" + toString(data.GetDeletedElementIds()));
|
||||
TaskDialog.Show("Changes", sb.ToString());
|
||||
}
|
||||
|
||||
public string GetAdditionalInformation()
|
||||
{
|
||||
return "N/A";
|
||||
}
|
||||
|
||||
public ChangePriority GetChangePriority()
|
||||
{
|
||||
return ChangePriority.FreeStandingComponents;
|
||||
}
|
||||
|
||||
public UpdaterId GetUpdaterId()
|
||||
{
|
||||
return _uid;
|
||||
}
|
||||
|
||||
public string GetUpdaterName()
|
||||
{
|
||||
return "ChangeTypeUpdater";
|
||||
}
|
||||
}
|
||||
|
||||
private void Application_DocumentChanged(object sender, Autodesk.Revit.DB.Events.DocumentChangedEventArgs e)
|
||||
{
|
||||
var a = sender as Autodesk.Revit.ApplicationServices.Application;
|
||||
var doc = e.GetDocument();
|
||||
ElementClassFilter filter = new(typeof(FamilyInstance));
|
||||
var modifyIds = e.GetModifiedElementIds(filter);
|
||||
var addIds = e.GetAddedElementIds(filter);
|
||||
var deleteIds = e.GetDeletedElementIds();
|
||||
StringBuilder sb = new();
|
||||
if (modifyIds.Count > 0)
|
||||
{
|
||||
sb.AppendLine("修改");
|
||||
foreach (var id in modifyIds)
|
||||
{
|
||||
sb.AppendLine($"{id}-{doc.GetElement(id).Name}");
|
||||
}
|
||||
}
|
||||
|
||||
if (addIds.Count > 0)
|
||||
{
|
||||
sb.AppendLine("添加");
|
||||
foreach (var id in addIds)
|
||||
{
|
||||
sb.AppendLine($"{id}-{doc.GetElement(id).Name}");
|
||||
}
|
||||
}
|
||||
|
||||
if (deleteIds.Count > 0)
|
||||
{
|
||||
sb.AppendLine("删除");
|
||||
foreach (var id in deleteIds)
|
||||
{
|
||||
sb.AppendLine($"{id}-{doc.GetElement(id).Name}");
|
||||
}
|
||||
}
|
||||
|
||||
MessageBox.Show(sb.ToString(), "文档修改");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user