348 lines
9.0 KiB
C#
348 lines
9.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace friction
|
|
{
|
|
public class Config
|
|
{
|
|
public struct RANGE
|
|
{
|
|
public float m_fLow;
|
|
public float m_fHigh;
|
|
}
|
|
|
|
private static Config m_instance = null;
|
|
|
|
string m_strPath = "";
|
|
|
|
public static readonly RANGE TEMP_ALL = new RANGE { m_fLow = -100.0f, m_fHigh = 100.0f };
|
|
public static readonly RANGE TEMP_LOW = new RANGE { m_fLow = -100.0f, m_fHigh = 0.0f };
|
|
public static readonly RANGE TEMP_NORMAL = new RANGE { m_fLow = 15.0f, m_fHigh = 25.0f };
|
|
public static readonly RANGE TEMP_HIGH = new RANGE { m_fLow = 40.0f, m_fHigh = 90.0f };
|
|
|
|
public static readonly RANGE HUMID_ALL = new RANGE { m_fLow = -100.0f, m_fHigh = 100.0f };
|
|
public static readonly RANGE HUMID_LOW = new RANGE { m_fLow = 0.0f, m_fHigh = 60.0f };
|
|
public static readonly RANGE HUMID_HIGH = new RANGE { m_fLow = 60.0f, m_fHigh = 100.0f };
|
|
|
|
|
|
public class CheckedMaterial
|
|
{
|
|
public List<string> m_Springs = new List<string>();
|
|
public List<string> m_Tables = new List<string>();
|
|
}
|
|
|
|
public Dictionary<string, CheckedMaterial> m_CheckedMaterial = new Dictionary<string, CheckedMaterial>();
|
|
public string m_strCurMaterial = "";
|
|
public bool m_bOnLoad = false;
|
|
|
|
private Config()
|
|
{
|
|
}
|
|
|
|
public static Config GetInstance()
|
|
{
|
|
if (m_instance == null)
|
|
m_instance = new Config();
|
|
|
|
return m_instance;
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
string strPrjName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
|
|
string strFolder = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), strPrjName);
|
|
m_strPath = strFolder + "\\config.ini";
|
|
if (!Directory.Exists(strFolder))
|
|
Directory.CreateDirectory(strFolder);
|
|
|
|
Load();
|
|
}
|
|
|
|
[DllImport("kernel32")]
|
|
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
|
|
[DllImport("kernel32")]
|
|
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
|
|
|
|
private CheckedMaterial LoadCheckedMaterial(string section)
|
|
{
|
|
CheckedMaterial cm = new CheckedMaterial();
|
|
|
|
StringBuilder temp = new StringBuilder(10240);
|
|
int iRes = GetPrivateProfileString(section, "checked-spring", "", temp, 10240, m_strPath);
|
|
if(temp.Length > 0)
|
|
{
|
|
string[] astrToken = temp.ToString().Split(',');
|
|
cm.m_Springs = astrToken.ToList();
|
|
}
|
|
|
|
iRes = GetPrivateProfileString(section, "checked-table", "", temp, 10240, m_strPath);
|
|
if (temp.Length > 0)
|
|
{
|
|
string[] astrToken = temp.ToString().Split(',');
|
|
cm.m_Tables = astrToken.ToList();
|
|
}
|
|
|
|
return cm;
|
|
}
|
|
|
|
public bool HasPref(string strName)
|
|
{
|
|
foreach(var pair in m_CheckedMaterial)
|
|
{
|
|
if (pair.Key == strName)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void InsertPref(string strName)
|
|
{
|
|
m_CheckedMaterial.Add(strName, new CheckedMaterial());
|
|
}
|
|
|
|
public void RemovePref(string strName)
|
|
{
|
|
m_CheckedMaterial.Remove(strName);
|
|
WritePrivateProfileString(strName, null, null, m_strPath);
|
|
}
|
|
|
|
private void Load()
|
|
{
|
|
StringBuilder temp = new StringBuilder(10240);
|
|
int iRes = GetPrivateProfileString("Option", "recent", "", temp, 10240, m_strPath);
|
|
|
|
if(temp.Length > 0)
|
|
{
|
|
string[] astrList = temp.ToString().Split(',');
|
|
foreach (string strFile in astrList)
|
|
OPTION.GetInstance().AddRecentFile(strFile);
|
|
}
|
|
|
|
iRes = GetPrivateProfileString("Option", "bound", "", temp, 10240, m_strPath);
|
|
if(temp.Length > 0)
|
|
{
|
|
string[] astrBound = temp.ToString().Split(',');
|
|
|
|
int iLeft, iWidth, iTop, iHeight;
|
|
|
|
int.TryParse(astrBound[0], out iLeft);
|
|
int.TryParse(astrBound[1], out iWidth);
|
|
int.TryParse(astrBound[2], out iTop);
|
|
int.TryParse(astrBound[3], out iHeight);
|
|
|
|
OPTION.GetInstance().WindowBound = new Rectangle(iLeft, iTop, iWidth, iHeight);
|
|
}
|
|
|
|
iRes = GetPrivateProfileString("Option", "checked-column", "", temp, 10240, m_strPath);
|
|
if (temp.Length > 0)
|
|
{
|
|
string[] astrBound = temp.ToString().Split(',');
|
|
OPTION.GetInstance().CheckedColumns = astrBound.ToList();
|
|
}
|
|
|
|
iRes = GetPrivateProfileString("Option", "unchecked-column", "", temp, 10240, m_strPath);
|
|
if (temp.Length > 0)
|
|
{
|
|
string[] astrBound = temp.ToString().Split(',');
|
|
OPTION.GetInstance().UncheckedColumns = astrBound.ToList();
|
|
}
|
|
|
|
iRes = GetPrivateProfileString("Option", "conf-names", "", temp, 10240, m_strPath);
|
|
if (temp.Length > 0)
|
|
{
|
|
m_CheckedMaterial.Clear();
|
|
|
|
string[] astrSections = temp.ToString().Split(',');
|
|
foreach(string section in astrSections)
|
|
{
|
|
CheckedMaterial cm = LoadCheckedMaterial(section);
|
|
m_CheckedMaterial.Add(section, cm);
|
|
}
|
|
}
|
|
|
|
iRes = GetPrivateProfileString("Option", "current-conf", "", temp, 10240, m_strPath);
|
|
if (temp.Length > 0)
|
|
{
|
|
m_strCurMaterial = temp.ToString();
|
|
}
|
|
|
|
if(m_CheckedMaterial.Count == 0)
|
|
{
|
|
m_strCurMaterial = "Default";
|
|
m_CheckedMaterial.Add(m_strCurMaterial, new CheckedMaterial());
|
|
}
|
|
}
|
|
|
|
public void Save()
|
|
{
|
|
WritePrivateProfileString("Option", "recent", OPTION.GetInstance().GetRecentAll(), m_strPath);
|
|
WritePrivateProfileString("Option", "bound", OPTION.GetInstance().WindowBoundStr(), m_strPath);
|
|
WritePrivateProfileString("Option", "checked-column", OPTION.GetInstance().CheckedColumnsStr(), m_strPath);
|
|
WritePrivateProfileString("Option", "unchecked-column", OPTION.GetInstance().UncheckedColumnsStr(), m_strPath);
|
|
|
|
foreach(var pair in m_CheckedMaterial)
|
|
{
|
|
WritePrivateProfileString(pair.Key, "checked-spring", string.Join(",", pair.Value.m_Springs.ToArray()), m_strPath);
|
|
WritePrivateProfileString(pair.Key, "checked-table", string.Join(",", pair.Value.m_Tables.ToArray()), m_strPath);
|
|
}
|
|
WritePrivateProfileString("Option", "conf-names", string.Join(",", m_CheckedMaterial.Keys.ToArray()), m_strPath);
|
|
WritePrivateProfileString("Option", "current-conf", m_strCurMaterial, m_strPath);
|
|
}
|
|
|
|
public void SetSpringChecked(List<string> CheckedItems)
|
|
{
|
|
if (m_bOnLoad == true)
|
|
return;
|
|
|
|
m_CheckedMaterial[m_strCurMaterial].m_Springs = CheckedItems;
|
|
}
|
|
|
|
public List<string> GetSpringChecked()
|
|
{
|
|
return m_CheckedMaterial[m_strCurMaterial].m_Springs;
|
|
}
|
|
|
|
public void SetTableChecked(List<string> CheckedItems)
|
|
{
|
|
if (m_bOnLoad == true)
|
|
return;
|
|
|
|
m_CheckedMaterial[m_strCurMaterial].m_Tables = CheckedItems;
|
|
}
|
|
public List<string> GetTableChecked()
|
|
{
|
|
return m_CheckedMaterial[m_strCurMaterial].m_Tables;
|
|
}
|
|
|
|
|
|
public struct COLUMN_NAME
|
|
{
|
|
public static string SPRING = "SurfaceMtSpring";
|
|
public static string TABLE = "SurfaceMtCarriage";
|
|
public static string RPN = "RPN";
|
|
public static string FORCE = "normal force";
|
|
public static string TEMP = "temperature";
|
|
public static string HUMIDITY = "humidity";
|
|
public static string VELOCITY = "velocity";
|
|
}
|
|
|
|
|
|
public class OPTION
|
|
{
|
|
private static OPTION m_instance = null;
|
|
|
|
public List<string> m_RecentList = new List<string>();
|
|
public Rectangle WindowBound { set; get; }
|
|
public List<string> CheckedColumns { set; get; }
|
|
public List<string> UncheckedColumns { set; get; }
|
|
|
|
public static OPTION GetInstance()
|
|
{
|
|
if (m_instance == null)
|
|
m_instance = new OPTION();
|
|
|
|
return m_instance;
|
|
}
|
|
|
|
public void AddRecentFile(string strPath)
|
|
{
|
|
if(m_RecentList.Find(s => s==strPath) != null)
|
|
m_RecentList.Remove(strPath);
|
|
|
|
m_RecentList.Add(strPath);
|
|
}
|
|
|
|
public string GetRecentAll()
|
|
{
|
|
return string.Join("//", m_RecentList);
|
|
}
|
|
|
|
public string WindowBoundStr()
|
|
{
|
|
return string.Format("{0}, {1}, {2}, {3}", WindowBound.Left, WindowBound.Width, WindowBound.Top, WindowBound.Height);
|
|
}
|
|
|
|
public string CheckedColumnsStr()
|
|
{
|
|
string strResult = "";
|
|
if(CheckedColumns != null)
|
|
{
|
|
foreach (var item in CheckedColumns)
|
|
{
|
|
if (strResult.Length > 0)
|
|
strResult += ",";
|
|
strResult += item;
|
|
}
|
|
}
|
|
|
|
return strResult;
|
|
}
|
|
|
|
public string UncheckedColumnsStr()
|
|
{
|
|
string strResult = "";
|
|
|
|
if(UncheckedColumns != null)
|
|
{
|
|
foreach (var item in UncheckedColumns)
|
|
{
|
|
if (strResult.Length > 0)
|
|
strResult += ",";
|
|
strResult += item;
|
|
}
|
|
}
|
|
|
|
return strResult;
|
|
}
|
|
}
|
|
|
|
|
|
public class ANALYSIS
|
|
{
|
|
public enum RISK
|
|
{
|
|
NO=3,
|
|
POTENTIAL=5,
|
|
HIGH=10
|
|
}
|
|
|
|
public enum DEPENDANCY
|
|
{
|
|
NO,
|
|
POTENTIAL,
|
|
HIGH,
|
|
NOT_ENNOUGH_DATA
|
|
}
|
|
|
|
public static RISK GetRisk(float fAvg)
|
|
{
|
|
if (fAvg <= 4)
|
|
return RISK.NO;
|
|
else if (fAvg <= 6)
|
|
return RISK.POTENTIAL;
|
|
else
|
|
return RISK.HIGH;
|
|
}
|
|
|
|
public static DEPENDANCY GetDependancy(float fStdev, int iTestCnt)
|
|
{
|
|
if (iTestCnt <= 3)
|
|
return DEPENDANCY.NOT_ENNOUGH_DATA;
|
|
else if (fStdev < 3.5f)
|
|
return DEPENDANCY.NO;
|
|
else if (fStdev < 5.5f)
|
|
return DEPENDANCY.POTENTIAL;
|
|
else
|
|
return DEPENDANCY.HIGH;
|
|
}
|
|
}
|
|
}
|
|
}
|