class FenceTopClip : Model { @Custom var size = Vector3( 100, 6, 1 ) @Custom var endSize = Vector2( 22, 18 ) @Custom var keyholeD1 = 9 @Custom var keyholeD2 = 5 @Custom var keyholeL = 8 override fun build() : Shape3d { val keyhole = Circle.hole( keyholeD2/2 ).translateX( -keyholeL ).hull( Circle.hole( keyholeD2/2 ) ) + Circle( keyholeD1 / 2 ) val end = Circle( endSize.x/2 ) .scale( 1.0, endSize.y / endSize.x) - keyhole.centerX() val strip = Square( size.x, size.y ).center() val all = strip + end.translateX( -size.x / 2 - keyhole.size.x/2 ).mirrorX().also() val result = all.extrude( size.z ) return result } }