添加项目文件。

This commit is contained in:
GG Z
2024-09-22 11:05:41 +08:00
parent fb5d55723a
commit 49ceaae6a8
764 changed files with 78850 additions and 0 deletions

View File

@@ -0,0 +1,330 @@
using System.Runtime.InteropServices;
using System.Windows;
using Autodesk.Revit.UI;
using Nice3point.Revit.Toolkit.External;
using Nice3point.Revit.Toolkit.External.Handlers;
using Sai.RvKits.ModelManager;
using Sai.RvKits.Properties;
using Sai.RvKits.RvCivil;
using Sai.RvKits.RvCommon;
using Sai.RvKits.RvFamily;
using Sai.RvKits.RvIndependent;
using Sai.RvKits.RvMEP;
using Sai.RvKits.RvView;
namespace Sai.RvKits.UIRibbon;
public class RvApp : ExternalApplication
{
private static readonly string TabName = Settings.Default.TabName;
public static AsyncEventHandler SaveHandler { get; } = new();
private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
{
SaveHandler.RaiseAsync(app =>
{
#if REVIT2018
if (app.ActiveUIDocument.Document.IsModified)
{
app.ActiveUIDocument.Document.Save();
}
#else
if (!app.ActiveUIDocument.Document.IsBackgroundCalculationInProgress() && app.ActiveUIDocument.Document.IsModified)
{
app.ActiveUIDocument.Document.Save();
}
#endif
});
}
public override void OnStartup()
{
UiApplication.CreateRibbonTab(Settings.Default.TabName);
var ribbon = Autodesk.Windows.ComponentManager.Ribbon;
Autodesk.Windows.RibbonTab rt = null;
foreach (var tab in ribbon.Tabs)
{
if (tab.Name == Settings.Default.TabName)
{
rt = tab;
ribbon.Tabs.Remove(tab);
break;
}
}
var versionNumber = UiApplication.Application.VersionNumber;
var subVersionNumber = UiApplication.Application.SubVersionNumber;
var subVersion = new Version(subVersionNumber);
var minVersion = new Version("2018.1");
if (versionNumber == "2018" && subVersion < minVersion)
{
MessageBox.Show("版本小于2018.1,部分功能可能无法使用请使用升级补丁升级Revit软件", "提示");
}
ribbon.Tabs.Insert(0, rt);
CivilApp(Application);
MEPApp(Application);
_ = new ModifyTabApp(UiApplication);
_ = new DrawingViewApp(Application);
CreateCommonTools(Application);
CreateIndependentTools(Application);
_ = new TabManagerApp(Application);
_ = new FamilyApp(Application, UiApplication);
if (Properties.Settings.Default.AutoSave)
{
Variables.Timer.Elapsed -= OnTimedEvent;
Variables.Timer.Elapsed += OnTimedEvent;
Variables.Timer.Interval = Properties.Settings.Default.AutoSaveIntervalTime * 60 * 1000;
Variables.Timer.Start();
}
}
public static void CivilApp(UIControlledApplication application)
{
var ribbonPanel = application.CreateRibbonPanel(TabName, "土建装饰");
var floorFinishesPbd = UIAssist.NewButtonData<FloorFinishesCmd>(
"房间饰面",
Resources.tites_32px,
Resources.tites_16px,
"创建房间饰面"
);
var curtainFinishesPbd = UIAssist.NewButtonData<BricksFinishesCmd>(
"铺贴饰面",
Resources.finishes_32px,
Resources.finishes_16px
);
var wallFinishesPbd = UIAssist.NewButtonData<WallFinishesCmd>(
"墙饰面",
Resources.bricks_32px,
Resources.bricks_16px
);
var slopeFloorPbd = UIAssist.NewButtonData<SlopedFloorCmd>(
"坡度楼板",
Resources.slope_floor_32px,
Resources.slope_floor_16px,
"分别选择两个楼板的两条平行线创建坡度楼板"
);
var createOpeningsPbd = UIAssist.NewButtonData<CreateOpeningsCmd>(
"创建洞口",
Resources.openings_32px,
Resources.openings_16px,
"根据管线创建洞口"
).SetAvailability<EnableInView3D>();
var modelSplitPbd = UIAssist.NewButtonData<ModelSplitterCmd>(
"模型拆分",
Resources.separation_32px,
Resources.separation_16px,
"按标高拆分为单独的文件"
);
var splitComPbd = UIAssist.NewButtonData<SplitComsByLevelCmd>(
"分割墙柱",
Resources.model_split_32px,
Resources.model_split_16px,
"按标高拆分墙、柱"
);
var connectPbd = UIAssist.NewButtonData<CivilConnectionCmd>(
"土建连接",
Resources.connect_32px,
Resources.connect_16px,
"土建构件连接处理"
);
ribbonPanel.AddStackedItems(slopeFloorPbd, connectPbd, createOpeningsPbd);
ribbonPanel.AddStackedItems(splitComPbd, modelSplitPbd);
ribbonPanel.AddStackedItems(wallFinishesPbd, floorFinishesPbd, curtainFinishesPbd);
}
private static void MEPApp(UIControlledApplication application)
{
var panel = application.CreateRibbonPanel(TabName, "机电");
var standMepCurve = UIAssist.NewButtonData<StandMepCurveCmd, EnableInViewPlan>(
"创建立管",
null,
Resources.stand_mepcurve_16px
).SetAvailability<EnableInViewPlan>();
var bloomConnector = UIAssist.NewButtonData<BloomConnectorCmd>("引出管线", null, Resources.bloom_16px, "从连接件生成管线");
var anyConnect = UIAssist.NewButtonData<AnyConnectCmd>("任意连接", null, Resources.any_connect_16px, "选择任意管线进行连接");
var moveConnect = UIAssist.NewButtonData<MoveConnectCmd>(
"移动连接",
null,
Resources.move_connect_16px,
"根据最近距离的未连接的连接件,将其连接或角度过大则对齐连接"
);
var breakMepCurveBtn = UIAssist.NewButtonData<BreakMEPCurveCmd>(
"打断管线",
null,
Resources.break_mepcurve_16px,
"将管线打断成两根管线并保留打断后的连接关系"
);
var disConnect = UIAssist.NewButtonData<DisconnectCmd>(
"取消连接",
null,
Resources.disconnect_16px,
"取消设备、管线之间的连接"
);
var correctSlope = UIAssist.NewButtonData<CorrectMEPCurveSlopeCmd>(
"坡度修正",
null,
Resources.correct_mep_16px,
"修正管线的坡度"
);
var moveMEP = UIAssist.NewButtonData<MoveMEPCmd>(
"移动管线",
Resources.move_MEP_32px,
Resources.move_MEP_16px,
"基于管线底部参照或距离,上下移动管线"
);
var clashReport = UIAssist.NewButtonData<ClashReportCmd>(
"碰撞报告",
Resources.clash_report_32px,
Resources.clash_report_16px,
"根据Revit生成的报告快速定位碰撞构件"
);
var terminalConnect = UIAssist.NewButtonData<TerminalConnectToDuctCmd>(
"连接风口",
Resources.air_terminal_32px,
Resources.air_terminal_16px
);
var clashResolve = UIAssist.NewButtonData<ClashResolveCmd>(
"碰撞处理",
Resources.clash_resolve_32px,
Resources.clash_resolve_16px
);
var headroomCheck = UIAssist.NewButtonData<HeadroomCheckCmd>(
"净高检查",
Resources.head_room_32px,
Resources.head_room_16px
);
var flipWorkplane = UIAssist.NewButtonData<FlipWorkplaneCmd>(
"翻转工作平面",
Resources.flip_workplane_32px,
Resources.flip_workplane_16px,
"将可以翻转工作平面的族实例,翻转其工作平面"
);
var rotateInstance = UIAssist.NewButtonData<RotateInstanceCmd>(
"旋转实例",
Resources.rotate_instance_32px,
Resources.rotate_instance_16px,
"将族实例根据已连接的情况进行旋转"
);
panel.AddStackedItems(standMepCurve, anyConnect, moveConnect);
panel.AddStackedItems(correctSlope, moveMEP, bloomConnector);
panel.AddStackedItems(breakMepCurveBtn, disConnect, terminalConnect);
panel.AddStackedItems(flipWorkplane, rotateInstance);
panel.AddStackedItems(clashResolve, clashReport, headroomCheck);
}
private static void CreateCommonTools(UIControlledApplication application)
{
var ribbonPanel = application.CreateRibbonPanel(TabName, "通用工具");
//PushButtonData setAllViewDisplayPbd =
// new PushButtonData("视图显示", "视图显示", AddInPath, typeof(SetAllViewDisplayCmd).FullName)
// {
// ImageUtil.ConvertToBitmapSource(Resources.cmd_16px),
// ImageUtil.ConvertToBitmapSource(Resources.cmd_16px),
// "以当前视图的设置,应用到其他视图显示样式"
// };
//PushButtonData dataStoragePbd =
// new PushButtonData("扩展数据", "扩展数据", AddInPath, typeof(DataStorageCmd).FullName)
// {
// ImageUtil.ConvertToBitmapSource(Resources.entity_32px),
// ImageUtil.ConvertToBitmapSource(Resources.entity_32px),
// "存储内容到扩展数据"
// };
var modelCheckPbd = UIAssist.NewButtonData<ModelCheckCmd>(
"模型检查",
Resources.model_check_16px,
Resources.model_check_32px,
"对模型进行多项要求的检查"
);
var templateManager = UIAssist.NewButtonData<TemplateManagerCmd>(
"样板定制",
Resources.template_32px,
Resources.template_16px,
"对项目样板进行批量处理"
);
var autoSavePbd = UIAssist.NewButtonData<AutoSaveCmd>("定时保存", Resources.save_32px, Resources.save_16px);
var purgeBtn = UIAssist.NewButtonData<PureModelCmd>(
"清理模型",
Resources.purge_32px,
Resources.purge_16px,
"清理并压缩模型文件大小"
);
var pipesCreatorPbd = UIAssist.NewButtonData<PipesCreatorCmd>(
"管线生成",
Resources.pipe_creator_32px,
Resources.pipe_creator_16px,
"根据dwg图纸生成管线"
);
var instanceCreatorPbd = UIAssist.NewButtonData<InstanceCreatorCmd>(
"实例布置",
Resources.instance_creator_32px,
Resources.instance_creator_16px,
"根据dwg块进行族实例布置"
);
var modelByCurveCreatorPbd = UIAssist.NewButtonData<ModelByCurveCreatorCmd>(
"曲线布置",
Resources.model_by_curve_32px,
Resources.model_by_curve_16px,
"根据dwg曲线或模型线对轮廓族放样或者布置族实例"
);
var toggleBackgroundPbd = UIAssist.NewButtonData<SwitchBackgroundCmd>(
"切换背景",
Resources.background_32px,
Resources.background_16px,
"切换视口背景颜色"
);
ribbonPanel.AddItem(modelCheckPbd);
ribbonPanel.AddItem(templateManager);
ribbonPanel.AddStackedItems(instanceCreatorPbd, modelByCurveCreatorPbd, pipesCreatorPbd);
ribbonPanel.AddStackedItems(toggleBackgroundPbd, purgeBtn, autoSavePbd);
//ribbonPanel.AddItem(toggleBackgroundPbd);
//ribbonPanel.AddItem(autoSavePbd);
//RadioButtonGroupData groupData = new RadioButtonGroupData("定位");
//RadioButtonGroup radioBtnGroup = ribbonPanel.AddItem(groupData) as RadioButtonGroup;
//radioBtnGroup.AddItem(updateViewBySelectElemPbd);
//var tg2 = radioBtnGroup.AddItem(updateViewBySelectElemPbd);
//tg2.Visible = false;
//var group = ribbonPanel.AddRadioButtonGroup(groupData, updateViewBySelectElemPbd, updateViewBySelectElemPbd1);
}
private static void CreateIndependentTools(UIControlledApplication application)
{
var ribbonPanel = application.CreateRibbonPanel(TabName, "独立工具");
var networkCreator = UIAssist.NewButtonData<NetworkCreatorCmd>(
"物探管网",
Resources.pipe_net_32px,
Resources.pipe_net_16px
);
var metroGauges = UIAssist.NewButtonData<MetroGaugesCmd>(
"限界轮廓",
Resources.gauges_32px,
Resources.gauges_16px,
"创建限界轮廓"
);
var metroTunnel = UIAssist.NewButtonData<MetroTunnelCmd>(
"盾构隧道",
Resources.gauges_32px,
Resources.gauges_16px,
"创建盾构隧道"
);
ribbonPanel.AddSplitButton("独立工具", networkCreator, metroTunnel, metroGauges);
//ribbonPanel.AddItem(networkCreator);
//ribbonPanel.AddItem(metroGauges);
//ribbonPanel.AddItem(metroTunnel);
//ribbonPanel.AddSplitButton("独立工具", networkCreator, metroGauges, metroTunnel);
}
}