python 创建对象时自动调用的函数_mayapython:当一个函数中的一个对象在另一个函数中创建时,如何调用和编辑该对象的属性?...

计划:

我一直在编写一个脚本,用于测量用户选择的两个顶点之间的距离,并根据这些顶点之间所需的长度缩放对象。在

问题是:

错误声明它找不到我在函数中创建的textFieldButtonGrp对象。在

我基本上把窗口格式的东西放在一个函数中:def window_presets():

'''

presets for UI window

'''

if mc.window("Distance Scale Tool", exists=True):

mc.deleteUI("Distance Scale Tool")

mc.window("Distance Scale Tool", t="Distance Based Scale Tool")

mc.rowColumnLayout(numberOfColumns=2,

columnAttach=(1, 'left', 0),

columnWidth=[(1,100), (2,300)])

mc.text(l="Current Length")

current_length = mc.textFieldButtonGrp("Current Length",

editable=False,

text="{0}".format(refresh_current_dist()),

buttonLabel="Refresh",

buttonCommand=refresh_current_dist)

mc.text(l="Desired Length")

desired_length = mc.textFieldButtonGrp("Desired Length",

buttonLabel="Scale",

buttonCommand=scale_dist,

tcc=refresh_scale_factor)

mc.showWindow()

我希望“刷新”按钮调用另一个函数来编辑我创建的textFieldButtonGrp:

^{pr2}$

但是“当前长度”。。。。它似乎不存在。。。。在

与“期望长度”相同。。。。在

全文如下:## ((Ax - Bx)**2 + (Ay - By)**2 + (Az - Bz)**2)**0.5

import maya.cmds as mc

import math

def window_presets():

'''

presets for UI window

'''

if mc.window("Distance Scale Tool", exists=True):

mc.deleteUI("Distance Scale Tool")

mc.window("Distance Scale Tool", t="Distance Based Scale Tool")

mc.rowColumnLayout(numberOfColumns=2,

columnAttach=(1, 'left', 0),

columnWidth=[(1,100), (2,300)])

mc.text(l="Current Length")

current_length = mc.textFieldButtonGrp("Current Length",

editable=False,

text="{0}".format(refresh_current_dist()),

buttonLabel="Refresh", buttonCommand=refresh_current_dist)

mc.text(l="Desired Length")

desired_length = mc.textFieldButtonGrp("Desired Length",

buttonLabel="Scale",

buttonCommand=scale_dist,

tcc=refresh_scale_factor)

mc.showWindow()

def get_object_name():

selPoints = mc.ls(sl=True)

obj_name = selPoints[0].split('.')[0]

return obj_name

def get_coordinates():

'''

Gets coordinates of selected points and gets distance between them

'''

selPoints = mc.ls(sl=True)

obj_name = get_object_name()

print obj_name

vtxCoordList = mc.xform(selPoints,

query=True,

translation=True,

ws=True)

Ax, Ay, Az = vtxCoordList[:-3]

Bx, By, Bz = vtxCoordList[3:]

return (Ax, Bx, Ay, By, Az, Bz)

def calculate_distance(Ax, Bx, Ay, By, Az, Bz):

'''

Determines distance between 2 coordinates on single mesh.

Below are formulas for distance based on single axis:

dx = ((Ax - Bx)**2)**0.5

print "Distance on X axis is: {0}".format(dx) #distance on X axis

dy = ((Ay - By)**2)**0.5

print "Distance on Y axis is: {0}".format(dy) #distance on Y axis

dz = ((Az - Bz)**2)**0.5

print "Distance on Z axis is: {0}".format(dz) #distance on Z axis

'''

distance = math.sqrt((Ax - Bx)**2 + (Ay - By)**2 + (Az - Bz)**2)

print "the distance between points is {0}".format(distance)

return distance

def refresh_textfield(distance):

if mc.textFieldButtonGrp("Current Length", exists=True):

mc.textFieldButtonGrp("Current Length",

edit=True,

text="{0}".format(distance))

else:

print "Current Length dont exist"

def refresh_current_dist():

'''

returns current distance

'''

current_coordinates = get_coordinates()

current_distance = calculate_distance(*current_coordinates)

refresh_textfield(current_distance)

return current_distance

def refresh_scale_factor(sf):

'''

returns factor by which object will be scaled

'''

current_distance = refresh_current_dist()

scale_factor = (float(sf))/(float(current_distance))

print "dist btwn pnts is d: {0}".format(current_distance)

print "sf is {0}".format(sf)

print "user input is {0}".format(sf)

print "scale factor is {0}".format(scale_factor)

print "-"*10

return scale_factor

def scale_dist():

'''

scale object to match measurement

'''

user_input = float(mc.textFieldButtonGrp("Desired Length",

query=True,

text=True))

scale_factor = refreshScaleFactor(user_input)

mc.makeIdentity(get_object_name(),

apply=True,

translate=1,

rotate=1,

scale=1,

normal=0,

preserveNormals=1)#freeze transformations

mc.DeleteAllHistory()

mc.scale(scale_factor, scale_factor, scale_factor, get_object_name())

print "you scaled by {0}".format(scale_factor)

mc.makeIdentity(get_object_name(),

apply = True,

translate=1,

rotate=1,

scale=1,

normal=0,

preserveNormals=1)#freeze transformations

if __name__ == '__main__':

window_presets()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值