Method or plugin for subdividing like this sample
-
Hi everyone
Is there any plugin or code snippet that creates this kind of subdivision, basically is a offset from each edge in a solid component?
My goal is to smooth corners at objects prior to any rendering.
Saludos
-
mod = Sketchup.active_model ent = mod.active_entities sel = mod.selection vue = mod.active_view; pts =[] sel.grep(Sketchup;;Face).each{|f| vec = f.normal.reverse pts << f.vertices.map{|v|v.position.offset(vec)} } pts.each{|p| f=ent.add_face(p); f.erase!}
-
How simple you make it look like.
Thanks. I'll dig into it. -
Thanks for the code Sam.
It works great for the example where faces are perpendicular but not with something with non perpendicular faces. See attached SKP (SU8). Could that be added?
-
@pixero said:
It works great for the example where faces are perpendicular but not with something with non perpendicular faces.
mod = Sketchup.active_model ent = mod.active_entities sel = mod.selection vue = mod.active_view; pts =[] faces = sel.grep(Sketchup;;Face) faces.each{|f| vec = f.normal.reverse; ctr = f.bounds.center pts << f.vertices.map{|v|v.position.offset(ctr.vector_to(v.position)).offset(vec)} } grp=ent.add_group; ge=grp.entities; gt=grp.transformation pts.each{|p| fgrp=ent.add_group;fge=fgrp.entities;fgt=fgrp.transformation f=fge.add_face(p); fge.intersect_with false,fgt,ge,gt,false,faces fgrp.erase! } grp.explode
-
I tried the new code and it's better but for other non perpendicular faces it still gives some weird results.
A cylinder for example.
I have attached another example of that below. Hopefully it's possible to get it right for these cases also. -
-
But the code was so useful I couldn't help myself wanting it to work on more types of objects...
...what if I say: please?
-
I see a lot of possibilities here.
Fake beveling at render time?
Please Sam?
-
@jql said:
I see a lot of possibilities here.
Fake beveling at render time?
Please Sam?
Sorry guys but I see no possibilities. In fact it is impossible. Why, because the 'offsets' only work if all the angles at a 'corner' are the same. Plus, what do you with 'concave' angled corners?
-
In Thomthom's EdgeTools there is a script for manually diving faces called "Divide Face".
It have some clever ways of getting the "splitting edge" to match the face's surrounding edges.
Maybe if you took a look at how he does it there it might be possible to implement into your code? -
Guys,
This is what Roundcorner does in the first place. So doable, but the code is not exactly concise and straightforward to catch all topological situations, especially those where the offset line don't meet at corner edges, as highlighted by sdmitch (just take an elongated pyramide for instance). Not mentioning concave corners and other complex geometry...
Fredo
-
@fredo:
So, when will your new version with all quad face corners be ready?
I believe you posted a sneak peak some time ago. -
That's a pity, but thanks fo the explanation. When rendering an architectural subject bevels make a lot of difference in image results and realism. However when working they are too cumbersome and when sending to Layout or CAD to document the building and dimension it, they become even moreof a nuisance.
Having some kind of temporary bevelling that you could toggle, loke subd, would solve the issue.
I guess a lot of us would find that an incredible tool and I thought, for a moment, it would be possible...
Even so,thanks for your time gentlemen!
-
Hi guys
This is what I came up with a few months ago, but it fails when curves or inner loops exist.
Also it uses the offset.rb from Smustard(TM).
By using this combination of soft and smooth you are able to put correct dimensions in both SKP and LO
If you need to get rid of the changes the plugin Fix101 takes care of it.Any ideas to improve this?
#CSR create soften edges for renders
ss = Sketchup.active_model.selection
Sketchup.active_model.start_operation("test")
old_edges = []
new_faces = []
ss.each{|e|old_edges.push e if e.class == Sketchup::Edge}
ss.each{|s|new_faces.push s.offset(-0.0625) if s.class == Sketchup::Face}
old_edges.each{|oe| oe.smooth = true}
new_faces.each{|nf| nf.edges.each{|nfe| nfe.soft = true; nfe.hidden = true}}
Sketchup.active_model.commit_operation
-
After adding offset.rb it worked.
However the old edges are hard and the new ones are soft. -
Can anyone convert it to a plugin?
-
I'm trying...
I think it would work better if it only operated on edges that are hard.
How would one do that? -
And do you think it could have a method for operating at render time or is it too slow for that?
Like tag some objects and apply the effect when hitting Thea's render button and then undo it (using skatter's method)?
-
I don't know yet.
It has some bugs as it's not working correctly on for example a cylinder with soft edges. And some other things that would need solving first.
Advertisement