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

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

?? textshapedecoration.java

?? openmap java寫的開源數字地圖程序. 用applet實現,可以像google map 那樣放大縮小地圖.
?? JAVA
字號:
package com.bbn.openmap.omGraphics.awt;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.geom.AffineTransform;import java.awt.geom.Point2D;import java.awt.image.BufferedImage;import java.util.LinkedList;/** * A ShapeDecoration that draws a text along a path *  * @author Eric LEPICIER * @version 16 ao鹴 2002 */public class TextShapeDecoration extends AbstractShapeDecoration {    private String text;    private Font font = null;    private int verticalAlignment = BASELINE;    /** Baseline vertical alignment */    public final static int BASELINE = 1;    /** Center vertical alignment */    public final static int CENTER = 2;    /** Top vertical alignment */    public final static int TOP = 3;    /** Bottom vertical alignment */    public final static int BOTTOM = 4;    /** Orientation for the shape text decoration: use poly direction */    public final static int FORWARD = LEFT;    /**     * Orientation for the shape text decoration: use reverse poly     * direction     */    public final static int BACKWARD = RIGHT;    /** Orientation for the shape text decoration: force left to right */    public final static int LEFT_TO_RIGHT = 3;    /** Orientation for the shape text decoration: force right to left */    public final static int RIGHT_TO_LEFT = 4;    /** Orientation for the shape text decoration: force top to bottom */    public final static int TOP_TO_BOTTOM = 5;    /** Orientation for the shape text decoration: force bottom to top */    public final static int BOTTOM_TO_TOP = 6;    /**     * Orientation for the shape text decoration: occidental reading     * use     */    public final static int MOST_READABLE = 7;    /**     * Text will follow the poly instead of being written on the     * segment from begin to end of the poly, also allow text to be     * uncomplete. You may add this one to the other constants     */    public final static int FOLLOW_POLY = 16;    private transient FontMetrics metrics;    private transient Graphics2D g2D = null;    /**     * Constructor.     *      * @param text     * @param font     * @param orientation     * @param verticalAlignment     */    public TextShapeDecoration(String text, Font font, int orientation,            int verticalAlignment) {        super(0.0f, 0.0f, orientation);        setVerticalAlignment(verticalAlignment);        setFont(font);        setText(text);        initMetrics();    }    /**     * Constructor.     *      * @param text     */    public TextShapeDecoration(String text) {        super(0.0f, 0.0f, FORWARD);        setVerticalAlignment(BASELINE);        setText(text);        initMetrics();    }    /**     * init Metrics used to get string graphic length.     *      * @param object     */    private void initMetrics() {        if (g2D == null)            g2D = (Graphics2D) new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB).getGraphics();        if (font == null)            font = g2D.getFont();        metrics = g2D.getFontMetrics(font);    }    /**     * Draws the text along the polyline     *      * @see com.bbn.openmap.omGraphics.awt.ShapeDecoration#draw(Graphics,     *      Point2D[], boolean)     */    public void draw(Graphics g, Point2D[] points, boolean complete) {        g2D = (Graphics2D) g;        initMetrics();        g.setFont(font);        int x1 = (int) points[0].getX();        int y1 = (int) points[0].getY();        int x2 = (int) points[points.length - 1].getX();        int y2 = (int) points[points.length - 1].getY();        boolean reverse = needToReverse(x1, y1, x2, y2);        // draw the text exactly on the curve, even uncomplete        if ((getOrientation() & FOLLOW_POLY) > 0) {            drawFollow(g, points, reverse);            return;        }        // if there's not enough room, do nothing        if (!complete)            return;        // else plot the text straight on the half segment        // from start to end point and away        int x, y;        double angle;        if (reverse) {            x = x2;            y = y2;            angle = Math.atan2(y1 - y2, x1 - x2);        } else {            x = x1;            y = y1;            angle = Math.atan2(y2 - y1, x2 - x1);        }        // adjust vertical alignment        switch (verticalAlignment) {        case TOP:            y += metrics.getAscent();            break;        case BOTTOM:            y -= metrics.getDescent();            break;        case CENTER:            y += metrics.getAscent() - (metrics.getHeight()) / 2;            break;        case BASELINE:            break;        }        drawAngledString(g, text, x, y, angle);    }    /**     * Returns true if the polyline need to be reverted for the text     * to be drawn with the specified orientation.     *      * @param x1 starting point x coordinate     * @param y1 starting point y coordinate     * @param x2 ending point x coordinate     * @param y2 ending point y coordinate     * @return boolean     */    protected boolean needToReverse(int x1, int y1, int x2, int y2) {        boolean reverse = false;        switch (getOrientation() & ~FOLLOW_POLY) {        case FORWARD:            break;        case BACKWARD:            reverse = true;            break;        case LEFT_TO_RIGHT:            reverse = x1 > x2;            break;        case RIGHT_TO_LEFT:            reverse = x1 < x2;            break;        case TOP_TO_BOTTOM:            reverse = y1 > y2;            break;        case BOTTOM_TO_TOP:            reverse = y1 < y2;            break;        case MOST_READABLE:            reverse = x2 < x1 || y1 > y2;            break;        }        return reverse;    }    /**     * Draws the text character per character to follow the polyline     *      * @param g     * @param pts     * @param reverse     */    protected void drawFollow(Graphics g, Point2D[] pts, boolean reverse) {        LinkedList points = new LinkedList();        if (reverse) {            for (int i = pts.length - 1; i >= 0; i--)                points.add(pts[i]);        } else {            for (int i = 0; i < pts.length; i++)                points.add(pts[i]);        }        LinkedList polysegment = new LinkedList();        int l, x1, y1, x2, y2;        String c;        Point2D p1, p2;        double angle;        for (int i = 0; i < text.length(); i++) {            c = text.substring(i, i + 1);            l = metrics.stringWidth(c);            if (points.size() == 0)                break;            LineUtil.retrievePoints(l, points, polysegment);            p1 = (Point2D) polysegment.getFirst();            x1 = (int) p1.getX();            y1 = (int) p1.getY();            p2 = (Point2D) polysegment.getLast();            x2 = (int) p2.getX();            y2 = (int) p2.getY();            angle = Math.atan2(y2 - y1, x2 - x1);            drawAngledString(g, c, x1, y1, angle);        }    }    /**     * Draws the text from a starting point with an angle     *      * @param g     * @param text     * @param x     * @param y     * @param angle     */    public static void drawAngledString(Graphics g, String text, int x, int y,                                        double angle) {        Graphics2D g2D = (Graphics2D) g;        AffineTransform oldAt = g2D.getTransform();        AffineTransform at = new AffineTransform(oldAt);        at.rotate(angle, x, y);        g2D.setTransform(at);        g2D.drawString(text, x, y);        g2D.setTransform(oldAt);    }    /**     * Returns the font.     *      * @return Font     */    public Font getFont() {        return font;    }    /**     * Returns the text.     *      * @return String     */    public String getText() {        return text;    }    /**     * Sets the font.     *      * @param font The font to set     */    public void setFont(Font font) {        this.font = font;        initMetrics();    }    /**     * Sets the text.     *      * @param text The text to set     */    public void setText(String text) {        this.text = text;        initMetrics();        setLength(metrics.stringWidth(text));        setWidth(metrics.getHeight());    }    /**     * Returns the verticalAlignment.     *      * @return int     */    public int getVerticalAlignment() {        return verticalAlignment;    }    /**     * Sets the verticalAlignment.     *      * @param verticalAlignment The verticalAlignment to set (TOP,     *        CENTER, BASELINE, BOTTOM)     */    public void setVerticalAlignment(int verticalAlignment) {        this.verticalAlignment = verticalAlignment;    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区成人| 欧美日韩免费观看一区三区| 精品亚洲porn| 蜜桃精品视频在线观看| 日韩成人一区二区三区在线观看| 亚洲午夜激情网页| 亚洲女与黑人做爰| 欧美日韩精品欧美日韩精品| 在线一区二区三区四区五区| 91国模大尺度私拍在线视频| 色8久久人人97超碰香蕉987| 欧美做爰猛烈大尺度电影无法无天| 日本韩国一区二区| 欧洲精品一区二区| 欧美精品 国产精品| 欧美另类videos死尸| 欧美一卡2卡3卡4卡| 欧美大胆人体bbbb| 久久久久久久久久久久久夜| 国产亲近乱来精品视频| 国产精品久久久久久久第一福利| 专区另类欧美日韩| 亚洲国产欧美另类丝袜| 奇米影视一区二区三区小说| 久久99久久精品| 懂色av中文字幕一区二区三区| 成人福利电影精品一区二区在线观看| 99精品视频中文字幕| 欧美性猛交xxxx黑人交| 亚洲天堂av一区| 一区二区三区四区视频精品免费| 亚洲妇女屁股眼交7| 免播放器亚洲一区| 国产成人午夜视频| 99久久婷婷国产精品综合| 欧美三级日韩三级| 精品国精品国产尤物美女| 国产精品三级在线观看| 亚洲午夜精品久久久久久久久| 久久99精品久久久久久久久久久久| 夫妻av一区二区| 欧美在线小视频| 久久亚洲精精品中文字幕早川悠里| 欧美激情一区在线观看| 亚洲福利一区二区| 粉嫩av一区二区三区| 欧日韩精品视频| 国产偷v国产偷v亚洲高清| 亚洲乱码国产乱码精品精98午夜 | 91麻豆精品国产自产在线| 精品欧美一区二区久久 | 国产精品一区二区三区乱码| 色综合久久久久久久久久久| 欧美一区二区三区性视频| 国产精品久久久久久久浪潮网站| 丝袜亚洲另类欧美| 国产不卡免费视频| 在线不卡一区二区| 国产精品乱人伦中文| 青青草国产精品97视觉盛宴| 99久久伊人网影院| 精品国产免费一区二区三区四区| 亚洲免费视频中文字幕| 国产一区二区影院| 欧美日韩黄色影视| 国产精品国产馆在线真实露脸| 青青草原综合久久大伊人精品优势| 成人av中文字幕| 精品动漫一区二区三区在线观看| 亚洲线精品一区二区三区八戒| 国产精品91一区二区| 欧美一区二区三区免费在线看| 亚洲色图另类专区| 国产成人av电影在线播放| 欧美一区二区福利视频| 亚洲综合视频在线观看| 成人黄色电影在线| 久久男人中文字幕资源站| 日本午夜精品一区二区三区电影 | 久久久久久影视| 蜜臀av一级做a爰片久久| 91九色02白丝porn| 国产精品久久久一区麻豆最新章节| 男人的j进女人的j一区| 欧美日韩aaaaa| 一区二区日韩av| 99久久久久久99| 国产精品丝袜一区| 国产精品99久久不卡二区| 精品国产伦一区二区三区观看体验| 偷拍日韩校园综合在线| 欧洲亚洲国产日韩| 亚洲精品国久久99热| 91在线高清观看| 国产精品网站在线| 国产aⅴ综合色| 国产日韩三级在线| 国产伦精一区二区三区| 久久午夜色播影院免费高清| 狠狠色狠狠色综合| 精品国产欧美一区二区| 国产一区二区0| 久久久不卡网国产精品一区| 国产精品1区2区3区在线观看| 日韩精品一区二区三区在线| 捆绑调教美女网站视频一区| 日韩免费性生活视频播放| 麻豆成人av在线| 日韩免费一区二区三区在线播放| 久久草av在线| 久久久噜噜噜久久人人看 | 粉嫩在线一区二区三区视频| 久久久欧美精品sm网站| 国产成人精品免费一区二区| 国产拍揄自揄精品视频麻豆| 成人午夜视频福利| 亚洲欧洲精品一区二区精品久久久 | 亚洲一区成人在线| 欧美精品1区2区| 久久er精品视频| 国产欧美一区二区三区鸳鸯浴| 成人开心网精品视频| 亚洲天堂成人在线观看| 欧美网站一区二区| 久久99精品视频| 国产精品久久久久久久久久久免费看 | 99精品国产热久久91蜜凸| 亚洲精品美腿丝袜| 欧美丰满一区二区免费视频 | 欧美色图激情小说| 青青草原综合久久大伊人精品| www国产亚洲精品久久麻豆| 国产成+人+日韩+欧美+亚洲| 国产精品久久影院| 欧美三区在线视频| 麻豆国产欧美日韩综合精品二区| 久久免费视频色| av福利精品导航| 亚洲二区在线观看| 亚洲精品在线三区| www.在线成人| 亚洲bt欧美bt精品| 日韩精品最新网址| 成人性生交大片免费看视频在线| 亚洲综合久久av| 日韩欧美不卡一区| 成人一区二区三区中文字幕| 亚洲午夜精品久久久久久久久| 日韩免费高清av| av中文字幕在线不卡| 亚洲自拍偷拍综合| 日韩欧美激情在线| 99精品国产99久久久久久白柏| 天天综合日日夜夜精品| 久久精品一区二区三区不卡| 色香蕉久久蜜桃| 日韩制服丝袜先锋影音| 久久久久久99精品| 欧美日韩国产三级| 国产精品99久久久久| 午夜精品久久久久久| 国产精品色哟哟| 91超碰这里只有精品国产| 国产91精品一区二区麻豆网站 | 91亚洲精品久久久蜜桃| 五月天国产精品| 欧美高清在线一区| 欧美老肥妇做.爰bbww| 国产+成+人+亚洲欧洲自线| 亚洲国产日韩一级| 337p日本欧洲亚洲大胆色噜噜| 色综合久久中文字幕| 国产精品一二三区在线| 亚洲mv大片欧洲mv大片精品| 国产片一区二区| 精品久久人人做人人爽| 91福利区一区二区三区| 国产成人综合在线播放| 日韩av电影天堂| 亚洲另类一区二区| 中日韩av电影| 欧美一区二区三区四区久久 | 91精品国产综合久久精品麻豆| 99在线精品一区二区三区| 六月婷婷色综合| 亚洲午夜久久久久| 一区二区成人在线| 国产精品午夜电影| 久久精品亚洲国产奇米99| 欧美精品三级在线观看| 色综合久久精品| 国产91富婆露脸刺激对白| 国产一区二区三区免费看| 天天综合天天综合色| 亚洲欧美一区二区三区孕妇| 欧美国产在线观看| 久久先锋影音av鲁色资源网| 欧美精品一区男女天堂| 777xxx欧美| 欧美理论在线播放|