using Microsoft.SqlServer.Server;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
|
namespace CloudWaterNetwork
|
{
|
|
public class Templates
|
{
|
public List<Template> templates = new List<Template>();
|
|
// 保存模板数据到文件中
|
public void SaveToFile(string filePath)
|
{
|
// 备份历史保存文件
|
if (File.Exists(filePath))
|
{
|
string backupPath = filePath + ".bak";
|
if (File.Exists(backupPath))
|
{
|
File.Delete(backupPath);
|
}
|
|
File.Copy(filePath, backupPath);
|
}
|
|
// 将模板数据序列化为文本格式
|
using (StreamWriter writer = new StreamWriter(filePath))
|
{
|
foreach (Template template in templates)
|
{
|
writer.WriteLine(template.ID);
|
writer.WriteLine(template.名称);
|
writer.WriteLine(template.filePath);
|
writer.WriteLine(template.Type);
|
writer.WriteLine(template.派生关系.Count);
|
|
foreach (Relation relation in template.派生关系)
|
{
|
writer.WriteLine(relation.名称);
|
writer.WriteLine(relation.关键字);
|
writer.WriteLine(relation.模板名称);
|
}
|
}
|
}
|
}
|
|
// 从文件中读取已保存的模板数据
|
public void LoadFromFile(string filePath)
|
{
|
|
// 如果文件不存在,则无需读取
|
if (!File.Exists(filePath))
|
{
|
return;
|
}
|
|
// 反序列化文件内容为模板数据
|
using (StreamReader reader = new StreamReader(filePath))
|
{
|
while (!reader.EndOfStream)
|
{
|
// 读取模板基本信息
|
string id=reader.ReadLine();
|
string name = reader.ReadLine();
|
string path = reader.ReadLine();
|
TemplateType type = (TemplateType)Enum.Parse(typeof(TemplateType), reader.ReadLine());
|
int relationCount = int.Parse(reader.ReadLine());
|
|
// 读取派生关系信息
|
List<Relation> relations = new List<Relation>();
|
for (int i = 0; i < relationCount; i++)
|
{
|
|
string relationName = reader.ReadLine();
|
string relationKeyword = reader.ReadLine();
|
string relationTemplateName = reader.ReadLine();
|
Relation relation = new Relation() { 名称 = relationName, 关键字 = relationKeyword, 模板名称 = relationTemplateName };
|
relations.Add(relation);
|
}
|
|
// 创建模板对象并添加到列表中
|
Template template = new Template(id,name, path, type) { 派生关系 = relations };
|
templates.Add(template);
|
}
|
}
|
}
|
|
public Template GetTemplate(string ID)
|
{
|
return templates.Find(t=>t.ID== ID);
|
}
|
|
|
}
|
[Serializable]
|
public class Template:Link
|
{
|
private string _ID;
|
[Category("1、基本信息")]
|
[Description("对象的ID唯一标识")]
|
[DisplayName("模板ID")]
|
[Browsable(true)]
|
public string ID { get { if (_ID == null || _ID == "") _ID = Guid.NewGuid().ToString(); return _ID; } set { _ID = value; } }
|
[Category("1、基本信息")]
|
[DisplayName("名称")]
|
public string 名称 { get; set; }
|
|
public MapOption mapOption { get; set; } = new MapOption();
|
|
private string _filePath = null;
|
|
[Category("2、参数")]
|
[DisplayName("路径INP")]
|
public string filePath
|
{
|
get
|
{
|
return _filePath;
|
}
|
set
|
{
|
var filePath= value;
|
var CurDir = Directory.GetCurrentDirectory();
|
if (filePath!=null && filePath.IndexOf(CurDir) >= 0)
|
{
|
|
filePath = filePath.Replace(CurDir, "");
|
if (filePath[0] == '\\')
|
filePath = filePath.Substring(1);
|
}
|
|
|
_filePath = filePath;
|
}
|
}
|
|
[Browsable(false)]
|
public string FullPath
|
{
|
get
|
{
|
return Path.Combine(Directory.GetCurrentDirectory(), filePath==null?"":filePath );
|
}
|
}
|
|
|
[Category("2、参数")]
|
[DisplayName("最高级数")]
|
public int MaxLevel { get; set; } = 99;
|
[Category("1、基本信息")]
|
[Description("类型")]
|
[DisplayName("类型")]
|
[Browsable(true)]
|
public TemplateType Type { get; set; }
|
|
[Category("3、其他")]
|
[Description("对象的ID唯一标识")]
|
[Browsable(false)]
|
public List<Relation> 派生关系 { get; set; } = new List<Relation>();
|
public Template()
|
{
|
|
ID = new Guid().ToString();
|
名称 = "临时";
|
filePath = null;
|
|
}
|
public Template(string ID,string name, string address, TemplateType type)
|
{
|
if (ID==null)
|
this.ID = new Guid().ToString();
|
名称 = name;
|
filePath = address;
|
Type = type;
|
}
|
|
|
[Category("3、其他")]
|
[Description("对象的ID唯一标识")]
|
[Browsable(false)]
|
[NonSerialized]
|
public Network network = null;
|
|
|
[Category("1、基本信息")]
|
[DisplayName("标高")]
|
[Browsable(false)]
|
public new float Elev { get { return 0; } }
|
|
|
[Browsable(false)]
|
public new float Diameter { get { return 0; } }
|
|
[Browsable(false)]
|
public new float Level { get { return 0; } }
|
|
|
|
[Category("3、其他")]
|
[DisplayName("开始节点")]
|
public string Node1 { get; set; }
|
|
|
[Category("3、其他")]
|
[DisplayName("结束节点")]
|
public string Node2 { get; set; }
|
|
[Browsable(false)]
|
public string X { get; set; }
|
[Browsable(false)]
|
public string Y { get; set; }
|
|
[Browsable(false)]
|
public string Visible { get; set; }
|
|
[Category("4、默认视角")]
|
[DisplayName("视角")]
|
[Browsable(false)]
|
public MapView view { get; set; } = null;
|
|
|
[Category("4、默认视角")]
|
[DisplayName("中心X")]
|
[Browsable(true)]
|
public float CenterX
|
{
|
get { if (view != null) return view.Center.X;
|
else return 0; }
|
set
|
{
|
if (view == null) view = new MapView();
|
view.Center = new PointF(value,view.Center.Y);
|
}
|
}
|
[Category("4、默认视角")]
|
[DisplayName("中心Y")]
|
[Browsable(true)]
|
public float CenterY
|
{
|
get
|
{
|
if (view != null) return view.Center.Y;
|
else return 0;
|
}
|
set
|
{
|
if (view == null) view = new MapView();
|
view.Center = new PointF( view.Center.X, value);
|
}
|
}
|
|
[Category("4、默认视角")]
|
[DisplayName("缩放")]
|
[Browsable(true)]
|
public float zoom
|
{
|
get
|
{ if (view != null)
|
return view.zoom; else return 1f;
|
}
|
set
|
{
|
if (view == null) view = new MapView();
|
view.zoom = value;
|
}
|
}
|
|
[Category("4、默认视角")]
|
[DisplayName("旋转角度")]
|
[Browsable(true)]
|
public double rotation
|
{
|
get { if (view != null) return view.rotation; else return 0; }
|
set
|
{
|
if (view == null) view = new MapView();
|
view.rotation = value;
|
}
|
}
|
|
[Category("4、默认视角")]
|
[DisplayName("俯视角度")]
|
[Browsable(true)]
|
public double rotationF
|
{
|
get { if (view != null) return view.rotationF; else return 90; }
|
set
|
{
|
if (view == null) view = new MapView();
|
view.rotationF = value;
|
}
|
}
|
|
|
|
public override string ToString()
|
{
|
return 名称;
|
}
|
public void Export(string path)
|
{
|
network.saveInpFile(path);
|
//SaveFileDialog saveFileDialog = new SaveFileDialog();
|
//saveFileDialog.Filter = "Temporary Files (*.temp)|*.temp";
|
//saveFileDialog.InitialDirectory = Directory.GetCurrentDirectory() + $@"\template\{类型}";
|
//saveFileDialog.FileName = 名称;
|
//if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
//{
|
// string filePath = saveFileDialog.FileName;
|
// // 使用 filePath 变量来保存文件
|
// //temp.路径 = filePath;
|
//}
|
}
|
|
public bool loadInpFile()
|
{
|
network = new Network();
|
var result= network.loadInpFile(FullPath);
|
if (result)
|
{
|
network.MapObjects.ForEach(o =>
|
{
|
if (o.Level > MaxLevel)
|
o.Visible = false;
|
else
|
o.Visible = true;
|
});
|
|
|
return true;
|
}
|
else
|
return false;
|
}
|
|
|
public Trigger triggers;
|
}
|
|
[Serializable]
|
public class Relation
|
{
|
|
public string 名称 { get; set; }
|
public string 关键字 { get; set; }
|
public string 模板名称 { get; set; }
|
}
|
public enum TemplateType
|
{
|
全部,
|
小区模板,
|
单元模板,
|
单元分区模板,
|
楼层模板,
|
其他
|
}
|
|
public enum TriggerType
|
{
|
onLoaded
|
}
|
public class Trigger
|
{
|
public string Name;
|
public string Description;
|
public TriggerType Type;
|
public string Code;
|
|
}
|
|
[Serializable]
|
public class MapView
|
{
|
[Category("4、视角")]
|
[DisplayName("中心")]
|
[Browsable(true)]
|
public PointF Center { get; set; }
|
|
[Category("4、视角")]
|
[DisplayName("缩放")]
|
[Browsable(true)]
|
public float zoom { get; set; }
|
|
[Category("4、视角")]
|
[DisplayName("旋转角度")]
|
[Browsable(true)]
|
public double rotation { get; set; }
|
|
[Category("4、视角")]
|
[DisplayName("俯视角度")]
|
[Browsable(true)]
|
public double rotationF { get; set; }
|
}
|
}
|