/// <summary> /// well, this action is truely dangerous /// </summary> /// <param name="list"></param> /// <returns></returns> public static bool CombineMaterials(MSelectionList list, bool deleteRepeated = true) { if (!BasicFunc.CheckSelectionList(list, 2)) { Debug.Log("please choose at least 2 materials"); return(false); } string firstMatName = ""; List <MObject> deleteList = new List <MObject>(); List <MSelectionList> waitForAssign = new List <MSelectionList>(); MDGModifier dGModifier = new MDGModifier(); for (uint i = 0; i < list.length; i++) { //Debug.Log(i + " mat test"); MObject matObject = new MObject(); list.getDependNode(i, matObject); MFnDependencyNode dnode = new MFnDependencyNode(matObject); if (i == 0) { firstMatName = dnode.absoluteName; continue; } else { deleteList.Add(matObject); } //Debug.Log(i + " node:" + dnode.absoluteName); if (matObject.hasFn(MFn.Type.kLambert) || matObject.hasFn(MFn.Type.kBlinn) || matObject.hasFn(MFn.Type.kPhong)) { //Debug.Log("has mat fn"); //MMaterial mat = new MMaterial(matObject); //MColor color = new MColor(); //mat.getDiffuse(color); //Debug.Log("mat:" + dnode.absoluteName + " ,color:" + BasicFunc.MToString(color)); SelectObjectsWithMat(dnode); //Debug.Log("finish select"); //waitForAssign.Add(BasicFunc.GetSelectedList()); AssignMat(firstMatName); //Debug.Log("finish assign"); BasicFunc.DeleteByCMD(dnode.absoluteName); //Debug.Log("finish delete"); } else { Debug.Log("no mat fn"); } } dGModifier.doIt(); //MGlobal.executeCommandOnIdle("hyperShade -objects " + matNode.absoluteName); return(true); }
public static bool CombineMaterials(List <MObject> list, bool deleteRepeated = true) { if (list.Count < 2) { Debug.Log("please choose at least 2 materials"); return(false); } string firstMatName = ""; List <MObject> deleteList = new List <MObject>(); List <MSelectionList> waitForAssign = new List <MSelectionList>(); MDGModifier dGModifier = new MDGModifier(); for (int i = 0; i < list.Count; i++) { //Debug.Log(i + " mat test"); MObject matObject = list[i]; MFnDependencyNode dnode = new MFnDependencyNode(matObject); if (i == 0) { firstMatName = dnode.absoluteName; continue; } else { deleteList.Add(matObject); } //Debug.Log(i + " node:" + dnode.absoluteName); if (matObject.hasFn(MFn.Type.kLambert) || matObject.hasFn(MFn.Type.kBlinn) || matObject.hasFn(MFn.Type.kPhong)) { SelectObjectsWithMat(dnode); AssignMat(firstMatName); BasicFunc.DeleteByCMD(dnode.absoluteName); } else { Debug.Log("no mat fn"); } } dGModifier.doIt(); //MGlobal.executeCommandOnIdle("hyperShade -objects " + matNode.absoluteName); return(true); }