code: public void placeRing(IRing ring, IAtomContainer sharedAtoms, Point2d sharedAtomsCenter, Vector2d ringCenterVector,
                            double bondLength) {
          int numSharedAtoms = sharedAtoms.getAtomCount();
          int numSharedBonds = sharedAtoms.getBondCount();
          logger.debug("placeRing -> sharedAtomCount: " + numSharedAtoms);
          if (numSharedAtoms > 2 && numSharedBonds > 1) {
              placeBridgedRing(ring, sharedAtoms, sharedAtomsCenter, ringCenterVector, bondLength);
          } else if (numSharedAtoms == 2 && numSharedBonds == 1) {
              placeFusedRing(ring, sharedAtoms, ringCenterVector, bondLength);
          } else if (numSharedAtoms == 1 && numSharedBonds == 0) {
              placeSpiroRing(ring, sharedAtoms, sharedAtomsCenter, ringCenterVector, bondLength);
          }
      }
docs: Generated coordinates for a given ring. Multiplexes to special handlers
  for the different possible situations (spiro-, fusion-, bridged attachement)
  
  @param   ring  The ring to be placed
  @param   sharedAtoms  The atoms of this ring, also members of another ring, which are already placed
  @param   sharedAtomsCenter  The geometric center of these atoms
  @param   ringCenterVector  A vector pointing the the center of the new ring
  @param   bondLength  The standard bondlength