Fixed problems with sorting collinear and intersecting edges caused by chain resolution in partition monotone

This commit is contained in:
2025-05-21 21:27:37 -04:00
parent c101c2e1dd
commit 3426829c2b
2 changed files with 80 additions and 34 deletions

View File

@@ -95,13 +95,13 @@ public class MeshingTest2 extends JPanel {
// draw = planes.get( new Random().nextInt( planes.size() ) );
System.out.println( "Draw is " + draw );
// Attempt to mesh all planes
// try {
// test( planes );
// } catch ( PolygonException e ) {
// draw = e.getPlane();
// System.out.println( "Draw is now " + draw );
// }
// Attempt to mesh all planes
try {
test( planes );
} catch ( PolygonException e ) {
draw = e.getPlane();
System.out.println( "Draw is now " + draw );
}
final Collection< Vertex > data = process( draw );
final Collection< EdgePolygon > polys = triangulate( draw );
@@ -265,8 +265,18 @@ public class MeshingTest2 extends JPanel {
// Make sure this works
mesh = mesh.copyOf();
final Collection< EdgePolygon > polys = mesh.mesh( false );
chains = mesh.chains;
Collection< EdgePolygon > polys;
try {
polys = mesh.mesh( false );
chains = mesh.chains;
} catch ( IllegalStateException e ) {
e.printStackTrace();
polys = mesh.mesh( true );
chains = mesh.chains;
}
long end = System.currentTimeMillis();
System.out.println( "Took " + ( end - start ) + "ms" );
@@ -646,6 +656,7 @@ public class MeshingTest2 extends JPanel {
int count = 2;
Random random = new Random( hashCode() );
final int spacing = 25;
for ( final EdgePolygon p : polygons ) {
final Collection< HalfEdge > edges = p.getEdges();
@@ -655,9 +666,9 @@ public class MeshingTest2 extends JPanel {
Point p1 = edge.getOrigin().getPosition();
Point p2 = edge.getDest().getPosition();
g.drawLine(
( int ) ( ( centerX + p1.getX() + count * 25 ) * scale ) + offsetX,
( int ) ( ( centerX + p1.getX() + count * spacing ) * scale ) + offsetX,
( int ) ( ( centerY - p1.getY() - 150 ) * scale ) + offsetY,
( int ) ( ( centerX + p2.getX() + count * 25 ) * scale ) + offsetX,
( int ) ( ( centerX + p2.getX() + count * spacing ) * scale ) + offsetX,
( int ) ( ( centerY - p2.getY() - 150 ) * scale ) + offsetY
);
@@ -670,7 +681,7 @@ public class MeshingTest2 extends JPanel {
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 ) );
g.drawRect( ( int ) ( ( centerX + p1.getX() + count * spacing ) * scale ) - ( int ) diff + offsetX, ( int ) ( ( centerY - p1.getY() - 150 ) * scale ) - ( int ) diff + offsetY, ( int ) ( diff * 2 ), ( int ) ( diff * 2 ) );
}
}
count++;