diff --git a/source/2022-03-06.ts b/source/2022-03-06.ts index d3d5c65..5d2f490 100644 --- a/source/2022-03-06.ts +++ b/source/2022-03-06.ts @@ -1,4 +1,4 @@ -import {Generic, SimplexNoise} from './gegl/exports.js'; +import {Generic, Newsprint, SimplexNoise} from './gegl/exports.js'; import Project from './project.js'; const [width, height] = [1920, 1080]; @@ -7,21 +7,21 @@ const project: Project = { name: '2022-03-06', operations: [ new SimplexNoise({scale: 4, seed: 2_071_140_406}), - new Generic('gegl:newsprint', { + new Newsprint({ colorModel: 'rgb', pattern2: 'line', - period2: '200', - angle2: '15', + period2: 200, + angle2: 15, pattern3: 'line', - period3: '200', - angle3: '45', + period3: 200, + angle3: 45, pattern4: 'line', - period4: '200', - angle4: '0', + period4: 200, + angle4: 0, }), new Generic('gegl:mirrors'), new Generic('gegl:softglow'), - new Generic('gegl:newsprint'), + new Newsprint(), new Generic('gegl:stereographic-projection', {tilt: 123}), new Generic('gegl:focus-blur', { blurType: 'gaussian', @@ -29,17 +29,17 @@ const project: Project = { radius: 0.9, midpoint: 0.6, }), - new Generic('gegl:newsprint', { + new Newsprint({ colorModel: 'rgb', pattern2: 'diamond', - period2: '200', - angle2: '0', + period2: 200, + angle2: 0, pattern3: 'diamond', - period3: '200', - angle3: '35', + period3: 200, + angle3: 35, pattern4: 'diamond', - period4: '200', - angle4: '55', + period4: 200, + angle4: 55, }), new Generic('gegl:focus-blur', { blurType: 'gaussian', diff --git a/source/gegl/exports.ts b/source/gegl/exports.ts index 00444ad..5da98ec 100644 --- a/source/gegl/exports.ts +++ b/source/gegl/exports.ts @@ -1,4 +1,5 @@ export * from './base.js'; export * from './crop.js'; export * from './generic.js'; +export * from './newsprint.js'; export * from './simplex-noise.js'; diff --git a/source/gegl/newsprint.ts b/source/gegl/newsprint.ts new file mode 100644 index 0000000..f669388 --- /dev/null +++ b/source/gegl/newsprint.ts @@ -0,0 +1,54 @@ +import {BaseOperation} from './base.js'; + +type NewsprintPattern = 'line' | 'circle' | 'diamond' | 'pssquare' | 'cross'; + +export interface NewsprintParameters { + aaSamples: number; + angle: number; + angle2: number; + angle3: number; + angle4: number; + angleboost: number; + blackPullout: number; + blocksize: number; + colorModel: 'black-on-white' | 'cmyk' | 'rgb' | 'white-on-black'; + pattern: NewsprintPattern; + pattern2: NewsprintPattern; + pattern3: NewsprintPattern; + pattern4: NewsprintPattern; + period: number; + period2: number; + period3: number; + period4: number; + turbulence: number; +} + +export class Newsprint extends BaseOperation { + public static default: NewsprintParameters = { + aaSamples: 16, + angle: 75, + angle2: 15, + angle3: 45, + angle4: 0, + angleboost: 0, + blackPullout: 1, + blocksize: -1, + colorModel: 'black-on-white', + pattern: 'line', + pattern2: 'line', + pattern3: 'line', + pattern4: 'line', + period: 12, + period2: 12, + period3: 12, + period4: 12, + turbulence: 0, + }; + + public appendCrop = false; + public name = 'gegl:newsprint'; + + constructor(parameters?: Partial) { + super({...Newsprint.default, ...parameters}); + } +}