Files
secondo/Javagui/viewer/viewer3d/graphic2d/Line2D.java
2026-01-23 17:03:45 +08:00

185 lines
5.0 KiB
Java

//This file is part of SECONDO.
//Copyright (C) 2004, University in Hagen, Department of Computer Science,
//Database Systems for New Applications.
//SECONDO is free software; you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation; either version 2 of the License, or
//(at your option) any later version.
//SECONDO is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
//along with SECONDO; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package viewer.viewer3d.graphic2d;
/************************
Autor : Thomas Behr
Version : 1.0
Datum : 3.7.2000
######################## */
import java.awt.image.*;
import java.awt.*;
import gui.idmanager.*;
public class Line2D extends Figure2D{
/** creates a new Line by given Points */
public Line2D( Point2D P1, Point2D P2, ID aID) {
x1 = (int) P1.getX();
y1 = (int) P1.getY();
c1r = P1.getRed();
c1g = P1.getGreen();
c1b = P1.getBlue();
x2 = (int) P2.getX();
y2 = (int) P2.getY();
c2r = P2.getRed();
c2g = P2.getGreen();
c2b = P2.getBlue();
empty = false;
myID = new ID();
myID.equalize(aID);
}
public Line2D(Point2D P1, Point2D P2){
this(P1,P2,IDManager.getNextID());
}
/** returns a copy from this */
public Figure2D duplicate(){
Line2D C = new Line2D(new Point2D(x1,y1,c1r,c1g,c1b),
new Point2D(x2,y2,c2r,c2g,c2b));
C.myID.equalize(myID);
return C;
}
/** check for equal position */
public boolean equalsCoordinates(Line2D L){
return ( x1==L.x1 && y1==L.y1 && x2==L.x2 && y2==L.y2) ||
( x1==L.x2 && y1==L.y2 && x2==L.x1 && y2==L.y1);
}
public boolean equals(Figure2D f){
if(!(f instanceof Line2D)){
return false;
}
Line2D L = (Line2D) f;
return x1 == L.x1 &&
x2 == L.x2 &&
y1 == L.y1 &&
y2 == L.y2 &&
c1r == L.c1r && c2r == L.c2r &&
c1g == L.c1g && c2g == L.c2g &&
c1b == L.c1b && c2b == L.c2b &&
myID.equals(L.myID);
}
/**
* paint this line on img
* @ param gradient: paint in single color or with gradient
*/
public void paint(Graphics g, boolean filled, boolean Gradient) {
if( !empty) {
if (Gradient) {
double delta;
int deltaCr = c2r-c1r;
int deltaCg = c2g-c1g;
int deltaCb = c2b-c1b;
double deltaX = x2-x1;
double deltaY = y2-y1;
int ColorValue;
int x;
int y;
// int minY = img.getMinY();
// int minX = img.getMinX();
// int maxX = minX + img.getWidth();
// int maxY = minY + img.getHeight();
if ( Math.abs(y2-y1) > Math.abs(x2-x1) ) { // steile Linie
for(y=Math.min(y2,y1); y<=Math.max(y2,y1);y++) {
delta= (double)(y-y1)/deltaY;
x = (int)(x1 + delta*deltaX);
g.setColor(new Color((int) (c1r+delta*deltaCr),
(int) (c1g+delta*deltaCg), (int) (c1b+delta*deltaCb)));
g.fillRect(x,y,1,1);
} // for
} // if
else { // flat line
for( x = Math.min(x1,x2);x<=Math.max(x1,x2);x++) {
delta = (double)(x-x1)/deltaX;
y = (int) ( y1 + delta*deltaY);
ColorValue = (int) 4278190080L + // Alpha-Value
(int) (c1r+delta*deltaCr) * 65536 +
(int) (c1g+delta*deltaCg) * 256 +
(int) (c1b+delta*deltaCb);
g.setColor(new Color(ColorValue));
g.fillRect(x,y,1,1);
} // for
}// else
}
else { // !Gradient
Color C = new Color( (c1r+c2r)/2,(c1g+c2g)/2,(c1b+c2b)/2);
g.setColor(C);
g.drawLine(x1,y1,x2,y2);
}// else
} // if (!empty)
} // paint
/** get the x-coordinate of endpoint 1 */
public int getX1(){ return x1;}
/** get the x-coordinate of endpoint 2 */
public int getX2(){ return x2;}
/** get the y-coordinate of endpoint 1 */
public int getY1(){ return y1;}
/** get the y-coordinate of endpoint 2 */
public int getY2(){ return y2;}
/** set the x-coordinate of endpoint 1 */
public void setX1(int X){ x1 = X;}
/** set the x-coordinate of endpoint 2 */
public void setX2(int X){ x2 = X;}
/** set the y-coordinate of endpoint 1 */
public void setY1(int Y){ y1 = Y;}
/** set the y-coordinate of endpoint 2 */
public void setY2(int Y){ y2 = Y;}
/** check for emptyness */
public void setEmpty(boolean e){ // empty by Clipping !
empty = e;
}
/** a coordinate */
private int x1,x2,y1,y2; // the points
/** a color-part */
private int c1r,c1g,c1b,
c2r,c2g,c2b; // rgb-colors of the points
/** is this a empty line */
private boolean empty;
} // class Line2D