extrudo

API docs

Mirror

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

One feature of the timeline, in the modify category. Its name follows the app's (Mirror1, then Mirror2, …); 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
objects 'bodies' | 'features' default bodies Mirror bodies, or replay the tools of features.
bodies GeomRef | GeomRef[] (body) optional The bodies to mirror.
features GeomRef | GeomRef[] (feature) optional The features whose tools are mirrored, with objects: features.
plane GeomRef | GeomRef[] (plane, face) required The mirror plane.
copy boolean default true Keep the originals and add mirrored copies.
join boolean default false Fuse each copy into its original (with copy).

Faces

Role What it is
from:(<edge>) A face the operation generated from an edge: a round, a chamfer, or the seam a boolean leaves.
new A face with no face of its own before, which nothing else names.

handle.face(role) builds a reference to one of them and handle.faceName(role) its persistent name. A <…> is what varies: a side:<sketch curve> is the wall of the curve you pass, and a role of a face that no face carries takes that part out. A role this feature never names is a lost reference — a visible error, never a silent guess.

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';

// Mirror.
d.mirror({ plane: d.origin.yz, bodies: [body] });

See also