-
Notifications
You must be signed in to change notification settings - Fork 65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to create a special infill for a given shape? #68
Comments
Hi Alexander, Thank you for your help. Please note that I'm currently learning FullControl Python but as I'm not familiar with, It is taking time. This is why I'm looking for an alternative way to achieve this using the Excel version first. As I'm printing complex biomaterials, I will not necessarily use this circular shape/infill. I took this exemple to illustrate my words and understand how I could achieve such a thing. Even though your explanation is cristal clear, would you have some input on how to achieve that in FullControl? What feature should I use for exemple? Thank you so much, Tim |
In the same way that the Excel version of FullControl makes use of various underlying Excel and VBA functionalities, the Python version makes use of the Python programming language. As far as I'm aware there's no existing feature in FullControl for infill generation in a shape yet, so doing so requires performing the relevant steps with general Python code. I've just uploaded a gist of my current progress, but be aware it's very much a work-in-progress at this stage, and for now it's not nicely integrated with FullControl's path or visualisation tools (I'm just using the matplotlib Python library for some basic plotting so I can see what I'm creating). I'm also writing it with performance in mind, so it's making significant use of the numpy library for calculations, which can make it a little less intuitive to understand than pure Python might be. See the comment at the bottom for a display of what that code can already do, and feel free to read through the existing code (even just looking at the class and function names, and the docstrings/comments where they exist) to get a sense of the direction(s) I'm trying to take it and what's implemented so far. As a brief summary,
As it progresses I'll try to write up some information about what I've included and how to make use of it effectively, but this is a hobby project for me so I can't make guarantees on how much time I can put into it. As I mentioned in my original comment, feel free to suggest features that would be useful/critical for your application, so I can keep them in mind and try to work them in :-) |
I love all these ideas. Someone else has also developed a shape-filling/reshaping strategies and I'll need to point them here. The CONVEX function in lab already effectively allow reshaping of lines, concentric, and perhaps other infill strategies if you use it with a bit of thought. I updated the lab notebook for CONVEX last night with an extra example of that. I think the first implementation should be simple for the designer to get to grips with and then more complex ones can be done after. The nice thing in terms of FullControl source code is that these will likely be functions and therefore each to just stick into fullcontrol lab without many of the challenges that existed for other major additions to fullcontrol capabilities by ES-Alexander and me. And they can be thrown into lab even if they're not easy to use... more-advanced designers can be told to use at their own risk and it won't affect the 'normal' user until we push it in their face. In terms of Excel and python, I don't think this is worth pursuing in Excel. The effort required and the very likely limitations/compromises that will be required were exactly why the python version was created. If you really want to use Excel, you could do some good stuff in python and then export the points in a csv format that can be easily copy and pasted into Excel. But in that case, I would strongly push you towards the python version if you need automatically generated infill. The Excel version of FullControl is more appropriate for designed-infill where you know exactly where it needs to go because the outline is either simple or mathematically defined. But even then, I would personally put the effort in to switching to python since your really at the limits of what the Excel version was ever intended to do. |
I take it you're referring to @scamiv from #59? FYI I've updated my gist to include |
Actually, it was someone emailing using a turtle graphics (at least partially).
This is amazing stuff. I can see how well it fits into FullControl but also see it as quite a fundamentally different design approach to the current focus on directly designing lines. This really is designing areas. And obviously it's a tiny jump to design volumes, which naturally 'slice' into areas. I need to think more. But one thought is that this kind of design method could be presented as a clearly separate way to use FullControl. The user knowingly chooses to design lines are areas. And of course areas naturally translated into lines (points) once you do the infill stuff. One thing I wonder is how quickly will complexity escalate? E.g. If we solve the concavity challenges for the square wave infill strategy, does that instantly translate to other filling patterns? Or other filling patterns made of straight lines? Etc. I can see a risk of that not being true and then, does this become impractically complicated? I mean, slicers only offer a few infill patterns. If your method was easy to translate to other patterns, it would be a really quick and easy win for us to say "we can take any pattern your design and use it as infill for any outline you design" I hope this isn't sounding negative! It's really amazing stuff. Big jumps in capability or workflows are always going to bring a healthy dose of excited apprehension! I'll be thinking about this! It may compliment ongoing FullControl developments towards using AI natural language capabilities to design models... since primitive geometry is easy for a human to describe and LLM to put into code. |
There's a pretty extensive comment of progression ideas under the gist - concavity (and holes) seem quite readily solvable by just treating the "outside" parts as travel moves (which I think is unavoidable for a general solution that makes use of area-based "cutting"). I've been very intentional to avoid anything that's reliant on specific path geometry, so any path that's a list of points should be cuttable (as long as long segments get sufficiently sub-sampled - see the That said, I view the cutting side of things as something like a "necessary evil" option (because it's kind of messy / less "nice", but is undeniably useful for some applications). Like in your initial comments, I'm also (/more) interested in being able to either warp a continuous path into an area, or generate one to fill an area, which I'm currently planning to approach as an interpolation problem, as per the second last point in that ideas list. I'm excited for the potential there, because once the base interpolation grid/process is established it should be relatively straightforward to add some lateral deviation to the fill lines (e.g. to turn straight into sinusoidal, for example). I started some work on this but haven't had the time to get it to a testable state yet, so haven't added it to the gist. I'm quite busy with work and life at the moment, but keen to get back to this when I can :-) |
Right perfect, we are thinking identically 🙏 Let's get this polished to a minimal, but very valuable version, where 'any infill path can be cut by any outline path' , then do the shape fitting one (which I think may be actually simpler if we put some limitations on what kinds shapes and paths are allowed based on our shape fitting algorithms). How about supporting the outline being defined by FC points and then converted to your polygon area? The area primitives you demo are interesting, but kind of separate to space filling concepts in my mind. We can automatically segment any lined longer than min_size to help the user. For conformal shape fitting, I have done quite a bit of stuff on that before. I think the simplest implementation is radial expansion/contraction. For solid infills, it will be important to also adjust extrusion width proportionally if the user has designed a solid infill pattern. Not particularly difficult in FullControl and a get distinction over slicer capabilities. For sparse infills, it won't matter so much, although infill density will be constant if we vary extrusion width, which is nice. And no worries with being busy. Sorry for being slow slow to reply to many of your posts! |
P.s. For the basic proof of concept, I think travel over concave sections is completely fine. I have previously written algorithms that automatically identified the nearest next point which naturally meant different sections of infill were printed in a grouped manner even if the overall 'pattern' was a large square wave. But(!) that involves a reasonable amount of thought and effect and isn't even getting close to slicers' capabilities. So I think a deliberately simple method is clear to show people it's possible and let them put more effort in as required. If we go more down the slicer-functionality route in the future, we can add those capabilities at that time |
@ES-Alexander, do you have an interest in academic journal publication? I'm planning a paper on multiaxis toolpath generation. You certainly have the skills to improve such a paper. All the effort would end up in FullControl. I don't think there's a messaging option in github hence this message being slightly strangely posted here. Perhaps email a.gleadall@lboro.ac.uk if you would potentially be able to support the work. Then I can explain what I'd be looking for from you (not too much effort). I'm not checking emails there frequently atm (on holiday for a week), so no rush |
What are you trying to do?
I'm trying to use the normal version of FullControl to design specific shapes and their infills.
What have you done so far?
I know how to design infills, but I don't know how to create an infill in which the outline isn't square.
What do you still need to do?
I need explanation on how to implement the infill created in a shape (any kind).
What is your question
![Capture d’écran 2024-02-22 à 11 04 19](https://private-user-images.githubusercontent.com/100682983/307067191-0d3c94be-0c92-4e31-98ad-3db7690b85c4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAzNjI2NjYsIm5iZiI6MTcyMDM2MjM2NiwicGF0aCI6Ii8xMDA2ODI5ODMvMzA3MDY3MTkxLTBkM2M5NGJlLTBjOTItNGUzMS05OGFkLTNkYjc2OTBiODVjNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcwN1QxNDI2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNDFmMzY2ODUxYWU5ZDNlZmE3NWIyMjI2N2JmZTU2ZjhkYmEyYTQ3MWQwMzQxMTg4NzJlZjhjMWEwZGY3NjAxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.ibfkS4ov7Wvngl-7zOn0lyQOijNmcLBy5jrxRvTnJvU)
![IMG_3853](https://private-user-images.githubusercontent.com/100682983/307067483-e36cf312-cfd5-4794-8c05-1ce4997dc0a1.JPG?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAzNjI2NjYsIm5iZiI6MTcyMDM2MjM2NiwicGF0aCI6Ii8xMDA2ODI5ODMvMzA3MDY3NDgzLWUzNmNmMzEyLWNmZDUtNDc5NC04YzA1LTFjZTQ5OTdkYzBhMS5KUEc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcwN1QxNDI2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jMWI4MDc1NGU3YWMyYzRlZTVmYmVkMTliMDQ1OGE3NDc5OWFkNzU2MTRhYjFlZTI5YjIxNWMwNTlhMDVmMmJkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.veaJsN0L-JmdLyA5Sjsb13I6kXYts8JWmlJm0F9O9g4)
How to create a special infill for a given shape? (exemple of a circle or other)
The text was updated successfully, but these errors were encountered: