My first thought was to curtain walls and use the system panel family to host the chair. This worked fairly well until the seating had to share arm rests. Although you can host a detail component in the mullion profile family as an option for displaying the arm rest in 2D, it does not allow for nesting 3D Arm rest geometry in the mullion profile family. Although, for quick plan view layout, seat counts, and ease of creation, this method worked quite well and would work very well in 3D as long as arm rests were not required.
Since this project called for seating with armrests, we resorted to a railing object with nested chairs as baluster panels, and nested arm rests as baluster posts. This allowed us to control the seat size, spacing and placement of armrests along any type of sketch line, curved or straight. Endpost offsets allowed for control of the arm rest on the ends. Locking the sketchline to grids allowed the designer to change the length or radius as necessary while the chairs simply updated to match.
We ended up with 6 railing types, 3 for floor mounted and 3 for wall mounted chairs. Materials are handled in the nested geometry families and each chair has 3 different parametric sizes (20, 21, 22 O.C.). based on Series Seating Celebration model.
Generic Model templates were used to create the support posts in two types, wall mounted and floor mounted as shown above. This gm family was then nested into the Baluster post family and loaded into the project for railing type creation.
Again gm family templates served as the starting point for the seat geometry, which was then nested into the baluster panel family. Doing both posts and seats as independent geometry in generic model families kept them flexible for future use and allowed for some testing in hosted families. Modeling was kept minimal while matching overall shape and style. Each family starts as simple 2D geometry for flexibility and efficiency. Updating 2d graphics and adding refinements in 3D are easy to accomplish as necessary.
As the design progressed, we ran into issues with the railings not hosting to the sloped floors. It is not as simple as editing the railing and picking the floor object as host. My favorite command, align, was not much help either. It seems that railing objects host to floors unless the floor is sub-entity modified. Since many of the floors were sloped in this way or via sweeps, the hosting was accomplished via very thin “ramp” elements which effectively control things vertically while maintaining the horizontal control via grid elements.