2017-10-17 13 views
0

バインダーjetting 3dプリンタ用にスライサーを開発するために、デスクトップアプリケーションを開発する必要があるため、私は初心者のPython言語に似ています。スライサーの結果は画像でなければならず、私は3d環境が必要です。ここで私はstlファイルを移動または拡大縮小できます。3d環境でのPythonのインポート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'** 
>>> 

です私のコード:pygameので

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() 

それは非常にSTLの作業を複雑にしていますので、私はどちらかの大成功の多くを持っていなかったが、私はそれについて非常に無知です。

提案がありますか?

答えて

0

Kivy自体

おかげで、あなたがやりたいことができますが、それは機能を直接サポートされていない、あなたはそれの一部を自分で管理する必要があります。あなたがKivy3を試しているように見えますが、それはほとんどの場合ですが、STLファイルを直接サポートしているかどうかはわかりません。そのコードを読む必要があります。

一般に、STLファイルを、kivy3が手動でメッシュ情報(少なくとも頂点とインデックス)を抽出してkivy3メッシュに変換することで使用できるオブジェクトにすることもできます。

関連する問題