示例#1
0
 // the MouseListener events
 public void mousePressed(MouseEvent evt) {
   Dimension dim = getSize();
   String layerName = (String) dialog.threeDLayerList.getSelectedValue();
   Layer selectedLayer = dialog.curTech.findLayer(layerName);
   GenMath.MutableDouble height = dialog.threeDDistanceMap.get(selectedLayer);
   int yValue =
       dim.height
           - (int)
               ((height.doubleValue() - lowHeight) / (highHeight - lowHeight) * dim.height
                   + 0.5);
   if (Math.abs(yValue - evt.getY()) > 5) {
     int bestDist = dim.height;
     for (Iterator<Layer> it = dialog.curTech.getLayers(); it.hasNext(); ) {
       Layer layer = it.next();
       if (layer.isPseudoLayer()) continue;
       height = dialog.threeDDistanceMap.get(layer);
       yValue =
           dim.height
               - (int)
                   ((height.doubleValue() - lowHeight) / (highHeight - lowHeight) * dim.height
                       + 0.5);
       int dist = Math.abs(yValue - evt.getY());
       if (dist < bestDist) {
         bestDist = dist;
         selectedLayer = layer;
       }
     }
     dialog.threeDLayerList.setSelectedValue(selectedLayer.getName(), true);
     dialog.threeDValuesChanged(false);
   }
 }
示例#2
0
 /** Method called when the factory reset is requested. */
 @Override
 public void reset() {
   for (Iterator<Layer> it = curTech.getLayers(); it.hasNext(); ) {
     Layer layer = it.next();
     assert !layer.isPseudoLayer();
     Setting thicknessSetting = layer.getThicknessSetting();
     Setting distanceSetting = layer.getDistanceSetting();
     setDouble(thicknessSetting, thicknessSetting.getDoubleFactoryValue());
     setDouble(distanceSetting, distanceSetting.getDoubleFactoryValue());
   }
 }
示例#3
0
 /** Method called when the "OK" panel is hit. Updates any changed fields in the 3D tab. */
 @Override
 public void term() {
   for (Iterator<Layer> it = curTech.getLayers(); it.hasNext(); ) {
     Layer layer = it.next();
     assert !layer.isPseudoLayer();
     GenMath.MutableDouble thickness = threeDThicknessMap.get(layer);
     GenMath.MutableDouble height = threeDDistanceMap.get(layer);
     setDouble(layer.getThicknessSetting(), thickness.doubleValue());
     setDouble(layer.getDistanceSetting(), height.doubleValue());
   }
 }
示例#4
0
    /** Method to repaint this ThreeDSideView. */
    @Override
    public void paint(Graphics g) {
      Dimension dim = getSize();
      g.setColor(Color.WHITE);
      g.fillRect(0, 0, dim.width, dim.height);
      g.setColor(Color.BLACK);
      g.drawLine(0, 0, 0, dim.height - 1);
      g.drawLine(0, dim.height - 1, dim.width - 1, dim.height - 1);
      g.drawLine(dim.width - 1, dim.height - 1, dim.width - 1, 0);
      g.drawLine(dim.width - 1, 0, 0, 0);

      String layerName = (String) dialog.threeDLayerList.getSelectedValue();
      Layer selectedLayer = dialog.curTech.findLayer(layerName);
      for (Iterator<Layer> it = dialog.curTech.getLayers(); it.hasNext(); ) {
        Layer layer = it.next();
        if (layer.isPseudoLayer()) continue;
        // if (!layer.isVisible()) continue;
        if (layer == selectedLayer) g.setColor(Color.RED);
        else g.setColor(Color.BLACK);
        GenMath.MutableDouble thickness = dialog.threeDThicknessMap.get(layer);
        GenMath.MutableDouble distance = dialog.threeDDistanceMap.get(layer);
        double dis = distance.doubleValue() + thickness.doubleValue() / 2;
        int yValue =
            dim.height - (int) ((dis - lowHeight) / (highHeight - lowHeight) * dim.height + 0.5);
        int yHeight = (int) (thickness.doubleValue() / (highHeight - lowHeight) * dim.height + 0.5);
        if (yHeight == 0) {
          g.drawLine(0, yValue, dim.width / 3, yValue);
        } else {
          // yHeight -= 4;
          int firstPart = dim.width / 6;
          int pointPos = dim.width / 4;
          g.drawLine(0, yValue - yHeight / 2, firstPart, yValue - yHeight / 2);
          g.drawLine(0, yValue + yHeight / 2, firstPart, yValue + yHeight / 2);
          g.drawLine(firstPart, yValue - yHeight / 2, pointPos, yValue);
          g.drawLine(firstPart, yValue + yHeight / 2, pointPos, yValue);
          g.drawLine(pointPos, yValue, dim.width / 3, yValue);
        }
        String string = layer.getName();
        Font font = new Font(User.getDefaultFont(), Font.PLAIN, 9);
        g.setFont(font);
        FontRenderContext frc = new FontRenderContext(null, true, true);
        GlyphVector gv = font.createGlyphVector(frc, string);
        LineMetrics lm = font.getLineMetrics(string, frc);
        double txtHeight = lm.getHeight();
        Graphics2D g2 = (Graphics2D) g;
        g2.drawGlyphVector(
            gv, dim.width / 3 + 1, (float) (yValue + txtHeight / 2) - lm.getDescent());
      }
    }
