v: 2 timestamp: '2026-07-29T18:11:43.786407' uid: 3e1f6604-a58f-4fa4-bed4-3f0190332ae7 objects: - name: Body id: 2812 type_id: PartDesign::Body properties: AllowCompound: kind: Primitive paths: .: type: BOOL value: false group: Base BaseFeature: kind: Primitive paths: .: type: 'NULL' group: Base Label: kind: Primitive paths: .: type: STRING value: BodyDrillingRuler group: Base Placement: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Base Tip: kind: Unknown paths: .: type: STRING value: freecad_type: PartDesign.Feature group: Base - name: Origin id: 2813 type_id: App::Origin properties: Label: kind: Primitive paths: .: type: STRING value: Origin group: Base - name: X_Axis id: 2814 type_id: App::Line properties: Label: kind: Primitive paths: .: type: STRING value: X-axis group: Base Role: kind: Primitive paths: .: type: STRING value: X_Axis group: Base - name: Y_Axis id: 2815 type_id: App::Line properties: Label: kind: Primitive paths: .: type: STRING value: Y-axis group: Base Role: kind: Primitive paths: .: type: STRING value: Y_Axis group: Base - name: Z_Axis id: 2816 type_id: App::Line properties: Label: kind: Primitive paths: .: type: STRING value: Z-axis group: Base Role: kind: Primitive paths: .: type: STRING value: Z_Axis group: Base - name: XY_Plane id: 2817 type_id: App::Plane properties: Label: kind: Primitive paths: .: type: STRING value: XY-plane group: Base Role: kind: Primitive paths: .: type: STRING value: XY_Plane group: Base - name: XZ_Plane id: 2818 type_id: App::Plane properties: Label: kind: Primitive paths: .: type: STRING value: XZ-plane group: Base Role: kind: Primitive paths: .: type: STRING value: XZ_Plane group: Base - name: YZ_Plane id: 2819 type_id: App::Plane properties: Label: kind: Primitive paths: .: type: STRING value: YZ-plane group: Base Role: kind: Primitive paths: .: type: STRING value: YZ_Plane group: Base - name: Spreadsheet id: 2820 type_id: Spreadsheet::Sheet properties: Label: kind: Primitive paths: .: type: STRING value: Spreadsheet group: Base A1: kind: Primitive paths: .: type: STRING value: Hole_dia group: Base B1: kind: Primitive paths: .: type: QUANTITY value: 6.35 mm Alias: type: STRING value: Hole_dia group: Base A2: kind: Primitive paths: .: type: STRING value: Hole_Spacing group: Base B2: kind: Primitive paths: .: type: QUANTITY value: 32.0 mm Alias: type: STRING value: Hole_Spacing group: Base A3: kind: Primitive paths: .: type: STRING value: Hole_Count group: Base B3: kind: Primitive paths: .: type: INT value: 7 Alias: type: STRING value: Hole_Count group: Base A4: kind: Primitive paths: .: type: STRING value: Width group: Base B4: kind: Primitive paths: .: type: QUANTITY value: 19.049999999999997 mm Alias: type: STRING value: Width group: Base A5: kind: Primitive paths: .: type: STRING value: Thickness group: Base B5: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm Alias: type: STRING value: Thickness group: Base A6: kind: Primitive paths: .: type: STRING value: End_margin group: Base B6: kind: Primitive paths: .: type: QUANTITY value: 9.524999999999999 mm Alias: type: STRING value: End_margin group: Base A7: kind: Primitive paths: .: type: STRING value: Length group: Base B7: kind: Primitive paths: .: type: QUANTITY value: 243.05 mm Alias: type: STRING value: Length group: Base - name: Sketch id: 2821 type_id: Sketcher::SketchObject properties: ArcFitTolerance: kind: Primitive paths: .: type: FLOAT value: 1.0e-06 group: Sketch AttacherEngine: kind: Primitive paths: .: type: STRING value: Engine Plane group: Attachment AttachmentOffset: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Attachment Constraints: kind: List paths: {} items: - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 0 FirstPos: type: INT value: 2 Second: type: INT value: 1 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 1 FirstPos: type: INT value: 2 Second: type: INT value: 2 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 2 FirstPos: type: INT value: 2 Second: type: INT value: 3 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 3 FirstPos: type: INT value: 2 Second: type: INT value: 0 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Horizontal Value: type: FLOAT value: 0.0 First: type: INT value: 0 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Horizontal Value: type: FLOAT value: 0.0 First: type: INT value: 2 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Vertical Value: type: FLOAT value: 0.0 First: type: INT value: 1 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Vertical Value: type: FLOAT value: 0.0 First: type: INT value: 3 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: DistanceY Value: type: FLOAT value: 9.524999999999999 First: type: INT value: -1 FirstPos: type: INT value: 1 Second: type: INT value: 2 SecondPos: type: INT value: 2 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: Spreadsheet.Width / 2 - kind: Constraint paths: Type: type: STRING value: Vertical Value: type: FLOAT value: 0.0 First: type: INT value: 2 FirstPos: type: INT value: 2 Second: type: INT value: -1 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: DistanceX Value: type: FLOAT value: 243.05 First: type: INT value: 2 FirstPos: type: INT value: 2 Second: type: INT value: 2 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: Spreadsheet.Length - kind: Constraint paths: Type: type: STRING value: DistanceY Value: type: FLOAT value: 19.049999999999997 First: type: INT value: 3 FirstPos: type: INT value: 2 Second: type: INT value: 3 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: Spreadsheet.Width group: Sketch Label: kind: Primitive paths: .: type: STRING value: Sketch group: Base MakeInternals: kind: Primitive paths: .: type: BOOL value: false group: Internal Geometry MapMode: kind: Primitive paths: .: type: STRING value: FlatFace group: Attachment MapReversed: kind: Primitive paths: .: type: BOOL value: false group: Attachment Placement: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Base - name: Pad id: 2822 type_id: PartDesign::Pad properties: AllowMultiFace: kind: Primitive paths: .: type: BOOL value: true group: SketchBased AlongSketchNormal: kind: Primitive paths: .: type: BOOL value: true group: Pad FuzzyTolerance: kind: Primitive paths: .: type: FLOAT value: -1.0 group: Part Design Label: kind: Primitive paths: .: type: STRING value: PadRulerBody group: Base Length: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm expression: Spreadsheet.Thickness group: Side1 Length2: kind: Primitive paths: .: type: QUANTITY value: 10.0 mm group: Side2 Midplane: kind: Primitive paths: .: type: BOOL value: false group: SketchBased Offset: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side1 Offset2: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side2 Profile: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: '' group: SketchBased ReferenceAxis: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: N_Axis group: Pad Refine: kind: Primitive paths: .: type: BOOL value: true group: Part Design Reversed: kind: Primitive paths: .: type: BOOL value: false group: SketchBased SideType: kind: Primitive paths: .: type: STRING value: One side group: Pad Suppressed: kind: Primitive paths: .: type: BOOL value: false group: Base TaperAngle: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side1 TaperAngle2: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side2 Type: kind: Primitive paths: .: type: STRING value: Length group: Side1 Type2: kind: Primitive paths: .: type: STRING value: Length group: Side2 UpToFace: kind: Primitive paths: .: type: 'NULL' group: Side1 UpToFace2: kind: Primitive paths: .: type: 'NULL' group: Side2 UseCustomVector: kind: Primitive paths: .: type: BOOL value: false group: Pad - name: Sketch001 id: 2823 type_id: Sketcher::SketchObject properties: ArcFitTolerance: kind: Primitive paths: .: type: FLOAT value: 1.0e-06 group: Sketch AttacherEngine: kind: Primitive paths: .: type: STRING value: Engine Plane group: Attachment AttachmentOffset: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Attachment Constraints: kind: List paths: {} items: - kind: Constraint paths: Type: type: STRING value: Diameter Value: type: FLOAT value: 6.35 First: type: INT value: 0 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: Spreadsheet.Hole_dia - kind: Constraint paths: Type: type: STRING value: DistanceX Value: type: FLOAT value: 9.524999999999999 First: type: INT value: -1 FirstPos: type: INT value: 1 Second: type: INT value: 0 SecondPos: type: INT value: 3 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: Spreadsheet.End_margin - kind: Constraint paths: Type: type: STRING value: Horizontal Value: type: FLOAT value: 0.0 First: type: INT value: 0 FirstPos: type: INT value: 3 Second: type: INT value: -1 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true group: Sketch Label: kind: Primitive paths: .: type: STRING value: Sketch001 group: Base MakeInternals: kind: Primitive paths: .: type: BOOL value: false group: Internal Geometry MapMode: kind: Primitive paths: .: type: STRING value: FlatFace group: Attachment MapReversed: kind: Primitive paths: .: type: BOOL value: false group: Attachment Placement: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 5.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Base - name: Pocket id: 2824 type_id: PartDesign::Pocket properties: AllowMultiFace: kind: Primitive paths: .: type: BOOL value: true group: SketchBased AlongSketchNormal: kind: Primitive paths: .: type: BOOL value: true group: Pocket FuzzyTolerance: kind: Primitive paths: .: type: FLOAT value: -1.0 group: Part Design Label: kind: Primitive paths: .: type: STRING value: PocketDrillHole1 group: Base Length: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm group: Side1 Length2: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm group: Side2 Midplane: kind: Primitive paths: .: type: BOOL value: false group: SketchBased Offset: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side1 Offset2: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side2 Profile: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: '' group: SketchBased ReferenceAxis: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: N_Axis group: Pocket Refine: kind: Primitive paths: .: type: BOOL value: true group: Part Design Reversed: kind: Primitive paths: .: type: BOOL value: false group: SketchBased SideType: kind: Primitive paths: .: type: STRING value: One side group: Pocket Suppressed: kind: Primitive paths: .: type: BOOL value: false group: Base TaperAngle: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side1 TaperAngle2: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side2 Type: kind: Primitive paths: .: type: STRING value: ThroughAll group: Side1 Type2: kind: Primitive paths: .: type: STRING value: Length group: Side2 UpToFace: kind: Primitive paths: .: type: 'NULL' group: Side1 UpToFace2: kind: Primitive paths: .: type: 'NULL' group: Side2 UseCustomVector: kind: Primitive paths: .: type: BOOL value: false group: Pocket - name: LinearPattern id: 2825 type_id: PartDesign::LinearPattern properties: Direction: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: H_Axis group: Direction 1 Direction2: kind: Primitive paths: .: type: 'NULL' group: Direction 2 FuzzyTolerance: kind: Primitive paths: .: type: FLOAT value: -1.0 group: Part Design Label: kind: Primitive paths: .: type: STRING value: LinearPatternDrillHoles group: Base Length: kind: Primitive paths: .: type: QUANTITY value: 224.0 mm expression: Spreadsheet.Hole_Spacing * Spreadsheet.Hole_Count group: Direction 1 Length2: kind: Primitive paths: .: type: QUANTITY value: 100.0 mm group: Direction 2 Mode: kind: Primitive paths: .: type: STRING value: Extent group: Direction 1 Mode2: kind: Primitive paths: .: type: STRING value: Extent group: Direction 2 Occurrences: kind: Primitive paths: .: type: INT value: 7 expression: Spreadsheet.Hole_Count group: Direction 1 Occurrences2: kind: Primitive paths: .: type: INT value: 1 group: Direction 2 Offset: kind: Primitive paths: .: type: QUANTITY value: 37.333333333333336 mm group: Direction 1 Offset2: kind: Primitive paths: .: type: QUANTITY value: 10.0 mm group: Direction 2 Refine: kind: Primitive paths: .: type: BOOL value: true group: Part Design Reversed: kind: Primitive paths: .: type: BOOL value: false group: Direction 1 Reversed2: kind: Primitive paths: .: type: BOOL value: false group: Direction 2 Suppressed: kind: Primitive paths: .: type: BOOL value: false group: Base TransformMode: kind: Primitive paths: .: type: STRING value: Features group: Base - name: Spreadsheet001 id: 2826 type_id: Spreadsheet::Sheet properties: Label: kind: Primitive paths: .: type: STRING value: Parameters group: Base A1: kind: Primitive paths: .: type: STRING value: General group: Base A2: kind: Primitive paths: .: type: STRING value: Router Bit Diameter group: Base B2: kind: Primitive paths: .: type: STRING value: RouterBitDiam group: Base C2: kind: Primitive paths: .: type: QUANTITY value: 7.9375 mm Alias: type: STRING value: RouterBitDiam group: Base D2: kind: Primitive paths: .: type: STRING value: Router bit being used group: Base A3: kind: Primitive paths: .: type: STRING value: Jig corner radius group: Base B3: kind: Primitive paths: .: type: STRING value: CornerRad group: Base C3: kind: Primitive paths: .: type: QUANTITY value: 3.1750000000000003 mm Alias: type: STRING value: CornerRad group: Base D3: kind: Primitive paths: .: type: STRING value: Corner rounding of jig (arbitrary) group: Base A4: kind: Primitive paths: .: type: STRING value: Diameter of scribe alignment group: Base B4: kind: Primitive paths: .: type: STRING value: ScribeDiameter group: Base C4: kind: Primitive paths: .: type: QUANTITY value: 1.0 mm Alias: type: STRING value: ScribeDiameter group: Base D4: kind: Primitive paths: .: type: STRING value: Diameter (thickness) of alignment lines inside guides group: Base A5: kind: Primitive paths: .: type: STRING value: Diameter of screw holes group: Base B5: kind: Primitive paths: .: type: STRING value: ScrewDiameter group: Base C5: kind: Primitive paths: .: type: QUANTITY value: 4.1655999999999995 mm Alias: type: STRING value: ScrewDiameter group: Base D5: kind: Primitive paths: .: type: STRING value: 'Major thread diameter of a #8 wood screw' group: Base A6: kind: Primitive paths: .: type: STRING value: Diameter of screw head group: Base B6: kind: Primitive paths: .: type: STRING value: ScrewHeadDiameter group: Base C6: kind: Primitive paths: .: type: QUANTITY value: 8.4328 mm Alias: type: STRING value: ScrewHeadDiameter group: Base D6: kind: Primitive paths: .: type: STRING value: 'Diameter of #8 wood screw head' group: Base A7: kind: Primitive paths: .: type: STRING value: Height of screw head group: Base B7: kind: Primitive paths: .: type: STRING value: ScrewHeadHeight group: Base C7: kind: Primitive paths: .: type: QUANTITY value: 2.54 mm Alias: type: STRING value: ScrewHeadHeight group: Base D7: kind: Primitive paths: .: type: STRING value: 'Height of #8 flat head wood screw head' group: Base A8: kind: Primitive paths: .: type: STRING value: Printer Maximum Width group: Base B8: kind: Primitive paths: .: type: STRING value: PrinterMaxWidth group: Base C8: kind: Primitive paths: .: type: QUANTITY value: 270.0 mm Alias: type: STRING value: PrinterMaxWidth group: Base D8: kind: Primitive paths: .: type: STRING value: Capability of printer, used for both width and length group: Base A9: kind: Primitive paths: .: type: STRING value: Plug slip group: Base B9: kind: Primitive paths: .: type: STRING value: PlugSlip group: Base C9: kind: Primitive paths: .: type: QUANTITY value: 0.3 mm Alias: type: STRING value: PlugSlip group: Base D9: kind: Primitive paths: .: type: STRING value: Diametrical gap around plug in guide hole (to allow my plugs to fit in my jig) group: Base A10: kind: Primitive paths: .: type: STRING value: Dog diameter adjustment group: Base B10: kind: Primitive paths: .: type: STRING value: DogDiamAdjustment group: Base C10: kind: Primitive paths: .: type: QUANTITY value: 0.5 mm Alias: type: STRING value: DogDiamAdjustment group: Base D10: kind: Primitive paths: .: type: STRING value: Change to guide hole diameter so commercial dogs fit well. group: Base A11: kind: Primitive paths: .: type: STRING value: Version group: Base B11: kind: Primitive paths: .: type: STRING value: Version group: Base C11: kind: Primitive paths: .: type: STRING value: R4 Alias: type: STRING value: Version group: Base A13: kind: Primitive paths: .: type: STRING value: Dog Holes group: Base A14: kind: Primitive paths: .: type: STRING value: Dog Hole Diameter group: Base B14: kind: Primitive paths: .: type: STRING value: DogHoleDiam group: Base C14: kind: Primitive paths: .: type: QUANTITY value: 19.049999999999997 mm Alias: type: STRING value: DogHoleDiam group: Base D14: kind: Primitive paths: .: type: STRING value: Typically 0.75 in for Imperial, 20 mm for metric group: Base A15: kind: Primitive paths: .: type: STRING value: Dog Hole Pitch (center to center) group: Base B15: kind: Primitive paths: .: type: STRING value: DogHolePitch group: Base C15: kind: Primitive paths: .: type: QUANTITY value: 96.0 mm Alias: type: STRING value: DogHolePitch group: Base D15: kind: Primitive paths: .: type: STRING value: Typically 3 in for Imperial, 96 mm for metric group: Base A16: kind: Primitive paths: .: type: STRING value: Dog Hole 1 - X centerline group: Base B16: kind: Primitive paths: .: type: STRING value: DogHole1X group: Base C16: kind: Primitive paths: .: type: QUANTITY value: 64.0 mm Alias: type: STRING value: DogHole1X group: Base D16: kind: Primitive paths: .: type: STRING value: 3" standard - Distance from left edge of board to center of first doghole group: Base A17: kind: Primitive paths: .: type: STRING value: Dog Hole 1 - Y centerline group: Base B17: kind: Primitive paths: .: type: STRING value: DogHole1Y group: Base C17: kind: Primitive paths: .: type: QUANTITY value: 64.0 mm Alias: type: STRING value: DogHole1Y group: Base D17: kind: Primitive paths: .: type: STRING value: Distance from front edge of board to center of first doghole group: Base A18: kind: Primitive paths: .: type: STRING value: Dog Length (workbench thickness) group: Base B18: kind: Primitive paths: .: type: STRING value: DogLength group: Base C18: kind: Primitive paths: .: type: QUANTITY value: 38.099999999999994 mm Alias: type: STRING value: DogLength group: Base D18: kind: Primitive paths: .: type: STRING value: Dog length; typically workbench thickness group: Base A20: kind: Primitive paths: .: type: STRING value: Bushing group: Base A21: kind: Primitive paths: .: type: STRING value: Bushing OD per specification group: Base B21: kind: Primitive paths: .: type: STRING value: BushingOD group: Base C21: kind: Primitive paths: .: type: QUANTITY value: 30.162499999999998 mm Alias: type: STRING value: BushingOD group: Base D21: kind: Primitive paths: .: type: STRING value: Outside diameter of bushing group: Base A22: kind: Primitive paths: .: type: STRING value: Bushing Height group: Base B22: kind: Primitive paths: .: type: STRING value: BushingH group: Base C22: kind: Primitive paths: .: type: QUANTITY value: 13.096874999999999 mm Alias: type: STRING value: BushingH group: Base D22: kind: Primitive paths: .: type: STRING value: Actual height of bushing group: Base A23: kind: Primitive paths: .: type: STRING value: Baseplate Height group: Base B23: kind: Primitive paths: .: type: STRING value: RouterBaseHeight group: Base C23: kind: Primitive paths: .: type: QUANTITY value: 5.096874999999999 mm Alias: type: STRING value: RouterBaseHeight group: Base D23: kind: Primitive paths: .: type: STRING value: Thickness of router baseplate (consumes some bushing) group: Base A24: kind: Primitive paths: .: type: STRING value: Bushing Slip group: Base B24: kind: Primitive paths: .: type: STRING value: BushingSlip group: Base C24: kind: Primitive paths: .: type: QUANTITY value: 0.25 mm Alias: type: STRING value: BushingSlip group: Base D24: kind: Primitive paths: .: type: STRING value: Extra clearance around bushing to fit in template hole group: Base A26: kind: Primitive paths: .: type: STRING value: Calculated group: Base A27: kind: Primitive paths: .: type: STRING value: Jig width (left to right) group: Base B27: kind: Primitive paths: .: type: STRING value: JigWidth group: Base C27: kind: Primitive paths: .: type: QUANTITY value: 270.0 mm Alias: type: STRING value: JigWidth group: Base D27: kind: Primitive paths: .: type: STRING value: Calculated group: Base A28: kind: Primitive paths: .: type: STRING value: Jig depth (front to back) group: Base B28: kind: Primitive paths: .: type: STRING value: JigDepth group: Base C28: kind: Primitive paths: .: type: QUANTITY value: 270.0 mm Alias: type: STRING value: JigDepth group: Base D28: kind: Primitive paths: .: type: STRING value: Calculated group: Base A29: kind: Primitive paths: .: type: STRING value: Jig thickness group: Base B29: kind: Primitive paths: .: type: STRING value: JigThickness group: Base C29: kind: Primitive paths: .: type: QUANTITY value: 8.0 mm Alias: type: STRING value: JigThickness group: Base D29: kind: Primitive paths: .: type: STRING value: Calculated group: Base A30: kind: Primitive paths: .: type: STRING value: Bushing Effective Height group: Base B30: kind: Primitive paths: .: type: STRING value: BushingEffH group: Base C30: kind: Primitive paths: .: type: QUANTITY value: 8.0 mm Alias: type: STRING value: BushingEffH group: Base D30: kind: Primitive paths: .: type: STRING value: 'Calculated: Distance bushing extends beneath router base' group: Base A31: kind: Primitive paths: .: type: STRING value: Number of columns of dog holes (X) group: Base B31: kind: Primitive paths: .: type: STRING value: DogHoleColumns group: Base C31: kind: Primitive paths: .: type: INT value: 3 Alias: type: STRING value: DogHoleColumns group: Base D31: kind: Primitive paths: .: type: STRING value: Calculated group: Base A32: kind: Primitive paths: .: type: STRING value: Number of rows of dog holes (Y) group: Base B32: kind: Primitive paths: .: type: STRING value: DogHoleRows group: Base C32: kind: Primitive paths: .: type: INT value: 3 Alias: type: STRING value: DogHoleRows group: Base D32: kind: Primitive paths: .: type: STRING value: Calculated group: Base A33: kind: Primitive paths: .: type: STRING value: Guide hole diameter group: Base B33: kind: Primitive paths: .: type: STRING value: GuideHoleDiameter group: Base C33: kind: Primitive paths: .: type: QUANTITY value: 41.77499999999999 mm Alias: type: STRING value: GuideHoleDiameter group: Base D33: kind: Primitive paths: .: type: STRING value: Calculated group: Base A35: kind: Primitive paths: .: type: STRING value: Hole_dia group: Base B35: kind: Primitive paths: .: type: QUANTITY value: 6.35 mm Alias: type: STRING value: Hole_dia group: Base A36: kind: Primitive paths: .: type: STRING value: Hole_Spacing group: Base B36: kind: Primitive paths: .: type: QUANTITY value: 32.0 mm Alias: type: STRING value: Hole_Spacing group: Base A37: kind: Primitive paths: .: type: STRING value: Hole_Count group: Base B37: kind: Primitive paths: .: type: INT value: 7 Alias: type: STRING value: Hole_Count group: Base A38: kind: Primitive paths: .: type: STRING value: Width group: Base B38: kind: Primitive paths: .: type: QUANTITY value: 19.049999999999997 mm Alias: type: STRING value: Width group: Base A39: kind: Primitive paths: .: type: STRING value: Thickness group: Base B39: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm Alias: type: STRING value: Thickness group: Base A40: kind: Primitive paths: .: type: STRING value: End_margin group: Base B40: kind: Primitive paths: .: type: QUANTITY value: 9.524999999999999 mm Alias: type: STRING value: End_margin group: Base A41: kind: Primitive paths: .: type: STRING value: Length group: Base B41: kind: Primitive paths: .: type: QUANTITY value: 243.05 mm Alias: type: STRING value: Length group: Base - name: Body001 id: 2827 type_id: PartDesign::Body properties: AllowCompound: kind: Primitive paths: .: type: BOOL value: false group: Base BaseFeature: kind: Primitive paths: .: type: 'NULL' group: Base Label: kind: Primitive paths: .: type: STRING value: BodyTestBushingholder group: Base Placement: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Base Tip: kind: Unknown paths: .: type: STRING value: freecad_type: PartDesign.Feature group: Base - name: Origin001 id: 2828 type_id: App::Origin properties: Label: kind: Primitive paths: .: type: STRING value: Origin001 group: Base - name: X_Axis001 id: 2829 type_id: App::Line properties: Label: kind: Primitive paths: .: type: STRING value: X-axis001 group: Base Role: kind: Primitive paths: .: type: STRING value: X_Axis group: Base - name: Y_Axis001 id: 2830 type_id: App::Line properties: Label: kind: Primitive paths: .: type: STRING value: Y-axis001 group: Base Role: kind: Primitive paths: .: type: STRING value: Y_Axis group: Base - name: Z_Axis001 id: 2831 type_id: App::Line properties: Label: kind: Primitive paths: .: type: STRING value: Z-axis001 group: Base Role: kind: Primitive paths: .: type: STRING value: Z_Axis group: Base - name: XY_Plane001 id: 2832 type_id: App::Plane properties: Label: kind: Primitive paths: .: type: STRING value: XY-plane001 group: Base Role: kind: Primitive paths: .: type: STRING value: XY_Plane group: Base - name: XZ_Plane001 id: 2833 type_id: App::Plane properties: Label: kind: Primitive paths: .: type: STRING value: XZ-plane001 group: Base Role: kind: Primitive paths: .: type: STRING value: XZ_Plane group: Base - name: YZ_Plane001 id: 2834 type_id: App::Plane properties: Label: kind: Primitive paths: .: type: STRING value: YZ-plane001 group: Base Role: kind: Primitive paths: .: type: STRING value: YZ_Plane group: Base - name: Sketch002 id: 2835 type_id: Sketcher::SketchObject properties: ArcFitTolerance: kind: Primitive paths: .: type: FLOAT value: 1.0e-06 group: Sketch AttacherEngine: kind: Primitive paths: .: type: STRING value: Engine Plane group: Attachment AttachmentOffset: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Attachment Constraints: kind: List paths: {} items: - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 0 FirstPos: type: INT value: 2 Second: type: INT value: 1 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 1 FirstPos: type: INT value: 2 Second: type: INT value: 2 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 2 FirstPos: type: INT value: 2 Second: type: INT value: 3 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 3 FirstPos: type: INT value: 2 Second: type: INT value: 0 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Horizontal Value: type: FLOAT value: 0.0 First: type: INT value: 0 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Horizontal Value: type: FLOAT value: 0.0 First: type: INT value: 2 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Vertical Value: type: FLOAT value: 0.0 First: type: INT value: 1 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Vertical Value: type: FLOAT value: 0.0 First: type: INT value: 3 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: Coincident Value: type: FLOAT value: 0.0 First: type: INT value: 0 FirstPos: type: INT value: 1 Second: type: INT value: -1 SecondPos: type: INT value: 1 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true - kind: Constraint paths: Type: type: STRING value: DistanceX Value: type: FLOAT value: 60.324999999999996 First: type: INT value: -1 FirstPos: type: INT value: 1 Second: type: INT value: 1 SecondPos: type: INT value: 2 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: <>.BushingOD * 2 - kind: Constraint paths: Type: type: STRING value: DistanceY Value: type: FLOAT value: 60.324999999999996 First: type: INT value: -1 FirstPos: type: INT value: 1 Second: type: INT value: 1 SecondPos: type: INT value: 2 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: <>.BushingOD * 2 group: Sketch Label: kind: Primitive paths: .: type: STRING value: Sketch002 group: Base MakeInternals: kind: Primitive paths: .: type: BOOL value: false group: Internal Geometry MapMode: kind: Primitive paths: .: type: STRING value: FlatFace group: Attachment MapReversed: kind: Primitive paths: .: type: BOOL value: false group: Attachment Placement: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Base - name: Pad001 id: 2836 type_id: PartDesign::Pad properties: AllowMultiFace: kind: Primitive paths: .: type: BOOL value: true group: SketchBased AlongSketchNormal: kind: Primitive paths: .: type: BOOL value: true group: Pad FuzzyTolerance: kind: Primitive paths: .: type: FLOAT value: -1.0 group: Part Design Label: kind: Primitive paths: .: type: STRING value: Pad001 group: Base Length: kind: Primitive paths: .: type: QUANTITY value: 8.0 mm expression: <>.BushingEffH group: Side1 Length2: kind: Primitive paths: .: type: QUANTITY value: 10.0 mm group: Side2 Midplane: kind: Primitive paths: .: type: BOOL value: false group: SketchBased Offset: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side1 Offset2: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side2 Profile: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: '' group: SketchBased ReferenceAxis: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: N_Axis group: Pad Refine: kind: Primitive paths: .: type: BOOL value: true group: Part Design Reversed: kind: Primitive paths: .: type: BOOL value: false group: SketchBased SideType: kind: Primitive paths: .: type: STRING value: One side group: Pad Suppressed: kind: Primitive paths: .: type: BOOL value: false group: Base TaperAngle: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side1 TaperAngle2: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side2 Type: kind: Primitive paths: .: type: STRING value: Length group: Side1 Type2: kind: Primitive paths: .: type: STRING value: Length group: Side2 UpToFace: kind: Primitive paths: .: type: 'NULL' group: Side1 UpToFace2: kind: Primitive paths: .: type: 'NULL' group: Side2 UseCustomVector: kind: Primitive paths: .: type: BOOL value: false group: Pad - name: Sketch003 id: 2837 type_id: Sketcher::SketchObject properties: ArcFitTolerance: kind: Primitive paths: .: type: FLOAT value: 1.0e-06 group: Sketch AttacherEngine: kind: Primitive paths: .: type: STRING value: Engine Plane group: Attachment AttachmentOffset: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 0.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Attachment Constraints: kind: List paths: {} items: - kind: Constraint paths: Type: type: STRING value: Diameter Value: type: FLOAT value: 30.412499999999998 First: type: INT value: 0 FirstPos: type: INT value: 0 Second: type: INT value: -2000 SecondPos: type: INT value: 0 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: <>.BushingOD + <>.BushingSlip - kind: Constraint paths: Type: type: STRING value: DistanceX Value: type: FLOAT value: 30.162499999999998 First: type: INT value: -1 FirstPos: type: INT value: 1 Second: type: INT value: 0 SecondPos: type: INT value: 3 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: <>.BushingOD - kind: Constraint paths: Type: type: STRING value: DistanceY Value: type: FLOAT value: 30.162499999999998 First: type: INT value: -1 FirstPos: type: INT value: 1 Second: type: INT value: 0 SecondPos: type: INT value: 3 Third: type: INT value: -2000 ThirdPos: type: INT value: 0 Driving: type: BOOL value: true IsActive: type: BOOL value: true .: type: 'NULL' expression: <>.BushingOD group: Sketch Label: kind: Primitive paths: .: type: STRING value: Sketch003 group: Base MakeInternals: kind: Primitive paths: .: type: BOOL value: false group: Internal Geometry MapMode: kind: Primitive paths: .: type: STRING value: FlatFace group: Attachment MapReversed: kind: Primitive paths: .: type: BOOL value: false group: Attachment Placement: kind: Placement paths: Base.x: type: QUANTITY value: 0.0 mm Base.y: type: QUANTITY value: 0.0 mm Base.z: type: QUANTITY value: 8.0 mm Rotation.Angle: type: QUANTITY value: 0.0 deg Rotation.Axis.x: type: FLOAT value: 0.0 Rotation.Axis.y: type: FLOAT value: 0.0 Rotation.Axis.z: type: FLOAT value: 1.0 group: Base - name: Pocket001 id: 2838 type_id: PartDesign::Pocket properties: AllowMultiFace: kind: Primitive paths: .: type: BOOL value: true group: SketchBased AlongSketchNormal: kind: Primitive paths: .: type: BOOL value: true group: Pocket FuzzyTolerance: kind: Primitive paths: .: type: FLOAT value: -1.0 group: Part Design Label: kind: Primitive paths: .: type: STRING value: Pocket001 group: Base Length: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm group: Side1 Length2: kind: Primitive paths: .: type: QUANTITY value: 5.0 mm group: Side2 Midplane: kind: Primitive paths: .: type: BOOL value: false group: SketchBased Offset: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side1 Offset2: kind: Primitive paths: .: type: QUANTITY value: 0.0 mm group: Side2 Profile: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: '' group: SketchBased ReferenceAxis: kind: List paths: {} items: - kind: Unknown paths: .: type: STRING value: freecad_type: Sketcher.SketchObject - kind: List paths: {} items: - kind: Primitive paths: .: type: STRING value: N_Axis group: Pocket Refine: kind: Primitive paths: .: type: BOOL value: true group: Part Design Reversed: kind: Primitive paths: .: type: BOOL value: false group: SketchBased SideType: kind: Primitive paths: .: type: STRING value: One side group: Pocket Suppressed: kind: Primitive paths: .: type: BOOL value: false group: Base TaperAngle: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side1 TaperAngle2: kind: Primitive paths: .: type: QUANTITY value: 0.0 deg group: Side2 Type: kind: Primitive paths: .: type: STRING value: ThroughAll group: Side1 Type2: kind: Primitive paths: .: type: STRING value: Length group: Side2 UpToFace: kind: Primitive paths: .: type: 'NULL' group: Side1 UpToFace2: kind: Primitive paths: .: type: 'NULL' group: Side2 UseCustomVector: kind: Primitive paths: .: type: BOOL value: false group: Pocket - name: Origin002 id: 2839 type_id: App::Point properties: Label: kind: Primitive paths: .: type: STRING value: Origin group: Base - name: Origin003 id: 2840 type_id: App::Point properties: Label: kind: Primitive paths: .: type: STRING value: Origin group: Base occurrences: - path: Body after: null - path: Body/LinearPattern after: Body/Pocket - path: Body/Origin after: null - path: Body/Origin/Origin002 after: Body/Origin/YZ_Plane - path: Body/Origin/XY_Plane after: Body/Origin/Z_Axis - path: Body/Origin/XZ_Plane after: Body/Origin/XY_Plane - path: Body/Origin/X_Axis after: null - path: Body/Origin/YZ_Plane after: Body/Origin/XZ_Plane - path: Body/Origin/Y_Axis after: Body/Origin/X_Axis - path: Body/Origin/Z_Axis after: Body/Origin/Y_Axis - path: Body/Pad after: Body/Origin - path: Body/Pad/Sketch after: null - path: Body/Pocket after: Body/Pad - path: Body/Pocket/Sketch001 after: null - path: Body001 after: Spreadsheet001 - path: Body001/Origin001 after: null - path: Body001/Origin001/Origin003 after: Body001/Origin001/YZ_Plane001 - path: Body001/Origin001/XY_Plane001 after: Body001/Origin001/Z_Axis001 - path: Body001/Origin001/XZ_Plane001 after: Body001/Origin001/XY_Plane001 - path: Body001/Origin001/X_Axis001 after: null - path: Body001/Origin001/YZ_Plane001 after: Body001/Origin001/XZ_Plane001 - path: Body001/Origin001/Y_Axis001 after: Body001/Origin001/X_Axis001 - path: Body001/Origin001/Z_Axis001 after: Body001/Origin001/Y_Axis001 - path: Body001/Pad001 after: Body001/Origin001 - path: Body001/Pad001/Sketch002 after: null - path: Body001/Pocket001 after: Body001/Pad001 - path: Body001/Pocket001/Sketch003 after: null - path: Spreadsheet after: Body - path: Spreadsheet001 after: Spreadsheet