extrudo

API docs

Canvas

d.canvas(inputs, options?): FeatureHandle<'canvas'>

One feature of the timeline, in the create category. Its name follows the app's (Canvas1, then Canvas2, …); options.name gives it another, options.id its ID and options.index its place in the timeline. Inputs the table calls optional keep the default it names, so a call with none of them still makes a valid feature.

Inputs

Input Type Required or default What it does
plane GeomRef | GeomRef[] (plane, face) default XY plane The plane the image lies on: an origin plane, a construction plane or a flat face.
image string (an attachment ID) required The picture: an attachment of this design with an image/* media type (PNG, JPEG or WebP).
x string | number | ParameterHandle default 0 The image's centre along the plane frame's X; a length.
y string | number | ParameterHandle default 0 The image's centre along the plane frame's Y; a length.
width string | number | ParameterHandle default 100 mm The image's width; a length, the height follows its aspect.
rotation string | number | ParameterHandle default 0 deg Turns the image about the plane's normal, right-handed, from the frame's X; an angle.
opacity string | number | ParameterHandle optional How opaque it is drawn, 0.05 to 1. Default 0.5.
flip boolean default false Mirrors the image left to right.

Faces

This feature makes no face of its own, so handle.face(role) has no role to take. Its result keeps the names of the bodies it worked on, so a reference to one of those still resolves.

Example

import { Design, type LineHandle } from '@extrudo/api';

const d = Design.create({ name: 'My part' });

// Two solids to point faces, edges and bodies at.
const plate = d.box({ length: '40 mm', width: '20 mm', height: '10 mm' });
const shaft = d.cylinder({ diameter: '20 mm', height: '20 mm' });

// A sketch with two closed profiles, a hole and a guide line beside them.
let guide!: LineHandle;
const s = d.sketch(d.origin.xy, (k) => {
  k.rectangle([0, 0], [40, 20]);
  k.circle([10, 10], '3 mm');
  k.rectangle([50, 0], [60, 10]);
  guide = k.line([-5, 30], [45, 30]);
});

const profile = s.profileAt([1, 1]);
const sections = s.profiles();
const line = guide.ref();
const face = plate.face('side:front');
const edge = plate.edge([plate.faceName('side:front'), plate.faceName('side:right')]);
const vertex = plate.vertex([plate.faceName('side:front'), plate.faceName('side:right')]);
const corner = plate.vertex([plate.faceName('side:front'), plate.faceName('side:left')]);
const body = plate.body();
const step = 'att-part.step'; // an attachment of the design
const plan = 'att-plan.png';

// Canvas.
d.canvas({ image: plan, plane: d.origin.xy, width: '60 mm' });

See also