List of usage examples for com.badlogic.gdx.utils.async AsyncTask AsyncTask
AsyncTask
From source file:es.eucm.ead.editor.utils.ShapeEditor.java
License:Open Source License
@Override public void render() { super.render(); renderPolygonShapes(blue, Color.BLUE, 0, 0); renderPolygonShapes(red, Color.RED, 0, 0); Array<Polygon> a = new Array<Polygon>(); a.add(GeometryUtils.createPoly(polySides, polySize, new Vector2(lastX, lastY))); renderPolygonShapes(a, Color.DARK_GRAY, 0, 0); if (Gdx.input.isTouched()) { int mouseX = Gdx.input.getX(); int mouseY = height - Gdx.input.getY(); if (Gdx.input.isButtonPressed(Input.Buttons.LEFT)) { pendingMerges.offer(GeometryUtils.createPoly(polySides, polySize, new Vector2(mouseX, mouseY))); } else if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)) { pendingRemoves.offer(GeometryUtils.createPoly(polySides, polySize, new Vector2(mouseX, mouseY))); }//from ww w . jav a2 s.co m } if (updatedGeometry != null && updatedGeometry.isDone()) { Gdx.app.error("GeoTester", "merging in..."); red.clear(); for (Geometry g : updatedGeometry.get()) { red.add(GeometryUtils.jtsCoordsToGdx(g.getCoordinates())); } geo.clear(); geo.addAll(updatedGeometry.get()); updatedGeometry = null; } else if (!pendingMerges.isEmpty() && updatedGeometry == null) { updatedGeometry = executor.submit(new AsyncTask<Array<Geometry>>() { @Override public Array<Geometry> call() throws Exception { Array<Geometry> ga = new Array<Geometry>(); for (Geometry g : geo) { ga.add((Geometry) g.clone()); } while (!pendingMerges.isEmpty()) { GeometryUtils.merge(ga, pendingMerges.poll()); } if (GeoTester.r(0, 10) < 4) { GeometryUtils.simplify(ga, 5); } return ga; } }); } else if (!pendingRemoves.isEmpty() && updatedGeometry == null) { updatedGeometry = executor.submit(new AsyncTask<Array<Geometry>>() { @Override public Array<Geometry> call() throws Exception { Array<Geometry> ga = new Array<Geometry>(); for (Geometry g : geo) { ga.add((Geometry) g.clone()); } while (!pendingRemoves.isEmpty()) { GeometryUtils.subtract(ga, pendingRemoves.poll()); } if (GeoTester.r(0, 10) < 4) { GeometryUtils.simplify(ga, 5); } return ga; } }); } }
From source file:es.eucm.ead.editor.utils.TexturedShapeEditor.java
License:Open Source License
@Override public void render() { super.render(); renderPolygonSprite();/* ww w . ja va 2 s . c o m*/ renderTriangles(red.get(0), triangles); renderPolygonShapes(blue, Color.BLUE, 0, 0); renderPolygonShapes(red, Color.RED, 0, 0); Array<Polygon> a = new Array<Polygon>(); a.add(GeometryUtils.createPoly(6, polySize, new Vector2(lastX, lastY))); renderPolygonShapes(a, Color.DARK_GRAY, 0, 0); if (Gdx.input.isTouched()) { int mouseX = Gdx.input.getX(); int mouseY = height - Gdx.input.getY(); if (Gdx.input.isButtonPressed(Input.Buttons.LEFT)) { pendingMerges.offer(GeometryUtils.createPoly(6, polySize, new Vector2(mouseX, mouseY))); } else if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)) { pendingRemoves.offer(GeometryUtils.createPoly(6, polySize, new Vector2(mouseX, mouseY))); } } if (updatedRegion != null && updatedRegion.isDone()) { Gdx.app.error("GeoTester", "merging in..."); poly.setRegion(updatedRegion.get()); triangles = updatedRegion.get().getTriangles(); red.clear(); red.add(new Polygon(updatedRegion.get().getVertices())); updatedRegion = null; } else if (!pendingMerges.isEmpty() && updatedRegion == null) { updatedRegion = executor.submit(new AsyncTask<PolygonRegion>() { @Override public PolygonRegion call() throws Exception { long t0 = System.nanoTime(); while (!pendingMerges.isEmpty()) { GeometryUtils.merge(geo, pendingMerges.poll()); } Geometry collapsed = GeometryUtils.collapse(geo); GeometryUtils.simplify(geo, 3); Polygon p = GeometryUtils.jtsCoordsToGdx(collapsed.getCoordinates()); short[] ts = GeometryUtils.triangulate(collapsed); PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid), p.getVertices(), ts); long t1 = System.nanoTime() - t0; Gdx.app.error("GeoTester", "ready to display triangles worth " + ts.length + " vertices after merge in " + (t1 / 1000000) + " ms"); return polyReg; } }); } else if (!pendingRemoves.isEmpty() && updatedRegion == null) { updatedRegion = executor.submit(new AsyncTask<PolygonRegion>() { @Override public PolygonRegion call() throws Exception { long t0 = System.nanoTime(); while (!pendingRemoves.isEmpty()) { GeometryUtils.subtract(geo, pendingRemoves.poll()); } Geometry collapsed = GeometryUtils.collapse(geo); if (GeoTester.r(0, 10) < 4) { GeometryUtils.simplify(geo, 3); } Polygon p = GeometryUtils.jtsCoordsToGdx(collapsed.getCoordinates()); short[] ts = GeometryUtils.triangulate(collapsed); PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid), p.getVertices(), ts); long t1 = System.nanoTime() - t0; Gdx.app.error("GeoTester", "ready to display triangles worth " + ts.length + " vertices after removal in " + (t1 / 1000000) + " ms"); return polyReg; } }); } }