UNPKG

imagemagick-async

Version:
177 lines (153 loc) 4.23 kB
let Path = require('path'); let PathParts = __dirname.split(Path.sep); let index = PathParts.indexOf('imagemagick-async'); let RootDir = PathParts.slice(0, index + 1).join(Path.sep); let Err = require(Path.join(RootDir, 'error.js')); let Validate = require(Path.join(RootDir, 'validate.js')); let Filepath = require(Path.join(RootDir, 'filepath.js')).Filepath; let DistortBaseClass = require(Path.join(Filepath.TransformDistortDir(), 'distortbaseclass.js')).DistortBaseClass; //----------------------------------- class ThreePointDistortion extends DistortBaseClass { constructor(builder) { super(builder); } /** * @override */ static get Builder() { class Builder { constructor() { this.name = 'ThreePointDistortion'; this.args = {}; } /** * @param {string} str */ source(str) { this.args.source = str; return this; } /** * @param {Vector} vector */ centerVector(vector) { this.args.centerVector = vector; return this; } /** * @param {Vector} vector */ xAxisVector(vector) { this.args.xAxisVector = vector; return this; } /** * @param {Vector} vector */ yAxisVector(vector) { this.args.yAxisVector = vector; return this; } build() { return new ThreePointDistortion(this); } } return new Builder(); } /** * @returns {Array<string|number>} Returns an array of image magick arguments associated with this layer. */ Args() { let cVectStr = `${this.args.centerVector.args.start.String()} ${this.args.centerVector.args.end.String()}`; let xVectStr = `${this.args.xAxisVector.args.start.String()} ${this.args.xAxisVector.args.end.String()}`; let yVectStr = `${this.args.yAxisVector.args.start.String()} ${this.args.yAxisVector.args.end.String()}`; return ['-virtual-pixel', 'background', '-background', 'none', '-distort', 'Affine', `${cVectStr} ${xVectStr} ${yVectStr}`]; } /** * @override */ Errors() { let params = ThreePointDistortion.Parameters(); let errors = []; let prefix = 'THREE_POINT_DISTORTION_DISTORT_TRANSFORM_ERROR'; let sourceErr = Err.ErrorMessage.Builder .prefix(prefix) .varName('Source') .condition( new Err.StringCondition.Builder(this.args.source) .isempty(false) .isWhitespace(false) .build() ) .build() .String(); if (sourceErr) errors.push(sourceErr); let centerVectorErr = Err.ErrorMessage.Builder .prefix(prefix) .varName('Center vector') .condition( new Err.ObjectCondition.Builder(this.args.centerVector) .typeName('Vector') .checkForErrors(true) .build() ) .build() .String(); if (centerVectorErr) errors.push(centerVectorErr); let xAxisVectorErr = Err.ErrorMessage.Builder .prefix(prefix) .varName('X-axis vector') .condition( new Err.ObjectCondition.Builder(this.args.xAxisVector) .typeName('Vector') .checkForErrors(true) .build() ) .build() .String(); if (xAxisVectorErr) errors.push(xAxisVectorErr); let yAxisVectorErr = Err.ErrorMessage.Builder .prefix(prefix) .varName('Y-axis vector') .condition( new Err.ObjectCondition.Builder(this.args.yAxisVector) .typeName('Vector') .checkForErrors(true) .build() ) .build() .String(); if (yAxisVectorErr) errors.push(yAxisVectorErr); return errors; } /** * @override */ static Parameters() { return { source: { type: 'string', required: true }, centerVector: { type: 'Inputs.Vector', required: true }, xAxisVector: { type: 'Inputs.Vector', required: true }, yAxisVector: { type: 'Inputs.Vector', required: true } }; } } //----------------------------- // EXPORTS exports.ThreePointDistortion = ThreePointDistortion;