| | |
| | | } |
| | | } |
| | | } else if ("bridge".contains(parent.getAlgorithmType())) { |
| | | // 将桥联看成2支路并联+桥接支路的组合 |
| | | ModelNode searchNode = rightNode; |
| | | List<ModelLine> linesRight = modelLineList.stream().filter(item -> |
| | | item.getEndCell().equals(searchNode.getPicId())).collect(Collectors.toList()); |
| | | List<ModelLine> sortedLinesRight = sortLine(linesRight, modelNodeList); |
| | | List<ModelLine> linesLeft = modelLineList.stream().filter(item -> |
| | | item.getBeginCell().equals(searchNode.getPairStartNodeId())).collect(Collectors.toList()); |
| | | List<ModelLine> sortedLinesLeft = sortLine(linesLeft, modelNodeList); |
| | | ModelLine lineTop = modelLineList.stream().filter(item -> |
| | | item.getPicId().equals(searchNode.getBridgeEdgeTopId())).collect(Collectors.toList()).get(0); |
| | | ModelLine lineBottom = modelLineList.stream().filter(item -> |
| | | item.getPicId().equals(searchNode.getBridgeEdgeBottomId())).collect(Collectors.toList()).get(0); |
| | | ModelLine verticalLineUpper = modelLineList.stream().filter(item -> |
| | | item.getBeginCell().equals(searchNode.getBridgeEdgeTopId())).collect(Collectors.toList()).get(0); |
| | | ModelLine verticalLineLower = modelLineList.stream().filter(item -> |
| | | item.getEndCell().equals(searchNode.getBridgeEdgeBottomId())).collect(Collectors.toList()).get(0); |
| | | // 桥联的第1个支路 |
| | | if (isSeriesBranch(lineTop, sortedLinesLeft.get(0), modelNodeList, modelLineList)) { |
| | | RbdTreeNode subNode = new RbdTreeNode(); |
| | | subNode.setAlgorithmType("series"); |
| | | subNode.setId(UUIDUtil.generateId()); |
| | | int counter = vnodeCounter.get("vnodeCounter"); |
| | | subNode.setName("v" + counter); |
| | | counter++; |
| | | vnodeCounter.put("vnodeCounter", counter); |
| | | subNode.setNodeType("vnode"); |
| | | parent.getChildren().add(subNode); |
| | | recognizeOneBranch(subNode, lineTop, sortedLinesLeft.get(0), modelNodeList, modelLineList, vnodeCounter); |
| | | } else { |
| | | recognizeOneBranch(parent, lineTop, sortedLinesLeft.get(0), modelNodeList, modelLineList, vnodeCounter); |
| | | } |
| | | // 桥联的第2个支路 |
| | | if (isSeriesBranch(sortedLinesRight.get(0), lineTop, modelNodeList, modelLineList)) { |
| | | RbdTreeNode subNode = new RbdTreeNode(); |
| | | subNode.setAlgorithmType("series"); |
| | | subNode.setId(UUIDUtil.generateId()); |
| | | int counter = vnodeCounter.get("vnodeCounter"); |
| | | subNode.setName("v" + counter); |
| | | counter++; |
| | | vnodeCounter.put("vnodeCounter", counter); |
| | | subNode.setNodeType("vnode"); |
| | | parent.getChildren().add(subNode); |
| | | recognizeOneBranch(subNode, sortedLinesRight.get(0), lineTop, modelNodeList, modelLineList, vnodeCounter); |
| | | } else { |
| | | recognizeOneBranch(parent, sortedLinesRight.get(0), lineTop, modelNodeList, modelLineList, vnodeCounter); |
| | | } |
| | | // 桥联的第3个支路 |
| | | if (isSeriesBranch(verticalLineLower, verticalLineUpper, modelNodeList, modelLineList)) { |
| | | RbdTreeNode subNode = new RbdTreeNode(); |
| | | subNode.setAlgorithmType("series"); |
| | | subNode.setId(UUIDUtil.generateId()); |
| | | int counter = vnodeCounter.get("vnodeCounter"); |
| | | subNode.setName("v" + counter); |
| | | counter++; |
| | | vnodeCounter.put("vnodeCounter", counter); |
| | | subNode.setNodeType("vnode"); |
| | | parent.getChildren().add(subNode); |
| | | recognizeOneBranch(subNode, verticalLineLower, verticalLineUpper, modelNodeList, modelLineList, vnodeCounter); |
| | | } else { |
| | | recognizeOneBranch(parent, verticalLineLower, verticalLineUpper, modelNodeList, modelLineList, vnodeCounter); |
| | | } |
| | | // 桥联的第4个支路 |
| | | if (isSeriesBranch(lineBottom, sortedLinesLeft.get(1), modelNodeList, modelLineList)) { |
| | | RbdTreeNode subNode = new RbdTreeNode(); |
| | | subNode.setAlgorithmType("series"); |
| | | subNode.setId(UUIDUtil.generateId()); |
| | | int counter = vnodeCounter.get("vnodeCounter"); |
| | | subNode.setName("v" + counter); |
| | | counter++; |
| | | vnodeCounter.put("vnodeCounter", counter); |
| | | subNode.setNodeType("vnode"); |
| | | parent.getChildren().add(subNode); |
| | | recognizeOneBranch(subNode, lineBottom, sortedLinesLeft.get(1), modelNodeList, modelLineList, vnodeCounter); |
| | | } else { |
| | | recognizeOneBranch(parent, lineBottom, sortedLinesLeft.get(1), modelNodeList, modelLineList, vnodeCounter); |
| | | } |
| | | // 桥联的第5个支路 |
| | | if (isSeriesBranch(sortedLinesRight.get(1), lineBottom, modelNodeList, modelLineList)) { |
| | | RbdTreeNode subNode = new RbdTreeNode(); |
| | | subNode.setAlgorithmType("series"); |
| | | subNode.setId(UUIDUtil.generateId()); |
| | | int counter = vnodeCounter.get("vnodeCounter"); |
| | | subNode.setName("v" + counter); |
| | | counter++; |
| | | vnodeCounter.put("vnodeCounter", counter); |
| | | subNode.setNodeType("vnode"); |
| | | parent.getChildren().add(subNode); |
| | | recognizeOneBranch(subNode, sortedLinesRight.get(1), lineBottom, modelNodeList, modelLineList, vnodeCounter); |
| | | } else { |
| | | recognizeOneBranch(parent, sortedLinesRight.get(1), lineBottom, modelNodeList, modelLineList, vnodeCounter); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | ModelNode node3 = modelNodeList.stream().filter(item -> |
| | | line2.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); |
| | | result = !node3.getPicId().equals(rightNode.getPairStartNodeId()); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | private boolean isSeriesBranch(ModelLine lineRight, // 串联的起始线(右边) |
| | | ModelLine lineLeft, // 串联的结束线(左边) |
| | | List<ModelNode> modelNodeList, |
| | | List<ModelLine> modelLineList) { |
| | | boolean result = false; |
| | | ModelNode node = modelNodeList.stream().filter(item -> |
| | | lineRight.getBeginCell().equals(item.getPicId())).collect(Collectors.toList()).get(0); |
| | | if ("node".equals(node.getNodeType())) { |
| | | ModelLine line1 = modelLineList.stream().filter(item -> |
| | | item.getEndCell().equals(node.getPicId())).collect(Collectors.toList()).get(0); |
| | | result = !line1.getPicId().equals(lineLeft.getPicId()); |
| | | } else { |
| | | ModelNode node1 = modelNodeList.stream().filter(item -> |
| | | node.getPairStartNodeId().equals(item.getPicId())).collect(Collectors.toList()).get(0); |
| | | ModelLine line2 = modelLineList.stream().filter(item -> |
| | | item.getEndCell().equals(node1.getPicId())).collect(Collectors.toList()).get(0); |
| | | result = !line2.getPicId().equals(lineLeft.getPicId()); |
| | | } |
| | | |
| | | return result; |
| | |
| | | if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { |
| | | modelNode.setPairEndNodeId(jsonValue.toString()); |
| | | } |
| | | jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/edgeTopId".split("/")); |
| | | if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { |
| | | modelNode.setBridgeEdgeTopId(jsonValue.toString()); |
| | | } |
| | | jsonValue = JsonUtils2.getJsonValueByPath(jsonObject, "data/edgeBottomId".split("/")); |
| | | if (jsonValue != null && StringUtils.isNotBlank(jsonValue.toString())) { |
| | | modelNode.setBridgeEdgeBottomId(jsonValue.toString()); |
| | | } |
| | | if ("dashedBox".equals(modelNode.getNodeType())) { |
| | | modelNode.setNodeType("node"); |
| | | } else if ("node".equals(modelNode.getNodeType())) { |