Package cranks.geom

Examples of cranks.geom.Line


    }
  }

  private void copyAndMoveTriangle() {
    Triangle tri = (Triangle)(cTriangle.getSelectedItem());
    Line selectedSide = (Line)(cPickSide.getSelectedItem());
    Line newSide = (Line)(cNewSide.getSelectedItem());
    boolean orientation = (cSelectOrientation.getSelectedIndex() == 0);
    ConstructionStep step = new ConstructionStep(this, new Object[] {tri,
              selectedSide, newSide, new Boolean(orientation)}, COPY_MOVE);
    doConstruction(step);
  }
View Full Code Here


  }

  public void doConstruction(ConstructionStep step) {
    if (step.getConstructionType() == COPY_MOVE) {
      Triangle tri = (Triangle)step.getInputs()[0];
      Line selectedSide = (Line)step.getInputs()[1];
      Line newSide = (Line)step.getInputs()[2];
      boolean orientation = ((Boolean)step.getInputs()[3]).booleanValue();
      if (Math.abs(selectedSide.getLength()-newSide.getLength()) < Point.LEAST_COUNT) {
        Point[] vertices = tri.getVertices();
        Point ptOppSelSide = new Point();
        if (vertices[0].canIntersect(selectedSide))
          if (vertices[1].canIntersect(selectedSide))
            ptOppSelSide.setCoordinates(vertices[2].getX(), vertices[2].getY());
          else
            ptOppSelSide.setCoordinates(vertices[1].getX(), vertices[1].getY());
        else
          ptOppSelSide.setCoordinates(vertices[0].getX(), vertices[0].getY());

        Line line1 = (orientation)?
                  (new Line(selectedSide.getStart(), newSide.getStart())):
                  (new Line(selectedSide.getStart(), newSide.getEnd()));
        Line line2 = (orientation)?
                  (new Line(selectedSide.getEnd(), newSide.getEnd())):
                  (new Line(selectedSide.getEnd(), newSide.getStart()));
        Point centreOfRotation;
        Angle angleOfRotation;
        if (line1.getLength() < Point.LEAST_COUNT) {
          centreOfRotation = new Point(line1.getStart().getX(),line1.getStart().getY());
          angleOfRotation = (new Line(centreOfRotation, line2.getEnd())).getSlope().
                    sub((new Line(centreOfRotation, line2.getStart())).getSlope());
        }
        else if (line2.getLength() < Point.LEAST_COUNT) {
          centreOfRotation = new Point(line2.getStart().getX(),line2.getStart().getY());
          angleOfRotation = (new Line(centreOfRotation, line1.getEnd())).getSlope().
                    sub((new Line(centreOfRotation, line1.getStart())).getSlope());
        }
        else {
          Line perpLine1 = new Line(line1.midPoint(),line1.getSlope().
                              add(new Angle(Math.PI/2)),1);
          Line perpLine2 = new Line(line2.midPoint(),line2.getSlope().
                              add(new Angle(Math.PI/2)),1);
          if (perpLine1.canIntersect(perpLine2)) {
            centreOfRotation = perpLine1.intersect(perpLine2)[0];
            angleOfRotation = (new Line(centreOfRotation, line1.getEnd())).getSlope().
                    sub((new Line(centreOfRotation, line1.getStart())).getSlope());
          }
          else {
            Point translation = new Point(
                      line1.getEnd().getX() - line1.getStart().getX(),
                      line1.getEnd().getY() - line1.getStart().getY());
View Full Code Here

        slope = new Angle(((Line)obj2).getSlope().getAngle());
      else {
        double slopeDegrees = ((Double)obj2).doubleValue();
        slope = new Angle(Math.toRadians(slopeDegrees));
      }
      Line newLine = new Line(p, slope, length);
      newLine.addToObjects(objects);
      if (lengthReference)
        if (obj1 instanceof Line) {
          ((Line)obj1).addPropertyChangeListener(Line.PROP_LENGTH, newLine);
          newLine.addPropertyChangeListener(Line.PROP_LENGTH, (Line)obj1);
        }
        else {
          ((Circle)obj1).addPropertyChangeListener(Circle.PROP_RADIUS, newLine);
          newLine.addPropertyChangeListener(Circle.PROP_RADIUS, (Circle)obj1);
        }
      if (slopeReference) {
        ((Line)obj2).addPropertyChangeListener(Line.PROP_ANGLE, newLine);
        newLine.addPropertyChangeListener(Line.PROP_ANGLE, (Line)obj2);
      }       
      clearAndHide();
      step.setOutputs(new Object[]{newLine.getEnd(), newLine});
      fireUndoableEditUpdate(new UndoableEditEvent(this, step));
    }
    else if (step.getConstructionType() == TWO_POINTS) {
      Point p1 = (Point)step.getInputs()[0];
      Point p2 = (Point)step.getInputs()[1];
      if (!p1.equalTo(p2)) {
        Line newLine = new Line(p1, p2);
        newLine.addToObjects(objects);
        clearAndHide();
        step.setOutputs(new Object[]{newLine});
        fireUndoableEditUpdate(new UndoableEditEvent(this, step));
      }
      else {
View Full Code Here

      for (int i = 0; i<objects.size(); i++)
        objects.elementAt(i).setNumber(i+1);
      if (step.getConstructionType() == ONE_POINT) {
        Object obj1 = step.getInputs()[1];
        Object obj2 = step.getInputs()[2];
        Line newLine = (Line)step.getOutputs()[1];
        if (!(obj1 instanceof Double))
          if (obj1 instanceof Line) {
            ((Line)obj1).removePropertyChangeListener(Line.PROP_LENGTH, newLine);
            newLine.removePropertyChangeListener(Line.PROP_LENGTH, (Line)obj1);
          }
          else {
            ((Circle)obj1).removePropertyChangeListener(Circle.PROP_RADIUS, newLine);
            newLine.removePropertyChangeListener(Circle.PROP_RADIUS, (Circle)obj1);
          }
        if (!(obj2 instanceof Double)) {
          ((Line)obj2).removePropertyChangeListener(Line.PROP_ANGLE, newLine);
          newLine.removePropertyChangeListener(Line.PROP_ANGLE, (Line)obj2);
        }
      }
    }
    else {
      System.err.println("Bad construction type");
View Full Code Here

    int fixed = Integer.parseInt(fixedLink.substring(fixedLink.length()-1));
    double ternaryLength = 0;
    Angle ternaryAngle = new Angle();
    if (rbTernary.isSelected()) {
      Triangle ternaryLink = (Triangle)cTernaryLink.getSelectedItem();
      Line link3 = (fixed > 2)?(lines[(fixed-1)-2]):(lines[(fixed-1)+2]);
      if (!(link3.getAssocObjects().contains(ternaryLink))) {
        JOptionPane.showMessageDialog(this, "Ternary link is not connected to "+
                  "mechanism", "Try Again", JOptionPane.ERROR_MESSAGE);
        return;
      }
      Line link2 = (fixed == 4)?lines[0]:lines[(fixed - 1) + 1];
      Point intersectionOfLink2Link3 = (test(link3.getStart(), link2))?
                  (link3.getStart()):(link3.getEnd());
      Line ternaryLine = null;
      for (int i = 0; i<3; i++)
        if ( test(intersectionOfLink2Link3, ternaryLink.getSides()[i]) &&
             !ternaryLink.getSides()[i].equals(link3))
           ternaryLine = ternaryLink.getSides()[i];
      ternaryLength = ternaryLine.getLength();
      ternaryAngle = getAngle(ternaryLine, link3);
    }
   
    mechanism.setFixed(1);
    for (int i = 0; i<4; i++)
View Full Code Here

    }
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == cSelectLine) {
      Line L1 = (Line)cSelectLine.getSelectedItem();
      if (L1 != null) {
        tfTranslationX.setText(
            Double.toString(L1.getEnd().getX() - L1.getStart().getX()));
        tfTranslationY.setText(
            Double.toString(L1.getEnd().getY() - L1.getStart().getY()));
      }
      else {
        tfTranslationX.setText("");
        tfTranslationY.setText("");
      }
View Full Code Here

TOP

Related Classes of cranks.geom.Line

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.