0
因为我需要开发一个桌面应用程序来开发切片机,因此我们正在面对初学者的Python语言。切片机的结果必须在图像中,当然我需要一个3d环境我可以移动或缩放我的stl文件。在一个3d环境中的Python导入一个STL文件
我尝试了几种方法来做到这一点,如基维或pygame,但我仍然不知道这是最好的选择。 Kivy具有良好的图形用户界面,你可以上传OBJ,但我无法找到一个方法来连接numpy的-STL,当在现场添加了STL文件给这个错误:
<stl.mesh.Mesh object at 0x0C524570>
Traceback (most recent call last):
File "C:\Users\Nadia\Desktop\cube.py", line 56, in <module>
My3DApp().run()
File "C:\Users\Nadia\AppData\Local\Programs\Python\Python35-32\lib\site-packages\kivy\app.py", line 802, in run
root = self.build()
File "C:\Users\Nadia\Desktop\cube.py", line 48, in build
self.renderer.render(scene, self.camera)
File "C:\Users\Nadia\AppData\Local\Programs\Python\Python35-32\lib\site-packages\kivy3\renderer.py", line 101, in render
self._instructions.add(scene.as_instructions())
File "C:\Users\Nadia\AppData\Local\Programs\Python\Python35-32\lib\site-packages\kivy3\scenes\scene.py", line 36, in as_instructions
for child in self.get_children_instructions():
File "C:\Users\Nadia\AppData\Local\Programs\Python\Python35-32\lib\site-packages\kivy3\core\object3d.py", line 154, in get_children_instructions
yield child.as_instructions()
**AttributeError: 'Mesh' object has no attribute 'as_instructions'**
>>>
这是我的代码:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy3 import Renderer, Scene
from kivy3 import PerspectiveCamera
from kivy3.extras.geometries import BoxGeometry
from kivy3.core.geometry import Geometry
from kivy3 import Material, Mesh
import numpy
from stl import mesh
class My3DApp(App):
def _adjust_aspect(self, *args):
rsize = self.renderer.size
aspect = rsize[0]/float(rsize[1])
self.renderer.camera.aspect = aspect
def rotate_cube(self, *dt):
self.cube.rotation.y += 1
def build(self):
layout = FloatLayout()
self.renderer = Renderer()
scene = Scene()
cube_geo = BoxGeometry(1,1,1)
cube_mat = Material()
self.cube = Mesh(
geometry = cube_geo,
material=cube_mat
)
self.cube.pos.z = -5
self.stlfile = mesh.Mesh.from_file('exStl/test01.STL')
print(self.stlfile)
self.camera = PerspectiveCamera(
fov=75,
aspect = 0,
near=1,
far=10
)
scene.add(self.stlfile)
scene.add(self.cube)
self.renderer.render(scene, self.camera)
self.renderer.bind(size=self._adjust_aspect)
layout.add_widget(self.renderer)
Clock.schedule_interval(self.rotate_cube, .01)
#layout.add_widget(Builder.load_string(kv))
return layout
if __name__=="__main__":
My3DApp().run()
随着pygame的,我没有很多更迭的可能是因为它是相当的工作在STL复杂,但我对此很无知。
有什么建议吗?
感谢