/// <summary>
 /// Вставить подпись между полями
 /// </summary>
 private IResultAppValue <ICellElementMicrostation> InsertSignatureByFields(string personId, ITextElementMicrostation previousField,
                                                                            ITextElementMicrostation nextField) =>
 SignatureRange.GetSignatureRange(GetLinesStamp(), previousField, nextField, previousField.IsVertical).
 ResultValueOkBind(signatureRange => StampCellElement.ApplicationMicrostation.
                   CreateCellElementFromLibrary(personId, signatureRange.OriginPoint,
                                                StampCellElement.ModelMicrostation,
                                                CreateSignatureCell(signatureRange, previousField.IsVertical)));
Exemplo n.º 2
0
 /// <summary>
 /// Проверить нижнюю точку диапазона координат подписи
 /// </summary>
 private static bool ValidateBottomRange(ILineElementMicrostation lineStamp, ILineElementMicrostation bottomLine,
                                         ITextElementMicrostation stampField, bool isVertical) =>
 PointMicrostation.CompareCoordinate(lineStamp.StartPoint.Y, lineStamp.EndPoint.Y) &&
 ValidateByMiddleX(lineStamp, stampField) &&
 (!isVertical
         ? stampField.Range.OriginCenter.Y > lineStamp.StartPoint.Y &&
  (bottomLine == null || bottomLine.StartPoint.Y < lineStamp.StartPoint.Y)
         : stampField.Range.OriginCenter.Y < lineStamp.StartPoint.Y &&
  (bottomLine == null || bottomLine.StartPoint.Y > lineStamp.StartPoint.Y));
Exemplo n.º 3
0
 /// <summary>
 /// Проверить правую точку диапазона координат подписи
 /// </summary>
 private static bool ValidateRightRange(ILineElementMicrostation lineStamp, ILineElementMicrostation rightLine,
                                        ITextElementMicrostation stampField, bool isVertical) =>
 PointMicrostation.CompareCoordinate(lineStamp.StartPoint.X, lineStamp.EndPoint.X) &&
 ValidateByMiddleY(lineStamp, stampField) &&
 (!isVertical
         ? stampField.Range.OriginCenter.X > lineStamp.StartPoint.X &&
  (rightLine == null || rightLine.StartPoint.X < lineStamp.StartPoint.X)
         : stampField.Range.OriginCenter.X < lineStamp.StartPoint.X &&
  (rightLine == null || rightLine.StartPoint.X > lineStamp.StartPoint.X));
Exemplo n.º 4
0
        /// <summary>
        /// Получить координаты и размеры поля для вставки подписей
        /// </summary>
        public static IResultAppValue <RangeMicrostation> GetSignatureRange(IResultAppCollection <ILineElementMicrostation> linesStamp,
                                                                            ITextElementMicrostation previousField,
                                                                            ITextElementMicrostation nextField, bool isVertical)
        {
            ILineElementMicrostation leftLine   = null;
            ILineElementMicrostation rightLine  = null;
            ILineElementMicrostation topLine    = null;
            ILineElementMicrostation bottomLine = null;

            foreach (var lineStamp in linesStamp.Value)
            {
                if (ValidateLeftRange(lineStamp, leftLine, previousField, isVertical))
                {
                    leftLine = lineStamp;
                }
                if (ValidateTopRange(lineStamp, topLine, nextField, isVertical))
                {
                    topLine = lineStamp;
                }
                if (ValidateRightRange(lineStamp, rightLine, nextField, isVertical))
                {
                    rightLine = lineStamp;
                }
                if (ValidateBottomRange(lineStamp, bottomLine, previousField, isVertical))
                {
                    bottomLine = lineStamp;
                }
            }

            return((leftLine != null && rightLine != null && topLine != null && bottomLine != null)
                    ? new RangeMicrostation(new PointMicrostation(leftLine.StartPoint.X, bottomLine.StartPoint.Y),
                                            new PointMicrostation(rightLine.StartPoint.X, topLine.StartPoint.Y)).
                   Map(range => new ResultAppValue <RangeMicrostation>(range))
                    : new ResultAppValue <RangeMicrostation>(new ErrorApplication(ErrorApplicationType.RangeNotValid,
                                                                                  "Диапазон подписи не найден")));
        }
Exemplo n.º 5
0
 /// <summary>
 /// Проверить на пересечение по оси Y
 /// </summary>
 private static bool ValidateByMiddleY(ILineElementMicrostation lineStamp, ITextElementMicrostation stampField) =>
 stampField.Range.OriginCenter.Y > Math.Min(lineStamp.StartPoint.Y, lineStamp.EndPoint.Y) &&
 stampField.Range.OriginCenter.Y < Math.Max(lineStamp.StartPoint.Y, lineStamp.EndPoint.Y);
Exemplo n.º 6
0
 public StampTextFieldMicrostation(ITextElementMicrostation textElementStamp, StampFieldType stampFieldType)
     : base(textElementStamp, stampFieldType)
 {
     TextElementStamp = textElementStamp ?? throw new ArgumentNullException(nameof(textElementStamp));
 }