using Newtonsoft.Json.Linq; using System.Collections.ObjectModel; using System.ComponentModel; using System.Drawing; using System.Runtime.Intrinsics.Arm; using System.Xml.Serialization; using WebWindowConfigurator.Json; using static WebWindowConfigurator.Json.WindowConst; namespace WebWindowConfigurator { 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 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 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 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 IdNameStruct m_SelOpeningType; public IdNameStruct 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.Id; } } internal void SetOpeningType(Openings value) { m_SelOpeningType = m_OpeningTypeList.FirstOrDefault(x => (Openings)x.Id == value); } 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 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 List) { checked { int num = List.Count - 1; for (int i = 0; i <= num; i++) { if (List[i] is IdNameStruct && ((IdNameStruct)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] is IdNameStruct && ((IdNameStruct)List[i]).Id == Id) { return i; } } return 0; } } public static int IdFromInd(int Ind, ObservableCollection List) { if (List[Ind] is IdNameStruct) { return ((IdNameStruct)List[Ind]).Id; } return 0; } public static int IdFromInd(int Ind, List List) { if (List[Ind] is IdNameStruct) { return ((IdNameStruct)List[Ind]).Id; } return 0; } //public static int IdFromName(string Name, ObservableCollection List) //{ // checked // { // int num = List.Count - 1; // for (int i = 0; i <= num; i++) // { // if (Operators.CompareString(((IdNameStruct)List[i]).Name, Name, TextCompare: false) == 0) // { // return ((IdNameStruct)List[i]).Id; // } // } // return 0; // } //} //public static int IdFromName(string Name, List List) //{ // checked // { // int num = List.Count - 1; // for (int i = 0; i <= num; i++) // { // if (Operators.CompareString(((IdNameStruct)List[i]).Name, Name, TextCompare: false) == 0) // { // return ((IdNameStruct)List[i]).Id; // } // } // return 0; // } //} } }