Merge remote-tracking branch 'origin/apps_dev' into apps_dev

This commit is contained in:
zhal 2023-07-12 17:14:46 +08:00
commit 1b1858106c
13 changed files with 211 additions and 132 deletions

View File

@ -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);
}
}
}

View File

@ -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},

View File

@ -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};

View File

@ -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};

View File

@ -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},

View File

@ -13,4 +13,4 @@
var mainType = "<#mainType>";
var uid = "<#uid>";
var wHref = "./w";
var jdHref = "./jd";</script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-08487bf0.283a9f57.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-1abee27b.c5c7126f.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-2933a75e.38619268.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-4cc17289.6298c290.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-591a3298.d3570084.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-6fb6e04f.adde4cab.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-7743e59b.549c6c13.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-9c63e2da.ef0a5aa8.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-cd54d348.e55cad48.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-08487bf0.e4c990c1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-1abee27b.363afc6a.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2933a75e.506b1a8f.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.869862df.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.5bbabbc4.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d212b99.89ae9070.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.8dd1b225.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.82ff272a.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.94519e00.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3178e2bf.9637346c.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3a9b7577.aa0dfa28.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-4cc17289.51100115.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-591a3298.b7e78e78.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-6fb6e04f.d8dee91f.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-7743e59b.c2cb207c.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-9c63e2da.ed551f3a.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-cd54d348.72327634.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.20eb2063.css rel=preload as=style><link href=../apps/com.actionsoft.apps.coe.pal/main/js/app.32e7bb61.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.cecfe522.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.20eb2063.css rel=stylesheet></head><body style=margin:0;><div id=app></div><script src=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.cecfe522.js></script><script src=../apps/com.actionsoft.apps.coe.pal/main/js/app.32e7bb61.js></script></body></html>
var jdHref = "./jd";</script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-08487bf0.283a9f57.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-1abee27b.c5c7126f.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-2933a75e.38619268.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-4cc17289.6298c290.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-591a3298.d3570084.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-6fb6e04f.adde4cab.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-9c63e2da.ef0a5aa8.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-b0f65fba.f33ab50a.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-cd54d348.e55cad48.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-08487bf0.e4c990c1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-1abee27b.363afc6a.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2933a75e.506b1a8f.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.869862df.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.5bbabbc4.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d212b99.89ae9070.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.8dd1b225.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.82ff272a.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.94519e00.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3178e2bf.9637346c.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3a9b7577.aa0dfa28.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-4cc17289.51100115.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-591a3298.b7e78e78.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-6fb6e04f.d8dee91f.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-9c63e2da.ed551f3a.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-b0f65fba.340073e1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-cd54d348.72327634.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.20eb2063.css rel=preload as=style><link href=../apps/com.actionsoft.apps.coe.pal/main/js/app.40c2bdac.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.cecfe522.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.20eb2063.css rel=stylesheet></head><body style=margin:0;><div id=app></div><script src=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.cecfe522.js></script><script src=../apps/com.actionsoft.apps.coe.pal/main/js/app.40c2bdac.js></script></body></html>

View File

@ -382,6 +382,8 @@ var Designer = {
if (scopeShapeKey) {
g.elementType = "INNER_NODE";
g.scopeShapeId = scopeShapeKey;
window.subProcess.addScopeShapeInnerEles(scopeShapeKey, g.id);
}
}
Designer.events.push("created", g);
@ -2188,6 +2190,7 @@ var Designer = {
d.elementType = "INNER_LINKER";
let scopeShapeKey = window.subProcess.calculateLinkerInWhichScope(d);
d.scopeShapeId = scopeShapeKey;
window.subProcess.addScopeShapeInnerEles(scopeShapeKey, d.id);
}else {
d.elementType = "CROSS_LINKER";
}

View File

@ -392,6 +392,19 @@ class SubProcess {
return scopeShapeKey;
}
// 向范围框上存储内部元素的位置 添加元素ID
addScopeShapeInnerEles(scopeKey, eleId){
let elements = Model.define.elements;
for (let key in elements) {
let ele = elements[key];
if (key == scopeKey){
if (ele.innerElements.indexOf(eleId) == -1){
ele.innerElements.push(eleId);
}
}
}
}
// 根据连线 处理from to 两个外部节点的extendAttr扩展属性
outerNodeExtendAttrHandle(linker){
let fromId = linker.from.id;

File diff suppressed because one or more lines are too long