# this file more or less describes the grammar used for constructing things out of Lego #for part examples see http://guide.lugnet.com/partsref/search.cgi?q=XXXX features: face: !lego_feature complement: [face, tire] shear: 0*N tensile: 0*N compression: 2000lbf #fenn guess rotation: 0*N stud: !lego_feature complement: [anti stud] #, stud cup, pin hole] example: 3005 technique: press_fit #this should be different... somehow kinematics: revolute shear: 100lbf #fenn guess tensile: 1lbf #fenn measured; probably off by a factor of 2 compression: 2000lbf #fenn guess rotation: 1in*lbf/rev #co-axial, fenn guess anti stud: !lego_feature comment: this typically has 3 or 4 contact points, but is not round complement: [stud, technic stud] example: 3005 technique: press_fit kinematics: revolute stud cup: !lego_feature complement: anti stud cup #[stud, anti stud cup, technic stud] example: 4073 technique: press_fit kinematics: revolute tensile: 2lbf anti stud cup: !lego_feature comment: this occurs when there are 4 studs or technic studs in a square complement: stud cup example: 2654 technique: press_fit kinematics: revolute tall stud cup: !lego_feature complement: [stud, anti stud cup] example: '3062a' technique: press_fit kinematics: revolute technic stud: !lego_feature complement: anti stud #[anti stud, pin hole, stud cup] #TODO finish technic hollow stud : !lego_feature #assert isinstance( revolute joint) complement: [bar, anti stud] example: '3062b' #4081b technique: press_fit kinematics: revolute duplo stud: !lego_feature complement: duplo anti stud technique: press_fit kinematics: revolute duplo anti stud: !lego_feature complement: duplo stud technique: press_fit kinematics: revolute bar: !lego_feature complement: [clip, hollow stud] example: 3957 technique: [snap_fit, press_fit] kinematics: revolute clip: !lego_feature complement: bar example: 6019 technique: snap_fit kinematics: revolute pin: !lego_feature complement: pin hole example: 3673 technique: snap_fit kinematics: revolute rotation: 1g*cm/rev #fenn guess sticky pin: !lego_feature #TODO finish technique: snap_fit kinematics: revolute rotation: 30g*cm/rev #fenn guess pin hole: !lego_feature complement: [pin] #, stud, technic stud, hollow stud] example: 3700 technique: [snap_fit, press_fit] kinematics: [revolute, prismatic] mini pin: !lego_feature complement: mini pin hole example: 4488 technique: snap_fit kinematics: revolute mini pin hole: !lego_feature complement: mini pin example: none #find one then! technique: snap_fit kinematics: revolute short pin: !lego_feature complement: plate hole example: 'that step file pin0 or whatever' technique: snap_fit kinematics: revolute plate hole: !lego_feature # add something about stacking two plates is compatible with pin complement: shortpin example: '3709b' technique: snap_fit kinematics: revolute tow ball: !lego_feature complement: tow ball socket example: 3184 technique: snap_fit kinematics: spherical tow ball socket: !lego_feature complement: tow ball example: 3183 technique: snap_fit kinematics: spherical magnet: !lego_feature # do magnets have the same stub axle as wheels? complement: magnet example: 73092 technique: positioning kinematics: planar wheel holder: !lego_feature # is this the same as 2607? complement: wheel axle example: 8 technique: snap_fit kinematics: revolute wheel axle: !lego_feature # snap fit? complement: wheel holder example: 3464 technique: snap_fit kinematics: revolute wheel rim: !lego_feature complement: tire inner example: 3464 technique: snap_fit kinematics: revolute tire inner: !lego_feature complement: wheel rim technique: snap_fit kinematics: revolute tire outer: !lego_feature complement: edge technique: positioning kinematics: gear swivel top: !lego_feature # is this really a minifig shoulder? complement: swivel bottom example: 3679 technique: snap_fit kinematics: revolute swivel bottom: !lego_feature # is this really a minifig shoulder hole? complement: swivel top example: 3680 technique: snap_fit kinematics: revolute turntable top: !lego_feature complement: turntable bottom example: 3404 technique: snap_fit kinematics: revolute turntable bottom: !lego_feature complement: turntable top example: 3403 technique: snap_fit kinematics: revolute scissor hinge top: !lego_feature complement: scissor hinge bottom example: 2430 technique: snap_fit kinematics: hinge scissor hinge bottom: !lego_feature complement: scissor hinge top example: 2429 technique: snap_fit kinematics: hinge elevation hinge holder: !lego_feature complement: elevation hinge example: 3937 technique: snap_fit kinematics: hinge elevation hinge: !lego_feature complement: elevation hinge holder example: 3938 technique: snap_fit kinematics: hinge flat hinge2: !lego_feature complement: flat hinge3 example: 4276 technique: snap_fit kinematics: hinge flat hinge3: !lego_feature complement: flat hinge2 example: 2452 technique: snap_fit kinematics: hinge wide hinge m: !lego_feature complement: wide hinge f example: 4315 technique: snap_fit kinematics: hinge wide hinge f: !lego_feature complement: wide hinge m example: 2872 technique: snap_fit kinematics: hinge trailer hinge m: !lego_feature complement: [trailer hinge f, clip] example: 3639 technique: snap_fit kinematics: hinge trailer hinge f: !lego_feature complement: [trailer hinge m, bar] example: 3640 technique: snap_fit kinematics: hinge round hinge 2: !lego_feature complement: round hinge 3 example: 6048 technique: snap_fit kinematics: hinge round hinge 3: !lego_feature complement: round hinge 2 example: 6217 technique: snap_fit kinematics: hinge locking hinge 1: !lego_feature # sorta iffy on these as i've never seen them complement: locking hinge 2 example: 30364 technique: snap_fit kinematics: [hinge, discrete_angle] angle: 20deg #? locking hinge 2: !lego_feature complement: locking hinge 1 example: 30365 technique: snap_fit kinematics: [hinge, discrete_angle] angle: 20deg #? axle: !lego_feature complement: [anti axle, pin hole] example: 3705 technique: [press_fit, positioning] kinematics: [revolute, prismatic, discrete_angle] angle: rev/4 anti axle: !lego_feature complement: axle example: 32064 technique: press_fit kinematics: [prismatic, discrete_angle] angle: rev/4 toothed joint: !lego_feature # there are 16 possible mates between two toothed joint interfaces complement: toothed joint example: 4263 technique: press_fit kinematics: discrete_angle angle: rev/16 minifig neck: !lego_feature complement: [minifig neck hole, anti stud] example: 973 technique: press_fit kinematics: revolute minifig neck hole: !lego_feature complement: [minifig neck, stud] example: 'standard lego head' technique: press_fit kinematics: revolute minifig backpack: !lego_feature #not actually a press fit; it's loose complement: minifig torso example: 'wtf srsly where is it' technique: positioning kinematics: discrete_angle angle: rev/2 minifig torso: !lego_feature #not actually a press fit; it's loose # for backpacks and armor and so on complement: minifig backpack example: 3838 technique: positioning kinematics: discrete_angle angle: rev/2 minifig wrist: !lego_feature #is this a snap fit? complement: minifig wrist hole example: 983 technique: snap_fit kinematics: revolute minifig wrist hole: !lego_feature #is this a snap fit? complement: minifig wrist example: 976 technique: snap_fit kinematics: revolute minifig shoulder: !lego_feature complement: minifig shoulder hole example: 976 technique: snap_fit kinematics: revolute minifig shoulder hole: !lego_feature complement: minifig shoulder example: 973 technique: snap_fit kinematics: revolute minifig waist: !lego_feature complement: minifig hip example: 973 technique: press_fit kinematics: revolute minifig hip stud: !lego_feature # does this really not interface with anything else? complement: minifig waist example: 970 technique: press_fit kinematics: discrete_angle angle: rev/4 minifig leg pin: !lego_feature complement: minifig leg hole example: 970 technique: snap_fit kinematics: hinge minifig leg hole: !lego_feature complement: minifig leg pin example: 971 technique: snap_fit kinematics: hinge