Vector我也可以做

          這些年, CRH、支線客機、“神五”、“神六”的出現,驚嘆科技的強大。在這其中計算機輔助設計,計算機仿真等技術在其中起著重要的作用。

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

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

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

          一、 熱身

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

                   1、建一個用于存儲線數據的類

          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、現在可以建一個畫布用于響應鼠標點擊、移動操作用于繪圖。

                   1) 這里這個類繼承至JPanel類,同時為了響應鼠標操作實現MouseListener, MouseMotionListener接口:public class Canvas extends JPanel implements ICanvas, MouseListener, MouseMotionListener。在類的構造器上加入

                             addMouseListener(this);

                             addMouseMotionListener(this);

                   語句。

                   2) 在類加入三個變量,

                   a)用于存當前活躍的線信息的線數據:LineData active = new LineData();

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

                   c)用于存當前畫操作狀態:boolean isDrawing = false;

                   3) 現在寫一個畫線集的方法:

                   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)現在可以實現鼠標響應:

                   a) 鼠標按下

                   @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) 鼠標移動

                   @Override

                   public void mouseMoved(MouseEvent e) {

                             int x = e.getX();

                             int y = e.getY();

                             if(isDrawing)

                             {

                                      active.setX2(x);

                                      active.setY2(y);

                                      repaint();

                             }

                   }

                   3、實現主窗體

          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)  編輯  收藏

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


          網站導航:
           

          統計

          主站蜘蛛池模板: 织金县| 钟山县| 化州市| 高淳县| 普兰店市| 东丰县| 两当县| 丹江口市| 托克托县| 会同县| 伽师县| 温州市| 宜章县| 平利县| 泽库县| 察隅县| 凤山县| 宜都市| 芦溪县| 翼城县| 仁怀市| 崇阳县| 兴化市| 西和县| 佛冈县| 大洼县| 阿勒泰市| 光山县| 博野县| 渑池县| 务川| 伊春市| 垫江县| 读书| 巴彦县| 福鼎市| 凭祥市| 罗甸县| 华阴市| 敦煌市| 车致|