コード例 #1
0
ファイル: ModelExtensions.cs プロジェクト: NCC-Lykos/Chisel
        private static bool UpdateModels(Document document, MapObject mo, Dictionary <string, ModelReference> cache)
        {
            var updatedChildren = false;

            foreach (var child in mo.GetChildren())
            {
                updatedChildren |= UpdateModels(document, child, cache);
            }

            var e = mo as Entity;

            if (e == null || !ShouldHaveModel(e))
            {
                var has = e != null && HasModel(e);
                if (has)
                {
                    UnsetModel(e);
                }
                return(updatedChildren || has);
            }

            var model         = GetModelName(e);
            var existingModel = e.MetaData.Get <string>(ModelNameMetaKey);

            if (String.Equals(model, existingModel, StringComparison.InvariantCultureIgnoreCase))
            {
                return(updatedChildren);                                                                                  // Already set; No need to continue
            }
            if (cache.ContainsKey(model))
            {
                var mr = cache[model];
                if (mr == null)
                {
                    UnsetModel(e);
                }
                else
                {
                    SetModel(e, mr);
                }
                return(true);
            }
            else
            {
                var file = document.Environment.Root.TraversePath(model);
                if (file == null || !ModelProvider.CanLoad(file))
                {
                    // Model not valid, get rid of it
                    UnsetModel(e);
                    cache.Add(model, null);
                    return(true);
                }

                try
                {
                    var mr = ModelProvider.CreateModelReference(file);
                    SetModel(e, mr);
                    cache.Add(model, mr);
                    return(true);
                }
                catch
                {
                    // Couldn't load
                    cache.Add(model, null);
                    return(updatedChildren);
                }
            }
        }
コード例 #2
0
 public static PlaceholderPageProviderBuilder <T> Page <T>(IBuilder <IResourceProvider> templateProvider, ModelProvider <T> modelProvider) where T : PageModel
 {
     return(Page <T>(templateProvider.Build(), modelProvider));
 }
コード例 #3
0
        public string PreviewModelSourceCode(string dbName, string tableName, string nsName, string projectName)
        {
            var dataset = ServerManager.GetDataSet(dbName);

            return(ModelProvider.CreateDocument(dataset, tableName, nsName, projectName).GetSourceCode());
        }
コード例 #4
0
 public void Init ()
 {
     connection = new HyenaSqliteConnection ("test.db");
     provider = new ModelProvider (connection);
 }
コード例 #5
0
 public ScribanPageProviderBuilder <T> Model(ModelProvider <T> modelProvider)
 {
     _ModelProvider = modelProvider;
     return(this);
 }
