From ac1abfc79222f5bb15e0a0ea4f2d62e4cc45005e Mon Sep 17 00:00:00 2001 From: qinoy Date: Wed, 14 Jun 2023 14:18:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AB=AF=E5=88=B0=E7=AB=AF=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20=E8=8A=82=E7=82=B9=E5=B1=95=E5=BC=80=E4=B8=8E=E9=97=AD?= =?UTF-8?q?=E5=90=88=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oft.apps.coe.method.process.subprocess.jar | Bin 73572 -> 73827 bytes .../graph/GraphNodeCloseHandle.java | 43 ++++++-- .../graph/GraphNodeExpandHandle.java | 23 ++--- .../subprocess/mode/ScopeShapeMonitor.java | 93 +++++++++--------- 4 files changed, 94 insertions(+), 65 deletions(-) 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 67234a7df66a49e9a19bd8a966b5271076ac942c..bc6af5a79ded684066e697e8f03ab52577250e70 100644 GIT binary patch delta 25140 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 !|v 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 M-kSwPz;j0b13gwV4*&oF delta 24884 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 Ygz!fS+eHMB!BlAgxXAP9fG5ZP56EJ_asU7T 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 b65a301c..c7b6acce 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 @@ -6,6 +6,7 @@ import com.actionsoft.apps.coe.method.process.subprocess.graph.component.Abstrac import com.actionsoft.apps.coe.method.process.subprocess.graph.component.AbstractDefinitionHandle; import com.actionsoft.apps.coe.method.process.subprocess.graph.util.DefinitionThreadUnSafe; import com.actionsoft.apps.coe.method.process.subprocess.graph.util.SubProcessNodeDefineUtil; +import com.actionsoft.apps.coe.method.process.subprocess.mode.ScopeShapeMonitor; import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; @@ -34,6 +35,7 @@ public class GraphNodeCloseHandle { private JSONObject scopeLimitationShape; // 范围标注框 private AbstractDefinitionHandle definitionHandle; // 当前总图 define 处理器 private AbstractDefinitionHandle subProcessNodeDefineHandle; // 子流程节点 define 处理器 + private ScopeShapeMonitor scopeShapeMonitor; // 范围选择框及其内部元素监视器 public GraphNodeCloseHandle(String repositoryId, String shapeId, String endToEndProcessDefineStr) throws AWSException{ this.repositoryId = repositoryId; @@ -51,6 +53,8 @@ public class GraphNodeCloseHandle { scopeLimitationShape = definitionHandle.getShapeByKey(shapeId); + scopeShapeMonitor = new ScopeShapeMonitor(definitionHandle, subProcessNodeDefineHandle); + } catch (AWSException e) { throw new AWSException(e); } @@ -67,6 +71,8 @@ public class GraphNodeCloseHandle { // 1、处理范围选择框及其内部节点 removeScopeShapeAndInRangeEle(); + scopeShapeMonitor.buildScopeShapeMonitors(); + // 2、处理总图中的节点与连线 handleEndToEndGraphNodeAndLinker(); @@ -91,12 +97,14 @@ public class GraphNodeCloseHandle { removeEndToEndGraphOldLinker(); // 5、构建新的连线 NodeCloseLinkerRender linkerRender = new NodeCloseLinkerRender(vertexBounding, closeAdjMatrix); - JSONArray linkers = linkerRender.toAssembleLinker(direction, shapeId); + JSONArray linkers = linkerRender.toAssembleLinker(direction); for (Object o : linkers) { JSONObject linker = (JSONObject) o; definitionHandle.addEle(linker.getString("id"), linker); } + scopeShapeMonitor.updateScopeShapeInnerEle(); + // 6、更新画布的大小 // 确定画布的宽度与高度 double w = Arrays.stream(vertexBounding).mapToDouble(position -> position[0]).max().orElse(0.0); @@ -123,26 +131,51 @@ public class GraphNodeCloseHandle { JSONObject ele = elements.getJSONObject(key); if ("linker".equals(ele.getString("name"))) continue; if (ele.getString("id").equals(subProcessNode.getString("id"))) continue; + if (scopeShapeMonitor.checkShapeIsScopeInRange(key)) continue; JSONObject eleProps = ele.getJSONObject("props"); if ("vertically".equals(direction)){ // 垂直布局 if (x + scope[2] < eleProps.getDoubleValue("x")) { + double xMoveDistance = -scope[2] + SubProcessConst.SUB_PROCESS_SHAPE_W; eleProps.put("x", eleProps.getDoubleValue("x") - scope[2] + SubProcessConst.SUB_PROCESS_SHAPE_W); + if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ + scopeShapeMonitor.updateMonitorXInfo(key, true, xMoveDistance); + } } if (y +scope[3] < eleProps.getDoubleValue("y")){ + double yMoveDistance = -scope[3] + SubProcessConst.SUB_PROCESS_SHAPE_H; eleProps.put("y", eleProps.getDoubleValue("y") - scope[3] + SubProcessConst.SUB_PROCESS_SHAPE_H); + if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ + scopeShapeMonitor.updateMonitorYInfo(key, true, yMoveDistance); + } }else if (y < eleProps.getDoubleValue("y") && eleProps.getDoubleValue("y") < y + scope[3]){ eleProps.put("y", y); + double yMoveDistance = y - eleProps.getDoubleValue("y"); + if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ + scopeShapeMonitor.updateMonitorYInfo(key, true, yMoveDistance); + } } }else { // 横向布局 if (x + scope[2] < eleProps.getDoubleValue("x")){ // 节点在范围框右侧的节点 + double xMoveDistance = -scope[2] + SubProcessConst.SUB_PROCESS_SHAPE_W; eleProps.put("x", eleProps.getDoubleValue("x") - scope[2] + SubProcessConst.SUB_PROCESS_SHAPE_W); + if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ + scopeShapeMonitor.updateMonitorXInfo(key, true, xMoveDistance); + } }else if (x < eleProps.getDoubleValue("x") && eleProps.getDoubleValue("x") < x + scope[2] && y + scope[3] < eleProps.getDoubleValue("y")){ eleProps.put("x", x); + double xMoveDistance = x - eleProps.getDoubleValue("x"); + if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ + scopeShapeMonitor.updateMonitorXInfo(key, true, xMoveDistance); + } } if (y + scope[3] < eleProps.getDoubleValue("y")){ // 节点在范围框下方的节点 + double yMoveDistance = -scope[3] + SubProcessConst.SUB_PROCESS_SHAPE_H; eleProps.put("y", eleProps.getDoubleValue("y") - scope[3] + SubProcessConst.SUB_PROCESS_SHAPE_H); + if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ + scopeShapeMonitor.updateMonitorYInfo(key, true, yMoveDistance); + } } } } @@ -157,7 +190,7 @@ public class GraphNodeCloseHandle { Set eleKeys = new HashSet<>(); for (String key : elements.keySet()) { JSONObject ele = elements.getJSONObject(key); - if ("linker".equals(ele.getString("name"))){ + if ("linker".equals(ele.getString("name")) && !scopeShapeMonitor.checkShapeIsScopeInRange(key)){ eleKeys.add(key); } } @@ -177,6 +210,7 @@ public class GraphNodeCloseHandle { List linkerList = new ArrayList<>(); JSONObject endToEndProcessElements = definitionHandle.getElements(); for (String key : endToEndProcessElements.keySet()) { + if (scopeShapeMonitor.checkShapeIsScopeInRange(key)) continue; JSONObject ele = endToEndProcessElements.getJSONObject(key); if ("linker".equals(ele.getString("name"))) { linkerList.add(ele); @@ -287,13 +321,11 @@ class NodeCloseLinkerRender{ private List nodeIds; // 图形节点ID集合 private double[][] vertexPosition; // 所有节点的坐标 private NodeCloseAdjMatrix closeAdjMatrix; // 节点矩阵 - // private JSONObject scopeLimitationShape; // 范围标注框 public NodeCloseLinkerRender(double[][] vertexPosition, NodeCloseAdjMatrix closeAdjMatrix) { this.nodeIds = closeAdjMatrix.getNodeIds(); this.vertexPosition = vertexPosition; this.closeAdjMatrix = closeAdjMatrix; - // this.scopeLimitationShape = scopeLimitationShape; } /** @@ -302,9 +334,8 @@ class NodeCloseLinkerRender{ * @param shapeId 当前待展开节点ID * @return */ - public JSONArray toAssembleLinker(String direction, String shapeId){ + public JSONArray toAssembleLinker(String direction){ JSONArray linkers = new JSONArray(); - int index = nodeIds.indexOf(shapeId); for (int i = 0; i < vertexPosition.length; i++) { double[] fromBounding = vertexPosition[i]; List nextNodeIndex = closeAdjMatrix.getNeighbors(i); 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 b1313059..326fb196 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 @@ -36,7 +36,7 @@ public class GraphNodeExpandHandle { private JSONObject scopeLimitationShape; // 范围标注框 private AbstractDefinitionHandle definitionHandle; // 当前总图 define 处理器 private AbstractDefinitionHandle subProcessNodeDefineHandle; // 子流程节点 define 处理器 - private ScopeShapeMonitor scopeShapeMonitor; + private ScopeShapeMonitor scopeShapeMonitor; // 范围选择框及其内部元素监视器 private double[] scopeLimitationShapeBeforePoi; // 范围选择框在子流程文件中的坐标 @@ -229,40 +229,41 @@ public class GraphNodeExpandHandle { if ("linker".equals(ele.getString("name"))) continue; // 连线先不处理 JSONObject props = ele.getJSONObject("props"); if (ele.getString("id").equals(scopeLimitationShape.getString("id"))) continue; + if (scopeShapeMonitor.checkShapeIsScopeInRange(key)) continue; if ("vertically".equals(direction)){ - if (props.getDoubleValue("x") > scopeShapeX && !scopeShapeMonitor.checkShapeIsScopeInRange(key)) { // 当前元素在待展开节点的右侧 + if (props.getDoubleValue("x") > scopeShapeX) { // 当前元素在待展开节点的右侧 double rightMoveDistance = scopeShapeW - SubProcessConst.SUB_PROCESS_SHAPE_W; props.put("x", props.getDoubleValue("x") + rightMoveDistance); if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ - scopeShapeMonitor.updateMonitorRightInfo(key, true, rightMoveDistance); + scopeShapeMonitor.updateMonitorXInfo(key, true, rightMoveDistance); } } - if (props.getDoubleValue("y") >= scopeShapeY && !scopeShapeMonitor.checkShapeIsScopeInRange(key)) { // 当前元素在待展开节点的下侧 + if (props.getDoubleValue("y") >= scopeShapeY) { // 当前元素在待展开节点的下侧 double bottomMoveDistance = scopeShapeH - SubProcessConst.SUB_PROCESS_SHAPE_H; props.put("y", props.getDoubleValue("y") + bottomMoveDistance); if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ - scopeShapeMonitor.updateMonitorBottomInfo(key, true, bottomMoveDistance); + scopeShapeMonitor.updateMonitorYInfo(key, true, bottomMoveDistance); } } }else { - if (props.getDoubleValue("x") > scopeShapeX && !scopeShapeMonitor.checkShapeIsScopeInRange(key)) { // 当前元素在待展开节点的右侧 + if (props.getDoubleValue("x") > scopeShapeX) { // 当前元素在待展开节点的右侧 double rightMoveDistance = scopeShapeW - SubProcessConst.SUB_PROCESS_SHAPE_W; props.put("x", props.getDoubleValue("x") + rightMoveDistance); if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ - scopeShapeMonitor.updateMonitorRightInfo(key, true, rightMoveDistance); + scopeShapeMonitor.updateMonitorXInfo(key, true, rightMoveDistance); } - }else if (props.getDoubleValue("x") == scopeShapeX && props.getDoubleValue("y") > scopeShapeY && !scopeShapeMonitor.checkShapeIsScopeInRange(key)) { // 当前元素与待展开节点在一列上 且在下侧 + }else if (props.getDoubleValue("x") == scopeShapeX && props.getDoubleValue("y") > scopeShapeY) { // 当前元素与待展开节点在一列上 且在下侧 double rightMoveDistance = scopeShapeW - SubProcessConst.SUB_PROCESS_SHAPE_W; props.put("x", props.getDoubleValue("x") + rightMoveDistance); if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ - scopeShapeMonitor.updateMonitorRightInfo(key, true, rightMoveDistance); + scopeShapeMonitor.updateMonitorXInfo(key, true, rightMoveDistance); } } - if (props.getDoubleValue("y") > scopeShapeY && !scopeShapeMonitor.checkShapeIsScopeInRange(key)) { // 当前元素在待展开节点的下侧 + if (props.getDoubleValue("y") > scopeShapeY) { // 当前元素在待展开节点的下侧 double bottomMoveDistance = scopeShapeH - SubProcessConst.SUB_PROCESS_SHAPE_H; props.put("y", props.getDoubleValue("y") + bottomMoveDistance); if (scopeShapeMonitor.checkShapeIsScopeShape(key)){ - scopeShapeMonitor.updateMonitorBottomInfo(key, true, bottomMoveDistance); + scopeShapeMonitor.updateMonitorYInfo(key, true, bottomMoveDistance); } } } diff --git a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/mode/ScopeShapeMonitor.java b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/mode/ScopeShapeMonitor.java index a0e052dd..f0bfe24c 100644 --- a/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/mode/ScopeShapeMonitor.java +++ b/com.actionsoft.apps.coe.method.process.subprocess/src/com/actionsoft/apps/coe/method/process/subprocess/mode/ScopeShapeMonitor.java @@ -58,13 +58,13 @@ public class ScopeShapeMonitor { * @param rightMoveDistance 右移动距离 * @throws AWSException */ - public void updateMonitorRightInfo(String scopeShapeId, boolean isRightMove, double rightMoveDistance) throws AWSException{ + public void updateMonitorXInfo(String scopeShapeId, boolean isXMove, double xMoveDistance) throws AWSException{ if (scopeShapeMonitorMap == null) return; if (!scopeShapeMonitorMap.containsKey(scopeShapeId)) throw new AWSException("【参数异常】当前范围框监视器不包含图形ID【" + scopeShapeId + "】"); MonitorInfo monitorInfo = scopeShapeMonitorMap.get(scopeShapeId); - monitorInfo.setRightMove(isRightMove); - monitorInfo.setRightMoveDistance(rightMoveDistance); + monitorInfo.setxMove(isXMove); + monitorInfo.setxMoveDistance(xMoveDistance); } /** @@ -74,13 +74,13 @@ public class ScopeShapeMonitor { * @param bottomMoveDistance 下移距离 * @throws AWSException */ - public void updateMonitorBottomInfo(String scopeShapeId, boolean isBottomMove, double bottomMoveDistance) throws AWSException{ + public void updateMonitorYInfo(String scopeShapeId, boolean isYMove, double yMoveDistance) throws AWSException{ if (scopeShapeMonitorMap == null) return; if (!scopeShapeMonitorMap.containsKey(scopeShapeId)) throw new AWSException("【参数异常】当前范围框监视器不包含图形ID【" + scopeShapeId + "】"); MonitorInfo monitorInfo = scopeShapeMonitorMap.get(scopeShapeId); - monitorInfo.setBottomMove(isBottomMove); - monitorInfo.setBottomMoveDistance(bottomMoveDistance); + monitorInfo.setyMove(isYMove); + monitorInfo.setyMoveDistance(yMoveDistance); } /** @@ -124,46 +124,43 @@ public class ScopeShapeMonitor { for (String scopeShapeKey : scopeShapeMonitorMap.keySet()) { MonitorInfo monitorInfo = scopeShapeMonitorMap.get(scopeShapeKey); Set inRangeShapeIdSet = monitorInfo.getInRangeShapeIdSet(); - if (monitorInfo.isRightMove()){ - double rightMoveDistance = monitorInfo.getRightMoveDistance(); - for (String key : inRangeShapeIdSet) { - JSONObject shape = definitionHandle.getShapeByKey(key); + for (String key : inRangeShapeIdSet) { + JSONObject shape = definitionHandle.getShapeByKey(key); + if (monitorInfo.isxMove()){ // x轴上发生移动 + double xMoveDIstance = monitorInfo.getxMoveDistance(); if ("linker".equals(shape.getString("name"))){ JSONObject from = shape.getJSONObject("from"); - from.put("x", from.getDoubleValue("x") + rightMoveDistance); + from.put("x", from.getDoubleValue("x") + xMoveDIstance); JSONObject to = shape.getJSONObject("to"); - to.put("x", to.getDoubleValue("x") + rightMoveDistance); + to.put("x", to.getDoubleValue("x") + xMoveDIstance); JSONArray points = shape.getJSONArray("points"); for (Object o : points) { JSONObject point = (JSONObject) o; - point.put("x", point.getDoubleValue("x") + rightMoveDistance); + point.put("x", point.getDoubleValue("x") + xMoveDIstance); } }else { JSONObject props = definitionHandle.getShapeByProps(key); - props.put("x", props.getDoubleValue("x") + rightMoveDistance); + props.put("x", props.getDoubleValue("x") + xMoveDIstance); } } - } - if (monitorInfo.isBottomMove()){ - double bottomMoveDistance = monitorInfo.getBottomMoveDistance(); - for (String key : inRangeShapeIdSet) { - JSONObject shape = definitionHandle.getShapeByKey(key); + if (monitorInfo.isyMove()){ // y轴上发生移动 + double yMoveDistance = monitorInfo.getyMoveDistance(); if ("linker".equals(shape.getString("name"))){ JSONObject from = shape.getJSONObject("from"); - from.put("y", from.getDoubleValue("y") + bottomMoveDistance); + from.put("y", from.getDoubleValue("y") + yMoveDistance); JSONObject to = shape.getJSONObject("to"); - to.put("y", to.getDoubleValue("y") + bottomMoveDistance); + to.put("y", to.getDoubleValue("y") + yMoveDistance); JSONArray points = shape.getJSONArray("points"); for (Object o : points) { JSONObject point = (JSONObject) o; - point.put("y", point.getDoubleValue("y") + bottomMoveDistance); + point.put("y", point.getDoubleValue("y") + yMoveDistance); } }else { JSONObject props = definitionHandle.getShapeByProps(key); - props.put("y", props.getDoubleValue("y") + bottomMoveDistance); + props.put("y", props.getDoubleValue("y") + yMoveDistance); } } } @@ -175,52 +172,52 @@ public class ScopeShapeMonitor { class MonitorInfo { private String scopeShapeId; // 当前虚线范围框的图形ID - private boolean isRightMove; // 范围框是否右移 - private double rightMoveDistance; // 右移动距离 - private boolean isBottomMove; // 范围框是否下移 - private double bottomMoveDistance; // 下移距离 + private boolean xMove; // 范围框发生左移或者右移 + private double xMoveDistance; // 左移或者右移动距离 + private boolean yMove; // 范围框发生上移或者下移 + private double yMoveDistance; // 上移或者下移距离 private Set inRangeShapeIdSet; // 范围内的图形与连线的ID集合 - public MonitorInfo(String scopeShapeId, boolean isRightMove, double rightMoveDistance, boolean isBottomMove, double bottomMoveDistance, Set inRangeShapeIdSet) { + public MonitorInfo(String scopeShapeId, boolean xMove, double xMoveDistance, boolean yMove, double yMoveDistance, Set inRangeShapeIdSet) { this.scopeShapeId = scopeShapeId; - this.isRightMove = isRightMove; - this.rightMoveDistance = rightMoveDistance; - this.isBottomMove = isBottomMove; - this.bottomMoveDistance = bottomMoveDistance; + this.xMove = xMove; + this.xMoveDistance = xMoveDistance; + this.yMove = yMove; + this.yMoveDistance = yMoveDistance; this.inRangeShapeIdSet = inRangeShapeIdSet; } - public boolean isRightMove() { - return isRightMove; + public boolean isxMove() { + return xMove; } - public double getRightMoveDistance() { - return rightMoveDistance; + public void setxMove(boolean xMove) { + this.xMove = xMove; } - public boolean isBottomMove() { - return isBottomMove; + public double getxMoveDistance() { + return xMoveDistance; } - public double getBottomMoveDistance() { - return bottomMoveDistance; + public void setxMoveDistance(double xMoveDistance) { + this.xMoveDistance = xMoveDistance; } - public void setRightMove(boolean rightMove) { - isRightMove = rightMove; + public boolean isyMove() { + return yMove; } - public void setRightMoveDistance(double rightMoveDistance) { - this.rightMoveDistance = rightMoveDistance; + public void setyMove(boolean yMove) { + this.yMove = yMove; } - public void setBottomMove(boolean bottomMove) { - isBottomMove = bottomMove; + public double getyMoveDistance() { + return yMoveDistance; } - public void setBottomMoveDistance(double bottomMoveDistance) { - this.bottomMoveDistance = bottomMoveDistance; + public void setyMoveDistance(double yMoveDistance) { + this.yMoveDistance = yMoveDistance; } public Set getInRangeShapeIdSet() {