簡體   English   中英

色標中的邊緣

[英]Colour Code an edge in JUNG

我正在嘗試根據收到的數據使用JUNG生成動態圖。 我希望邊緣自動進行顏色編碼,而不是基於任何條件。 我正在嘗試使用此代碼,但這也失敗了:

Transformer<String, Paint> edgePaint = new Transformer<String, Paint>() 
    {
        private final Color[] palette = {Color.GREEN, Color.YELLOW, Color.RED, Color.GRAY, Color.BLUE, Color.CYAN, Color.WHITE, Color.orange};
        int i=0;
        @Override
        public Paint transform(String graphEdge) 
        {
            if(i == 7)
            {
                i = 0;
            }
            else
            {
                i = i + 1;
            }
            return palette[i];

        }
    };
    viewer.getRenderContext().setEdgeDrawPaintTransformer(edgePaint);

我的邊緣是字符串,並且無法預料要設置條件。 每個邊緣都需要一種顏色,並且當我放大和縮小時,它不應改變。 這可能嗎 ?

(1)如果您確實只想按順序分配顏色,然后將其環繞在列表中(例如RGBRGBRG ...),則可以定義一個Map,然后隨意填充它(例如,遍歷邊緣並分配每個顏色)。 然后讓變形金剛剛回來

edgeColor.get(graphEdge)

(2)如果您不太在乎顏色的使用順序,或者偶爾出現重復,則可以獲取邊緣的hashCode,將其修改為顏色列表的長度,然后返回:

palette[graphEdge.hashCode() % palette.length];

這是對邊數進行近似估計時的示例答案:

同樣,這避免了將相同的顏色分配給多個邊緣。

  Transformer<String, Paint> edgePaint = new Transformer<String, Paint>() 
    {
        private final Color[] palette = {Color.GREEN, Color.YELLOW, Color.RED, Color.GRAY, Color.BLUE, Color.CYAN, Color.WHITE, Color.ORANGE};
        int[] boolFlag = new int[palette.length];

        @Override
        public Paint transform(String graphEdge) 
        {
            int colorNumber = Math.abs(graphEdge.hashCode() % palette.length);
            if(boolFlag[colorNumber] != 1)
            {
                boolFlag[colorNumber] = 1;
                return palette[colorNumber];
            }

            else
            {
                int i=0;
                for(i=0; i < palette.length; i++)
                    if(boolFlag[i] != 1)
                    {
                        colorNumber = i;
                        break;
                    }
                if( i == palette.length)
                {
                    for(i=0; i< palette.length; i++)
                        boolFlag[i] =0;
                }
                boolFlag[colorNumber] = 1;
                return palette[colorNumber];
            }
        }
    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM