Пример #1
0
        //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);
            }
        }