Java 生成 STL 文件教程:基于 earcut4j 实现带孔洞多边形三角化
本文介绍了一个支持带孔洞多边形三角化的工具库,现已上传至CSDN资源平台。详细说明了使用步骤:需下载依赖包并解压至Maven仓库,在项目中引入2.2.2版本依赖。核心函数convert()支持两种GeoJson输入方式:文件路径或JSON对象,可指定输出STL路径、坐标格式(默认相对坐标或epsg:3857)及缩放比例。文中提供了完整调用示例,并展示了两种坐标格式生成的模型效果对比。该工具库所有代
·
1.介绍
我已将相关依赖包上传至CSDN资源平台,标题为「2025多边形三角化工具库推荐:支持带孔洞多边形」。所有代码均由本人独立开发完成,因此设置了少量下载费用。如有需要,欢迎前往下载使用。
2.使用方式
将依赖包下载完成后,解压至本地Maven仓库目录中,具体操作步骤如下图所示,
接着要在你的项目中引入。大家都是做开发的,废话不多说了,直接上图,
我的包版本是2.2.2,注意不要引错了哦!!!
3.函数说明
public static void convert(String geoJsonPath, String stlPath , String srid , Integer scaling) throws IOException {
ObjectMapper mapper = new ObjectMapper();
FeatureCollection featureCollection = mapper.readValue(new File(geoJsonPath), FeatureCollection.class);
processFeatureCollection(featureCollection, stlPath , srid , scaling);
}
public static void convert(JSONObject geoJsonObj, String stlPath , String srid , Integer scaling) throws IOException {
// Convert JSONObject to FeatureCollection
ObjectMapper mapper = new ObjectMapper();
FeatureCollection featureCollection = mapper.readValue(geoJsonObj.toString(), FeatureCollection.class);
processFeatureCollection(featureCollection, stlPath , srid , scaling);
}
-
GeoJson输入源
第一个参数支持两种输入方式:- 可直接传入GeoJson对象
- 可传入GeoJson文件的绝对路径,系统将自动读取文件内容
-
输出路径
第二个参数指定生成的STL文件存储位置,需提供绝对路径 -
坐标格式(可选)
第三个参数控制STL文件的坐标输出格式:- 默认使用"相对坐标"(相对于模型中心点)
- 可指定"epsg:3857"坐标系
- 传入null时将采用默认设置
-
缩放比例(可选)
第四个参数仅在第三个参数为null时生效:- 默认值1表示原始尺寸
- 传入数值将实现等比例缩放
- 传0或省略时按默认值处理
4.使用示例
直接上代码,
public RespBase createSTL(ReqCreateSTLVo reqCreateSTLVo) {
JSONObject result = new JSONObject();
try{
//todo 获取当前时间
long time = new Date().getTime();
//todo 生成文件名
String fileName = time + ".stl";
//todo 生成文件路径
String filePath = Paths.get(resourcePath, "3d_model", fileName).toString();
//todo 生成stl文件
Earcut4j.convert(reqCreateSTLVo.getGeoJson() , filePath , reqCreateSTLVo.getSrid() , reqCreateSTLVo.getScaling());
//todo 设置返回值
result.put("fileName" , fileName);
return RespBase.create(Resp.Code.Common.OK[0], result , Resp.Code.Common.OK[1]);
}catch(IOException e){
e.printStackTrace();
return RespBase.create(Resp.Code.Common.ERROR[0], result , "生成stl文件失败");
}
}
@Data
public class ReqCreateSTLVo {
//todo 生成STL用的GeoJson
private JSONObject geoJson;
//todo 模型缩放比例
private Integer scaling;
//todo 生成模型的坐标系
private String srid;
}
在我的接口中,我将“坐标系”和“缩放比例”这两个参数暴露给前端,大家可以按需调整,若不想暴露参数,可在代码中写死即可!
5.查看结果
模型生成完后,查看一下效果吧,
5.1.相对坐标生成的模型
5.2.EPSG:3857坐标生成的模型
该坐标生成的模型样貌与相对坐标一样,仅文件内容不一样,我只展示文件内容了,
更多推荐


所有评论(0)