diff --git a/bindings/java/pom.xml b/bindings/java/pom.xml index 98887ac52..29eb3ff30 100644 --- a/bindings/java/pom.xml +++ b/bindings/java/pom.xml @@ -62,6 +62,20 @@ meshIO.dll + + ../../build/_deps/texttopolygon-build/ + + libTextToPolygon.so + libTextToPolygon.dylib + + + + ../../build/_deps/freetype2-build/ + + libfreetype.so + libfreetype.6.16.0.dylib + + ../../build/src/manifold @@ -110,6 +124,8 @@ ../../src/cross_section/include/ ../../src/third_party/clipper2/CPP/Clipper2Lib/include/ ../../build/_deps/glm-src/ + ../../build/_deps/texttopolygon-src/include + ../../build/_deps/freetype2-src/include ../../src/polygon/include ../../src/manifold/include/ ../../src/utilities/include/ diff --git a/bindings/java/src/main/java/manifold3d/LibraryPaths.java b/bindings/java/src/main/java/manifold3d/LibraryPaths.java index 1a0ed3f1d..f751a75d9 100644 --- a/bindings/java/src/main/java/manifold3d/LibraryPaths.java +++ b/bindings/java/src/main/java/manifold3d/LibraryPaths.java @@ -7,6 +7,8 @@ public class LibraryPaths { //public static final String CROSS_SECTION_LIB_DIR = MANIFOLD_BUILD_DIR + "/src/cross_section"; //public static final String QUICKHULL_LIB_DIR = MANIFOLD_BUILD_DIR + "/src/third_party"; public static final String CLIPPER_LIB_DIR = MANIFOLD_BUILD_DIR + "/_deps/clipper2-build"; + public static final String FREETYPE_LIB_DIR = MANIFOLD_BUILD_DIR + "/_deps/freetype2-build"; + public static final String TEXT_TO_POLYGON_LIB_DIR = MANIFOLD_BUILD_DIR + "/_deps/texttopolygon-build"; public static final String MANIFOLD_LIB_DIR_WINDOWS = MANIFOLD_LIB_DIR + "/Release"; public static final String MESHIO_LIB_DIR = MANIFOLD_BUILD_DIR + "/meshIO"; public static final String MESHIO_LIB_DIR_WINDOWS = MESHIO_LIB_DIR + "/Release"; diff --git a/bindings/java/src/main/java/manifold3d/manifold/CrossSection.java b/bindings/java/src/main/java/manifold3d/manifold/CrossSection.java index 5664e6cab..613db07db 100644 --- a/bindings/java/src/main/java/manifold3d/manifold/CrossSection.java +++ b/bindings/java/src/main/java/manifold3d/manifold/CrossSection.java @@ -14,8 +14,10 @@ @Platform(compiler = "cpp17", include = { "cross_section.h" }, - linkpath = { LibraryPaths.MANIFOLD_LIB_DIR }, - link = { "manifold" }) + linkpath = { LibraryPaths.MANIFOLD_LIB_DIR, + LibraryPaths.FREETYPE_LIB_DIR, + LibraryPaths.TEXT_TO_POLYGON_LIB_DIR }, + link = { "manifold", "TextToPolygon", "freetype" }) @Namespace("manifold") public class CrossSection extends Pointer { static { Loader.load(); } @@ -98,6 +100,7 @@ public CrossSection translateY(double y) { public static native @ByVal CrossSection Compose(@ByRef CrossSectionVector crossSection); @Name("Decompose") public native @ByVal CrossSectionVector decompose(); + public static native @ByVal CrossSection Text(@ByRef @StdString String fontFile, @ByRef @StdString String text, int pixelHeight, int interpRes); public static native @ByVal CrossSection Circle(float radius, int circularSegments); public static native @ByVal CrossSection Square(@ByRef DoubleVec2 size, boolean center); public static CrossSection Square(double x, double y, boolean center) { diff --git a/bindings/java/src/test/java/manifold3d/CrossSectionTest.java b/bindings/java/src/test/java/manifold3d/CrossSectionTest.java index 6f5230224..a06122e24 100644 --- a/bindings/java/src/test/java/manifold3d/CrossSectionTest.java +++ b/bindings/java/src/test/java/manifold3d/CrossSectionTest.java @@ -36,6 +36,8 @@ public void testCrossSection() { CrossSection innerSection = new CrossSection(innerPolygon, FillRule.NonZero.ordinal()) .translate(new DoubleVec2(3, 0)); + CrossSection text = CrossSection.Text("DejaVuSans.ttf", "abcdefghijk lmnopqrstuvwxyz", 48, 6); + CrossSection circle = CrossSection.Circle(3.0f, 20); Manifold cylinder = Manifold.Extrude(circle, 50, 60, 0, new DoubleVec2(1.0, 1.0)); @@ -47,5 +49,6 @@ public void testCrossSection() { DoubleMesh mesh = man.getMesh(); ExportOptions opts = new ExportOptions(); MeshIO.ExportMesh("CrossSectionTest.stl", mesh, opts); + MeshIO.ExportMesh("TextExtrusion.stl", Manifold.Extrude(text, 200, 1, 0, new DoubleVec2(1.0, 1.0)).getMesh(), opts); } }