Fixed bad sorting
Should now sort edges based on the correct cross product Fixed support edge connecting to the wrong vertex Added in some more checks Draw shapes slightly more correctly?
This commit is contained in:
@@ -11,7 +11,9 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
@@ -41,14 +43,17 @@ public class MeshingTest2 extends JPanel {
|
||||
|
||||
JFrame f;
|
||||
|
||||
// private int windowWidth = 1200;
|
||||
// private int windowHeight = 1000;
|
||||
|
||||
private int windowWidth = 1200;
|
||||
private int windowHeight = 1000;
|
||||
private int windowHeight = 1400;
|
||||
|
||||
// private int centerX = 600;
|
||||
// private int centerY = 400;
|
||||
|
||||
private int centerX = 400;
|
||||
private int centerY = 1200;
|
||||
private int centerY = 100;
|
||||
|
||||
private Graphics g;
|
||||
|
||||
@@ -389,6 +394,20 @@ public class MeshingTest2 extends JPanel {
|
||||
if ( data != null ) {
|
||||
Collection< Vertex > polygons = data;
|
||||
|
||||
// Set< HalfEdge > positiveEdges = new HashSet< HalfEdge >();
|
||||
// Set< HalfEdge > negativeEdges = new HashSet< HalfEdge >();
|
||||
//
|
||||
// for ( Vertex v : polygons ) {
|
||||
// for ( HalfEdge e : v ) {
|
||||
// if ( Mesh.isPositive( e ) ) {
|
||||
// positiveEdges.add( e );
|
||||
// } else {
|
||||
// negativeEdges.add( e );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
EdgeSet edges = new EdgeSet();
|
||||
for ( Vertex vert : polygons ) {
|
||||
for ( HalfEdge edge : vert ) {
|
||||
@@ -397,60 +416,72 @@ public class MeshingTest2 extends JPanel {
|
||||
Point p2 = edge.getDest().getPosition();
|
||||
g.drawLine(
|
||||
( int ) ( p1.getX() * scale ) + centerX,
|
||||
( int ) ( p1.getY() * scale ) + centerY,
|
||||
( int ) ( - p1.getY() * scale ) + centerY,
|
||||
( int ) ( p2.getX() * scale ) + centerX,
|
||||
( int ) ( p2.getY() * scale ) + centerY
|
||||
( int ) ( - p2.getY() * scale ) + centerY
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
final double diff = scale * 0.3;
|
||||
final Point point = vert.getPosition();
|
||||
g.drawRect( ( int ) ( point.getX() * scale ) + centerX - ( int ) diff, ( int ) ( point.getY() * scale ) + centerY - ( int ) diff, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
final double diff = scale * 0.15;
|
||||
final Point point = vert.getPosition();
|
||||
g.setColor( Color.BLACK );
|
||||
g.drawRect( ( int ) ( point.getX() * scale ) + centerX - ( int ) diff, ( int ) ( - point.getY() * scale ) + centerY - ( int ) diff, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( polygons != null ) {
|
||||
System.out.println( "Polygon count: " + polygons.size() );
|
||||
// System.out.println( "Polygon count: " + polygons.size() );
|
||||
g.setColor( Color.BLACK );
|
||||
int count = 2;
|
||||
for ( final EdgePolygon p : polygons ) {
|
||||
final Collection< HalfEdge > edges = p.getEdges();
|
||||
|
||||
for ( HalfEdge edge : edges ) {
|
||||
Point p1 = edge.getOrigin().getPosition();
|
||||
Point p2 = edge.getDest().getPosition();
|
||||
g.drawLine(
|
||||
( int ) ( p1.getX() * scale ) + centerX + 400,
|
||||
( int ) ( p1.getY() * scale ) + centerY,
|
||||
( int ) ( p2.getX() * scale ) + centerX + 400,
|
||||
( int ) ( p2.getY() * scale ) + centerY
|
||||
);
|
||||
// g.setColor( Color.BLACK );
|
||||
// for ( HalfEdge edge : edges ) {
|
||||
// Point p1 = edge.getOrigin().getPosition();
|
||||
// Point p2 = edge.getDest().getPosition();
|
||||
// g.drawLine(
|
||||
// ( int ) ( p1.getX() * scale ) + centerX + ( 170 * count ),
|
||||
// ( int ) ( - p1.getY() * scale ) + centerY,
|
||||
// ( int ) ( p2.getX() * scale ) + centerX + ( 170 * count ),
|
||||
// ( int ) ( - p2.getY() * scale ) + centerY
|
||||
// );
|
||||
//
|
||||
// g.drawLine(
|
||||
// ( int ) ( p1.getX() * scale ) + centerX + 170,
|
||||
// ( int ) ( - p1.getY() * scale ) + centerY,
|
||||
// ( int ) ( p2.getX() * scale ) + centerX + 170,
|
||||
// ( int ) ( - p2.getY() * scale ) + centerY
|
||||
// );
|
||||
// }
|
||||
// count++;
|
||||
|
||||
int size = edges.size();
|
||||
int[] xPoints = new int[ size ];
|
||||
int[] yPoints = new int[ size ];
|
||||
|
||||
HalfEdge edge = edges.iterator().next();
|
||||
for ( int i = 0; i < edges.size(); ++i ) {
|
||||
final Point point = edge.getOrigin().getPosition();
|
||||
xPoints[ i ] = ( int ) ( point.getX() * scale ) + centerX + 400;
|
||||
yPoints[ i ] = ( int ) ( - point.getY() * scale ) + centerY;
|
||||
edge = edge.getNext();
|
||||
}
|
||||
|
||||
// int size = edges.size();
|
||||
// int[] xPoints = new int[ size ];
|
||||
// int[] yPoints = new int[ size ];
|
||||
//
|
||||
// HalfEdge edge = edges.iterator().next();
|
||||
// for ( int i = 0; i < edges.size(); ++i ) {
|
||||
// final Point point = edge.getOrigin().getPosition();
|
||||
// xPoints[ i ] = ( int ) ( point.getX() * scale ) + centerX;
|
||||
// yPoints[ i ] = ( int ) ( point.getY() * scale ) + centerY;
|
||||
g.setColor( new Color( ( int ) ( Math.random() * 0xFFFFFF ) ) );
|
||||
g.fillPolygon( xPoints, yPoints, size );
|
||||
}
|
||||
|
||||
// g.setColor( Color.BLACK );
|
||||
// for ( final EdgePolygon p : polygons ) {
|
||||
// for ( final Vertex v : p.getVertices() ) {
|
||||
// final Point point = v.getPosition();
|
||||
//
|
||||
// double diff = scale * .3;
|
||||
// g.drawRect( 400 + ( int ) ( point.getX() * scale ) + centerX - ( int ) diff, ( int ) ( point.getY() * scale ) + centerY - ( int ) diff, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
// }
|
||||
//
|
||||
// g.setColor( new Color( ( int ) ( Math.random() * 0xFFFFFF ) ) );
|
||||
// g.fillPolygon( xPoints, yPoints, size );
|
||||
}
|
||||
|
||||
g.setColor( Color.BLACK );
|
||||
for ( final EdgePolygon p : polygons ) {
|
||||
for ( final Vertex v : p.getVertices() ) {
|
||||
final Point point = v.getPosition();
|
||||
|
||||
double diff = scale * .3;
|
||||
g.drawRect( 400 + ( int ) ( point.getX() * scale ) + centerX - ( int ) diff, ( int ) ( point.getY() * scale ) + centerY - ( int ) diff, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
// Point[] points = {
|
||||
|
||||
Reference in New Issue
Block a user