96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/// Build a color from its red, green and blue components.
 | 
						|
/// These must be between 0 and 255.
 | 
						|
///
 | 
						|
/// ```
 | 
						|
/// startSketchOn(-XZ)
 | 
						|
///   |> circle(center = [0, 0], radius = 10)
 | 
						|
///   |> extrude(length = 4)
 | 
						|
///   |> appearance(color = appearance::hexString([50, 160, 160]))
 | 
						|
/// ```
 | 
						|
/// ```
 | 
						|
/// sideLen = 30
 | 
						|
/// n = 10
 | 
						|
/// 
 | 
						|
/// // The cubes become more green and less blue with each instance.
 | 
						|
/// fn cube(i, center) {
 | 
						|
///   g = 255 / n * i
 | 
						|
///   b = 255 / n * (n - i)
 | 
						|
///   return startSketchOn(XY)
 | 
						|
///     |> polygon(radius = sideLen / 2, numSides = 4, center = [center, 0])
 | 
						|
///     |> extrude(length = sideLen)
 | 
						|
///     |> appearance(color = appearance::hexString([0, g, b]), metalness = 80, roughness = 20)
 | 
						|
/// }
 | 
						|
/// 
 | 
						|
/// // Create n cubes, shifting each one over in a line.
 | 
						|
/// map(
 | 
						|
///   [0..n],
 | 
						|
///   f = fn(@i) {
 | 
						|
///     return cube(i, center = sideLen * i * 1.5)
 | 
						|
///   },
 | 
						|
/// )
 | 
						|
/// ```
 | 
						|
/// ```
 | 
						|
/// sideLen = 30
 | 
						|
/// n = 6
 | 
						|
/// 
 | 
						|
/// fn cube(offset, i, red) {
 | 
						|
///   x = floor(i / n)
 | 
						|
///   y = rem(i, divisor = n)
 | 
						|
///   g = 255 / n * x
 | 
						|
///   b = 255 / n * y
 | 
						|
///   return startSketchOn(offsetPlane(XZ, offset))
 | 
						|
///     |> circle(diameter = sideLen, center = [sideLen * x * 1.5, sideLen * y * 1.5])
 | 
						|
///     |> extrude(length = sideLen)
 | 
						|
///     |> appearance(color = appearance::hexString([red, g, b]), metalness = 80, roughness = 40)
 | 
						|
/// }
 | 
						|
/// 
 | 
						|
/// fn grid(offset, red) {
 | 
						|
///   return map(
 | 
						|
///     [0 ..< n * n],
 | 
						|
///     f = fn(@i) {
 | 
						|
///       return cube(offset, i, red)
 | 
						|
///     },
 | 
						|
///   )
 | 
						|
/// }
 | 
						|
/// 
 | 
						|
/// grid(offset = 0, red = 0)
 | 
						|
/// ```
 | 
						|
///
 | 
						|
/// ```kcl
 | 
						|
/// sideLen = 30
 | 
						|
/// n = 4
 | 
						|
/// 
 | 
						|
/// fn cube(offset, i, red) {
 | 
						|
///   x = floor(i / n)
 | 
						|
///   y = rem(i, divisor = n)
 | 
						|
///   g = 255 / n * x
 | 
						|
///   b = 255 / n * y
 | 
						|
///   return startSketchOn(offsetPlane(XY, offset))
 | 
						|
///     |> circle(diameter = sideLen, center = [sideLen * x * 1.5, sideLen * y * 1.5])
 | 
						|
///     |> extrude(length = sideLen)
 | 
						|
///     |> appearance(color = appearance::hexString([red, g, b]), metalness = 80, roughness = 40)
 | 
						|
/// }
 | 
						|
/// 
 | 
						|
/// fn grid(offset, red) {
 | 
						|
///   return map(
 | 
						|
///     [0 ..< n * n],
 | 
						|
///     f = fn(@i) {
 | 
						|
///       return cube(offset, i, red)
 | 
						|
///     },
 | 
						|
///   )
 | 
						|
/// }
 | 
						|
/// 
 | 
						|
/// map(
 | 
						|
///   [0..<n],
 | 
						|
///   f = fn(@i) {
 | 
						|
///     return grid(offset = i * sideLen * 2, red = 255 * i / n)
 | 
						|
///   },
 | 
						|
/// )
 | 
						|
/// ```
 | 
						|
@(impl = std_rust)
 | 
						|
export fn hexString(
 | 
						|
  /// The red, blue and green components of the color.
 | 
						|
  /// Must be between 0 and 255.
 | 
						|
  @rgb: [number(_); 3],
 | 
						|
): string {}
 |