Exemplo n.º 1
0
        public static BuildingElement MergeBuildingElement(this BuildingElement element1, BuildingElement element2)
        {
            BuildingElement rtnElement = null;

            if (element1.Area() > element2.Area())
            {
                rtnElement = element2.Copy();
            }
            else
            {
                rtnElement = element1.Copy();
            }

            rtnElement.ExtendedProperties.Remove(rtnElement.ContextProperties());

            //Move any properties over which need to be merged between the two elements... Currently only adjacent spaces
            BuildingElementContextProperties masterProperties = new BuildingElementContextProperties();

            BuildingElementContextProperties mergeToProps = (element1.ContextProperties() as BuildingElementContextProperties);

            if (mergeToProps != null)
            {
                masterProperties.Colour          = mergeToProps.Colour;
                masterProperties.ConnectedSpaces = new List <string>(mergeToProps.ConnectedSpaces);
                masterProperties.IsAir           = mergeToProps.IsAir;
                masterProperties.IsGround        = mergeToProps.IsGround;
                masterProperties.Reversed        = mergeToProps.Reversed;
            }

            BuildingElementContextProperties mergeProps = (element2.ContextProperties() as BuildingElementContextProperties);

            if (mergeProps == null)
            {
                mergeProps = new BuildingElementContextProperties(); //Hopefully this will never be needed...
            }
            if (mergeProps.ConnectedSpaces.Count > 0)
            {
                if (masterProperties.ConnectedSpaces.Count == 1)
                {
                    masterProperties.ConnectedSpaces.Add(mergeProps.ConnectedSpaces.Where(x => x != "-1").FirstOrDefault());
                }
                else
                {
                    masterProperties.ConnectedSpaces[masterProperties.ConnectedSpaces.IndexOf("-1")] = mergeProps.ConnectedSpaces.Where(x => x != "-1").FirstOrDefault();
                }
            }

            rtnElement.ExtendedProperties.Add(masterProperties);
            return(rtnElement);
        }