The biggest accomplishment recently is reworking the Descartes system to run on Julia 1.0. I last programmed heavily on 0.5 and made sparse updates to my packages for 0.6, but never fully acclimated to the differences. Going to 1.0 was a big change and I made it more difficult by not using 0.7 to get the appropriate deprecation warnings. The new package manager is definitely confusing at first, but it is way more powerful and I am finally understanding the structure of its operation.
I recently added OpenCL support for distance field computations, which speeds things up significantly. The current implementation could use some improvements, and I am learning OpenCL as I go. My current challenge is keeping OpenCL and CPU backends in sync. There is currently a lack of tests so I will need to write some to make sure both are tested thoroughly. Simon Danisch has a Transpiler.jl package that I may investigate in the future. I opted to use OpenCL since I want cross-platform support and I think in the long run SPIRV backend will improve in LLVM so a lot of the integration CUDA/PTX has with Julia be similar for OpenCL/SPIRV. I also interviewed an HPC guy for work and he mentioned AMD is the best value right now, so SPIRV should be getting some additional interest.
There is also now a visualization routine that is nicely integrated with MeshCat.jl. This makes it really easy to pull up some code in Atom and run it and revisualize quickly. The current workflow should be somewhat useful for making solid models in a similar workflow to OpenSCAD. Once I get my 3D Printers running again I will start designing some test parts. I ostensibly want to make the proof-of-concept design using Descartes a parametric 3D printer. This may take a year to get to that point, but it should show the possibilities of turbo-charged CAD in a programming language. I have some ideas for inverting the Z axis on my RepRap Lewis design that may be worth looking at. Plus this will allow be to explore some of the robotics tools in Julia. I haven’t given it much thought, bit I want to plow the farm before I plant.
In general I am working toward four somewhat similar goals in the next months:
- OpenSCAD near-feature parity
- Forward differentiable representations
- Meshing approaches for sharp corners (e.g. Dual Contours)
- Oct-Tree sampling approaches (and interpolation of the functional representation)
I may have slipped a fifth one in there. The first is almost complete, aside from 2D geometry and a few operations. Convex hulls and Minkowski sums open issues since I can’t seem to find any prior work on accomplishing these on implicits. The last three objectives are kind of one in the same. Forward differential implicits help get to dual contours. Oct-tree sampling and interpolations help keep this fast.
The final thing that is probably most exciting is that I have found an advisor for a project to integrate FEA with Descartes. He is an expert in mesh generation and FEA so I am looking forward to working together to make a simple interface for engineering analysis. We suspect that the application of distance fields can improve some aspects of cubic and tetrahedral meshes. I have pretty much structured the prior objectives to provide the best-possible interface for achieving these goals.