[Plugin] FredoTools::Convexify - v1.0 - 25 Feb 15
-
Convexify is a standalone script which is part of FredoTools.
It performs the decomposition of 3D shapes into Convex shapes.
Convexify operates in 3 steps:
- Parameters, mainly whether you wish to generate the convex shapes on a specific layer or replace the original shapes, as well as the tolerance for concavity.
- Calculation of Convex shapes, including alignment of face orientations
- Post-view to Visual Inspection. This step allows examining the generated shapes.
You can either
- REPLACE the selection by its convex decomposition
- or put the Convex decomposition on a specified LAYER, leaving the original shapes untouched
Convexify proceeds with the decomposition of top level geometry and all embedded groups / components in the selection at any level. It also aligns the orientation of faces in order to detect correctly the concave edges.
Convexify is installed as part of FredoTools 2.6 and above.
See the main post for this plugin for Installation of FredoTools
(see also section Quick Start and Video below)
Quickcard Convexify - English - v1.0.pdf
For developers only: There is service API to the Convexify functionality (which is actually implemented in LibFredo6).
FredoTools-Convexify API.pdf- SU Versions: SU6, SU7, SU8, SU13, SU14, SU15 – works better with SU8 M1 and above
- Platforms: Windows and Mac
- Languages: English, French
- Menus: by default, Convexify is installed in Tools > FredoTools. There is also an entry in the Contextual menu.
- Icon toolbar: Fredo6 Tools. There is only a single icon. By default, it is not shown. You need to go to the Default Parameters… dialog of FredoTools to enable the icon.
- The plugin is free, for private and commercial usage.
Convexify Overview
[flash=640,480:1b5lckj2]http://www.youtube.com/v/1Cv1j_-DdB0&hl[/flash:1b5lckj2]Launching Convexify
Just launch Convexify on a selection. If there is no selection, Convexify proposes to apply the operation to the whole active model.
You will be presented a dialog box to indicate the parameters
Shape generation
This option allows to choose whether you wish
- to replace the original selection by its decomposition into convex shapes
- or put them on a specified layer (which will be created if it does not exist)
Note that in both cases, the hierarchy of groups / components is preserved, as well as the material and textures. Layers are also preserved if you replace the original components.
Tolerance Concavity
This parameter allows relaxing the constraint on strict concavity, which is the condition for splitting shapes into convex sub-shapes.
In the example below, the concave edge has a deviation of only 5 degree. If you set the tolerance to 5 degree or above, it will be considered convex and not split.
Animation Algorithm
This parameter is really just for illustration purpose of the algorithm. If you set the delay to 0 or more seconds, then you will see a jumping cut plane splitting the shapes. The algoithm is iterative and progressively cut the shapes along their concave edges. There is an example in the video.
Processing
The algorithm is iterative. Therefore, when it takes time, you will be shown a Visual Panel (not a progress bar).
The processing can be interrupted by a click or Escape (when the cursor is a green hourglass). However, when committing the operation, the processing cannot be interrupted (hourglass is red). On complex model, this step can take long, as the decomposition may generate a lot of new faces and groups.Post-View - Visual Inspection of the Result
When the processing is complete, you are switched to an interactive tool that basically allows reviewing the result of the convex decomposition.
The button palette gives information on the original selection processed and the resulting number of convex shapes generated. It also includes some useful options for an interactive review of the convex shapes.
When you generate the convex shapes on a separate layer, there are a few additional buttons allowing to navigate between the Original view and the Convex view (showing only this layer)By default, the convex shapes are shown with color. This is purely interactive painting. The shapes receive the original material and textures if any. You have a toggle button in the palette to activate / deactivate the colorization.
Shapes which were already convex are shown in a light beige color.
There are 2 utilities for visual inspection:
Explosion of Shapes
Click on the shape to explode it into the individual convex shapes. For convenience, only the selected shape is displayed. Click again to implode.
You can adjust the speed of explosion as well as its range (explosion factor) via the buttons in the palette.
Review of Non-Solid convex shapes
When the original shapes are not true solid themselves, the convex decomposition may not be able to generate true solid. In this mode, non-solid shapes are shown in Red and all others in White.
To finish, be aware that the result of a Convex decomposition may be complex too, especially when there are many concave edges. So Convexify will generally gives more aesthetical results on regular and boxy shapes. Below is a complex model (thanks to Pilou) with 320 concave edges. No miracle, the decomposition generates lot of small pieces.
Convexify 1.0a – 25 Feb 15: Initial public release in FredoTools 2.6a
-
I understand that this is for games and I'm yet to know where I could use it, because I feel it could be useful for other scenarios. I'm still trying to figure out wich...
One word on the animation of parts in and out! Brilliant!
-
@jql said:
I understand that this is for games and I'm yet to know where I could use it, because I feel it could be useful for other scenarios. I'm still trying to figure out wich...
I think it can also be used for Physics scripts which apparently have restrictions for computing collision better (or only) on convex shapes.
Fredo
-
That's amazing! Thanks for great plugin.
Do you mind if I try converting your algorithm to C++? Could be very useful for various physics engines.
Anton
-
Very nice new tool for the great Fredo tools! Thank you!
-
@anton_s said:
That's amazing! Thanks for great plugin.
Do you mind if I try converting your algorithm to C++? Could be very useful for various physics engines.
Anton
Anton,
That won't be easy from the code itself and anyway it heavily relies on Sketchup framework to describe geometry (faces, edges, etc....). The best is that I provide you with a short description of the algorithm which could be adapted to your geometrical frameworks in MSPhysics and underlying engine.
Fredo
-
Hi Fredo!!!
This plugin can make the decomposition of 3D shapes into "pyramidal" parts?
Look at this:
http://www.3ders.org/articles/20141211-pyramidal-shape-algorithm-removes-need-for-3d-print-material-support.html
http://www.math.zju.edu.cn/ruizhenhu/projects/pym/pym_small.pdfDaniel S
-
@daniel s said:
This plugin can make the decomposition of 3D shapes into "pyramidal" parts?
I am afraid this is a very different problem, much more complex actually.
I imagine that if it does matter for 3D printing, then 3D Printing software editors would have embedded this capability in their applications.Fredo
-
@fredo6 said:
That won't be easy from the code itself and anyway it heavily relies on Sketchup framework to describe geometry (faces, edges, etc....). The best is that I provide you with a short description of the algorithm which could be adapted to your geometrical frameworks in MSPhysics and underlying engine.
Thank you Fredo. It seems complicated, but I'm fairly sure its possible to put together a C extension out of this. I'll look into the source and try to break it down. Otherwise, I could stick with Ruby-SketchUp implementation.
Thanks again,
Anton -
I decided to do a little test and got a generation error with that camel, which I got at 3dwarehouse.
@unknownuser said:
Date: 27-Feb-15 01:54:52
An error occurred in Convexify 3D Shapes
Error while processing Convexifywrong argument type (expected Sketchup::Face)
body_Lib6Solid.rb: 1212 -- reversed_in?
body_Lib6Solid.rb: 1212 -- block in solid_transfer_section_faces
body_Lib6Solid.rb: 1205 -- each
body_Lib6Solid.rb: 1205 -- solid_transfer_section_faces
body_Lib6Solid.rb: 1034 -- solid_split
body_Lib6Solid.rb: 909 -- solid_split_robot
body_Lib6Solid.rb: 560 -- robot_execute_protected
body_Lib6Solid.rb: 506 -- robot_execute
body_Lib6Solid.rb: 482 -- block in convexify
Lib6Operation.rb: 325 -- call
Lib6Operation.rb: 325 -- step_geometry
Lib6Operation.rb: 286 -- block in yield?
SketchUp: 1 -- callGeneration Options:
Put the Convex shapes on LAYER: Fredo6_Convexify
Tolerance Concavity: 0 deg.
Animation algorithm: NOA bit different error shows up when I generate with Animation set to 0.2s.
Edit: Adding
next if edge0.faces.size != 2
to body_lib6Solid.rb, line 1210 (afterbreak unless edge0
) seems to fix that initial error, and generate convex decomposition without problems. However, changing tolerance makes a different error to appear. Maybe you could look into it if you have time...
-
Anton,
Thanks for pointing to this bug.
Actually, the correction is to replace line 1207 (an error of too quick copy / paste!)
#ledges = face.edges.sort { |e1, e2| e2.length <=> e1.length } ledges = ledges.sort { |e1, e2| e2.length <=> e1.length }
I'll fix and re-release, after looking at the Camel
Fredo
-
Thanks. I was kind of wondering whether multiple convex shapes could be combined. The algorithm generates too much convex shapes for complex models. It would be nice to have a cleanup method which then combines final convex groups if they together are still a convex shape.
-
I am disapointed that the Pilou's model is not a real solid!
It should because it has an external closed skin!
Sure internal is maybe some convoluted!So next plug will be to tranform it in a real solid!
In any way another Cristallographic task!
-
@anton_s said:
Thanks. I was kind of wondering whether multiple convex shapes could be combined. The algorithm generates too much convex shapes for complex models. It would be nice to have a cleanup method which then combines final convex groups if they together are still a convex shape.
Anton,
This would be another type of decomposition (say a "blockify" method). Convexify does the job, and none of the small pièces can be combined to form a bigger convex piece. In the camel, many of the mesh quads have a diagonal that is a concave edge.
For collision, I guess that what you need is an approximate block decomposition that would be visually sufficient to give the impression of contact.
Fredo
-
@pilou said:
So next plug will be to tranform it in a real solid!
Did you try Solid Inspector by thomthom. I think TIG also has a plugin for that.
Fredo
-
I will try that!
-
I am having a problem with Convexify. I am running SU15 Make. I have this tool on another computer and it runs seamlessly. I can't figure out why it won't work on this computer.
Running the tool seems to work at first where I get prompted to use the whole model (if nothing is selected) and then I can select the convex decomposition parameters. Once I click "OK" the green hour glass comes up, but then nothing happens. The second I move my mouse, the hour glass changes to a pointer as if nothing ever happened. Any clue to what's going on here?
-
hello,
Unfortunately, I have exactly the same problem.
I work with pro skecthup 2015 -
Thanks for signaling.
This is a bug introduced by LibFredo6 6.8. Sorry for inconvenience.Please install LibFredo6 6.8c, now published on the PluginStore.
Fredo
-
speed and efficiency
a big applause
thank you a lot
is it possible to keep the exploded model?
Advertisement