/// <summary> /// Exectuado quando o evento de adição de ponto concluída é despoletado. /// </summary> /// <param name="sender">O objecto que despoleta o evento.</param> /// <param name="eventArgs">Os argumentos do evento.</param> public override void AfterAddEventHandler( object sender, AddDeleteEventArgs <Tuple <SourceType, TargetType> > eventArgs) { var firstCoord = eventArgs.AddedOrRemovedObject.Item1; this.UpdateStateFromPointAddition(firstCoord); this.UpdatePolynomialFromMatrices(); }
/// <summary> /// Executado quando o evento de aviso de adição de um ponto é excutado. /// </summary> /// <param name="sender">O obejcto que enviou o evento.</param> /// <param name="eventArgs">Os argumentos passados para o evento.</param> public override void BeforeAddEventHandler( object sender, AddDeleteEventArgs <Tuple <SourceType, TargetType> > eventArgs) { var firstCoord = eventArgs.AddedOrRemovedObject.Item1; if (this.pointsContainer.AsParallel().Any(pt => this.sourceField.Equals(pt.Item1, firstCoord))) { throw new MathematicsException("A point with the same first coordinate in point set already exists."); } }
/// <summary> /// Adiciona um ponto ao contentor. /// </summary> /// <param name="firstCoord">A primeira coordenada do ponto.</param> /// <param name="secondCoord">A segunda coordenada do ponto.</param> public void Add(FirstCoeffType firstCoord, SecondCoeffType secondCoord) { if (firstCoord == null) { throw new ArgumentNullException("firstCoord"); } else if (secondCoord == null) { throw new ArgumentNullException("secondCoord"); } else { var point = Tuple.Create(firstCoord, secondCoord); if (this.BeforeAddEvent == null) { this.points.Add(Tuple.Create(firstCoord, secondCoord)); if (this.AfterAddEvent != null) { this.AfterAddEvent.Invoke( this, new AddDeleteEventArgs <Tuple <FirstCoeffType, SecondCoeffType> >(point)); } } else { var eventArg = new AddDeleteEventArgs <Tuple <FirstCoeffType, SecondCoeffType> >(point); this.BeforeAddEvent.Invoke( this, eventArg); this.points.Add(point); if (this.AfterAddEvent != null) { this.AfterAddEvent.Invoke( this, eventArg); } } } }
/// <summary> /// Remove o elemneto especificado pelo índice. /// </summary> /// <param name="index">O índice do elemento a ser removido.</param> public void RemoveAt(int index) { if (index >= 0 && index < this.points.Count) { if (this.BeforeDeleteEvent == null) { this.points.RemoveAt(index); } else { var eventArg = new AddDeleteEventArgs <int>(index); this.BeforeDeleteEvent.Invoke( this, eventArg); this.points.RemoveAt(index); if (this.AfterAddEvent != null) { this.AfterDeleteEvent.Invoke( this, eventArg); } } } }
/// <summary> /// Exectuado quando o evento de remoção do ponto concluída é despoletado. /// </summary> /// <param name="sender">O objecto que depoleta o evento.</param> /// <param name="eventArgs">Os argumentos do evento.</param> public override void AfterRemoveEventHandler( object sender, AddDeleteEventArgs <int> eventArgs) { throw new NotSupportedException("Points removal isn´t supported yet."); }
/// <summary> /// Manuseador do evento que é despoletado após o objecto ser removido do contentor de pontos. /// </summary> /// <param name="sender">O objecto que despoleta o evento.</param> /// <param name="eventArgs">O argumento do evento.</param> public abstract void AfterRemoveEventHandler(object sender, AddDeleteEventArgs <int> eventArgs);
/// <summary> /// Manuseador do evento que é despoletado após o objecto ser adicionado ao contentor de pontos. /// </summary> /// <param name="sender">O objecto que despoleta o evento.</param> /// <param name="eventArgs">O argumento do evento.</param> public abstract void AfterAddEventHandler(object sender, AddDeleteEventArgs <Tuple <SourceType, TargetType> > eventArgs);