One Piece
Just seeing this symbol puts me in a better mood.
Parameters
240
210
Display
Camera
const geometryGroup = scene.geometry.group();
const dimensionsGroup = scene.dimensions.group();
const YELLOW = "#ffd020";
const hatFillId = scene.addHatchFill(YELLOW, 0.5);
const RED = "#ff0000";
const bandFillId = scene.addHatchFill(RED, 0.5);
const BLACK = "#000000";
const blackFillId = scene.addHatchFill(BLACK, 0.75);
const dimensionOffset = 50;
scene.draw((p) => {
const { width, height } = p;
const scaleX = width / initialWidth;
const scaleY = height / initialHeight;
geometryGroup.scale(scaleX, scaleY);
const hat = geometryGroup.path({
fill: hatFillId,
});
hat
// top hat
.moveToAbs(-60, 35)
.arcTo(120, 0, 67.5, true)
.close()
// bottom hat
.moveToAbs(-90, 10)
.arcTo(0, -5, 2.5)
.lineTo(180, 0)
.arcTo(0, 5, 2.5)
.close();
const band = geometryGroup.path({
fill: bandFillId,
});
band
.moveToAbs(-60, 35)
.arcTo(-5, -25, 67.5, false)
.lineTo(130, 0)
.arcTo(-5, 25, 67.5, false)
.close();
const face = geometryGroup.path();
face
// upper face
.moveToAbs(-65, 5)
.arcTo(130, 0, 66)
// jaw
.moveToAbs(-30, -42)
.cubicTo(-60, -100, 120, -100, 60, 0)
// teeth first arc
.moveToAbs(-38, -58)
.arcTo(76, 0, 70, false)
// teeth second arc
.moveToAbs(-42.5, -75)
.arcTo(85, 0, 70, false)
// teeth separators
.moveToAbs(0, -50)
.lineTo(0, -39)
.moveToAbs(-15, -47.5)
.lineTo(-10, -37.5)
.moveToAbs(15, -47.5)
.lineTo(10, -37.5);
const bones = geometryGroup.path();
bones
// top right
.moveToAbs(64, 20)
.lineTo(30, 30)
.arcTo(10, 20, 15, false, true)
.arcTo(-20, -10, 15, false, true)
.lineTo(-25, -25)
// top left
.moveToAbs(-64, 20)
.lineTo(-30, 30)
.arcTo(-10, 20, 15, true, true)
.arcTo(20, -10, 15, true, true)
.lineTo(25, -25)
// bottom left
.moveToAbs(-33, -47)
.lineTo(-40, -40)
.arcTo(-10, -20, 15, false, true)
.arcTo(25, 10, 15, false, true)
.lineTo(16, 16)
// bottom right
.moveToAbs(33, -47)
.lineTo(40, -40)
.arcTo(10, -20, 15, true, true)
.arcTo(-25, 10, 15, true, true)
.lineTo(-16, 16);
const eyesAndNose = geometryGroup.path({
fill: blackFillId,
});
eyesAndNose
// nose
.moveToAbs(-6, -40)
.cubicTo(0, 6, 12, 6, 12, 0)
.cubicTo(0, -6, -12, -6, -12, 0)
// left eye
.moveToAbs(-45, -15)
.cubicTo(0, 15, 30, 15, 30, 0)
.cubicTo(0, -20, -30, -20, -30, 0)
// right eye
.moveToAbs(45, -15)
.cubicTo(0, 15, -30, 15, -30, 0)
.cubicTo(0, -20, 30, -20, 30, 0);
const dimensions = dimensionsGroup.dimension();
dimensions
// width
.moveToAbs(-width / 2, -height / 2 - dimensionOffset)
.tick(0)
.lineTo(width, 0)
.tick(0)
.textAt(-width / 2, -11, `${width} mm`, "middle")
// height
.moveToAbs(width / 2 + dimensionOffset, -height / 2)
.tick(-Math.PI / 2)
.lineTo(0, height)
.tick(Math.PI / 2)
.textAt(11, -height / 2, `${height} mm`, "start")
// title
.moveToAbs(0, 0)
.textAtAbs(
0,
200,
`"おれは助けてもらわねェと生きていけねェ自信がある!!!" - Monkey D. Luffy`,
"middle",
"title",
);
});