Eneroth Solid Tools
Eneroth Solid tools are designed to be easy to use solid operations that better
fit into SketchUp than SketchUp's native solid tools.
Differences from native Solid Tools
The key difference is that these operations modify existing group/components
(from now on called containers) in place, rather than outputting the result to a
brand new group. Retaining the original object allows for BIM attributes, axes
placement, material inheritance, layer, references in other extensions and other
properties/aspects to be retained.
This also mean all other instances of the same component are modified as once.
If the user wants to modify only one instance, it is up to the user to
explicitly make that instance unique first. It is not up to the operations to
implicitly make definitions unique without the users knowledge or consent.
These operations also make the material inheritance model remain intact. If the
user has made the decision to keep the default (aka nil) material on all faces
in a container and instead have painted the container as a whole from the
outside, this choice is respected (this is by the way the preferred way to apply
materials in SketchUp as it allows for fast repainting of the object).
Lastly these operators ignore nested containers, whereas the native operators
refuse to regard any container with nested containers as a solid.
Implementation stuff
Preserving the existing object is made possible by regarding all operations as
asymmetrical (or non communicative). Even the union operation, which
geometrically is symmetrical, is regarded asymmetrical, with one target
container being modifier, and one modifier container defining how to perform
the modifications.
Use in Other Extensions
These operations were originally created for use in other extensions (Eneroth
Townhouse System to be precise) and not be a standalone extension. In time the
solid operations should be split off into its own library (see #2). For now
the solid_operations.rb file have to be ripped out of this extension if it is to
be used elsewhere.
Project history
This project was started back in 2014 when I (Eneroth3) was still quite new to
Ruby and programming in general. I worked hard over a few days to clean up,
refactor and style the code to the state where it could be published.
Large changes in March 2018.