diff --git a/AddinDeployer/AddinDeployer.csproj b/AddinDeployer/AddinDeployer.csproj new file mode 100644 index 0000000..0eca47a --- /dev/null +++ b/AddinDeployer/AddinDeployer.csproj @@ -0,0 +1,104 @@ + + + + + Debug + AnyCPU + {C60B068A-90A8-4852-B6DC-28A2D3FF2753} + Library + AddinDeployer + AddinDeployer + v4.7.2 + 512 + false + true + + + + x64 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + MinimumRecommendedRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + MinimumRecommendedRules.ruleset + + + + ..\packages\Revit_API_x64.2020.0.0\lib\NET470\AdWindows.dll + False + + + + ..\packages\Revit_API_x64.2020.0.0\lib\NET470\RevitAddInUtility.dll + False + + + ..\packages\Revit_API_x64.2020.0.0\lib\NET470\RevitAPI.dll + False + + + ..\packages\Revit_API_x64.2020.0.0\lib\NET470\RevitAPIUI.dll + False + + + + + + + + + + + ..\packages\Revit_API_x64.2020.0.0\lib\NET470\UIFramework.dll + False + + + ..\packages\Revit_API_x64.2020.0.0\lib\NET470\UIFrameworkServices.dll + False + + + + + Component + + + + + + + + \ No newline at end of file diff --git a/AddinDeployer/CustomActionClass.cs b/AddinDeployer/CustomActionClass.cs new file mode 100644 index 0000000..8259212 --- /dev/null +++ b/AddinDeployer/CustomActionClass.cs @@ -0,0 +1,232 @@ +using Autodesk.Revit.DB; +using Autodesk.RevitAddIns; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration.Install; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static Autodesk.Internal.Windows.SwfMediaPlayer; + +namespace AddinDeployer +{ + [RunInstaller(true)] + public class CustomActionClass : Installer + { + //public static void Main(string[] args) + //{ + //} + + private string path; + private static string assemblyname = "RookieStation"; + private static string addinname = "RookieStation.addin"; + private static string dllname = "RookieStation.dll"; + private string fullclassname1 = "RookieStation.RibbonMenu.RsApp"; + + public CustomActionClass() + { + this.BeforeInstall += CustomActionClass_BeforeInstall; + this.BeforeUninstall += CustomActionClass_BeforeUninstall; + this.AfterInstall += CustomActionClass_AfterInstall; + } + + //private string revitvernum = "2020"; + + public static void KillProcess(string strProcessesByName)//关闭线程 + { + foreach (Process p in Process.GetProcesses())//GetProcessesByName(strProcessesByName)) + { + if (p.ProcessName.ToUpper().Contains(strProcessesByName)) + { + try + { + p.Kill(); + p.WaitForExit(); // possibly with a timeout + } + catch (Win32Exception e) + { + MessageBox.Show(e.Message.ToString()); // process was terminating or can't be terminated - deal with it + } + catch (InvalidOperationException e) + { + MessageBox.Show(e.Message.ToString()); // process has already exited - might be able to let this one go + } + } + } + } + + private void CustomActionClass_BeforeUninstall(object sender, InstallEventArgs e) + { + KillProcess("REVIT"); + + //var dialogResult = System.Windows.Forms.MessageBox.Show("是否关闭Revit以卸载插件", "提示", System.Windows.Forms.MessageBoxButtons.YesNo); + + //if (dialogResult == System.Windows.Forms.DialogResult.Yes) + //{ + //} + //while (MessageBox.Show("退出当前窗体?", "", MessageBoxButtons.YesNo) == DialogResult.No) + //{ + // for (int j = 1; j <= i; j++) + // { + // listBox1.Items.Add(j); + // } + //} + //System.Environment.Exit(System.Environment.ExitCode); + //var ps = Process.GetProcessesByName("Revit.exe"); + //foreach (var p in ps) + //{ + // p.Kill(); + //} + } + + private void CustomActionClass_BeforeInstall(object sender, InstallEventArgs e) + { + KillProcess("REVIT"); + + //var dialogResult = System.Windows.Forms.MessageBox.Show("是否关闭Revit以安装插件", "提示", System.Windows.Forms.MessageBoxButtons.YesNo); + + //if (dialogResult == System.Windows.Forms.DialogResult.Yes) + //{ + //} + //var ps = Process.GetProcessesByName("Revit.exe"); + //foreach (var p in ps) + //{ + // p.Kill(); + //} + + //else + //{ + // //this.Exit() + //} + } + + private static void CustomActionClass_AfterInstall(object sender, InstallEventArgs e) + { + } + + private static void CustomActionClass_AfterUninstall(object sender, InstallEventArgs e) + { + //DeleteFolder(path); + //DelAddinFromPath("C:\\ProgramData\\Autodesk\\Revit\\Addins"); + List revitProducts = RevitProductUtility.GetAllInstalledRevitProducts(); + foreach (var p in revitProducts) + { + string version = p.Version.ToString(); + string versionnum = version.Trim("Revit".ToCharArray()); + AddInInstaller addin = new AddInInstaller(versionnum); + addin.Uninstall(); + } + } + + public static void DeleteFolder(string dir) + { + if (Directory.Exists(dir)) //如果存在这个文件夹删除之 + { + foreach (string d in Directory.GetFileSystemEntries(dir)) + { + if (File.Exists(d)) + File.Delete(d); //直接删除其中的文件 + else + DeleteFolder(d); //递归删除子文件夹 + } + Directory.Delete(dir, true); //删除已空文件夹 + } + } + + public static void DelAddinFromPath(string dir) + { + if (Directory.Exists(dir)) + { + foreach (string d in Directory.GetFileSystemEntries(dir)) + { + if (File.Exists(d) && d.EndsWith(addinname)) + File.Delete(d); //直接删除其中的文件 + else + DelAddinFromPath(d); + } + } + } + + public override void Rollback(IDictionary savedState) + { + base.Rollback(savedState); + } + + public override void Commit(IDictionary savedState) + { + base.Commit(savedState); + } + + public override void Install(IDictionary stateSaver) + { + base.Install(stateSaver); + } + + public override void Uninstall(IDictionary savedState) + { + base.Uninstall(savedState); + } + } + + internal class AddInInstaller + { + private string addinname = "RookieStation.addin"; + private string vendorid = "YTX"; + private string vendorDescription = "YTX"; + + internal AddInInstaller(string revitVersion) + { + this.Manifest = new RevitAddInManifest(); + this.ManifestPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Autodesk\\Revit\\Addins", revitVersion, addinname); + } + + private RevitAddInManifest Manifest { get; } + + private string ManifestPath { get; } + + internal void CreateApplication(string name, string assemblyPath, string fullClassName) + { + RevitAddInApplication item = new RevitAddInApplication(name, assemblyPath, Guid.NewGuid(), fullClassName, vendorid) + { + VendorDescription = vendorDescription + }; + this.Manifest.AddInApplications.Add(item); + } + + internal void CreateCommand(string assemblyPath, string fullClassName) + { + RevitAddInCommand item = new RevitAddInCommand(assemblyPath, Guid.NewGuid(), fullClassName, vendorid) + { + VendorDescription = vendorDescription + }; + this.Manifest.AddInCommands.Add(item); + } + + internal void Install() + { + DirectoryInfo directory = new FileInfo(this.ManifestPath).Directory; + if (directory == null) + { + return; + } + if (!directory.Exists) + { + Directory.CreateDirectory(directory.FullName); + } + this.Manifest.SaveAs(this.ManifestPath); + } + + internal void Uninstall() + { + if (File.Exists(this.ManifestPath)) + { + File.Delete(this.ManifestPath); + } + } + } +} \ No newline at end of file diff --git a/AddinDeployer/Properties/AssemblyInfo.cs b/AddinDeployer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..845379c --- /dev/null +++ b/AddinDeployer/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("AddinDeployer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AddinDeployer")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("c60b068a-90a8-4852-b6dc-28a2d3ff2753")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/AddinDeployer/packages.config b/AddinDeployer/packages.config new file mode 100644 index 0000000..70bf410 --- /dev/null +++ b/AddinDeployer/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/RookieStation.sln b/RookieStation.sln index 94242b1..8d4e448 100644 --- a/RookieStation.sln +++ b/RookieStation.sln @@ -1,24 +1,44 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31025.218 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.31911.260 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RookieStation", "RookieStation\RookieStation.csproj", "{057C7E8D-42A1-4912-B522-498DB7484894}" EndProject Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "RookieStationSetup", "RookieStationSetup\RookieStationSetup.vdproj", "{ACB3490C-778E-4EC3-99F7-243388ACCE4C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinDeployer", "AddinDeployer\AddinDeployer.csproj", "{C60B068A-90A8-4852-B6DC-28A2D3FF2753}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {057C7E8D-42A1-4912-B522-498DB7484894}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {057C7E8D-42A1-4912-B522-498DB7484894}.Debug|Any CPU.Build.0 = Debug|Any CPU + {057C7E8D-42A1-4912-B522-498DB7484894}.Debug|x64.ActiveCfg = Debug|Any CPU + {057C7E8D-42A1-4912-B522-498DB7484894}.Debug|x64.Build.0 = Debug|Any CPU {057C7E8D-42A1-4912-B522-498DB7484894}.Release|Any CPU.ActiveCfg = Release|Any CPU {057C7E8D-42A1-4912-B522-498DB7484894}.Release|Any CPU.Build.0 = Release|Any CPU + {057C7E8D-42A1-4912-B522-498DB7484894}.Release|x64.ActiveCfg = Release|Any CPU + {057C7E8D-42A1-4912-B522-498DB7484894}.Release|x64.Build.0 = Release|Any CPU {ACB3490C-778E-4EC3-99F7-243388ACCE4C}.Debug|Any CPU.ActiveCfg = Debug + {ACB3490C-778E-4EC3-99F7-243388ACCE4C}.Debug|x64.ActiveCfg = Debug + {ACB3490C-778E-4EC3-99F7-243388ACCE4C}.Debug|x64.Build.0 = Debug {ACB3490C-778E-4EC3-99F7-243388ACCE4C}.Release|Any CPU.ActiveCfg = Release + {ACB3490C-778E-4EC3-99F7-243388ACCE4C}.Release|x64.ActiveCfg = Release + {ACB3490C-778E-4EC3-99F7-243388ACCE4C}.Release|x64.Build.0 = Release + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Debug|x64.ActiveCfg = Debug|x64 + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Debug|x64.Build.0 = Debug|x64 + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Release|Any CPU.Build.0 = Release|Any CPU + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Release|x64.ActiveCfg = Release|x64 + {C60B068A-90A8-4852-B6DC-28A2D3FF2753}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RookieStation/CommonTools/ExecuteCmd/ChangeBackgroundColor.cs b/RookieStation/CommonTools/ExecuteCmd/ChangeBackgroundColor.cs index 5b5a846..62891dd 100644 --- a/RookieStation/CommonTools/ExecuteCmd/ChangeBackgroundColor.cs +++ b/RookieStation/CommonTools/ExecuteCmd/ChangeBackgroundColor.cs @@ -3,6 +3,8 @@ using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using System; using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/RookieStation/CommonTools/ExecuteCmd/DecryptFamily.cs b/RookieStation/CommonTools/ExecuteCmd/DecryptFamily.cs index 0766560..5cbb44e 100644 --- a/RookieStation/CommonTools/ExecuteCmd/DecryptFamily.cs +++ b/RookieStation/CommonTools/ExecuteCmd/DecryptFamily.cs @@ -2,7 +2,6 @@ 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; diff --git a/RookieStation/CommonTools/ExecuteCmd/EncryptFamily.cs b/RookieStation/CommonTools/ExecuteCmd/EncryptFamily.cs index 363d4f6..d747498 100644 --- a/RookieStation/CommonTools/ExecuteCmd/EncryptFamily.cs +++ b/RookieStation/CommonTools/ExecuteCmd/EncryptFamily.cs @@ -2,7 +2,6 @@ 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; diff --git a/RookieStation/CommonTools/ExtHandler/FamilyDockablePaneHandler.cs b/RookieStation/CommonTools/ExtHandler/FamilyDockablePaneHandler.cs index d74a548..477e6ac 100644 --- a/RookieStation/CommonTools/ExtHandler/FamilyDockablePaneHandler.cs +++ b/RookieStation/CommonTools/ExtHandler/FamilyDockablePaneHandler.cs @@ -1,7 +1,6 @@ using Autodesk.Revit.DB; using Autodesk.Revit.UI; using RookieStation.CommonTools.Models; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Linq; diff --git a/RookieStation/CommonTools/ViewModels/EncryptOrDecryptFamily.cs b/RookieStation/CommonTools/ViewModels/EncryptOrDecryptFamily.cs index 04907dd..e250027 100644 --- a/RookieStation/CommonTools/ViewModels/EncryptOrDecryptFamily.cs +++ b/RookieStation/CommonTools/ViewModels/EncryptOrDecryptFamily.cs @@ -1,6 +1,5 @@ using Autodesk.Revit.DB; using RookieStation.CommonTools.Views; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Collections.Generic; diff --git a/RookieStation/CommonTools/Views/WpfFamilyDockablePane.xaml.cs b/RookieStation/CommonTools/Views/WpfFamilyDockablePane.xaml.cs index 3f43daf..b295862 100644 --- a/RookieStation/CommonTools/Views/WpfFamilyDockablePane.xaml.cs +++ b/RookieStation/CommonTools/Views/WpfFamilyDockablePane.xaml.cs @@ -72,7 +72,7 @@ namespace RookieStation.CommonTools.Views { var fileinfos = new ObservableCollection(); DirectoryInfo directory = new DirectoryInfo(folder); - var files = directory.GetFiles("*.rfa"); + var files = directory.GetFiles("*.rfa", SearchOption.AllDirectories); for (int i = 0; i < files.Count(); i++) { FamilyInfo fi = new FamilyInfo(files[i].FullName); diff --git a/RookieStation/Drawing/ExecuteCmds/AutoAlignTags.cs b/RookieStation/Drawing/ExecuteCmds/AutoAlignTags.cs new file mode 100644 index 0000000..0e83307 --- /dev/null +++ b/RookieStation/Drawing/ExecuteCmds/AutoAlignTags.cs @@ -0,0 +1,127 @@ +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using HandyControl.Controls; +using RookieStation.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using System.Windows.Forms; + +namespace RookieStation.Drawing.ExecuteCmds +{ + [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] + [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] + internal class AutoAlignTags : 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; + var view = doc.ActiveView; + var distance = 7 * doc.ActiveView.Scale / 304.8; + var independentTags = new FilteredElementCollector(doc, doc.ActiveView.Id).OfClass(typeof(IndependentTag)).Cast().ToList(); + if (independentTags.Count == 0) + { + message = "当前视图没有标记。"; + return Result.Failed; + } + if (view.ViewType == ViewType.ThreeD) + { + message = "请在三维视图以外的视图使用该命令。"; + return Result.Failed; + } + var groups = tagGroup(independentTags); + try + { + doc.InvokeGroup(tg => + { + foreach (var tags in groups) + { + doc.Invoke(ts => + { + foreach (var tag in tags) + { + if (tag.LeaderEndCondition == LeaderEndCondition.Attached) + { + tag.LeaderEndCondition = LeaderEndCondition.Free; + tag.TagOrientation = TagOrientation.Horizontal; + } + } + }); + doc.Invoke(ts => + { + //平面或天花视图 + if (view.ViewType == ViewType.FloorPlan || view.ViewType == ViewType.CeilingPlan) + { + RsRevitUtils.ArrangePlaneTags(distance, tags); + } + //立面剖面 + else if (view.ViewType == ViewType.Section || view.ViewType == ViewType.Elevation) + { + RsRevitUtils.ArrangeElevationTags(view, distance, tags); + } + else if (view.ViewType == ViewType.Detail) + { + RsRevitUtils.ArrangeDetailTags(view, distance, tags); + } + }); + } + }, "自动整理标记"); + } + catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) + { + return Result.Succeeded; + } + return Result.Succeeded; + } + + private List> groups = new List>(); + + private List> tagGroup(List independentTags) + { + var tags = new List(); + groups.Add(tags); + var tagsToRemove = new List(); + var loc = independentTags.FirstOrDefault().TagHeadPosition; + foreach (var t in independentTags) + { + var pOnPlane = new XYZ(t.TagHeadPosition.X, t.TagHeadPosition.Y, t.TagHeadPosition.Z); + var pOnElevation = new XYZ(t.TagHeadPosition.X, t.TagHeadPosition.Y, t.TagHeadPosition.Z); + //var pOnElevation1 = new XYZ(0, t.TagHeadPosition.Y, t.TagHeadPosition.Z); + Autodesk.Revit.DB.View view = t.Document.GetElement(t.OwnerViewId) as Autodesk.Revit.DB.View; + if (view.ViewType == ViewType.FloorPlan || view.ViewType == ViewType.CeilingPlan) + { + if (pOnPlane.DistanceTo(new XYZ(loc.X, loc.Y, 0)) < 1500 / 304.8) + { + tags.Add(t); + tagsToRemove.Add(t); + } + } + //立面剖面 + else if (view.ViewType == ViewType.Section || view.ViewType == ViewType.Detail || view.ViewType == ViewType.Elevation) + { + if (pOnElevation.DistanceTo(loc) < 1500 / 304.8) + { + tags.Add(t); + tagsToRemove.Add(t); + } + } + } + + foreach (var item in tagsToRemove) + { + independentTags.Remove(item); + } + if (independentTags.Count > 0) + { + tagGroup(independentTags); + } + return groups; + } + } +} \ No newline at end of file diff --git a/RookieStation/Drawing/ExecuteCmds/CreateFurnitureLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreateFurnitureLegend.cs index d2ba939..75115f9 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateFurnitureLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateFurnitureLegend.cs @@ -2,9 +2,8 @@ using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using RookieStation.Drawing.Models; -using RookieStation.Extension; -using RookieStation.ProjectConfig; using RookieStation.Utils; +using RookieStation.ProjectConfig; using System.Collections.Generic; using System.Linq; using System.Windows.Controls; @@ -30,7 +29,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -40,12 +40,15 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "家具图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "家具图例", viewScale); }); doc.Invoke(ts => { - var furnitureData = GetData(doc); - CreateLegend(doc, furnitureData, legend); + var furnitureData = GetData(doc, viewport.ViewId); + if (furnitureData.Count > 0) + { + CreateLegendContent(doc, furnitureData, legend); + } }); doc.Invoke(ts => { @@ -59,7 +62,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } return Result.Succeeded; @@ -70,9 +74,9 @@ namespace RookieStation.Drawing.ExecuteCmds /// /// /// - private List GetData(Document doc) + private List GetData(Document doc, ElementId viewId) { - var furnitures = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Furniture).Cast(); + var furnitures = new FilteredElementCollector(doc, viewId).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Furniture).Cast(); //按族分组 var familyGroups = furnitures.GroupBy(g => g.Symbol.FamilyName); var data = new List(); @@ -96,7 +100,7 @@ namespace RookieStation.Drawing.ExecuteCmds return data; } - private void CreateLegend(Document doc, List data, View newLegend) + private void CreateLegendContent(Document doc, List data, View newLegend) { TextNoteType textNoteType = RsRevitUtils.GetOrNewTextNoteType(doc, UserConstant.TextSymbolName); double fontSize = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsDouble(); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateGroundPavingLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreateGroundPavingLegend.cs index 8d411da..719637a 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateGroundPavingLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateGroundPavingLegend.cs @@ -1,13 +1,12 @@ using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; -using RookieStation.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using RookieStation.Extension; +using RookieStation.Utils; using RookieStation.ProjectConfig; namespace RookieStation.Drawing.ExecuteCmds @@ -31,7 +30,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -41,12 +41,15 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "地面铺贴图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "地面铺贴图例", viewScale); }); doc.Invoke(ts => { - var items = GetData(doc); - CreateLegend(doc, items, legend); + var items = GetData(doc, viewport.ViewId); + if (items.Count > 0) + { + CreateLegendContent(doc, items, legend); + } }); doc.Invoke(ts => { @@ -60,7 +63,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } return Result.Succeeded; @@ -71,10 +75,10 @@ namespace RookieStation.Drawing.ExecuteCmds /// /// /// - private List GetData(Document doc) + private List GetData(Document doc, ElementId viewId) { - var floors = new FilteredElementCollector(doc).OfClass(typeof(Floor)).OfCategory(BuiltInCategory.OST_Floors); - var sites = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Site); + var floors = new FilteredElementCollector(doc, viewId).OfClass(typeof(Floor)).OfCategory(BuiltInCategory.OST_Floors); + var sites = new FilteredElementCollector(doc, viewId).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Site); var filledRegionTypes = new FilteredElementCollector(doc).OfClass(typeof(FilledRegionType)).OfCategory(BuiltInCategory.OST_DetailComponents); var data = new List(); @@ -253,7 +257,7 @@ namespace RookieStation.Drawing.ExecuteCmds //填充图案默认为空 } - private void CreateLegend(Document doc, List data, View newLegend) + private void CreateLegendContent(Document doc, List data, View newLegend) { TextNoteType textNoteType = RsRevitUtils.GetOrNewTextNoteType(doc, UserConstant.TextSymbolName); double fontSize = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsDouble(); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateLightLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreateLightLegend.cs index 742f7a5..76f9e54 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateLightLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateLightLegend.cs @@ -7,7 +7,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using RookieStation.Extension; using System.Windows.Controls; using RookieStation.Drawing.Models; using RookieStation.ProjectConfig; @@ -33,7 +32,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -43,12 +43,15 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "灯具图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "灯具图例", viewScale); }); doc.Invoke(ts => { - var items = GetData(doc); - CreateLegend(doc, items, legend); + var items = GetData(doc, viewport.ViewId); + if (items.Count > 0) + { + CreateLegendContent(doc, items, legend); + } }); doc.Invoke(ts => { @@ -62,21 +65,22 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } return Result.Succeeded; } - private List GetData(Document doc) + private List GetData(Document doc, ElementId viewId) { - var lights = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_LightingFixtures).Cast().Where(s => s.Symbol.FamilyName.Contains("灯")); + var lights = new FilteredElementCollector(doc, viewId).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_LightingFixtures).Cast(); var lightFamilyGroup = lights.GroupBy(g => g.Symbol.FamilyName);//按族分组 List items = new List(); //常规注释 - var lightAnnotationSymboltypes = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericAnnotation).Cast().Where(s => s.Name.Contains("灯")); + var lightAnnotationSymboltypes = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericAnnotation).Cast(); foreach (var g1 in lightFamilyGroup) { @@ -106,7 +110,7 @@ namespace RookieStation.Drawing.ExecuteCmds return items; } - private void CreateLegend(Document doc, List items, View newLegend) + private void CreateLegendContent(Document doc, List items, View newLegend) { TextNoteType textNoteType = RsRevitUtils.GetOrNewTextNoteType(doc, UserConstant.TextSymbolName); double fontSize = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsDouble(); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateMainMaterialsTable.cs b/RookieStation/Drawing/ExecuteCmds/CreateMainMaterialsTable.cs index dd3bce3..d559234 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateMainMaterialsTable.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateMainMaterialsTable.cs @@ -2,9 +2,8 @@ using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using RookieStation.Drawing.Models; -using RookieStation.Extension; -using RookieStation.ProjectConfig; using RookieStation.Utils; +using RookieStation.ProjectConfig; using System; using System.Collections.Generic; using System.Linq; @@ -32,7 +31,7 @@ namespace RookieStation.Drawing.ExecuteCmds var sql = SQLiteUtil.GetInstance(); sql.CreateDb(UserConstant.DbFolder + "Inventory.db"); - List tableRow = sql.QueryTable("MainMaterials"); + List tableRow = sql.QueryTable("DecorativeMaterials"); sql.CloseConncetion(); //FilteredElementCollector collectorAll = new FilteredElementCollector(doc); //collectorAll.WherePasses(new LogicalOrFilter(new ElementIsElementTypeFilter(false), new ElementIsElementTypeFilter(true))); @@ -212,7 +211,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } diff --git a/RookieStation/Drawing/ExecuteCmds/CreatePlaneGraphLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreatePlaneGraphLegend.cs index a80c797..44f7dde 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreatePlaneGraphLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreatePlaneGraphLegend.cs @@ -6,9 +6,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; -using RookieStation.ProjectConfig; using RookieStation.Utils; +using RookieStation.ProjectConfig; using Autodesk.Revit.DB.Architecture; using RookieStation.Drawing.Models; using System.Windows.Controls; @@ -35,7 +34,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -45,7 +45,7 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "平面图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "平面图例", viewScale); }); doc.Invoke(ts => { @@ -64,7 +64,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请在图纸视图下使用该命令"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请在图纸视图下使用该命令"); return Result.Failed; } return Result.Succeeded; @@ -80,7 +81,11 @@ namespace RookieStation.Drawing.ExecuteCmds var shelves = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Furniture).Cast().Where(s => s.Symbol.FamilyName.Contains("货架")); var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).Cast(); double area = 0.0; - int orders = 0; + double orders = 0; + if (rooms.Count() == 0) + { + TaskDialog.Show("温馨提示", "未发现房间"); + } foreach (var room in rooms) { area += RsRevitUtils.ConvertSquareFeetToSquareMetre(room.get_Parameter(BuiltInParameter.ROOM_AREA).AsDouble()); @@ -93,10 +98,10 @@ namespace RookieStation.Drawing.ExecuteCmds var instance = group.ElementAt(0); //当前分组货架的长度 var l = instance.Symbol.GetParameters("长度").FirstOrDefault().AsValueString(); - orders = group.Count() * Convert.ToInt16(l) / 1000 * 80; + orders += group.Count() * Convert.ToInt16(l) / 1000.0 * 80.0; } - statistics.Add(UserConstant.Orders.ToString()); statistics.Add(orders.ToString()); + statistics.Add(UserConstant.Orders.ToString()); statistics.Add(Convert.ToInt16(area).ToString()); return statistics; @@ -141,8 +146,8 @@ namespace RookieStation.Drawing.ExecuteCmds HorizontalAlignment = HorizontalTextAlignment.Center }; var y = XYZ.BasisY * tableCellHeight * 1.5; - TextNote.Create(doc, newLegend.Id, XYZ.BasisX * tableCellWidth * 0.5 + y, "设计单量", opts); - TextNote.Create(doc, newLegend.Id, XYZ.BasisX * (tableCellWidth * 1.5) + y, "日均单量", opts); + TextNote.Create(doc, newLegend.Id, XYZ.BasisX * tableCellWidth * 0.5 + y, "日均单量", opts); + TextNote.Create(doc, newLegend.Id, XYZ.BasisX * (tableCellWidth * 1.5) + y, "设计单量", opts); TextNote.Create(doc, newLegend.Id, XYZ.BasisX * (tableCellWidth * 2.5) + y, "场地面积", opts); var li = GetData(doc); TextNote.Create(doc, newLegend.Id, XYZ.BasisX * (tableCellWidth * 0.5) + XYZ.BasisY * tableCellHeight * 0.5, li[0], opts); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateSocketLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreateSocketLegend.cs index 0252b70..95a83a7 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateSocketLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateSocketLegend.cs @@ -2,9 +2,8 @@ using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using RookieStation.Drawing.Models; -using RookieStation.Extension; -using RookieStation.ProjectConfig; using RookieStation.Utils; +using RookieStation.ProjectConfig; using System; using System.Collections.Generic; using System.Linq; @@ -32,7 +31,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -42,12 +42,15 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "插座图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "插座图例", viewScale); }); doc.Invoke(ts => { - var items = GetData(doc); - CreateLegend(doc, items, legend); + var items = GetData(doc, viewport.ViewId); + if (items.Count > 0) + { + CreateLegendContent(doc, items, legend); + } }); doc.Invoke(ts => { @@ -61,20 +64,21 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } return Result.Succeeded; } - private List GetData(Document doc) + private List GetData(Document doc, ElementId viewId) { ElementCategoryFilter filter1 = new ElementCategoryFilter(BuiltInCategory.OST_CommunicationDevices); ElementCategoryFilter filter2 = new ElementCategoryFilter(BuiltInCategory.OST_ElectricalFixtures); LogicalOrFilter logicalOrFilter = new LogicalOrFilter(filter1, filter2); - var sockets = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).WherePasses(logicalOrFilter).Cast().Where(s => s.Symbol.FamilyName.Contains("插座")); - var socketAnnotationSymboltypes = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericAnnotation).Cast().Where(s => s.Name.Contains("插座")); + var sockets = new FilteredElementCollector(doc, viewId).OfClass(typeof(FamilyInstance)).WherePasses(logicalOrFilter).Cast(); + var socketAnnotationSymboltypes = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericAnnotation).Cast(); var socketFamilyGroup = sockets.GroupBy(g => g.Symbol.FamilyName);//按族分组 List items = new List(); @@ -102,7 +106,7 @@ namespace RookieStation.Drawing.ExecuteCmds return items; } - private void CreateLegend(Document doc, List items, View newLegend) + private void CreateLegendContent(Document doc, List items, View newLegend) { TextNoteType textNoteType = RsRevitUtils.GetOrNewTextNoteType(doc, UserConstant.TextSymbolName); double fontSize = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsDouble(); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateSwitchLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreateSwitchLegend.cs index 3675ab8..cac3be4 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateSwitchLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateSwitchLegend.cs @@ -2,9 +2,8 @@ using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using RookieStation.Drawing.Models; -using RookieStation.Extension; -using RookieStation.ProjectConfig; using RookieStation.Utils; +using RookieStation.ProjectConfig; using System; using System.Collections.Generic; using System.Linq; @@ -32,7 +31,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -42,12 +42,15 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "开关图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "开关图例", viewScale); }); doc.Invoke(ts => { - var items = GetData(doc); - CreateLegend(doc, GetData(doc), legend); + var items = GetData(doc, viewport.ViewId); + if (items.Count > 0) + { + CreateLegendContent(doc, items, legend); + } }); doc.Invoke(ts => { @@ -61,15 +64,16 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } return Result.Succeeded; } - private List GetData(Document doc) + private List GetData(Document doc, ElementId viewId) { - var switchs = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_LightingDevices).Cast().Where(s => s.Symbol.FamilyName.Contains("开关")); + var switchs = new FilteredElementCollector(doc, viewId).OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_LightingDevices).Cast().Where(s => s.Symbol.FamilyName.Contains("开关")); var socketFamilyGroup = switchs.GroupBy(g => g.Symbol.FamilyName).Reverse();//按族分组 List items = new List(); @@ -101,7 +105,7 @@ namespace RookieStation.Drawing.ExecuteCmds return items; ; } - private void CreateLegend(Document doc, List items, View newLegend) + private void CreateLegendContent(Document doc, List items, View newLegend) { TextNoteType textNoteType = RsRevitUtils.GetOrNewTextNoteType(doc, UserConstant.TextSymbolName); double fontSize = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsDouble(); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateViewPlanAnnotation.cs b/RookieStation/Drawing/ExecuteCmds/CreateViewPlanAnnotation.cs index 8d3f9dd..4c2b60f 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateViewPlanAnnotation.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateViewPlanAnnotation.cs @@ -5,7 +5,6 @@ using Autodesk.Revit.UI.Selection; using Autodesk.Revit.UI; using RookieStation.Utils; using System.Windows.Controls; -using RookieStation.Extension; using System; using System.Text; using System.Windows.Media.Media3D; @@ -62,7 +61,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "需在平面视图使用此命令"); + message = "需在平面视图使用此命令"; + //TaskDialog.Show("温馨提示", "需在平面视图使用此命令"); return Result.Failed; } return Result.Succeeded; diff --git a/RookieStation/Drawing/ExecuteCmds/CreateViewSectionAnnotation.cs b/RookieStation/Drawing/ExecuteCmds/CreateViewSectionAnnotation.cs index 1bc87a4..25ea8a8 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateViewSectionAnnotation.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateViewSectionAnnotation.cs @@ -1,7 +1,6 @@ using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Collections.Generic; @@ -68,7 +67,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "需在立面视图使用此命令"); + message = "需在立面视图使用此命令"; + //TaskDialog.Show("温馨提示", "需在立面视图使用此命令"); return Result.Failed; } diff --git a/RookieStation/Drawing/ExecuteCmds/CreateWallLegend.cs b/RookieStation/Drawing/ExecuteCmds/CreateWallLegend.cs index 6cc6de4..6f38dfa 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateWallLegend.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateWallLegend.cs @@ -8,7 +8,6 @@ using System.Threading.Tasks; using RookieStation.ProjectConfig; using RookieStation.Utils; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; namespace RookieStation.Drawing.ExecuteCmds { @@ -31,7 +30,8 @@ namespace RookieStation.Drawing.ExecuteCmds var viewPlan = doc.GetElement(viewport.ViewId); if (!(viewPlan is ViewPlan)) { - TaskDialog.Show("温馨提示", "请选择平面视图的视口"); + message = "请选择平面视图的视口"; + //TaskDialog.Show("温馨提示", "请选择平面视图的视口"); return Result.Failed; } @@ -41,12 +41,15 @@ namespace RookieStation.Drawing.ExecuteCmds View legend = null; doc.Invoke(ts => { - legend = RsRevitUtils.CreateNewLegend(doc, "墙体图例", viewScale); + legend = RsRevitUtils.NewLegend(doc, "墙体图例", viewScale); }); doc.Invoke(ts => { - var items = GetData(doc); - CreateLegend(doc, items, legend); + var items = GetData(doc, viewport.ViewId); + if (items.Count > 0) + { + CreateLegendContent(doc, items, legend); + } }); doc.Invoke(ts => { @@ -60,7 +63,8 @@ namespace RookieStation.Drawing.ExecuteCmds } else { - TaskDialog.Show("温馨提示", "请打开图纸视图"); + message = "请打开图纸视图"; + //TaskDialog.Show("温馨提示", "请打开图纸视图"); return Result.Failed; } return Result.Succeeded; @@ -71,9 +75,9 @@ namespace RookieStation.Drawing.ExecuteCmds /// /// /// - private List GetData(Document doc) + private List GetData(Document doc, ElementId viewId) { - var walls = new FilteredElementCollector(doc).OfClass(typeof(Wall)).OfCategory(BuiltInCategory.OST_Walls); + var walls = new FilteredElementCollector(doc, viewId).OfClass(typeof(Wall)).OfCategory(BuiltInCategory.OST_Walls); var filledRegionTypes = new FilteredElementCollector(doc).OfClass(typeof(FilledRegionType)).OfCategory(BuiltInCategory.OST_DetailComponents); //按族分组 var wallTypeGroups = walls.GroupBy(g => g.Name); @@ -96,7 +100,7 @@ namespace RookieStation.Drawing.ExecuteCmds { var t = filledRegionTypes.ElementAt(i) as FilledRegionType; //通过名称,类型,把不需要的墙体过滤掉 - if (wallType.Name.Contains("墙饰面") || wallType.Name.Contains("踢脚线") || wallType.Kind != WallKind.Basic) + if (wallType.Name.Contains("墙饰面") || wallType.Name.Contains("脚线") || wallType.Name.Contains("墙基层") || wallType.Kind != WallKind.Basic) { continue; } @@ -170,7 +174,7 @@ namespace RookieStation.Drawing.ExecuteCmds } } - private void CreateLegend(Document doc, List data, View newLegend) + private void CreateLegendContent(Document doc, List data, View newLegend) { TextNoteType textNoteType = RsRevitUtils.GetOrNewTextNoteType(doc, UserConstant.TextSymbolName); double fontSize = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsDouble(); diff --git a/RookieStation/Drawing/ExecuteCmds/CreateWires.cs b/RookieStation/Drawing/ExecuteCmds/CreateWires.cs index d7d6556..aca75a3 100644 --- a/RookieStation/Drawing/ExecuteCmds/CreateWires.cs +++ b/RookieStation/Drawing/ExecuteCmds/CreateWires.cs @@ -2,9 +2,8 @@ using Autodesk.Revit.DB.Electrical; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; -using RookieStation.ParcelAreaModule.Views; using RookieStation.Utils; +using RookieStation.ParcelAreaModule.Views; using System; using System.Collections.Generic; using System.Linq; diff --git a/RookieStation/Drawing/ExecuteCmds/ManualAlignTags.cs b/RookieStation/Drawing/ExecuteCmds/ManualAlignTags.cs new file mode 100644 index 0000000..9ca328f --- /dev/null +++ b/RookieStation/Drawing/ExecuteCmds/ManualAlignTags.cs @@ -0,0 +1,88 @@ +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using Autodesk.Revit.UI.Selection; +using RookieStation.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RookieStation.Drawing.ExecuteCmds +{ + [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] + [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] + internal class ManualAlignTags : 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; + var view = doc.ActiveView; + var distance = 7 * doc.ActiveView.Scale / 304.8; + bool isContinue = true; + if (view.ViewType == ViewType.ThreeD) + { + message = "请在三维视图以外的视图使用该命令。"; + return Result.Failed; + } + try + { + while (isContinue) + { + var tags = uidoc.Selection.PickElementsByRectangle(new SelectFilter(), "请框选要整理成组的标记").Cast().ToList(); + if (tags.Count > 0) + { + //var referTag = uidoc.Selection.PickObject(ObjectType.Element, new SelectFilter(), "请选择基准标注"); + //var tags = uidoc.Selection.PickObjects(ObjectType.Element, new SelectFilter(), "请选择需要对齐的标注").Select(p => + //{ + // var tag = doc.GetElement(p) as IndependentTag; + // return tag; + //}); + //var baseTag = doc.GetElement(referTag) as IndependentTag; + doc.InvokeGroup(tg => + { + doc.Invoke(ts => + { + foreach (var tag in tags) + { + if (tag.LeaderEndCondition == LeaderEndCondition.Attached) + { + tag.LeaderEndCondition = LeaderEndCondition.Free; + tag.TagOrientation = TagOrientation.Horizontal; + } + } + }); + doc.Invoke(ts => + { + //平面或天花视图 + if (view.ViewType == ViewType.FloorPlan || view.ViewType == ViewType.CeilingPlan) + { + RsRevitUtils.ArrangePlaneTags(distance, tags); + } + //立面剖面 + else if (view.ViewType == ViewType.Section || view.ViewType == ViewType.Elevation) + { + RsRevitUtils.ArrangeElevationTags(view, distance, tags); + } + else if (view.ViewType == ViewType.Detail) + { + RsRevitUtils.ArrangeDetailTags(view, distance, tags); + } + }); + }, "手动整理标记"); + } + } + } + catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) + { + return Result.Succeeded; + } + + return Result.Succeeded; + } + } +} \ No newline at end of file diff --git a/RookieStation/Drawing/ExecuteCmds/UnifyViewportOnViewSheet.cs b/RookieStation/Drawing/ExecuteCmds/UnifyViewportOnViewSheet.cs index 3eaf1b4..66a1f64 100644 --- a/RookieStation/Drawing/ExecuteCmds/UnifyViewportOnViewSheet.cs +++ b/RookieStation/Drawing/ExecuteCmds/UnifyViewportOnViewSheet.cs @@ -1,7 +1,6 @@ using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Collections.Generic; diff --git a/RookieStation/Drawing/Views/WpfLegendCreator.xaml b/RookieStation/Drawing/Views/WpfLegendCreator.xaml index f6f212c..89035fc 100644 --- a/RookieStation/Drawing/Views/WpfLegendCreator.xaml +++ b/RookieStation/Drawing/Views/WpfLegendCreator.xaml @@ -1,8 +1,9 @@  - + + + + + + + + + + + \ No newline at end of file diff --git a/RookieStation/Drawing/Views/WpfLegendCreator.xaml.cs b/RookieStation/Drawing/Views/WpfLegendCreator.xaml.cs index c85da02..dbc14d3 100644 --- a/RookieStation/Drawing/Views/WpfLegendCreator.xaml.cs +++ b/RookieStation/Drawing/Views/WpfLegendCreator.xaml.cs @@ -19,9 +19,9 @@ namespace RookieStation.Drawing.Views /// /// WpfLegendCreator.xaml 的交互逻辑 /// - public partial class WpfLegendCreator + public partial class WpfArrangeTags { - public WpfLegendCreator() + public WpfArrangeTags() { InitializeComponent(); } diff --git a/RookieStation/Finishes/ExecuteCmds/CmdPlaceFloorFinishes.cs b/RookieStation/Finishes/ExecuteCmds/CmdPlaceFloorFinishes.cs index 67601d0..59f1245 100644 --- a/RookieStation/Finishes/ExecuteCmds/CmdPlaceFloorFinishes.cs +++ b/RookieStation/Finishes/ExecuteCmds/CmdPlaceFloorFinishes.cs @@ -2,9 +2,8 @@ using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; -using RookieStation.Finishes.Views; using RookieStation.Utils; +using RookieStation.Finishes.Views; using System; using System.Collections.Generic; using System.Linq; diff --git a/RookieStation/Finishes/ExecuteCmds/CmdPlaceWallFinishes.cs b/RookieStation/Finishes/ExecuteCmds/CmdPlaceWallFinishes.cs index f33032a..201af15 100644 --- a/RookieStation/Finishes/ExecuteCmds/CmdPlaceWallFinishes.cs +++ b/RookieStation/Finishes/ExecuteCmds/CmdPlaceWallFinishes.cs @@ -2,10 +2,9 @@ using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; +using RookieStation.Utils; using RookieStation.Finishes.Views; using RookieStation.RibbonMenu; -using RookieStation.Utils; using System; using System.Collections.Generic; using System.Linq; @@ -73,7 +72,8 @@ namespace RookieStation.Finishes.ExecuteCmds var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms); if (rooms.Count() == 0) { - TaskDialog.Show("温馨提示", "项目中当前没有房间"); + message = "项目中当前没有房间"; + //TaskDialog.Show("温馨提示", "项目中当前没有房间"); //message = "项目中当前没有房间"; return Result.Failed; } diff --git a/RookieStation/Finishes/ExecuteCmds/FloorFinishes.cs b/RookieStation/Finishes/ExecuteCmds/FloorFinishes.cs index 68db306..c86ed1a 100644 --- a/RookieStation/Finishes/ExecuteCmds/FloorFinishes.cs +++ b/RookieStation/Finishes/ExecuteCmds/FloorFinishes.cs @@ -3,7 +3,6 @@ using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using RookieStation.ProjectConfig; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Collections.Generic; @@ -28,8 +27,8 @@ namespace RookieStation.Finishes.ExecuteCmds var rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms); if (rooms.Count() == 0) { - //message = "项目中当前没有房间"; - TaskDialog.Show("温馨提示", "项目中当前没有房间"); + message = "项目中当前没有房间"; + //TaskDialog.Show("温馨提示", "项目中当前没有房间"); return Result.Failed; } WpfFloorFinishes floorCovering = CommonUtils.ShowDialog(); @@ -102,7 +101,7 @@ namespace RookieStation.Finishes.ExecuteCmds double lengthCount = basePoint.DistanceTo(referline.GetEndPoint(0)) + basePoint.DistanceTo(referline.GetEndPoint(1)); if (referline.Length - lengthCount > 0.001) { - MessageBox.Show("请选择基准线上的点", "温馨提示"); + TaskDialog.Show("温馨提示", "请选择基准线上的点"); return Result.Cancelled; } //if (basepoint.IsAlmostEqualTo(ml.GeometryCurve.GetEndPoint(0)) || basepoint.IsAlmostEqualTo(ml.GeometryCurve.GetEndPoint(1))) @@ -134,8 +133,9 @@ namespace RookieStation.Finishes.ExecuteCmds { if (endpoint1.DistanceTo(basePoint) < length) { + //message = "基准点与基准线端点距离太近"; System.Windows.MessageBox.Show("基准点与基准线端点距离太近"); - return Result.Cancelled; + return Result.Failed; } zdir1 = v1.CrossProduct(v0).Normalize(); //偏移的方向,直线的侧方向 diff --git a/RookieStation/MailingAreaModule/ExecuteCmds/CmdLogoExtrusion.cs b/RookieStation/MailingAreaModule/ExecuteCmds/CmdLogoExtrusion.cs index 2bfc178..e83a3b9 100644 --- a/RookieStation/MailingAreaModule/ExecuteCmds/CmdLogoExtrusion.cs +++ b/RookieStation/MailingAreaModule/ExecuteCmds/CmdLogoExtrusion.cs @@ -1,7 +1,6 @@ using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Collections.Generic; @@ -200,12 +199,12 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds Curve tempCurve = curves[i]; var baseEndXyz = initcurve.GetEndPoint(0); //把初始的第一个添加进集合 - if (tempCurve.GetEndPoint(0).IsAlmostEqualTo(baseEndXyz) || tempCurve.GetEndPoint(1).IsAlmostEqualTo(baseEndXyz))//可以为重合的线,做剔除 + if (tempCurve.GetEndPoint(0).IsAlmostEqualTo(baseEndXyz) || tempCurve.GetEndPoint(1).IsAlmostEqualTo(baseEndXyz))//可以为重合的线 { initCurveArray.Append(tempCurve); curves.Remove(tempCurve); //将tempcurve作为起点继续查找 - SearchCurveConnected(curves, tempCurve, initCurveArray, curveArrArray);//最后一次执行方法在此处,因为size为0,停止继续执行 + SearchCurveConnected(curves, tempCurve, initCurveArray, curveArrArray);//最后一次执行方法在此处,因为Count为0,停止继续执行 } //遍历完一个线串时,寻找下一个线串,即查找到最后,都找不到相连的曲线时 diff --git a/RookieStation/MailingAreaModule/ExecuteCmds/CmdPlaceReceptionArea.cs b/RookieStation/MailingAreaModule/ExecuteCmds/CmdPlaceReceptionArea.cs index d712a16..a816fea 100644 --- a/RookieStation/MailingAreaModule/ExecuteCmds/CmdPlaceReceptionArea.cs +++ b/RookieStation/MailingAreaModule/ExecuteCmds/CmdPlaceReceptionArea.cs @@ -3,7 +3,6 @@ using Autodesk.Revit.DB.Events; using Autodesk.Revit.DB.Structure; using Autodesk.Revit.UI; using RookieStation.ProjectConfig; -using RookieStation.Extension; using RookieStation.Utils; using System; using System.Collections.Generic; @@ -54,7 +53,7 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds //阻燃板厚度 double fireRetardantBoardWidth = 15 / 304.8; //踢脚线高度 - double skirtingLineHeight = 50 / 304.8; + double skirtingLineHeight = 60 / 304.8; //踢脚线厚度 double skirtingLineWidth = 1.2 / 304.8; //铝塑板长度 @@ -76,6 +75,7 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds //灯高度 double lampsHeight = 0; string fullFileName = string.Empty; + bool? isGroup = false; if (receptionAreaPlacement.DialogResult == true) { @@ -92,6 +92,7 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds lampsInterval = receptionAreaPlacement.LampsInterval / 304.8; lampsHeight = receptionAreaPlacement.LampsHeight / 304.8; fullFileName = receptionAreaPlacement.DwgPath; + isGroup = receptionAreaPlacement.IsGroup; } else { @@ -102,16 +103,16 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds { return Result.Failed; } + FamilySymbol guideSymbol = RsRevitUtils.GetGuideSymbol(doc); + if (guideSymbol == null) + { + message = "定位族丢失"; + return Result.Failed; + } return doc.InvokeGroup(tg => { try { - FamilySymbol guideSymbol = RsRevitUtils.GetGuideSymbol(doc); - if (guideSymbol == null) - { - TaskDialog.Show("错误", "定位族丢失"); - return Result.Failed; - } eleIdsAdded.Clear(); uiapp.Application.DocumentChanged += Application_DocumentChanged; uidoc.PromptForFamilyInstancePlacement(guideSymbol); @@ -130,11 +131,11 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds Line referline = RsRevitUtils.GetGuideGeometryAndDeleteGuide(doc, eleIdsAdded); double backgroundWallLength = referline.Length; - if (backgroundWallLength < 3000 / 304.8) - { - TaskDialog.Show("温馨提示", "背景墙长度需大于3000mm,否则无法生成寄件接待台"); - return Result.Cancelled; - } + //if (backgroundWallLength < 3000 / 304.8) + //{ + // TaskDialog.Show("温馨提示", "背景墙长度需大于3000mm,否则无法生成寄件接待台"); + // return Result.Cancelled; + //} List wallIds = new List(); WallType fireRetardantBoard = RsRevitUtils.GetWallTypeByName(doc, "阻燃板"); WallType greyEmulsionPaint = RsRevitUtils.GetWallTypeByName(doc, "灰色乳胶漆"); @@ -199,7 +200,10 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds } doc.Regenerate(); - doc.Create.NewGroup(wallIds); + if (isGroup == true) + { + doc.Create.NewGroup(wallIds); + } }, "背景墙创建"); CreateCaiNiaoDuty(doc, skirtingLineHeight + aluminumPlasticPanelHeight, greyEmulsionPaintWidth + fireRetardantBoardWidth, referline); @@ -426,7 +430,7 @@ namespace RookieStation.MailingAreaModule.ExecuteCmds { doc.Invoke(ts => { - string file = UserConstant.FamilyLibraryDirectory + "标识标牌\\菜鸟使命.rfa"; + string file = UserConstant.FamilyLibraryDirectory + "标识标牌\\菜鸟使命贴字.rfa"; var dutySymbol = RsRevitUtils.GetAndActiveDefaultFamilySymbol(doc, file); var endPoint = referline.GetEndPoint(0); diff --git a/RookieStation/MailingAreaModule/Views/WpfReceptionArea.xaml b/RookieStation/MailingAreaModule/Views/WpfReceptionArea.xaml index 0ecc35e..6f130fb 100644 --- a/RookieStation/MailingAreaModule/Views/WpfReceptionArea.xaml +++ b/RookieStation/MailingAreaModule/Views/WpfReceptionArea.xaml @@ -128,11 +128,16 @@ ToolTip="双击选择Dwg文件路径" /> +