awv3
Version:
⚡ AWV3 embedded CAD
57 lines (55 loc) • 2.78 kB
JavaScript
function point(ccref) {
return ccref.isPoint();
}
function line(ccref) {
return ccref.isLine();
}
function arc(ccref) {
return ccref.isArc() || ccref.isCircle();
}
function curve(ccref) {
return line(ccref) || arc(ccref);
}
function any(ccref) {
return point(ccref) || curve(ccref);
}
function f(type, predicates, desc) {
const isLenient = desc.includes('l'); // allow selecting a line instead of its two endpoints
const isStrictlyLenient = desc.includes('L'); // must select lines instead of endpoints
return {
type,
isParametric: desc.includes('p'),
isCommutative: desc.includes('c'),
adapt(entities) {
entities = [...entities];
for (let i = 0; i < entities.length; ++i)
if (isLenient && entities[i].isLine() && entities.length < predicates.length)
entities.splice(i, 1, ...entities[i].children);
if (entities.length !== predicates.length || !entities.every((entity, i) => predicates[i](entity)))
return null;
for (let i = 0; i < entities.length; ++i)
if (isStrictlyLenient && entities[i].isLine()) entities.splice(i, 1, ...entities[i].children);
return entities;
},
};
}
export const angle = f('CC_2DAngleConstraint', [line, line], 'pc');
export const angleox = f('CC_2DAngleOXConstraint', [line], 'p');
export const colinear = f('CC_2DColinearConstraint', [line, line], 'c');
export const concentric = f('CC_2DConcentricConstraint', [arc, arc], 'c');
export const distance = f('CC_2DOffsetConstraint', [any, any], 'pcl');
export const equalDistance = f('CC_2DEqualLengthConstraint', [line, line], 'L');
export const equalRadius = f('CC_2DEqualRadiusConstraint', [arc, arc], 'c');
export const fixation = f('CC_2DFixationConstraint', [any], '');
export const horizontalDistance = f('CC_2DHorizontalDistanceConstraint', [point, point], 'pl');
export const horizontality = f('CC_2DHorizontalConstraint', [line], '');
export const incidence = f('CC_2DCoincidentConstraint', [any, any], 'c');
export const midpoint = f('CC_2DMidpointConstraint', [any, point, any], '');
export const parallelity = f('CC_2DParallelConstraint', [line, line], 'c');
export const perpendicularity = f('CC_2DPerpendicularConstraint', [line, line], 'c');
export const radius = f('CC_2DRadiusConstraint', [arc], 'p');
export const diameter = f('CC_2DDiameterConstraint', [arc], 'p');
export const symmetric = f('CC_2DSymmetryConstraint', [line, any, any], '');
export const tangency = f('CC_2DTangentSketchConstraint', [curve, curve], 'c');
export const verticalDistance = f('CC_2DVerticalDistanceConstraint', [point, point], 'pl');
export const verticality = f('CC_2DVerticalConstraint', [line], '');