コード例 #6
0
ファイル: Editor.cs プロジェクト: NCC-Lykos/Chisel
        private void EditorLoad(object sender, EventArgs e)
        {
            FileTypeRegistration.RegisterFileTypes();

            SettingsManager.Read();

            if (TaskbarManager.IsPlatformSupported)
            {
                TaskbarManager.Instance.ApplicationId = FileTypeRegistration.ProgramId;

                _jumpList = JumpList.CreateJumpList();
                _jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;
                _jumpList.Refresh();
            }

            UpdateDocumentTabs();
            UpdateRecentFiles();

            DockBottom.Hidden = DockLeft.Hidden = DockRight.Hidden = true;

            MenuManager.Init(mnuMain, tscToolStrip);
            MenuManager.Rebuild();

            BrushManager.Init();
            SidebarManager.Init(RightSidebar);

            ViewportManager.Init(TableSplitView);
            ToolManager.Init();

            foreach (var tool in ToolManager.Tools)
            {
                var tl     = tool;
                var hotkey = Chisel.Settings.Hotkeys.GetHotkeyForMessage(HotkeysMediator.SwitchTool, tool.GetHotkeyToolType());
                tspTools.Items.Add(new ToolStripButton(
                                       "",
                                       tl.GetIcon(),
                                       (s, ea) => Mediator.Publish(HotkeysMediator.SwitchTool, tl.GetHotkeyToolType()),
                                       tl.GetName())
                {
                    Checked      = (tl == ToolManager.ActiveTool),
                    ToolTipText  = tl.GetName() + (hotkey != null ? " (" + hotkey.Hotkey + ")" : ""),
                    DisplayStyle = ToolStripItemDisplayStyle.Image,
                    ImageScaling = ToolStripItemImageScaling.None,
                    AutoSize     = false,
                    Width        = 36,
                    Height       = 36
                }
                                   );
            }

            TextureProvider.SetCachePath(SettingsManager.GetTextureCachePath());
            MapProvider.Register(new MapFormatProvider());
            MapProvider.Register(new ObjProvider());
            MapProvider.Register(new ThreeDtProvider());
            GameDataProvider.Register(new FgdProvider());
            TextureProvider.Register(new WadProvider());
            TextureProvider.Register(new SprProvider());
            TextureProvider.Register(new VmtProvider());
            ModelProvider.Register(new MdlProvider());

            WadProvider.ReplaceTransparentPixels   = !Chisel.Settings.View.DisableWadTransparency && !Chisel.Settings.View.GloballyDisableTransparency;
            TextureHelper.EnableTransparency       = !Chisel.Settings.View.GloballyDisableTransparency;
            TextureHelper.DisableTextureFiltering  = Chisel.Settings.View.DisableTextureFiltering;
            TextureHelper.ForceNonPowerOfTwoResize = Chisel.Settings.View.ForcePowerOfTwoTextureResizing;

            Subscribe();

            Mediator.MediatorException += (mthd, ex) => Logging.Logger.ShowException(ex.Exception, "Mediator Error: " + ex.Message);

            if (Chisel.Settings.View.LoadSession)
            {
                foreach (var session in SettingsManager.LoadSession())
                {
                    LoadFileGame(session.Item1, session.Item2);
                }
            }

            ProcessArguments(System.Environment.GetCommandLineArgs());
        }
コード例 #7
0
 public TableViewModel(DataGrid dataGrid, ModelProvider modelController) : this(dataGrid)
 {
     _modelController     = modelController;
     dataGrid.ItemsSource = modelController.Glucoses;
 }
コード例 #8
0
 public PlaceholderPageProviderBuilder <T> Model(ModelProvider <T> modelProvider)
 {
     _ModelProvider = modelProvider;
     return(this);
 }
コード例 #9
0
        public PlaceholderPageProvider(IHandler parent, IResourceProvider templateProvider, ModelProvider <T> modelProvider, string?title)
        {
            Parent = parent;

            TemplateProvider = templateProvider;
            ModelProvider    = modelProvider;
            Title            = title;
        }
コード例 #10
0
ファイル: StringPage.cs プロジェクト: BGCX067/faat-hg-to-git
 public bool Load()
 {
     return(Load(ModelProvider.GetData(Identity)));
 }
コード例 #11
0
        /// <summary>
        /// Constructor used to create a new model for edit
        /// </summary>
        /// <param name="storageType"></param>
        /// <param name="ifcVersion"></param>
        /// <param name="editorDetails"></param>
        protected IfcStore(XbimStoreType storageType, XbimSchemaVersion ifcVersion, XbimEditorCredentials editorDetails) : this()
        {
            var model = ModelProvider.Create(ifcVersion, storageType);

            AssignModel(model, editorDetails, ifcVersion);
        }
コード例 #12
0
        /// <summary>
        /// Constructor used to create a new persistent model with specified path
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="ifcVersion"></param>
        /// <param name="editorDetails"></param>
        protected IfcStore(string filepath, XbimSchemaVersion ifcVersion, XbimEditorCredentials editorDetails) : this()
        {
            var model = ModelProvider.Create(ifcVersion, filepath);

            AssignModel(model, editorDetails, ifcVersion);
        }
コード例 #13
0
ファイル: RazorPageProvider.cs プロジェクト: ondator/GenHTTP
        public RazorPageProvider(IHandler parent, IResourceProvider templateProvider, ModelProvider <T> modelProvider, string?title)
        {
            Parent = parent;

            TemplateProvider = templateProvider;
            ModelProvider    = modelProvider;
            Title            = title;

            Renderer = new RazorRenderer <T>(TemplateProvider);
        }
