端到端功能 子流程节点展开后内外节点连线处理&前端总图入口加入过滤输入框
This commit is contained in:
parent
e748b93f57
commit
90d4ea3020
Binary file not shown.
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 / 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};
|
||||
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},
|
||||
|
||||
@ -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[][]{
|
||||
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}
|
||||
: new double[][]{
|
||||
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};
|
||||
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}
|
||||
};
|
||||
}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}
|
||||
};
|
||||
}
|
||||
: new double[][]
|
||||
{
|
||||
}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};
|
||||
|
||||
@ -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[][]{
|
||||
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}
|
||||
: new double[][]{
|
||||
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};
|
||||
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}
|
||||
};
|
||||
}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}
|
||||
};
|
||||
}
|
||||
: new double[][]
|
||||
{
|
||||
}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};
|
||||
|
||||
@ -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}
|
||||
};
|
||||
}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}
|
||||
};
|
||||
}
|
||||
: new double[][]
|
||||
{
|
||||
}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[][]{
|
||||
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}
|
||||
: new double[][]{
|
||||
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};
|
||||
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},
|
||||
|
||||
@ -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>
|
||||
@ -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";
|
||||
}
|
||||
|
||||
@ -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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user