diff --git a/com.actionsoft.apps.coe.pal.modelconvert/lib/com.actionsoft.apps.coe.pal.modelconvert.jar b/com.actionsoft.apps.coe.pal.modelconvert/lib/com.actionsoft.apps.coe.pal.modelconvert.jar index dbe3c075..aa215d39 100644 Binary files a/com.actionsoft.apps.coe.pal.modelconvert/lib/com.actionsoft.apps.coe.pal.modelconvert.jar and b/com.actionsoft.apps.coe.pal.modelconvert/lib/com.actionsoft.apps.coe.pal.modelconvert.jar differ diff --git a/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/strategy/impl/EpcToBPMN.java b/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/strategy/impl/EpcToBPMN.java index 7f2346bc..f237c0d7 100644 --- a/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/strategy/impl/EpcToBPMN.java +++ b/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/strategy/impl/EpcToBPMN.java @@ -687,16 +687,7 @@ public class EpcToBPMN implements ModelConvertStrategy { JSONObject epcLinkerFromObj = epcLinkerObj.getJSONObject("from"); JSONObject epcLinkerToObj = epcLinkerObj.getJSONObject("to"); String epcLinkerFromId = epcLinkerFromObj.getString("id"); - Position epcLinkerFromPoi = new Position(epcLinkerFromObj.getDoubleValue("x"),epcLinkerFromObj.getDoubleValue("y")); String epcLinkerToId = epcLinkerToObj.getString("id"); - Position epcLinkerToPoi = new Position(epcLinkerToObj.getDoubleValue("x"),epcLinkerToObj.getDoubleValue("y")); - JSONObject epcLinkerProps = epcLinkerObj.getJSONObject("props"); - JSONArray epcLinkerPoints = epcLinkerObj.getJSONArray("points"); - Position epcLinkerPoint1 = new Position(((JSONObject)epcLinkerPoints.get(0)).getDoubleValue("x"),((JSONObject)epcLinkerPoints.get(0)).getDoubleValue("y")); - Position epcLinkerPoint2 = null; - if (epcLinkerPoints.size() > 1){ - epcLinkerPoint2 = new Position(((JSONObject)epcLinkerPoints.get(1)).getDoubleValue("x"),((JSONObject)epcLinkerPoints.get(1)).getDoubleValue("y")); - } JSONObject bpmnLinkerObj = JSONObject.parseObject(LinkerDefConstant.linker); String bpmnLinkerDefId = UUIDGener.getObjectId(); @@ -710,12 +701,6 @@ public class EpcToBPMN implements ModelConvertStrategy { JSONObject bpmnLinkerToObj = new JSONObject(); bpmnLinkerToObj.put("id",bpmnShapeToId); - JSONObject bpmnShapeFromObj = bpmnElements.getJSONObject(bpmnShapeFromId); - JSONObject bpmnShapeToObj = bpmnElements.getJSONObject(bpmnShapeToId); - - JSONObject bpmnShapeFromProps = bpmnShapeFromObj.getJSONObject("props"); - JSONObject bpmnShapeToProps = bpmnShapeToObj.getJSONObject("props"); - JSONArray points = new JSONArray(); Map convertLinkerTypeMap = new HashMap<>(); Map anchorPoiMap = ConvertUtil.getConvertAnchorPoi(elements, bpmnElements, epcLinkerObj,convertLinkerTypeMap); diff --git a/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/util/ConvertUtil.java b/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/util/ConvertUtil.java index ad443746..9234ba63 100644 --- a/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/util/ConvertUtil.java +++ b/com.actionsoft.apps.coe.pal.modelconvert/src/com/actionsoft/apps/coe/pal/modelconvert/util/ConvertUtil.java @@ -226,10 +226,13 @@ public class ConvertUtil { String afterFromShapeId = ConvertShapeIdMapping.getInstance().getTargetShapeId(ConvertType.EPC_BPMN,beforeFromShapeId); JSONObject beforeFromShapeObj = beforeConvertElement.getJSONObject(beforeFromShapeId); JSONObject beforeFromShapeProps = beforeFromShapeObj.getJSONObject("props"); + // 图形的四个锚点 Position leftFromPoi = new Position(beforeFromShapeProps.getDoubleValue("x"),beforeFromShapeProps.getDoubleValue("y") + (beforeFromShapeProps.getDoubleValue("h") / 2)); Position topFromPoi = new Position(beforeFromShapeProps.getDoubleValue("x") + (beforeFromShapeProps.getDoubleValue("w") / 2),beforeFromShapeProps.getDoubleValue("y")); Position rightFromPoi = new Position(beforeFromShapeProps.getDoubleValue("x") + beforeFromShapeProps.getDoubleValue("w"),beforeFromShapeProps.getDoubleValue("y") + (beforeFromShapeProps.getDoubleValue("h") / 2)); Position bottomFromPoi = new Position(beforeFromShapeProps.getDoubleValue("x") + (beforeFromShapeProps.getDoubleValue("w") / 2),beforeFromShapeProps.getDoubleValue("y") + beforeFromShapeProps.getDoubleValue("h")); + // 图形的中心点 + Position centerFromPoi = new Position(beforeFromShapeProps.getDoubleValue("x") + (beforeFromShapeProps.getDoubleValue("w") / 2),beforeFromShapeProps.getDoubleValue("y") + (beforeFromShapeProps.getDoubleValue("h") / 2)); JSONObject afterFromShapeObj = afterConvertElement.getJSONObject(afterFromShapeId); JSONObject afterFromShapeProps = afterFromShapeObj.getJSONObject("props"); @@ -252,22 +255,30 @@ public class ConvertUtil { convertLinkerTypeMap.put(ShapeConstant.LINKER_FROM_DIRECTION_KEY,"right"); }else{ // 有坑 正常来讲不会进入这里 - if (beforeConvertFromAnchorPoi.getX() >= rightFromPoi.getX() && beforeConvertFromAnchorPoi.getY() > topFromPoi.getY() && beforeConvertFromAnchorPoi.getY() < bottomFromPoi.getY()){ + if ((beforeConvertFromAnchorPoi.getX() >= rightFromPoi.getX() || (beforeConvertFromAnchorPoi.getX() <= rightFromPoi.getX() && beforeConvertFromAnchorPoi.getX() > centerFromPoi.getX())) + && beforeConvertFromAnchorPoi.getY() > topFromPoi.getY() + && beforeConvertFromAnchorPoi.getY() < bottomFromPoi.getY()){ // 转换前从右侧出 转换后从上侧出 Position afterTopFromPoi = new Position(afterFromShapeProps.getDoubleValue("x") + (afterFromShapeProps.getDoubleValue("w") / 2),afterFromShapeProps.getDoubleValue("y")); resultMap.put("from",afterTopFromPoi); convertLinkerTypeMap.put(ShapeConstant.LINKER_FROM_DIRECTION_KEY,"top"); - }else if (beforeConvertFromAnchorPoi.getX() <= leftFromPoi.getX() && beforeConvertFromAnchorPoi.getY() > topFromPoi.getY() && beforeConvertFromAnchorPoi.getY() < bottomFromPoi.getY()){ + }else if ((beforeConvertFromAnchorPoi.getX() <= leftFromPoi.getX() || (beforeConvertFromAnchorPoi.getX() >= leftFromPoi.getX() && beforeConvertFromAnchorPoi.getX() < centerFromPoi.getX())) + && beforeConvertFromAnchorPoi.getY() > topFromPoi.getY() + && beforeConvertFromAnchorPoi.getY() < bottomFromPoi.getY()){ // 转换前从左侧出 转换后从下侧出 Position afterBottomFromPoi = new Position(afterFromShapeProps.getDoubleValue("x") + (afterFromShapeProps.getDoubleValue("w") / 2),afterFromShapeProps.getDoubleValue("y") + afterFromShapeProps.getDoubleValue("h")); resultMap.put("from",afterBottomFromPoi); convertLinkerTypeMap.put(ShapeConstant.LINKER_FROM_DIRECTION_KEY,"bottom"); - }else if (beforeConvertFromAnchorPoi.getX() > leftFromPoi.getX() && beforeConvertFromAnchorPoi.getX() < rightFromPoi.getX() && beforeConvertFromAnchorPoi.getY() <= topFromPoi.getY()){ + }else if (beforeConvertFromAnchorPoi.getX() > leftFromPoi.getX() + && beforeConvertFromAnchorPoi.getX() < rightFromPoi.getX() + && (beforeConvertFromAnchorPoi.getY() <= topFromPoi.getY() || (beforeConvertFromAnchorPoi.getY() >= topFromPoi.getY() && beforeConvertFromAnchorPoi.getY() < centerFromPoi.getY()))){ // 转换前从上侧出 转换后从左侧出 Position afterLeftFromPoi = new Position(afterFromShapeProps.getDoubleValue("x"),afterFromShapeProps.getDoubleValue("y") + (afterFromShapeProps.getDoubleValue("h") / 2)); resultMap.put("from",afterLeftFromPoi); convertLinkerTypeMap.put(ShapeConstant.LINKER_FROM_DIRECTION_KEY,"left"); - }else if (beforeConvertFromAnchorPoi.getX() > leftFromPoi.getX() && beforeConvertFromAnchorPoi.getX() < rightFromPoi.getX() && beforeConvertFromAnchorPoi.getY() >= bottomFromPoi.getY()){ + }else if (beforeConvertFromAnchorPoi.getX() > leftFromPoi.getX() + && beforeConvertFromAnchorPoi.getX() < rightFromPoi.getX() + && (beforeConvertFromAnchorPoi.getY() >= bottomFromPoi.getY() || (beforeConvertFromAnchorPoi.getY() <= bottomFromPoi.getY() && beforeConvertFromAnchorPoi.getY() > centerFromPoi.getY()))){ // 转换前从下侧出 转换后从右侧出 Position afterRightFromPoi = new Position(afterFromShapeProps.getDoubleValue("x") + afterFromShapeProps.getDoubleValue("w"),afterFromShapeProps.getDoubleValue("y") + (afterFromShapeProps.getDoubleValue("h") / 2)); resultMap.put("from",afterRightFromPoi); @@ -289,6 +300,8 @@ public class ConvertUtil { Position rightToPoi = new Position(beforeToShapeProps.getDoubleValue("x") + beforeToShapeProps.getDoubleValue("w"),beforeToShapeProps.getDoubleValue("y") + (beforeToShapeProps.getDoubleValue("h") / 2)); Position bottomToPoi = new Position(beforeToShapeProps.getDoubleValue("x") + (beforeToShapeProps.getDoubleValue("w") / 2),beforeToShapeProps.getDoubleValue("y") + beforeToShapeProps.getDoubleValue("h")); + Position centerToPoi = new Position(beforeToShapeProps.getDoubleValue("x") + (beforeToShapeProps.getDoubleValue("w") / 2),beforeToShapeProps.getDoubleValue("y") + (beforeToShapeProps.getDoubleValue("h") / 2)); + JSONObject afterToShapeObj = afterConvertElement.getJSONObject(afterToShapeId); JSONObject afterToShapeProps = afterToShapeObj.getJSONObject("props"); @@ -310,22 +323,30 @@ public class ConvertUtil { convertLinkerTypeMap.put(ShapeConstant.LINKER_TO_DIRECTION_KEY,"right"); }else { // 有坑 正常来讲不会进入这里 - if (beforeConvertToAnchorPoi.getX() >= rightToPoi.getX() && beforeConvertToAnchorPoi.getY() > topToPoi.getY() && beforeConvertToAnchorPoi.getY() < bottomToPoi.getY()){ + if ((beforeConvertToAnchorPoi.getX() >= rightToPoi.getX() || (beforeConvertToAnchorPoi.getX() <= rightToPoi.getX() && beforeConvertToAnchorPoi.getX() > centerToPoi.getX())) + && beforeConvertToAnchorPoi.getY() > topToPoi.getY() + && beforeConvertToAnchorPoi.getY() < bottomToPoi.getY()){ // 转换前从右侧进入 转换后 从上侧进入 Position afterTopToPoi = new Position(afterToShapeProps.getDoubleValue("x") + (afterToShapeProps.getDoubleValue("w") / 2),afterToShapeProps.getDoubleValue("y")); resultMap.put("to",afterTopToPoi); convertLinkerTypeMap.put(ShapeConstant.LINKER_TO_DIRECTION_KEY,"top"); - }else if (beforeConvertToAnchorPoi.getX() <= leftToPoi.getX() && beforeConvertToAnchorPoi.getY() > topToPoi.getY() && beforeConvertToAnchorPoi.getY() < bottomToPoi.getY()){ + }else if ((beforeConvertToAnchorPoi.getX() <= leftToPoi.getX() || (beforeConvertToAnchorPoi.getX() >= leftToPoi.getX() && beforeConvertToAnchorPoi.getX() < centerToPoi.getX())) + && beforeConvertToAnchorPoi.getY() > topToPoi.getY() + && beforeConvertToAnchorPoi.getY() < bottomToPoi.getY()){ // 转换前从左侧进入 转换后 从下侧进入 Position afterBottomToPoi = new Position(afterToShapeProps.getDoubleValue("x") + (afterToShapeProps.getDoubleValue("w") / 2),afterToShapeProps.getDoubleValue("y") + afterToShapeProps.getDoubleValue("h")); resultMap.put("to",afterBottomToPoi); convertLinkerTypeMap.put(ShapeConstant.LINKER_TO_DIRECTION_KEY,"bottom"); - }else if (beforeConvertToAnchorPoi.getX() > leftToPoi.getX() && beforeConvertToAnchorPoi.getX() < rightToPoi.getX() && beforeConvertToAnchorPoi.getY() <= topToPoi.getY()){ + }else if (beforeConvertToAnchorPoi.getX() > leftToPoi.getX() + && beforeConvertToAnchorPoi.getX() < rightToPoi.getX() + && (beforeConvertToAnchorPoi.getY() <= topToPoi.getY() || (beforeConvertToAnchorPoi.getY() >= topToPoi.getY() && beforeConvertToAnchorPoi.getY() < centerToPoi.getY()))){ // 转换前从上侧进入 转换后 从左侧进入 Position afterLeftToPoi = new Position(afterToShapeProps.getDoubleValue("x"),afterToShapeProps.getDoubleValue("y") + (afterToShapeProps.getDoubleValue("h") / 2)); resultMap.put("to",afterLeftToPoi); convertLinkerTypeMap.put(ShapeConstant.LINKER_TO_DIRECTION_KEY,"left"); - }else if (beforeConvertToAnchorPoi.getX() > leftToPoi.getX() && beforeConvertToAnchorPoi.getX() < rightToPoi.getX() && beforeConvertToAnchorPoi.getY() >= bottomToPoi.getY()){ + }else if (beforeConvertToAnchorPoi.getX() > leftToPoi.getX() + && beforeConvertToAnchorPoi.getX() < rightToPoi.getX() + && (beforeConvertToAnchorPoi.getY() >= bottomToPoi.getY() || (beforeConvertToAnchorPoi.getY() <= bottomToPoi.getY() && beforeConvertToAnchorPoi.getY() > centerToPoi.getY()))){ // 转换前从下侧进入 转换后 从右侧进入 Position afterRightToPoi = new Position(afterToShapeProps.getDoubleValue("x") + afterToShapeProps.getDoubleValue("w"),afterToShapeProps.getDoubleValue("y") + (afterToShapeProps.getDoubleValue("h") / 2)); resultMap.put("to",afterRightToPoi); @@ -358,25 +379,47 @@ public class ConvertUtil { String fromDirection = convertLinkerTypeMap.get(ShapeConstant.LINKER_FROM_DIRECTION_KEY); String toDirection = convertLinkerTypeMap.get(ShapeConstant.LINKER_TO_DIRECTION_KEY); if ("right".equals(fromDirection) && "left".equals(toDirection)){ // 水平连线 - double x = (toPoi.getX() - fromPoi.getX()) / 2; - JSONObject p1 = new JSONObject(); - p1.put("x",fromPoi.getX() + x); - p1.put("y",fromPoi.getY()); - JSONObject p2 = new JSONObject(); - p2.put("x",fromPoi.getX() + x); - p2.put("y",fromPoi.getY()); - points.add(p1); - points.add(p2); + double distance = (toPoi.getX() - fromPoi.getX()) / 2; + if (fromPoi.getY() == toPoi.getY()){ + JSONObject p1 = new JSONObject(); + p1.put("x",fromPoi.getX() + distance); + p1.put("y",fromPoi.getY()); + JSONObject p2 = new JSONObject(); + p2.put("x",fromPoi.getX() + distance); + p2.put("y",fromPoi.getY()); + points.add(p1); + points.add(p2); + }else { + JSONObject p1 = new JSONObject(); + p1.put("x",fromPoi.getX() + distance); + p1.put("y",fromPoi.getY()); + JSONObject p2 = new JSONObject(); + p2.put("x",fromPoi.getX() + distance); + p2.put("y",toPoi.getY()); + points.add(p1); + points.add(p2); + } }else if ("left".equals(fromDirection) && "right".equals(toDirection)){ - double x = (fromPoi.getX() - toPoi.getX()) / 2; - JSONObject p1 = new JSONObject(); - p1.put("x",toPoi.getX() + x); - p1.put("y",toPoi.getY()); - JSONObject p2 = new JSONObject(); - p2.put("x",toPoi.getX() + x); - p2.put("y",toPoi.getY()); - points.add(p1); - points.add(p2); + double distance = (fromPoi.getX() - toPoi.getX()) / 2; + if (fromPoi.getY() == toPoi.getY()){ + JSONObject p1 = new JSONObject(); + p1.put("x",toPoi.getX() + distance); + p1.put("y",toPoi.getY()); + JSONObject p2 = new JSONObject(); + p2.put("x",toPoi.getX() + distance); + p2.put("y",toPoi.getY()); + points.add(p1); + points.add(p2); + }else { + JSONObject p1 = new JSONObject(); + p1.put("x",toPoi.getX() + distance); + p1.put("y",toPoi.getY()); + JSONObject p2 = new JSONObject(); + p2.put("x",toPoi.getX() + distance); + p2.put("y",fromPoi.getY()); + points.add(p1); + points.add(p2); + } }else if ("top".equals(fromDirection) && ("left".equals(toDirection) || "right".equals(toDirection))){ JSONObject p = new JSONObject(); p.put("x",fromPoi.getX());