TestCommand.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. using Autodesk.Revit.Attributes;
  2. using Autodesk.Revit.DB;
  3. using Autodesk.Revit.DB.Plumbing;
  4. using Autodesk.Revit.UI;
  5. using Autodesk.Revit.UI.Selection;
  6. using SAGA.DotNetUtils;
  7. using SAGA.DotNetUtils.Data;
  8. using SAGA.DotNetUtils.Extend;
  9. using SAGA.DotNetUtils.Geometry;
  10. using SAGA.MBI.Calc;
  11. using SAGA.MBI.DataArrange;
  12. using SAGA.MBI.Interaction;
  13. using SAGA.MBI.Model;
  14. using SAGA.MBI.RevitExport;
  15. using SAGA.MBI.Test;
  16. using SAGA.MBI.Tools;
  17. using SAGA.MBI.WinView.Upload;
  18. using SAGA.RevitUtils;
  19. using SAGA.RevitUtils.Extends;
  20. using SAGA.RevitUtils.ExtensibleStorage;
  21. using SAGA.RevitUtils.MEP;
  22. using System;
  23. using System.Collections.Generic;
  24. using System.Diagnostics;
  25. using System.IO;
  26. using System.Linq;
  27. using System.Text.RegularExpressions;
  28. using Color = Autodesk.Revit.DB.Color;
  29. namespace SAGA.MBI
  30. {
  31. #region 测试命令
  32. /// <summary>
  33. ///
  34. /// </summary>
  35. [Transaction(TransactionMode.Manual)]
  36. [Regeneration(RegenerationOption.Manual)]
  37. public class EquipInSpaceSpeedTest : ExternalCommand, IExternalCommandAvailability
  38. {
  39. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  40. {
  41. try
  42. {
  43. //var fi = ExternalDataWrapper.Current.UiApp.GetSelectedElement() as FamilyInstance;
  44. //var space = fi.GetReferenceSpace();
  45. //string str = "",str2="";
  46. //while (true)
  47. //{
  48. // if (space != null)
  49. // {
  50. // List<XYZ> spaceVertex = space.GetBoundaryVertexes().FirstOrDefault();
  51. // if (spaceVertex == null)
  52. // {
  53. // str = "Boundary 为Null";
  54. // break;
  55. // }
  56. // var xyz = fi.GetLocationPointMBIXYZ();
  57. // str = "Geometry Intersection Result:" + xyz.PointInPolygonByRay(spaceVertex);
  58. // str2 = "Geometry2D Intersection Result:" + Geometry2D.InSidePolygon(spaceVertex.Count,
  59. // spaceVertex.Select(t => t.ToPointD()).ToArray(), xyz.ToPointD());
  60. // }
  61. // break;
  62. //}
  63. //MessageShowBase.Infomation($"{str}"+"\r\n"+$"{str2}");
  64. var doc = commandData.View.Document;
  65. var spaces = doc.GetSpaces().Where(t => t.IsValidObject).ToList();
  66. var fis = doc.GetMbiElements().Where(t => t.IsEquipmentPart() || t.IsEquipment());
  67. List<List<List<XYZ>>> spaceVertexes = spaces.Select(t => t.GetBoundaryVertexes()).ToList();
  68. List<KeyValuePair<Element, XYZ>> keyValuePairs = fis.Select(t => new KeyValuePair<Element, XYZ>(t, t.GetLocationPointMBIXYZ())).ToList();
  69. List<KeyValuePair<Element, XYZ>> keyValuePairs_bak = new List<KeyValuePair<Element, XYZ>>();
  70. long rtime = 0, gtime = 0;
  71. int rcount = 0, gcount = 0;
  72. Stopwatch watch = new Stopwatch();
  73. #region 使用Revit计算
  74. watch.Start();
  75. foreach (var pair in keyValuePairs)
  76. {
  77. Element fi = pair.Key;
  78. var space = fi.GetReferenceSpace(spaces);
  79. if (space != null)
  80. {
  81. rcount++;
  82. keyValuePairs_bak.Add(pair);
  83. }
  84. }
  85. watch.Stop();
  86. rtime = watch.ElapsedMilliseconds;
  87. #endregion
  88. #region 使用Geomety计算
  89. List<List<XYZ>> spaceBorderVertexes = spaceVertexes.Select(t => t.FirstOrDefault()).ToList();
  90. watch.Reset();
  91. watch.Start();
  92. foreach (var pair in keyValuePairs)
  93. {
  94. XYZ xyz = pair.Value;
  95. double z = xyz.Z;
  96. var point = xyz.ToPointD();
  97. foreach (var spaceVertex in spaceBorderVertexes)
  98. {
  99. if (spaceVertex == null) continue;
  100. double minz = spaceVertex.Min(t => t.Z);
  101. double maxz = spaceVertex.Max(t => t.Z);
  102. //if (z.IsBetween(minz, maxz))
  103. {
  104. if (Geometry2D.InSidePolygon(spaceVertex.Select(t => t.ToPointD()).ToArray(), point) != 2)
  105. //if (xyz.PointInPolygonByRay(spaceVertex) != -1)
  106. {
  107. gcount++;
  108. keyValuePairs_bak.Remove(pair);
  109. break;
  110. }
  111. }
  112. }
  113. }
  114. watch.Stop();
  115. gtime = watch.ElapsedMilliseconds;
  116. #endregion
  117. MessageShow.Infomation($"Revit计算耗时{rtime},共识别出{rcount}个空间" + "\r\n" +
  118. $"Geometry计算耗时{gtime},共识别出{gcount}个空间" + "\r\n" +
  119. $"{string.Join(",", keyValuePairs_bak.Select(t => t.Key.Id))}");
  120. }
  121. catch (Exception e)
  122. {
  123. MessageShow.Show(e);
  124. return Result.Cancelled;
  125. }
  126. return Result.Succeeded;
  127. }
  128. }
  129. #endregion
  130. /// <summary>
  131. /// 批量导出底图
  132. /// </summary>
  133. [Transaction(TransactionMode.Manual)]
  134. [Regeneration(RegenerationOption.Manual)]
  135. public class UpdateBaseMapCommand : ExternalCommand, IExternalCommandAvailability
  136. {
  137. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  138. {
  139. try
  140. {
  141. ReuploadBaseMap.Execute();
  142. }
  143. catch (Exception e)
  144. {
  145. MessageShow.Show(e);
  146. return Result.Cancelled;
  147. }
  148. return Result.Succeeded;
  149. }
  150. }
  151. /// <summary>
  152. /// 上传当前楼层数据
  153. /// </summary>
  154. [Transaction(TransactionMode.Manual)]
  155. [Regeneration(RegenerationOption.Manual)]
  156. public class ExportMbiModelCommand : ExternalCommand, IExternalCommandAvailability
  157. {
  158. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  159. {
  160. try
  161. {
  162. var result = MessageShow.Question2("是否是整个项目导出");
  163. switch (result)
  164. {
  165. case System.Windows.Forms.DialogResult.Yes:
  166. {
  167. var floors = DalUploadFloor.GetHasFileFloors();
  168. List<CalcContext> contexts = new List<CalcContext>();
  169. foreach (UploadFloor floor in floors)
  170. {
  171. contexts.Add(new CalcContext(floor.MFloor));
  172. }
  173. MBIModelInfoUpload.UpdateMbiInfo(contexts);
  174. break;
  175. }
  176. case System.Windows.Forms.DialogResult.No:
  177. {
  178. var doc = ExternalDataWrapper.Current.Doc;
  179. MbiElementManager.ExecuteExport(doc);
  180. var floorId = ExternalDataWrapper.Current.Doc.PathName.GetFileName();
  181. string sagaName = doc.GetUseView()?.Name;
  182. MBIModelInfoUpload.UploadMbiInfo(floorId, sagaName);
  183. break;
  184. }
  185. }
  186. }
  187. catch (Exception e)
  188. {
  189. MessageShow.Show(e);
  190. return Result.Cancelled;
  191. }
  192. return Result.Succeeded;
  193. }
  194. }
  195. /// <summary>
  196. /// 检查是否包含连接模型
  197. /// </summary>
  198. [Transaction(TransactionMode.Manual)]
  199. [Regeneration(RegenerationOption.Manual)]
  200. public class CheckContainLinkCommand : ExternalCommand, IExternalCommandAvailability
  201. {
  202. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  203. {
  204. var floors = DalUploadFloor.GetHasFileFloors();
  205. List<CalcContext> contexts = new List<CalcContext>();
  206. foreach (UploadFloor floor in floors)
  207. {
  208. contexts.Add(new CalcContext(floor.MFloor));
  209. }
  210. #region 检测连接模型
  211. Dictionary<string, bool> results = new Dictionary<string, bool>();
  212. foreach (var context in contexts)
  213. {
  214. if (context == null) continue;
  215. try
  216. {
  217. context.OpenDocument();
  218. Document doc = context.RevitDoc;
  219. MbiElementManager.ExecuteExport(doc);
  220. var floorId = doc.PathName.GetFileName();
  221. var ins = doc.FilterElements<RevitLinkInstance>();
  222. if (ins.Any())
  223. {
  224. results[floorId] = false;
  225. }
  226. }
  227. catch (Exception)
  228. {
  229. }
  230. finally
  231. {
  232. context.CloseDocument();
  233. }
  234. #endregion
  235. }
  236. if (results.Any())
  237. {
  238. MessageShow.Infomation(string.Join(";", results.Keys));
  239. }
  240. else
  241. {
  242. MessageShow.Infomation("任何楼层,均不含连接模型");
  243. }
  244. return Result.Succeeded;
  245. }
  246. public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
  247. {
  248. return true;
  249. }
  250. }
  251. /// <summary>
  252. /// 管道连接设备
  253. /// </summary>
  254. [Transaction(TransactionMode.Manual)]
  255. [Regeneration(RegenerationOption.Manual)]
  256. public class UpdatePipeSystemCommand : ExternalCommand
  257. {
  258. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  259. {
  260. try
  261. {
  262. var pickElement = ExternalDataWrapper.Current.UiApp.PickElement("请选择水管", new PipeFilter());
  263. if (pickElement == null)
  264. {
  265. return Result.Succeeded;
  266. }
  267. using (Transaction tran = new Transaction(ExternalDataWrapper.Current.Doc, "连接"))
  268. {
  269. try
  270. {
  271. tran.Start();
  272. var equipment = ExternalDataWrapper.Current.UiApp.PickElement("选择设备");
  273. var pipeConnector = pickElement.GetConnectors(Domain.DomainPiping).FirstOrDefault(c => !c.IsConnected);
  274. var equipmentConnector = equipment.GetConnectors(Domain.DomainPiping).FirstOrDefault(c => !c.IsConnected);
  275. if (pipeConnector != null && equipmentConnector != null)
  276. {
  277. pipeConnector.ConnectTo(equipmentConnector);
  278. }
  279. tran.Commit();
  280. }
  281. catch (Exception ex)
  282. {
  283. MessageShow.Show(ex);
  284. tran.RollBack();
  285. }
  286. }
  287. }
  288. catch (Exception e)
  289. {
  290. MessageShow.Show(e);
  291. return Result.Cancelled;
  292. }
  293. return Result.Succeeded;
  294. }
  295. public class PipeFilter : ISelectionFilter
  296. {
  297. public bool AllowElement(Element elem)
  298. {
  299. return elem is Pipe;
  300. }
  301. public bool AllowReference(Reference reference, XYZ position)
  302. {
  303. return true;
  304. }
  305. }
  306. }
  307. /// <summary>
  308. /// 检测设备位置标记
  309. /// </summary>
  310. [Transaction(TransactionMode.Manual)]
  311. [Regeneration(RegenerationOption.Manual)]
  312. public class CheckLocationCommand : ExternalCommand, IExternalCommandAvailability
  313. {
  314. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  315. {
  316. try
  317. {
  318. var pickElement = ExternalDataWrapper.Current.UiApp.PickElement("请选择设备", new EquipmentFilter()) as FamilyInstance;
  319. if (pickElement == null)
  320. {
  321. return Result.Succeeded;
  322. }
  323. using (Transaction tran = new Transaction(ExternalDataWrapper.Current.Doc, "显示"))
  324. {
  325. try
  326. {
  327. tran.Start();
  328. var doc = ExternalDataWrapper.Current.Doc;
  329. var s = pickElement.GetLocationPointMBIXYZ();
  330. DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));
  331. var solid = SolidUtil.CreateSphereAtPoint(s, 1);
  332. ds.AppendShape(new List<GeometryObject>() { solid });
  333. SolidUtil.SetColor(ds, new Color(255, 0, 0));
  334. tran.Commit();
  335. ExternalDataWrapper.Current.UiApp.SetShowElements(new List<Element>() { ds });
  336. }
  337. catch (Exception ex)
  338. {
  339. MessageShow.Show(ex);
  340. tran.RollBack();
  341. }
  342. }
  343. }
  344. catch (Exception e)
  345. {
  346. MessageShow.Show(e);
  347. return Result.Cancelled;
  348. }
  349. return Result.Succeeded;
  350. }
  351. public class EquipmentFilter : ISelectionFilter
  352. {
  353. public bool AllowElement(Element elem)
  354. {
  355. return elem is FamilyInstance;
  356. }
  357. public bool AllowReference(Reference reference, XYZ position)
  358. {
  359. return true;
  360. }
  361. }
  362. }
  363. /// <summary>
  364. /// 测试多项目读取
  365. /// </summary>
  366. [Transaction(TransactionMode.Manual)]
  367. [Regeneration(RegenerationOption.Manual)]
  368. public class TestMultipleReadDocCommand : ExternalCommand
  369. {
  370. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  371. {
  372. try
  373. {
  374. var floors = DalProjectTree.GetAllFloors(false);
  375. var floor = floors.FirstOrDefault();
  376. var doc = ExternalDataWrapper.Current.App.OpenDocumentFile(floor.FullPath);
  377. var eles = doc.GetAllElements();
  378. string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), $"{floor}_{System.DateTime.Now.Millisecond}.txt");
  379. //File.Create(path);
  380. foreach (Element element in eles)
  381. {
  382. File.AppendAllText(path, $"{element.Id}:{element.Name}\r\n");
  383. }
  384. }
  385. catch (Exception e)
  386. {
  387. MessageShow.Show(e);
  388. return Result.Cancelled;
  389. }
  390. return Result.Succeeded;
  391. }
  392. public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
  393. {
  394. return true;
  395. }
  396. }
  397. /// <summary>
  398. /// 掉转阀件方向
  399. /// </summary>
  400. [Transaction(TransactionMode.Manual)]
  401. [Regeneration(RegenerationOption.Manual)]
  402. public class ReDirectionCommand : ExternalCommand
  403. {
  404. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  405. {
  406. using (Transaction tran = new Transaction(ExternalDataWrapper.Current.Doc, "调整阀门"))
  407. {
  408. tran.Start();
  409. try
  410. {
  411. var pickElement = ExternalDataWrapper.Current.UiApp.PickElement("请选择阀件", typeof(FamilyInstance)) as FamilyInstance;
  412. if (pickElement == null)
  413. {
  414. return Result.Succeeded;
  415. }
  416. var handling = pickElement.HandOrientation;
  417. var facing = pickElement.FacingOrientation;
  418. var location = pickElement.GetLocationPoint();
  419. var axis = location.NewLine(location + handling.CrossProduct(facing));
  420. var connectors = pickElement.GetAllConnectors();
  421. List<Connector> refConnectors = new List<Connector>();
  422. foreach (var connector in connectors)
  423. {
  424. if (!ConnectorType.Physical.HasFlag(connector.ConnectorType))
  425. {
  426. continue;
  427. }
  428. var tempRefs = connector.GetReferenceConnectors();
  429. foreach (var tempRef in tempRefs)
  430. {
  431. if (ConnectorType.Physical.HasFlag(tempRef.ConnectorType) && tempRef.IsConnectedTo(connector))
  432. {
  433. connector.DisconnectFrom(tempRef);
  434. refConnectors.Add(tempRef);
  435. }
  436. }
  437. }
  438. ElementTransformUtils.RotateElement(pickElement.Document, pickElement.Id, axis, Math.PI);
  439. pickElement.Document.Regenerate();
  440. connectors = pickElement.GetAllConnectors();
  441. for (int i = 0; i < refConnectors.Count; i++)
  442. {
  443. var refCon = refConnectors[i];
  444. if (refCon == null)
  445. continue;
  446. var maxLength = double.MaxValue;
  447. Connector bConnector = null;
  448. foreach (var connector in connectors)
  449. {
  450. var newLength = refCon.Origin.Subtract(connector.Origin).GetLength();
  451. if (newLength < maxLength && !connector.IsConnected)
  452. {
  453. maxLength = newLength;
  454. bConnector = connector;
  455. }
  456. }
  457. if (bConnector != null)
  458. {
  459. bConnector.ConnectTo(refCon);
  460. }
  461. }
  462. tran.Commit();
  463. }
  464. catch (Exception e)
  465. {
  466. tran.RollBack();
  467. MessageShow.Show(e);
  468. return Result.Cancelled;
  469. }
  470. }
  471. return Result.Succeeded;
  472. }
  473. public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
  474. {
  475. return true;
  476. }
  477. }
  478. /// <summary>
  479. /// 更新标高名称
  480. /// </summary>
  481. [Transaction(TransactionMode.Manual)]
  482. [Regeneration(RegenerationOption.Manual)]
  483. public class UpdateLevelNameCommand : ExternalCommand
  484. {
  485. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  486. {
  487. var document = ExternalDataWrapper.Current.Doc;
  488. using (Transaction tran = new Transaction(document, "版本测试"))
  489. {
  490. tran.Start();
  491. try
  492. {
  493. var infoOld = ExternalDataWrapper.Current.Doc.ProjectInformation.GetSimpleClass<ModelFileInformation>();
  494. if (infoOld == null)
  495. {
  496. infoOld = new ModelFileInformation() { ProjectId = "pj1" };
  497. }
  498. else
  499. {
  500. infoOld.ProjectId = infoOld.ProjectId + "a";
  501. }
  502. ExternalDataWrapper.Current.Doc.ProjectInformation.SetSimpleClass(infoOld);
  503. tran.Commit();
  504. }
  505. catch (Exception e)
  506. {
  507. tran.RollBack();
  508. MessageShow.Infomation(string.Format("{0}:失败", e.ToString()));
  509. }
  510. }
  511. return Result.Succeeded;
  512. var result = System.Windows.Forms.DialogResult.No;//MessageShow.Question2("是修改整个项目(【是】整个项目;【否】当前打开模型)");
  513. switch (result)
  514. {
  515. case System.Windows.Forms.DialogResult.Yes:
  516. {
  517. var floors = DalUploadFloor.GetHasFileFloors();
  518. List<CalcContext> contexts = new List<CalcContext>();
  519. foreach (UploadFloor floor in floors)
  520. {
  521. contexts.Add(new CalcContext(floor.MFloor));
  522. }
  523. #region 修改所有项目文件
  524. foreach (var context in contexts)
  525. {
  526. if (context == null) continue;
  527. try
  528. {
  529. context.OpenDocument();
  530. Document doc = context.RevitDoc;
  531. UpdateLevleName(doc);
  532. }
  533. catch (Exception)
  534. {
  535. }
  536. finally
  537. {
  538. context.CloseDocument();
  539. }
  540. }
  541. #endregion
  542. break;
  543. }
  544. case System.Windows.Forms.DialogResult.No:
  545. {
  546. //MbiElementManager.ExecuteExport(ExternalDataWrapper.Current.Doc);
  547. UpdateLevleName(ExternalDataWrapper.Current.Doc);
  548. break;
  549. }
  550. }
  551. return Result.Succeeded;
  552. }
  553. private void UpdateLevleName(Document document)
  554. {
  555. using (Transaction tran = new Transaction(document, "修改标高名称"))
  556. {
  557. tran.Start();
  558. try
  559. {
  560. Regex regex = new Regex(@"^[a-zA-Z]+(\d+)\s*\S*$");
  561. List<Level> levels = document.GetLevels();
  562. levels.Reverse();
  563. for (int i = 0; i < levels.Count; i++)
  564. {
  565. var currentLevel = levels[i];
  566. var name = currentLevel.GetParameterString(BuiltInParameter.DATUM_TEXT);
  567. if (string.IsNullOrWhiteSpace(name))
  568. {
  569. continue;
  570. }
  571. var match1 = regex.Match(name);
  572. if (match1.Success)
  573. {
  574. var match = match1.Groups[1].ToString();
  575. var index = name.IndexOf(match);
  576. if (index == -1)
  577. continue;
  578. var intNum = match.ToInt();
  579. if (intNum < 14)
  580. {
  581. continue;
  582. }
  583. if (intNum < 23)
  584. {
  585. intNum = intNum + 1;
  586. }
  587. else
  588. {
  589. intNum = intNum + 2;
  590. }
  591. string newName = name.Substring(0, index) + intNum + name.Substring(index + match.Length);
  592. currentLevel.SetParameter(BuiltInParameter.DATUM_TEXT, newName);
  593. }
  594. }
  595. tran.Commit();
  596. }
  597. catch (Exception e)
  598. {
  599. tran.RollBack();
  600. MessageShow.Infomation(string.Format("{0}:失败", document.PathName));
  601. }
  602. }
  603. }
  604. }
  605. /// <summary>
  606. /// 同步幕墙的本地名称、本地编码到幕墙嵌板中?
  607. /// </summary>
  608. [Transaction(TransactionMode.Manual)]
  609. [Regeneration(RegenerationOption.Manual)]
  610. public class CopyLocalNameCurtainToPanelCommand : ExternalCommand
  611. {
  612. public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  613. {
  614. try
  615. {
  616. //var tip = MessageShow.Question2("确定要执行同步幕墙的本地名称、本地编码到幕墙嵌板中?\r\n是:修正全部楼层\r\n否:修正当前楼层\r\n取消:取消修正。");
  617. var tip = MessageShow.Question("确定要执行同步幕墙的本地名称、本地编码到幕墙嵌板中?\r\n是:修正当前楼层\r\n否:取消修正。");
  618. switch (tip)
  619. {
  620. case true:
  621. MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
  622. if (floor != null)
  623. SingleInstance<CopyWallLocalName>.Instance.Execute(floor);
  624. break;
  625. default:
  626. break;
  627. }
  628. }
  629. catch (Exception e)
  630. {
  631. MessageShow.Show(e);
  632. return Result.Cancelled;
  633. }
  634. return Result.Succeeded;
  635. }
  636. }
  637. }