伊利项目 模型转换连线BUG处理

This commit is contained in:
qinoy 2022-12-30 14:00:24 +08:00
parent a0202ceddd
commit c96a2a681c
3 changed files with 69 additions and 41 deletions

View File

@ -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<String,String> convertLinkerTypeMap = new HashMap<>();
Map<String, Position> anchorPoiMap = ConvertUtil.getConvertAnchorPoi(elements, bpmnElements, epcLinkerObj,convertLinkerTypeMap);

View File

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