Files
RookieStation/RookieStation/CommonTools/ExecuteCmd/EncryptFamily.cs
2021-11-12 11:40:43 +08:00

79 lines
3.3 KiB
C#

using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using RookieStation.CommonTools.ViewModels;
using RookieStation.Extension;
using RookieStation.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RookieStation.CommonTools.ExecuteCmd
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
internal class EncryptFamily : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Document doc = uidoc.Document;
DocumentSet docset = uiapp.Application.Documents;
TaskDialog dialog = new TaskDialog("加密族");
dialog.MainInstruction = "请选择当前项目加密族的范围";
dialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "已使用的族");
dialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "所有族");
TaskDialogResult taskDialogResult = dialog.Show();
if (TaskDialogResult.CommandLink1 == taskDialogResult)
{
var instances = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).Cast<FamilyInstance>();
var distinctFamiliesUsed = instances.GroupBy(f => f.Symbol.FamilyName).Select(f => f.FirstOrDefault()).ToList().ConvertAll(f => f.Symbol.Family);
try
{
doc.InvokeGroup(tg =>
{
EncryptOrDecryptFamily encryptFamily = new EncryptOrDecryptFamily(distinctFamiliesUsed);
encryptFamily.IsEncrypt = true;
encryptFamily.ProgressModal();
}, "加密使用族");
}
catch (Exception ex)
{
if (!(ex is Autodesk.Revit.Exceptions.OperationCanceledException))
{
Log.WriteLog(ex.Message);
return Result.Failed;
}
}
}
else if (TaskDialogResult.CommandLink2 == taskDialogResult)
{
var families = new FilteredElementCollector(doc).OfClass(typeof(Family)).Cast<Family>().ToList();
try
{
doc.InvokeGroup(tg =>
{
EncryptOrDecryptFamily encryptFamily = new EncryptOrDecryptFamily(families);
encryptFamily.IsEncrypt = true;
encryptFamily.ProgressModal();
}, "加密所有族");
}
catch (Exception ex)
{
if (!(ex is Autodesk.Revit.Exceptions.OperationCanceledException))
{
Log.WriteLog(ex.Message);
return Result.Failed;
}
}
}
return Result.Succeeded;
}
}
}