コード例 #14
0
 public static PlaceholderPageProviderBuilder <T> Page <T>(IResourceProvider templateProvider, ModelProvider <T> modelProvider) where T : PageModel
 {
     return(new PlaceholderPageProviderBuilder <T>().Template(templateProvider).Model(modelProvider));
 }
コード例 #15
0
        public PlaceholderPageProvider(IHandler parent, IResourceProvider templateProvider, ModelProvider <T> modelProvider, ContentInfo pageInfo)
        {
            Parent = parent;

            TemplateProvider = templateProvider;
            ModelProvider    = modelProvider;

            PageInfo = pageInfo;
        }
コード例 #16
0
ファイル: RazorPageProvider.cs プロジェクト: fossabot/GenHTTP
        public RazorPageProvider(IHandler parent, IResourceProvider templateProvider, ModelProvider <T> modelProvider, ContentInfo pageInfo)
        {
            Parent = parent;

            TemplateProvider = templateProvider;
            ModelProvider    = modelProvider;
            PageInfo         = pageInfo;

            Renderer = ModRazor.Template <T>(templateProvider).Build();
        }
コード例 #17
0
ファイル: MSL2Provider.cs プロジェクト: juanjp600/cbre
        protected override DataStructures.MapObjects.Map GetFromStream(Stream stream, IEnumerable <string> modelDirs, out Image[] lightmaps)
        {
            lightmaps = null;
            var map = new DataStructures.MapObjects.Map();

            map.CordonBounds = new Box(Coordinate.One * -16384, Coordinate.One * 16384);
            BinaryReader br = new BinaryReader(stream);

            List <ModelReference> models = null;

            //header
            bool hasLightmap = Math.Abs(br.ReadSingle()) > 0.01f;

            if (hasLightmap)
            {
                UInt32 lightmapSize = br.ReadUInt32();
                stream.Position += lightmapSize;
            }
            int entityCount = (int)br.ReadSingle() - 2;

            for (int i = 0; i < entityCount; i++)
            {
                int         meshCount         = (int)br.ReadSingle();
                List <long> memblockLocations = new List <long>();
                for (int j = 0; j < meshCount; j++)
                {
                    stream.Position += 4;
                    memblockLocations.Add(stream.Position);
                    SkipMemblock(br);
                }

                bool isBrush = Math.Abs(br.ReadSingle()) > 0.01f;
                if (isBrush)
                {
                    Dictionary <int, List <Face> > faces = new Dictionary <int, List <Face> >();
                    long returnPosition = stream.Position;
                    for (int j = 0; j < meshCount; j++)
                    {
                        stream.Position = memblockLocations[j];
                        faces.Add(j, new List <Face>());
                        ReadMemblockMesh(br, map, faces[j]);
                    }
                    stream.Position = returnPosition;
                    SkipMemblock(br);
                    for (int j = 0; j < 2; j++)
                    {
                        stream.Position += 4;
                    }

                    float xTranslate = br.ReadSingle();
                    float zTranslate = br.ReadSingle();
                    float yTranslate = br.ReadSingle();

                    float xScale = br.ReadSingle();
                    float zScale = br.ReadSingle();
                    float yScale = br.ReadSingle();

                    for (int j = 8; j < 25; j++)
                    {
                        stream.Position += 4;
                    }
                    List <SubmeshTextureInfo> textures = new List <SubmeshTextureInfo>();
                    for (int j = 0; j < meshCount; j++)
                    {
                        SubmeshTextureInfo submeshTextureInfo = new SubmeshTextureInfo();

                        submeshTextureInfo.TextureName = System.IO.Path.GetFileNameWithoutExtension(br.ReadLine());
                        float flags        = br.ReadSingle();
                        bool  faceIsHidden = Math.Abs(flags - 1) < 0.01f;
                        bool  faceIsLit    = Math.Abs(flags - 800) < 0.01f;
                        if (faceIsLit)
                        {
                            br.ReadSingle();
                        }
                        for (int k = 0; k < 4; k++)
                        {
                            stream.Position += 4;
                        }

                        submeshTextureInfo.ScaleU   = br.ReadSingle();
                        submeshTextureInfo.ScaleV   = br.ReadSingle();
                        submeshTextureInfo.ShiftU   = br.ReadSingle();
                        submeshTextureInfo.ShiftV   = br.ReadSingle();
                        submeshTextureInfo.Rotation = br.ReadSingle();

                        if (faceIsHidden)
                        {
                            submeshTextureInfo.TextureName = "tooltextures/remove_face";
                        }
                        textures.Add(submeshTextureInfo);
                    }

                    if (faces.Any())
                    {
                        Solid newSolid = new Solid(map.IDGenerator.GetNextObjectID());
                        foreach (int key in faces.Keys)
                        {
                            foreach (Face face in faces[key])
                            {
                                face.Parent = newSolid;
                                newSolid.Faces.Add(face);
                            }
                        }
                        newSolid.Colour = Colour.GetRandomBrushColour();
                        newSolid.UpdateBoundingBox();

                        MapObject parent = map.WorldSpawn;

                        newSolid.SetParent(parent);

                        newSolid.Transform(new UnitScale(Coordinate.One, newSolid.BoundingBox.Center), TransformFlags.None);
                        newSolid.Transform(new UnitScale(new Coordinate(
                                                             (decimal)xScale / newSolid.BoundingBox.Width,
                                                             (decimal)yScale / newSolid.BoundingBox.Length,
                                                             (decimal)zScale / newSolid.BoundingBox.Height), Coordinate.Zero), TransformFlags.None);
                        newSolid.UpdateBoundingBox();
                        newSolid.Transform(new UnitTranslate(new Coordinate(
                                                                 (decimal)xTranslate,
                                                                 (decimal)yTranslate,
                                                                 (decimal)zTranslate)), TransformFlags.None);
                        newSolid.UpdateBoundingBox();

                        foreach (int key in faces.Keys)
                        {
                            foreach (Face face in faces[key])
                            {
                                face.Texture.Name = textures[key].TextureName;
                                face.AlignTextureToWorld();
                                face.Texture.XScale = (decimal)textures[key].ScaleU * 0.25m;
                                face.Texture.YScale = (decimal)textures[key].ScaleV * 0.25m;
                                face.Texture.XShift = (decimal)textures[key].ShiftU;
                                face.Texture.YShift = (decimal)textures[key].ShiftV;
                                face.SetTextureRotation((decimal)textures[key].Rotation);
                            }
                        }
                    }
                }
                else
                {
                    int entitySubType = (int)br.ReadSingle();

                    for (int j = 1; j < 2; j++)
                    {
                        stream.Position += 4;
                    }
                    float xTranslate = br.ReadSingle();
                    float zTranslate = br.ReadSingle();
                    float yTranslate = br.ReadSingle();
                    float xScale     = br.ReadSingle();
                    float zScale     = br.ReadSingle();
                    float yScale     = br.ReadSingle();
                    if (Math.Abs(entitySubType - 3.0f) < 0.01f)
                    {
                        for (int j = 8; j < 35; j++)
                        {
                            stream.Position += 4;
                        }
                        string entityName    = br.ReadLine();
                        string entityIcon    = br.ReadLine();
                        int    propertyCount = (int)br.ReadSingle() + 1;
                        Dictionary <string, string> properties = new Dictionary <string, string>();
                        for (int j = 0; j < propertyCount; j++)
                        {
                            string propertyName  = br.ReadLine().ToLowerInvariant();
                            string propertyValue = br.ReadLine();
                            properties.Add(propertyName, propertyValue);
                        }

                        Entity entity = new Entity(map.IDGenerator.GetNextObjectID());
                        entity.Colour = Colour.GetDefaultEntityColour();
                        Property newProperty = null;
                        switch (entityName.ToLowerInvariant())
                        {
                        case "pointlight":
                            entity.ClassName       = "light";
                            entity.EntityData.Name = "light";

                            newProperty       = new Property();
                            newProperty.Key   = "range";
                            newProperty.Value = properties["range"];
                            entity.EntityData.Properties.Add(newProperty);

                            newProperty       = new Property();
                            newProperty.Key   = "color";
                            newProperty.Value = properties["color"].Replace(',', ' ').Trim();
                            entity.EntityData.Properties.Add(newProperty);
                            break;

                        case "spotlight":
                            entity.ClassName       = "spotlight";
                            entity.EntityData.Name = "spotlight";

                            newProperty       = new Property();
                            newProperty.Key   = "range";
                            newProperty.Value = properties["range"];
                            entity.EntityData.Properties.Add(newProperty);

                            newProperty       = new Property();
                            newProperty.Key   = "color";
                            newProperty.Value = properties["color"].Replace(',', ' ').Trim();
                            entity.EntityData.Properties.Add(newProperty);

                            newProperty       = new Property();
                            newProperty.Key   = "innerconeangle";
                            newProperty.Value = "45";
                            if (decimal.TryParse(properties["innerang"], out decimal innerAngle))
                            {
                                newProperty.Value = (innerAngle * 0.5m).ToString();
                            }
                            entity.EntityData.Properties.Add(newProperty);

                            newProperty       = new Property();
                            newProperty.Key   = "outerconeangle";
                            newProperty.Value = "90";
                            if (decimal.TryParse(properties["outerang"], out decimal outerAngle))
                            {
                                newProperty.Value = (outerAngle * 0.5m).ToString();
                            }
                            entity.EntityData.Properties.Add(newProperty);

                            newProperty       = new Property();
                            newProperty.Key   = "angles";
                            newProperty.Value = "0 0 0";
                            string[] dirParts = properties["direction"].Split(',');
                            if (decimal.TryParse(dirParts[0], out decimal dirX) &&
                                decimal.TryParse(dirParts[1], out decimal dirY) &&
                                decimal.TryParse(dirParts[2], out decimal dirZ))
                            {
                                Coordinate dir   = new Coordinate(dirX, dirY, dirZ).Normalise();
                                decimal    pitch = DMath.RadiansToDegrees(DMath.Asin(-dir.Y));
                                dir.Y = 0;
                                decimal yaw = 0m;
                                if (dir.LengthSquared() > 0.01m)
                                {
                                    dir = dir.Normalise();
                                    yaw = DMath.RadiansToDegrees(DMath.Atan2(-dir.X, dir.Z));
                                }

                                newProperty.Value = $"{pitch} {yaw} 0";
                            }
                            entity.EntityData.Properties.Add(newProperty);
                            break;

                        default:
                            entity.ClassName       = entityName;
                            entity.EntityData.Name = entityName;

                            foreach (var key in properties.Keys)
                            {
                                newProperty       = new Property();
                                newProperty.Key   = key;
                                newProperty.Value = properties[key];
                                entity.EntityData.Properties.Add(newProperty);
                            }
                            break;
                        }

                        entity.Origin = new Coordinate((decimal)xTranslate, (decimal)yTranslate, (decimal)zTranslate);
                        entity.SetParent(map.WorldSpawn);
                    }
                    else if (Math.Abs(entitySubType - 2.0f) < 0.01f)
                    {
                        if (models == null)
                        {
                            models = LoadAllModels(modelDirs);
                        }
                        ModelReference model          = null;
                        Coordinate     angles         = null;
                        Coordinate     scale          = null;
                        long           returnPosition = stream.Position;
                        for (int j = 0; j < meshCount; j++)
                        {
                            stream.Position = memblockLocations[j];

                            UInt32 memblockSize = br.ReadUInt32();
                            UInt32 dwFVF        = br.ReadUInt32();
                            UInt32 dwFVFSize    = br.ReadUInt32();
                            UInt32 dwVertMax    = br.ReadUInt32();

                            for (int k = 0; k < models.Count; k++)
                            {
                                DataStructures.Models.Mesh currMesh = models[k].Model.BodyParts[0].Meshes.Values.First()[0];

                                if (dwVertMax == currMesh.Vertices.Count)
                                {
                                    List <Pair <Coordinate, Coordinate> > points = new List <Pair <Coordinate, Coordinate> >();
                                    List <Coordinate> loadedPoints = new List <Coordinate>();
                                    Coordinate        loadedCenter = new Coordinate(0, 0, 0);
                                    Coordinate        knownCenter  = new Coordinate(0, 0, 0);
                                    for (int l = 0; l < dwVertMax; l++)
                                    {
                                        float      x     = br.ReadSingle();
                                        float      z     = br.ReadSingle();
                                        float      y     = br.ReadSingle();
                                        Coordinate point = new Coordinate((decimal)x, (decimal)y, (decimal)z);
                                        loadedPoints.Add(point);
                                        loadedCenter += point;
                                        knownCenter  += new Coordinate(currMesh.Vertices[l].Location);
                                        for (int m = 12; m < dwFVFSize; m += 4)
                                        {
                                            stream.Position += 4;
                                        }

                                        if (points.Count < 3)
                                        {
                                            int        nativeIndex = (l / 3) * 3 + ((l % 3) + 1) % 3;
                                            Coordinate vertexLoc   = new Coordinate(currMesh.Vertices[nativeIndex].Location);
                                            if (!points.Any(p => Math.Abs(p.Item1.Normalise().Dot(vertexLoc.Normalise())) > 0.95m))
                                            {
                                                points.Add(new Pair <Coordinate, Coordinate>(vertexLoc, point));
                                            }
                                        }
                                    }

                                    loadedCenter /= dwVertMax;
                                    knownCenter  /= dwVertMax;

                                    if (points.Count >= 3)
                                    {
                                        model = models[k];

                                        for (int l = 0; l < 3; l++)
                                        {
                                            points[l].Item1 -= knownCenter; points[l].Item1 = points[l].Item1.Normalise();
                                            points[l].Item2 -= loadedCenter; points[l].Item2 = points[l].Item2.Normalise();
                                        }

                                        points[2].Item1 = points[0].Item1.Cross(points[1].Item1).Normalise();
                                        points[2].Item2 = points[0].Item2.Cross(points[1].Item2).Normalise();

                                        points[1].Item1 = points[0].Item1.Cross(points[2].Item1).Normalise();
                                        points[1].Item2 = points[0].Item2.Cross(points[2].Item2).Normalise();

                                        decimal dotX0 = Coordinate.UnitX.Dot(points[0].Item1);
                                        decimal dotX1 = Coordinate.UnitX.Dot(points[1].Item1);
                                        decimal dotX2 = Coordinate.UnitX.Dot(points[2].Item1);

                                        decimal dotY0 = Coordinate.UnitY.Dot(points[0].Item1);
                                        decimal dotY1 = Coordinate.UnitY.Dot(points[1].Item1);
                                        decimal dotY2 = Coordinate.UnitY.Dot(points[2].Item1);

                                        decimal dotZ0 = Coordinate.UnitZ.Dot(points[0].Item1);
                                        decimal dotZ1 = Coordinate.UnitZ.Dot(points[1].Item1);
                                        decimal dotZ2 = Coordinate.UnitZ.Dot(points[2].Item1);

                                        Coordinate newX = (dotX0 * points[0].Item2 + dotX1 * points[1].Item2 + dotX2 * points[2].Item2);
                                        Coordinate newY = (dotY0 * points[0].Item2 + dotY1 * points[1].Item2 + dotY2 * points[2].Item2);
                                        Coordinate newZ = (dotZ0 * points[0].Item2 + dotZ1 * points[1].Item2 + dotZ2 * points[2].Item2);

                                        Coordinate unTransformedMin = new Coordinate(
                                            loadedPoints.Select(p => p.X).Min(),
                                            loadedPoints.Select(p => p.Y).Min(),
                                            loadedPoints.Select(p => p.Z).Min()
                                            );

                                        Coordinate unTransformedBounds = new Coordinate(
                                            loadedPoints.Select(p => p.X).Max(),
                                            loadedPoints.Select(p => p.Y).Max(),
                                            loadedPoints.Select(p => p.Z).Max()) - unTransformedMin;

                                        Coordinate propScale(Coordinate p)
                                        {
                                            Coordinate retVal = p.Clone();

                                            retVal.X *= (decimal)xScale / unTransformedBounds.X;
                                            retVal.Y *= (decimal)yScale / unTransformedBounds.Y;
                                            retVal.Z *= (decimal)zScale / unTransformedBounds.Z;
                                            return(retVal);
                                        }

                                        Coordinate centerDiff = propScale(loadedCenter - knownCenter);

                                        xTranslate += (float)centerDiff.X;
                                        yTranslate += (float)centerDiff.Y;
                                        zTranslate += (float)centerDiff.Z;

                                        Coordinate newBounds = new Coordinate(
                                            loadedPoints.Select(p => propScale(p).Dot(newX)).Max() - loadedPoints.Select(p => propScale(p).Dot(newX)).Min(),
                                            loadedPoints.Select(p => propScale(p).Dot(newY)).Max() - loadedPoints.Select(p => propScale(p).Dot(newY)).Min(),
                                            loadedPoints.Select(p => propScale(p).Dot(newZ)).Max() - loadedPoints.Select(p => propScale(p).Dot(newZ)).Min());

                                        Coordinate newBounds2 = new Coordinate(
                                            loadedPoints.Select(p => p.Dot(newX)).Max() - loadedPoints.Select(p => p.Dot(newX)).Min(),
                                            loadedPoints.Select(p => p.Dot(newY)).Max() - loadedPoints.Select(p => p.Dot(newY)).Min(),
                                            loadedPoints.Select(p => p.Dot(newZ)).Max() - loadedPoints.Select(p => p.Dot(newZ)).Min());

                                        scale = new Coordinate(newBounds.X / newBounds2.X, newBounds.Z / newBounds2.Z, newBounds.Y / newBounds2.Y);

                                        angles = Entity.ToEuler(newX, newY, newZ);

                                        break;
                                    }
                                }
                            }
                        }
                        stream.Position = returnPosition;
                        for (int j = 8; j < 24; j++)
                        {
                            stream.Position += 4;
                        }
                        int materialCount = (int)br.ReadSingle() + 1;
                        for (int j = 0; j < materialCount; j++)
                        {
                            string materialName = br.ReadLine();
                            for (int k = 0; k < 10; k++)
                            {
                                stream.Position += 4;
                            }
                        }

                        Entity entity = new Entity(map.IDGenerator.GetNextObjectID());
                        entity.ClassName       = "model";
                        entity.EntityData.Name = "model";
                        entity.Colour          = Colour.GetDefaultEntityColour();

                        Property newProperty;

                        if (model != null)
                        {
                            newProperty       = new Property();
                            newProperty.Key   = "file";
                            newProperty.Value = System.IO.Path.GetFileNameWithoutExtension(model.Path);
                            entity.EntityData.Properties.Add(newProperty);

                            if (angles != null)
                            {
                                newProperty       = new Property();
                                newProperty.Key   = "angles";
                                newProperty.Value = angles.ToDataString();
                                entity.EntityData.Properties.Add(newProperty);
                            }

                            if (scale != null)
                            {
                                newProperty       = new Property();
                                newProperty.Key   = "scale";
                                newProperty.Value = scale.ToDataString();
                                entity.EntityData.Properties.Add(newProperty);
                            }
                        }

                        entity.Origin = new Coordinate((decimal)xTranslate, (decimal)yTranslate, (decimal)zTranslate);
                        entity.SetParent(map.WorldSpawn);
                    }
                }
            }

            if (models != null)
            {
                models.ForEach(m => ModelProvider.DeleteModelReference(m));
            }

            return(map);
        }