美文网首页
IGV改动demo

IGV改动demo

作者: byejya | 来源:发表于2020-10-03 22:54 被阅读0次

    先复现画箭头的

    再用translate方法变形

    1.试验drawPolygon方法:

    3

    可见,画法是从给的点123->1封闭连接。

    因此,如果箭头在左,需要

    1 2

    和最上面的xpoly一样。

    尝试:

    2

    之前因为没搞对连接顺序而画的乱七八糟。因此需要注意的是drawPolygon是根据给出的xy每个点从头到尾依次封闭连接。它相当于每步只把前后两个点连接成线。

    接下来尝试affinetransform,将直线扭曲成曲线。

    3 4

    改动lw即可按像素缩放宽度。每个值/scale可实现缩放。

    之前计划按polygon和trans的方法画弧线因为不好实现而放弃,转而使用弧线和线段加粗的方式画图。可以打到一样的效果

    代码记录,防止以外丢失:

    import javax.swing.*;

    import java.awt.*;

    public class arc {

    public static void main(String[] args) {

    /*

            * 在 AWT 的事件队列线程中创建窗口和组件, 确保线程安全,

            * 即 组件创建、绘制、事件响应 需要处于同一线程。*/

            EventQueue.invokeLater(new Runnable() {

    @Override

                public void run() {

    // 创建窗口对象

                    MyFrame frame =new MyFrame();

    // 显示窗口

                    frame.setVisible(true);

    }

    });

    }

    /**

        * 窗口

        */

        public static class MyFrame extends JFrame {

    public static final String TITLE ="Java图形绘制";

    public static final int WIDTH =250;

    public static final int HEIGHT =300;

    public MyFrame() {

    super();

    initFrame();

    }

    private void initFrame() {

    // 设置 窗口标题 和 窗口大小

                setTitle(TITLE);

    setSize(WIDTH,HEIGHT);

    // 设置窗口关闭按钮的默认操作(点击关闭时退出进程)

                setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    // 把窗口位置设置到屏幕的中心

                setLocationRelativeTo(null);

    // 设置窗口的内容面板

                MyPanel panel =new MyPanel(this);

    setContentPane(panel);

    }

    }

    /**

        * 内容面板

        */

        public static class MyPanel extends JPanel {

    private MyFrame frame;

    public MyPanel(MyFrame frame) {

    super();

    this.frame = frame;

    }

    /**

            * 绘制面板的内容: 创建 JPanel 后会调用一次该方法绘制内容,

            * 之后如果数据改变需要重新绘制, 可调用 updateUI() 方法触发

            * 系统再次调用该方法绘制更新 JPanel 的内容。

            */

            @Override

            protected void paintComponent(Graphics g) {

    super.paintComponent(g);

    // 3. 圆弧 / 扇形

                drawArc(g);

    }

    /**

            * 3. 圆弧 / 扇形

            */

            private void drawArc(Graphics g) {

    frame.setTitle("3. 圆弧 / 扇形");

    Graphics2D g2d = (Graphics2D) g.create();

    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

    g2d.setColor(Color.RED);

    Graphics2D g1d = (Graphics2D) g.create();

    g1d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

    g1d.setColor(Color.green);

    Graphics2D g3d = (Graphics2D) g.create();

    g3d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

    g3d.setColor(Color.blue);

    ///以上:只g2d和g1d两个就行,但是为了排除错误我有加了g3d,没必要。1d画环形,2d画弧形即可。

                //  画demo

                //L  intron的长度。这里我选的int型的最后都要math.ceil一下,以防除时候出现小数。另外弧形不能出现小数需要改写一下。不精确。

                //intron 用gff3read读取。

                int L=180;

    int x0=0;

    int x1=180;

    //pi

                int pi=3;

    //l1  第一条read的长度和起始位置。此x能直接用,原来igv画图里也使用到了。

                int l1=100;

    int lx1=30;

    int lx2=130;

    //l2  第二条read

                int l2 =60;

    int lx3=120;

    int lx4=180;

    //cita  intron长度换算成角度

                int cita =360/L;

    //r intron变化成环的r和其外切矩形

                int w=0;

    int h=0;

    int r =L/pi;

    w=h=2*r;

    //lw gap lw线宽 gap两条线画图的间隔

                int lw =4;

    int gap =lw/2;

    //draw l1

                int cita1=lx1*cita;

    int cita2=lx2*cita;

    //g2d.drawArc(40, 40, 140, 140, -9, 120);

    //// arcx arcy

                double expendx=(lw+gap)*Math.sin(45.0);

    int epx=(int)Math.ceil(expendx);

    int arcx=60-epx;

    int arcy=arcx;

    ////arcw arch

                int arcw=w+2*epx;

    int arch=arcw;

    /// arcx1 arcy1 arcw1 arcw2

                int arcx1=60-2*epx;

    int arcy1=arcx1;

    int arcw1=w+2*(2*epx);

    int arch1=arcw1;

    int cita3=lx3*cita;

    int cita4=lx4*cita;

    //draw

                g1d.drawArc(60,60, w, h,0,360);

    g2d.setStroke(new BasicStroke(lw));

    g2d.drawArc(arcx,arcy,arcw,arch,cita1, (cita2-cita1));

    g3d.setStroke(new BasicStroke(lw));

    g3d.drawArc(arcx1,arcy1,arcw1,arch1,cita3,(cita4-cita3));

    g2d.dispose();

    }

    }

    }

    相关文章

      网友评论

          本文标题:IGV改动demo

          本文链接:https://www.haomeiwen.com/subject/lzzbuktx.html