private StructuralArea ReduceSize(StructuralArea baseLayer, double rate)
 {
     var reduced = new StructuralArea();
     baseLayer.Polygon
         .ForEach(p =>
                      {
                          var parallel_node = new Node(p.X/rate, p.Y/rate, p.Z/rate);
                          reduced.Add(parallel_node);
                      }
         );
     return reduced;
 }
        private StructuralArea CreateAreaOnTopOf(StructuralArea layer, double D)
        {
            var parallel_area = new StructuralArea {T = D};

            layer.Polygon
                .ForEach(p =>
                             {
                                 var parallel_node = new Node(p.X, p.Y, p.Z);
                                 parallel_area.Add(parallel_node);
                             }
                );

            double dist = layer.T + SectionsDistane;

            parallel_area
                .Move(
                    -layer.normal.X*dist,
                    -layer.normal.Y*dist,
                    -layer.normal.Z*dist
                );

            return parallel_area;
        }
        private void CreateModel3DElementsFromArea(object compositeThermalSection, StructuralArea structuralArea)
        {
            StructuralArea baseLayer = structuralArea;
            baseLayer = ReduceSize(baseLayer, 3);
            StructuralArea templayer = baseLayer;
            if (compositeThermalSection is CompositeThermalSection)
            {
                foreach (IThermalSection section in ((CompositeThermalSection) compositeThermalSection).Sections)
                {
                    //StructuralArea area = CreateAreaOnTopOf(templayer, section.D.Value);
                    //templayer = area;

                    //BuildingStructuralElements.Slab slab = new BuildingBuilder().CreateSlab(area.Area);
                    //slab.T = section.D.Value;
                    //AddSectionToModel(slab, section);
                }
            }
        }
        private StructuralArea CreateAreaOnSideOf(StructuralArea layer, double D)
        {
            var parallel_area = new StructuralArea {T = D};

            layer.Polygon
                .ForEach(p =>
                             {
                                 var parallel_node = new Node(p.X, p.Y, p.Z);
                                 parallel_area.Add(parallel_node);
                             }
                );

            double dist = layer.T/2; // +SectionsDistane;

            parallel_area
                .Move(
                    0,
                    0,
                    layer.GetMiddle().Z + dist
                );

            return parallel_area;
        }