UNPKG

awv3

Version:
57 lines (55 loc) 2.78 kB
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], '');