亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sugiyamalayoutalgorithm.java

?? Java編譯osworkflow工作流系統的安裝和源代碼
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
      for(int i = levels.size() - 1; i >= 0; i--)      {        movementsCurrentLoop += moveToBarycenter(jgraph, levels, i);      }      if(verbose)      {        System.out.println("----------------Grid Pos after bottom up"/*#Frozen*/);        displayGridPositions(levels);        //displayDownPriorities();        System.out.println("======================================="/*#Frozen*/);      }      this.updateProgress4Movements();    }  }  protected int moveToBarycenter(JGraph jgraph, List levels, int levelIndex)  {    // Counter for the movements    int movements = 0;    // Get the current level    List currentLevel = (List)levels.get(levelIndex);    GraphModel model = jgraph.getModel();    for(int currentIndexInTheLevel = 0; currentIndexInTheLevel < currentLevel.size(); currentIndexInTheLevel++)    {      CellWrapper sourceWrapper = (CellWrapper)currentLevel.get(currentIndexInTheLevel);      float gridPositionsSum = 0;      float countNodes = 0;      VertexView vertexView = sourceWrapper.getVertexView();      Object vertex = vertexView.getCell();      int portCount = model.getChildCount(vertex);      for(int i = 0; i < portCount; i++)      {        Object port = model.getChild(vertex, i);        Iterator edges = model.edges(port);        while(edges.hasNext())        {          Object edge = edges.next();          // if it is a forward edge follow it          Object neighborPort = null;          if(port == model.getSource(edge))          {            neighborPort = model.getTarget(edge);          }          else          {            if(port == model.getTarget(edge))            {              neighborPort = model.getSource(edge);            }            else            {              continue;            }          }          Object neighborVertex = model.getParent(neighborPort);          VertexView neighborVertexView = (VertexView)jgraph.getGraphLayoutCache().getMapping(neighborVertex, false);          CellWrapper targetWrapper = (CellWrapper)neighborVertexView.getAttributes().get(SUGIYAMA_CELL_WRAPPER);          if(targetWrapper == sourceWrapper)            continue;          if(targetWrapper == null || targetWrapper.getLevel() == levelIndex)            continue;          gridPositionsSum += targetWrapper.getGridPosition();          countNodes++;        }      }      //----------------------------------------------------------      // move node to new x coord      //----------------------------------------------------------      if(countNodes > 0)      {        float tmp = (gridPositionsSum / countNodes);        int newGridPosition = Math.round(tmp);        boolean toRight = (newGridPosition > sourceWrapper.getGridPosition());        boolean moved = true;        while(newGridPosition != sourceWrapper.getGridPosition() && moved)        {          int tmpGridPos = sourceWrapper.getGridPosition();          moved = move(toRight, currentLevel, currentIndexInTheLevel, sourceWrapper.getPriority());          if(moved)            movements++;          if(verbose)          {            System.out.print("try move at Level " + levelIndex + " with index " + currentIndexInTheLevel + " to " + (toRight ? "Right" : "Left") + " CurrentGridPos: " + tmpGridPos + " NewGridPos: " + newGridPosition + " exact: " + NumberFormat.getInstance().format(tmp) + "..."/*#Frozen*/);            System.out.println(moved ? "success"/*#Frozen*/ : "can't move"/*#Frozen*/);          }        }      }    }    return movements;  }  /**@param  toRight <tt>true</tt> = try to move the currentWrapper to right; <tt>false</tt> = try to move the currentWrapper to left;   * @param  currentLevel List which contains the CellWrappers for the current level   * @param  currentIndexInTheLevel   * @param  currentPriority   *   * @return The free GridPosition or -1 is position is not free.   */  protected boolean move(boolean toRight, List currentLevel, int currentIndexInTheLevel, int currentPriority)  {    CellWrapper currentWrapper = (CellWrapper)currentLevel.get(currentIndexInTheLevel);    boolean moved = false;    int neighborIndexInTheLevel = currentIndexInTheLevel + (toRight ? 1 : -1);    int newGridPosition = currentWrapper.getGridPosition() + (toRight ? 1 : -1);    // is the grid position possible?    if(0 > newGridPosition || newGridPosition >= gridAreaSize)    {      return false;    }    // if the node is the first or the last we can move    if(toRight && currentIndexInTheLevel == currentLevel.size() - 1 || !toRight && currentIndexInTheLevel == 0)    {      moved = true;    }    else    {      // else get the neighbor and ask his gridposition      // if he has the requested new grid position      // check the priority      CellWrapper neighborWrapper = (CellWrapper)currentLevel.get(neighborIndexInTheLevel);      int neighborPriority = neighborWrapper.getPriority();      if(neighborWrapper.getGridPosition() == newGridPosition)      {        if(neighborPriority >= currentPriority)        {          return false;        }        else        {          moved = move(toRight, currentLevel, neighborIndexInTheLevel, currentPriority);        }      }      else      {        moved = true;      }    }    if(moved)    {      currentWrapper.setGridPosition(newGridPosition);    }    return moved;  }  /** This Method draws the graph. For the horizontal position   *  we are using the grid position from each graphcell.   *  For the vertical position we are using the level position.   *   */  protected void drawGraph(JGraph jgraph, List levels, Point min, Point spacing)  {    // paint the graph    Map viewMap = new HashMap();    for(int rowCellCount = 0; rowCellCount < levels.size(); rowCellCount++)    {      List level = (List)levels.get(rowCellCount);      for(int colCellCount = 0; colCellCount < level.size(); colCellCount++)      {        CellWrapper wrapper = (CellWrapper)level.get(colCellCount);        VertexView view = wrapper.vertexView;        // remove the temp objects        /* While the Algorithm is running we are putting some         *  attributeNames to the MyGraphCells. This method         *  cleans this objects from the MyGraphCells.         *         */        view.getAttributes().remove(SUGIYAMA_CELL_WRAPPER);        view.getAttributes().remove(SUGIYAMA_VISITED);        wrapper.vertexView = null;        // get the bounds from the cellView        Rectangle bounds = (Rectangle)view.getBounds().clone();        // adjust        bounds.x = min.x + spacing.x * wrapper.getGridPosition();        bounds.y = min.y + spacing.y * rowCellCount;        Object cell = view.getCell();        Map map = new AttributeMap();        GraphConstants.setBounds(map, bounds);        viewMap.put(cell, map);      }    }    jgraph.getGraphLayoutCache().edit(viewMap, null, null, null);  }  /** cell wrapper contains all values   *  for one node   */  class CellWrapper implements Comparable  {    /** sum value for edge Crosses     */    private double edgeCrossesIndicator = 0;    /** counter for additions to the edgeCrossesIndicator     */    private int additions = 0;    /** the vertical level where the cell wrapper is inserted     */    int level = 0;    /** current position in the grid     */    int gridPosition = 0;    /** priority for movements to the barycenter     */    int priority = 0;    /** reference to the wrapped cell     */    VertexView vertexView = null;    /** creates an instance and memorizes the parameters     *     */    CellWrapper(int level, double edgeCrossesIndicator, VertexView vertexView)    {      this.level = level;      this.edgeCrossesIndicator = edgeCrossesIndicator;      this.vertexView = vertexView;      additions++;    }    /** returns the wrapped cell     */    VertexView getVertexView()    {      return vertexView;    }    /** resets the indicator for edge crosses to 0     */    void resetEdgeCrossesIndicator()    {      edgeCrossesIndicator = 0;      additions = 0;    }    /** retruns the average value for the edge crosses indicator     *     *  for the wrapped cell     *     */    double getEdgeCrossesIndicator()    {      if(additions == 0)        return 0;      return edgeCrossesIndicator / additions;    }    /** Addes a value to the edge crosses indicator     *  for the wrapped cell     *     */    void addToEdgeCrossesIndicator(double addValue)    {      edgeCrossesIndicator += addValue;      additions++;    }    /** gets the level of the wrapped cell     */    int getLevel()    {      return level;    }    /** gets the grid position for the wrapped cell     */    int getGridPosition()    {      return gridPosition;    }    /** Sets the grid position for the wrapped cell     */    void setGridPosition(int pos)    {      this.gridPosition = pos;    }    /** increments the the priority of this cell wrapper.     *     *  The priority was used by moving the cell to its     *  barycenter.     *     */    void incrementPriority()    {      priority++;    }    /** returns the priority of this cell wrapper.     *     *  The priority was used by moving the cell to its     *  barycenter.     */    int getPriority()    {      return priority;    }    /**     * @see java.lang.Comparable#compareTo(Object)     */    public int compareTo(Object compare)    {      if(((CellWrapper)compare).getEdgeCrossesIndicator() == this.getEdgeCrossesIndicator())        return 0;      double compareValue = (((CellWrapper)compare).getEdgeCrossesIndicator() - this.getEdgeCrossesIndicator());      return (int)(compareValue * 1000);    }  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲美州欧州综合国| 精品福利av导航| 久久99国内精品| 洋洋成人永久网站入口| 久久综合五月天婷婷伊人| 欧美又粗又大又爽| 日本高清不卡视频| 国产一区二区三区四| 日韩高清一区二区| 一区二区三区免费| 国产精品素人视频| 久久精品一区二区三区不卡| 欧美欧美欧美欧美| 在线免费视频一区二区| av男人天堂一区| 国产不卡视频一区| 国产一区二区久久| 精品影视av免费| 奇米综合一区二区三区精品视频| 一区二区三区精品视频| 国产精品精品国产色婷婷| 久久综合九色综合久久久精品综合 | 国产xxx精品视频大全| 青青草原综合久久大伊人精品优势| 一区二区欧美国产| 亚洲视频一区在线观看| 国产精品三级av| 国产精品天干天干在线综合| 久久久久综合网| 久久免费精品国产久精品久久久久| 欧美高清视频一二三区| 欧美日韩一区二区三区在线| 欧美日韩精品一区二区三区蜜桃| 色天天综合色天天久久| 色丁香久综合在线久综合在线观看| fc2成人免费人成在线观看播放| 国产99久久久久久免费看农村| 国产成人日日夜夜| 丁香婷婷综合网| 91在线视频播放地址| 97超碰欧美中文字幕| 日本国产一区二区| 欧洲色大大久久| 9191成人精品久久| 欧美成人精品1314www| 精品福利一二区| 久久久久久一级片| 国产精品家庭影院| 亚洲午夜私人影院| 奇米精品一区二区三区在线观看| 精品一区二区综合| 国产成人亚洲综合a∨猫咪| 成人少妇影院yyyy| 色老汉一区二区三区| 欧美高清精品3d| 久久色在线视频| 亚洲视频1区2区| 手机精品视频在线观看| 老司机精品视频在线| 成人综合婷婷国产精品久久免费| 成人国产在线观看| 欧美在线免费视屏| 欧美一级在线观看| 日本一区二区不卡视频| 亚洲精选一二三| 久久国产精品第一页| caoporen国产精品视频| 欧美日韩一区二区电影| 2024国产精品| 亚洲男人天堂一区| 久久国产精品第一页| 亚洲国产成人私人影院tom| 亚洲另类色综合网站| 亚洲国产精品精华液网站| 激情六月婷婷久久| 91在线免费看| 欧美一区二区三区成人| 亚洲国产电影在线观看| 亚洲1区2区3区视频| 成人综合婷婷国产精品久久蜜臀 | 欧美v日韩v国产v| 国产精品美女久久久久久| 天天色综合天天| 成人精品国产福利| 日韩欧美国产一区在线观看| 综合精品久久久| 国产专区欧美精品| 在线观看成人小视频| 久久综合久久鬼色| 午夜一区二区三区视频| 成人高清免费观看| 日韩欧美中文一区二区| 亚洲精品乱码久久久久久久久 | 欧美中文字幕不卡| 久久精品一区二区三区不卡牛牛| 亚洲第四色夜色| 99麻豆久久久国产精品免费优播| 欧美第一区第二区| 亚洲成va人在线观看| 春色校园综合激情亚洲| 日韩欧美亚洲国产另类| 一区二区三区日本| 成人免费黄色在线| 精品粉嫩超白一线天av| 午夜电影一区二区三区| 色噜噜夜夜夜综合网| 中文字幕久久午夜不卡| 国产一区二区伦理片| 欧美一二区视频| 亚洲成av人片在线| 日本精品视频一区二区| 国产精品九色蝌蚪自拍| 国产成人综合视频| 久久免费看少妇高潮| 久久国产综合精品| 日韩欧美亚洲另类制服综合在线| 香蕉影视欧美成人| 欧美日韩精品欧美日韩精品一综合 | 精品久久久久久无| 日韩成人午夜电影| 4438x成人网最大色成网站| 亚洲成av人片在线观看| 欧美在线影院一区二区| 日韩一区中文字幕| 99久久精品费精品国产一区二区| 欧美激情一区二区三区不卡| 国产成人在线视频网站| 久久久久久久精| 粉嫩绯色av一区二区在线观看 | 欧美国产乱子伦| 国产精品一区二区三区四区| 2021国产精品久久精品| 免费久久99精品国产| 日韩免费观看高清完整版在线观看| 日韩中文字幕亚洲一区二区va在线| 欧美揉bbbbb揉bbbbb| 亚洲123区在线观看| 91精品国产高清一区二区三区蜜臀| 亚洲v日本v欧美v久久精品| 欧美久久久一区| 蜜臀av一级做a爰片久久| 精品处破学生在线二十三| 激情综合网天天干| 中文字幕免费观看一区| 99re成人精品视频| 一区二区三区日韩欧美| 3d成人h动漫网站入口| 黄页网站大全一区二区| 久久精品男人天堂av| 成人h精品动漫一区二区三区| 中文字幕一区二区三中文字幕| 色天使色偷偷av一区二区| 洋洋成人永久网站入口| 日韩一区二区在线观看| 国产一区二区主播在线| 国产精品美女久久久久久| 在线观看免费成人| 日本成人在线一区| 国产午夜一区二区三区| 91在线看国产| 日韩激情一二三区| 久久久久久久久97黄色工厂| 91麻豆国产在线观看| 日韩精品亚洲一区二区三区免费| 久久五月婷婷丁香社区| 91最新地址在线播放| 欧美一区二区二区| 蜜臀av在线播放一区二区三区| 精品剧情v国产在线观看在线| 国产一区二区0| 亚洲精品国产a| 欧美激情一区二区三区蜜桃视频| 日韩va欧美va亚洲va久久| 天堂av在线一区| 久久久国产午夜精品| 欧美性一级生活| 国产美女精品在线| 一区二区三区在线观看动漫| 日韩午夜电影在线观看| 成人99免费视频| 日本v片在线高清不卡在线观看| 国产欧美精品一区二区色综合朱莉 | 4438x成人网最大色成网站| 国产高清久久久| 视频一区免费在线观看| 日本一区二区高清| 欧美一级免费观看| 色综合久久久网| 国产精品白丝jk白祙喷水网站 | 亚洲123区在线观看| 久久精品网站免费观看| 欧美精品免费视频| 91免费在线视频观看| 国内精品嫩模私拍在线| 五月天久久比比资源色| 国产精品传媒在线| 久久精品人人做人人综合| 日韩美一区二区三区| 欧美日韩亚洲综合一区二区三区| 成人精品亚洲人成在线|