【发布时间】:2017-10-17 11:46:30
【问题描述】:
我像初学者一样面对 Python 语言,因为我需要开发一个桌面应用程序来为我们的活页夹喷射 3D 打印机开发一个切片器。切片器的结果必须是图像,当然我需要一个 3d 环境,我可以在其中移动或缩放我的 stl 文件。
我尝试了几种方法,例如 kivy 或 pygame,但我仍然不知道哪个是最佳选择。 Kivy有一个很好的GUI,你可以上传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 上的工作相当复杂,但我对此一无所知。
有什么建议吗?
谢谢
【问题讨论】: