예제 #1
0
        public override void Command2(SubMenuBase menu)
        {
            var saveFileDialog = new Microsoft.Win32.SaveFileDialog()
            {
                Filter = "Result Files (*.calc)|*.calc",
            };

            if (saveFileDialog.ShowDialog() != true)
            {
                return;
            }

            GlobalInfo globalInfo = GlobalInfo.GetInstance();

            //StruCalsParas中塔位数据,是在点击这个塔位的页面后才加载的GlobalInfo中,
            //下面代码针对的是,没有打开这个塔位的页面而直接进行计算的情况
            if (globalInfo.StruCalsParas.Where(item => item.TowerName == ((SubMenuBase)menu).Title && item.SequenceName == ((StrCalsModuleSubMenu)menu).Sequence).Count() <= 0)
            {
                if (((StrCalsModuleSubMenu)menu).Sequence == "")
                {
                    ProjectUtils.GetInstance().ReadStruCalsTowerParas(((SubMenuBase)menu).Title);
                }
                else
                {
                    ProjectUtils.GetInstance().ReadStruCalsTowerParas(((SubMenuBase)menu).Title, ((StrCalsModuleSubMenu)menu).Sequence);
                }
            }

            StruCalsParasCompose paras = globalInfo.StruCalsParas.Where(para => para.TowerName == ((SubMenuBase)menu).Title && para.SequenceName == ((StrCalsModuleSubMenu)menu).Sequence).FirstOrDefault();

            if (paras == null)
            {
                return;
            }

            ConvertSpecToWorkCondition(paras.Template, paras.WorkConditions, true);
            string path = saveFileDialog.FileName.Substring(0, saveFileDialog.FileName.Length - 5);

            for (int i = 0; i < paras.HPSettingsParas.Count(); i++)
            {
                LoadComposeBase loadCompose;

                if (paras.BaseParas.Type == TowerTypeEnum.LineTower)
                {
                    loadCompose = new LoadComposeLineTower(paras.BaseParas, paras.LineParas.ToArray(), paras.HPSettingsParas[i], paras.Template, paras.ElectricalLoadFilePath);
                }
                else if (paras.BaseParas.Type == TowerTypeEnum.LineCornerTower)
                {
                    loadCompose = new LoadComposeLineCornerTower(paras.BaseParas, paras.LineParas.ToArray(), paras.HPSettingsParas[i], paras.Template, paras.ElectricalLoadFilePath);
                }
                //剩下的都属于耐张塔
                else
                {
                    loadCompose = new LoadComposeTensionTower(paras.BaseParas, paras.LineParas.ToArray(), paras.HPSettingsParas[i], paras.Template, paras.ElectricalLoadFilePath);
                }

                paras.ResultPointLoad.AddRange(loadCompose.LoadCaculate(path));
            }
        }
        /// <summary>
        /// 结构计算中塔位的参数来源两个:
        /// 1 新增塔位,在增加新塔时,已经将数据加入到globalInfo,
        /// 2 原来已有塔位,塔位数据是逐步加载的,只有在需要查看这个塔位时,才会去配置文件中读取到
        /// 针对这两种情况,首先在globalInfo中找到对应的数据;
        /// 如果找不到,要从配置文件中将相应塔位数据读取到globalInfo中
        /// </summary>
        /// <param name="towerName"></param>
        protected virtual void InitializeData(string towerName)
        {
            var globalInfo = GlobalInfo.GetInstance();

            string sequence = "";

            if (towerName.Contains("*"))
            {
                int pos = towerName.IndexOf('*');
                TowerName = towerName.Substring(0, pos);
                sequence  = towerName.Substring(pos + 1);
            }
            else
            {
                TowerName = towerName;
            }

            if (globalInfo.StruCalsParas.Where(item => item.TowerName == towerName).Count() <= 0)
            {
                if (sequence == "")
                {
                    ProjectUtils.GetInstance().ReadStruCalsTowerParas(towerName);
                }
                else
                {
                    ProjectUtils.GetInstance().ReadStruCalsTowerParas(towerName, sequence);
                }
            }

            int index = globalInfo.StruCalsParas.FindIndex(para => para.TowerName == towerName && para.SequenceName == sequence);

            if (index < 0)
            {
                return;
            }

            struCalsParas = globalInfo.StruCalsParas[index];
        }
        public StruTemplateEditViewModel(TowerTemplate template,  bool isReadOnly = true)
        {
            oldName = template.Name;
            oldType = template.TowerType;

            _template = template;
            IsReadOnly = isReadOnly;

            #region 导地线的初始化
            TemplateWire wire = new TemplateWire();
            wire.Wire = new string[16];

            List<Column> wireColumns = new List<Column>() {
                new HeaderColumn() {
                    Settings = SettingsType.Binding,
                    FieldName = "Name",
                    Header = "序号",
                    AllowEditing = (!isReadOnly).ToString(),
                },
            };

            if (template.Wires != null)
            {
                for(int i = 0; i < template.Wires.Count; i++)
                {
                    WireNum++;
                    wire.Wire[i] = template.Wires[i];

                    wireColumns.Add(new HeaderColumn() {
                        Settings = SettingsType.Binding,
                        FieldName = "Wire[" + i.ToString() + "]",
                        Header = (i + 1).ToString(),
                        AllowEditing = (!isReadOnly).ToString(),
                    });

                    SetWireVisbility(WireNum);
                }
            }

            Wires = new ObservableCollection<TemplateWire>();
            Wires.Add(wire);

            WireColumns = new ObservableCollection<Column>(wireColumns);

            #endregion


            #region 工况的初始化
            TemplateWorkCondition workCondition = new TemplateWorkCondition();
            workCondition.WorkCondition = new string[16];

            List<Column> workConditionColumns = new List<Column>() {
                new HeaderColumn() {
                    Settings = SettingsType.Binding,
                    FieldName = "Name",
                    Header = "序号",
                    AllowEditing = (!isReadOnly).ToString(),
                },
            };

            if (template.WorkConditongs != null)
            {
                for (int i = 0; i < template.WorkConditongs.Count; i++)
                {
                    WorkConditionNum++;
                    workCondition.WorkCondition[i] = template.WorkConditongs[i+1];

                    workConditionColumns.Add(new HeaderColumn()
                    {
                        Settings = SettingsType.Binding,
                        FieldName = "WorkCondition[" + i.ToString() + "]",
                        Header = (i + 1).ToString(),
                        AllowEditing = (!isReadOnly).ToString(),
                    });
                }
            }

            WorkConditions = new ObservableCollection<TemplateWorkCondition>();
            WorkConditions.Add(workCondition);

            WorkConditionColumns = new ObservableCollection<Column>(workConditionColumns);

            #endregion


            #region 工况的初始化

            WorkConditionCombos = new ObservableCollection<WorkConditionComboSpec>(StruCalsParasCompose.ConvertTemplateToSpec(template));

            //List<Column> workConditionComboColumns = new List<Column>();
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "Index",
            //    Header = "序号",
            //    Width = "*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //});
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "IsCalculate",
            //    Header = "选择与否",
            //    Width = "2*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //});
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "WorkConditionCode",
            //    Header = "工况",
            //    Width = "*",
            //    AllowEditing = (!isReadOnly).ToString(),

            //});
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "TensionAngleCode",
            //    Header = "张力角",
            //    Width = "*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //    Visible = "{Binding IsTensionAngleVisible}"
            //});
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "VertialLoadCode",
            //    Header = "垂直载荷",
            //    Width = "*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //    Visible = "{Binding IsVertialLoadCodeVisible}"
            //});
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "WindDirectionCode",
            //    Header = "风向",
            //    Width = "*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //});
            //for (int i = 0; i < template.Wires.Count; i++)
            //{
            //    workConditionComboColumns.Add(new HeaderColumn() {
            //        Settings = SettingsType.Binding,
            //        FieldName = "Wire" + (i + 1).ToString(),
            //        Header = template.Wires[i],
            //        Width = "*",
            //        AllowEditing = (!isReadOnly).ToString(),
            //    });
            //}
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "WorkCode",
            //    Header = "工况代码",
            //    Width = "*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //});
            //workConditionComboColumns.Add(new HeaderColumn() {
            //    Settings = SettingsType.Binding,
            //    FieldName = "WorkComment",
            //    Header = "注释",
            //    Width = "6*",
            //    AllowEditing = (!isReadOnly).ToString(),
            //});

            //WorkConditionComboColumns = new ObservableCollection<Column>(workConditionComboColumns);

            #endregion
        }
