伊利项目 模型转换连线BUG处理
This commit is contained in:
parent
a0202ceddd
commit
c96a2a681c
Binary file not shown.
@ -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);
|
||||
|
||||
@ -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());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user