diff --git a/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar b/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar index 1fd9bd24..d5ea440a 100644 Binary files a/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar and b/com.actionsoft.apps.coe.method.process.subprocess/lib/com.actionsoft.apps.coe.method.process.subprocess.jar differ diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/ExpandOrCloseShapeLinkerConvertHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/ExpandOrCloseShapeLinkerConvertHandle.java index 2456be21..ed48c98b 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/ExpandOrCloseShapeLinkerConvertHandle.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/ExpandOrCloseShapeLinkerConvertHandle.java @@ -251,47 +251,14 @@ public class ExpandOrCloseShapeLinkerConvertHandle { definitionHandle.addEle(linker.getString("id"), linker); }else { // 重新绘制连线 在添加 - double fromDistanceX = tempFromProps.getDoubleValue("x") - fromProps.getDoubleValue("x"); - double fromDistanceY = tempFromProps.getDoubleValue("y") - fromProps.getDoubleValue("y"); - - double toDistanceX = tempToProps.getDoubleValue("x") - toProps.getDoubleValue("x"); - double toDistanceY = tempToProps.getDoubleValue("y") - toProps.getDoubleValue("y"); - - // 计算连线起始点 - JSONObject from = linker.getJSONObject("from"); - from.put("x", from.getDoubleValue("x") + fromDistanceX); - from.put("y", from.getDoubleValue("y") + fromDistanceY); - JSONObject to = linker.getJSONObject("to"); - to.put("x", to.getDoubleValue("x") + toDistanceX); - to.put("y", to.getDoubleValue("y") + toDistanceY); - - // 计算连线拐点 - JSONArray points = linker.getJSONArray("points"); - if (fromDistanceX == toDistanceX){ // 两个节点水平移动距离一致 - for (Object o : points) { - JSONObject point = (JSONObject) o; - point.put("x", point.getDoubleValue("x") + fromDistanceX); - } - }else if (fromDistanceX == 0 && toDistanceX != 0){ - for (Object o : points) { - JSONObject point = (JSONObject) o; - point.put("x", point.getDoubleValue("x") + toDistanceX); - } - } - - if (fromDistanceY == toDistanceY){ - for (Object o : points) { - JSONObject point = (JSONObject) o; - point.put("y", point.getDoubleValue("y") + fromDistanceY); - } - }else if (fromDistanceY == 0 && toDistanceY != 0){ - for (Object o : points) { - JSONObject point = (JSONObject) o; - point.put("y", point.getDoubleValue("y") + toDistanceY); - } - } - - definitionHandle.addEle(linker.getString("id"), linker); + double[] fromBounding = new double[]{tempFromProps.getDoubleValue("x"), tempFromProps.getDoubleValue("y"), tempFromProps.getDoubleValue("w"), tempFromProps.getDoubleValue("h")}; + double[] toBounding = new double[]{tempToProps.getDoubleValue("x"), tempToProps.getDoubleValue("y"), tempToProps.getDoubleValue("w"), tempToProps.getDoubleValue("h")}; + JSONObject newLinker = linkerPointCalculationHandle.toAssembleLinker(direction, fromId, toId, fromBounding, toBounding); + newLinker.put("id", linker.getString("id")); + newLinker.put("creator", "person"); + newLinker.put("elementType", linker.getString("elementType")); + newLinker.put("text", linker.getString("text")); + definitionHandle.addEle(linker.getString("id"), newLinker); } } } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphLinkerRender.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphLinkerRender.java index 02d01d10..63ca586b 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphLinkerRender.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphLinkerRender.java @@ -129,22 +129,32 @@ public class GraphLinkerRender { private double[][] calculationLinkerPointInHorizLayOut(double[] fromPoi, double[] toPoi){ double fromX = fromPoi[0],fromY = fromPoi[1],toX = toPoi[0],toY = toPoi[1]; if (fromY == toY) { // 水平 方向上 存在从左向右直连的情况 但不存在从右向左直连的情况 水平方向上 从左向右 应是 右出 向上 左折 向下 - return fromX < toX - ? new double[][] - { + if (fromX < toX){ + if (fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_VERT_INTERVAL == toX){ + return new double[][]{ {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, {toX, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2} - } - : new double[][] - { + }; + }else { + return new double[][]{ {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY} }; + } + }else { + return new double[][]{ + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY} + }; + } }else if (fromX == toX) { // 垂直 // 节点横向分布 连线按照大原则 垂直 不存在 fromY < toY 的情况 也就是不存在 连线从上到下直连的情况 double[] startPoint = new double[]{fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}; @@ -230,18 +240,32 @@ public class GraphLinkerRender { ? new double[]{fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H} : new double[]{fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}; double[] endPoi = new double[]{toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY}; - return fromY < toY - ? new double[][]{ + if (fromY < toY){ + if (toY - fromY - SubProcessConst.SUB_PROCESS_SHAPE_H == SubProcessConst.SHAPE_VERT_INTERVAL){ + return new double[][]{ startPoi, {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - endPoi} - : new double[][]{ + endPoi + }; + }else { + return new double[][]{ startPoi, - {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, - {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - endPoi}; + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {fromX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {toX, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2} + }; + } + }else { + return new double[][]{ + startPoi, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + endPoi + }; + } }else { // 分布在四个象限内 if (fromX > toX && fromY > toY){ // 目标节点在第二象限 return new double[][]{ @@ -252,7 +276,7 @@ public class GraphLinkerRender { {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY} }; }else if (fromX > toX && fromY < toY){ // 目标节点在第三象限 - return toY - fromY == SubProcessConst.SHAPE_VERT_INTERVAL + return toY - fromY - SubProcessConst.SUB_PROCESS_SHAPE_H == SubProcessConst.SHAPE_VERT_INTERVAL ? new double[][] { {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H}, diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java index dddee769..17b3b461 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeCloseHandle.java @@ -409,18 +409,32 @@ class NodeCloseLinkerRender{ ? new double[]{fromX + fromW / 2, fromY + fromH} : new double[]{fromX + fromW, fromY + fromH / 2}; double[] endPoi = new double[]{toX + toW / 2, toY}; - return fromY < toY - ? new double[][]{ - startPoi, - {fromX + fromW / 2, fromY + getCurrentRowMaxH(fromY) + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - endPoi} - : new double[][]{ - startPoi, - {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, - {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - endPoi}; + if (fromY < toY){ + if (toY - getCurrentRowMaxH(fromY) - fromY == SubProcessConst.SHAPE_VERT_INTERVAL) { // 相邻节点 + return new double[][]{ + startPoi, + {fromX + fromW / 2, fromY + getCurrentRowMaxH(fromY) + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + endPoi + }; + }else { + return new double[][]{ + startPoi, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {fromX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {toX, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2} + }; + } + }else { + return new double[][]{ + startPoi, + {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, + {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + endPoi + }; + } }else { // 分布在四个象限内 if (fromX > toX && fromY > toY){ // 目标节点在第二象限 return new double[][]{ @@ -465,22 +479,32 @@ class NodeCloseLinkerRender{ private double[][] calculationLinkerPointInHorizLayOut(double[] fromBounding, double[] toBounding) { double fromX = fromBounding[0],fromY = fromBounding[1], fromW = fromBounding[2], fromH = fromBounding[3], toX = toBounding[0], toY = toBounding[1], toW = toBounding[2], toH = toBounding[3]; if (fromY == toY) { // 水平 方向上 存在从左向右直连的情况 但不存在从右向左直连的情况 水平方向上 从左向右 应是 右出 向上 左折 向下 - return fromX < toX - ? new double[][] - { + if (fromX < toX){ + if (fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_VERT_INTERVAL == toX){ // 相邻节点 + return new double[][]{ {fromX + fromW, fromY + fromH / 2}, {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, {toX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + toH / 2}, {toX, toY + toH / 2} - } - : new double[][] - { - {fromX + fromW, fromY + fromH / 2}, - {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, - {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY} }; + }else { + return new double[][]{ + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY} + }; + } + }else { + return new double[][]{ + {fromX + fromW, fromY + fromH / 2}, + {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, + {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY} + }; + } }else if (fromX == toX) { // 垂直 // 节点横向分布 连线按照大原则 垂直 不存在 fromY < toY 的情况 也就是不存在 连线从上到下直连的情况 double[] startPoint = new double[]{fromX + fromW, fromY + fromH / 2}; diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java index 509b38a3..2e2b363f 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/GraphNodeExpandHandle.java @@ -522,18 +522,32 @@ class NodeExpandLinkerRender{ ? new double[]{fromX + fromW / 2, fromY + fromH} : new double[]{fromX +fromW, fromY + fromH / 2}; double[] endPoi = new double[]{toX + toW / 2, toY}; - return fromY < toY - ? new double[][]{ - startPoi, - {fromX + fromW / 2, fromY + getCurrentRowMaxH(fromY) + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - endPoi} - : new double[][]{ - startPoi, - {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, - {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - endPoi}; + if (fromY < toY){ + if (toY - getCurrentRowMaxH(fromY) - fromY == SubProcessConst.SHAPE_VERT_INTERVAL) { // 相邻节点 + return new double[][]{ + startPoi, + {fromX + fromW / 2, fromY + getCurrentRowMaxH(fromY) + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + endPoi + }; + }else { + return new double[][]{ + startPoi, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {fromX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {toX, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2} + }; + } + }else { + return new double[][]{ + startPoi, + {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, + {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + endPoi + }; + } }else { // 分布在四个象限内 if (fromX > toX && fromY > toY){ // 目标节点在第二象限 return new double[][]{ @@ -544,7 +558,7 @@ class NodeExpandLinkerRender{ {toX + toW / 2, toY} }; }else if (fromX > toX && fromY < toY){ // 目标节点在第三象限 - return toY - getCurrentRowMaxH(fromY) == SubProcessConst.SHAPE_VERT_INTERVAL // 相邻行节点 + return toY - getCurrentRowMaxH(fromY) - fromY == SubProcessConst.SHAPE_VERT_INTERVAL // 相邻行节点 ? new double[][] { {fromX + fromW / 2, fromY + fromH}, @@ -579,22 +593,32 @@ class NodeExpandLinkerRender{ double fromX = fromBounding[0],fromY = fromBounding[1], fromW = fromBounding[2], fromH = fromBounding[3], toX = toBounding[0], toY = toBounding[1], toW = toBounding[2], toH = toBounding[3]; // double scopeShapeW = scopeLimitationShape.getJSONObject("props").getDoubleValue("w"), scopeShapeH = scopeLimitationShape.getJSONObject("props").getDoubleValue("h"); if (fromY == toY) { // 水平 方向上 存在从左向右直连的情况 但不存在从右向左直连的情况 水平方向上 从左向右 应是 右出 向上 左折 向下 - return fromX < toX - ? new double[][] - { + if (fromX < toX){ + if (fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_VERT_INTERVAL == toX){ // 相邻节点 + return new double[][]{ {fromX + fromW, fromY + fromH / 2}, {fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, {toX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + toH / 2}, {toX, toY + toH / 2} - } - : new double[][] - { - {fromX + fromW, fromY + fromH / 2}, - {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, - {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, - {toX + toW / 2, toY} }; + }else { + return new double[][]{ + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY} + }; + } + }else { + return new double[][]{ + {fromX + fromW, fromY + fromH / 2}, + {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2}, + {fromX + fromW + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + toW / 2, toY} + }; + } }else if (fromX == toX) { // 垂直 // 节点横向分布 连线按照大原则 垂直 不存在 fromY < toY 的情况 也就是不存在 连线从上到下直连的情况 double[] startPoint = new double[]{fromX + fromW, fromY + fromH / 2}; diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/util/LinkerPointCalculationHandle.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/util/LinkerPointCalculationHandle.java index b8c2d3d5..0b43cbfa 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/util/LinkerPointCalculationHandle.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/graph/util/LinkerPointCalculationHandle.java @@ -79,22 +79,32 @@ public class LinkerPointCalculationHandle { double fromX = fromBounding[0],fromY = fromBounding[1], fromW = fromBounding[2], fromH = fromBounding[3]; double toX = toBounding[0], toY = toBounding[1], toW = toBounding[2], toH = toBounding[3]; if (fromY == toY) { - return fromX < toX - ? new double[][] - { + if (fromX < toX){ + if (fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_VERT_INTERVAL == toX){ // 相邻节点 + return new double[][]{ {fromX + fromW, fromY + fromH / 2}, {fromX + getCurrentColMaxW(fromX) + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY + fromH / 2}, {toX - rowNodeDistanceWrapper(getNearLeftNodeDistance(toBounding)) / 2, toY + toH / 2}, {toX, toY + toH / 2} - } - : new double[][] - { - {fromX + fromW, fromY + fromH / 2}, - {fromX + fromW + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY + fromH / 2}, - {fromX + fromW + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY - colNodeDistanceWrapper(getNearTopNodeDistance(fromBounding)) / 2}, - {toX + toW / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, - {toX + toW / 2, toY} }; + }else { + return new double[][]{ + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY - SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, toY} + }; + } + }else { + return new double[][]{ + {fromX + fromW, fromY + fromH / 2}, + {fromX + fromW + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY + fromH / 2}, + {fromX + fromW + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY - colNodeDistanceWrapper(getNearTopNodeDistance(fromBounding)) / 2}, + {toX + toW / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, + {toX + toW / 2, toY} + }; + } }else if (fromX == toX) { // 垂直 // 节点横向分布 连线按照大原则 垂直 不存在 fromY < toY 的情况 也就是不存在 连线从上到下直连的情况 double[] startPoint = new double[]{fromX + fromW, fromY + fromH / 2}; @@ -180,18 +190,32 @@ public class LinkerPointCalculationHandle { ? new double[]{fromX + fromW / 2, fromY + fromH} : new double[]{fromX +fromW, fromY + fromH / 2}; double[] endPoi = new double[]{toX + toW / 2, toY}; - return fromY < toY - ? new double[][]{ - startPoi, - {fromX + fromW / 2, fromY + getCurrentRowMaxH(fromY) + colNodeDistanceWrapper(getNearBootomNodeDistance(fromBounding)) / 2}, - {toX + toW / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, - endPoi} - : new double[][]{ - startPoi, - {fromX + getCurrentColMaxW(fromX) + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY + fromH / 2}, - {fromX + getCurrentColMaxW(fromX) + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, - {toX + toW / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, - endPoi}; + if (fromY < toY){ + if (toY - getCurrentRowMaxH(fromY) - fromY == SubProcessConst.SHAPE_VERT_INTERVAL) { // 相邻节点 + return new double[][]{ + startPoi, + {fromX + fromW / 2, fromY + getCurrentRowMaxH(fromY) + colNodeDistanceWrapper(getNearBootomNodeDistance(fromBounding)) / 2}, + {toX + toW / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, + endPoi + }; + }else { + return new double[][]{ + startPoi, + {fromX + SubProcessConst.SUB_PROCESS_SHAPE_W / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {fromX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + SubProcessConst.SUB_PROCESS_SHAPE_H + SubProcessConst.SHAPE_VERT_INTERVAL / 2}, + {toX - SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2}, + {toX, toY + SubProcessConst.SUB_PROCESS_SHAPE_H / 2} + }; + } + }else { + return new double[][]{ + startPoi, + {fromX + getCurrentColMaxW(fromX) + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, fromY + fromH / 2}, + {fromX + getCurrentColMaxW(fromX) + rowNodeDistanceWrapper(getNearRightNodeDistance(fromBounding)) / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, + {toX + toW / 2, toY - colNodeDistanceWrapper(getNearTopNodeDistance(toBounding)) / 2}, + endPoi + }; + } }else { // 分布在四个象限内 if (fromX > toX && fromY > toY){ // 目标节点在第二象限 return new double[][]{ @@ -202,7 +226,7 @@ public class LinkerPointCalculationHandle { {toX + toW / 2, toY} }; }else if (fromX > toX && fromY < toY){ // 目标节点在第三象限 - return toY - getCurrentRowMaxH(fromY) == getNearBootomNodeDistance(fromBounding) // 相邻行节点 + return toY - getCurrentRowMaxH(fromY) - fromY == getNearBootomNodeDistance(fromBounding) // 相邻行节点 ? new double[][] { {fromX + fromW / 2, fromY + fromH}, diff --git a/com.actionsoft.apps.coe.pal/template/page/main.htm b/com.actionsoft.apps.coe.pal/template/page/main.htm index e53f717d..95e029e1 100644 --- a/com.actionsoft.apps.coe.pal/template/page/main.htm +++ b/com.actionsoft.apps.coe.pal/template/page/main.htm @@ -13,4 +13,4 @@ var mainType = "<#mainType>"; var uid = "<#uid>"; var wHref = "./w"; - var jdHref = "./jd";