1
0
Fork 0
freesewing/designs/examples/src/point.mjs
2022-10-10 01:38:22 +02:00

457 lines
14 KiB
JavaScript

import { box } from './shared.mjs'
export const point_addcircle = {
name: 'examples.point_addcircle',
draft: ({ Point, points, part }) => {
points.a = new Point(30, 10).addCircle(3, 'lining dashed').addCircle(7, 'mark dashed')
points.b = new Point(50, 10)
.addCircle(1, 'interfacing')
.addCircle(3, 'fabric')
.addCircle(5, 'lining')
.addCircle(7, 'mark')
.addCircle(9, 'note')
points.c = new Point(70, 10).addCircle(3, 'interfacing').addCircle(7, 'mark lashed')
return box(part, 100, 20)
},
}
export const point_addtext = {
name: 'examples.point_addtext',
draft: ({ Point, points, part }) => {
points.anchor = new Point(100, 25)
.addText('supportFreesewingBecomeAPatron', 'center')
.addText('please?')
return box(part, 200, 50)
},
}
export const point_angle = {
name: 'examples.point_angle',
draft: ({ Point, points, Path, paths, part }) => {
points.sun = new Point(10, 5)
points.moon = points.sun.shift(-15, 70)
points.text = points.sun
.shiftFractionTowards(points.moon, 0.8)
.attr('data-text', points.sun.angle(points.moon) + '°')
.attr('data-text-class', 'text-sm fill-note center')
paths.line = new Path().move(points.sun).line(points.moon).attr('class', 'dashed')
return part
},
}
export const point_attr = {
name: 'examples.point_attr',
draft: ({ Point, points, part }) => {
points.anchor = new Point(100, 25)
.attr('data-text', 'supportFreesewingBecomeAPatron')
.attr('data-text-class', 'center')
return box(part, 200, 50)
},
}
export const point_clone = {
name: 'examples.point_clone',
draft: ({ Point, points, Snippet, snippets, part }) => {
points.A = new Point(25, 25)
.attr('data-text', 'Point A')
.attr('data-text-class', 'text-xl')
.attr('data-text-fill-opacity', '0.5')
points.B = points.A.clone().attr('data-text', 'Point B')
snippets.x = new Snippet('notch', points.A)
return box(part)
},
}
export const point_copy = {
name: 'examples.point_copy',
draft: ({ Point, points, Snippet, snippets, part }) => {
points.A = new Point(50, 25).attr('data-text', 'Point A').attr('data-text-class', 'text-xl')
points.B = points.A.copy().attr('data-text', 'Point B')
snippets.x = new Snippet('notch', points.A)
return box(part)
},
}
export const point_dist = {
name: 'examples.point_dist',
draft: ({ Point, points, Path, paths, part }) => {
points.from = new Point(10, 10)
points.to = new Point(80, 70)
points.text = points.from
.shiftFractionTowards(points.to, 0.6)
.attr('data-text', points.from.dist(points.to) + 'mm')
.attr('data-text-class', 'text-sm fill-note center')
paths.line = new Path().move(points.from).line(points.to).attr('class', 'dashed')
return part
},
}
export const point_dx = {
name: 'examples.point_dx',
draft: ({ Point, points, Path, paths, part }) => {
points.from = new Point(10, 10)
points.to = new Point(80, 70)
paths.line = new Path().move(points.from).line(points.to).attr('class', 'dashed')
points.totop = points.from.shift(0, points.from.dx(points.to))
points.text_dx = points.from
.shiftFractionTowards(points.totop, 0.6)
.shiftFractionTowards(points.to, 0.1)
.attr('data-text', points.from.dx(points.to) + 'mm')
.attr('data-text-class', 'text-sm fill-note center')
paths.line_dx = new Path().move(points.from).line(points.totop).attr('class', 'dashed')
paths.line_dy = new Path().move(points.to).line(points.totop).attr('class', 'dashed')
return part
},
}
export const point_dy = {
name: 'examples.point_dy',
draft: ({ Point, points, Path, paths, part }) => {
points.from = new Point(10, 10)
points.to = new Point(80, 70)
paths.line = new Path().move(points.from).line(points.to).attr('class', 'dashed')
points.totop = points.from.shift(0, points.from.dx(points.to))
paths.line_dx = new Path().move(points.from).line(points.totop).attr('class', 'dashed')
points.text_dy = points.totop
.shiftFractionTowards(points.to, 0.4)
.attr('data-text', points.from.dy(points.to) + 'mm')
.attr('data-text-class', 'text-sm fill-note right')
paths.line_dy = new Path().move(points.to).line(points.totop).attr('class', 'dashed')
return part
},
}
export const point_flipx = {
name: 'examples.point_flipy',
draft: ({ Point, points, Path, paths, part }) => {
points.top = new Point(50, 10)
points.out1 = new Point(70, 30)
points.in1 = new Point(55, 35)
points.out2 = new Point(75, 50)
points.in2 = new Point(60, 55)
points.out3 = new Point(80, 70)
points.in3 = new Point(55, 70)
points.trunkOut = new Point(55, 80)
points.trunkIn = new Point(50, 80)
points._out1 = points.out1.flipX(points.top)
points._in1 = points.in1.flipX(points.top)
points._out2 = points.out2.flipX(points.top)
points._in2 = points.in2.flipX(points.top)
points._out3 = points.out3.flipX(points.top)
points._in3 = points.in3.flipX(points.top)
points._trunkOut = points.trunkOut.flipX(points.top)
points.bottom = new Point(50, 80)
paths.tree = new Path()
.move(points.top)
.line(points.out1)
.line(points.in1)
.line(points.out2)
.line(points.in2)
.line(points.out3)
.line(points.in3)
.line(points.trunkOut)
.line(points._trunkOut)
.line(points._in3)
.line(points._out3)
.line(points._in2)
.line(points._out2)
.line(points._in1)
.line(points._out1)
.close()
paths.mirror = new Path().move(points.top).line(points.bottom).attr('class', 'note dashed')
return part
},
}
export const point_flipy = {
name: 'examples.point_flipy',
draft: ({ Point, points, Path, paths, part }) => {
points.start = new Point(0, 50)
points.churchTowerWallLeft = new Point(10, 50)
points.churchTowerRoofLeft = new Point(10, 30)
points.churchTowerTop = new Point(15, 10)
points.churchTowerRoofRight = new Point(20, 30)
points.churchRoofRight = new Point(50, 30)
points.churchWallRight = new Point(50, 50)
points.houseWallLeft = new Point(65, 50)
points.houseRoofLeft = new Point(65, 35)
points.houseRoofTop = new Point(75, 25)
points.houseRoofRight = new Point(85, 35)
points.houseWallRight = new Point(85, 50)
points.end = new Point(95, 50)
points.mirror = new Point(0, 60)
points.mirrorLineEnd = new Point(95, 60)
points._start = points.start.flipY(points.mirror)
points._churchTowerWallLeft = points.churchTowerWallLeft.flipY(points.mirror)
points._churchTowerRoofLeft = points.churchTowerRoofLeft.flipY(points.mirror)
points._churchTowerTop = points.churchTowerTop.flipY(points.mirror)
points._churchTowerRoofRight = points.churchTowerRoofRight.flipY(points.mirror)
points._churchRoofRight = points.churchRoofRight.flipY(points.mirror)
points._churchWallRight = points.churchWallRight.flipY(points.mirror)
points._houseWallLeft = points.houseWallLeft.flipY(points.mirror)
points._houseRoofLeft = points.houseRoofLeft.flipY(points.mirror)
points._houseRoofTop = points.houseRoofTop.flipY(points.mirror)
points._houseRoofRight = points.houseRoofRight.flipY(points.mirror)
points._houseWallRight = points.houseWallRight.flipY(points.mirror)
points._end = points.end.flipY(points.mirror)
paths.skylineTop = new Path()
.move(points.start)
.line(points.churchTowerWallLeft)
.line(points.churchTowerRoofLeft)
.line(points.churchTowerTop)
.line(points.churchTowerRoofRight)
.line(points.churchRoofRight)
.line(points.churchWallRight)
.line(points.houseWallLeft)
.line(points.houseRoofLeft)
.line(points.houseRoofTop)
.line(points.houseRoofRight)
.line(points.houseWallRight)
.line(points.end)
paths.skylineBottom = new Path()
.move(points._start)
.line(points._churchTowerWallLeft)
.line(points._churchTowerRoofLeft)
.line(points._churchTowerTop)
.line(points._churchTowerRoofRight)
.line(points._churchRoofRight)
.line(points._churchWallRight)
.line(points._houseWallLeft)
.line(points._houseRoofLeft)
.line(points._houseRoofTop)
.line(points._houseRoofRight)
.line(points._houseWallRight)
.line(points._end)
paths.mirrorLine = new Path()
.move(points.mirror)
.line(points.mirrorLineEnd)
.attr('class', 'note dashed')
return part
},
}
export const point_rotate = {
name: 'examples.point_rotate',
draft: ({ Point, points, Path, paths, part }) => {
points.sun = new Point(40, 40)
points.moon = new Point(70, 40)
let step = 360 / 36
for (let i = 1; i < 37; i++) {
let angle = step * i
points[`moon${i}`] = points.moon.rotate(angle, points.sun)
paths[`moon${i}`] = new Path().move(points.sun).line(points[`moon${i}`])
}
return part
},
}
export const point_setcircle = {
name: 'examples.point_setcircle',
draft: ({ Point, points, part }) => {
points.a = new Point(30, 10).setCircle(3, 'lining dashed').setCircle(7, 'mark dashed')
points.b = new Point(50, 10)
.setCircle(1, 'interfacing')
.setCircle(3, 'fabric')
.setCircle(5, 'lining')
.setCircle(7, 'mark')
.setCircle(9, 'note')
points.c = new Point(70, 10).setCircle(3, 'interfacing').setCircle(7, 'mark lashed')
return box(part, 100, 20)
},
}
export const point_settext = {
name: 'examples.point_settext',
draft: ({ Point, points, part }) => {
points.anchor = new Point(100, 25)
.setText('supportFreesewingBecomeAPatron', 'center')
.setText('please?')
return box(part, 200, 50)
},
}
export const point_shift = {
name: 'examples.point_shift',
draft: ({ Point, points, macro, part }) => {
points.A = new Point(90, 40).attr('data-text', 'Point A').attr('data-text-class', 'right')
points.B = points.A.shift(155, 70)
.attr('data-text', 'Point B is point A shifted 7cm\nat a 155 degree angle')
.attr('data-text-lineheight', 6)
macro('ld', {
from: points.B,
to: points.A,
d: -10,
})
return box(part, 100, 45)
},
}
export const point_shiftfractiontowards = {
name: 'examples.point_shiftfractiontowards',
draft: ({ Point, points, Path, paths, macro, part }) => {
points.A = new Point(90, 70).attr('data-text', 'Point A')
points.B = new Point(10, 10).attr('data-text', 'Point B')
points.C = points.A.shiftFractionTowards(points.B, 0.5)
.attr('data-text', 'Point C is point A shifted 50%\nin the direction of point B')
.attr('data-text-class', 'center')
.attr('data-text-lineheight', 6)
paths.direction = new Path().move(points.A).line(points.B).attr('class', 'note dashed')
macro('ld', {
from: points.C,
to: points.A,
d: -10,
})
macro('ld', {
from: points.B,
to: points.A,
d: 20,
})
return part
},
}
export const point_shiftoutwards = {
name: 'examples.point_shiftoutwards',
draft: ({ Point, points, Path, paths, macro, part }) => {
points.A = new Point(90, 70).attr('data-text', 'Point A')
points.B = new Point(30, 30).attr('data-text', 'Point B')
points.C = points.A.shiftOutwards(points.B, 30)
.attr('data-text', 'Point C is point A shifted 3cm\nbeyond point B')
.attr('data-text-lineheight', 6)
paths.direction = new Path().move(points.A).line(points.C).attr('class', 'note dashed')
macro('ld', {
from: points.C,
to: points.B,
d: -10,
})
return box(part, 110, 75)
},
}
export const point_shifttowards = {
name: 'examples.point_shifttowards',
draft: ({ Point, points, Path, paths, macro, part }) => {
points.A = new Point(90, 70).attr('data-text', 'Point A')
points.B = new Point(10, 10).attr('data-text', 'Point B')
points.C = points.A.shiftTowards(points.B, 35)
.attr('data-text', 'Point C is point A shifted 3.5cm\nin the direction of point B')
.attr('data-text-class', 'center')
.attr('data-text-lineheight', 6)
paths.direction = new Path().move(points.A).line(points.B).attr('class', 'note dashed')
macro('ld', {
from: points.C,
to: points.A,
d: -10,
})
return box(part, 110, 80)
},
}
export const point_sitson = {
name: 'examples.point_sitson',
draft: ({ Point, points, Snippet, snippets, part }) => {
let s
for (let i = 0; i < 10; i++) {
points[`a${i}`] = new Point(i * 10, 40)
points[`b${i}`] = new Point(i * 10, i * 8)
if (points[`a${i}`].sitsOn(points[`b${i}`])) s = 'notch'
else s = 'bnotch'
snippets[`b${i}`] = new Snippet(s, points[`b${i}`])
snippets[`a${i}`] = new Snippet(s, points[`a${i}`])
}
return box(part)
},
}
export const point_sitsroughlyon = {
name: 'examples.point_sitsroughlyon',
draft: ({ Point, points, Snippet, snippets, part }) => {
box(part)
let s
for (let i = 0; i < 10; i++) {
points[`a${i}`] = new Point(i * 10, 40)
points[`b${i}`] = new Point(i * 10, i * 8)
if (points[`a${i}`].sitsRoughlyOn(points[`b${i}`])) s = 'notch'
else s = 'bnotch'
snippets[`b${i}`] = new Snippet(s, points[`b${i}`])
snippets[`a${i}`] = new Snippet(s, points[`a${i}`])
}
return part
},
}
export const point_translate = {
name: 'examples.point_translate',
draft: ({ Point, points, macro, part }) => {
points.A = new Point(20, 20).attr('data-text', 'Point A')
points.B = points.A.translate(120, 60)
.attr('data-text', 'Point B is point A with a\ntranslate(120, 60)\ntransform applied')
.attr('data-text-class', 'right')
.attr('data-text-dy', -6)
.attr('data-text-lineheight', 6)
macro('ld', {
from: points.A,
to: points.B,
text: 'translate(120,60)',
noStartMarker: true,
})
return box(part, 150, 85)
},
}