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);
}
}