当前位置: 首页 > article >正文

stl三角面元文件转颗粒VTK文件

效果展示:

在这里插入图片描述
在这里插入图片描述

import os
import sys
import json
import argparse
import numpy as np
import pandas as pd 
import open3d as o3d
from glob import globPARTICLE_RADIUS = 0.025def stl_to_particles(objpath, radius=None):if radius is None:radius = PARTICLE_RADIUSobj = o3d.io.read_triangle_mesh(objpath)zhlMoreParticle=1particle_area = np.pi * radius**2# 1.9 to roughly match the number of points of SPlisHSPlasHs surface samplingnum_points = int(1.9*zhlMoreParticle * obj.get_surface_area() / particle_area)pcd = obj.sample_points_poisson_disk(num_points, use_triangle_normal=True)points = np.asarray(pcd.points).astype(np.float32)normals = -np.asarray(pcd.normals).astype(np.float32)outputPLY = objpath+"{:d}.ply".format(num_points)o3d.io.write_point_cloud(outputPLY,pcd)print("radius={:}, np={:}".format(radius,num_points))return points, normalsdef points_vtk_output(name, paticle_all):with open(name, 'w') as fout:n = paticle_all.shape[0]fout.write("# vtk DataFile Version 2.0\n\n")fout.write("ASCII\n")fout.write("DATASET POLYDATA\n")fout.write(f"POINTS {n} float\n")# xfor i in range(n):fout.write("{:21.14e} {:21.14e} {:21.14e}\n".format(paticle_all['x'][i], paticle_all['y'][i], paticle_all['z'][i]))fout.write("VERTICES {} {}\n".format(n, 2 * n))for i in range(n):fout.write("1 {}\n".format(i))fout.write("POINT_DATA {}\n".format(n))# velocityfout.write("VECTORS velocity float\n")for i in range(n):fout.write("{:21.14e} {:21.14e} {:21.14e}\n".format(paticle_all['nx'][i], paticle_all['ny'][i], paticle_all['nz'][i]))# cell idfout.write("SCALARS id float 1\n")fout.write("LOOKUP_TABLE default\n")for i in range(n):fout.write("{:d}\n".format(i))# radiusfout.write("SCALARS radius float 1\n")fout.write("LOOKUP_TABLE default\n")for i in range(n):fout.write("{:21.14e}\n".format(PARTICLE_RADIUS))points, normals = stl_to_particles('wall.stl')
df_particle = pd.DataFrame(data = np.hstack((points, normals)), columns=['x', 'y', 'z' , 'nx', 'ny' ,'nz'] ) 
points_vtk_output('wall.vtk', df_particle)
http://www.lryc.cn/news/2393200.html

相关文章:

  • Java String的使用续 -- StringBuilder类和StringBuffer
  • Android学习之定时任务
  • WEB安全--RCE--webshell HIDS bypass4
  • 基于python+Django+Mysql的校园二手交易市场
  • 从零打造算法题刷题助手:Agent搭建保姆级攻略
  • Oracle 12c新增的数字转换验证VALIDATE_CONVERSION函数
  • 参数/非参数检验和连续/离散/分类等变量类型的关系
  • 懒人云电脑方案:飞牛NAS远程唤醒 + 节点小宝一键唤醒、远程控制Windows!
  • 【Python】第一弹:对 Python 的认知
  • 直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案
  • Java源码中有哪些细节可以参考?(持续更新)
  • GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作
  • day 23 机器学习管道(pipeline)
  • shell编程笔记
  • 鸿蒙仓颉开发语言实战教程:自定义组件
  • 基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
  • opencvsharp usb摄像头录像 c# H264编码
  • ch12 课堂参考代码 及 题目参考思路
  • uniapp 实现腾讯云 IM 消息已读回执
  • JavaScript 性能优化按层次逐步分析
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • div或button一些好看实用的 CSS 样式示例
  • USB充电检测仪-2.USB充电检测仪硬件设计
  • 如何查询服务器的端口号
  • AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)
  • DeepSeek R1开源模型的技术突破与AI产业格局的重构