(define (symo->rib-help sym-obj hedra transform)
  (define (vertex->mv vertex-symb)
    (apply r4-vector->mv
           (up-structure->list
            (transform
             (symo:get-vertex sym-obj vertex-symb)))))
  (define (print-hedron spec)
    (pp `(printing hedron ,spec) (notification-output-port))
    ;; TODO Abstract commonalities with symo:print-gv-help
    (define vertices (car spec))
    (define color (cdr spec))
    (define color-spec
      (highlight-contained
       sym-obj vertices color (color:default)))
    (define face-color-list 
      (filter-map (lambda (face)
                    (let ((color (color-spec face)))
                      (if (color:drawable? color) 
                          (cons face color) #f)))
                  (symo/face-list sym-obj)))
    (define (face-as-sphere face)
      (points-as-sphere
       (map vertex->mv face)
       ;; I expect that every other vertex of the polyhedron will
       ;; yield the same result.
       (vertex->mv (car (lset-difference eq? vertices face)))))
    (define (print-sphere-face face color)
      (let ((center (sph-center face))
            (radius (sph-radius face))
            ;(invert? (sph-invert? face))
	    )
	(display "   SolidBegin \"primitive\" \n")
        (display "      Sphere ") 
        (format #t "~A, -1*~A, ~A, 360.0, NULL"
                radius
                radius
		radius)
	(display "      Identity")
        (display "      Translate ") (newline)
        (format #t "~A, ~A, ~A \n"
		(car center)
                (cadr center)
                (caddr center))
        (format #t "     Color [~A, ~A, ~A] \n"
                (car color) (cadr color) (caddr color))
        ;;(if invert? (display "inverse\n"))
        (display "    SolidEnd"))
      (newline) (flush-output))
    (define (print-plane-face face color)
      (let ((normal (pln-normal face))
            (displacement (pln-displacement face)))
        (display "plane {") (newline)
        (format #t "<~A, ~A, ~A>, ~A"
                (car normal)
                (cadr normal)
                (caddr normal)
                displacement)
        (newline)
        (format #t "pigment { color rgb <~A, ~A, ~A> }\n"
                (car color) (cadr color) (caddr color))
	(display " SolidEnd \n")
	(flush-output)))
    (define (print-face face color)
      (if (plane? face)
          (print-plane-face face color)
          (print-sphere-face face color)))
    (define (print-faces face-color-list)
      (let ((pos-faces (delete-matching-items face-color-list
					      (lambda (face) (sph-invert? (car face)))))
	    (neg-faces (keep-matching-items face-color-list
					    (lambda (face) (sph-invert? (car face))))))
	(if (> (length neg-faces) 0)
	    (display " SolidBegin \"difference\" \n"))
	(display "    SolidBegin \"intersection\" \n")
	(for-each 
	 (lambda (face)
	   (print-face (face-as-sphere (car face)) (cdr face)))
	 pos-faces)
	(display "   SolidEnd \n")
	(if (> (length neg-faces) 0)
	    (begin
	      (for-each 
	       (lambda (face)
		 (print-face (face-as-sphere (car face)) (cdr face)))
	       neg-faces)
	      (display " SolidEnd \n")))
	;; The bug turned out to be here: unavoidable self-call
	(print-faces face-color-list)
	;; It doesn't break without this display
	(display "foo"))))
  (for-each print-hedron hedra))