* Add Black formatting check to CI * Add some documentation for code contributors * Use uncompromised code formatting
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import cadquery as cq
 | 
						|
 | 
						|
# These can be modified rather than hardcoding values for each dimension.
 | 
						|
# Define up our Length, Height, Width, and thickness of the beam
 | 
						|
(L, H, W, t) = (100.0, 20.0, 20.0, 1.0)
 | 
						|
 | 
						|
# Define the points that the polyline will be drawn to/thru
 | 
						|
pts = [
 | 
						|
    (W / 2.0, H / 2.0),
 | 
						|
    (W / 2.0, (H / 2.0 - t)),
 | 
						|
    (t / 2.0, (H / 2.0 - t)),
 | 
						|
    (t / 2.0, (t - H / 2.0)),
 | 
						|
    (W / 2.0, (t - H / 2.0)),
 | 
						|
    (W / 2.0, H / -2.0),
 | 
						|
    (0, H / -2.0),
 | 
						|
]
 | 
						|
 | 
						|
# We generate half of the I-beam outline and then mirror it to create the full
 | 
						|
# I-beam.
 | 
						|
# 1.  Establishes a workplane that an object can be built on.
 | 
						|
# 1a. Uses the named plane orientation "front" to define the workplane, meaning
 | 
						|
#     that the positive Z direction is "up", and the negative Z direction
 | 
						|
#     is "down".
 | 
						|
# 2.  moveTo() is used to move the first point from the origin (0, 0) to
 | 
						|
#     (0, 10.0), with 10.0 being half the height (H/2.0). If this is not done
 | 
						|
#     the first line will start from the origin, creating an extra segment that
 | 
						|
#     will cause the extrude to have an invalid shape.
 | 
						|
# 3.  The polyline function takes a list of points and generates the lines
 | 
						|
#     through all the points at once.
 | 
						|
# 3.  Only half of the I-beam profile has been drawn so far. That half is
 | 
						|
#     mirrored around the Y-axis to create the complete I-beam profile.
 | 
						|
# 4.  The I-beam profile is extruded to the final length of the beam.
 | 
						|
result = cq.Workplane("front").moveTo(0, H / 2.0).polyline(pts).mirrorY().extrude(L)
 | 
						|
 | 
						|
# Displays the result of this script
 | 
						|
show_object(result)
 |