private void GatherObjects(IEnumerable<MDagPath> inObjects, out LinkedList<MayaObject> ObjList, out HashSet<MayaObjPropId> Found) { ObjList = new LinkedList<MayaObject>(); Found = new HashSet<MayaObjPropId>(); foreach (var Obj in inObjects) { var mo = new MayaObject(); // Init the object mo.type = Obj.node.apiTypeStr; mo.name = Obj.partialPathName; mo.properties = new Dictionary<string, MayaObjPropVal>(); // The two first properties var mopi = new MayaObjPropId("ObjName", null); Found.Add(mopi); var mopv = new MayaObjPropVal(null, Obj.partialPathName); mo.properties.Add("ObjName", mopv); mopi = new MayaObjPropId("ObjType", null); Found.Add(mopi); mopv = new MayaObjPropVal(null, Obj.node.apiTypeStr); mo.properties.Add("ObjType", mopv); // The rest of the properties Object mobj = SpecializeObject(Obj); if (mobj != null) { var nodeProp = mobj.GetType() .GetProperties() .Where(pi => (pi.GetGetMethod() != null) && (pi.PropertyType == typeof(string) || pi.PropertyType == typeof(int) || pi.PropertyType == typeof(double) || pi.PropertyType == typeof(bool) || pi.PropertyType == typeof(float))) .Select(pi => new { Name = pi.Name, Value = pi.GetGetMethod().Invoke(mobj, null), Type = pi.PropertyType }); foreach (var pair in nodeProp) { // Add the property to the global prop set found mopi = new MayaObjPropId(pair.Name, pair.Type); Found.Add(mopi); // Add the property value to the specific object mopv = new MayaObjPropVal(pair.Type, pair.Value.ToString()); mo.properties.Add(pair.Name, mopv); } } var typeProp = Obj.GetType() .GetProperties() .Where(pi => (pi.GetGetMethod() != null) && (pi.PropertyType == typeof(string) || pi.PropertyType == typeof(int) || pi.PropertyType == typeof(double) || pi.PropertyType == typeof(bool) || pi.PropertyType == typeof(float))) .Select(pi => new { Name = pi.Name, Value = pi.GetGetMethod().Invoke(Obj, null), Type = pi.PropertyType }); foreach (var pair in typeProp) { // Add the property to the global prop set found mopi = new MayaObjPropId(pair.Name, pair.Type); Found.Add(mopi); // Add the property value to the specific object mopv = new MayaObjPropVal(pair.Type, pair.Value.ToString()); // Add only if the property hasn't been seen already if (!mo.properties.ContainsKey(pair.Name)) mo.properties.Add(pair.Name, mopv); } ObjList.AddLast(mo); } }
private void GatherObjects(IEnumerable <MDagPath> inObjects, out LinkedList <MayaObject> ObjList, out HashSet <MayaObjPropId> Found) { ObjList = new LinkedList <MayaObject>(); Found = new HashSet <MayaObjPropId>(); foreach (var Obj in inObjects) { var mo = new MayaObject(); // Init the object mo.type = Obj.node.apiTypeStr; mo.name = Obj.partialPathName; mo.properties = new Dictionary <string, MayaObjPropVal>(); // The two first properties var mopi = new MayaObjPropId("ObjName", null); Found.Add(mopi); var mopv = new MayaObjPropVal(null, Obj.partialPathName); mo.properties.Add("ObjName", mopv); mopi = new MayaObjPropId("ObjType", null); Found.Add(mopi); mopv = new MayaObjPropVal(null, Obj.node.apiTypeStr); mo.properties.Add("ObjType", mopv); // The rest of the properties Object mobj = SpecializeObject(Obj); if (mobj != null) { var nodeProp = mobj.GetType() .GetProperties() .Where(pi => (pi.GetGetMethod() != null) && (pi.PropertyType == typeof(string) || pi.PropertyType == typeof(int) || pi.PropertyType == typeof(double) || pi.PropertyType == typeof(bool) || pi.PropertyType == typeof(float))) .Select(pi => new { Name = pi.Name, Value = pi.GetGetMethod().Invoke(mobj, null), Type = pi.PropertyType }); foreach (var pair in nodeProp) { // Add the property to the global prop set found mopi = new MayaObjPropId(pair.Name, pair.Type); Found.Add(mopi); // Add the property value to the specific object mopv = new MayaObjPropVal(pair.Type, pair.Value.ToString()); mo.properties.Add(pair.Name, mopv); } } var typeProp = Obj.GetType() .GetProperties() .Where(pi => (pi.GetGetMethod() != null) && (pi.PropertyType == typeof(string) || pi.PropertyType == typeof(int) || pi.PropertyType == typeof(double) || pi.PropertyType == typeof(bool) || pi.PropertyType == typeof(float))) .Select(pi => new { Name = pi.Name, Value = pi.GetGetMethod().Invoke(Obj, null), Type = pi.PropertyType }); foreach (var pair in typeProp) { // Add the property to the global prop set found mopi = new MayaObjPropId(pair.Name, pair.Type); Found.Add(mopi); // Add the property value to the specific object mopv = new MayaObjPropVal(pair.Type, pair.Value.ToString()); // Add only if the property hasn't been seen already if (!mo.properties.ContainsKey(pair.Name)) { mo.properties.Add(pair.Name, mopv); } } ObjList.AddLast(mo); } }