execute(graphics, id, options, isSilent) {
    const shapeComp = graphics.getComponent(SHAPE);
    const targetObj = graphics.getObject(id);

    if (!targetObj) {
      return Promise.reject(rejectMessages.noObject);
    }

    if (!this.isRedo) {
      const undoData = makeUndoData(options, targetObj);

      cachedUndoDataForSilent = this.setUndoData(undoData, cachedUndoDataForSilent, isSilent);
    }

    return shapeComp.change(targetObj, options);
  }
Change a shape
@param {Graphics} graphics - Graphics instance
@param {number} id - object id
@param {Object} options - Shape options
     @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent')
     @param {string} [options.stroke] - Shape outline color
     @param {number} [options.strokeWidth] - Shape outline width
     @param {number} [options.width] - Width value (When type option is 'rect', this options can use)
     @param {number} [options.height] - Height value (When type option is 'rect', this options can use)
     @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use)
     @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use)
     @param {number} [options.left] - Shape x position
     @param {number} [options.top] - Shape y position
     @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not
@param {boolean} isSilent - is silent execution or not
@returns {Promise}