[Plugin] Manifold v2.2
-
How do you determine what an internal face is?
-
@thomthom said:
How do you determine what an internal face is?
See the code
remove_inner_faces()- it seems to work... probably break when pressed ??? This is my first beta release...I had a complex method involving doing an MIR type scan slice in the Z and then the X [to catch flat internal faces] progressively through the group [though not needed at every 0.5mm since we can determine any 3-faced edges and just start a small amount into them to get the relevant faces] and then intersecting the slice with the group and finding any split surfaces made where an internal face intersected it etc and then finding a point on that split-line and testing it to see if it was on a face that's internal and then erasing it etc etc... BUT dough-nut shaped groups really screwed this up so I reverted to the simpler version you see here...

-
It sure seem to work at whatever I've thrown at it so far.
Mind if I sample the code logic for an implementation in Cleanup?btw:
Error; #<NoMethodError; undefined method `db' for #<Sketchup;;Face;0xf54e668>> C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;293;in `orient_manifold_faces' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;332;in `orient_faces' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;330;in `each' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;330;in `orient_faces' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;95;in `activate' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;454;in `select_tool' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;454;in `manifold' C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;470 C;/PROGRA~2/Google/GOOGLE~1/Plugins/manifold.rb;470;in `call'though the script appear to complete...
And why did you comment out the disable_ui argument? (line 85)
@model.start_operation((db("Manifold")))#,true) ### ? -
On a sidenote: you can save some lines in your
remove_inner_facesmethod by using more of Ruby's Enumerator and Array methods:def remove_inner_faces() faces = @gents.select { |e| e.class==Sketchup;;Face } faces_to_go = faces.select { |face| face.outer_loop.edges.any? { |e| e.faces.length > 2 } } faces_to_go.each{|e| if e.valid? clone_removed_into_error_group([e]+e.edges) e.erase! if e.valid? end#if } endI just noticed them not too long ago while having another look at the Ruby docs, I realised I could cut down a number of lines in most my scripts.
-
Just noticed, when I reload your script,
load 'manifold.rb'it keeps adding more menu items.Think it's because of the last line:
file_loaded(__FILE__)
Should it not be:file_loaded(File.basename(__FILE__))? -
Just realised the cause of the error I reported earlier:
You're calling
msg=(db("Manifold: Orienting Faces"))from within theclass Sketchup::Facescope, whiledb()is defined within theManifoldclass.Making db() into a Class method instead of Instance method
def self.db(string)and changingmsg=(db("Manifold: Orienting Faces"))tomsg=(Manifold.db("Manifold: Orienting Faces"))(line 304)
and
puts(db("Manifold: orient faces aborted."))toputs(Manifold.db("Manifold: orient faces aborted."))(line 318)
makes it work. -
The groups that it creates, is it suppose to be offset from the original group?
-
@thomthom said:
Just noticed, when I reload your script,
load 'manifold.rb'it keeps adding more menu items.Think it's because of the last line:
file_loaded(__FILE__)
Should it not be:file_loaded(File.basename(__FILE__))?whopops ! update in the pipeline...

I'll also fix the db() error... -
@thomthom said:
On a sidenote: you can save some lines in your
remove_inner_facesmethod by using more of Ruby's Enumerator and Array methods:> def remove_inner_faces() > faces = @gents.select { |e| e.class==Sketchup;;Face } > faces_to_go = faces.select { |face| face.outer_loop.edges.any? { |e| e.faces.length > 2 } } > faces_to_go.each{|e| > if e.valid? > clone_removed_into_error_group([e]+e.edges) > e.erase! if e.valid? > end#if > } > end >I just noticed them not too long ago while having another look at the Ruby docs, I realised I could cut down a number of lines in most my scripts.
Never mind this code. Seems to have a bug in it.
-
Got a case where the internal faces is removing too much. See attached file. Run the script on the large cube.
-
Here's v1.1 with some glitch fixes http://forums.sketchucation.com/viewtopic.php?p=218691#p218691
-
@thomthom said:
Got a case where the internal faces is removing too much. See attached file. Run the script on the large cube.
I'll look into it...
EDIT: removes innermost groups of outer-faces [?] AND leaves internal-faces edges behind [that's an easy fix]
-
fantastic,
go out on a family errand and come back to a whole new playing field, anything I can do to help?
a 'test' skp, if you need something more taxing,
or I'll try repairing it myself when you've got the next one up...
or need a tester... whatever you need...
about 25% of the poly count I would normally use for this sort of thing, and not triangulated.john
-
driven
I'll look at your problem - TT has already come up with one set of problems to fix !
With yours I get a non-planar points error - since there's only 3 of them it seems a bit strange...
We're really at 'beta' testing now - I only outlined the ideas some hours ago and issued this as my first go - it WILL get better
-
Very useful for boats builders

-
@unknownuser said:
Very useful for boats builders

and don't forget the humble Air Bed makers of the world...
TIG,
I did this simply to save you having to draw-up or look for something relevant to test onthe last 3 letters in watertight might contain none planer points, one had to be over-drawn with a poly-line and two unsoftened with eraser on the bottoms, before I could JPP them, oh the bottom of that A I made a real hash of.. missed it out and went back... I was in a rush...
I made the ring quite well, two joints (triangulated) near you name, I chose a ragged font in an attempt to create tiny voids and was surprised how well it came out. Fredo's Joint PushPull is remarkably clean, I have another test piece on file that is pilfered with bad seams if that's more useful.
john
I'll give anything a spin, it's great that your on the case...
-
Here's v1.2 http://forums.sketchucation.com/viewtopic.php?p=218691#p218691
Basic Ticker added. Better processing for inner faces.
Three-faced-edged external-faces now usually kept. [fixed TT's ball-breaker boxy mess
]
FR lingvo updated by Pilou.
Still struggling with driven's monster...
More feedback and ideas please...

-
@tig said:
Here's v1.2 http://forums.sketchucation.com/viewtopic.php?p=218691#p218691
Still struggling with driven's monster...More feedback and ideas please... :ugeek:
that's the simple version, so far it's taken 2hrs 14 min and 49seconds just to explode all the groups so I can then re-group to test the plug on it (and it's only 600,000+ poly's)
I just fired up the other computer so I'll do some simple tests on it, while I wait
-
@driven said:
@tig said:
Here's v1.2 http://forums.sketchucation.com/viewtopic.php?p=218691#p218691
Still struggling with driven's monster...
More feedback and ideas please...
that's the simple version, so far it's taken 2hrs 14 min and 49seconds just to explode all the groups so I can then re-group to test the plug on it (and it's only 600,000+ poly's)
I just fired up the other computer so I'll do some simple tests on it, while I waitI've added some more error reporting in the console to my own version so I can at least see what these errors are - seems related almost exclusively now to healing very tiny holes ?
I'm thinking perhaps to move these vertices to heal these tiny gaps rather than fail making edges that are too small inside a 'rescue' ? It would change the model's form, but so slightly you'd never notice...Watch this space

-
Did you scale it up even more?
Advertisement