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文件路径" />
+