Esempio n. 1
0
        public void UpdateWMOControl()
        {
            Container3D activeObject = previewControl.activeObject;

            if (activeObject != null && activeObject is WMOContainer wmoObject)
            {
                var wmo = wmoObject.WorldModel;

                activeDoodadSets.Clear();
                for (uint i = 0; i < wmo.doodadSets.Length; i++)
                {
                    activeDoodadSets.Add(new WMODoodadSet()
                    {
                        Object = wmoObject, Name = wmo.doodadSets[i], Index = i
                    });
                }

                activeGroups.Clear();
                for (uint j = 0; j < wmo.groupBatches.Length; j++)
                {
                    activeGroups.Add(new WMOGroup()
                    {
                        Object = wmoObject, Name = wmo.groupBatches[j].groupName, Index = j
                    });
                }

                //wmo.groupBatches;
                //wmo.doodads
            }
        }
        public void UpdateModelControl()
        {
            Container3D activeObject = previewControl.activeObject;

            if (activeObject != null && activeObject is M2Container m2Object)
            {
                activeModelGeosets.Clear();

                var model = m2Object.DoodadBatch;
                for (uint i = 0; i < model.submeshes.Length; i++)
                {
                    var    mesh = model.submeshes[i];
                    string name = "Unknown";

                    if (geosetMaps.ContainsKey(m2Object.FileName))
                    {
                        var map = geosetMaps[m2Object.FileName];
                        if (map.ContainsKey(i))
                        {
                            name = map[i];
                        }
                    }

                    activeModelGeosets.Add(new ModelGeoset()
                    {
                        Object = m2Object, Name = name, Index = i
                    });
                }
            }
        }
Esempio n. 3
0
        private static SpriteComponent Create3DUIPage(WindowImpl window)
        {
            var entity = new Entity("Avalonia Screen Page " + window.RenderGroup);
            var sprite = new SpriteComponent
            {
                RenderGroup    = window.RenderGroup,
                SpriteProvider = window.RenderingElement.Source
            };

            WorldPages.Add(window, sprite);
            entity.Add(sprite);
            Container3D.AddChild(entity);
            return(sprite);
        }
Esempio n. 4
0
        private IAlgorithm Create3DAlgorithm(AlgorithmProperties properties, Container3D initialContainer)
        {
            switch (properties.Family)
            {
            case (AlgorithmFamily.Shelf):
                return(Create3DShelfAlgorithm(properties.AlgorithmType, initialContainer));

            case (AlgorithmFamily.GuillotineCut):
                return(Create3DGuillotineAlgorithm(properties.AlgorithmType, properties.SplittingStrategy, initialContainer));

            default:
                throw new NotSuchAlgorithmException();
            }
        }
Esempio n. 5
0
        private void StartAlgorithm_Execute()
        {
            try
            {
                IAlgorithm algorithm;

                if (!CheckContainerSize())
                {
                    throw new InvalidContainerSizeException("Container is not big enough to contain biggest object. Enlarge the container.");
                }

                if (Dimensionality == AlgorithmDimensionality.TwoDimensional)
                {
                    Container2D startingContainer = containerFactory.Create(algorithmProperties, ContainerWidth, ContainerHeight);
                    algorithm = factory.Create(algorithmProperties, startingContainer);
                }
                else
                {
                    Container3D startingContainer = containerFactory.Create(algorithmProperties, ContainerWidth, ContainerHeight, ContainerDepth);
                    algorithm = factory.Create(algorithmProperties, startingContainer);
                }

                stopwatch.Reset();

                var sortedObjects = SortingHelper.Sort(objectsToPack, ObjectOrdering);

                stopwatch.Start();
                algorithm.Execute(sortedObjects);
                stopwatch.Stop();

                var endResults = algorithm.CreateResults();

                ExecutionTime                     = stopwatch.ElapsedMilliseconds;
                Quality                           = endResults.Quality;
                ContainersUsed                    = endResults.ContainersUsed;
                ObjectAmount                      = endResults.ObjectCount;
                ObjectTotalFullfilment            = endResults.ObjectsTotalFulfillment;
                ContainerFulfillment              = endResults.ContainerFulfillment;
                AverageFulfillmentRatio           = endResults.AverageFulfillmentRatio;
                FulfillmentRatioStandardDeviation = endResults.FulfillmentRatioStandardDeviation;
                WorstFulfillment                  = endResults.WorstFulfillment;

                System.Windows.MessageBox.Show("Program successfully packed input object set.", "End of packing.");
            }
            catch (Exception err)
            {
                System.Windows.MessageBox.Show("Error during executing algorithm: " + err.Message, "Error");
            }
        }
