algorithmic modeling for Rhino
I'd like to create a vertical louver mobile, but didn't work out. When I rotate then on facade, the rotation are not corect. Someone knows how make it works?
I see a few problems. Louvers on a twisted surface (if I understand what you want to do?), won't work this way... I understand the first 'SubSrf', and the second 'SubSrf' doesn't do much harm (though I wonder why?). The third 'SubSrf' doesn't make sense to me and appears to be adversely affecting the outcome, since it looks better if you skip that one.
'Extr (Extrude)' on a twisted surface using the surface normal at its center of area just won't work well at all. The usual method for that is 'Offset Surface' and 'Loft' the original with the offset - but that fails in this case, probably due to the twisted surface. It doesn't matter though because...
It really isn't possible to rotate those individual louvers around straight lines. You can see this by skipping the extrude and connecting the output from the second 'SubSrf' (or even the first one) directly to 'RotAx'. The effect isn't what you want at all!
The only way that comes to mind is using one edge of each subsurface as a 'Sweep 1' rail and orienting small rectangles at the end of rail, representing the louver cross-section. Then you rotate the sections and 'Sweep' applies it along the length of each rail. Unfortunately, torsion comes into play and it may happen that louvers are "open" at the bottom and closed toward the top. Will play with it.
Yes, its a twisted facade.
I was trying to do, but I didn't know how to do. Thank you for your help. I'll try again.
Here is the general idea. As expected, there is some torsion twist along the "rails", leaving the louvers slightly open at the top when closed at the bottom. With more effort, two or more aligned sections on each rail, instead of only one, might be able to fix that problem.
Another approach might be to break up the extremely long louvers into shorter sections. The unwanted twist would be minimized, since alignment happens on each subsurface. This same code should handle all of them (I think).
I included a 'Data Dam' component before 'Sweep 1' to delay the slow sweep operation while you adjust the rotation angle.
P.S. 'List Item' extracts the four edges of each subsurface. Index 0 is the left edge, used as the rail, index 3 is the bottom edge. Index 1 is the top edge (same length as the bottom) and Index 2 is the right edge, ignored.
I understand what you did, but if I subdivide the surface (attached). The louver doesn't respect the angle rotation. Each floor has a different angulation. Is it possible corect this ?
Hmm... interesting, not what I expected. Makes it worse, not better.
Plan B: Use the rectangular "station" curve at both ends of the rail instead of only the beginning. I did some quick-quick (not elegant) weed wacking, including duplicate components and curve direction flipping to pull it off. The results look pretty good?
Might try going back to full length louvers? I have to wonder, though, if long twisted rigid louvers are practical? Reminds me of America's Cup wing sails, where twist is accomplished by incremental rotation of flexible elements - and there, the axis of rotation is a straight line (actually, a series of four straight lines), not a curve like these louvers.
It works ! But why Evaluate Curve became orange if it works?
If I put some parameter, the louver twist like I don't want.
That's because I used "1.002" as the value for the 't' input to 'Eval', for the 'LnPt' plane at the top - beyond the bounds of the expected '0 To 1' domain of the reparameterized curve. GH is forgiving and returns the point anyway. Like the bottom 'LnPt' (which appears above the top orange one in the GH code), where I used 't=0.002', it returns a point slightly above the plane origin, which establishes initial orientation. Before the 'PAdjust' later that re-orients both planes 90 degrees, pointing their Z axis up where their Y axis was originally.
It helps to examine the output at each component using preview.
Like I said, it was a little hasty and not the most elegant, but it worked getting that rectangle oriented properly at both ends of the rail.
Just now, I tried reducing the U count on the first 'SubSrf' from 6 to 1. While the ends still look good, I see unwanted twist in the middle. Torsion again. So to do that, more intermediate stations are needed, each one oriented properly relative to the surface at those points.
how can I apply the same concept but on a curved panel as a reference instead of a straight one?
Just for fun (and because I didn't want to bother implementing my earlier suggestion today), I reordered the sequence of 'SubSrf' components to eliminate the gaps when U > 1. If this were a building, it could be useful to have sectioned louvers anyway, since sunlight angles are very different from top to bottom. It might be useful to partition the list from the second 'SubSrf' into rows and columns?
Also made it easy to apply the louvers to all sides of the building at the same time.
Thank you Joseph ! Where did you learn grasshopper? I'd like to know how to solve the problems like you.. I'm trying this things a lot of time !
Could I aks you one more thing?
I did a different algorithm to horizontal louver, but have the some problem. The some angle rotation, represents different rotation, if you look the first and last louver, for example.
I learned right here on this forum, reading and understanding code written by others (as I still do!), studying many tutorials, asking questions when I got stuck. My long career as a programmer helps in some respects, but GH is so very different that I too struggled mightily with data trees, as everyone does at first.
I left a "Tree/List Viewer" tool in the code I posted earlier that I wrote myself. That tool, along with connecting text panels to see component output as data trees, is critical to almost every bit of GH code of any complexity that I write.
As to horizontal louvers, I would do them the same way as the vertical louvers. But I'm not gonna do that for you, sorry. Struggle is part of the learning process. The best way I know is to thoroughly understand every step of any GH code you see, or any that you write.
Thank you, very much. I'll adapt a doubt of the other one, to solve this problem.