コード例 #1
0
        internal IEnumerable <DiagramObject> CreateDiagramObjects()
        {
            List <DiagramObject> result = new List <DiagramObject>();

            double midX = 0;
            double midY = 0;

            double fromCurvePointX = 0;
            double fromCurvePointY = 0;

            double toCurvePointX = 0;
            double toCurvePointY = 0;


            // Calculate from curve point
            if (FromTerminal.Port.Side == BlockSideEnum.Vest)
            {
                fromCurvePointX = FromTerminal.ConnectionPointX + FromTerminal.Thickness;
                fromCurvePointY = FromTerminal.ConnectionPointY;
            }

            if (FromTerminal.Port.Side == BlockSideEnum.North)
            {
                fromCurvePointX = FromTerminal.ConnectionPointX;
                fromCurvePointY = FromTerminal.ConnectionPointY - FromTerminal.Thickness;
            }

            if (FromTerminal.Port.Side == BlockSideEnum.East)
            {
                fromCurvePointX = FromTerminal.ConnectionPointX - FromTerminal.Thickness;
                fromCurvePointY = FromTerminal.ConnectionPointY;
            }

            if (FromTerminal.Port.Side == BlockSideEnum.South)
            {
                fromCurvePointX = FromTerminal.ConnectionPointX;
                fromCurvePointY = FromTerminal.ConnectionPointY + FromTerminal.Thickness;
            }

            // Calculate to curve point
            if (ToTerminal.Port.Side == BlockSideEnum.Vest)
            {
                toCurvePointX = ToTerminal.ConnectionPointX + FromTerminal.Thickness;
                toCurvePointY = ToTerminal.ConnectionPointY;
            }

            if (ToTerminal.Port.Side == BlockSideEnum.North)
            {
                toCurvePointX = ToTerminal.ConnectionPointX;
                toCurvePointY = ToTerminal.ConnectionPointY - FromTerminal.Thickness;
            }

            if (ToTerminal.Port.Side == BlockSideEnum.East)
            {
                toCurvePointX = ToTerminal.ConnectionPointX - FromTerminal.Thickness;
                toCurvePointY = ToTerminal.ConnectionPointY;
            }

            if (ToTerminal.Port.Side == BlockSideEnum.South)
            {
                toCurvePointX = ToTerminal.ConnectionPointX;
                toCurvePointY = ToTerminal.ConnectionPointY + FromTerminal.Thickness;
            }

            // Calculate mid point
            if ((FromTerminal.Port.Side == BlockSideEnum.Vest || FromTerminal.Port.Side == BlockSideEnum.East) && (ToTerminal.Port.Side == BlockSideEnum.North || ToTerminal.Port.Side == BlockSideEnum.South))
            {
                midX = ToTerminal.ConnectionPointX;
                midY = FromTerminal.ConnectionPointY;
            }

            if (FromTerminal.Port.Side == BlockSideEnum.Vest && ToTerminal.Port.Side == BlockSideEnum.East)
            {
                midX = FromTerminal.ConnectionPointX - ((FromTerminal.ConnectionPointY - ToTerminal.ConnectionPointY) / 2);
                midY = FromTerminal.ConnectionPointY;
            }

            if (FromTerminal.Port.Side == BlockSideEnum.North && ToTerminal.Port.Side == BlockSideEnum.South)
            {
                midX = FromTerminal.ConnectionPointX;
                midY = FromTerminal.ConnectionPointY - ((FromTerminal.ConnectionPointY - ToTerminal.ConnectionPointY) / 2);
            }

            if (FromTerminal.Port.Side == BlockSideEnum.South && ToTerminal.Port.Side == BlockSideEnum.East)
            {
                midX = FromTerminal.ConnectionPointX;
                midY = ToTerminal.ConnectionPointY;
            }

            var curve = GeometryBuilder.Beizer(fromCurvePointX, fromCurvePointY, midX, midY, toCurvePointX, toCurvePointY, FromTerminal.ConnectionPointX, FromTerminal.ConnectionPointY, ToTerminal.ConnectionPointX, ToTerminal.ConnectionPointY);

            result.Add(new DiagramObject()
            {
                Style    = Style is null ? "Cable" : Style,
                Label    = this.Label,
                Geometry = curve
            });;