Vector我也可以做

          這些年, CRH、支線客機(jī)、“神五”、“神六”的出現(xiàn),驚嘆科技的強(qiáng)大。在這其中計算機(jī)輔助設(shè)計,計算機(jī)仿真等技術(shù)在其中起著重要的作用。

                   計算機(jī)輔助設(shè)計(CAD)是一項利用計算機(jī)矢量圖形技術(shù)來完成圖形繪制、修改等工作的技術(shù)。由于矢量圖形處理具有數(shù)據(jù)精度高、保真性能好、修改方便等特點,現(xiàn)在被廣泛應(yīng)用于工程設(shè)計、工業(yè)加工、激光雕刻、激光打標(biāo)等領(lǐng)域和行業(yè)。

                 現(xiàn)在目前的矢量圖形處理的軟件很多。如工業(yè)設(shè)計上用得比較多的AutoCADUGPro/E,平面設(shè)計、排版上用的CorelDrawIllustrator,激光標(biāo)刻行業(yè)上用的EzCAD,電子設(shè)計上用的Protel等等。它們各有其側(cè)重,是由于應(yīng)用而決定的,但其中的核心處理機(jī)制是一樣。

                   不知你是否想在你的工作中用這一類的軟件,是否有覺得這些現(xiàn)有的軟件,在某些方面不適合你所處的行業(yè)。不管是否是程序員,只要你有這方面的興趣,我想和大家一起研究如何做矢量圖形處理軟件。

          一、 熱身

                   說了這么多, 我想先熱熱身,做一個能畫線的程序。(這里我用Java做為開發(fā)語言,主要是考慮其簡單、易學(xué),適合于初學(xué)者)

                   1、建一個用于存儲線數(shù)據(jù)的類

          class LineData

          {

                   private int x1, x2, y1, y2;

                   public int getX1() {

                             return x1;

                   }

                   public void setX1(int x1) {

                             this.x1 = x1;

                   }

                   public int getX2() {

                             return x2;

                   }

                   public void setX2(int x2) {

                             this.x2 = x2;

                   }

                   public int getY1() {

                             return y1;

                   }

                   public void setY1(int y1) {

                             this.y1 = y1;

                   }

                   public int getY2() {

                             return y2;

                   }

                   public void setY2(int y2) {

                             this.y2 = y2;

                   }

                   public LineData(int x1, int y1, int x2, int y2)

                   {

                             this.x1 = x1;

                             this.x2 = x2;

                             this.y1 = y1;

                             this.y2 = y2;

                   }

                   public LineData(LineData line)

                   {

                             this(line.x1, line.y1, line.x2, line.y2);

                   }

                   public LineData()

                   {

                             this(0,0,0,0);

                   }

          }

                   2、現(xiàn)在可以建一個畫布用于響應(yīng)鼠標(biāo)點擊、移動操作用于繪圖。

                   1) 這里這個類繼承至JPanel類,同時為了響應(yīng)鼠標(biāo)操作實現(xiàn)MouseListener, MouseMotionListener接口:public class Canvas extends JPanel implements ICanvas, MouseListener, MouseMotionListener。在類的構(gòu)造器上加入

                             addMouseListener(this);

                             addMouseMotionListener(this);

                   語句。

                   2) 在類加入三個變量,

                   a)用于存當(dāng)前活躍的線信息的線數(shù)據(jù):LineData active = new LineData();

                   b)用于存已畫好的線集數(shù)據(jù):Vector<LineData> lines = new Vector<LineData>();

                   c)用于存當(dāng)前畫操作狀態(tài):boolean isDrawing = false;

                   3) 現(xiàn)在寫一個畫線集的方法:

                   private void drawLines()

                   {

                             for(LineData line : lines)

                             {

                                      g.drawLine(line.getX1(), line.getY1(), line.getX2(), line.getY2());

                             }

                   }

                   4) 重載JPanel中的paintCompomont方法

                   @Override

                   public void paintComponent(Graphics g) {

                             super.paintComponent(g);

                             drawLines(g);

                             if(isDrawing)

                                      g.drawLine(active.getX1(), active.getY1(), active.getX2(), active.getY2());

                   }

                   5)現(xiàn)在可以實現(xiàn)鼠標(biāo)響應(yīng):

                   a) 鼠標(biāo)按下

                   @Override

                   public void mousePressed(MouseEvent e) {

                             int x = e.getX();

                             int y = e.getY();

                             isDrawing = !isDrawing;

                             if(isDrawing)

                             {

                                      active.setX1(x);

                                      active.setY1(y);

                             }

                             else

                             {

                                      active.setX2(x);

                                      active.setY2(y);

                                      lines.add(new LineData(active));

                             }

                   }

                   b) 鼠標(biāo)移動

                   @Override

                   public void mouseMoved(MouseEvent e) {

                             int x = e.getX();

                             int y = e.getY();

                             if(isDrawing)

                             {

                                      active.setX2(x);

                                      active.setY2(y);

                                      repaint();

                             }

                   }

                   3、實現(xiàn)主窗體

          public class LinePaint extends JFrame {

                   public static void main(String args[]) {

                             EventQueue.invokeLater(new Runnable() {

                                      public void run() {

                                               try {

                                                         LinePaint frame = new LinePaint();

                                                         frame.setVisible(true);

                                               } catch (Exception e) {

                                                         e.printStackTrace();

                                               }

                                      }

                             });

                   }

                   public LinePaint() {

                             super();

                             setBounds(100, 100, 500, 375);

                             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                             getContentPane().add(new Canvas());

                   }

          }


          源代碼:

          /Files/panda084/LinePaint.rar



          posted on 2008-09-13 01:27 Panda 閱讀(166) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          統(tǒng)計

          主站蜘蛛池模板: 敖汉旗| 清苑县| 南通市| 怀柔区| 合川市| 凤凰县| 榆林市| 淮北市| 南城县| 吴桥县| 罗源县| 珠海市| 南阳市| 郓城县| 松潘县| 钟山县| 那坡县| 邹城市| 赣州市| 临安市| 凤台县| 沙田区| 泸水县| 泗洪县| 岑巩县| 济源市| 安国市| 南漳县| 怀柔区| 泸溪县| 大安市| 石棉县| 乾安县| 庆城县| 天台县| 井冈山市| 蓬溪县| 刚察县| 兴化市| 温州市| 呼和浩特市|