duheng
2025-03-05 0f831db8df9c2e4adc7feca636967a0fb1cd5e29
HStation.RevitDev/RevitDataExport/Forms/Form_CheckResult.cs
@@ -1,172 +1,165 @@
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.UI;
using DevExpress.Utils.Extensions;
using Hydro.Core.Model;
using Hydro.Revit;
using Hydro.Revit.Model;
using HStation.RevitDev.RevitDataExport.Utility;
using HStation.RevitDev.RevitDataExport.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HStation.RevitDev.RevitDataExport.Forms
{
    public partial class Form_CheckResult : System.Windows.Forms.Form
    {
        private System.Windows.Forms.TabControl _pageContainer;
        private Form_SystemSelect _form_SystemSelect;
        private CheckModel model;
        private UIDocument _uiDocument;
        private Document _doc;
        public Form_CheckResult(CheckModel checkModel, System.Windows.Forms.TabControl pageContainer, ExternalCommandData data, Form_SystemSelect form_SystemSelect)
        {
            _uiDocument = data.Application.ActiveUIDocument;
            _doc = _uiDocument.Document;
            _pageContainer = pageContainer;
            _form_SystemSelect = form_SystemSelect;
            this.model = checkModel;
            InitializeComponent();
        }
        private void Form_CheckResult_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = model.FailList;
        }
        private View3D Set3DView()
        {
            var view3d = ViewHelper.Get3dView(_doc);
            _uiDocument.ActiveView = view3d;
            return view3d;
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var rowIndex = e.RowIndex;
            var columnIndex = e.ColumnIndex;
            var cell = dataGridView1[columnIndex, rowIndex];
            if (cell.Value == null) { return; }
            var view = Set3DView();
            var cellText = cell.Value.ToString();
            if (dataGridView1.Columns[columnIndex].HeaderText == "ID")
            {
                var idContent = cellText.Split(':')?.Last();
                if (string.IsNullOrEmpty(idContent)) { return; }
                if (int.TryParse(idContent, out int id))
                {
                    if (!id.Equals(0))
                    {
                        var elementId = new ElementId(id);
                        var ids = new List<ElementId> { elementId };
                        view.Select(_uiDocument, ids);
                        view.Zoom(_uiDocument, ids);
                    }
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            _form_SystemSelect.SetCheckIndexs();
            this.model = _form_SystemSelect.GetNetWrok();
            dataGridView1.Refresh();
        }
        private void ReCheck()
        {
            var nw = _form_SystemSelect._revitNetWork;
            var mod = this.model;
            if (checkBox1.Checked) //喷淋修复连接管件上游管道
            {
                var ps = mod.FailList.Where(c => c.Type == Hydro.Core.ObjectEnum.FailType.喷头只能连接管道);
                var ids = ps.Select(c => c.ID);
                var ms = ps.Select(c => c.ID).ToArray();
                var nos = nw.Nozzles.Where(c => ids.Contains(c.ID));
                nos.ForEach(c =>
                {
                    var gj = nw.Junctions.FirstOrDefault(b => b.ID == c.Node1);
                    if (gj != null)
                    {
                        var gjid = gj.ID;
                        var pipe = nw.Links.FirstOrDefault(b => b.Node1 == gjid || b.Node2 == gjid);
                        c.Node1 = pipe.ID;
                        if (pipe.Node1.Equals(gjid)) pipe.Node1 = c.ID;
                        if (pipe.Node2.Equals(gjid)) pipe.Node2 = c.ID;
                    }
                });
                for (var i = 0; i < ms.Count(); i++)
                {
                    var m = mod.FailList.FirstOrDefault(c => c.ID == ms[i] && c.Type == Hydro.Core.ObjectEnum.FailType.喷头只能连接管道);
                    mod.FailList.Remove(m);
                };
            }
            if (checkBox2.Checked) //管道修改缺少一个连接对象,增加闷头(虚拟结点)
            {
                var pipes = nw.Pipes.Where(c => (c.Node1 + "_" + c.Node2).Length > 1 && (c.Node1 + "_" + c.Node2).Length < 10);
                var ids = pipes.Select(c => c.ID);
                var ms = mod.FailList.Where(c => ids.Contains(c.ID)).Select(c => c.ID).ToArray();
                for (var i = 0; i < ms.Count(); i++)
                {
                    var m = mod.FailList.FirstOrDefault(c => c.ID == ms[i] && c.Type == Hydro.Core.ObjectEnum.FailType.缺少Node1或Node2连接属性);
                    mod.FailList.Remove(m);
                }
                pipes.ForEach(c =>
                {
                    nw.AddJunction(new Hydro.Revit.Model.JunctionViewModel()
                    {
                        ID = "10000" + c.ID,
                        Name = "闷头",
                        Elev = 0,
                        PositionJson = c.PositionJson,
                        Floor = c.Floor,
                        SystemType = c.SystemType,
                    });
                    if (string.IsNullOrEmpty(c.Node1)) c.Node1 = "10000" + c.ID;
                    if (string.IsNullOrEmpty(c.Node2)) c.Node2 = "10000" + c.ID;
                });
            }
            this.model.Result = !mod.FailList.Any();
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = this.model.FailList;
            dataGridView1.Refresh();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //var j = JsonHelper.ReadJsonFile("d:\\revitMFire.json");
            //var r = JsonHelper.ToObject<NetWorkOutViewModel>(j);
            ReCheck();
            //if (this.model.Result)
            //{
            var json = JsonHelper.ToJson(_form_SystemSelect._revitNetWork);
            JsonHelper.WriteJson("d:\\revitMFire.json", json);
            _form_SystemSelect._revitNetWork.BuildToInp("d:\\mfire.inp");
            //}
            // else
            //    MessageBox.Show("检验未通过,不能导出");
        }
        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
        }
    }
}
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using DevExpress.Utils.Extensions;
using Hydro.Core.Model;
using HStation.RevitDev.RevitDataExport.Utility;
using HStation.RevitDev.RevitDataExport.Common;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace HStation.RevitDev.RevitDataExport.Forms
{
    public partial class Form_CheckResult : System.Windows.Forms.Form
    {
        private System.Windows.Forms.TabControl _pageContainer;
        private Form_SystemSelect _form_SystemSelect;
        private CheckModel model;
        private UIDocument _uiDocument;
        private Document _doc;
        public Form_CheckResult(CheckModel checkModel, System.Windows.Forms.TabControl pageContainer, ExternalCommandData data, Form_SystemSelect form_SystemSelect)
        {
            _uiDocument = data.Application.ActiveUIDocument;
            _doc = _uiDocument.Document;
            _pageContainer = pageContainer;
            _form_SystemSelect = form_SystemSelect;
            this.model = checkModel;
            InitializeComponent();
        }
        private void Form_CheckResult_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = model.FailList;
        }
        private View3D Set3DView()
        {
            var view3d = ViewHelper.Get3dView(_doc);
            _uiDocument.ActiveView = view3d;
            return view3d;
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var rowIndex = e.RowIndex;
            var columnIndex = e.ColumnIndex;
            var cell = dataGridView1[columnIndex, rowIndex];
            if (cell.Value == null) { return; }
            var view = Set3DView();
            var cellText = cell.Value.ToString();
            if (dataGridView1.Columns[columnIndex].HeaderText == "ID")
            {
                var idContent = cellText.Split(':')?.Last();
                if (string.IsNullOrEmpty(idContent)) { return; }
                if (int.TryParse(idContent, out int id))
                {
                    if (!id.Equals(0))
                    {
                        var elementId = new ElementId(id);
                        var ids = new List<ElementId> { elementId };
                        view.Select(_uiDocument, ids);
                        view.Zoom(_uiDocument, ids);
                    }
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            _form_SystemSelect.SetCheckIndexs();
            this.model = _form_SystemSelect.GetNetWrok();
            dataGridView1.Refresh();
        }
        private void ReCheck()
        {
            var nw = _form_SystemSelect._revitNetWork;
            var mod = this.model;
            if (checkBox1.Checked) //喷淋修复连接管件上游管道
            {
                var ps = mod.FailList.Where(c => c.Type == Hydro.Core.ObjectEnum.FailType.喷头只能连接管道);
                var ids = ps.Select(c => c.ID);
                var ms = ps.Select(c => c.ID).ToArray();
                var nos = nw.Nozzles.Where(c => ids.Contains(c.ID));
                nos.ForEach(c =>
                {
                    var gj = nw.Junctions.FirstOrDefault(b => b.ID == c.Node1);
                    if (gj != null)
                    {
                        var gjid = gj.ID;
                        var pipe = nw.Links.FirstOrDefault(b => b.Node1 == gjid || b.Node2 == gjid);
                        c.Node1 = pipe.ID;
                        if (pipe.Node1.Equals(gjid)) pipe.Node1 = c.ID;
                        if (pipe.Node2.Equals(gjid)) pipe.Node2 = c.ID;
                    }
                });
                for (var i = 0; i < ms.Count(); i++)
                {
                    var m = mod.FailList.FirstOrDefault(c => c.ID == ms[i] && c.Type == Hydro.Core.ObjectEnum.FailType.喷头只能连接管道);
                    mod.FailList.Remove(m);
                };
            }
            if (checkBox2.Checked) //管道修改缺少一个连接对象,增加闷头(虚拟结点)
            {
                var pipes = nw.Pipes.Where(c => (c.Node1 + "_" + c.Node2).Length > 1 && (c.Node1 + "_" + c.Node2).Length < 10);
                var ids = pipes.Select(c => c.ID);
                var ms = mod.FailList.Where(c => ids.Contains(c.ID)).Select(c => c.ID).ToArray();
                for (var i = 0; i < ms.Count(); i++)
                {
                    var m = mod.FailList.FirstOrDefault(c => c.ID == ms[i] && c.Type == Hydro.Core.ObjectEnum.FailType.缺少Node1或Node2连接属性);
                    mod.FailList.Remove(m);
                }
                pipes.ForEach(c =>
                {
                    nw.AddJunction(new Hydro.Revit.Model.JunctionViewModel()
                    {
                        ID = "10000" + c.ID,
                        Name = "闷头",
                        Elev = 0,
                        PositionJson = c.PositionJson,
                        Floor = c.Floor,
                        SystemType = c.SystemType,
                    });
                    if (string.IsNullOrEmpty(c.Node1)) c.Node1 = "10000" + c.ID;
                    if (string.IsNullOrEmpty(c.Node2)) c.Node2 = "10000" + c.ID;
                });
            }
            this.model.Result = !mod.FailList.Any();
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = this.model.FailList;
            dataGridView1.Refresh();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //var j = JsonHelper.ReadJsonFile("d:\\revitMFire.json");
            //var r = JsonHelper.ToObject<NetWorkOutViewModel>(j);
            ReCheck();
            //if (this.model.Result)
            //{
            var json = JsonHelper.ToJson(_form_SystemSelect._revitNetWork);
            JsonHelper.WriteJson("d:\\revitMFire.json", json);
            _form_SystemSelect._revitNetWork.BuildToInp("d:\\mfire.inp");
            //}
            // else
            //    MessageBox.Show("检验未通过,不能导出");
        }
        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
        }
    }
}