我试图在选定的顶点上创建定位器并使它们成为一个组。然后使用该组创建一个新的显示层。 但是这在形式之后并不起作用,我不知道为什么。 我可以得到一些帮助吗?
private String getWidthFitString(String input) {
Paint paint = text.getPaint();
// you can define max width by yourself
int maxWidth = getContentMaxWidth();
float width = paint.measureText(input);
if (width > maxWidth) {
List<String> words = Arrays.asList(input.split("\\s"));
int breakLinePosition = 0;
String toBreakLineText;
List<String> toBreakLineWords = new ArrayList<>();
while (breakLinePosition < words.size()) {
toBreakLineWords.add(words.get(breakLinePosition));
toBreakLineText = TextUtils.join(" ", toBreakLineWords);
float currentWidth = paint.measureText(toBreakLineText);
if (currentWidth > maxWidth) {
break;
}
breakLinePosition ++;
}
if (breakLinePosition > 1) {
toBreakLineWords.remove(toBreakLineWords.size() - 1);
toBreakLineText = TextUtils.join(" ", toBreakLineWords);
List<String> fromBreakLineWords = new ArrayList<>();
for (int i = breakLinePosition; i < words.size(); i++) {
fromBreakLineWords.add(words.get(i));
}
return toBreakLineText + "\n" + getWidthFitString(TextUtils.join(" ", fromBreakLineWords));
} else {
return input;
}
}
return input;
}
答案 0 :(得分:1)
&#34; 但这不起作用...... &#34;没有帮助找到解决方案看看https://stackoverflow.com/help/mcve。 但无论如何,你的代码有一些严重的问题,无法工作:
d = cmds.xform(c, a=True, t=(pos[0], pos[1], pos[2]) )
xform()
命令不返回任何内容,只更改对象。所以d是None
您尝试在以下代码中使用的内容。
没有必要选择任何东西,你可以随时使用对象名称作为agrument你在这里尝试做什么:
g = cmds.group(d, n = 'loc')
当然使用None d
参数。
并且您正在尝试为每个定位器创建一个组,并且每个组都应该具有相同的名称,因为Maya不能具有完全相同名称的对象。
答案 1 :(得分:1)
我同意haggi krey。此外,您应该创建一些命名约定或使用长名称,因为它将在每个循环中继续创建loc01。
您应该避免使用cmds.select并使用参数填充命令。
此外,如果您是脚本编写的初学者,您可以对描述您正在做什么的每一行进行评论:#将定位器'c'分组; #设置定位器位置......等
import maya.cmds as cmds
sel = cmds.ls(sl=True, fl=True)
x=1
for i in sel:
pos = cmds.pointPosition(i)
c = cmds.spaceLocator(n="loc{0}".format(x) , p=(0, 0, 0) )
x+=1
d = cmds.xform(c[0], a=True, t=(pos[0], pos[1], pos[2]) )
g = cmds.group(c, n = 'loc_grp_{0}'.format(c[0][-2:]))
dspL = cmds.createDisplayLayer( noRecurse=True, name='LocLayer_{0}'.format(c[0]))
cmds.editDisplayLayerMembers(dspL, g, noRecurse=True)