Esempio n. 6
0
 public static void RemoveWindow(WindowImpl window)
 {
     if (window.Is2D)
     {
         var uiPage = GetUIPage(window.RenderGroup);
         var canvas = (Canvas)uiPage.Page.RootElement;
         canvas.Children.Remove(window.RenderingElement);
     }
     else
     {
         var uiPage = GetSprite(window);
         WorldPages.Remove(window);
         Container3D.RemoveChild(uiPage.Entity);
         uiPage.Entity.Dispose();
     }
 }
        public void LoadModel(string fileName)
        {
            GL.ActiveTexture(TextureUnit.Texture0);

            try
            {
                if (fileName.EndsWith(".m2"))
                {
                    var m2 = M2Loader.LoadM2(fileName, m2ShaderProgram);
                    activeObject     = new M2Container(m2, fileName);
                    ActiveCamera.Pos = new Vector3((m2.boundingBox.max.Z) + 11.0f, 0.0f, 4.0f);
                }
                else if (fileName.EndsWith(".wmo"))
                {
                    activeObject = new WMOContainer(WMOLoader.LoadWMO(fileName, wmoShaderProgram), fileName);
                }
            }
            catch (Exception e)
            {
                Logger.WriteLine("Error occured when loading model " + fileName + ": " + e.StackTrace);
            }

            ActiveCamera.ResetCamera();
        }
Esempio n. 8
0
 public NextFitShelf3DAlgorithm(Container3D initialContainer) : base(initialContainer)
 {
 }
Esempio n. 9
0
        public MaxVolumeGuillotineCut3DAlgorithm(Container3D initialContainer, AbstractFittingStrategy3D strategy) : base(initialContainer, strategy)
        {
            containers = new List <Container3D>();

            containers.Add(new GuillotineCutMaxVolumeContainer3D(initialContainer.Width, initialContainer.Height, initialContainer.Depth));
        }
        public AbstractShelf3DAlgorithm(Container3D initialContainer) : base(initialContainer)
        {
            containers = new List <Container3D>();

            containers.Add(new ShelfContainer3D(initialContainer.Width, initialContainer.Height, initialContainer.Depth));
        }
Esempio n. 11
0
 public Algorithm3D(Container3D initialContainer)
 {
 }
Esempio n. 12
0
        public ShorterLeftoverAxisGuillotineCut3DAlgorithm(Container3D initialContainer, AbstractFittingStrategy3D strategy) : base(initialContainer, strategy)
        {
            containers = new List <Container3D>();

            containers.Add(new GuillotineCutShorterLeftoverAxisContainer3D(initialContainer.Width, initialContainer.Height, initialContainer.Depth));
        }
 public AbstractGuillotineCut3DAlgorithm(Container3D initialContainer, AbstractFittingStrategy3D strategy) : base(initialContainer)
 {
     FittingStrategy = strategy;
 }
Esempio n. 14
0
        private IAlgorithm Create3DShelfAlgorithm(ObjectFittingStrategy fittingStrategy, Container3D initialContainer)
        {
            switch (fittingStrategy)
            {
            case (ObjectFittingStrategy.NextFit):
                return(new NextFitShelf3DAlgorithm(initialContainer));

            case (ObjectFittingStrategy.FirstFit):
                return(new FirstFitShelf3DAlgorithm(initialContainer));

            default:
                throw new NotSuchAlgorithmException();
            }
        }
Esempio n. 15
0
        private IAlgorithm Create3DGuillotineAlgorithm(ObjectFittingStrategy fittingStrategy, ContainerSplittingStrategy splittingStrategy, Container3D initialContainer)
        {
            var strategyInstance = objectFittingStrategyFactory.Create3D(fittingStrategy) as AbstractFittingStrategy3D;

            switch (splittingStrategy)
            {
            case (ContainerSplittingStrategy.MaxVolumeSplitRule):
                return(new MaxVolumeGuillotineCut3DAlgorithm(initialContainer, strategyInstance));

            case (ContainerSplittingStrategy.MinVolumeSplitRule):
                return(new MinVolumeGuillotineCut3DAlgorithm(initialContainer, strategyInstance));

            case (ContainerSplittingStrategy.LongerAxisSplitRule):
                return(new LongerAxisGuillotineCut3DAlgorithm(initialContainer, strategyInstance));

            case (ContainerSplittingStrategy.LongerLeftoverAxisSplitRule):
                return(new LongerLeftoverAxisGuillotineCut3DAlgorithm(initialContainer, strategyInstance));

            case (ContainerSplittingStrategy.ShorterAxisSplitRule):
                return(new ShorterAxisGuillotineCut3DAlgorithm(initialContainer, strategyInstance));

            case (ContainerSplittingStrategy.ShorterLeftoverAxisSplitRule):
                return(new ShorterLeftoverAxisGuillotineCut3DAlgorithm(initialContainer, strategyInstance));

            default:
                throw new NotSuchAlgorithmException();
            }
        }