objs = geometry as array ---obj=取所有几何物
sortObjs = #()---定义新变量 sortObjs为数组
while objs.count != 0 do--判断循环 条件:场景中有几何物
(
a = objs[1] --附量a取首个几何物
deleteItem objs 1--删除obj成员中此次拿出来对比的a
temp = #(a)--定义储存结果的新变量temp并加入a
if objs.count > 0 then--已经删除了对比几何物的场景中还存在几何物,假如不存在那场景中只有一个
(
Size = nodeGetBoundingBox a a.transform as string--这里不懂了,没有用过函数nodeGetBoundingBox
\\理解是大小,难道是模型的长宽高?
Count = getPolygonCount a as string--难道是包含模型的点数与面数?
for o in objs do --遍历场景中剩余的几何物并赋o
(
oSize = nodeGetBoundingBox o o.transform as string
oCount = getPolygonCount o as string--同上取其信息
if oSize == Size and Count == oCount do append temp o--对比,相同则temp数组加入新成员o
)--遍历结束
if temp.count > 1 then--不同来了,没加入说明a的相同外形只有一个,下面先开始有相同外形的程序
(
for o in temp do--以储存与a相同外形的数组为循环开始
(
n = findItem objs o--寄存器n寻找主体中temp的成员
if n != 0 do deleteItem objs n--逐个删除,使主体寄存器不存在与对比物a相同外形的模型
)--循环结束,主体变量中已不存在与对比物相同外形的模型。
sortMats = #()--新数组变量
while temp.count != 0 do--判断循环,以temp删除完成员结束,
\\这里temp储存着相同外形,结束意味着开始下一个外形
(
b = temp[1]--寄存器b赋量
deleteItem temp 1--后来重新理解,同第一步,删除自身使b作为对比物
temp2 = #(b)--新数组 阿2赋量b
if temp.count > 0 then--删除后小于或等于0则说明相同外形只有一个
\\上面已经通过判断,temp至少有2个,这里删除首个,应该还有1个以上
\\再往下看看
(
for o in temp do if o.mat == b.mat do append temp2 o--刚刚删除的是对比物b,以剩下的与a相同外形来循环
\\据理解o.mat是代表此模型材质。if 与b.mat相同 加入数组中
if temp2.count > 1 do--上面的循环已结束,此时temp2所有成员材质相同
(
for o in temp2 do--来来来,遍历材质相同的成员
(
n = findItem temp o--n再次出场,寻找开始
if n != 0 do deleteItem temp n--挨个删除相同外形中与首个材质相同的成员
\\此时temp中已去除首个材质(与temp2相同的材质),有可能剩下其他材质,也有可能已经完蛋。
)--遍历结束
)--如果.....呃,如果temp2的材质在temp中只有一个相同,temp2.count会=1,直接跳来这里
append sortMats temp2--先加储存相同材质的temp2赋入刚刚定义的新数组sortMat
)
else append sortMats temp2--删除temp中首个模型后temp没有数据会直接来到这里
temp2 = #()--这里咨询一下大神,为什么只有一个模型的情况下,要重置temp2
\\重新理解了一下,重置无论只有一个或多个,都会执行,这么说重置为了下一条循环到这里不会混乱
)
append sortObjs sortMats--大神,这里我没找到sortObjs的定义命令,难道直接赋入语句中相等于定义了?
)
else append sortObjs #(temp)--前面主体删除首个后等于0会直接来这里,也就是说场景中只有一个模型
)
else append sortObjs #(temp)---好像对应前面的while,这不是一个循环判断语句吗?为什么还有否向?
\\我印象中循环语句不符合则直接不在循环内,这个else是语句的结束语吗?
temp=#()
)
format "本场景中有%类物体\n总计%个\n" sortObjs.count geometry.count
for i=1 to sortObjs.count do
(
format "\t第%类物体:\n" i
c = 0
for j=1 to sortObjs[i].count do
(
format "\t材质 % 小计%个\n" sortObjs[i][j][1].mat sortObjs[i][j].count--这里是我惊奇的地方
\\数组竟然可以[a][b][c]多个子成员
c += sortObjs[i][j].count--请问大神 !=不等于 +=自身再加,那-=是不是自身再减?==又是什么?大于并等于呢?
)
format "\t共计%个:\n" c--不明白\t的作用
)
\\最后,我用四个字就能概括这篇代码
\\大神牛逼!
@sinxye