Browse Source

添加门

duh 6 years ago
parent
commit
f15989cbee

+ 1 - 1
src/main/java/controller/MyFrame.java

@@ -22,7 +22,7 @@ public class MyFrame extends JFrame {
     private void initFrame() {
         // 设置 窗口标题 和 窗口大小
         setTitle(TITLE);
-        setSize(template.getRoom().getWidth(), template.getRoom().getLength());
+        setSize(template.getRoom().getWidth()+100, template.getRoom().getLength()+100);
         // 设置窗口关闭按钮的默认操作(点击关闭时退出进程)
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         // 把窗口位置设置到屏幕的中心

+ 9 - 4
src/main/java/controller/MyPanel.java

@@ -1,10 +1,11 @@
 package controller;
 
 import config.Config;
+import config.subConfig.DoorConfig;
 import config.subConfig.RoomConfig;
 import config.subConfig.TemplateConfig;
+import model.Door;
 import model.Room;
-import model.XS;
 import utils.TemplateUtils;
 
 import javax.swing.*;
@@ -38,14 +39,18 @@ public class MyPanel extends JPanel{
     }
     private void drawTemplate(RoomConfig room, Graphics g) {
         List<TemplateConfig> templateList = templateConfig.getTemplates();
-        TemplateConfig first = templateList.get(0);
         TemplateUtils.setRoom(room);
-        TemplateUtils.drawTemplate(templateList.get(0),g);
+        for(TemplateConfig templateConfig : templateList){
+            TemplateUtils.drawTemplate(templateConfig,g);
+        }
     }
     private void drawRoom(Graphics g){
         Room room = new Room(templateConfig.getRoom());
         room.drawSelf(g);
-
+        DoorConfig doorConfig = templateConfig.getDoor();
+        Door door = new Door();
+        door.setConfig(doorConfig);
+        door.drawSelf(g);
         drawTemplate(templateConfig.getRoom(),g);
     }
     /**

+ 39 - 0
src/main/java/model/Door.java

@@ -0,0 +1,39 @@
+package model;
+
+import config.subConfig.DoorConfig;
+
+import java.awt.*;
+
+/**
+ * @author duh
+ * @create 2018/7/18 13:46
+ * @email duh@elab-plus.com
+ **/
+public class Door extends Template{
+    private DoorConfig config;
+    @Override
+    public void drawSelf(Graphics g) {
+        // 1. 绘制一条圆弧: 椭圆的外切矩形 左上角坐标为(0, 0), 宽100, 高100,
+        //                弧的开始角度为0度, 需要绘制的角度数为-90度,
+        //                椭圆右边水平线为0度, 逆时针为正角度, 顺时针为负角度
+        System.out.println("begin to draw door");
+        Graphics2D g2d = (Graphics2D) g.create();
+        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2d.setColor(Color.RED);
+        g2d.drawArc(config.getX(), config.getY(), config.getRadis(), config.getRadis(), 0, 90*config.getOpenDir());
+        g2d.setColor(Color.GRAY);
+        // 3. 填充一个扇形
+        g2d.fillArc(config.getX(), config.getY(), config.getRadis(), config.getRadis(), 0, 90*config.getOpenDir());
+
+        g2d.dispose();
+    }
+
+
+    public DoorConfig getConfig() {
+        return config;
+    }
+
+    public void setConfig(DoorConfig config) {
+        this.config = config;
+    }
+}

+ 1 - 1
src/main/java/model/Room.java

@@ -27,9 +27,9 @@ public class Room extends Template{
         Graphics2D g2d = (Graphics2D) g.create();
         g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
         g2d.setColor(Color.GRAY);
-
         // 1. 绘制一个矩形: 起点(30, 20), 宽80, 高100
         g2d.drawRect(x, y, width, length);
+        g2d.dispose();
     }
 
     public int getLength() {

+ 1 - 1
src/main/java/model/Template.java

@@ -47,5 +47,5 @@ public abstract class Template {
     public void setScale(int scale) {
         this.scale = scale;
     }
-    abstract void drawSelf(Graphics g);
+    public abstract void drawSelf(Graphics g);
 }

+ 0 - 49
src/main/java/model/XS.java

@@ -1,49 +0,0 @@
-package model;
-
-import config.subConfig.TemplateConfig;
-
-import java.awt.*;
-
-/**
- * @author duh
- * @create 2018/7/17 15:00
- * @email duh@elab-plus.com
- **/
-public class XS extends Template{
-    private Room room;
-    private TemplateConfig config;
-    public XS(){
-        setName("XS");
-    }
-
-    public XS(Room room) {
-        this.room = room;
-    }
-
-    @Override
-    public void drawSelf(Graphics g) {
-        Graphics2D g2d = (Graphics2D) g.create();
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        g2d.setColor(Color.GRAY);
-        // 1. 绘制一个矩形: 起点(30, 20), 宽80, 高100
-        g2d.drawRect(x, y, config.getWidth(), config.getLength());
-        g2d.drawOval(x, y, config.getWidth(), config.getLength());
-        g2d.drawOval(x+10, y+10, config.getWidth()-10, config.getLength()-10);
-    }
-
-    public Room getRoom() {
-        return room;
-    }
-
-    public void setRoom(Room room) {
-        this.room = room;
-    }
-
-    public TemplateConfig getConfig() {
-        return config;
-    }
-
-    public void setConfig(TemplateConfig config) {
-        this.config = config;
-    }
-}

+ 20 - 3
src/main/java/utils/TemplateUtils.java

@@ -19,38 +19,55 @@ public class TemplateUtils {
             System.out.println("--------------room is not exist !!");
             return;
         }
+        drawTemplateName(template,g);
         drawTemplateSelf(template,g);
         drawShadow(template,g);
     }
+
+    private static void drawTemplateName(TemplateConfig template, Graphics g) {
+        int x1 = room.getX()+template.getX()+template.getLength()/2;
+        int y1 = room.getY()+template.getY()+template.getWidth()/2;
+
+        g.drawString(template.getName(), x1, y1);
+    }
+
     private static void drawTemplateSelf(TemplateConfig template, Graphics g){
         int x1 = room.getX()+template.getX();
         int y1 = room.getY()+template.getY();
         int x2 = x1+template.getLength();
         int y2 = y1+template.getWidth();
-        g.drawRect(x1,y1,template.getLength(),template.getWidth());
+        Graphics2D g2d = (Graphics2D) g.create();
+        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2d.setColor(Color.RED);
+        g2d.drawRect(x1,y1,template.getLength(),template.getWidth());
+        g2d.dispose();
     }
     private static void drawShadow(TemplateConfig template, Graphics g){
         TemplateShadowConfig shadow = template.getShadow();
         int cx = room.getX()+shadow.getX();
         int cy = room.getY()+shadow.getY();
         int x1,y1,x2,y2;
+        Graphics2D g2d = (Graphics2D) g.create();
+        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2d.setColor(Color.GRAY);
         switch (shadow.getDirect()){
             case 0:
                 x1 = cx;
                 y1 = cy - template.getWidth()/2;
                 x2 = cx+shadow.getRadis();
                 y2 = cy + template.getWidth()/2;
-                g.fillRect(x1,y1,shadow.getRadis(),template.getWidth());
+                g2d.fillRect(x1,y1,shadow.getRadis(),template.getWidth());
                 break;
             case 90:
                 x1 = cx-shadow.getRadis()/2;
                 y1 = cy;
                 x2 = cx+shadow.getRadis();
                 y2 = cy + template.getWidth()/2;
-                g.fillRect(x1,y1,shadow.getRadis(),shadow.getRadis());
+                g2d.fillRect(x1,y1,shadow.getRadis(),shadow.getRadis());
                 break;
             default:break;
         }
+        g2d.dispose();
     }
 
     public static RoomConfig getRoom() {

+ 3 - 3
src/main/resources/config.yml

@@ -1,5 +1,5 @@
 enlarge: 1
-narrow: 5
+narrow: 4
 room:
   length: 2800
   width: 2000
@@ -12,8 +12,8 @@ door:
   y: 0
   position: 1
   radis: 280
-  #左开0右开1
-  openDir: 0
+  #扇形1234象限
+  openDir: 1
   doorShadow:
     radis: 100
     #与x轴夹角