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); } } }
// 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();*/ }