我遇到了一些令人沮丧的问题,我写的是一些最大脚本,希望有人知道为什么我的代码无效。
我在使用其他几何体的相同脚本中取得了成功并附加:
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 trim wall_geo
)
return wall_geo
)
final_trim = $trim_final
final_inner_trim = $inner_trim_final
walls("outer")
当我到达代码的粗体部分时,我收到此错误: “ - 无法将:#($ Editable_Poly:trim_final001 @ [0,0,0])转换为:node”
我非常感谢有关我正在做错的任何建议!
答案 0 :(得分:2)
虽然我已在cgtalk回复,但此处的评论将其转变为略有不同的主题。在这样的情况下,我能想到的唯一方法是获取$ Plane000的新副本(假设这个默认前缀,因为你没有指定任何其他名称),这将是搜索具有最高值的$ Plane *节点中的n个数字 - 永远不要那样做。
在这种特殊情况下,有一个简单的解决方案可以直接返回节点;在某些情况下(例如分离命令)你不会。同样,分离的对象将获得默认的Object前缀,但实际上获取它的最简单方法是
obj = objects[objects.count]
同样适用于一堆新创建的对象:之前得到一个对象的数量,然后当你通过一个你很少或没有控制的过程(想想第三方插件)获得场景中的一些新节点时,只需收集从上一次计数开始的节点将被提升到那里。
答案 1 :(得分:1)
我不确定它那么复杂。很简单,你的place_trim函数返回一个数组。即使它的大小为1的数组,Max也不会将其隐式转换为节点指针。您需要从阵列中取出您的物品以进行附加。
你想做的是
for some_trom in trim do( wall_geo.attach some_trim wall_geo )
如果需要考虑性能,可以在执行此操作时禁用ref msgs / undo。