code: public boolean setPointAt(int groupIndex, int indexInGroup, double x, double y, boolean canonize) {
  		final int startIndex = firstInGroup(groupIndex);
  
  		// Besure that the member's index is in the group index's range
  		final int groupMemberCount = getPointCountInGroup(groupIndex);
  		if (indexInGroup < 0) {
  			throw new IndexOutOfBoundsException(indexInGroup + "<0"); //$NON-NLS-1$
  		}
  		if (indexInGroup >= groupMemberCount) {
  			throw new IndexOutOfBoundsException(indexInGroup + ">=" + groupMemberCount); //$NON-NLS-1$
  		}
  		final PointFusionValidator validator = getPointFusionValidator();
  		final int idx1 = startIndex + indexInGroup * 2;
  		final int idx2 = idx1 + 1;
  
  		if (!validator.isSame(x, y, this.pointCoordinates[idx1], this.pointCoordinates[idx2])) {
  			this.pointCoordinates[idx1] = x;
  			this.pointCoordinates[idx2] = y;
  
  			if (canonize) {
  				canonize(idx1 / 2);
  			}
  
  			fireShapeChanged();
  			fireElementChanged();
  			return true;
  		}
  
  		return false;
  	}
docs: Set the specified point at the given index in the specified group.
  
  @param groupIndex is the index of the group
  @param indexInGroup is the index of the ponit in the group (0 for the
  first point of the group...).
  @param x is the new value.
  @param y is the new value.
  @param canonize indicates if the function {@link #canonize(int)} must be called.
  @return <code>true</code> if the point was set, <code>false</code> if
  the specified coordinates correspond to the already existing point.
  @throws IndexOutOfBoundsException in case of error.