0

我在编写一些最大脚本时遇到了一个令人沮丧的问题,希望有人知道我的代码为什么不起作用。

我在与其他几何图形相同的脚本中取得了成功并附加:

fn base = (
     base_geo = convertToPoly(Plane length:10 width:10 pos:[0,0,5] isSelected:on lengthsegs:1 widthsegs:1)
     base_geo.pivot = [0,0,0]
     return base_geo
)

corner_geo = base()
plane1 = base()
--irrelevant rotation + transformation scripts
corner_geo.attach plane1 corner_geo

这很好用

但是,当我稍后尝试相同的事情时:

fn place_trim x y z trim_type = (
maxOps.cloneNodes trim_type cloneType:#copy newNodes:&cur_group
--convertToPoly(cur_group)
cur_group.pos = [x,y,z]

    --not sure how to properly access this name
--print "cur_group name = " + cur_group[1].name
return cur_group
)


fn walls trim_type = (
wall_geo = base()
rotate wall_geo (angleaxis -90 [1,0,0])
plane1 = base()
wall_geo.attach plane1 wall_geo

if trim_type == "inner" do (
    trim_type = final_inner_trim
)
if trim_type == "outer" do (
    trim_type = final_trim
)

if trim_type != undefined do (
    trim = place_trim 0 0 0 trim_type

wall_geo.attach 修剪 wall_geo

)

return wall_geo
)


final_trim = $trim_final
final_inner_trim = $inner_trim_final
walls("outer")

当我到达代码的粗体部分时,我收到此错误:“--无法转换:#($Editable_Poly:trim_final001 @ [0,0,0]) 到类型:节点”

对于我做错了什么的任何建议,我将不胜感激!

4

2 回答 2

2

虽然我已经回复了cgtalk,但这里的评论把它变成了一个稍微不同的话题。在这种情况下,我能想到的按名称获取 $Plane000 的新副本的唯一方法(假设您没有指定任何其他默认前缀)将搜索具有最高值的 $Plane* 节点中的 n 个数字 - 永远不要那样做。

没关系,在这种特殊情况下,有一个简单的解决方案可以直接返回节点;在某些情况下(例如 detach 命令)你不会。同样,分离的对象将获得默认的对象前缀,但实际上获得它的最简单方法就是

obj = objects[objects.count]

这同样适用于一堆新创建的对象:之前获取对象的数量,然后当您通过一个您几乎无法控制或无法控制的过程(想想第三方插件)在场景中获得一些新节点时,只需收集开始的节点从上一个增加的计数中,您将到达那里。

于 2013-09-30T20:14:09.117 回答
1

我不确定它有那么复杂。很简单,您的 place_trim 函数返回一个数组。即使它是一个大小为 1 的数组,Max 也不会将其隐式转换为节点指针。您需要将您的物品从阵列中取出以进行附加。

你想做的是

对于修剪中的 some_trom do ( wall_geo.attach some_trim wall_geo )

如果性能是一个问题,您可以在执行此操作时禁用 ref msgs / undo。

于 2013-10-01T15:45:30.697 回答