예제 #4
0
        public override void Command3(SubMenuBase menu)
        {
            var loadFileDialog = new Microsoft.Win32.OpenFileDialog()
            {
                Filter = "Load Files (*.load)|*.load",
            };

            if (loadFileDialog.ShowDialog() != true)
            {
                return;
            }

            string stQtPath = GlobalInfo.GetInstance().GetSmartTowerPath();

            if (stQtPath == null || stQtPath == "")
            {
                MessageBox.Show(" 请设置SmartTower程序的路径!");
                return;
            }

            if (!File.Exists(stQtPath))
            {
                MessageBox.Show("无法找到SmartTower,请设置它的路径!");
                return;
            }

            string stConsolePath = stQtPath.Substring(0, stQtPath.LastIndexOf("\\")) + "\\" + ConstVar.SmartTowerConsoleName;

            if (!File.Exists(stConsolePath))
            {
                return;
            }

            string mode = GlobalInfo.GetInstance().GetSmartTowerMode().ToString();

            GlobalInfo globalInfo = GlobalInfo.GetInstance();

            if (globalInfo.StruCalsParas.Where(item => item.TowerName == ((SubMenuBase)menu).Title && item.SequenceName == ((StrCalsModuleSubMenu)menu).Sequence).Count() <= 0)
            {
                if (((StrCalsModuleSubMenu)menu).Sequence == null)
                {
                    ProjectUtils.GetInstance().ReadStruCalsTowerParas(((SubMenuBase)menu).Title);
                }
                else
                {
                    ProjectUtils.GetInstance().ReadStruCalsTowerParas(((SubMenuBase)menu).Title, ((StrCalsModuleSubMenu)menu).Sequence);
                }
            }

            StruCalsParasCompose paras = globalInfo.StruCalsParas.Where(para => para.TowerName == ((SubMenuBase)menu).Title && para.SequenceName == ((StrCalsModuleSubMenu)menu).Sequence).FirstOrDefault();

            if (paras == null)
            {
                return;
            }

            string path = paras.FullStressTemplatePaths[0];

            if (!File.Exists(path))
            {
                return;
            }

            SmartTowerInputGenerator.InputGenerator(loadFileDialog.FileName, path);

            string stParas = path + " " + mode;
            //string stParas1 = "C:\\Users\\zhifei\\Desktop\\测试\\StruCals\\直线塔7\\满应力分析\\Z31.dat 0";      //0: 正常计算 1:基础作用力BetaZ=1 2:基础作用力betaZ=-1/2+1 不容许有空格
            ProcessStartInfo startInfo = new ProcessStartInfo(stConsolePath, stParas);
            //startInfo.UseShellExecute = false;
            //startInfo.CreateNoWindow = true;
            Process process = new Process();

            process.StartInfo = startInfo;
            process.Start();
            process.WaitForExit();
            //}

            TowerMemberBLL memberBLL = new TowerMemberBLL();
            string         outPath   = path.Substring(0, path.LastIndexOf(".")) + ".out";

            paras.ResultFullStess = memberBLL.TextFileReadAll(outPath).ToList();
        }
        protected HangingPoint(string title, StruCalsParasCompose calsParas)
        {
            Title    = title;
            Template = calsParas.Template;

            HPSetitingParas = calsParas.HPSettingsParas.Where(item => item.HangingPointSettingName == title).FirstOrDefault();
            BaseParas       = calsParas.BaseParas;

            NormalXYPoints  = new ObservableCollection <HangingPointParas>(HPSetitingParas.NormalXYPoints);
            NormalZPoints   = new ObservableCollection <HangingPointParas>(HPSetitingParas.NormalZPoints);
            InstallXYPoints = new ObservableCollection <HangingPointParas>(HPSetitingParas.InstallXYPoints);
            InstallZPoints  = new ObservableCollection <HangingPointParas>(HPSetitingParas.InstallZPoints);
            TurningPoints   = new ObservableCollection <HangingPointParas>(HPSetitingParas.TurningPoints);
            VStrings        = new ObservableCollection <VStringParas>(HPSetitingParas.VStrings);

            List <string> normalSource = new List <string> {
                "无跳线", "常规", "悬臂", "I串", "V1", "V2", "V3"
            };
            List <Column> normalXYColumns = new List <Column>()
            {
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Index", Header = "序号"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "WireType", Header = "项目"
                },
                new ComboColumn()
                {
                    Settings = SettingsType.Combo, FieldName = "StringType", Header = "串型", Source = normalSource
                }
            };

            NormalXYColumns = new ObservableCollection <Column>(normalXYColumns);
            int hpNum = GetMaxHPNum(HPSetitingParas.NormalXYPoints);

            if (hpNum == 0)
            {
                hpNum = 1;
            }
            for (int i = 0; i < hpNum; i++)
            {
                AddNormalXYPoint();
            }

            List <Column> normalZColumns = new List <Column>()
            {
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Index", Header = "序号"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "WireType", Header = "项目"
                },
                new ComboColumn()
                {
                    Settings = SettingsType.Combo, FieldName = "StringType", Header = "串型", Source = normalSource
                }
            };

            NormalZColumns = new ObservableCollection <Column>(normalZColumns);
            hpNum          = GetMaxHPNum(HPSetitingParas.NormalZPoints);
            if (hpNum == 0)
            {
                hpNum = 1;
            }
            for (int i = 0; i < hpNum; i++)
            {
                AddNormalZPoint();
            }

            List <Column> installXYColumns = new List <Column>()
            {
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Index", Header = "序号"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "WireType", Header = "项目"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Array", Header = "组数"
                }
            };

            InstallXYColumns = new ObservableCollection <Column>(installXYColumns);
            hpNum            = GetMaxHPNum(HPSetitingParas.InstallXYPoints);
            if (hpNum == 0)
            {
                hpNum = 1;
            }
            for (int i = 0; i < hpNum; i++)
            {
                AddInstallXYPoint();
            }

            List <Column> intallZColumns = new List <Column>()
            {
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Index", Header = "序号"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "WireType", Header = "项目"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Array", Header = "组数"
                }
            };

            InstallZColumns = new ObservableCollection <Column>(intallZColumns);
            hpNum           = GetMaxHPNum(HPSetitingParas.InstallZPoints);
            if (hpNum == 0)
            {
                hpNum = 1;
            }
            for (int i = 0; i < hpNum; i++)
            {
                AddInstallZPoint();
            }

            List <Column> turningColumns = new List <Column>()
            {
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Index", Header = "序号"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "WireType", Header = "项目"
                },
                new HeaderColumn()
                {
                    Settings = SettingsType.Binding, FieldName = "Angle", Header = "方向角"
                }
            };

            TurningColumns = new ObservableCollection <Column>(turningColumns);
            hpNum          = GetMaxHPNum(HPSetitingParas.TurningPoints);
            if (hpNum == 0)
            {
                hpNum = 1;
            }
            for (int i = 0; i < hpNum; i++)
            {
                AddTurningPoint();
            }
        }
 public static HangingPoint Create(string title, StruCalsParasCompose calsParas)
 {
     return(ViewModelSource.Create(() => new HangingPoint(title, calsParas)));
 }
        public void TestMethod01_StruCalsParasSerializer()
        {
            var saveFileDialog = new Microsoft.Win32.SaveFileDialog()
            {
                Filter = "XML Files (*.xml)|*.xml",
            };

            if (saveFileDialog.ShowDialog() != true)
            {
                return;
            }

            StruCalseBaseParas formulaParas = new StruCalseBaseParas();

            formulaParas.Type      = TowerTypeEnum.LineTower;
            formulaParas.LoadRatio = 1;

            //结构重要性系数
            formulaParas.R1Install = 1f;
            formulaParas.R0Normal  = 1.1f;

            //荷载分项系数
            formulaParas.RGBad  = 1.3f;
            formulaParas.RGGood = 1.05f;
            formulaParas.RQ     = 1.5f;
            //formulaParas.RGCheck01 = 1.3f;

            //可变荷载组合系数
            formulaParas.VcFNormal    = 1.1f;
            formulaParas.VcFInstall   = 0.95f;
            formulaParas.VcFBroken    = 0.95f;
            formulaParas.VcFUnevenIce = 0.95f;
            formulaParas.VcFCheck     = 0.8f;

            //其他参数
            formulaParas.WindAdjustFactor      = 1.3f;
            formulaParas.OtherWindAdjustFactor = 0.95f;
            formulaParas.DynamicCoef           = 1.2f;
            formulaParas.AnchorWindCoef        = 0.8f;
            formulaParas.AnchorGravityCoef     = 0.8f;
            formulaParas.AnchorAngle           = 25f;

            StruLineParas[] lineParas = new StruLineParas[] {
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 4,
                    AnchorTension    = 61.20f,
                    PulleyTensionDif = 0,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 4,
                    AnchorTension    = 61.20f,
                    PulleyTensionDif = 0,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 8,
                    AnchorTension    = 375.23f,
                    PulleyTensionDif = 50,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 8,
                    AnchorTension    = 375.23f,
                    PulleyTensionDif = 50,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 8,
                    AnchorTension    = 375.23f,
                    PulleyTensionDif = 50,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 8,
                    AnchorTension    = 375.23f,
                    PulleyTensionDif = 50,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 8,
                    AnchorTension    = 375.23f,
                    PulleyTensionDif = 50,
                    DrawingCoef      = 1.3f
                },
                new StruLineParas
                {
                    HoistingCoef     = 2.5f,
                    WireExtraLoad    = 8,
                    AnchorTension    = 375.23f,
                    PulleyTensionDif = 50,
                    DrawingCoef      = 1.3f
                }
            };

            List <HangingPointParas> normalList = new List <HangingPointParas>()
            {
                new HangingPointParas()
                {
                    Index      = 1,
                    WireType   = "左地",
                    StringType = "常规",
                    Points     = new string[] { "91", "93" }
                },
                new HangingPointParas()
                {
                    Index      = 2,
                    WireType   = "右地",
                    StringType = "常规",
                    Points     = new string[] { "90", "92" }
                },
                new HangingPointParas()
                {
                    Index      = 3,
                    WireType   = "左上导",
                    StringType = "I串",
                    Points     = new string[] { "291" }
                },
                new HangingPointParas()
                {
                    Index      = 4,
                    WireType   = "右上导",
                    StringType = "I串",
                    Points     = new string[] { "290" }
                },
                new HangingPointParas()
                {
                    Index      = 5,
                    WireType   = "左中导",
                    StringType = "I串",
                    Points     = new string[] { "671", "673" }
                },
                new HangingPointParas()
                {
                    Index      = 6,
                    WireType   = "右中导",
                    StringType = "I串",
                    Points     = new string[] { "670", "672" }
                },
                new HangingPointParas()
                {
                    Index      = 7,
                    WireType   = "左下导",
                    StringType = "I串",
                    Points     = new string[] { "1111", "1113" }
                },
                new HangingPointParas()
                {
                    Index      = 8,
                    WireType   = "右下导",
                    StringType = "I串",
                    Points     = new string[] { "1110", "1112" }
                },
            };

            List <HangingPointParas> installList = new List <HangingPointParas>()
            {
                new HangingPointParas()
                {
                    Index    = 1,
                    WireType = "左上导",
                    Array    = "第a组",
                    Points   = new string[] { "1", "2" }
                },
                new HangingPointParas()
                {
                    Index    = 2,
                    WireType = "右上导",
                    Array    = "第a组",
                    Points   = new string[] { "3", "4" }
                },
                new HangingPointParas()
                {
                    Index    = 3,
                    WireType = "左中导",
                    Array    = "第a组",
                    Points   = new string[] { "11", "22" }
                },
                new HangingPointParas()
                {
                    Index    = 4,
                    WireType = "右中导",
                    Array    = "第a组",
                    Points   = new string[] { "33", "44" }
                },
                new HangingPointParas()
                {
                    Index    = 5,
                    WireType = "左下导",
                    Array    = "第a组",
                    Points   = new string[] { "111", "222" }
                },
                new HangingPointParas()
                {
                    Index    = 6,
                    WireType = "右下导",
                    Array    = "第a组",
                    Points   = new string[] { "333", "444" }
                },
            };

            HangingPointSettingParas ratioParas = new HangingPointSettingParas()
            {
                GCQ = 0.5f,
                GCH = 0.5f,
                GXN = -1,
                GXW = 2,

                DQWQ = 0.5f,
                DQWH = 0.5f,
                DQCQ = 0.6f,
                DQCH = 0.4f,

                DDWQ = 0.5f,
                DDWH = 0.5f,
                DDCQ = 0.6f,
                DDCH = 0.4f,

                DMWQ = 0.5f,
                DMWH = 0.5f,
                DMCQ = 0.6f,
                DMCH = 0.4f,

                NormalXYPoints  = normalList,
                NormalZPoints   = normalList,
                InstallXYPoints = installList,
                InstallZPoints  = installList,
            };


            XmlUtils.Serializer(saveFileDialog.FileName, new StruCalsParasCompose(formulaParas, new List <StruLineParas>(lineParas), new List <HangingPointSettingParas> {
                ratioParas,
            }));

            StruCalsParasCompose calsParas = XmlUtils.Deserializer <StruCalsParasCompose>(saveFileDialog.FileName);
        }