using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.Intrinsics.Arm;
using System.Xml.Serialization;
using WebWindowConfigurator;
using WebWindowConfigurator.Json;
using static WebWindowConfigurator.Json.WindowConst;
namespace WebWindowConfigurator
{
public class Window
{
private String m_sProfilePath;
public string sProfilePath
{
get
{
return m_sProfilePath;
}
set
{
m_sProfilePath = value;
}
}
private ObservableCollection m_AreaList = new ObservableCollection();
public ObservableCollection AreaList
{
get
{
return m_AreaList;
}
set
{
m_AreaList = value;
}
}
internal JsonWindow Serialize()
{
JsonWindow JsonWindow = new JsonWindow(sProfilePath);
foreach (var Area in AreaList)
JsonWindow.AreaList.Add(Area.Serialize());
return JsonWindow;
}
}
public abstract class Area
{
protected int m_nAreaId = -1;
public int nAreaId
{
get
{
return m_nAreaId;
}
set
{
m_nAreaId = value;
}
}
private List m_AreaList = new List();
public List AreaList
{
get
{
return m_AreaList;
}
set
{
m_AreaList = value;
}
}
private AreaTypes m_AreaType;
public AreaTypes AreaType
{
get
{
return m_AreaType;
}
set
{
m_AreaType = value;
//m_delDrawWindow();
}
}
internal void SetAreaType(AreaTypes AreaType)
{
m_AreaType = AreaType;
}
private Area m_ParentArea;
public Area ParentArea
{
get
{
return m_ParentArea;
}
}
internal void SetParentArea(Area ParentArea)
{
m_ParentArea = ParentArea;
}
public Area(Area ParentArea)
{
m_ParentArea = ParentArea;
}
internal abstract JsonArea Serialize();
}
public class Frame : Area
{
private ObservableCollection m_ShapeList = new ObservableCollection
{
new IdNameStruct((int)Shapes.RECTANGLE, "Rectangle"),
new IdNameStruct((int)Shapes.RIGHTCHAMFER, "Right Chamfer"),
new IdNameStruct((int)Shapes.LEFTCHAMFER, "Left Chamfer"),
new IdNameStruct((int)Shapes.DOUBLECHAMFER, "Double Chamfer"),
new IdNameStruct((int)Shapes.ARC, "Arc"),
new IdNameStruct((int)Shapes.ARC_FULL, "Arc Full"),
new IdNameStruct((int)Shapes.DOUBLEARC, "Double Arc"),
new IdNameStruct((int)Shapes.TRIANGLE, "Triangle")
};
public ObservableCollection ShapeList
{
get
{
return m_ShapeList;
}
}
private Shapes m_Shape;
public Shapes Shape
{
get
{
return m_Shape;
}
}
public int SelShapeIndex
{
get
{
return IdNameStruct.IndFromId((int)m_Shape, m_ShapeList);
}
set
{
Shapes SelShape = (Shapes)IdNameStruct.IdFromInd(value, m_ShapeList);
if (m_Shape != SelShape)
{
// verifico parametri Dimension
DimensionList.Clear();
// aggiungo Dimensioni
switch (SelShape)
{
case Shapes.RECTANGLE:
case Shapes.ARC_FULL:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Height", 1800, true));
break;
}
case Shapes.RIGHTCHAMFER:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Left Height", 1800, true));
DimensionList.Add(new FrameDimension(3, "Right Height", 1500, true));
break;
}
case Shapes.LEFTCHAMFER:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Left Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Right Height", 1800, true));
break;
}
case Shapes.DOUBLECHAMFER:
case Shapes.ARC:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Full Height", 1800, true));
break;
}
case Shapes.DOUBLEARC:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Full Height", 2400, true));
break;
}
case Shapes.TRIANGLE:
{
DimensionList.Add(new FrameDimension(1, "Width", 2000, true));
DimensionList.Add(new FrameDimension(2, "Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Height projection", 0, true));
break;
}
case Shapes.CUSTOM:
{
DimensionList.Clear();
break;
}
}
// aggiungo Joint
m_JointList.Clear();
switch (SelShape)
{
case Shapes.RECTANGLE:
case Shapes.RIGHTCHAMFER:
case Shapes.LEFTCHAMFER:
case Shapes.DOUBLECHAMFER:
case Shapes.ARC:
case Shapes.DOUBLEARC:
{
JointList.Add(new Joint(1, Joints.FULL_H));
JointList.Add(new Joint(2, Joints.FULL_H));
JointList.Add(new Joint(3, Joints.FULL_H));
JointList.Add(new Joint(4, Joints.FULL_H));
break;
}
case Shapes.ARC_FULL:
{
JointList.Add(new Joint(1, Joints.FULL_H));
JointList.Add(new Joint(2, Joints.FULL_H));
JointList.Add(new Joint(3, Joints.ANGLED));
JointList.Add(new Joint(4, Joints.ANGLED));
break;
}
case Shapes.TRIANGLE:
{
JointList.Add(new Joint(1, Joints.FULL_H));
JointList.Add(new Joint(2, Joints.FULL_H));
JointList.Add(new Joint(3, Joints.ANGLED));
break;
}
case Shapes.CUSTOM:
{
JointList.Clear();
break;
}
}
m_Shape = SelShape;
}
}
}
internal void SetSelShape(Shapes Value)
{
DimensionList.Clear();
// aggiungo Dimension
switch (Value)
{
case Shapes.RECTANGLE:
case Shapes.ARC_FULL:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Height", 1800, true));
break;
}
case Shapes.RIGHTCHAMFER:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Left Height", 1800, true));
DimensionList.Add(new FrameDimension(3, "Right Height", 1500, true));
break;
}
case Shapes.LEFTCHAMFER:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Left Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Right Height", 1800, true));
break;
}
case Shapes.DOUBLECHAMFER:
case Shapes.ARC:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Full Height", 1800, true));
break;
}
case Shapes.DOUBLEARC:
{
DimensionList.Add(new FrameDimension(1, "Width", 1500, true));
DimensionList.Add(new FrameDimension(2, "Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Full Height", 2400, true));
break;
}
case Shapes.TRIANGLE:
{
DimensionList.Add(new FrameDimension(1, "Width", 2000, true));
DimensionList.Add(new FrameDimension(2, "Height", 1500, true));
DimensionList.Add(new FrameDimension(3, "Height projection", 0, true));
break;
}
case Shapes.CUSTOM:
{
DimensionList.Clear();
break;
}
}
// aggiungo Joint
int nJointQty = 4;
switch (Value)
{
case Shapes.RECTANGLE:
case Shapes.RIGHTCHAMFER:
case Shapes.LEFTCHAMFER:
case Shapes.DOUBLECHAMFER:
case Shapes.ARC:
case Shapes.DOUBLEARC:
{
JointList.Add(new Joint(1, Joints.FULL_H));
JointList.Add(new Joint(2, Joints.FULL_H));
JointList.Add(new Joint(3, Joints.FULL_H));
JointList.Add(new Joint(4, Joints.FULL_H));
break;
}
case Shapes.ARC_FULL:
{
JointList.Add(new Joint(1, Joints.FULL_H));
JointList.Add(new Joint(2, Joints.FULL_H));
JointList.Add(new Joint(3, Joints.ANGLED));
JointList.Add(new Joint(4, Joints.ANGLED));
break;
}
case Shapes.TRIANGLE:
{
JointList.Add(new Joint(1, Joints.FULL_H));
JointList.Add(new Joint(2, Joints.FULL_H));
JointList.Add(new Joint(3, Joints.ANGLED));
break;
}
case Shapes.CUSTOM:
{
JointList.Clear();
break;
}
}
m_Shape = Value;
}
private ObservableCollection m_DimensionList = new ObservableCollection();
public ObservableCollection DimensionList
{
get
{
return m_DimensionList;
}
}
private ObservableCollection m_JointList = new ObservableCollection();
public ObservableCollection JointList
{
get
{
return m_JointList;
}
set
{
m_JointList = value;
}
}
private bool m_bBottomRail;
public bool BottomRail
{
get
{
return m_bBottomRail;
}
set
{
m_bBottomRail = value;
}
}
internal void SetBottomRail(bool bBottomRail)
{
m_bBottomRail = bBottomRail;
}
private int m_nBottomRailQty = 0;
public int BottomRailQty
{
get
{
return m_nBottomRailQty;
}
set
{
m_nBottomRailQty = value;
}
}
internal void SetBottomRailQty(int nBottomRailQty)
{
m_nBottomRailQty = nBottomRailQty;
}
private ObservableCollection m_Outline;
public ObservableCollection Outline
{
get
{
return m_Outline;
}
set
{
m_Outline = value;
}
}
public Frame(Area ParentArea) : base(ParentArea)
{
}
internal static Area CreateFrame(Window Window)
{
Frame NewFrame = new Frame(null/* TODO Change to default(_) if this is not a reference type */);
NewFrame.SetAreaType(AreaTypes.FRAME);
NewFrame.SetSelShape(Shapes.RECTANGLE);
NewFrame.SetBottomRail(false);
NewFrame.SetBottomRailQty(0);
return NewFrame;
}
private LuaShapes ConvertShape(Shapes value)
{
switch (value)
{
case Shapes.RECTANGLE:
{
return LuaShapes.RECT;
}
case Shapes.RIGHTCHAMFER:
{
return LuaShapes.CHAMFER_SIDE;
}
case Shapes.LEFTCHAMFER:
{
return LuaShapes.CHAMFER_SIDE;
}
case Shapes.DOUBLECHAMFER:
{
return LuaShapes.CHAMFER;
}
case Shapes.ARC:
{
return LuaShapes.SEGMENTAL_ARC;
}
case Shapes.ARC_FULL:
{
return LuaShapes.ROUND_ARC;
}
case Shapes.DOUBLEARC:
{
return LuaShapes.POINTED_ARC;
}
case Shapes.TRIANGLE:
{
return LuaShapes.TRIANGLE;
}
default:
{
return LuaShapes.RECT;
}
}
}
internal override JsonArea Serialize()
{
JsonFrame JsonFrame = new JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty);
foreach (var Dimension in DimensionList)
JsonFrame.DimensionList.Add(Dimension.Serialize());
foreach (var Joint in JointList)
JsonFrame.JointList.Add(Joint.Serialize());
foreach (var Area in AreaList)
JsonFrame.AreaList.Add(Area.Serialize());
return JsonFrame;
}
}
public class Sash : Area
{
public int nSashQty
{
get
{
return m_SashList.Count > 0 ? m_SashList.Count : 1;
}
set
{
if (value > m_SashList.Count)
{
// recupero larghezza ultimo
double dLastDimension = 100;
double dNewDimension = 100;
if (m_SashList.Count > 0)
{
dLastDimension = m_SashList[m_SashList.Count - 1].dDimension;
dNewDimension = dLastDimension / (value + 1 - nSashQty);
m_SashList[m_SashList.Count - 1].SetDimension(dNewDimension);
}
else
dNewDimension = dLastDimension / (value + 1 - nSashQty);
// aggiungo area Sash di default
for (var SplitIndex = m_SashList.Count; SplitIndex <= value - 1; SplitIndex++)
SashList.Add(new SashDimension(dNewDimension, true, this));
}
else if (value < m_SashList.Count)
{
double dLastDimension = 0;
for (var SplitIndex = m_SashList.Count - 1; SplitIndex >= value; SplitIndex += -1)
{
dLastDimension += m_SashList[SplitIndex].dDimension;
SashList.RemoveAt(SplitIndex);
}
dLastDimension += m_SashList[SashList.Count - 1].dDimension;
SashList[SashList.Count - 1].SetDimension(dLastDimension);
}
//RefreshHardwareList();
RefreshHardwareOptionList();
//SetFirstHardware();
}
}
internal void SetSashQty(int Qty)
{
if (Qty > m_SashList.Count)
{
// recupero larghezza ultimo
double dLastDimension = 100;
double dNewDimension = 100;
if (m_SashList.Count > 0)
{
dLastDimension = m_SashList[m_SashList.Count - 1].dDimension;
dNewDimension = dLastDimension / (Qty + 1 - nSashQty);
m_SashList[m_SashList.Count - 1].dDimension = dNewDimension;
}
else
dNewDimension = dLastDimension / (Qty + 1 - nSashQty);
// aggiungo area Sash di default
for (var SplitIndex = m_SashList.Count; SplitIndex <= Qty - 1; SplitIndex++)
SashList.Add(new SashDimension(dNewDimension, true, this));
}
else if (Qty < m_SashList.Count)
{
for (var SplitIndex = m_SashList.Count - 1; SplitIndex >= Qty; SplitIndex += -1)
SashList.RemoveAt(SplitIndex);
}
}
private bool m_bIsSashVertical;
public bool bIsSashVertical
{
get
{
return m_bIsSashVertical;
}
set
{
m_bIsSashVertical = value;
}
}
internal void SetIsSashVertical(bool IsSashVertical)
{
m_bIsSashVertical = IsSashVertical;
}
private bool m_bIsMeasureGlass;
public bool bIsMeasureGlass
{
get
{
return m_bIsMeasureGlass;
}
set
{
m_bIsMeasureGlass = value;
}
}
internal void SetIsMeasureGlass(bool IsMeasureGlass)
{
m_bIsMeasureGlass = IsMeasureGlass;
}
private ObservableCollection m_SashList = new ObservableCollection();
public ObservableCollection SashList
{
get
{
return m_SashList;
}
set
{
m_SashList = value;
}
}
private SashTypes m_SashType;
public SashTypes SashType
{
get
{
return m_SashType;
}
set
{
m_SashType = value;
}
}
internal void SetSashType(SashTypes SashType)
{
m_SashType = SashType;
}
private ObservableCollection m_JointList = new ObservableCollection();
public ObservableCollection JointList
{
get
{
return m_JointList;
}
set
{
m_JointList = value;
}
}
private bool m_bBottomRail;
public bool BottomRail
{
get
{
return m_bBottomRail;
}
set
{
m_bBottomRail = value;
}
}
internal void SetBottomRail(bool bBottomRail)
{
m_bBottomRail = bBottomRail;
}
private int m_nBottomRailQty = 0;
public int BottomRailQty
{
get
{
return m_nBottomRailQty;
}
set
{
m_nBottomRailQty = value;
}
}
internal void SetBottomRailQty(int nBottomRailQty)
{
m_nBottomRailQty = nBottomRailQty;
}
private bool m_bIsPercentage = true;
public bool bIsPercentage
{
get
{
return m_bIsPercentage;
}
}
private ObservableCollection m_HardwareList = new ObservableCollection();
public ObservableCollection HardwareList
{
get
{
return m_HardwareList;
}
}
private Hardware m_SelHardware;
//public Hardware SelHardware
//{
// get
// {
// return m_SelHardware;
// }
// set
// {
// m_SelHardware = value;
// if (m_SelHardware != null && m_SelHardware.sId != "000000")
// {
// string sHwdOptPath = "";
// var gf = EgtLuaCreateGlobTable("WDG");
// var tft = EgtLuaSetGlobIntVar("WDG.AREAID", m_nAreaId);
// var tfy = EgtLuaSetGlobStringVar("WDG.HDWFAVOURITE", value.sId);
// SashDimension HandleSash = m_SashList.FirstOrDefault(x => x.bHasHandle);
// string sHandle = "Dx";
// switch (GetOpeningSide(HandleSash.OpeningType))
// {
// case object _ when OpeningSides.LEFT:
// {
// sHandle = "Sx";
// break;
// }
// case object _ when OpeningSides.RIGHT:
// {
// sHandle = "Dx";
// break;
// }
// }
// var tfd = EgtLuaSetGlobStringVar("WDG.HDWHANDLE", sHandle);
// var tlt = EgtLuaCallFunction("WinCreate_GetHardwareOptionPath");
// var tltf = EgtLuaGetGlobStringVar("WDG.HWDOPTPATH", sHwdOptPath);
// if (!string.IsNullOrWhiteSpace(sHwdOptPath))
// {
// XmlSerializer serializer = new XmlSerializer(typeof(ParametriOpzioni));
// ParametriOpzioni HwdOptions = null/* TODO Change to default(_) if this is not a reference type */;
// string sHdwOptPath = Path.ChangeExtension(sHwdOptPath, ".opt");
// bool bHdwOptFound = false;
// for (var WaitIndex = 0; WaitIndex <= 100; WaitIndex++)
// {
// if (File.Exists(sHdwOptPath))
// {
// bHdwOptFound = true;
// break;
// }
// System.Threading.Thread.Sleep(100);
// }
// if (bHdwOptFound)
// {
// string sHwdOptText = "";
// try
// {
// sHwdOptText = File.ReadAllText(sHdwOptPath);
// }
// catch (Exception ex)
// {
// EgtOutLog("Hardware file opt not found or read!");
// }
// if (!string.IsNullOrWhiteSpace(sHwdOptText))
// {
// using (TextReader reader = new StringReader(sHwdOptText))
// {
// HwdOptions = serializer.Deserialize(reader);
// }
// if (!IsNothing(HwdOptions))
// {
// m_HwdOptionList.Clear();
// foreach (var HdwOption in HwdOptions.Items)
// m_HwdOptionList.Add(new AGBOption(HdwOption));
// NotifyPropertyChanged(nameof(HwdOptionList));
// }
// }
// }
// var ud = EgtLuaResetGlobVar("WDG");
// }
// }
// }
//}
//internal void SetSelHardware(Hardware value)
//{
// m_SelHardware = value;
//}
//internal void SetSelHardwareFromId(string sId)
//{
// m_SelHardware = m_HardwareList.FirstOrDefault(x => x.sId == sId);
// if (IsNothing(m_SelHardware))
// m_SelHardware = m_HardwareList(0);
//}
//internal void SetFirstHardware()
//{
// if (m_HardwareList.Count > 0)
// {
// m_SelHardware = m_HardwareList(0);
// }
//}
private ObservableCollection m_HwdOptionList = new ObservableCollection();
public ObservableCollection HwdOptionList
{
get
{
return m_HwdOptionList;
}
}
public Sash(Area ParentArea) : base(ParentArea)
{
}
internal static Sash CreateSash(Area Area)
{
Sash NewSash = new Sash(Area);
NewSash.SetAreaType(AreaTypes.SASH);
NewSash.SetSashQty(1);
NewSash.SetIsSashVertical(true);
// recupero numero di lati dell'area contenitore
//int nOutlineLayerId = EgtGetFirstNameInGroup(Area.nAreaId, WIN_OUTLINE);
//int nJointQty = EgtGetGroupObjs(nOutlineLayerId);
//for (var JointIndex = 0; JointIndex <= nJointQty - 1; JointIndex++)
// NewSash.JointList.Add(new Joint(JointIndex + 1, Joints.FULL_H));
NewSash.SetBottomRail(false);
NewSash.SetBottomRailQty(0);
//NewSash.RefreshHardwareList();
NewSash.RefreshHardwareOptionList();
//NewSash.SetFirstHardware();
return NewSash;
}
//private string FindSashShape()
//{
// // Return "R"
// // se non ancora creato, recupero area precedente
// int nAreaId = m_nAreaId;
// if (m_nAreaId == (int)GDB_ID.NULL)
// nAreaId = ParentArea.nAreaId;
// int nOutlineLayerId = EgtGetFirstNameInGroup(nAreaId, WIN_OUTLINE);
// List OutlineIdList = new List();
// int nOutlineId = EgtGetFirstInGroup(nOutlineLayerId);
// while (nOutlineId != (int)GDB_ID.NULL)
// {
// OutlineIdList.Add(nOutlineId);
// nOutlineId = EgtGetNext(nOutlineId);
// }
// int nTempLayerId = EgtCreateGroup(nAreaId);
// int nCompoOutlineId = EgtCreateCurveCompo(nTempLayerId, OutlineIdList.ToArray(), false);
// Point3d ptP;
// Vector3d vtL1;
// Vector3d vtL2;
// Vector3d vtB1;
// Vector3d vtB2;
// Vector3d vtN;
// double dRad;
// bool bCCW;
// if (EgtCurveIsARectangle(nCompoOutlineId, 0.001, ptP, vtL1, vtL2))
// return "R";
// else if (EgtCurveIsACircle(nCompoOutlineId, ptP, vtN, dRad, bCCW))
// return "C";
// else if (EgtCurveIsATrapezoid(nCompoOutlineId, ptP, vtB1, vtL1, vtB2))
// return "T";
// else
// for (var nOutlineIndex = 0; nOutlineIndex <= OutlineIdList.Count - 1; nOutlineIndex++)
// {
// if (EgtGetType(OutlineIdList[nOutlineIndex]) == GDB_TY.CRV_ARC)
// {
// Vector3d vtStart;
// EgtStartVector(OutlineIdList[nOutlineIndex], GDB_ID.ROOT, vtStart);
// Vector3d vtEnd;
// EgtEndVector(OutlineIdList[nOutlineIndex], GDB_ID.ROOT, vtEnd);
// int nPrevOutlineId = nOutlineId > 0 ? OutlineIdList[nOutlineIndex - 1] : OutlineIdList[OutlineIdList.Count - 1];
// int dPrevLen;
// EgtCurveLength(nPrevOutlineId, dPrevLen);
// Vector3d vtPrev;
// EgtStartVector(nPrevOutlineId, vtPrev);
// int nNextOutlineId = nOutlineId < OutlineIdList.Count - 1 ? OutlineIdList[nOutlineIndex + 1] : OutlineIdList[0];
// int dNextLen;
// EgtCurveLength(nNextOutlineId, dNextLen);
// Vector3d vtNext;
// EgtEndVector(nNextOutlineId, vtNext);
// if (Math.Abs(dPrevLen - dNextLen) < 10 * EPS_SMALL)
// {
// if (AreSameVectorApprox(vtEnd, vtNext))
// return "AS";
// else
// return "AR";
// }
// else if (AreSameVectorApprox(vtEnd, vtNext))
// return "SS";
// else
// return "SR";
// }
// }
// return "R";
//}
internal OpeningTypes GetOpeningType(Openings OpeningType)
{
switch (OpeningType)
{
case Openings.TURNONLY_LEFT:
case Openings.TURNONLY_RIGHT:
{
return OpeningTypes.TURNONLY;
}
case Openings.TILTTURN_LEFT:
case Openings.TILTTURN_RIGHT:
{
return OpeningTypes.TILTTURN;
}
case Openings.TILTONLY_TOP:
case Openings.TILTONLY_BOTTOM:
{
return OpeningTypes.TILTONLY;
}
case Openings.PIVOT:
{
return OpeningTypes.PIVOT;
}
case Openings.FIXED:
{
return OpeningTypes.FIXED;
}
case Openings.COMPLANARSLIDE_LEFT:
case Openings.COMPLANARSLIDE_RIGHT:
{
return OpeningTypes.COMPLANARSLIDE;
}
case Openings.LIFTSLIDE_LEFT:
case Openings.LIFTSLIDE_RIGHT:
{
return OpeningTypes.LIFTSLIDE;
}
default:
{
return OpeningTypes.NULL;
}
}
}
private string ConvertOpeningType()
{
if (m_SashList.Any(x => GetOpeningType(x.OpeningType) == OpeningTypes.TILTTURN))
return "AR";
else
switch (GetOpeningType(m_SashList[0].OpeningType))
{
case OpeningTypes.TURNONLY:
{
return "AB";
}
case OpeningTypes.TILTONLY:
{
return "VA";
}
case OpeningTypes.PIVOT:
{
return "BI";
}
case OpeningTypes.COMPLANARSLIDE:
{
return "CO";
}
case OpeningTypes.LIFTSLIDE:
{
return "AS";
}
default:
{
return "";
}
}
}
//internal void RefreshHardwareList()
//{
// m_HardwareList.Clear();
// string sSashShape = FindSashShape();
// string sOpeningType = ConvertOpeningType();
// m_HardwareList = new ObservableCollection(from Hardware in Map.refManageWindowVM.HardwareList
// where Hardware.sId == "000000" || (Hardware.nSashQty == nSashQty && Hardware.sShape == sSashShape && Hardware.sOpeningType == sOpeningType)
// select Hardware);
//}
internal void RefreshHardwareOptionList()
{
m_HwdOptionList.Clear();
}
internal OpeningSides GetOpeningSide(Openings OpeningType)
{
switch (OpeningType)
{
case Openings.TURNONLY_LEFT:
case Openings.TILTTURN_LEFT:
case Openings.TILTONLY_TOP:
case Openings.COMPLANARSLIDE_LEFT:
case Openings.LIFTSLIDE_LEFT:
{
return OpeningSides.LEFT;
}
case Openings.TURNONLY_RIGHT:
case Openings.TILTTURN_RIGHT:
case Openings.TILTONLY_BOTTOM:
case Openings.COMPLANARSLIDE_RIGHT:
case Openings.LIFTSLIDE_RIGHT:
{
return OpeningSides.RIGHT;
}
default:
{
return OpeningSides.NULL;
}
}
}
internal override JsonArea Serialize()
{
JsonSash JsonSash = new JsonSash(m_bIsSashVertical, m_SashType/*, m_SelHardware.sId*/);
foreach (var SashDimension in SashList)
JsonSash.SashList.Add(SashDimension.Serialize());
foreach (var Joint in JointList)
JsonSash.JointList.Add(Joint.Serialize());
foreach (var Area in AreaList)
JsonSash.AreaList.Add(Area.Serialize());
return JsonSash;
}
}
public class Split : Area
{
public int nSplitQty
{
get
{
return m_SplitPositionList.Count > 0 ? m_SplitPositionList.Count - 1 : 0;
}
set
{
if (value > m_SplitPositionList.Count - 1)
{
// recupero larghezza ultimo
double dLastDimension = 100;
double dNewDimension = 100;
if (m_SplitPositionList.Count > 0)
{
dLastDimension = m_SplitPositionList[m_SplitPositionList.Count - 1].dDimension;
dNewDimension = dLastDimension / (value + 1 - nSplitQty);
m_SplitPositionList[m_SplitPositionList.Count - 1].SetDimension(dNewDimension);
}
else
dNewDimension = dLastDimension / (value + 1 - nSplitQty);
// aggiungo area Split di default
for (var SplitIndex = m_SplitPositionList.Count; SplitIndex <= value; SplitIndex++)
SplitPositionList.Add(new SplitDimension(dNewDimension, true, this));
}
else if (value < m_SplitPositionList.Count - 1)
{
double dLastDimension = 0;
for (var SplitIndex = m_SplitPositionList.Count - 1; SplitIndex >= value + 1; SplitIndex += -1)
{
dLastDimension += m_SplitPositionList[SplitIndex].dDimension;
SplitPositionList.RemoveAt(SplitIndex);
}
dLastDimension += m_SplitPositionList[SplitPositionList.Count - 1].dDimension;
SplitPositionList[SplitPositionList.Count - 1].SetDimension(dLastDimension);
}
}
}
internal void SetSplitQty(int Qty, bool NotifyProperty = false)
{
if (Qty > m_SplitPositionList.Count)
{
// recupero larghezza ultimo
double dLastDimension = 100;
double dNewDimension = 100;
if (m_SplitPositionList.Count > 0)
{
dLastDimension = m_SplitPositionList[m_SplitPositionList.Count - 1].dDimension;
dNewDimension = dLastDimension / (Qty + 1 - nSplitQty);
m_SplitPositionList[m_SplitPositionList.Count - 1].dDimension = dNewDimension;
}
else
dNewDimension = dLastDimension / (Qty + 1 - nSplitQty);
// aggiungo area Split di default
for (var SplitIndex = m_SplitPositionList.Count; SplitIndex <= Qty; SplitIndex++)
SplitPositionList.Add(new SplitDimension(dNewDimension, true, this));
}
else if (Qty < m_SplitPositionList.Count)
{
for (var SplitIndex = m_SplitPositionList.Count - 1; SplitIndex >= Qty; SplitIndex += -1)
SplitPositionList.RemoveAt(SplitIndex);
}
}
private ObservableCollection m_SplitShapeList = new ObservableCollection
{
new IdNameStruct((int)SplitShapes.VERTICAL, "Vertical"),
new IdNameStruct((int)SplitShapes.HORIZONTAL, "Horizontal"),
new IdNameStruct((int)SplitShapes.GRID, "Grid"),
new IdNameStruct((int)SplitShapes.CUSTOM, "Custom")
};
public ObservableCollection SplitShapeList
{
get
{
return m_SplitShapeList;
}
}
private SplitShapes m_SelSplitShape;
public int SelSplitShapeIndex
{
get
{
return IdNameStruct.IndFromId((int)m_SelSplitShape, m_SplitShapeList);
}
set
{
m_SelSplitShape = (SplitShapes)IdNameStruct.IdFromInd(value, m_SplitShapeList);
}
}
internal void SetSplitShape(SplitShapes Value, bool NotifyProperty = false)
{
m_SelSplitShape = Value;
}
internal SplitShapes SelSplitShape
{
get
{
return m_SelSplitShape;
}
}
private bool m_bIsPercentage = true;
public bool bIsPercentage
{
get
{
return m_bIsPercentage;
}
}
private ObservableCollection m_SplitPositionList = new ObservableCollection();
public ObservableCollection SplitPositionList
{
get
{
return m_SplitPositionList;
}
set
{
m_SplitPositionList = value;
}
}
private Curve m_Split;
public Curve sSplit
{
get
{
return m_Split;
}
set
{
m_Split = value;
}
}
public Split(Area ParentArea) : base(ParentArea)
{
}
internal static Split CreateSplit(Area Area, SplitShapes SplitShape)
{
Split Split = new Split(Area);
Split.SetAreaType(AreaTypes.SPLIT);
Split.SetSplitShape(SplitShape, true);
return Split;
}
internal override JsonArea Serialize()
{
JsonSplit JsonSplit = new JsonSplit(m_SelSplitShape);
foreach (var SplitPosition in m_SplitPositionList)
JsonSplit.SplitPositionList.Add(SplitPosition.Serialize());
foreach (var Area in AreaList)
JsonSplit.AreaList.Add(Area.Serialize());
return JsonSplit;
}
}
public class Splitted : Area
{
public Splitted(Area ParentArea) : base(ParentArea)
{
}
internal static Splitted CreateSplitted(Area Area)
{
Splitted Splitted = new Splitted(Area);
Splitted.SetAreaType(AreaTypes.SPLITTED);
return Splitted;
}
internal override JsonArea Serialize()
{
JsonSplitted JsonSplitted = new JsonSplitted();
foreach (var Area in AreaList)
JsonSplitted.AreaList.Add(Area.Serialize());
return JsonSplitted;
}
}
public class Fill : Area
{
private int m_SelectedRadio;
public int SelectedRadio
{
get
{
return m_SelectedRadio;
}
set
{
m_SelectedRadio = value;
}
}
private FillTypes m_FillType;
public FillTypes FillType
{
get
{
return m_FillType;
}
set
{
m_FillType = value;
}
}
internal void SetFillType(FillTypes FillType)
{
switch (FillType)
{
case FillTypes.GLASS:
{
bGlass_IsChecked = true;
break;
}
case FillTypes.WOOD:
{
bWood_IsChecked = true;
break;
}
}
}
private bool[] m_Fill_IsChecked = new[] { false, false };
public bool bGlass_IsChecked
{
get
{
return m_Fill_IsChecked[0];
}
set
{
m_Fill_IsChecked[0] = value;
}
}
public bool bWood_IsChecked
{
get
{
return m_Fill_IsChecked[1];
}
set
{
m_Fill_IsChecked[1] = value;
}
}
public Fill(Area ParentArea) : base(ParentArea)
{
}
internal static Fill CreateFill(Area Area, FillTypes FillType)
{
Fill Fill = new Fill(Area);
Fill.SetAreaType(AreaTypes.FILL);
Fill.SetFillType(FillType);
return Fill;
}
internal override JsonArea Serialize()
{
JsonFill JsonFill = new JsonFill(FillType);
foreach (var Area in AreaList)
JsonFill.AreaList.Add(Area.Serialize());
return JsonFill;
}
}
public class Joint
{
private int m_nIndex;
public int nIndex
{
get
{
return m_nIndex;
}
}
private List m_JointTypeList = new List
{
new IdNameStruct((int)Joints.ANGLED, "Angled"),
new IdNameStruct((int)Joints.FULL_H, "Full H"),
new IdNameStruct((int)Joints.FULL_V, "Full V")
};
public List JointTypeList
{
get
{
return m_JointTypeList;
}
}
private Joints m_SelJointType;
public int SelJointTypeIndex
{
get
{
return IdNameStruct.IndFromId((int)m_SelJointType, m_JointTypeList);
}
set
{
m_SelJointType = (Joints)IdNameStruct.IdFromInd(value, m_JointTypeList);
}
}
public Joints SelJointType
{
get
{
return m_SelJointType;
}
set
{
m_SelJointType = value;
}
}
internal void SetSelJointType(Joints value)
{
m_SelJointType = value;
//NotifyPropertyChanged(nameof(SelJointTypeIndex));
}
public Joint(int nIndex, Joints SelJointType)
{
m_nIndex = nIndex;
m_SelJointType = SelJointType;
}
internal JsonJoint Serialize()
{
JsonJoint JsonJoint = new JsonJoint(m_nIndex, m_SelJointType);
return JsonJoint;
}
}
public class Curve
{
private GDB_TY m_CurveType;
public GDB_TY CurveType
{
get
{
return m_CurveType;
}
set
{
m_CurveType = value;
}
}
private Point3d m_ptStart;
public Point3d ptStart
{
get
{
return m_ptStart;
}
set
{
m_ptStart = value;
}
}
private Point3d m_ptEnd;
public Point3d ptEnd
{
get
{
return m_ptEnd;
}
set
{
m_ptEnd = value;
}
}
}
public class Hardware
{
private string m_sId;
public string sId
{
get
{
return m_sId;
}
}
private string m_sName;
public string sName
{
get
{
return m_sName;
}
}
private string m_sOpeningType;
public string sOpeningType
{
get
{
return m_sOpeningType;
}
}
private string m_sShape;
public string sShape
{
get
{
return m_sShape;
}
}
private int m_nSashQty;
public int nSashQty
{
get
{
return m_nSashQty;
}
}
private int m_nSashPosition;
public int nSashPosition
{
get
{
return m_nSashPosition;
}
}
public Hardware(string sId, string sName, string sOpeningType, string sShape, int nSashQty, int nSashPosition)
{
m_sId = sId;
m_sName = sName;
m_sOpeningType = sOpeningType;
m_sShape = sShape;
m_nSashQty = nSashQty;
m_nSashPosition = nSashPosition;
}
}
public class AGBOption
{
public enum HDWOPTIONTYPES : int
{
TEXT = 1,
LENGHT = 2,
COMBO = 3
}
private HDWOPTIONTYPES m_Type;
public HDWOPTIONTYPES Type
{
get
{
return m_Type;
}
}
private string m_sName;
public string sName
{
get
{
return m_sName;
}
}
private string m_sDescription;
public string sDescription
{
get
{
return m_sDescription;
}
}
private List m_ValueList = new List();
public List ValueList
{
get
{
return m_ValueList;
}
}
private AGBOptionParameter m_sValue;
public AGBOptionParameter sValue
{
get
{
return m_sValue;
}
set
{
m_sValue = value;
}
}
private Visibility m_OptVisibility;
public Visibility OptVisibility
{
get
{
return m_OptVisibility;
}
}
//public AGBOption(ParametriOpzioniParametri HdwOptionParam)
//{
// if (HdwOptionParam.Opzioni.Count > 0)
// {
// m_Type = HDWOPTIONTYPES.COMBO;
// foreach (var Value in HdwOptionParam.Opzioni)
// m_ValueList.Add(new AGBOptionParameter(Value.Valore, Value.DescrizioneOpzione));
// }
// else
// m_Type = HDWOPTIONTYPES.TEXT;
// m_sName = HdwOptionParam.NomeParametro;
// m_sDescription = HdwOptionParam.DescrizioneParametro;
// m_sValue = m_ValueList.FirstOrDefault(x => x.sValue == HdwOptionParam.ValoreCorrente);
// m_OptVisibility = Visibility.Visible; // If(HdwOptionParam.Visible.ToLower = "true", Visibility.Visible, Visibility.Collapsed)
//}
}
public class AGBOptionParameter
{
private string m_sValue;
public string sValue
{
get
{
return m_sValue;
}
}
private string m_sDescription;
public string sDescription
{
get
{
return m_sDescription;
}
}
public AGBOptionParameter(string sValue, string sDescription)
{
m_sValue = sValue;
m_sDescription = sDescription;
}
}
public class FrameDimension
{
private bool m_bIsLen = false;
private int m_nIndex;
public int nIndex
{
get
{
return m_nIndex;
}
}
private string m_sName;
public string sName
{
get
{
return m_sName;
}
}
private double m_dValue;
public double dValue
{
get
{
return m_dValue;
}
set
{
m_dValue = value;
}
}
public FrameDimension(int nIndex, string sName, double dValue, bool bIsLen)
{
m_nIndex = nIndex;
m_sName = sName;
m_dValue = dValue;
m_bIsLen = bIsLen;
}
internal JsonFrameDimension Serialize()
{
JsonFrameDimension JsonFrameDimension = new JsonFrameDimension(m_nIndex, m_sName, m_dValue);
return JsonFrameDimension;
}
}
public class SashDimension
{
// reference
private Sash m_Parent;
private bool m_bIsRelative = false;
public bool bIsRelative
{
get
{
return m_bIsRelative;
}
}
private List m_OpeningTypeList = new List
{
new IdNameStruct((int)Openings.TURNONLY_LEFT, ">"),
new IdNameStruct((int)Openings.TURNONLY_RIGHT, "<"),
new IdNameStruct((int)Openings.TILTTURN_LEFT, ">*"),
new IdNameStruct((int)Openings.TILTTURN_RIGHT, "<*"),
new IdNameStruct((int)Openings.TILTONLY_TOP, "˄"),
new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "˅"),
new IdNameStruct((int)Openings.PIVOT, "◊"),
new IdNameStruct((int)Openings.FIXED, "X"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "-→"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "←-"),
new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "┌→"),
new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "←┐")
};
public List OpeningTypeList
{
get
{
return m_OpeningTypeList;
}
}
private Openings m_SelOpeningType;
public Openings SelOpeningType
{
get
{
return m_SelOpeningType;
}
set
{
m_SelOpeningType = value;
//m_Parent.RefreshHardwareList();
m_Parent.RefreshHardwareOptionList();
//m_Parent.SetFirstHardware();
}
}
public Openings OpeningType
{
get
{
return (Openings)m_SelOpeningType;
}
}
internal void SetOpeningType(Openings value)
{
m_SelOpeningType = value;
}
public int SelOpeningTypeIndex
{
get
{
return IdNameStruct.IndFromId((int)m_SelOpeningType, m_OpeningTypeList);
}
set
{
m_SelOpeningType = (Openings)IdNameStruct.IdFromInd(value, m_OpeningTypeList);
}
}
private bool m_bHasHandle;
public bool bHasHandle
{
get
{
return m_bHasHandle;
}
set
{
m_bHasHandle = value;
}
}
internal void SetHasHandle(bool value)
{
m_bHasHandle = value;
}
private double m_dDimension;
public double dDimension
{
get
{
return m_dDimension;
}
set
{
// se sono in percentuale
if (m_bIsRelative)
{
// verifico se ci sono assoluti
List RelativeDimList = m_Parent.SashList.Where(x => x.bIsRelative).ToList();
if (RelativeDimList.Count > 0)
{
if (m_Parent.bIsPercentage)
{
int nIndex = RelativeDimList.IndexOf(this);
if (value < m_dDimension)
{
if (nIndex < RelativeDimList.Count - 1)
RelativeDimList[nIndex + 1].SetDimension(RelativeDimList[nIndex + 1].dDimension + (m_dDimension - value));
else if (RelativeDimList.Count > 1)
RelativeDimList[nIndex - 1].SetDimension(RelativeDimList[nIndex - 1].dDimension + (m_dDimension - value));
else
{
m_dDimension = 100;
return;
}
}
else
{
double dRes = value;
if (nIndex < RelativeDimList.Count - 1)
{
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
dRes += RelativeDimList[nInd].dDimension;
dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1);
for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++)
RelativeDimList[Ind].SetDimension(dRes);
}
else if (RelativeDimList.Count > 1)
{
for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++)
dRes += RelativeDimList[Ind].dDimension;
dRes = (100 - dRes) / (nIndex - 1);
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
RelativeDimList[nInd].SetDimension(dRes);
}
else
{
m_dDimension = 100;
return;
}
}
}
else
{
}
}
}
m_dDimension = value;
}
}
internal void SetDimension(double dValue)
{
m_dDimension = dValue;
}
public SashDimension(double dDimension, bool bIsRelative, Sash Parent)
{
m_dDimension = dDimension;
m_bIsRelative = bIsRelative;
m_Parent = Parent;
// assengno maniglia
if (Parent.SashList.Count == 0 || !Parent.SashList.Any(x => x.bHasHandle))
m_bHasHandle = true;
// assegno tipo di anta
if (Parent.SashList.Count == 0)
SetOpeningType(Openings.TILTTURN_LEFT);
else if (Parent.SashList.Count == 1)
{
switch (Parent.SashList[0].OpeningType)
{
case Openings.TURNONLY_LEFT:
{
SetOpeningType(Openings.TURNONLY_RIGHT);
break;
}
case Openings.TURNONLY_RIGHT:
{
SetOpeningType(Openings.TURNONLY_LEFT);
break;
}
case Openings.TILTTURN_LEFT:
{
SetOpeningType(Openings.TILTTURN_RIGHT);
break;
}
case Openings.TILTTURN_RIGHT:
{
SetOpeningType(Openings.TILTTURN_LEFT);
break;
}
case Openings.TILTONLY_TOP:
{
SetOpeningType(Openings.TILTONLY_BOTTOM);
break;
}
case Openings.TILTONLY_BOTTOM:
{
SetOpeningType(Openings.TILTONLY_TOP);
break;
}
case Openings.COMPLANARSLIDE_LEFT:
{
SetOpeningType(Openings.COMPLANARSLIDE_RIGHT);
break;
}
case Openings.COMPLANARSLIDE_RIGHT:
{
SetOpeningType(Openings.COMPLANARSLIDE_LEFT);
break;
}
case Openings.LIFTSLIDE_LEFT:
{
SetOpeningType(Openings.LIFTSLIDE_RIGHT);
break;
}
case Openings.LIFTSLIDE_RIGHT:
{
SetOpeningType(Openings.LIFTSLIDE_LEFT);
break;
}
}
}
else
SetOpeningType(Parent.SashList[Parent.SashList.Count - 1].OpeningType);
}
internal JsonSashDimension Serialize()
{
JsonSashDimension JsonSashDimension = new JsonSashDimension(OpeningType, m_bHasHandle, m_dDimension);
return JsonSashDimension;
}
}
public class SplitDimension
{
// reference
private Split m_Parent;
private bool m_bIsRelative = false;
public bool bIsRelative
{
get
{
return m_bIsRelative;
}
}
internal void SetIsRelative(bool value)
{
m_bIsRelative = value;
}
private double m_dDimension;
public double dDimension
{
get
{
return m_dDimension;
}
set
{
// se sono in percentuale
if (m_bIsRelative)
{
// verifico se ci sono assoluti
List RelativeDimList = m_Parent.SplitPositionList.Where(x => x.bIsRelative).ToList();
if (RelativeDimList.Count > 0)
{
if (m_Parent.bIsPercentage)
{
int nIndex = RelativeDimList.IndexOf(this);
if (value < m_dDimension)
{
if (nIndex < RelativeDimList.Count - 1)
RelativeDimList[nIndex + 1].SetDimension(RelativeDimList[nIndex + 1].dDimension + (m_dDimension - value));
else if (RelativeDimList.Count > 1)
RelativeDimList[nIndex - 1].SetDimension(RelativeDimList[nIndex - 1].dDimension + (m_dDimension - value));
else
{
m_dDimension = 100;
return;
}
}
else
{
double dRes = value;
if (nIndex < RelativeDimList.Count - 1)
{
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
dRes += RelativeDimList[nInd].dDimension;
dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1);
for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++)
RelativeDimList[Ind].SetDimension(dRes);
}
else if (RelativeDimList.Count > 1)
{
for (var Ind = nIndex + 1; Ind <= RelativeDimList.Count - 1; Ind++)
dRes += RelativeDimList[Ind].dDimension;
dRes = (100 - dRes) / (nIndex - 1);
for (var nInd = 0; nInd <= nIndex - 1; nInd++)
RelativeDimList[nInd].SetDimension(dRes);
}
else
{
m_dDimension = 100;
return;
}
}
}
else
{
}
}
}
m_dDimension = value;
}
}
internal void SetDimension(double dValue)
{
m_dDimension = dValue;
}
public SplitDimension(double dDimension, bool bIsRelative, Split Parent)
{
m_dDimension = dDimension;
m_bIsRelative = bIsRelative;
m_Parent = Parent;
}
internal JsonSplitDimension Serialize()
{
JsonSplitDimension JsonSplitDimension = new JsonSplitDimension(m_bIsRelative, m_dDimension);
return JsonSplitDimension;
}
}
public struct IdNameStruct
{
private int m_Id;
private string m_Name;
public int Id
{
get
{
return m_Id;
}
set
{
m_Id = value;
}
}
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
public IdNameStruct(int Id, string Name)
{
this = default(IdNameStruct);
m_Id = Id;
m_Name = Name;
}
public override string ToString()
{
return Name;
}
public static int IndFromId(int Id, ObservableCollection List)
{
checked
{
int num = List.Count - 1;
for (int i = 0; i <= num; i++)
{
if (List[i].Id == Id)
{
return i;
}
}
return 0;
}
}
public static int IndFromId(int Id, List List)
{
checked
{
int num = List.Count - 1;
for (int i = 0; i <= num; i++)
{
if (List[i].Id == Id)
{
return i;
}
}
return 0;
}
}
public static int IdFromInd(int Ind, ObservableCollection List)
{
return List[Ind].Id;
}
public static int IdFromInd(int Ind, List List)
{
return List[Ind].Id;
}
public static int IndFromId(int Id, ObservableCollection