diff --git a/AlgebraicDataflowArchitectureModel/src/application/layouts/DAGLayout.java b/AlgebraicDataflowArchitectureModel/src/application/layouts/DAGLayout.java index 7ced584..bf59db4 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/layouts/DAGLayout.java +++ b/AlgebraicDataflowArchitectureModel/src/application/layouts/DAGLayout.java @@ -68,7 +68,7 @@ public void execute(Object parent) { graphModel.beginUpdate(); try { - // モデルからresource, channel, eventChannelに分ける + // 繝「繝�繝ォ縺九iresource, channel, eventChannel縺ォ蛻�縺代k for (int i = 0; i < graphModel.getChildCount(parent); i++) { mxCell cell = (mxCell) graphModel.getChildAt(parent, i); @@ -76,7 +76,7 @@ mxCellState state = view.getState(cell); cells.add(cell); - // cellがresourceである + // cell縺罫esource縺ァ縺ゅk if ("ellipse".equals(state.getStyle().get("shape"))) { roots.add(cell); hierarchicalRecursionOrder.put(cell, new ArrayList<>()); @@ -88,7 +88,7 @@ continue; } - // cellがeventChannelであるか判定 + // cell縺憩ventChannel縺ァ縺ゅk縺句愛螳� boolean bEventChannel = true; for (int j = 0; j < cell.getEdgeCount(); j++) { mxCell edge = (mxCell) cell.getEdgeAt(j); @@ -97,10 +97,10 @@ } } - // cellがeventChannelである + // cell縺憩ventChannel縺ァ縺ゅk if (bEventChannel) { eventChannels.add(cell); - // cellがchannelである + // cell縺慶hannel縺ァ縺ゅk } else { channels.add(cell); } @@ -109,7 +109,7 @@ } } - // 全てのcellの座標、大きさなどを初期化 + // 蜈ィ縺ヲ縺ョcell縺ョ蠎ァ讓吶�∝、ァ縺阪&縺ェ縺ゥ繧貞�晄悄蛹� for (mxCell c : cells) { c.getGeometry().setX(0); c.getGeometry().setY(0); @@ -121,22 +121,22 @@ } } - // dotEdgesを初期化 + // dotEdges繧貞�晄悄蛹� for (mxCell c : cells) { dotEdges.put(c, new HashSet<>()); } - // lineを構築する + // line繧呈ァ狗ッ峨☆繧� for (mxCell ec : eventChannels) { List newline = new ArrayList(); lines.add(newline); constructionLine(ec, 0); } - // cellの距離を再計算 + // cell縺ョ霍晞屬繧貞�崎ィ育ョ� reculcDist(); - // cellが属するlineのindexを求める + // cell縺悟ア槭☆繧詰ine縺ョindex繧呈アゅa繧� for (int i = 0; i < lines.size(); i++) { for (mxCell cell : lines.get(i)) { if (cellToLineIndex.get(cell) == null) { @@ -146,18 +146,18 @@ } } - // 並べるlineの順番をソートする + // 荳ヲ縺ケ繧詰ine縺ョ鬆�逡ェ繧偵た繝シ繝医☆繧� sortLines(); - Boolean isVersion1 = false; + Boolean isVersion1 = true; System.out.println(vertexToDist); - // cellを配置する + // cell繧帝�咲スョ縺吶k if (isVersion1) { - // channelの所定の位置が階層構造内部になるとき、下にずらして配置するレイアウト + // channel縺ョ謇�螳壹�ョ菴咲スョ縺碁嚴螻、讒矩��蜀�驛ィ縺ォ縺ェ繧九→縺阪�∽ク九↓縺壹i縺励※驟咲スョ縺吶k繝ャ繧、繧「繧ヲ繝� layout1((mxCell) parent); } else { - // channelを階層構造内部でも所定の位置に配置するレイアウト + // channel繧帝嚴螻、讒矩��蜀�驛ィ縺ァ繧よ園螳壹�ョ菴咲スョ縺ォ驟咲スョ縺吶k繝ャ繧、繧「繧ヲ繝� layout2((mxCell) parent); } } finally { @@ -165,7 +165,7 @@ } } - // 階層構造を再帰的に探索 + // 髫主ア、讒矩��繧貞�榊クー逧�縺ォ謗「邏「 public void familySearch(mxCell r, mxCell p, int d) { int childNum = graphModel.getChildCount(p); @@ -183,13 +183,13 @@ } } - // lineを構築する + // line繧呈ァ狗ッ峨☆繧� public void constructionLine(mxCell cur, int d) { - // vertexToDist{key : cell, value : [距離の最小値, 距離の最大値]} を初期化 + // vertexToDist{key : cell, value : [霍晞屬縺ョ譛�蟆丞�、, 霍晞屬縺ョ譛�螟ァ蛟、]} 繧貞�晄悄蛹� if (vertexToDist.get(cur) == null) { vertexToDist.put(cur, Arrays.asList(d, d)); } else { - // 自身が含まれるlineの中で一番大きい距離を保存 + // 閾ェ霄ォ縺悟性縺セ繧後kline縺ョ荳ュ縺ァ荳�逡ェ螟ァ縺阪>霍晞屬繧剃ソ晏ュ� List dists = vertexToDist.get(cur); dists.set(0, Math.max(dists.get(0), d)); dists.set(1, dists.get(0)); @@ -197,30 +197,30 @@ lines.get(lines.size() - 1).add(cur); - int tagCount = 0; // edgeの始点となるcellとして参照された回数 + int tagCount = 0; // edge縺ョ蟋狗せ縺ィ縺ェ繧議ell縺ィ縺励※蜿ら�ァ縺輔l縺溷屓謨ー for (int i = 0; i < cur.getEdgeCount(); i++) { mxCell edge = (mxCell) cur.getEdgeAt(i); mxCellState state = view.getState(edge); mxCell target = (mxCell) edge.getTarget(); - // curが始点となるedgeの終点となるtargetが自身、もしくは存在しない場合を除く + // cur縺悟ァ狗せ縺ィ縺ェ繧菊dge縺ョ邨らせ縺ィ縺ェ繧逆arget縺瑚�ェ霄ォ縲√b縺励¥縺ッ蟄伜惠縺励↑縺�蝣エ蜷医r髯、縺� if ((cur != target) && (target != null)) { - // edgeの種類が"dashed"の場合 + // edge縺ョ遞ョ鬘槭′"dashed"縺ョ蝣エ蜷� if ("true".equals(state.getStyle().get("dashed"))) { - state.getStyle().put("strokeColor", "#800080"); // edgeの色を変更 - dotEdges.get(cur).add(target); // dotEdges{key : 始点となるcell, value : 終点となるcell} + state.getStyle().put("strokeColor", "#800080"); // edge縺ョ濶イ繧貞、画峩 + dotEdges.get(cur).add(target); // dotEdges{key : 蟋狗せ縺ィ縺ェ繧議ell, value : 邨らせ縺ィ縺ェ繧議ell} } else { tagCount++; - // 始点として複数回参照されている場合 + // 蟋狗せ縺ィ縺励※隍�謨ー蝗槫盾辣ァ縺輔l縺ヲ縺�繧句�エ蜷� if (tagCount > 1) { - // curまでのlineの情報を再構築して、そこから新しいlineを構築する + // cur縺セ縺ァ縺ョline縺ョ諠�蝣ア繧貞�肴ァ狗ッ峨@縺ヲ縲√◎縺薙°繧画眠縺励>line繧呈ァ狗ッ峨☆繧� List newline = new ArrayList(lines.get(lines.size() - 1)); while (newline.get(newline.size() - 1).getId() != cur.getId()) { newline.remove(newline.size() - 1); } lines.add(newline); constructionLine(target, d + 1); - // 始点として初めて参照された場合 + // 蟋狗せ縺ィ縺励※蛻昴a縺ヲ蜿ら�ァ縺輔l縺溷�エ蜷� } else { constructionLine(target, d + 1); } @@ -229,13 +229,13 @@ } } - // cellの距離を再計算する + // cell縺ョ霍晞屬繧貞�崎ィ育ョ励☆繧� public void reculcDist() { - // 距離の更新が行われなくなるまで繰り返す + // 霍晞屬縺ョ譖エ譁ー縺瑚。後o繧後↑縺上↑繧九∪縺ァ郢ー繧願ソ斐☆ while (true) { boolean isChanging = false; - // 同一のlineに含まれる自身の1つ手前の距離と自身の距離を比較して、正しい距離を計算 + // 蜷御ク�縺ョline縺ォ蜷ォ縺セ繧後k閾ェ霄ォ縺ョ1縺、謇句燕縺ョ霍晞屬縺ィ閾ェ霄ォ縺ョ霍晞屬繧呈ッ碑シ�縺励※縲∵ュ」縺励>霍晞屬繧定ィ育ョ� for (List line : lines) { for (int i = 1; i < line.size(); i++) { mxCell cur = line.get(i); @@ -251,7 +251,7 @@ } } - // 階層構造を考慮したcellの距離を計算 + // 髫主ア、讒矩��繧定��諷ョ縺励◆cell縺ョ霍晞屬繧定ィ育ョ� for (mxCell r : roots) { for (mxCell c : hierarchicalRecursionOrder.get(r)) { mxCell p = (mxCell) graphModel.getParent(c); @@ -274,28 +274,28 @@ } } - // 1度も変更が無いとループを抜ける + // 1蠎ヲ繧ょ、画峩縺檎┌縺�縺ィ繝ォ繝シ繝励r謚懊¢繧� if (!isChanging) { break; } } } - // lineをソートする(ただし、実際にはlines内の要素の順番は入れ替えず、呼び出す順番を保存したorderを作成) + // line繧偵た繝シ繝医☆繧�(縺溘□縺励�∝ョ滄圀縺ォ縺ッlines蜀�縺ョ隕∫エ�縺ョ鬆�逡ェ縺ッ蜈・繧梧崛縺医★縲∝他縺ウ蜃コ縺咎��逡ェ繧剃ソ晏ュ倥@縺殪rder繧剃ス懈��) public void sortLines() { for (int i = 0; i < lines.size(); i++) { List line = lines.get(i); - // eventChannelからの出力先がrootである場合 + // eventChannel縺九i縺ョ蜃コ蜉帛�医′root縺ァ縺ゅk蝣エ蜷� if (roots.contains(line.get(1))) { for (mxCell c : line) { - addLine(c); // orderにlineのindexを格納する + addLine(c); // order縺ォline縺ョindex繧呈�シ邏阪☆繧� } } } } - // orderにlineのindexを格納する + // order縺ォline縺ョindex繧呈�シ邏阪☆繧� public void addLine(mxCell c) { if (cellToLineIndex.get(c) != null) { for (int i : cellToLineIndex.get(c)) { @@ -306,32 +306,32 @@ } } - // rootが属するlineのindexを格納した後、子孫が属するlineのindexを順次格納する + // root縺悟ア槭☆繧詰ine縺ョindex繧呈�シ邏阪@縺溷セ後�∝ュ仙ュォ縺悟ア槭☆繧詰ine縺ョindex繧帝��谺。譬シ邏阪☆繧� for (int i = 0; i < graphModel.getChildCount(c); i++) { mxCell child = (mxCell) graphModel.getChildAt(c, i); addLine(child); } } - // cellを配置する + // cell繧帝�咲スョ縺吶k public void layout1(mxCell s) { - /* cellの座標は、cellのparentの左上の座標を基準にxとyをどれだけずらすかで定義されている - よって計算の都合上、id=1 のcell(レイアウト画面)の左上を基準にした座標をcellGeoに保存しておく */ + /* cell縺ョ蠎ァ讓吶�ッ縲…ell縺ョparent縺ョ蟾ヲ荳翫�ョ蠎ァ讓吶r蝓コ貅悶↓x縺ィy繧偵←繧後□縺代★繧峨☆縺九〒螳夂セゥ縺輔l縺ヲ縺�繧� + 繧医▲縺ヲ險育ョ励�ョ驛ス蜷井ク翫�(d=1 縺ョcell(繝ャ繧、繧「繧ヲ繝育判髱「)縺ョ蟾ヲ荳翫r蝓コ貅悶↓縺励◆蠎ァ讓吶rcellGeo縺ォ菫晏ュ倥@縺ヲ縺翫¥ */ - Set movedSet = new HashSet<>(); // 配置済みのcellを管理 - Map> movedMap = new TreeMap<>(); // 配置済みのcellの距離ごとの配置順を管理 - Map distToMaxX = new HashMap<>(); // 距離ごとのcellの右端のx座標の最大値を管理 + Set movedSet = new HashSet<>(); // 驟咲スョ貂医∩縺ョcell繧堤ョ。逅� + Map> movedMap = new TreeMap<>(); // 驟咲スョ貂医∩縺ョcell縺ョ霍晞屬縺斐→縺ョ驟咲スョ鬆�繧堤ョ。逅� + Map distToMaxX = new HashMap<>(); // 霍晞屬縺斐→縺ョcell縺ョ蜿ウ遶ッ縺ョx蠎ァ讓吶�ョ譛�螟ァ蛟、繧堤ョ。逅� double maxY = 0; int maxD = 0; putCellGeo(s, 0, 0); - // 距離の最大値を求める + // 霍晞屬縺ョ譛�螟ァ蛟、繧呈アゅa繧� for (mxCell c : cells) { maxD = Math.max(maxD, vertexToDist.get(c).get(1)); } - // 初期化 + // 蛻晄悄蛹� distToMaxX.put(-1, 0.0); for (int d = 0; d <= maxD; d++) { movedMap.put(d, new ArrayList<>()); @@ -339,28 +339,28 @@ } for (int i : order) { - double centerY = -1; // 配置予定のy座標(中央) + double centerY = -1; // 驟咲スョ莠亥ョ壹�ョy蠎ァ讓�(荳ュ螟ョ) for (mxCell cur : lines.get(i)) { - // 既に配置済みならスキップ + // 譌「縺ォ驟咲スョ貂医∩縺ェ繧峨せ繧ュ繝�繝� if (movedSet.contains(cur)) { continue; } - int d = vertexToDist.get(cur).get(0); // curの距離 - double x = distToMaxX.get(d - 1) + MOVE_X; // 配置予定のx座標 - double endX = 0; // 配置したcellの右端のx座標 - double endY = 0; // 配置したcellの下端のy座標 + int d = vertexToDist.get(cur).get(0); // cur縺ョ霍晞屬 + double x = distToMaxX.get(d - 1) + MOVE_X; // 驟咲スョ莠亥ョ壹�ョx蠎ァ讓� + double endX = 0; // 驟咲スョ縺励◆cell縺ョ蜿ウ遶ッ縺ョx蠎ァ讓� + double endY = 0; // 驟咲スョ縺励◆cell縺ョ荳狗ォッ縺ョy蠎ァ讓� - // curがroot, channel, eventChannelに属するcellである場合 + // cur縺罫oot, channel, eventChannel縺ォ螻槭☆繧議ell縺ァ縺ゅk蝣エ蜷� if (roots.contains(cur) || channels.contains(cur) || eventChannels.contains(cur)) { if (centerY == -1) { centerY = maxY + MOVE_Y + cur.getGeometry().getHeight() / 2; } - double y = centerY - cur.getGeometry().getHeight() / 2; // 配置予定のy座標 + double y = centerY - cur.getGeometry().getHeight() / 2; // 驟咲スョ莠亥ョ壹�ョy蠎ァ讓� double ny = y; double nx = x; - // 予定している座標に配置すると他のリソース内部に配置されてしまう場合、下にずらす + // 莠亥ョ壹@縺ヲ縺�繧句コァ讓吶↓驟咲スョ縺吶k縺ィ莉悶�ョ繝ェ繧ス繝シ繧ケ蜀�驛ィ縺ォ驟咲スョ縺輔l縺ヲ縺励∪縺�蝣エ蜷医�∽ク九↓縺壹i縺� for (mxCell m : movedSet) { if (roots.contains(m) || channels.contains(m)) { if (cellOverlap(m.getGeometry().getX(), m.getGeometry().getY(), m.getGeometry().getWidth(), m.getGeometry().getHeight(), x, y, cur.getGeometry().getWidth(), cur.getGeometry().getHeight())) { @@ -369,7 +369,7 @@ } } - // 予定の座標に配置して、各種処理を行う + // 莠亥ョ壹�ョ蠎ァ讓吶↓驟咲スョ縺励※縲∝推遞ョ蜃ヲ逅�繧定。後≧ cur.getGeometry().setX(nx); cur.getGeometry().setY(ny); endX = nx + cur.getGeometry().getWidth(); @@ -378,26 +378,26 @@ addMoved(movedSet, movedMap, cur, d); graphModel.setGeometry(cur, (mxGeometry) cur.getGeometry().clone()); - // 距離がdの最大のx座標が更新される場合、既に配置済みのcellをそれに応じて右にずらす + // 霍晞屬縺慧縺ョ譛�螟ァ縺ョx蠎ァ讓吶′譖エ譁ー縺輔l繧句�エ蜷医�∵里縺ォ驟咲スョ貂医∩縺ョcell繧偵◎繧後↓蠢懊§縺ヲ蜿ウ縺ォ縺壹i縺� if (distToMaxX.get(d) < endX) { updateDistToMaxX(distToMaxX, movedSet, movedMap, d, maxD, endX); } - maxY = Math.max(maxY, endY); // 配置済みのcellの中での下端の座標の最大 + maxY = Math.max(maxY, endY); // 驟咲スョ貂医∩縺ョcell縺ョ荳ュ縺ァ縺ョ荳狗ォッ縺ョ蠎ァ讓吶�ョ譛�螟ァ - // rootの子孫をまとめて配置する + // root縺ョ蟄仙ュォ繧偵∪縺ィ繧√※驟咲スョ縺吶k for (mxCell c : hierarchicalRecursionOrder.get(cur)) { d = vertexToDist.get(c).get(0); - nx = x; // 配置予定のx座標 + nx = x; // 驟咲スョ莠亥ョ壹�ョx蠎ァ讓� mxCell parent = (mxCell) graphModel.getParent(c); - // 距離が親と等しい場合、親のx座標より少し大きくする + // 霍晞屬縺瑚ヲェ縺ィ遲峨@縺�蝣エ蜷医�∬ヲェ縺ョx蠎ァ讓吶h繧雁ー代@螟ァ縺阪¥縺吶k if (d == vertexToDist.get(parent).get(0)) { nx = cellGeo.get(parent).get("x") + MARGIN_WIDTH; } else { nx = distToMaxX.get(d - 1) + MOVE_X; } - // 重なってしまう兄弟リソースが存在する場合、下にずらす + // 驥阪↑縺」縺ヲ縺励∪縺�蜈�蠑溘Μ繧ス繝シ繧ケ縺悟ュ伜惠縺吶k蝣エ蜷医�∽ク九↓縺壹i縺� double brotherMaxY = MOVE_Y; for (int k = 0; k < graphModel.getChildCount(parent); k++) { mxCell child = (mxCell) graphModel.getChildAt(parent, k); @@ -410,7 +410,7 @@ } } - // 予定の座標に配置して、各種処理を行う + // 莠亥ョ壹�ョ蠎ァ讓吶↓驟咲スョ縺励※縲∝推遞ョ蜃ヲ逅�繧定。後≧ c.getGeometry().setX(nx - cellGeo.get(parent).get("x")); c.getGeometry().setY(brotherMaxY); graphModel.setGeometry(c, (mxGeometry) c.getGeometry().clone()); @@ -419,9 +419,9 @@ endX = cellGeo.get(c).get("x") + c.getGeometry().getWidth(); endY = cellGeo.get(c).get("y") + c.getGeometry().getHeight(); - endY = resize(parent, endX, endY); // 子孫が親の内部に含まれない場合、親の大きさを変更する + endY = resize(parent, endX, endY); // 蟄仙ュォ縺瑚ヲェ縺ョ蜀�驛ィ縺ォ蜷ォ縺セ繧後↑縺�蝣エ蜷医�∬ヲェ縺ョ螟ァ縺阪&繧貞、画峩縺吶k - // 距離がdの最大のx座標が更新される場合、既に配置済みのcellをそれに応じて右にずらす + // 霍晞屬縺慧縺ョ譛�螟ァ縺ョx蠎ァ讓吶′譖エ譁ー縺輔l繧句�エ蜷医�∵里縺ォ驟咲スョ貂医∩縺ョcell繧偵◎繧後↓蠢懊§縺ヲ蜿ウ縺ォ縺壹i縺� if (distToMaxX.get(d) < endX) { updateDistToMaxX(distToMaxX, movedSet, movedMap, d, maxD, endX); } @@ -431,13 +431,13 @@ } } - // 点線の辺が重なっている場合、右にずらす + // 轤ケ邱壹�ョ霎コ縺碁㍾縺ェ縺」縺ヲ縺�繧句�エ蜷医�∝承縺ォ縺壹i縺� for (mxCell c : resources) { for (mxCell cc : dotEdges.get(c)) { for (Map.Entry> entry : dotEdges.entrySet()) { mxCell u = entry.getKey(); for (mxCell v : entry.getValue()) { - // c-cc, u-vが同じdotEdgeを参照している場合 + // c-cc, u-v縺悟酔縺賄otEdge繧貞盾辣ァ縺励※縺�繧句�エ蜷� if ((c == u && cc == v) || (c == v && cc == u)) { continue; } @@ -460,7 +460,7 @@ } } - // eventChannelを出力先のy座標に揃える + // eventChannel繧貞�コ蜉帛�医�ョy蠎ァ讓吶↓謠�縺医k for (int i : order) { mxCell cur = lines.get(i).get(1); List ecs = new ArrayList<>(); @@ -493,7 +493,7 @@ } } - // eventChannelをy座標について昇順にソートする + // eventChannel繧馳蠎ァ讓吶↓縺、縺�縺ヲ譏�鬆�縺ォ繧ス繝シ繝医☆繧� List sortedEcs = new ArrayList<>(); Set usedEcs = new HashSet<>(); for (int i = 0; i < eventChannels.size(); i++) { @@ -512,7 +512,7 @@ usedEcs.add(minEc); } - // ソートの順番に応じて、重なっているeventChannelを下にずらす + // 繧ス繝シ繝医�ョ鬆�逡ェ縺ォ蠢懊§縺ヲ縲�驥阪↑縺」縺ヲ縺�繧菊ventChannel繧剃ク九↓縺壹i縺� for (int i = 1; i < sortedEcs.size(); i++) { mxCell cur = sortedEcs.get(i); mxCell pre = sortedEcs.get(i - 1); @@ -526,25 +526,25 @@ } } - // cellを配置する + // cell繧帝�咲スョ縺吶k public void layout2(mxCell s) { - /* cellの座標は、cellのparentの左上の座標を基準にxとyをどれだけずらすかで定義されている - よって計算の都合上、id=1 のcell(レイアウト画面)の左上を基準にした座標をcellGeoに保存しておく */ + /* cell縺ョ蠎ァ讓吶�ッ縲…ell縺ョparent縺ョ蟾ヲ荳翫�ョ蠎ァ讓吶r蝓コ貅悶↓x縺ィy繧偵←繧後□縺代★繧峨☆縺九〒螳夂セゥ縺輔l縺ヲ縺�繧� + 繧医▲縺ヲ險育ョ励�ョ驛ス蜷井ク翫�(d=1 縺ョcell(繝ャ繧、繧「繧ヲ繝育判髱「)縺ョ蟾ヲ荳翫r蝓コ貅悶↓縺励◆蠎ァ讓吶rcellGeo縺ォ菫晏ュ倥@縺ヲ縺翫¥ */ - Set movedSet = new HashSet<>(); // 配置済みのcellを管理 - Map> movedMap = new TreeMap<>(); // 配置済みのcellの距離ごとの配置順を管理 - Map distToMaxX = new HashMap<>(); // 距離ごとのcellの右端のx座標の最大値を管理 + Set movedSet = new HashSet<>(); // 驟咲スョ貂医∩縺ョcell繧堤ョ。逅� + Map> movedMap = new TreeMap<>(); // 驟咲スョ貂医∩縺ョcell縺ョ霍晞屬縺斐→縺ョ驟咲スョ鬆�繧堤ョ。逅� + Map distToMaxX = new HashMap<>(); // 霍晞屬縺斐→縺ョcell縺ョ蜿ウ遶ッ縺ョx蠎ァ讓吶�ョ譛�螟ァ蛟、繧堤ョ。逅� double maxY = 0; int maxD = 0; putCellGeo(s, 0, 0); - // 距離の最大値を求める + // 霍晞屬縺ョ譛�螟ァ蛟、繧呈アゅa繧� for (mxCell c : cells) { maxD = Math.max(maxD, vertexToDist.get(c).get(1)); } - // 初期化 + // 蛻晄悄蛹� distToMaxX.put(-1, 0.0); for (int d = 0; d <= maxD; d++) { movedMap.put(d, new ArrayList<>()); @@ -552,30 +552,30 @@ } for (int i : order) { - double centerY = -1; // 配置予定のy座標(中央) + double centerY = -1; // 驟咲スョ莠亥ョ壹�ョy蠎ァ讓�(荳ュ螟ョ) for (int j = 0; j < lines.get(i).size(); j++) { mxCell cur = lines.get(i).get(j); - // 既に配置済みならスキップ + // 譌「縺ォ驟咲スョ貂医∩縺ェ繧峨せ繧ュ繝�繝� if (movedSet.contains(cur)) { continue; } - int d = vertexToDist.get(cur).get(0); // curの距離 - double x = distToMaxX.get(d - 1) + MOVE_X; // 配置予定のx座標 - double endX = 0; // 配置したcellの右端のx座標 - double endY = 0; // 配置したcellの下端のy座標 + int d = vertexToDist.get(cur).get(0); // cur縺ョ霍晞屬 + double x = distToMaxX.get(d - 1) + MOVE_X; // 驟咲スョ莠亥ョ壹�ョx蠎ァ讓� + double endX = 0; // 驟咲スョ縺励◆cell縺ョ蜿ウ遶ッ縺ョx蠎ァ讓� + double endY = 0; // 驟咲スョ縺励◆cell縺ョ荳狗ォッ縺ョy蠎ァ讓� - // curがrootsとeventChannelに属するときのcellの配置 + // cur縺罫oots縺ィeventChannel縺ォ螻槭☆繧九→縺阪�ョcell縺ョ驟咲スョ if (roots.contains(cur) || eventChannels.contains(cur)) { if (centerY == -1) { centerY = maxY + MOVE_Y + cur.getGeometry().getHeight() / 2; } - double y = centerY - cur.getGeometry().getHeight() / 2; // 配置予定のy座標 + double y = centerY - cur.getGeometry().getHeight() / 2; // 驟咲スョ莠亥ョ壹�ョy蠎ァ讓� double ny = y; double nx = x; - // 予定の座標に配置して、各種処理を行う + // 莠亥ョ壹�ョ蠎ァ讓吶↓驟咲スョ縺励※縲∝推遞ョ蜃ヲ逅�繧定。後≧ cur.getGeometry().setX(nx); cur.getGeometry().setY(ny); endX = nx + cur.getGeometry().getWidth(); @@ -584,26 +584,26 @@ addMoved(movedSet, movedMap, cur, d); graphModel.setGeometry(cur, (mxGeometry) cur.getGeometry().clone()); - // 距離がdの最大のx座標が更新される場合、既に配置済みのcellをそれに応じて右にずらす + // 霍晞屬縺慧縺ョ譛�螟ァ縺ョx蠎ァ讓吶′譖エ譁ー縺輔l繧句�エ蜷医�∵里縺ォ驟咲スョ貂医∩縺ョcell繧偵◎繧後↓蠢懊§縺ヲ蜿ウ縺ォ縺壹i縺� if (distToMaxX.get(d) < endX) { updateDistToMaxX(distToMaxX, movedSet, movedMap, d, maxD, endX); } - maxY = Math.max(maxY, endY); // 配置済みのcellの中での下端の座標の最大 + maxY = Math.max(maxY, endY); // 驟咲スョ貂医∩縺ョcell縺ョ荳ュ縺ァ縺ョ荳狗ォッ縺ョ蠎ァ讓吶�ョ譛�螟ァ - // rootの子孫をまとめて配置する + // root縺ョ蟄仙ュォ繧偵∪縺ィ繧√※驟咲スョ縺吶k for (mxCell c : hierarchicalRecursionOrder.get(cur)) { d = vertexToDist.get(c).get(0); - nx = x; // 配置予定のx座標 + nx = x; // 驟咲スョ莠亥ョ壹�ョx蠎ァ讓� mxCell parent = (mxCell) graphModel.getParent(c); - // 距離が親と等しい場合、親のx座標より少し大きくする + // 霍晞屬縺瑚ヲェ縺ィ遲峨@縺�蝣エ蜷医�∬ヲェ縺ョx蠎ァ讓吶h繧雁ー代@螟ァ縺阪¥縺吶k if (d == vertexToDist.get(parent).get(0)) { nx = cellGeo.get(parent).get("x") + MARGIN_WIDTH; } else { nx = distToMaxX.get(d - 1) + MOVE_X; } - // 重なってしまう兄弟リソースが存在する場合、下にずらす + // 驥阪↑縺」縺ヲ縺励∪縺�蜈�蠑溘Μ繧ス繝シ繧ケ縺悟ュ伜惠縺吶k蝣エ蜷医�∽ク九↓縺壹i縺� double brotherMaxY = MOVE_Y; for (int k = 0; k < graphModel.getChildCount(parent); k++) { mxCell child = (mxCell) graphModel.getChildAt(parent, k); @@ -616,7 +616,7 @@ } } - // 予定の座標に配置して、各種処理を行う + // 莠亥ョ壹�ョ蠎ァ讓吶↓驟咲スョ縺励※縲∝推遞ョ蜃ヲ逅�繧定。後≧ c.getGeometry().setX(nx - cellGeo.get(parent).get("x")); c.getGeometry().setY(brotherMaxY); graphModel.setGeometry(c, (mxGeometry) c.getGeometry().clone()); @@ -625,17 +625,17 @@ endX = cellGeo.get(c).get("x") + c.getGeometry().getWidth(); endY = cellGeo.get(c).get("y") + c.getGeometry().getHeight(); - endY = resize(parent, endX, endY); // 子孫が親の内部に含まれない場合、親の大きさを変更する + endY = resize(parent, endX, endY); // 蟄仙ュォ縺瑚ヲェ縺ョ蜀�驛ィ縺ォ蜷ォ縺セ繧後↑縺�蝣エ蜷医�∬ヲェ縺ョ螟ァ縺阪&繧貞、画峩縺吶k - // 距離がdの最大のx座標が更新される場合、既に配置済みのcellをそれに応じて右にずらす + // 霍晞屬縺慧縺ョ譛�螟ァ縺ョx蠎ァ讓吶′譖エ譁ー縺輔l繧句�エ蜷医�∵里縺ォ驟咲スョ貂医∩縺ョcell繧偵◎繧後↓蠢懊§縺ヲ蜿ウ縺ォ縺壹i縺� if (distToMaxX.get(d) < endX) { updateDistToMaxX(distToMaxX, movedSet, movedMap, d, maxD, endX); } - maxY = Math.max(maxY, endY); // 配置済みのcellの中での下端の座標の最大 + maxY = Math.max(maxY, endY); // 驟咲スョ貂医∩縺ョcell縺ョ荳ュ縺ァ縺ョ荳狗ォッ縺ョ蠎ァ讓吶�ョ譛�螟ァ } } - // curがchannelに属するときのcellの配置 + // cur縺慶hannel縺ォ螻槭☆繧九→縺阪�ョcell縺ョ驟咲スョ if (channels.contains(cur)) { mxCell pre = lines.get(i).get(j - 1); centerY = cellGeo.get(pre).get("y") + pre.getGeometry().getHeight() / 2; @@ -649,16 +649,16 @@ addMoved(movedSet, movedMap, cur, d); graphModel.setGeometry(cur, (mxGeometry) cur.getGeometry().clone()); - // 距離がdの最大のx座標が更新される場合、既に配置済みのcellをそれに応じて右にずらす + // 霍晞屬縺慧縺ョ譛�螟ァ縺ョx蠎ァ讓吶′譖エ譁ー縺輔l繧句�エ蜷医�∵里縺ォ驟咲スョ貂医∩縺ョcell繧偵◎繧後↓蠢懊§縺ヲ蜿ウ縺ォ縺壹i縺� if (distToMaxX.get(d) < endX) { updateDistToMaxX(distToMaxX, movedSet, movedMap, d, maxD, endX); } - maxY = Math.max(maxY, endY); // 配置済みのcellの中での下端の座標の最大 + maxY = Math.max(maxY, endY); // 驟咲スョ貂医∩縺ョcell縺ョ荳ュ縺ァ縺ョ荳狗ォッ縺ョ蠎ァ讓吶�ョ譛�螟ァ } } } - // 点線の辺が重なっている場合、右にずらす + // 轤ケ邱壹�ョ霎コ縺碁㍾縺ェ縺」縺ヲ縺�繧句�エ蜷医�∝承縺ォ縺壹i縺� for (mxCell c : resources) { for (mxCell cc : dotEdges.get(c)) { for (Map.Entry> entry : dotEdges.entrySet()) { @@ -686,7 +686,7 @@ } } - // eventChannelを出力先のy座標に揃える + // eventChannel繧貞�コ蜉帛�医�ョy蠎ァ讓吶↓謠�縺医k for (int i : order) { mxCell cur = lines.get(i).get(1); List ecs = new ArrayList<>(); @@ -719,7 +719,7 @@ } } - // eventChannelをy座標について昇順にソートする + // eventChannel繧馳蠎ァ讓吶↓縺、縺�縺ヲ譏�鬆�縺ォ繧ス繝シ繝医☆繧� List sortedEcs = new ArrayList<>(); Set usedEcs = new HashSet<>(); for (int i = 0; i < eventChannels.size(); i++) { @@ -738,7 +738,7 @@ usedEcs.add(minEc); } - // ソートの順番に応じて、重なっているeventChannelを下にずらす + // 繧ス繝シ繝医�ョ鬆�逡ェ縺ォ蠢懊§縺ヲ縲�驥阪↑縺」縺ヲ縺�繧菊ventChannel繧剃ク九↓縺壹i縺� for (int i = 1; i < sortedEcs.size(); i++) { mxCell cur = sortedEcs.get(i); mxCell pre = sortedEcs.get(i - 1); @@ -752,20 +752,20 @@ } } - // cellの座標を登録 + // cell縺ョ蠎ァ讓吶r逋サ骭イ public void putCellGeo(mxCell c, double x, double y) { cellGeo.put(c, new HashMap<>()); cellGeo.get(c).put("x", x); cellGeo.get(c).put("y", y); } - // movedSet, movedMapに配置済みのcellを追加 + // movedSet, movedMap縺ォ驟咲スョ貂医∩縺ョcell繧定ソス蜉� public void addMoved(Set ms, Map> mm, mxCell c, int d) { ms.add(c); mm.get(d).add(c); } - // 2つの辺が重なっているか判定 + // 2縺、縺ョ霎コ縺碁㍾縺ェ縺」縺ヲ縺�繧九°蛻、螳� public boolean isStraightLine(double []u1, double []v1, double []u2, double []v2) { double gradient1 = 0; double length1 = Math.pow(u1[0] - v1[0], 2) + Math.pow(u1[1] - v1[1], 2); @@ -826,7 +826,7 @@ } } - // 2つのcellが重なっているか判定 + // 2縺、縺ョcell縺碁㍾縺ェ縺」縺ヲ縺�繧九°蛻、螳� public boolean cellOverlap(double ax, double ay, double aw, double ah, double bx, double by, double bw, double bh) { if (((ax <= bx) && (bx <= ax + aw)) || ((bx <= ax) && (ax <= bx + bw))) { if (((ay <= by) && (by <= ay + ah)) || ((by <= ay) && (ay <= by + bh))) { @@ -836,7 +836,7 @@ return false; } - // 深さがdのdistToMaxXに更新が入ると、深さがdより大きい配置済みのcellを右にずらす + // 豺ア縺輔′d縺ョdistToMaxX縺ォ譖エ譁ー縺悟�・繧九→縲∵キア縺輔′d繧医j螟ァ縺阪>驟咲スョ貂医∩縺ョcell繧貞承縺ォ縺壹i縺� public void updateDistToMaxX(Map distToMaxX, Set movedSet, Map> movedMap, int d, int md, double endX) { double preEndX = distToMaxX.get(d); distToMaxX.replace(d, endX); @@ -872,7 +872,7 @@ } } - // 子を覆うように親の大きさを変更 + // 蟄舌r隕�縺�繧医≧縺ォ隕ェ縺ョ螟ァ縺阪&繧貞、画峩 public double resize(mxCell ancestor, double endX, double endY) { while (true) { boolean isChanging = false; @@ -901,7 +901,7 @@ return endY; } - // x座標を変更 + // x蠎ァ讓吶r螟画峩 public void relocateX(mxCell c, double nx, double dx) { c.getGeometry().setX(nx - dx); graphModel.setGeometry(c, (mxGeometry) c.getGeometry().clone());