子流程节点与普通节点相连 子流程节点展开报错问题
This commit is contained in:
parent
8057a06476
commit
4b1d967cfa
Binary file not shown.
@ -73,30 +73,32 @@ public class ExpandOrCloseShapeLinkerConvertHandle {
|
||||
if (leadNodeType.name().equals(ElementType.OUTER_NODE.name()) || leadNodeType.name().equals(ElementType.SCOPE_NODE.name())){
|
||||
// 获取前置节点的扩展属性
|
||||
JSONObject extendAttr = leadNode.getJSONObject(SubProcessConst.EXTEND_ATTR);
|
||||
// 当前前置节点 所代表的子流程文件ID
|
||||
String leadNodeRelationId = extendAttr.getString("id");
|
||||
// 1、未展开 子流程节点
|
||||
// 2、此时前置节点为范围框 同时说明之前范围框内部没有节点与当前节点有关联关系
|
||||
// 判断当前节点内部是否有流程接口 与范围框有关联关系 因为范围框本身也是一个文件
|
||||
for (Object o2 : procedureArr) {
|
||||
JSONObject procedure = (JSONObject) o2;
|
||||
JSONObject attrMark = procedure.getJSONObject(SubProcessConst.SHAPE_PROCEDURE_ATTR_MARK);
|
||||
String procedureNodeRelationId = attrMark.getString("id");
|
||||
if (leadNodeRelationId.equals(procedureNodeRelationId)){ // 前置节点与内部流程接口有关联关系
|
||||
// 删除当前 前置节点与范围框上的连线
|
||||
definitionHandle.removeShape(leadNodeLinker.getString("id"));
|
||||
// 重新渲染当前 前置节点与范围框的连线
|
||||
String procedureId = procedure.getString("id");
|
||||
double[] fromBounding = new double[]{definitionHandle.getShapeX(leadNodeId), definitionHandle.getShapeY(leadNodeId), definitionHandle.getShapeW(leadNodeId), definitionHandle.getShapeH(leadNodeId)};
|
||||
double[] toBounding = new double[]{definitionHandle.getShapeX(procedureId), definitionHandle.getShapeY(procedureId), definitionHandle.getShapeW(procedureId), definitionHandle.getShapeH(procedureId)};
|
||||
JSONObject linker = linkerPointCalculationHandle.toAssembleLinker(direction, leadNodeId, procedureId, fromBounding, toBounding);
|
||||
// 连线属于内外交叉连线 加个特殊标识属性
|
||||
linker.put("elementType", ElementType.CROSS_LINKER.name());
|
||||
linker.put("creator", "system");
|
||||
definitionHandle.addEle(linker.getString("id"), linker);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (extendAttr.containsKey("id")){
|
||||
// 当前前置节点 所代表的子流程文件ID
|
||||
String leadNodeRelationId = extendAttr.getString("id");
|
||||
// 1、未展开 子流程节点
|
||||
// 2、此时前置节点为范围框 同时说明之前范围框内部没有节点与当前节点有关联关系
|
||||
// 判断当前节点内部是否有流程接口 与范围框有关联关系 因为范围框本身也是一个文件
|
||||
for (Object o2 : procedureArr) {
|
||||
JSONObject procedure = (JSONObject) o2;
|
||||
JSONObject attrMark = procedure.getJSONObject(SubProcessConst.SHAPE_PROCEDURE_ATTR_MARK);
|
||||
String procedureNodeRelationId = attrMark.getString("id");
|
||||
if (leadNodeRelationId.equals(procedureNodeRelationId)){ // 前置节点与内部流程接口有关联关系
|
||||
// 删除当前 前置节点与范围框上的连线
|
||||
definitionHandle.removeShape(leadNodeLinker.getString("id"));
|
||||
// 重新渲染当前 前置节点与范围框的连线
|
||||
String procedureId = procedure.getString("id");
|
||||
double[] fromBounding = new double[]{definitionHandle.getShapeX(leadNodeId), definitionHandle.getShapeY(leadNodeId), definitionHandle.getShapeW(leadNodeId), definitionHandle.getShapeH(leadNodeId)};
|
||||
double[] toBounding = new double[]{definitionHandle.getShapeX(procedureId), definitionHandle.getShapeY(procedureId), definitionHandle.getShapeW(procedureId), definitionHandle.getShapeH(procedureId)};
|
||||
JSONObject linker = linkerPointCalculationHandle.toAssembleLinker(direction, leadNodeId, procedureId, fromBounding, toBounding);
|
||||
// 连线属于内外交叉连线 加个特殊标识属性
|
||||
linker.put("elementType", ElementType.CROSS_LINKER.name());
|
||||
linker.put("creator", "system");
|
||||
definitionHandle.addEle(linker.getString("id"), linker);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else { // 已展开 内部节点
|
||||
// 此时前置节点为某一个范围框的内部节点 找到当前内部节点归属哪个范围框 判断当前范围框是否与当前展开的内部流程接口有关联
|
||||
String scopeShapeId = leadNode.getString("scopeShapeId");
|
||||
@ -133,26 +135,28 @@ public class ExpandOrCloseShapeLinkerConvertHandle {
|
||||
if (procedureArr.size() > 0){ // 范围框内部存在前置或者后置流程接口
|
||||
if (rearNodeType.name().equals(ElementType.OUTER_NODE.name()) || rearNodeType.name().equals(ElementType.SCOPE_NODE.name())){
|
||||
JSONObject extendAttr = rearNode.getJSONObject(SubProcessConst.EXTEND_ATTR);
|
||||
// 当前后置节点 所代表的子流程文件ID
|
||||
String rearNodeRelationId = extendAttr.getString("id");
|
||||
for (Object o2 : procedureArr) {
|
||||
JSONObject procedure = (JSONObject) o2;
|
||||
JSONObject attrMark = procedure.getJSONObject(SubProcessConst.SHAPE_PROCEDURE_ATTR_MARK);
|
||||
String procedureNodeRelationId = attrMark.getString("id");
|
||||
if (rearNodeRelationId.equals(procedureNodeRelationId)){ // 后置节点与内部流程接口有关联关系
|
||||
definitionHandle.removeShape(rearNodeLinker.getString("id"));
|
||||
// 重新渲染当前 前置节点与范围框的连线
|
||||
String procedureId = procedure.getString("id");
|
||||
double[] fromBounding = new double[]{definitionHandle.getShapeX(procedureId), definitionHandle.getShapeY(procedureId), definitionHandle.getShapeW(procedureId), definitionHandle.getShapeH(procedureId)};
|
||||
double[] toBounding = new double[]{definitionHandle.getShapeX(rearNodeId), definitionHandle.getShapeY(rearNodeId), definitionHandle.getShapeW(rearNodeId), definitionHandle.getShapeH(rearNodeId)};
|
||||
JSONObject linker = linkerPointCalculationHandle.toAssembleLinker(direction, procedureId, rearNodeId, fromBounding, toBounding);
|
||||
// 连线属于内外交叉连线 加个特殊标识属性
|
||||
linker.put("elementType", ElementType.CROSS_LINKER.name());
|
||||
linker.put("creator", "system");
|
||||
definitionHandle.addEle(linker.getString("id"), linker);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (extendAttr.containsKey("id")){
|
||||
// 当前后置节点 所代表的子流程文件ID
|
||||
String rearNodeRelationId = extendAttr.getString("id");
|
||||
for (Object o2 : procedureArr) {
|
||||
JSONObject procedure = (JSONObject) o2;
|
||||
JSONObject attrMark = procedure.getJSONObject(SubProcessConst.SHAPE_PROCEDURE_ATTR_MARK);
|
||||
String procedureNodeRelationId = attrMark.getString("id");
|
||||
if (rearNodeRelationId.equals(procedureNodeRelationId)){ // 后置节点与内部流程接口有关联关系
|
||||
definitionHandle.removeShape(rearNodeLinker.getString("id"));
|
||||
// 重新渲染当前 前置节点与范围框的连线
|
||||
String procedureId = procedure.getString("id");
|
||||
double[] fromBounding = new double[]{definitionHandle.getShapeX(procedureId), definitionHandle.getShapeY(procedureId), definitionHandle.getShapeW(procedureId), definitionHandle.getShapeH(procedureId)};
|
||||
double[] toBounding = new double[]{definitionHandle.getShapeX(rearNodeId), definitionHandle.getShapeY(rearNodeId), definitionHandle.getShapeW(rearNodeId), definitionHandle.getShapeH(rearNodeId)};
|
||||
JSONObject linker = linkerPointCalculationHandle.toAssembleLinker(direction, procedureId, rearNodeId, fromBounding, toBounding);
|
||||
// 连线属于内外交叉连线 加个特殊标识属性
|
||||
linker.put("elementType", ElementType.CROSS_LINKER.name());
|
||||
linker.put("creator", "system");
|
||||
definitionHandle.addEle(linker.getString("id"), linker);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
// 此时后置节点为某一个范围框的内部节点 找到当前内部节点归属哪个范围框 判断当前范围框是否与当前展开的内部流程接口有关联
|
||||
String scopeShapeId = rearNode.getString("scopeShapeId");
|
||||
|
||||
@ -470,10 +470,14 @@ class NodeCloseLinkerRender{
|
||||
{toX + toW / 2, toY}
|
||||
};
|
||||
}else {
|
||||
// fromX < toX && fromY > toY 目标节点在第一象限 分析可知 纵向排布的情况下 应该不会出现目标节点在第一象限的情况
|
||||
return new double[][]{
|
||||
{fromX + fromW, fromY + fromH / 2},
|
||||
{fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2},
|
||||
{fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + toH / 2},
|
||||
{toX, toY + toH / 2}
|
||||
};
|
||||
}
|
||||
}
|
||||
return new double[2][2];
|
||||
}
|
||||
|
||||
private double[][] calculationLinkerPointInHorizLayOut(double[] fromBounding, double[] toBounding) {
|
||||
@ -563,7 +567,12 @@ class NodeCloseLinkerRender{
|
||||
};
|
||||
}
|
||||
}else if (fromX > toX && fromY < toY){ // 目标节点在第三象限 横向布局的情况下 应该不会出现目标节点在第三象限的情况
|
||||
ConsolePrinter.warn("[端到端功能][节点展开模块]处理连线时目标节点在[横向布局]的情况下出现在了第三象限");
|
||||
return new double[][]{
|
||||
{fromX + fromW / 2, fromY + fromH},
|
||||
{fromX + fromW / 2, fromY + fromH + SubProcessConst.SHAPE_VERT_INTERVAL / 2},
|
||||
{toX + toW / 2, fromY + fromH + SubProcessConst.SHAPE_VERT_INTERVAL / 2},
|
||||
{toX + toW / 2, toY}
|
||||
};
|
||||
}
|
||||
}
|
||||
return new double[2][2];
|
||||
|
||||
@ -583,10 +583,14 @@ class NodeExpandLinkerRender{
|
||||
{toX + toW / 2, toY}
|
||||
};
|
||||
}else {
|
||||
// fromX < toX && fromY > toY 目标节点在第一象限 分析可知 纵向排布的情况下 应该不会出现目标节点在第一象限的情况
|
||||
return new double[][]{
|
||||
{fromX + fromW, fromY + fromH / 2},
|
||||
{fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, fromY + fromH / 2},
|
||||
{fromX + getCurrentColMaxW(fromX) + SubProcessConst.SHAPE_HORIZ_INTERVAL / 2, toY + toH / 2},
|
||||
{toX, toY + toH / 2}
|
||||
};
|
||||
}
|
||||
}
|
||||
return new double[2][2];
|
||||
}
|
||||
|
||||
private double[][] calculationLinkerPointInHorizLayOut(double[] fromBounding, double[] toBounding) {
|
||||
@ -677,7 +681,12 @@ class NodeExpandLinkerRender{
|
||||
};
|
||||
}
|
||||
}else if (fromX > toX && fromY < toY){ // 目标节点在第三象限 横向布局的情况下 应该不会出现目标节点在第三象限的情况
|
||||
ConsolePrinter.warn("[端到端功能][节点展开模块]处理连线时目标节点在[横向布局]的情况下出现在了第三象限");
|
||||
return new double[][]{
|
||||
{fromX + fromW / 2, fromY + fromH},
|
||||
{fromX + fromW / 2, fromY + fromH + SubProcessConst.SHAPE_VERT_INTERVAL / 2},
|
||||
{toX + toW / 2, fromY + fromH + SubProcessConst.SHAPE_VERT_INTERVAL / 2},
|
||||
{toX + toW / 2, toY}
|
||||
};
|
||||
}
|
||||
}
|
||||
return new double[2][2];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user