/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Определяет принадлежность координаты примитиву /// </summary> /// <param name="coordinate1D"></param> /// <returns></returns> public abstract NodeLocationEnum IsCoordinateBelongsToGeometryPrimitive(Coordinate1D coordinate1D);