slvpartage:minetest_samples
Ceci est une ancienne révision du document !
/** * Basic Text Creation * @category Creating Shapes * @skillLevel 10 * @description Demonstrating methods of building 3D text * @tags text, font, characters * @authors Simon Clark * @licence MIT License */ const jscad = require('@jscad/modeling') const { union } = jscad.booleans const { extrudeLinear } = jscad.extrusions const { hullChain } = jscad.hulls const { circle, sphere } = jscad.primitives const { vectorText } = jscad.text const { translate } = jscad.transforms const { cuboid, roundedCuboid } = require('@jscad/modeling').primitives const getParameterDefinitions = () => { return [ // { name: 'outline_string', initial: 'Outline', type: 'text', caption: 'Outline Text', size: 30 }, { name: 'width', initial: 2, type: 'int', caption: 'width', size: 10 }, { name: 'height', initial: 35, type: 'int', caption: 'height', size: 10 }, { name: 'flat_string', initial: 'Flat', type: 'text', caption: 'Flat Text', size: 30 }, { name: 'round_string', initial: 'Round', type: 'text', caption: 'Round Text', size: 30 } ] } const main = (params) => { // const outlineText = buildOutlineText(params.outline_string, 2) const flatText = buildFlatText(params.flat_string, params.width, params.width) const roundText = buildRoundText(params.round_string, params.width) const support = translate([params.height * 1.5 , - params.height / 4,0],cuboid({ size: [params.height * 3, params.height * 2, params.width / 2] })) return [flatText, roundText, support] } // Build text by creating the font strokes (2D), then extruding up (3D). const buildFlatText = (message, extrusionHeight, characterLineWidth) => { if (message === undefined || message.length === 0) return [] const lineRadius = characterLineWidth / 2 const lineCorner = circle({ radius: lineRadius }) const lineSegmentPointArrays = vectorText({ x: 0, y: 0, input: message }) // line segments for each character const lineSegments = [] lineSegmentPointArrays.forEach((segmentPoints) => { // process the line segment const corners = segmentPoints.map((point) => translate(point, lineCorner)) lineSegments.push(hullChain(corners)) }) const message2D = union(lineSegments) const message3D = extrudeLinear({ height: extrusionHeight }, message2D) return translate([0, 0, 0], message3D) } // Build text by creating the font strokes (3D). const buildRoundText = (message, p) => { if (message === undefined || message.length === 0) return [] const lineRadius = p / 2 const lineCorner = sphere({ radius: lineRadius, center: [0, 0, lineRadius], segments: 16 }) const lineSegmentPointArrays = vectorText({ x: 0, y: 0, input: message }) // line segments for each character const lineSegments = [] lineSegmentPointArrays.forEach((segmentPoints) => { // process the line segment const corners = segmentPoints.map((point) => translate(point, lineCorner)) lineSegments.push(hullChain(corners)) }) const message3D = union(lineSegments) return translate([0, -35, 0], message3D) } module.exports = { main, getParameterDefinitions }
slvpartage/minetest_samples.1642597767.txt.gz · Dernière modification : 2022/01/19 14:09 de cyberyunohost