//public static GvitechModel MergeModels(GvitechModel[] arrModel, GvitechVector3[] arrOff) //{ // if (((arrModel == null) || (arrOff == null)) || (arrModel.Length != arrOff.Length)) // { // return null; // } // int length = arrModel.Length; // IModel[] modelArray = new IModel[length]; // IVector3[] vectorArray = new IVector3[length]; // for (int i = 0; i < length; i++) // { // modelArray[i] = ((arrModel[i] == null) || arrModel[i].IsNull) ? null : arrModel[i].Model; // vectorArray[i] = ((arrOff[i] == null) || arrOff[i].IsNull) ? null : arrOff[i].Vector3; // } // return new GvitechModel(MergeModels(modelArray, vectorArray)); //} public static IModel MergeModels(IModel[] arrModel, IVector3[] arrOff) { IModel model = null; try { IModel model2 = null; IDrawGroup drawGroup = null; IDrawPrimitive primitive = null; IVector3 vector = null; model = resFactory.CreateModel(); for (int i = 0; i < arrModel.Length; i++) { if (((model2 = arrModel[i]) != null) && (model2.GroupCount != 0)) { for (int j = 0; j < model2.GroupCount; j++) { drawGroup = model2.GetGroup(j); if ((drawGroup != null) && (drawGroup.PrimitiveCount != 0)) { for (int k = 0; k < drawGroup.PrimitiveCount; k++) { if (((vector = arrOff[i]) != null) && (((arrOff[i].X != 0.0) || (arrOff[i].Y != 0.0)) || (arrOff[i].Z != 0.0))) { uint num; primitive = drawGroup.GetPrimitive(k); if ((primitive != null) && ((num = primitive.VertexArray.Length) != 0)) { int num2 = (int)(num / 3); for (int m = 0; m < num2; m++) { primitive.VertexArray.Set(m * 3, primitive.VertexArray.Array[m * 3] + ((float)vector.X)); primitive.VertexArray.Set((m * 3) + 1, primitive.VertexArray.Array[(m * 3) + 1] + ((float)vector.Y)); primitive.VertexArray.Set((m * 3) + 2, primitive.VertexArray.Array[(m * 3) + 2] + ((float)vector.Z)); } } } } model.AddGroup(drawGroup); } } } } return(model); } catch (Exception exception) { return(null); } }