添加项目文件。
This commit is contained in:
102
Szmedi.RvKits/Modeling/RoomNameAssignCmd.cs
Normal file
102
Szmedi.RvKits/Modeling/RoomNameAssignCmd.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows;
|
||||
|
||||
using Autodesk.Revit.Attributes;
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.DB.Architecture;
|
||||
using Autodesk.Revit.UI;
|
||||
using Autodesk.Revit.UI.Selection;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External;
|
||||
|
||||
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
||||
|
||||
using Szmedi.RvKits.Assists;
|
||||
|
||||
namespace Szmedi.RvKits.Modeling
|
||||
{
|
||||
[Transaction(TransactionMode.Manual)]
|
||||
[Regeneration(RegenerationOption.Manual)]
|
||||
public class RoomNameAssignCmd : ExternalCommand
|
||||
{
|
||||
public override void Execute()
|
||||
{
|
||||
Document.Invoke(
|
||||
ts =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var reference = UiDocument.Selection.PickObject(ObjectType.PointOnElement, new GenericFilter<ImportInstance>(), "请选择CAD文字");
|
||||
var instance = Document.GetElement(reference) as ImportInstance;
|
||||
|
||||
var layerName = instance.GetLayerName(reference);
|
||||
List<KeyValuePair<string, XYZ>> layerTextPoints = instance.GetTextsByLayer(layerName);
|
||||
var rooms = ActiveView.OfCollector().OfCategory(BuiltInCategory.OST_Rooms).ToElements();
|
||||
var roomTags = ActiveView.OfCollector().OfCategory(BuiltInCategory.OST_RoomTags).Cast<RoomTag>();
|
||||
foreach (Room room in rooms)
|
||||
{
|
||||
var level = room.Level;
|
||||
var kv = layerTextPoints.FirstOrDefault(d => ContainsChinese(d.Key) && room.IsPointInRoom(d.Value.FlattenTo(level)));
|
||||
if (kv.Key != null)
|
||||
{
|
||||
//var flattenPoint = kv.Value.FlattenTo(level);
|
||||
|
||||
var tag = roomTags.FirstOrDefault(t => t.TaggedLocalRoomId == room.Id);
|
||||
if (tag == null)
|
||||
{
|
||||
var uv = new UV(kv.Value.X, kv.Value.Y);
|
||||
|
||||
Document.Create.NewRoomTag(new LinkElementId(room.Id), uv, ActiveView.Id);
|
||||
}
|
||||
|
||||
//var arc = Arc.Create(flattenPoint, 10, 0, 5, XYZ.BasisX, XYZ.BasisY);
|
||||
//Document.Create.NewModelCurve(arc, SketchPlane.Create(Document, level.Id));
|
||||
room.Name = kv.Key;
|
||||
}
|
||||
}
|
||||
//foreach (var kv in layerTextPoints)
|
||||
//{
|
||||
// var floor = ActiveView as ViewPlan;
|
||||
// var flattenPoint = kv.Value.FlattenTo(floor.GenLevel);
|
||||
|
||||
// var room = Document.GetRoomAtPoint(flattenPoint);
|
||||
|
||||
// if (room == null)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// var tag = roomTags.FirstOrDefault(t => t.TaggedLocalRoomId == room.Id);
|
||||
// if (tag == null)
|
||||
// {
|
||||
// var uv = new UV(kv.Value.X, kv.Value.Y);
|
||||
|
||||
// Document.Create.NewRoomTag(new LinkElementId(room.Id), uv, ActiveView.Id);
|
||||
// }
|
||||
|
||||
// var arc = Arc.Create(flattenPoint, 10, 0, 5, XYZ.BasisX, XYZ.BasisY);
|
||||
// Document.Create.NewModelCurve(arc, SketchPlane.Create(Document, floor.GenLevel.Id));
|
||||
// room.Name = kv.Key;
|
||||
//}
|
||||
}
|
||||
catch(Autodesk.Revit.Exceptions.OperationCanceledException)
|
||||
{
|
||||
//用户取消操作
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message);
|
||||
}
|
||||
|
||||
}, "房间命名");
|
||||
}
|
||||
static bool ContainsChinese(string input)
|
||||
{
|
||||
// 正则表达式匹配汉字
|
||||
Regex regex = new Regex(@"[\u4e00-\u9fa5]");
|
||||
return regex.IsMatch(input);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user