101 lines
4.2 KiB
C#
101 lines
4.2 KiB
C#
|
|
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)]
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|