@@ -1382,48 +1382,6 @@ module side_panel_right_outer() {
13821382 }
13831383}
13841384
1385- // =============================================================================
1386- // CROSSMEMBERS
1387- // =============================================================================
1388-
1389- module rear_crossmember_assembly() {
1390- // Positioned rear crossmember for assembly
1391- back_height = MACHINE_HEIGHT * 0.55 ;
1392-
1393- color ("DarkSlateGray" )
1394- translate ([0 , - PANEL_THICKNESS/2 , FRAME_Z_OFFSET + back_height/2 ])
1395- rear_crossmember();
1396- }
1397-
1398- module front_crossmember() {
1399- // Top crossmember at arm pivot level
1400- crossmember_width = TRACK_WIDTH - SANDWICH_SPACING; // Spans between inner panels
1401-
1402- color ("DarkSlateGray" )
1403- translate ([0 , WHEEL_BASE, FRAME_Z_OFFSET + MACHINE_HEIGHT - 50 ])
1404- cube ([crossmember_width, 100 , PANEL_THICKNESS], center= true );
1405- }
1406-
1407- module bottom_crossmembers() {
1408- // Floor/bottom crossmembers
1409- crossmember_width = TRACK_WIDTH + SANDWICH_SPACING;
1410-
1411- // Front bottom
1412- color ("DarkSlateGray" )
1413- translate ([0 , WHEEL_BASE - 100 , FRAME_Z_OFFSET + PANEL_THICKNESS/2 ])
1414- cube ([crossmember_width, 150 , PANEL_THICKNESS], center= true );
1415-
1416- // Rear bottom
1417- color ("DarkSlateGray" )
1418- translate ([0 , 100 , FRAME_Z_OFFSET + PANEL_THICKNESS/2 ])
1419- cube ([crossmember_width, 150 , PANEL_THICKNESS], center= true );
1420-
1421- // Middle bottom
1422- color ("DarkSlateGray" )
1423- translate ([0 , WHEEL_BASE/2 , FRAME_Z_OFFSET + PANEL_THICKNESS/2 ])
1424- cube ([crossmember_width, 150 , PANEL_THICKNESS], center= true );
1425- }
1426-
14271385// =============================================================================
14281386// CYLINDER MOUNTING LUGS - Using Standardized U-Channel Type A Bracket
14291387// =============================================================================
@@ -1858,9 +1816,6 @@ module base_frame() {
18581816 side_panel_left_inner();
18591817 side_panel_right_inner();
18601818 side_panel_right_outer();
1861- rear_crossmember();
1862- front_crossmember();
1863- bottom_crossmembers();
18641819 cylinder_mounting_lugs();
18651820 arm_pivot_assembly();
18661821
@@ -1901,6 +1856,9 @@ module base_frame() {
19011856module engine() {
19021857 // V-Twin Engine Representation
19031858 // Dimensions approx for 25HP engine
1859+ // TODO: Design proper engine mounting plate and bolt pattern
1860+ // Currently floating in space
1861+
19041862 eng_width = 450 ;
19051863 eng_depth = 400 ;
19061864 eng_height = 450 ;
@@ -2202,17 +2160,95 @@ module loader_arms() {
22022160// =============================================================================
22032161
22042162module bucket() {
2205- // Standard bucket (Simplified)
2163+ // Standard bucket with Tab & Slot construction for welding
2164+
2165+ tab_len = 50 ;
2166+
2167+ // 1. Back Plate
2168+ difference () {
2169+ union () {
2170+ // Main Plate
2171+ color ("Yellow" )
2172+ translate ([- BUCKET_WIDTH/2 , 0 , - BUCKET_HEIGHT])
2173+ cube ([BUCKET_WIDTH, PLATE_1_4_INCH, BUCKET_HEIGHT]);
2174+
2175+ // Tabs for Side Plates (Left and Right)
2176+ for (z = [- BUCKET_HEIGHT + 50 : 150 : - 50 ]) {
2177+ // Left Tabs
2178+ translate ([- BUCKET_WIDTH/2 - PLATE_1_4_INCH, 0 , z])
2179+ cube ([PLATE_1_4_INCH, PLATE_1_4_INCH, tab_len]);
2180+
2181+ // Right Tabs
2182+ translate ([BUCKET_WIDTH/2 , 0 , z])
2183+ cube ([PLATE_1_4_INCH, PLATE_1_4_INCH, tab_len]);
2184+ }
2185+ }
2186+
2187+ // Slots for Bottom Plate tabs
2188+ for (x = [- BUCKET_WIDTH/2 + 50 : 150 : BUCKET_WIDTH/2 - 50 ]) {
2189+ translate ([x, - 1 , - BUCKET_HEIGHT])
2190+ cube ([tab_len, PLATE_1_4_INCH + 2 , PLATE_1_4_INCH]);
2191+ }
2192+ }
22062193
2207- // Bottom plate
2208- color ("Yellow" )
2209- translate ([- BUCKET_WIDTH/2 , 0 , - BUCKET_HEIGHT])
2210- cube ([BUCKET_WIDTH, BUCKET_DEPTH, PLATE_1_4_INCH]);
2194+ // 2. Bottom Plate
2195+ difference () {
2196+ union () {
2197+ // Main Plate
2198+ color ("Yellow" )
2199+ translate ([- BUCKET_WIDTH/2 , PLATE_1_4_INCH, - BUCKET_HEIGHT])
2200+ cube ([BUCKET_WIDTH, BUCKET_DEPTH - PLATE_1_4_INCH, PLATE_1_4_INCH]);
2201+
2202+ // Tabs for Back Plate (Rear edge)
2203+ for (x = [- BUCKET_WIDTH/2 + 50 : 150 : BUCKET_WIDTH/2 - 50 ]) {
2204+ translate ([x, 0 , - BUCKET_HEIGHT])
2205+ cube ([tab_len, PLATE_1_4_INCH, PLATE_1_4_INCH]);
2206+ }
2207+
2208+ // Tabs for Side Plates (Left and Right)
2209+ for (y = [PLATE_1_4_INCH + 50 : 150 : BUCKET_DEPTH - 50 ]) {
2210+ // Left Tabs
2211+ translate ([- BUCKET_WIDTH/2 - PLATE_1_4_INCH, y, - BUCKET_HEIGHT])
2212+ cube ([PLATE_1_4_INCH, tab_len, PLATE_1_4_INCH]);
2213+
2214+ // Right Tabs
2215+ translate ([BUCKET_WIDTH/2 , y, - BUCKET_HEIGHT])
2216+ cube ([PLATE_1_4_INCH, tab_len, PLATE_1_4_INCH]);
2217+ }
2218+ }
2219+ }
22112220
2212- // Back plate (Simplified)
2213- color ("Yellow" )
2214- translate ([- BUCKET_WIDTH/2 , 0 , - BUCKET_HEIGHT])
2215- cube ([BUCKET_WIDTH, PLATE_1_4_INCH, BUCKET_HEIGHT]);
2221+ // 3. Side Plates
2222+ for (side = [- 1 , 1 ]) {
2223+ x_pos = (side == - 1 ) ? - BUCKET_WIDTH/2 - PLATE_1_4_INCH : BUCKET_WIDTH/2 ;
2224+
2225+ difference () {
2226+ // Main Shape
2227+ color ("Yellow" )
2228+ translate ([x_pos, 0 , - BUCKET_HEIGHT])
2229+ rotate ([0 , - 90 , 0 ])
2230+ linear_extrude(height= PLATE_1_4_INCH)
2231+ polygon([
2232+ [0 , 0 ],
2233+ [BUCKET_HEIGHT, 0 ],
2234+ [BUCKET_HEIGHT, PLATE_1_2_INCH],
2235+ [BUCKET_HEIGHT * 0.3 , BUCKET_DEPTH],
2236+ [0 , BUCKET_DEPTH]
2237+ ]);
2238+
2239+ // Slots for Back Plate tabs
2240+ for (z = [- BUCKET_HEIGHT + 50 : 150 : - 50 ]) {
2241+ translate ([x_pos - 1 , - 1 , z])
2242+ cube ([PLATE_1_4_INCH + 2 , PLATE_1_4_INCH + 2 , tab_len]);
2243+ }
2244+
2245+ // Slots for Bottom Plate tabs
2246+ for (y = [PLATE_1_4_INCH + 50 : 150 : BUCKET_DEPTH - 50 ]) {
2247+ translate ([x_pos - 1 , y, - BUCKET_HEIGHT - 1 ])
2248+ cube ([PLATE_1_4_INCH + 2 , tab_len, PLATE_1_4_INCH + 2 ]);
2249+ }
2250+ }
2251+ }
22162252
22172253 // Cylinder Lugs (Moved from QA plate)
22182254 for (side = [- 1 , 1 ]) {
@@ -2225,36 +2261,29 @@ module bucket() {
22252261 u_channel_lug_with_pin(TUBE_3X3_1_4, 80 , BOLT_DIA_3_4 + 2 );
22262262 }
22272263
2228- // Left side plate
2229- color ("Yellow" )
2230- translate ([- BUCKET_WIDTH/2 , 0 , - BUCKET_HEIGHT])
2231- rotate ([0 , - 90 , 0 ])
2232- linear_extrude(height= PLATE_1_4_INCH)
2233- polygon([
2234- [0 , 0 ],
2235- [BUCKET_HEIGHT, 0 ],
2236- [BUCKET_HEIGHT, PLATE_1_2_INCH],
2237- [BUCKET_HEIGHT * 0.3 , BUCKET_DEPTH],
2238- [0 , BUCKET_DEPTH]
2239- ]);
2240-
2241- // Right side plate
2242- color ("Yellow" )
2243- translate ([BUCKET_WIDTH/2 + PLATE_1_4_INCH, 0 , - BUCKET_HEIGHT])
2244- rotate ([0 , - 90 , 0 ])
2245- linear_extrude(height= PLATE_1_4_INCH)
2246- polygon([
2247- [0 , 0 ],
2248- [BUCKET_HEIGHT, 0 ],
2249- [BUCKET_HEIGHT, PLATE_1_2_INCH],
2250- [BUCKET_HEIGHT * 0.3 , BUCKET_DEPTH],
2251- [0 , BUCKET_DEPTH]
2252- ]);
2253-
22542264 // Cutting edge
22552265 color ("DarkSlateGray" )
22562266 translate ([- BUCKET_WIDTH/2 , BUCKET_DEPTH - PLATE_3_4_INCH, - BUCKET_HEIGHT])
22572267 cube ([BUCKET_WIDTH, PLATE_3_4_INCH, 80 ]);
2268+
2269+ // Weld Beads
2270+ // 1. Bottom-Back Corner (Inside)
2271+ translate ([0 , PLATE_1_4_INCH, - BUCKET_HEIGHT + PLATE_1_4_INCH])
2272+ rotate ([0 , 0 , 90 ])
2273+ weld_bead(length= BUCKET_WIDTH - 20 , diameter= 8 );
2274+
2275+ // 2. Bottom-Side Corners (Inside)
2276+ for (x = [- BUCKET_WIDTH/2 , BUCKET_WIDTH/2 ]) {
2277+ translate ([x, BUCKET_DEPTH/2 , - BUCKET_HEIGHT + PLATE_1_4_INCH])
2278+ weld_bead(length= BUCKET_DEPTH - 20 , diameter= 8 );
2279+ }
2280+
2281+ // 3. Back-Side Corners (Inside)
2282+ for (x = [- BUCKET_WIDTH/2 , BUCKET_WIDTH/2 ]) {
2283+ translate ([x, PLATE_1_4_INCH, - BUCKET_HEIGHT/2 ])
2284+ rotate ([90 , 0 , 0 ])
2285+ weld_bead(length= BUCKET_HEIGHT - 20 , diameter= 8 );
2286+ }
22582287}
22592288
22602289// =============================================================================
@@ -2899,36 +2928,13 @@ module standing_deck() {
28992928 folding_platform_assembly(platform_fold_angle);
29002929}
29012930
2902- // =============================================================================
2903- // CONTROL HOUSING
2904- // =============================================================================
2905-
2906- module control_housing() {
2907- housing_width = 300 ;
2908- housing_height = 350 ;
2909- housing_depth = 200 ;
2910-
2911- // Position inside the frame
2912- translate ([0 , WHEEL_BASE/2 , FRAME_Z_OFFSET + 150 ])
2913- {
2914- // Housing box (transparent for visualization)
2915- color ("Blue" , 0.3 )
2916- difference () {
2917- cube ([housing_width, housing_depth, housing_height], center= true );
2918- translate ([0 , 0 , 10 ])
2919- cube ([housing_width- 20 , housing_depth- 20 , housing_height], center= true );
2920- }
2921- }
2922- }
2923-
29242931// =============================================================================
29252932// MAIN ASSEMBLY
29262933// =============================================================================
29272934
29282935module lifetrac_v25_assembly() {
29292936 if (show_frame) {
29302937 base_frame();
2931- control_housing();
29322938 engine();
29332939 }
29342940
@@ -2947,7 +2953,7 @@ module lifetrac_v25_assembly() {
29472953lifetrac_v25_assembly();
29482954calculate_cog();
29492955
2950- // Ground plane reference at Z=0 (shifted down slightly so wheels visibly touch it)
2951- color ("Green" , 0.2 )
2952- translate ([0 , WHEEL_BASE/2 , - 1 ])
2953- cube ([4000 , 4000 , 2 ], center= true );
2956+ // Ground plane reference removed per user request
2957+ // color("Green", 0.2)
2958+ // translate([0, WHEEL_BASE/2, -1])
2959+ // cube([4000, 4000, 2], center=true);
0 commit comments