예제 #1
0
        /// <summary>
        /// Возвращает набор узлов сетки, входящих в примитив
        /// </summary>
        /// <param name="grid"></param>
        /// <returns></returns>
        public override NodeSet GetNodeSet(GridLayers gridLayers)
        {
            var nodeSet1D = new NodeSet1D();

            var gridLayers1D = (GridLayers1D)gridLayers;

            for (int i = 0; i < gridLayers1D.GridLayers.Count; i++)
            {
                var        curGridLayer    = gridLayers1D.GridLayers[i];
                decimal    curCoordDecimal = curGridLayer.Coordinate;
                Coordinate curCoord        = new Coordinate1D(curCoordDecimal);

                var nodeLocationEnum = IsCoordinateBelongsToGeometryPrimitive(curCoord);
                if (nodeLocationEnum != NodeLocationEnum.Outer)
                {
                    var addingNode = new Node1D();
                    addingNode.Coordinate       = new Coordinate1D(curGridLayer.Coordinate);
                    addingNode.NodeLocationEnum = nodeLocationEnum;
                    //addingNode.
                    nodeSet1D.AddNode1D(addingNode);
                }
            }

            return(nodeSet1D);
        }
예제 #2
0
 /// <summary>
 /// Создаёт отрезок с заданными параметрами
 /// </summary>
 /// <param name="coordinateInElement">Координата стороны отрезка,
 /// ближайшей к началу координат</param>
 /// <param name="length">Длина отрезка, м</param>
 /// <param name="numLayers">Кол-во слоёв</param>
 public GeometryPrimitive1DLineSegment(Coordinate1D coordinateInElement,
                                       decimal length,
                                       bool isCavity  = false,
                                       uint numLayers = 11)
 {
     IsCavity            = isCavity;
     CoordinateInElement = coordinateInElement;
     Length = length;
     SetGridLayers1D(numLayers);
 }
예제 #3
0
        /// <summary>
        /// Определяет, принадлежит ли координата примитиву
        /// и возвращает соответствующий объект перечисления NodeLocationEnum
        /// </summary>
        /// <param name="curCoord"></param>
        /// <returns></returns>
        public override NodeLocationEnum IsCoordinateBelongsToGeometryPrimitive(Coordinate1D curCoord)
        {
            var geometryElement1D_CoordinateLocation1D = GeometryElement1D.CoordinateLocation1D;

            // Координата левой границы отрезка
            decimal leftBound = geometryElement1D_CoordinateLocation1D.X + CoordinateInElement1D.X;
            // Координата правой границы отрезка
            decimal rightBound = leftBound + Length;

            if (curCoord.X == leftBound || curCoord.X == rightBound)
            {
                return(NodeLocationEnum.OnTheSurface);
            }

            if (curCoord.X >= leftBound && curCoord.X <= rightBound)
            {
                return(NodeLocationEnum.Internal);
            }

            return(NodeLocationEnum.Outer);
        }
예제 #4
0
 /// <summary>
 /// Определяет принадлежность координаты примитиву
 /// </summary>
 /// <param name="coordinate1D"></param>
 /// <returns></returns>
 public abstract NodeLocationEnum IsCoordinateBelongsToGeometryPrimitive(Coordinate1D coordinate1D);