Код, который у меня есть, создает 3D-модель и отображает ее в кадре wxpython с помощью Opencascade.
Я хочу преобразовать / переместить выбранную 3D-модель.Как мне этого добиться?
Кроме того, возможно ли загрузить один и тот же файл шага более одного раза и сделать возможным его перемещение или даже соединение их вместе?Я не нашел хороших источников для чего-то подобного.
Моя попытка переместить это:
def OnReplace(self):
a = self._display.GetSelectedShape
a.MoveTo(400,500)
Мой сокращенный код до сих пор:
from __future__ import print_function
import time
try:
import wx
except ImportError:
raise ImportError('Please install wxPython.')
from OCC.Display import OCCViewer
from OCC.STEPControl import STEPControl_Reader
class wxBaseViewer(wx.Panel):
def __init__(self, parent=None):
wx.Panel.__init__(self, parent)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self._display = None
self._inited = False
def GetWinId(self):
timeout = 10 # 10 seconds
win_id = self.GetHandle()
init_time = time.time()
delta_t = 0. # elapsed time, initialized to 0 before the while loop
# if ever win_id is 0, enter the loop untill it gets a value
while win_id == 0 and delta_t < timeout:
time.sleep(0.1)
wx.SafeYield()
win_id = self.GetHandle()
delta_t = time.time() - init_time
# check that win_id is different from 0
if win_id == 0:
raise AssertionError("Can't get win Id")
# otherwise returns the window Id
return win_id
def OnSize(self, event):
if self._inited:
self._display.OnResize()
def OnReplace(self, event):
pass
def OnKeyDown(self, event):
pass
class wxViewer3d(wxBaseViewer):
def __init__(self, *kargs):
wxBaseViewer.__init__(self, *kargs)
self._drawbox = False
self._zoom_area = False
self._select_area = False
self._inited = False
self._leftisdown = False
self._middleisdown = False
self._rightisdown = False
self._selection = None
self._scrollwheel = False
self._key_map = {}
self.dragStartPos = None
def InitDriver(self):
self._display = OCCViewer.Viewer3d(self.GetWinId())
self._display.Create()
self._display.SetModeShaded()
self._inited = True
self._SetupKeyMap()
def _SetupKeyMap(self):
def set_shade_mode():
self._display.DisableAntiAliasing()
self._display.SetModeShaded()
self._key_map = {ord('M'): self.OnReplace}
def OnKeyDown(self, evt):
code = evt.GetKeyCode()
try:
self._key_map[code]()
except KeyError:
print('unrecognized key %i' % evt.GetKeyCode())
def OnReplace(self):
a = self._display.GetSelectedShape
a.MoveTo(400,500)
def StepViewer():
class AppFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "3D Viewer",
style=wx.DEFAULT_FRAME_STYLE, size=(1280 , 720))
# 3D View Panel
self.canva = wxViewer3d(self)
def runTests(self):
self.canva._display.Test()
app = wx.App(False)
wx.InitAllImageHandlers()
frame = AppFrame(None)
frame.Show(True)
wx.SafeYield()
frame.canva.InitDriver()
frame.runTests()
app.SetTopWindow(frame)
app.MainLoop()
if __name__ == "__main__":
StepViewer()