示例#5
0
  /**
   * Method called at the start of the dialog. Caches current values and displays them in the 3D
   * tab.
   */
  @Override
  public void init() {
    threeDTechnology.setText("Layer cross section for technology '" + curTech.getTechName() + "'");
    threeDLayerModel = new DefaultListModel();
    threeDLayerList = new JList(threeDLayerModel);
    threeDLayerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    threeDLayerPane.setViewportView(threeDLayerList);
    threeDLayerList.clearSelection();
    threeDLayerList.addMouseListener(
        new MouseAdapter() {
          public void mouseClicked(MouseEvent evt) {
            threeDValuesChanged(false);
          }
        });
    threeDThicknessMap = new HashMap<Layer, GenMath.MutableDouble>();
    threeDDistanceMap = new HashMap<Layer, GenMath.MutableDouble>();
    // Sorted by Height to be consistent with LayersTab
    for (Layer layer : curTech.getLayersSortedByName()) {
      if (layer.isPseudoLayer()) continue;
      threeDLayerModel.addElement(layer.getName());
      double thickness = getDouble(layer.getThicknessSetting());
      double distance = getDouble(layer.getDistanceSetting());
      threeDThicknessMap.put(layer, new GenMath.MutableDouble(thickness));
      threeDDistanceMap.put(layer, new GenMath.MutableDouble(distance));
    }
    threeDLayerList.setSelectedIndex(0);
    threeDHeight.getDocument().addDocumentListener(new ThreeDInfoDocumentListener(this));
    threeDThickness.getDocument().addDocumentListener(new ThreeDInfoDocumentListener(this));

    threeDSideView = new ThreeDSideView(this);
    threeDSideView.setMinimumSize(new java.awt.Dimension(200, 450));
    threeDSideView.setPreferredSize(new java.awt.Dimension(200, 450));
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 2;
    gbc.gridy = 1;
    gbc.gridwidth = 2;
    gbc.gridheight = 4;
    gbc.weightx = 0.5;
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.insets = new java.awt.Insets(4, 4, 4, 4);
    threeD.add(threeDSideView, gbc);
    threeDValuesChanged(false);
  }
示例#6
0
 public J3DAppearance(Layer layer, boolean visible) {
   super();
   this.layer = layer;
   EGraphics graphics = layer.getGraphics();
   setOtherAppearanceValues(
       graphics.getTransparencyMode().mode,
       (float) graphics.getTransparencyFactor(),
       graphics.getColor(),
       visible);
 }
示例#7
0
    ThreeDSideView(ThreeDTab dialog) {
      this.dialog = dialog;
      addMouseListener(this);
      addMouseMotionListener(this);

      LayerVisibility lv = LayerVisibility.getLayerVisibility();
      for (Iterator<Layer> it = dialog.curTech.getLayers(); it.hasNext(); ) {
        Layer layer = it.next();
        if (layer.isPseudoLayer()) continue;
        if (!lv.isVisible(layer)) continue;
        GenMath.MutableDouble thickness = dialog.threeDThicknessMap.get(layer);
        GenMath.MutableDouble distance = dialog.threeDDistanceMap.get(layer);
        double dis = distance.doubleValue();
        double thick = thickness.doubleValue() / 2;
        double valLow = dis - thick;
        double valHig = dis + thick;

        if (valLow < lowHeight) lowHeight = valLow;
        if (valHig > highHeight) highHeight = valHig;
      }
      lowHeight -= 4;
      highHeight += 4;
    }