Что касается некоторой предыстории, мой код, скорее всего, полный беспорядок, в основном потому, что в моей жизни было всего пару часов написания сценариев.
Для класса я создаю солнечную систему со всеми стандартными планетами, а также возможность для пользователя ввести свою собственную планету.Все работало нормально, пока я не попытался позволить пользователю порождать планеты с помощью кнопки в пользовательском интерфейсе (пока уродливая кнопка, но, тем не менее, кнопка).Если пользователь нажимает кнопку, скажем, «Солнце», тогда солнце появляется, но только один раз, если он затем решает снова породить Солнце или любую другую планету в этом отношении, он выдает ошибку, заявляющую, что модуль не содержит 'поликуб или полисфера.Таким образом, в основном кнопка работает один раз, а затем не работает.Если я звоню им откуда угодно, кроме кнопки, она работает идеально и бесконечно.Я понял, так как он не знает поликуб или полисферу, почти как если бы я не импортировал maya.cmds, поэтому давайте попробуем вспомнить его.и низко, и вот, что работает.
Итак, в основном мой вопрос заключается в следующем: может ли майя забыть свои импортированные библиотеки при нажатии кнопки?и как мне решить эту проблему без необходимости повторного импорта maya.cmds в каждую функцию?
import maya.cmds as maya
class create_body:
def __init__(self, distance, radius, bonus_scale, r, g, b):
import maya.cmds as maya
self.radius = radius * bonus_scale / 1000
self.bonusScale = bonus_scale
self.distanceScene = distance
self.distanceMeter = distance*1000000000
maya.polyCube()
self.r = r
self.g = g
self.b = b
def color_body_custom(self):
import maya.cmds as maya
value = maya.colorEditor()
self.color = [float(i) for i in value.split()]
self.r = self.color[0]
self.g = self.color[1]
self.b = self.color[2]
def spawn_body(self):
import maya.cmds as maya
maya.polySphere(r = self.radius)
maya.move(self.distanceScene, moveZ = True)
maya.move(0, 0, 0, ".scalePivot", ".rotatePivot", absolute=True)
maya.polyColorPerVertex(rgb=(self.r,self.g,self.b), colorDisplayOption=True)
def animate_body(self):
import maya.cmds as maya
orbitTimeYears = self.get_orbital_time()*10
key = str(orbitTimeYears) + 'sec'
maya.setKeyframe(v=0, at='rotateY', t=['0sec'], itt = 'spline', ott = 'spline')
maya.setKeyframe(v=-360, at='rotateY', t=[key], itt = 'spline', ott = 'spline')
maya.selectKey(attribute='rotateY')
maya.setInfinity(pri='linear', poi='linear')
def get_orbital_time(self):
import math
orbitMeter = self.distanceMeter * 2 * math.pi
gravConst = 132690600000000000000 / self.distanceMeter
orbitSpeed = math.sqrt(gravConst)
orbitTimeSec = orbitMeter / orbitSpeed
orbitTimeYears = orbitTimeSec / 31556926
return orbitTimeYears
class create_ui:
def __init__(self, window_name):
self.myPlanetarySystem = window_name
# Make sure there's only one window open by deleting the window if it exists
self.delete_ui()
# Create the UI
self.myp = maya.window(self.myPlanetarySystem)
maya.rowColumnLayout(numberOfColumns=3, columnWidth=[(1, 150), (2, 75), (3, 75)], columnOffset=[(1, 'left', 5)])
maya.showWindow()
maya.window(self.myPlanetarySystem, e=True, title='TileGenerator', w=200, h=190)
maya.button(label = 'Sun', command = partial(self.body, 0, 695.510, 10, True, 1, 1, 0))
maya.button(label='Mercury', command = partial(self.body, 57.9, 2.439, 1000, False, 0.2, 0.2, 0))
#Sun = create_body(0, 695.510, 10, 1, 1, 0)
#Sun.spawn_body()
#Mercury = create_body(57.9, 2.439, 1000, 0.2, 0.2, 0)
#Mercury.spawn_body()
#Mercury.animate_body()
#Venus = create_body(108.2, 6.051, 1000, .5, 0.2, 0)
#Venus.spawn_body()
#Venus.animate_body()
#Earth = create_body(149.6, 6.971, 1000, 0, 0, 1)
#Earth.spawn_body()
#Earth.animate_body()
#Mars = create_body(227.9, 3.389, 1000, 0.6, 0.1, 0)
#Mars.spawn_body()
#Mars.animate_body()
#Jupiter = create_body(778.5, 69.911, 100, 0.9, 0.8, 0.5)
#Jupiter.spawn_body()
#Jupiter.animate_body()
#Saturn = create_body(1433.4, 58.232, 100, 0.8, 0.8, 0.7)
#Saturn.spawn_body()
#Saturn.animate_body()
#Uranus = create_body(2876.6, 25.362, 100, 0.7, 0.8, 1.0)
#Uranus.spawn_body()
#Uranus.animate_body()
#Neptune = create_body(4503.4, 24.622, 100, 0.3, 0.4, 0.7)
#Neptune.spawn_body()
#Neptune.animate_body()
def delete_ui(self):
if maya.window(self.myPlanetarySystem, exists=True):
maya.deleteUI(self.myPlanetarySystem, window=True)
def body(self, distance, radius, bonus_scale, is_sun, r = 0.5, g = 0.5, b = 0.5, *args):
obj = create_body(distance, radius, bonus_scale, r, g, b)
obj.spawn_body()
if not is_sun:
obj.animate_body()
create_ui('myPlanetarySystem')