Added single chain link resolution and many debug prints and commented out blocks of code
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -18,8 +18,10 @@ 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.Random;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
@@ -178,7 +180,7 @@ public class MeshingTest2 extends JPanel {
|
||||
|
||||
private static void test( final Collection< Plane > planes ) {
|
||||
final long processAllStart = System.currentTimeMillis();
|
||||
planes.parallelStream().forEach( plane -> {
|
||||
planes.stream().forEach( plane -> {
|
||||
try {
|
||||
Mesh< RegionSimple > mesh = new Mesh< RegionSimple >( () -> { return new RegionSimple( GluWindingRule.ODD ); } );
|
||||
|
||||
@@ -188,7 +190,7 @@ public class MeshingTest2 extends JPanel {
|
||||
long start = System.currentTimeMillis();
|
||||
mesh.simplify();
|
||||
mesh.generateRegions();
|
||||
final Collection< EdgePolygon > polys = mesh.copyOf().mesh();
|
||||
final Collection< EdgePolygon > polys = mesh.copyOf().mesh( false );
|
||||
long end = System.currentTimeMillis();
|
||||
System.out.println( plane.polygons.size() + " to " + polys.size() + ":\t " + ( end - start ) + "ms" );
|
||||
} catch ( IllegalStateException e ) {
|
||||
@@ -263,7 +265,7 @@ public class MeshingTest2 extends JPanel {
|
||||
// Make sure this works
|
||||
mesh = mesh.copyOf();
|
||||
|
||||
final Collection< EdgePolygon > polys = mesh.mesh();
|
||||
final Collection< EdgePolygon > polys = mesh.mesh( false );
|
||||
chains = mesh.chains;
|
||||
long end = System.currentTimeMillis();
|
||||
System.out.println( "Took " + ( end - start ) + "ms" );
|
||||
@@ -278,20 +280,138 @@ public class MeshingTest2 extends JPanel {
|
||||
private static Collection< EdgePolygon > test() {
|
||||
Mesh< RegionSimple > mesh = new Mesh< RegionSimple >( () -> { return new RegionSimple( GluWindingRule.ODD ); } );
|
||||
|
||||
mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
new Point( -1, 0 ),
|
||||
new Point( 1, -2 ),
|
||||
new Point( 1, -1 ),
|
||||
new Point( 2, -1 ),
|
||||
new Point( 1, 0 ),
|
||||
new Point( 1, 1 )
|
||||
) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( -1, 0 ),
|
||||
// new Point( 1, -2 ),
|
||||
// new Point( 1, -1 ),
|
||||
// new Point( 2, -1 ),
|
||||
// new Point( 1, 0 ),
|
||||
// new Point( 1, 1 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 0, 0 ),
|
||||
// new Point( 5, 0 ),
|
||||
// new Point( 5, 1 ),
|
||||
// new Point( 4, 1 ),
|
||||
// new Point( 4, 2 ),
|
||||
// new Point( 3, 2 ),
|
||||
// new Point( 3, 3 ),
|
||||
// new Point( 2, 3 ),
|
||||
// new Point( 2, 4 ),
|
||||
// new Point( 0, 4 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 0, 0 ),
|
||||
// new Point( 2, 0 ),
|
||||
// new Point( 2, 1 ),
|
||||
// new Point( 1, 1 ),
|
||||
// new Point( 1, 2 ),
|
||||
// new Point( 2, 2 ),
|
||||
// new Point( 2, 4 ),
|
||||
// new Point( 1, 4 ),
|
||||
// new Point( 1, 3 ),
|
||||
// new Point( 0, 3 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 0, 0 ),
|
||||
// new Point( 3, 0 ),
|
||||
// new Point( 3, 1 ),
|
||||
// new Point( 4, 1 ),
|
||||
// new Point( 4, 2 ),
|
||||
// new Point( 2, 2 ),
|
||||
// new Point( 2, 1 ),
|
||||
// new Point( 1, 1 ),
|
||||
// new Point( 0, 1 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 0, 0 ),
|
||||
// new Point( 2, 0 ),
|
||||
// new Point( 2, 1 ),
|
||||
// new Point( 3, 1 ),
|
||||
// new Point( 3, 2 ),
|
||||
// new Point( 2, 2 ),
|
||||
// new Point( 2, 5 ),
|
||||
// new Point( 1, 5 ),
|
||||
// new Point( 1, 7 ),
|
||||
// new Point( 0, 7 ),
|
||||
// new Point( 0, 4 ),
|
||||
// new Point( 1, 4 ),
|
||||
// new Point( 1, 1 ),
|
||||
// new Point( 0, 1 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 1, 0 ),
|
||||
// new Point( 6, 0 ),
|
||||
// new Point( 6, 1 ),
|
||||
// new Point( 4, 1 ),
|
||||
// new Point( 4, 2 ),
|
||||
// new Point( 2, 2 ),
|
||||
// new Point( 2, 3 ),
|
||||
// new Point( 0, 3 ),
|
||||
// new Point( 0, 1 ),
|
||||
// new Point( 1, 1 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 3, 1 ),
|
||||
// new Point( 3, 0 ),
|
||||
// new Point( 10, 0 ),
|
||||
// new Point( 10, 6 ),
|
||||
// new Point( 9, 6 ),
|
||||
// new Point( 9, 4 ),
|
||||
// new Point( 8, 4 ),
|
||||
// new Point( 8, 3 ),
|
||||
// new Point( 5, 3 ),
|
||||
// new Point( 5, 2 ),
|
||||
// new Point( 0, 2 ),
|
||||
// new Point( 0, 1 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 7, 2 ),
|
||||
// new Point( 9, 2 ),
|
||||
// new Point( 9, 3 ),
|
||||
// new Point( 7, 3 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 0, 0 ),
|
||||
// new Point( 6, 1 ),
|
||||
// new Point( 7, 2 ),
|
||||
// new Point( 1, 1 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 2, 2 ),
|
||||
// new Point( 8, 3 ),
|
||||
// new Point( 9, 4 ),
|
||||
// new Point( 3, 3 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 2.816104467407629, -3.7472939407853763 ),
|
||||
// new Point( 2.815383313894849, -2.9972942874937156 ),
|
||||
// new Point( 2.0028836894955497, -2.9980755371325607 ),
|
||||
// new Point( 2.0036048430083304, -3.7480751904242213 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
// mesh.addPolygon( new Polygon( Arrays.asList(
|
||||
// new Point( 2.8144217758778085, -1.9972947497715015 ),
|
||||
// new Point( 2.0019221514785093, -1.998075999410347 ),
|
||||
// new Point( 2.00264330499129, -2.748075652702007 ),
|
||||
// new Point( 2.8151429293905887, -2.747294403063162 )
|
||||
// ) ), RegionRuleWinding.CLOCKWISE );
|
||||
|
||||
mesh.simplify();
|
||||
|
||||
mesh.generateRegions();
|
||||
|
||||
final Collection< EdgePolygon > polys = mesh.mesh();
|
||||
try {
|
||||
final Collection< EdgePolygon > polys = mesh.mesh( false );
|
||||
chains = mesh.chains;
|
||||
return polys;
|
||||
} catch ( Exception e ) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
final Collection< EdgePolygon > polys = mesh.mesh( true );
|
||||
chains = mesh.chains;
|
||||
|
||||
return polys;
|
||||
@@ -492,9 +612,13 @@ public class MeshingTest2 extends JPanel {
|
||||
g.drawLine( 0, ( int ) ( scale * centerY ) + offsetY, getWidth(), ( int ) ( scale * centerY ) + offsetY );
|
||||
g.setColor( Color.BLACK );
|
||||
|
||||
int highestX = 40;
|
||||
if ( data != null ) {
|
||||
Collection< Vertex > polygons = data;
|
||||
|
||||
highestX = ( int ) ( polygons.parallelStream()
|
||||
.max( ( a, b ) -> { return Double.compare( a.getPosition().getX(), b.getPosition().getX() ); } ).get().getPosition().getX() + 40.5 );
|
||||
|
||||
EdgeSet edges = new EdgeSet();
|
||||
for ( Vertex vert : polygons ) {
|
||||
for ( HalfEdge edge : vert ) {
|
||||
@@ -502,9 +626,9 @@ public class MeshingTest2 extends JPanel {
|
||||
Point p1 = edge.getOrigin().getPosition();
|
||||
Point p2 = edge.getDest().getPosition();
|
||||
g.drawLine(
|
||||
( int ) ( ( centerX + p1.getX() + 40 ) * scale ) + offsetX,
|
||||
( int ) ( ( centerX + p1.getX() + highestX ) * scale ) + offsetX,
|
||||
( int ) ( ( centerY - p1.getY() ) * scale ) + offsetY,
|
||||
( int ) ( ( centerX + p2.getX() + 40 ) * scale ) + offsetX,
|
||||
( int ) ( ( centerX + p2.getX() + highestX ) * scale ) + offsetX,
|
||||
( int ) ( ( centerY - p2.getY() ) * scale ) + offsetY
|
||||
);
|
||||
}
|
||||
@@ -513,7 +637,7 @@ public class MeshingTest2 extends JPanel {
|
||||
final double diff = scale * 0.15;
|
||||
final Point point = vert.getPosition();
|
||||
g.setColor( Color.BLACK );
|
||||
g.drawRect( ( int ) ( ( centerX + point.getX() + 40 ) * scale ) - ( int ) diff + offsetX, ( int ) ( ( centerY - point.getY() ) * scale ) - ( int ) diff + offsetY, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
g.drawRect( ( int ) ( ( centerX + point.getX() + highestX ) * scale ) - ( int ) diff + offsetX, ( int ) ( ( centerY - point.getY() ) * scale ) - ( int ) diff + offsetY, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -521,9 +645,11 @@ public class MeshingTest2 extends JPanel {
|
||||
g.setColor( Color.BLACK );
|
||||
int count = 2;
|
||||
Random random = new Random( hashCode() );
|
||||
|
||||
for ( final EdgePolygon p : polygons ) {
|
||||
final Collection< HalfEdge > edges = p.getEdges();
|
||||
|
||||
final Set< Vertex > verts = new HashSet< Vertex >();
|
||||
g.setColor( Color.BLACK );
|
||||
for ( HalfEdge edge : edges ) {
|
||||
Point p1 = edge.getOrigin().getPosition();
|
||||
@@ -541,6 +667,11 @@ public class MeshingTest2 extends JPanel {
|
||||
( int ) ( ( centerX + p2.getX() ) * scale ) + offsetX,
|
||||
( int ) ( ( centerY - p2.getY() - 150 ) * scale ) + offsetY
|
||||
);
|
||||
|
||||
final double diff = scale * 0.15;
|
||||
if ( !verts.add( edge.getOrigin() ) ) {
|
||||
g.drawRect( ( int ) ( ( centerX + p1.getX() + count * 25 ) * scale ) - ( int ) diff + offsetX, ( int ) ( ( centerY - p1.getY() - 150 ) * scale ) - ( int ) diff + offsetY, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
}
|
||||
}
|
||||
count++;
|
||||
|
||||
@@ -548,11 +679,22 @@ public class MeshingTest2 extends JPanel {
|
||||
int[] xPoints = new int[ size ];
|
||||
int[] yPoints = new int[ size ];
|
||||
|
||||
final Set< Vertex > verts2 = new HashSet< Vertex >();
|
||||
|
||||
HalfEdge edge = edges.iterator().next();
|
||||
for ( int i = 0; i < edges.size(); ++i ) {
|
||||
final Point point = edge.getOrigin().getPosition();
|
||||
xPoints[ i ] = ( int ) ( ( centerX + point.getX() ) * scale ) + offsetX;
|
||||
yPoints[ i ] = ( int ) ( ( centerY - point.getY() ) * scale ) + offsetY;
|
||||
|
||||
final double diff = scale * 0.15;
|
||||
if ( !verts2.add( edge.getOrigin() ) ) {
|
||||
g.setColor( Color.ORANGE );
|
||||
} else {
|
||||
g.setColor( Color.BLACK );
|
||||
}
|
||||
g.drawRect( ( int ) ( ( centerX + point.getX() + highestX ) * scale ) - ( int ) diff + offsetX, ( int ) ( ( centerY - point.getY() ) * scale ) - ( int ) diff + offsetY, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
|
||||
|
||||
edge = edge.getNext();
|
||||
}
|
||||
|
||||
@@ -562,16 +704,30 @@ public class MeshingTest2 extends JPanel {
|
||||
}
|
||||
|
||||
if ( chains != null ) {
|
||||
int i = 0;
|
||||
for ( Chain chain : chains ) {
|
||||
Point p1 = chain.getOrigin().getPosition();
|
||||
Point p2 = chain.getDest().getPosition();
|
||||
g.setColor( Color.RED );
|
||||
g.drawLine(
|
||||
( int ) ( ( centerX + p1.getX() + 40 ) * scale ) + offsetX,
|
||||
( int ) ( ( centerY - p1.getY() ) * scale ) + offsetY,
|
||||
( int ) ( ( centerX + p2.getX() + 40 ) * scale ) + offsetX,
|
||||
( int ) ( ( centerY - p2.getY() ) * scale ) + offsetY
|
||||
( int ) ( ( centerX + p1.getX() + highestX ) * scale ) + offsetX + i,
|
||||
( int ) ( ( centerY - p1.getY() ) * scale ) + offsetY + i,
|
||||
( int ) ( ( centerX + p2.getX() + highestX ) * scale ) + offsetX + i,
|
||||
( int ) ( ( centerY - p2.getY() ) * scale ) + offsetY + i
|
||||
);
|
||||
|
||||
// for ( HalfEdge e : chain.getLinks() ) {
|
||||
// Point e1 = e.getOrigin().getPosition();
|
||||
// Point e2 = e.getSym().getOrigin().getPosition();
|
||||
// g.setColor( Color.BLUE );
|
||||
// g.drawLine(
|
||||
// ( int ) ( ( centerX + e1.getX() + 40 ) * scale ) + offsetX + i + 1,
|
||||
// ( int ) ( ( centerY - e1.getY() ) * scale ) + offsetY + i + 1,
|
||||
// ( int ) ( ( centerX + e2.getX() + 40 ) * scale ) + offsetX + i + 1,
|
||||
// ( int ) ( ( centerY - e2.getY() ) * scale ) + offsetY + i + 1
|
||||
// );
|
||||
// }
|
||||
// i += 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user