X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth-3d-demos.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fexamples%2FTextEditorDemo2.java;fp=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fexamples%2FTextEditorDemo2.java;h=f78734b1d157db0a55c7dac0659d919ab1850097;hp=0000000000000000000000000000000000000000;hb=680a14d4fa6d95f2ca5c582078a8aa05db522e31;hpb=fd099c489d7f4df2624c07d1d3ba24f658b147a7 diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/examples/TextEditorDemo2.java b/src/main/java/eu/svjatoslav/sixth/e3d/examples/TextEditorDemo2.java new file mode 100644 index 0000000..f78734b --- /dev/null +++ b/src/main/java/eu/svjatoslav/sixth/e3d/examples/TextEditorDemo2.java @@ -0,0 +1,134 @@ +/* + * Sixth 3D engine demos. Author: Svjatoslav Agejenko. + * This project is released under Creative Commons Zero (CC0) license. + * +*/ + +package eu.svjatoslav.sixth.e3d.examples; + +import eu.svjatoslav.sixth.e3d.geometry.Point2D; +import eu.svjatoslav.sixth.e3d.geometry.Point3D; +import eu.svjatoslav.sixth.e3d.geometry.Rectangle; +import eu.svjatoslav.sixth.e3d.gui.Avatar; +import eu.svjatoslav.sixth.e3d.gui.ViewFrame; +import eu.svjatoslav.sixth.e3d.gui.ViewPanel; +import eu.svjatoslav.sixth.e3d.gui.textEditorComponent.LookAndFeel; +import eu.svjatoslav.sixth.e3d.gui.textEditorComponent.TextEditComponent; +import eu.svjatoslav.sixth.e3d.math.Transform; +import eu.svjatoslav.sixth.e3d.renderer.raster.Color; +import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection; +import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.line.LineAppearance; +import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.wireframe.Grid2D; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.util.stream.Collectors; + +public class TextEditorDemo2 { + + public static void main(final String[] args) { + try { + new TextEditorDemo2().build(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void build() throws URISyntaxException, IOException { + final ViewFrame viewFrame = new ViewFrame(); + final ViewPanel viewPanel = viewFrame.getViewPanel(); + + final ShapeCollection shapeCollection = viewFrame.getViewPanel() + .getRootShapeCollection(); + + setAvatarLocation(viewPanel); + + addGrid(shapeCollection); + + addCity(viewPanel, shapeCollection); + } + + private void addCity(ViewPanel viewPanel, ShapeCollection shapeCollection) throws URISyntaxException, IOException { + int citySize = 4000; + for (int z = -citySize; z< citySize; z+= 1000 ){ + for (int x = -citySize; x< citySize; x+= 1000 ){ + addBuilding(viewPanel, shapeCollection, x, z); + } + } + } + + + private static void addGrid(ShapeCollection shapeCollection) { + final Transform transform = new Transform(new Point3D(0, 100, 0), 0, + Math.PI / 2); + + final Rectangle rectangle = new Rectangle(10000); + final LineAppearance appearance = new LineAppearance(10, new Color( + "00b3ad")); + + shapeCollection.addShape(new Grid2D(transform, rectangle, 50, 50, appearance)); + } + + + private void addBuilding(ViewPanel viewPanel, ShapeCollection shapeCollection, double x, double z) throws URISyntaxException, IOException { + Transform transform = new Transform(new Point3D(x, -390, z-200)); + addTextEditor(viewPanel, shapeCollection, transform); + + transform = new Transform(new Point3D(x, -390, z+200),Math.PI, 0); + addTextEditor(viewPanel, shapeCollection, transform); + + transform = new Transform(new Point3D(x-200, -390, z),Math.PI/2, 0); + addTextEditor(viewPanel, shapeCollection, transform); + + transform = new Transform(new Point3D(x+200, -390, z),Math.PI/2*3f, 0); + addTextEditor(viewPanel, shapeCollection, transform); + } + + private void addTextEditor(ViewPanel viewPanel, ShapeCollection shapeCollection, Transform transform) throws IOException { + LookAndFeel lookAndFeel = getLookAndFeel(); + + final TextEditComponent textEditor = new TextEditComponent( + transform, + viewPanel, + new Point2D(400, 1000), + lookAndFeel + ); + + String text = getResourceFileAsString("demo.txt"); + + textEditor.setText(text); + textEditor.goToLine((int)(Math.random()*200f)); + shapeCollection.addShape(textEditor); + } + + private LookAndFeel getLookAndFeel() { + LookAndFeel lookAndFeel = new LookAndFeel(); + lookAndFeel.background = new Color(20, 20, 50, 150); + lookAndFeel.tabStopBackground = lookAndFeel.background; + lookAndFeel.foreground = new Color(150, 150, 255,250); + return lookAndFeel; + } + + static String getResourceFileAsString(String fileName) throws IOException { + ClassLoader classLoader = ClassLoader.getSystemClassLoader(); + try (InputStream is = classLoader.getResourceAsStream(fileName)) { + if (is == null) return null; + try (InputStreamReader isr = new InputStreamReader(is); + BufferedReader reader = new BufferedReader(isr)) { + return reader.lines().collect(Collectors.joining(System.lineSeparator())); + } + } + } + + private static void setAvatarLocation(ViewPanel viewPanel) { + Avatar avatar = viewPanel.getAvatar(); + avatar.setLocation(new Point3D(500, -300, -800)); + avatar.setAngleXZ(0.6); + avatar.setAngleYZ(-0.5); + } +}