Exemple #1
0
        public void _secondWalk(TreeLayout tree, LayoutNode node, int level, double X, double Y)
        {
            if (level <= tree.Config.iMaxDepth)
            {
                var    xTmp        = tree.RootXOffset + node.Prelim + X;
                var    yTmp        = tree.RootYOffset + Y;
                double maxsizeTmp  = 0;
                double nodesizeTmp = 0;
                var    flag        = false;

                switch (tree.Config.iRootOrientation)
                {
                case TreeLayout.RO_TOP:
                case TreeLayout.RO_BOTTOM:
                    maxsizeTmp  = tree.MaxLevelHeight[level];
                    nodesizeTmp = node.H;
                    break;

                case TreeLayout.RO_RIGHT:
                case TreeLayout.RO_LEFT:
                    maxsizeTmp  = tree.MaxLevelWidth[level];
                    flag        = true;
                    nodesizeTmp = node.W;
                    break;
                }
                switch (tree.Config.iNodeJustification)
                {
                case TreeLayout.NJ_TOP:
                    node.X = xTmp;
                    node.Y = yTmp;
                    break;

                case TreeLayout.NJ_CENTER:
                    node.X = xTmp;
                    node.Y = yTmp + (maxsizeTmp - nodesizeTmp) / 2;
                    break;

                case TreeLayout.NJ_BOTTOM:
                    node.X = xTmp;
                    node.Y = (yTmp + maxsizeTmp) - nodesizeTmp;
                    break;
                }
                if (flag)
                {
                    var swapTmp = node.X;
                    node.X = node.Y;
                    node.Y = swapTmp;
                }
                switch (tree.Config.iRootOrientation)
                {
                case TreeLayout.RO_BOTTOM:
                    node.Y = -node.Y - nodesizeTmp;
                    break;

                case TreeLayout.RO_RIGHT:
                    node.X = -node.X - nodesizeTmp;
                    break;
                }
                if (node._getChildrenCount() != 0)
                {
                    _secondWalk(tree, node._getFirstChild(), level + 1, X + node.Modifier, Y + maxsizeTmp + tree.Config.iLevelSeparation);
                }
                var rightSibling = node._getRightSibling();
                if (rightSibling != null)
                {
                    _secondWalk(tree, rightSibling, level, X, Y);
                }
            }
        }
Exemple #2
0
        //
        public void Update(TreeLayout tree)
        {
            switch (tree.Config.iRootOrientation)
            {
            case TreeLayout.RO_TOP:
                xa = Source.X + (Source.W / 2);
                ya = Source.Y + Source.H;
                break;

            case TreeLayout.RO_BOTTOM:
                xa = Source.X + (Source.W / 2);
                ya = Source.Y;
                break;

            case TreeLayout.RO_RIGHT:
                xa = Source.X;
                ya = Source.Y + (Source.H / 2);
                break;

            case TreeLayout.RO_LEFT:
                xa = Source.X + Source.W;
                ya = Source.Y + (Source.H / 2);
                break;
            }

            switch (tree.Config.iRootOrientation)
            {
            case TreeLayout.RO_TOP:
                xd = xc = Target.X + (Target.W / 2);
                yd = Target.Y;
                xb = xa;
                switch (tree.Config.iNodeJustification)
                {
                case TreeLayout.NJ_TOP:
                    yb = yc = yd - tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_BOTTOM:
                    yb = yc = ya + tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_CENTER:
                    yb = yc = ya + (yd - ya) / 2;
                    break;
                }
                break;

            case TreeLayout.RO_BOTTOM:
                xd = xc = Target.X + (Target.W / 2);
                yd = Target.Y + Target.H;
                xb = xa;
                switch (tree.Config.iNodeJustification)
                {
                case TreeLayout.NJ_TOP:
                    yb = yc = yd + tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_BOTTOM:
                    yb = yc = ya - tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_CENTER:
                    yb = yc = yd + (ya - yd) / 2;
                    break;
                }
                break;

            case TreeLayout.RO_RIGHT:
                xd = Target.X + Target.W;
                yd = yc = Target.Y + (Target.H / 2);
                yb = ya;
                switch (tree.Config.iNodeJustification)
                {
                case TreeLayout.NJ_TOP:
                    xb = xc = xd + tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_BOTTOM:
                    xb = xc = xa - tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_CENTER:
                    xb = xc = xd + (xa - xd) / 2;
                    break;
                }
                break;

            case TreeLayout.RO_LEFT:
                xd = Target.X;
                yd = yc = Target.Y + (Target.H / 2);
                yb = ya;
                switch (tree.Config.iNodeJustification)
                {
                case TreeLayout.NJ_TOP:
                    xb = xc = xd - tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_BOTTOM:
                    xb = xc = xa + tree.Config.iLevelSeparation / 2;
                    break;

                case TreeLayout.NJ_CENTER:
                    xb = xc = xa + (xd - xa) / 2;
                    break;
                }
                break;
            }


            /*tree.ctx.save();
             * tree.ctx.strokeStyle = tree.config.linkColor;
             * tree.ctx.beginPath();
             * switch (tree.config.linkType)
             * {
             *  case "M":
             *      tree.ctx.moveTo(xa,ya);
             *      tree.ctx.lineTo(xb,yb);
             *      tree.ctx.lineTo(xc,yc);
             *      tree.ctx.lineTo(xd,yd);
             *      break;
             *
             *  case "B":
             *      tree.ctx.moveTo(xa,ya);
             *      tree.ctx.bezierCurveTo(xb,yb,xc,yc,xd,yd);
             *      break;
             * }
             * tree.ctx.stroke();
             * tree.ctx.restore();*/
        }