Esempio n. 1
0
  public IFieldVisualizer alpha(float a) {
    if (a < 0f) alpha = 0f;
    else if (a > 1f) alpha = 1f;
    else alpha = a;

    minColor =
        new IColor(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), (int) (alpha * 255));
    maxColor =
        new IColor(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), (int) (alpha * 255));

    return this;
  }
Esempio n. 2
0
 public IFieldVisualizer colorRange(IColor minClr, IColor maxClr) {
   minColor = minClr;
   maxColor = maxClr;
   autoColorAdjust = true;
   if (alpha != 1f) {
     minColor =
         new IColor(
             minColor.getRed(), minColor.getGreen(), minColor.getBlue(), (int) (alpha * 255));
     maxColor =
         new IColor(
             maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), (int) (alpha * 255));
   }
   return this;
 }
Esempio n. 3
0
  public IFieldVisualizer colorRange(
      IColor minColor, double minLength, IColor maxColor, double maxLength) {
    this.minColor = minColor;
    minLength = minLength;
    this.maxColor = maxColor;
    maxLength = maxLength;
    autoColorAdjust = false;

    if (alpha != 1f) {
      minColor =
          new IColor(
              minColor.getRed(), minColor.getGreen(), minColor.getBlue(), (int) (alpha * 255));
      maxColor =
          new IColor(
              maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), (int) (alpha * 255));
    }

    return this;
  }
Esempio n. 4
0
  public synchronized void interact(ArrayList<IDynamics> agents) {

    if (!fieldSet || updateAlways) {

      // reset
      for (int i = 0; i < vectors.length; i++) {
        for (int j = 0; j < vectors[i].length; j++) {
          for (int k = 0; k < vectors[i][j].length; k++) {
            vectors[i][j][k].zero();
          }
        }
      }

      for (int a = 0; a < agents.size(); a++) {
        if (agents.get(a) instanceof I3DFieldI) {
          I3DFieldI field = (I3DFieldI) agents.get(a);
          for (int i = 0; i < vectors.length; i++) {
            for (int j = 0; j < vectors[i].length; j++) {
              for (int k = 0; k < vectors[i][j].length; k++) {
                // add field force
                vectors[i][j][k].add(field.get(arrows[i][j][k].root()));
              }
            }
          }
        } else if (agents.get(a)
            instanceof I2DFieldI) { // not clean way to do this. I2DField.applyField is issue.
          I2DFieldI field = (I2DFieldI) agents.get(a);

          for (int i = 0; i < vectors.length; i++) {
            for (int j = 0; j < vectors[i].length; j++) {
              for (int k = 0; k < vectors[i][j].length; k++) {
                // add field force
                vectors[i][j][k].add(field.get(arrows[i][j][k].root()).to3d());
              }
            }
          }
        }
      }

      if (autoColorAdjust || autoLengthAdjust) {
        for (int i = 0; i < vectors.length; i++) {
          for (int j = 0; j < vectors[i].length; j++) {
            for (int k = 0; k < vectors[i][j].length; k++) {
              double len = vectors[i][j][k].len();
              if (i == 0 && j == 0 && k == 0) {
                minLength = maxLength = len;
              } else {
                if (len < minLength) minLength = len;
                if (len > maxLength) maxLength = len;
              }
            }
          }
        }
      }

      for (int i = 0; i < arrows.length; i++) {
        for (int j = 0; j < arrows[i].length; j++) {
          for (int k = 0; k < arrows[i][j].length; k++) {

            // minLength/maxLength is for the original length, not scaled one.
            if (minColor != null && maxColor != null) {
              double len = vectors[i][j][k].len();
              if (IG.eq(minLength, maxLength)) {
                arrows[i][j][k].clr(maxColor);
              } else if (len <= minLength) arrows[i][j][k].clr(minColor);
              else if (len >= maxLength) arrows[i][j][k].clr(maxColor);
              else {
                double r = (len - minLength) / (maxLength - minLength);
                int red = (int) ((maxColor.getRed() - minColor.getRed()) * r + minColor.getRed());
                int green =
                    (int) ((maxColor.getGreen() - minColor.getGreen()) * r + minColor.getGreen());
                int blue =
                    (int) ((maxColor.getBlue() - minColor.getBlue()) * r + minColor.getBlue());
                int alp =
                    (int) ((maxColor.getAlpha() - minColor.getAlpha()) * r + minColor.getAlpha());
                arrows[i][j][k].clr(red, green, blue, alp);
              }
            }
            if (vectors[i][j][k].len() > IConfig.tolerance) {

              if (fixLength) {
                if (autoLengthAdjust) {
                  vectors[i][j][k].len(spacing * scale);
                } else {
                  vectors[i][j][k].len(fixedLength);
                }
              } else {
                if (autoLengthAdjust) {
                  double r = 1.0;
                  if (!IG.eq(minLength, maxLength)) {
                    double len = vectors[i][j][k].len();
                    r = (len - minLength) / (maxLength - minLength);
                  }
                  r *= scale;
                  if (r < minAutoLengthRatio) {
                    r = minAutoLengthRatio;
                  }
                  vectors[i][j][k].len(r * spacing);
                } else {
                  vectors[i][j][k].mul(scale);
                }
              }
              if (autoSizeAdjust) {
                arrows[i][j][k].size(vectors[i][j][k].len() * arrowSizeRatio);
              }
              arrows[i][j][k].vector().set(vectors[i][j][k]);
              arrows[i][j][k].updateGraphic();

              if (!arrows[i][j][k].visible()) arrows[i][j][k].show();
            } else {
              arrows[i][j][k].hide();
            }
          }
        }
      }

      fieldSet = true;
    }
  }