home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Webroot / classes / CFGraphs / multibarchart3d.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  11.0 KB  |  638 lines

  1. import allaire.dcf.recordset.AppletParamRecordset;
  2. import allaire.dcf.recordset.Query;
  3. import allaire.dcf.recordset.Recordset;
  4. import allaire.util.Debug;
  5. import java.applet.Applet;
  6. import java.awt.Color;
  7. import java.awt.Component;
  8. import java.awt.Event;
  9. import java.awt.Font;
  10. import java.awt.FontMetrics;
  11. import java.awt.Graphics;
  12. import java.awt.Point;
  13. import java.util.Date;
  14. import java.util.Vector;
  15.  
  16. public class MultiBarChart3D extends Applet implements Runnable {
  17.    static final int PARAMS = 1;
  18.    static final int TEMPLATE = 2;
  19.    static final Color[] defaultColors;
  20.    Thread runner;
  21.    Query query;
  22.    int refreshTime;
  23.    boolean debugInfoEnabled;
  24.    String title;
  25.    String titleFontName;
  26.    Font titleFont;
  27.    FontMetrics titleFontMetrics;
  28.    int titleFontHeight;
  29.    String legendFontName;
  30.    Font legendFont;
  31.    FontMetrics legendFontMetrics;
  32.    int legendFontHeight;
  33.    int legendHeight;
  34.    int legendWidth;
  35.    boolean legendEnabled;
  36.    int orientation;
  37.    int shadow;
  38.    boolean barBorderEnabled;
  39.    boolean showDateTime;
  40.    String currentDateTime;
  41.    Color backgroundColor;
  42.    Color fontColor;
  43.    Color lineColor;
  44.    Vector items;
  45.    Vector pointerToItems;
  46.    Recordset chartData;
  47.    int rowCount;
  48.    int groupCount;
  49.    int itemCount;
  50.    int maxItemLabelWidth;
  51.    int maxGroupLabelWidth;
  52.    float maxValue;
  53.    double rot;
  54.    double elev;
  55.    double dist;
  56.    double distanceWidths;
  57.    float originX;
  58.    float originY;
  59.    float sinRot;
  60.    float cosRot;
  61.    float sinElev;
  62.    float cosElev;
  63.    float ratio;
  64.  
  65.    public synchronized void init() {
  66.       String var1 = ((Applet)this).getParameter("RefreshTime");
  67.       if (var1 == null) {
  68.          this.refreshTime = 0;
  69.       } else {
  70.          this.refreshTime = Integer.parseInt(var1);
  71.          var1 = ((Applet)this).getParameter("RefreshDataFromURL");
  72.          if (var1 == null) {
  73.             this.refreshTime = 0;
  74.          } else {
  75.             if (var1.indexOf(63) == -1) {
  76.                var1 = var1 + '?';
  77.             }
  78.  
  79.             this.query = new Query(var1);
  80.             this.query.addParam("RefreshTime", String.valueOf(this.refreshTime));
  81.          }
  82.       }
  83.  
  84.       var1 = ((Applet)this).getParameter("DebugInfoEnabled");
  85.       if (var1 == null) {
  86.          this.debugInfoEnabled = false;
  87.       } else if (var1.toLowerCase().equals("yes")) {
  88.          this.debugInfoEnabled = true;
  89.       } else {
  90.          this.debugInfoEnabled = false;
  91.       }
  92.  
  93.       this.title = ((Applet)this).getParameter("Title");
  94.       if (this.title == null) {
  95.          this.title = "Chart";
  96.       }
  97.  
  98.       this.titleFontName = ((Applet)this).getParameter("TitleFontName");
  99.       if (this.titleFontName == null) {
  100.          this.titleFontName = "TimesRoman";
  101.       }
  102.  
  103.       var1 = ((Applet)this).getParameter("TitleFontHeight");
  104.       if (var1 == null) {
  105.          this.titleFontHeight = 12;
  106.       } else {
  107.          this.titleFontHeight = Integer.parseInt(var1);
  108.       }
  109.  
  110.       this.legendFontName = ((Applet)this).getParameter("LegendFontName");
  111.       if (this.legendFontName == null) {
  112.          this.legendFontName = "TimesRoman";
  113.       }
  114.  
  115.       var1 = ((Applet)this).getParameter("ShowLegend");
  116.       if (var1 == null) {
  117.          this.legendEnabled = true;
  118.       } else if (var1.toLowerCase().equals("yes")) {
  119.          this.legendEnabled = true;
  120.       } else {
  121.          this.legendEnabled = false;
  122.       }
  123.  
  124.       var1 = ((Applet)this).getParameter("LegendFontHeight");
  125.       if (var1 == null) {
  126.          this.legendFontHeight = 10;
  127.       } else {
  128.          this.legendFontHeight = Integer.parseInt(var1);
  129.       }
  130.  
  131.       var1 = ((Applet)this).getParameter("DrawBorders");
  132.       if (var1 == null) {
  133.          this.barBorderEnabled = true;
  134.       } else if (var1.toLowerCase().equals("yes")) {
  135.          this.barBorderEnabled = true;
  136.       } else {
  137.          this.barBorderEnabled = false;
  138.       }
  139.  
  140.       var1 = ((Applet)this).getParameter("ShowDateTime");
  141.       if (var1 == null) {
  142.          this.showDateTime = true;
  143.       } else if (var1.toLowerCase().equals("yes")) {
  144.          this.showDateTime = true;
  145.       } else {
  146.          this.showDateTime = false;
  147.       }
  148.  
  149.       var1 = ((Applet)this).getParameter("Rotation");
  150.       if (var1 == null) {
  151.          this.rot = (double)10.0F;
  152.       } else {
  153.          this.rot = (double)((float)Integer.parseInt(var1));
  154.       }
  155.  
  156.       var1 = ((Applet)this).getParameter("Elevation");
  157.       if (var1 == null) {
  158.          this.elev = (double)30.0F;
  159.       } else {
  160.          this.elev = (double)((float)Integer.parseInt(var1));
  161.       }
  162.  
  163.       var1 = ((Applet)this).getParameter("Distance");
  164.       if (var1 == null) {
  165.          this.distanceWidths = (double)3.0F;
  166.       } else {
  167.          this.distanceWidths = (double)Integer.parseInt(var1);
  168.       }
  169.  
  170.       var1 = ((Applet)this).getParameter("BackgroundColor");
  171.       if (var1 == null) {
  172.          this.backgroundColor = ((Component)this).getBackground();
  173.       } else {
  174.          this.backgroundColor = new Color(Integer.valueOf(var1, 16));
  175.       }
  176.  
  177.       var1 = ((Applet)this).getParameter("FontColor");
  178.       if (var1 == null) {
  179.          this.fontColor = Color.black;
  180.       } else {
  181.          this.fontColor = new Color(Integer.valueOf(var1, 16));
  182.       }
  183.  
  184.       var1 = ((Applet)this).getParameter("GridLineColor");
  185.       if (var1 == null) {
  186.          this.lineColor = Color.gray;
  187.       } else {
  188.          this.lineColor = new Color(Integer.valueOf(var1, 16));
  189.       }
  190.  
  191.       ((Component)this).setBackground(this.backgroundColor);
  192.       this.rot = Math.min((double)90.0F, Math.max((double)0.0F, this.rot));
  193.       this.elev = Math.min((double)90.0F, Math.max((double)0.0F, this.elev));
  194.       this.distanceWidths = Math.max((double)1.0F, this.distanceWidths);
  195.       this.sinRot = (float)Math.sin(this.rot * (double)2.0F * Math.PI / (double)360.0F);
  196.       this.cosRot = (float)Math.cos(this.rot * (double)2.0F * Math.PI / (double)360.0F);
  197.       this.sinElev = (float)Math.sin(this.elev * (double)2.0F * Math.PI / (double)360.0F);
  198.       this.cosElev = (float)Math.cos(this.elev * (double)2.0F * Math.PI / (double)360.0F);
  199.       this.titleFont = new Font(this.titleFontName, 1, this.titleFontHeight);
  200.       this.titleFontMetrics = ((Component)this).getFontMetrics(this.titleFont);
  201.       this.legendFont = new Font(this.legendFontName, 0, this.legendFontHeight);
  202.       this.legendFontMetrics = ((Component)this).getFontMetrics(this.legendFont);
  203.       this.pointerToItems = new Vector();
  204.       this.items = new Vector();
  205.       this.getData(1);
  206.    }
  207.  
  208.    private void getData(int var1) {
  209.       try {
  210.          switch (var1) {
  211.             case 1:
  212.                this.chartData = new AppletParamRecordset(this, "ChartData");
  213.                break;
  214.             case 2:
  215.                this.query.execute();
  216.                this.chartData = this.query.getRecordset();
  217.          }
  218.  
  219.          if (this.refreshTime == 0) {
  220.             ((Applet)this).getAppletContext().showStatus("Done");
  221.          } else {
  222.             ((Applet)this).getAppletContext().showStatus("...");
  223.          }
  224.  
  225.          this.rowCount = this.chartData.getRowCount();
  226.          if (this.rowCount != 0) {
  227.             this.maxValue = 0.0F;
  228.  
  229.             for(int var2 = 0; var2 < this.rowCount; ++var2) {
  230.                float var5;
  231.                try {
  232.                   var5 = (float)Math.abs(new Double(this.chartData.getData(var2 + 1, "Values")));
  233.                } catch (Exception var7) {
  234.                   var5 = 0.0F;
  235.                }
  236.  
  237.                this.maxValue = Math.max(this.maxValue, var5);
  238.                if (var2 == 0) {
  239.                   this.groupCount = this.itemCount = 1;
  240.                   this.pointerToItems.setSize(this.rowCount);
  241.                   this.pointerToItems.setElementAt(new Integer(this.itemCount - 1), var2);
  242.                   this.items.setSize(this.itemCount);
  243.                   this.items.setElementAt(new Item(this.chartData.getData(var2 + 1, "Items")), this.itemCount - 1);
  244.                   this.maxItemLabelWidth = this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Items"));
  245.                   this.maxGroupLabelWidth = this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Groups"));
  246.                } else {
  247.                   if (!this.chartData.getData(var2 + 1, "Groups").equals(this.chartData.getData(var2, "Groups"))) {
  248.                      this.maxGroupLabelWidth = Math.max(this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Groups")), this.maxGroupLabelWidth);
  249.                      ++this.groupCount;
  250.                   }
  251.  
  252.                   boolean var4 = false;
  253.  
  254.                   for(int var3 = 0; var3 < var2; ++var3) {
  255.                      if (this.chartData.getData(var2 + 1, "Items").equals(this.chartData.getData(var3 + 1, "Items"))) {
  256.                         var4 = true;
  257.                         this.pointerToItems.setElementAt(this.pointerToItems.elementAt(var3), var2);
  258.                         break;
  259.                      }
  260.                   }
  261.  
  262.                   if (!var4) {
  263.                      ++this.itemCount;
  264.                      this.pointerToItems.setElementAt(new Integer(this.itemCount - 1), var2);
  265.                      this.items.setSize(this.itemCount);
  266.                      this.items.setElementAt(new Item(this.chartData.getData(var2 + 1, "Items")), this.itemCount - 1);
  267.                      this.maxItemLabelWidth = Math.max(this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Items")), this.maxItemLabelWidth);
  268.                   }
  269.                }
  270.             }
  271.  
  272.             for(int var9 = 0; var9 < this.itemCount; ++var9) {
  273.                if (var9 < 9) {
  274.                   ((Item)this.items.elementAt(var9)).color = defaultColors[var9];
  275.                } else if (var9 < 18) {
  276.                   ((Item)this.items.elementAt(var9)).color = defaultColors[var9 - 9].darker();
  277.                } else if (var9 < 27) {
  278.                   ((Item)this.items.elementAt(var9)).color = defaultColors[var9 - 18].darker().darker();
  279.                } else {
  280.                   ((Item)this.items.elementAt(var9)).color = Color.black;
  281.                }
  282.             }
  283.          }
  284.  
  285.          this.currentDateTime = (new Date()).toLocaleString();
  286.       } catch (Exception var8) {
  287.          if (this.debugInfoEnabled) {
  288.             Debug.write(((Throwable)var8).getMessage());
  289.          }
  290.  
  291.       }
  292.    }
  293.  
  294.    public void start() {
  295.       if (this.runner == null) {
  296.          this.runner = new Thread(this);
  297.          this.runner.start();
  298.       }
  299.  
  300.    }
  301.  
  302.    public void stop() {
  303.       if (this.runner != null) {
  304.          this.runner.stop();
  305.          this.runner = null;
  306.       }
  307.  
  308.    }
  309.  
  310.    public void run() {
  311.       while(this.refreshTime != 0) {
  312.          this.pause(this.refreshTime * 1000);
  313.          this.getData(2);
  314.          ((Component)this).repaint();
  315.       }
  316.  
  317.       this.stop();
  318.    }
  319.  
  320.    private void pause(int var1) {
  321.       try {
  322.          Thread.sleep((long)var1);
  323.       } catch (InterruptedException var3) {
  324.          if (this.debugInfoEnabled) {
  325.             Debug.write(((Throwable)var3).getMessage());
  326.          }
  327.  
  328.       }
  329.    }
  330.  
  331.    public boolean mouseEnter(Event var1, int var2, int var3) {
  332.       if (var1.id == 504) {
  333.          ((Applet)this).getAppletContext().showStatus("(c)1996 Allaire Corp.");
  334.          return true;
  335.       } else {
  336.          return false;
  337.       }
  338.    }
  339.  
  340.    public boolean mouseExit(Event var1, int var2, int var3) {
  341.       if (var1.id == 505) {
  342.          ((Applet)this).getAppletContext().showStatus("");
  343.          return true;
  344.       } else {
  345.          return false;
  346.       }
  347.    }
  348.  
  349.    public synchronized void paint(Graphics var1) {
  350.       if (this.itemCount > 0) {
  351.          if (this.maxValue == 0.0F) {
  352.             this.maxValue = 1.0F;
  353.          }
  354.  
  355.          int var5 = ((Component)this).size().width / 15;
  356.          int var6 = ((Component)this).size().height / 15;
  357.          float var16 = (float)Math.pow((double)10.0F, Math.floor(Math.log((double)this.maxValue) / Math.log((double)10.0F)));
  358.          if (this.maxValue / var16 < 2.0F) {
  359.             var16 /= 5.0F;
  360.          }
  361.  
  362.          if (this.maxValue / var16 < 5.0F) {
  363.             var16 /= 2.0F;
  364.          }
  365.  
  366.          var1.setColor(this.fontColor);
  367.          var1.setFont(this.titleFont);
  368.          var1.drawString(this.title, Math.max((((Component)this).size().width - this.titleFontMetrics.stringWidth(this.title)) / 2, 0), ((Component)this).size().height - var6);
  369.          var1.setFont(this.legendFont);
  370.          if (this.showDateTime) {
  371.             var1.drawString("(as of " + this.currentDateTime + ")", Math.max((((Component)this).size().width - this.legendFontMetrics.stringWidth("(as of " + this.currentDateTime + ")")) / 2, 0), ((Component)this).size().height - var6 + this.legendFontHeight * 3 / 2);
  372.          }
  373.  
  374.          int var24;
  375.          if (this.legendEnabled) {
  376.             int var54 = Math.min((((Component)this).size().height - this.titleFontHeight - 3 * var6) / this.legendFontHeight, this.itemCount);
  377.             int var55 = (((Component)this).size().height - this.titleFontHeight - 3 * var6) / var54;
  378.             if (var55 > 2 * this.titleFontHeight) {
  379.                var55 = 2 * this.titleFontHeight;
  380.             }
  381.  
  382.             var24 = this.legendFontHeight * 2 + this.maxItemLabelWidth + var5;
  383.             int var53 = var54 * var55;
  384.             int var10 = ((Component)this).size().width - var24;
  385.             int var11 = (((Component)this).size().height - 3 * var6 - this.titleFontHeight - var53) / 2 + var6;
  386.             var1.drawRect(var10 - this.legendFontHeight, var11 - var55 / 2, var24 - var5 + 2 * this.legendFontHeight, var53 + var55 / 2);
  387.  
  388.             for(int var2 = 0; var2 < var54; ++var2) {
  389.                var1.setColor(((Item)this.items.elementAt(var2)).color);
  390.                var1.fillRect(var10, var11, this.legendFontHeight, this.legendFontHeight);
  391.                if (this.barBorderEnabled) {
  392.                   var1.setColor(this.fontColor);
  393.                   var1.drawRect(var10, var11, this.legendFontHeight - 1, this.legendFontHeight - 1);
  394.                }
  395.  
  396.                var1.setColor(this.fontColor);
  397.                var1.drawString(((Item)this.items.elementAt(var2)).label, var10 + 2 * this.legendFontHeight, var11 + this.legendFontHeight - 1);
  398.                var11 += var55;
  399.             }
  400.          } else {
  401.             boolean var27 = false;
  402.             boolean var26 = false;
  403.             boolean var25 = false;
  404.             var24 = 0;
  405.          }
  406.  
  407.          float var13 = (float)(((Component)this).size().width - 2 * var5 - var24);
  408.          float var14 = (float)(((Component)this).size().height - this.titleFontHeight - this.legendFontHeight - 3 * var6);
  409.          float var21 = Math.max(var13 * 3.0F / (float)(5 * this.groupCount), (float)this.legendFontMetrics.stringWidth("O"));
  410.          float var23 = Math.max((var13 - (float)this.groupCount * var21) / (float)this.groupCount, 0.0F);
  411.          float var15 = (var21 + var23) * (float)this.itemCount;
  412.          float var12 = Math.max(var14 / this.maxValue, 0.0F);
  413.          this.dist = this.distanceWidths * (double)var13;
  414.          this.originX = this.originY = 0.0F;
  415.          this.ratio = 1.0F;
  416.          float[] var31 = new float[]{-var13, 0.0F};
  417.          float[] var32 = new float[]{-var14 / 2.0F, var14 / 2.0F};
  418.          float[] var33 = new float[]{0.0F, -var15};
  419.          float var37 = 0.0F;
  420.          float var36 = 0.0F;
  421.          float var35 = 0.0F;
  422.          float var34 = 0.0F;
  423.  
  424.          for(int var41 = 0; var41 < 2; ++var41) {
  425.             for(int var3 = 0; var3 < 2; ++var3) {
  426.                for(int var4 = 0; var4 < 2; ++var4) {
  427.                   Point var30 = this.transferTo2D(var31[var41], var32[var3], var33[var4]);
  428.                   if (var41 == 0 && var3 == 0 && var4 == 0) {
  429.                      var34 = var35 = (float)var30.x;
  430.                      var36 = var37 = (float)var30.y;
  431.                   } else {
  432.                      var34 = Math.min(var34, (float)var30.x);
  433.                      var35 = Math.max(var35, (float)var30.x);
  434.                      var36 = Math.min(var36, (float)var30.y);
  435.                      var37 = Math.max(var37, (float)var30.y);
  436.                   }
  437.                }
  438.             }
  439.          }
  440.  
  441.          Point var56 = this.transferTo2D(0.0F, 0.0F, 0.0F);
  442.          this.ratio = Math.min(var13 / (var35 - var34), var14 / (var37 - var36));
  443.          this.originX = (float)(var5 / 2) + ((float)var56.x - var34) * this.ratio + (var13 - (var35 - var34) * this.ratio) / 2.0F;
  444.          this.originY = (float)var6 + ((float)var56.y - var36) * this.ratio + (var14 - (var37 - var36) * this.ratio) / 2.0F;
  445.          float var7 = -var13;
  446.          float var8 = -var14 / 2.0F;
  447.          float var9 = -var15;
  448.          var1.setColor(this.lineColor);
  449.          this.draw3DLine(var1, var7, var8, var9, var7 + var13, var8, var9);
  450.          this.draw3DLine(var1, var7, var8, var9, var7, var8, var9 + var15);
  451.          this.draw3DLine(var1, var7, var8, var9 + var15, var7 + var13, var8, var9 + var15);
  452.          this.draw3DLine(var1, var7 + var13, var8, var9, var7 + var13, var8, var9 + var15);
  453.          this.draw3DLine(var1, var7, var8 + var14, var9, var7 + var13, var8 + var14, var9);
  454.          this.draw3DLine(var1, var7, var8 + var14, var9, var7, var8 + var14, var9 + var15);
  455.          this.draw3DLine(var1, var7, var8, var9, var7, var8 + var14, var9);
  456.          this.draw3DLine(var1, var7, var8, var9 + var15, var7, var8 + var14, var9 + var15);
  457.          this.draw3DLine(var1, var7 + var13, var8, var9, var7 + var13, var8 + var14, var9);
  458.  
  459.          for(float var17 = 0.0F; var17 < this.maxValue; var17 += var16) {
  460.             this.draw3DLine(var1, var7, var8 + var12 * var17, var9, var7 + var13, var8 + var12 * var17, var9);
  461.             this.draw3DLine(var1, var7, var8 + var12 * var17, var9, var7, var8 + var12 * var17, var9 + var15);
  462.             var56 = this.transferTo2D(var7 - (float)this.legendFontMetrics.stringWidth("" + var17) - (float)(this.legendFontHeight / 2), var8 + var12 * var17, var9 + var15 + (float)this.legendFontMetrics.stringWidth("" + var17) + (float)(this.legendFontHeight / 2));
  463.             var1.drawString("" + var17, var56.x, var56.y);
  464.          }
  465.  
  466.          var7 = -var13 + var23;
  467.          var8 = -var14 / 2.0F;
  468.          var9 = -var15 + var23 + var21;
  469.          float var20 = 0.0F;
  470.          float var19 = 0.0F;
  471.          String var29 = "";
  472.          float var18 = 0.0F;
  473.  
  474.          for(int var43 = 0; var43 < this.itemCount; ++var43) {
  475.             ((Item)this.items.elementAt(var43)).value = (double)0.0F;
  476.             ((Item)this.items.elementAt(var43)).previousValue = (double)0.0F;
  477.          }
  478.  
  479.          for(int var42 = 0; var42 < this.rowCount; ++var42) {
  480.             int var38 = (Integer)this.pointerToItems.elementAt(var42);
  481.  
  482.             String var28;
  483.             try {
  484.                var28 = this.chartData.getData(var42 + 1, "Groups");
  485.             } catch (Exception var40) {
  486.                var28 = "";
  487.             }
  488.  
  489.             if (var42 > 0 && !var28.equals(var29)) {
  490.                for(int var44 = this.itemCount - 1; var44 >= 0; --var44) {
  491.                   var18 = (float)((Item)this.items.elementAt(var44)).value;
  492.                   float var22 = Math.abs(var12 * var18);
  493.                   this.draw3DBar(var1, var7, var8, var9, var21, var21, var22, ((Item)this.items.elementAt(var44)).color, "" + var18, this.barBorderEnabled);
  494.                   var9 += var21 + var23;
  495.                }
  496.  
  497.                if ((float)this.legendFontMetrics.stringWidth(var29) > var21 + var23) {
  498.                   var29 = var29.substring(0, (int)((var21 + var23) / (float)this.legendFontMetrics.stringWidth(var29)));
  499.                }
  500.  
  501.                var56 = this.transferTo2D(var7 + var21 / 2.0F - (float)(this.legendFontMetrics.stringWidth(var29) / 2) - (float)(this.legendFontHeight / 2), var8 - (float)this.legendFontHeight, (float)(this.legendFontMetrics.stringWidth(var29) + this.legendFontHeight));
  502.                var1.setColor(this.fontColor);
  503.                var1.drawString(var29, var56.x, var56.y);
  504.                var7 += var21 + var23;
  505.                var9 = -var15 + var23 + var21;
  506.                var19 = 0.0F;
  507.             }
  508.  
  509.             var29 = var28;
  510.  
  511.             try {
  512.                var18 = (float)new Double(this.chartData.getData(var42 + 1, "Values"));
  513.             } catch (Exception var39) {
  514.                var18 = 0.0F;
  515.             }
  516.  
  517.             var19 += Math.abs(var18);
  518.             ((Item)this.items.elementAt(var38)).value = (double)var18;
  519.          }
  520.  
  521.          for(int var45 = this.itemCount - 1; var45 >= 0; --var45) {
  522.             var18 = (float)((Item)this.items.elementAt(var45)).value;
  523.             float var52 = Math.abs(var12 * var18);
  524.             this.draw3DBar(var1, var7, var8, var9, var21, var21, var52, ((Item)this.items.elementAt(var45)).color, "" + var18, this.barBorderEnabled);
  525.             var9 += var21 + var23;
  526.          }
  527.  
  528.          if ((float)this.legendFontMetrics.stringWidth(var29) > var21 + var23) {
  529.             var29 = var29.substring(0, (int)((var21 + var23) / (float)this.legendFontMetrics.stringWidth(var29)));
  530.          }
  531.  
  532.          var56 = this.transferTo2D(var7 + var21 / 2.0F - (float)(this.legendFontMetrics.stringWidth(var29) / 2) - (float)(this.legendFontHeight / 2), var8 - (float)this.legendFontHeight, (float)(this.legendFontMetrics.stringWidth(var29) + this.legendFontHeight));
  533.          var1.setColor(this.fontColor);
  534.          var1.drawString(var29, var56.x, var56.y);
  535.       }
  536.  
  537.    }
  538.  
  539.    public Point transferTo2D(float var1, float var2, float var3) {
  540.       Point var4 = new Point(0, 0);
  541.       double var5 = (double)(this.cosRot * var1 - this.sinRot * var3);
  542.       double var7 = (double)(-this.sinRot * this.cosElev * var1 + this.cosElev * var2 - this.cosRot * this.sinElev * var3);
  543.       double var9 = (double)(this.sinRot * this.cosElev * var1 + this.sinElev * var2 + this.cosRot * this.cosElev * var3);
  544.       var4.x = (int)(var5 * this.dist / (this.dist - var9) * (double)this.ratio + (double)this.originX);
  545.       var4.y = (int)(-var7 * this.dist / (this.dist - var9) * (double)this.ratio + (double)this.originY);
  546.       return var4;
  547.    }
  548.  
  549.    public void draw3DLine(Graphics var1, float var2, float var3, float var4, float var5, float var6, float var7) {
  550.       Point var8 = this.transferTo2D(var2, var3, var4);
  551.       Point var9 = this.transferTo2D(var5, var6, var7);
  552.       var1.drawLine(var8.x, var8.y, var9.x, var9.y);
  553.    }
  554.  
  555.    public void draw3DBar(Graphics var1, float var2, float var3, float var4, float var5, float var6, float var7, Color var8, String var9, boolean var10) {
  556.       Point[] var11 = new Point[8];
  557.       int[] var12 = new int[5];
  558.       int[] var13 = new int[5];
  559.       var11[0] = this.transferTo2D(var2, var3, var4);
  560.       var11[1] = this.transferTo2D(var2 + var5, var3, var4);
  561.       var11[2] = this.transferTo2D(var2 + var5, var3, var4 - var6);
  562.       var11[3] = this.transferTo2D(var2, var3, var4 - var6);
  563.       var11[4] = this.transferTo2D(var2, var3 + var7, var4);
  564.       var11[5] = this.transferTo2D(var2 + var5, var3 + var7, var4);
  565.       var11[6] = this.transferTo2D(var2 + var5, var3 + var7, var4 - var6);
  566.       var11[7] = this.transferTo2D(var2, var3 + var7, var4 - var6);
  567.       if (var11[4].x - var11[3].x > var11[2].x - var11[5].x) {
  568.          var12[0] = var11[0].x;
  569.          var12[1] = var11[4].x;
  570.          var12[2] = var11[7].x;
  571.          var12[3] = var11[3].x;
  572.          var12[4] = var11[0].x;
  573.          var13[0] = var11[0].y;
  574.          var13[1] = var11[4].y;
  575.          var13[2] = var11[7].y;
  576.          var13[3] = var11[3].y;
  577.          var13[4] = var11[0].y;
  578.       } else {
  579.          var12[0] = var11[1].x;
  580.          var12[1] = var11[2].x;
  581.          var12[2] = var11[6].x;
  582.          var12[3] = var11[5].x;
  583.          var12[4] = var11[1].x;
  584.          var13[0] = var11[1].y;
  585.          var13[1] = var11[2].y;
  586.          var13[2] = var11[6].y;
  587.          var13[3] = var11[5].y;
  588.          var13[4] = var11[1].y;
  589.       }
  590.  
  591.       var1.setColor(var8.darker().darker());
  592.       var1.fillPolygon(var12, var13, 5);
  593.       if (var10) {
  594.          var1.setColor(this.fontColor);
  595.          var1.drawPolygon(var12, var13, 5);
  596.       }
  597.  
  598.       var12[0] = var11[4].x;
  599.       var12[1] = var11[5].x;
  600.       var12[2] = var11[6].x;
  601.       var12[3] = var11[7].x;
  602.       var12[4] = var11[4].x;
  603.       var13[0] = var11[4].y;
  604.       var13[1] = var11[5].y;
  605.       var13[2] = var11[6].y;
  606.       var13[3] = var11[7].y;
  607.       var13[4] = var11[4].y;
  608.       var1.setColor(var8.darker());
  609.       var1.fillPolygon(var12, var13, 5);
  610.       if (var10) {
  611.          var1.setColor(this.fontColor);
  612.          var1.drawPolygon(var12, var13, 5);
  613.       }
  614.  
  615.       var12[0] = var11[0].x;
  616.       var12[1] = var11[1].x;
  617.       var12[2] = var11[5].x;
  618.       var12[3] = var11[4].x;
  619.       var12[4] = var11[0].x;
  620.       var13[0] = var11[0].y;
  621.       var13[1] = var11[1].y;
  622.       var13[2] = var11[5].y;
  623.       var13[3] = var11[4].y;
  624.       var13[4] = var11[0].y;
  625.       var1.setColor(var8);
  626.       var1.fillPolygon(var12, var13, 5);
  627.       if (var10) {
  628.          var1.setColor(this.fontColor);
  629.          var1.drawPolygon(var12, var13, 5);
  630.       }
  631.  
  632.    }
  633.  
  634.    static {
  635.       defaultColors = new Color[]{Color.red, Color.blue, Color.green, Color.yellow, Color.magenta, Color.cyan, Color.orange, Color.pink, Color.darkGray};
  636.    }
  637. }
  638.