Still working on the trying to break the roof plane (primitive) algorithm. I’ve added in a bit more error checking code. It will probably be a couple more days of testing to make sure it is bullet proof or mostly bullet proof.
The edit, move edge and edit outline tools and functions are now all working. The next item of business is the roof plane edit tool.
Complex roof remind of a mountain range, I guess they are similar in their topology:
I know you’re just getting started, and I’m sure you know how complex roofs can get
A few things I might mention. It’s an unusually rare and fortunate situation if the eaves are all the same elevation and the pitches all the same. When things get a bit complicated is when you’re dealing with multiple levels and pitches. Our company does a lot of roofing and I know there are folks looking for a way to automate the process of drawing a roof like I did above. That drawing took me almost 2 hours. Most of that was spent on the panel layout.
I must say that is a crazy roof, why all the little jogs in the design? That will certainly make it more expensive to build and to roof. But I guess this is the type of roofs that are common place and the plugin needs to be able to handle.
I haven’t given too much consideration to the panelization of the roof, other than to compute the square footage of each roof plane and report that data.
I’m trying to build enough flexibility in to make this new module handle the worst case situations from the get go. In addition to the complex roof module there will also need to be a secondary roof module which allows one to tie roofs into other roofs. This will allow for very complicated configurations, including situations where the eaves don’t line up and pitches and plate heights are all dissimilar.
However, I currently don’t have a way to create a roof with inner polygons (holes), for example a donut shaped roof. I don’t think this is critical right now but I will put this on my todo list.
Just fixed a major performance bug/flaw in the plugin not only for this module but actually for all the plugins. I will be releasing updates for each plugin including the Truss plugin that resolve this issue.
Fixed a critical performance bug that affects all the modules within the extension.
Added the Complex Roofs toolbar.
*** CRITICAL PERFORMANCE UPDATE ***
If you are noticing a slowdown of the plugin performance after multiple edits to a roof or floor assembly, this fix will resolve that issue. This issue affects all previous versions of the plugin.
Also note that the complex roof toolbar is now active and will allow you to create a complex roof primitive (edit, move edge, edit outline and regen). The “Edit Roof Plane” tool is currently not yet available.
The roof primitive and roof outline are placed on separate layers, I will get into that more with a future tutorial video. I primarily released this update tonight because of the performance issue I discovered this afternoon with all of the plugins, but it also allows some of you more adventurous designers the ability to test out the new complex roof tools. Granted a lot remains to be done but at least I’ve got a start into it now. I will be focused on it until it is complete. After that I will attack the secondary roof module.
(Note, that I’ve assigned the material of the primitive to a different material and edited it so that it is transparent.)
View model here:
The roof outline is a separate group within the assembly, on its own “outline” layer. I’ve taken great care to make sure that the primitive is a “solid” so that the user will be able to use SketchUp’s boolean (solid) tools to further manipulate these roof primitives if required.
Nothing elaborate with my office or setup. The most critical is a somewhat decent computer that works well and the two monitors which allows me to open multiple ruby files at once when I need to.
So busy with the code that I still have not fixed the light fixture base (in the stairwell) that got knocked out of place a few months ago, I guess it all comes down to priorities.
Every roof plane will be able to be customized (or have the customization removed and return to its default state where it uses the global settings of the roof assembly).
The first and most important parameter is the Roof Plane Type: Hip or Gable
Not all roof planes will be able to convert to a gable configuration. If you look at a complex roof you should only be able to turn the roof planes that form a triangle (defined by three vertices) into a gable configuration. All other roof panes are going to be inclined or “hip”. The other constraint is that the angle between the roof plane in question and its adjacent roof planes on either side must be orthogonal (90 degrees), otherwise you could potentially try and gable a roof plane on a octagon shaped roof, which would not make any sense. I think these two constraints will successfully limit a roof plane, as to whether it can become a gable end.
If a roof plane is customized and it is a hip its parameters are:
pitch
birdcut
rafter depth
overhang
delta height
If a roof plane is customized and it is a gable end its parameters become:
gable rafter option
gable rafter depth
gable overhang
rake option
rake width
rake depth
outlooker option
outlooker spacing
outlooker size
outlooker orientation
outlooker structural: Yes/No
outlooker @ peak: Yes/No
P.S. A certain situation exists where the roof plane has 4 vertices might also be able to be a gable end, I will study this further.
Customizing roof planes gets a little complicated when combined with the roof edge move tool. The problem is that as you move roof edges you potentially change up the shape of roof, eliminating certain roof planes entirely and also changing some roof planes that potentially could be gable ends back to a hip configuration and vice versa.
With custom roof planes the move tool is going to have to get a bit more elaborate (more logic) so that a number of checks can be run to make sure that we are not trying to turn certain roof planes into gable ends that physically cannot be this configuration and also checking to see if certain roof planes were deleted.
The outline edit tool is even a larger problem in my opinion. How do you know which edges were retained after an outline edit? I think the default behavior should be to erase all roof plane customizations after the outline edit tool is used. I will need to give this some further thought.
Somehow I always knew that complex roofs was going to be a bit of a Pandora’s box.
Now that we are able to successfully select roof planes (roof edges) only the algorithm for gable end flagging remains. If a roof plane cannot be converted to a gable end the “Roof Plane Type” drop down option will be limited to only a “Hip” type.
Notice that the roof plane status will tell you whether the selected roof plane is inheriting its parameters from the main roof or it has its own custom settings.
I’ve also added a “Clear Custom Settings” at the bottom of the menu so that one can return the roof plane to the default/global settings of the roof assembly.
Setting up all of this supporting infrastructure is somewhat tedious and certainly time consuming, however I do believe that a solid user interface that is both efficient and intuitive will make or break this module.
I intend for the edit plane tool to be persistent, provided that it does not affect stability. In other words you can keep clicking on roof planes and updating them without having to restart the tool by clicking on the icon in the toolbar.
I will now need to spend a day or two just trying to break it and I also need to enable the gable end option.
All of the menus and tools are working correctly now and seem to be quite robust. I will spend the next couple of days finishing up the roof primitive geometry (and testing). After that I would like to enable sheathing and cladding along with the roof labels and then I will probably release an update so everyone can test it out further and help me unearth any bugs I may have missed.
I didn’t think it was possible but there are certain configurations where a standard straight skeleton will not generate the expected roof. This is a good example of that.
The complex roof module will not be able to automatically handle these types of situations.
This is where the secondary roof module will need to come in.
Throwing all sorts of curve balls at this module to see if I can break it. Ultimately one can always break anything if you try hard enough, especially with something as complex as some of these roofs get.
Overall I’m pretty happy with it, I’ve addressed the issue with inside corners and now all is working as expected. Here is a recent test example of a roof with planes and pitches all over the place:
That being said there is always further testing that can be done. I’m sure there is some state I have not thought of that someone will get the plugin into that will break it.
I think it is time to move on to the gable end option. Once I get that working I think the utility of this new module will start to become apparent.
I haven’t quite started into the framing geometry just yet but I’m already one step ahead thinking about how certain junctions are going to need to be framed up.
Two hip rafters meeting at a ridge is pretty standard and I think I have that one handled however the junction where a valley rafter meets a flying hip and ridge is a little more uncertain. Any information on how some of these framing junctions should be made would be very helpful.
The roof primitive module for asymmetric complex roofs with gable and hip ends is now complete. Granted there is still room for additional options like dutch gable and half hips but I will leave those for another day.
I will now turn my attention to sheathing and cladding as well as the roof plane labels (name and sqft).
One thing I forgot to add into the overall roof parameters/options is anything for battens and cross battens. I can add it in if I receive some positive feedback on that feature, otherwise I will move on and start into the sheathing module first thing tomorrow.