Releases: hannobraun/fornjot
v0.29.0
This release announcement is also available on the Fornjot website
Last week was boring and quiet, both of which were good things. That breakthrough I keep talking about, in solving the problems with the object construction code (#1249), that definitely turned out to be real, and I have no doubt that the new approach is the solution I've been looking for. I've been working on applying the new approach in more places, consolidating the gains made.
I'm slowly starting to shift my focus to #1162. Addressing this issue requires new validation code, which requires new unit tests, which need some non-trivial object construction done. This is a good proving ground for the new object construction approach. At the same time, it's blocking further progress on the union operation (#42), which I'd like to get back to as soon as possible.
Of course, nothing is ever perfect, and I've already started thinking about the next round of improvements. But I'll reign myself in. I might start looking into this on the side though, if I'm in the mood for some extra work.
Meanwhile, @kazatsuyu has fixed an annoying bug that happened on Windows. I'm only using Linux myself, so help in tracking down those platform-specific bugs is especially welcome!
Please note that this is going to be the last release of the year, as I'm on vacation next week. Regular weekly releases will resume in 2023.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Fix crash when minimizing window on Windows (#1447; thank you, @kazatsuyu!)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Continue cleanup of object construction code (#1445, #1446, #1448, #1449, #1450, #1451, #1452, #1453, #1456, #1457)
- Fix doc comment (#1458)
fj-math
- Return line coordinates from
Line::from_points
(#1455)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.28.0
This release announcement is also available on the Fornjot website
Last week, I wrote that I might be in the middle of a breakthrough, in regards to cleaning up the object construction code (#1249). Work is still ongoing, but so far there's every indication that my optimism was warranted, and I have indeed found the solution to the biggest problem that I've been battling with for the last months!
I still need to wrap this up, but I expect that won't take much longer now. I've posted an update in the issue that summarizes the current state and what's next.
Meanwhile, @danieleades has improved the codebase by fixing some non-default Clippy lints, and @zthompson47 addressed a potentially confusing error condition, by making sure there's a proper error message, if the RUST_LOG
environment variable can't be parsed.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Fail, if RUST_LOG is invalid (#1435; thank you, @zthompson47!)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Improve behavior around validation failures (#1417, #1418, #1436)
- Continue cleanup of object construction code (#1419, #1423, #1428, #1429, #1430, #1432, #1433)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.27.0
This release announcement is also available on the Fornjot website
The main thrust of last week's development was the continuing cleanup of the object construction code (#1249). This remains a high priority, as it's blocking work on boolean operations (#42, #43, #44), which are the next step on the way to making Fornjot actually useful.
I might actually be in the middle of a breakthrough. I've had an idea last week (described here), which could solve most of the issues with the object construction code. I've been prototyping this idea in a local branch, and so far haven't hit any blockers. It's too early to tell, really, but I'm optimistic!
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Display more errors in the GUI and display more information about them (#1405)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Move validation to separate service (#1403, #1404)
- Continue cleanup of object construction code (#1406, #1407, #1408, #1409)
- Rename
GlobalVertex::from_position
tonew
(#1410) - Touch up documentation of objects (#1411)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.26.0
This release announcement is also available on the Fornjot website
A week ago, I reported how I got inspired by a talk I've seen, and my time since then was dominated by experimentation, with some promising first results!
My goal is to make the Fornjot kernel interactive. Right now, you more or less launch it with some input, then get back the results. I want to be able to inspect it while it is running, to understand exactly what is going on at every point. The immediate benefit should be that debugging the kernel becomes easier. If it works out like that, this could help accelerate development in the future.
I've been prototyping an architecture that enables this interactivity. The results are promising, in that it's possible now to inspect exactly what a core part of the kernel does over time, without that complicating any other parts of the code. However, there is no tooling that makes use of this new capability yet, so it's hard to judge how useful it is going to be in practice.
I want to wrap up this initial experimentation quickly, then continue this work on the side. While I believe that this is going to be very beneficial for Fornjot's further development, there is so much more important work to do, and I can't afford to have one thing take over my time completely.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Remove model generation feature to fix
cargo install
error (#1373) - Enable model version check on Windows (#1374)
- Change messages to say "evaluating" instead of "compiling" (#1396)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Build service abstraction around
Objects
(#1377, #1384, #1390, #1392, #1393) - Fix
Store
iteration bug (#1383) - Simplify old builder structs (#1388)
- Add
Object
enum (#1391)
fj-operations
- Take
&mut Objects
inShape::compute_brep
(#1389) - Simplify return value of
Shape::compute_brep
(#1394)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.25.0
This release announcement is also available on the Fornjot website
It's been a good week for Fornjot! I made progress with the cleanup of the object construction code (#1249), fixed bugs, and made some cosmetic improvements. See below for more details!
But honestly, the most significant change this weeks wasn't anything that happened with the Fornjot code. It was a change in my thinking, after watching a talk that I was must have been primed for, having thought about these topics for the last 10 years.
I'm not going to say any more than that here, as I'm still in the middle of sorting out what all of it means for Fornjot. If you're interested in hearing more, why not join the Fornjot Matrix channel? Not only have we been talking about the topic there, it's also a good place for day-to-day updates on Fornjot's development.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Fix potential soundness hole in version comparison (#1358)
- Fix error when
cargo install
ingfj-app
fromcrates.io
(#1364, #1365) - Soften shading (#1366)
- Improve output of
--version
(#1367) - Fix triangulation of sharp, concave faces (#1369)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Add infrastructure for abstracting over access to referenced objects (#1359)
- Continue cleanup of partial object API (#1360, #1361, #1362)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.24.0
This release announcement is also available on the Fornjot website
Had I written this paragraph a few days ago, I'd been all apologetic, explaining how I really meant to work on the bug that's currently blocking further work on the union operation (#1162), but how I let myself be distracted by cleanups (#1249). Now I realize, I've been thinking about this all wrong. Before I explain, let's recap.
Arguably, the core function of Fornjot's CAD kernel is to construct geometry in a robust and convenient way. Over recent months, I've managed to significantly increase the robustness, at the cost of convenience. The APIs we have aren't well-suited to construct geometry using the new, more robust techniques. As a result, doing so is a big pain. All code that successfully does, is messy and way more complicated than it should be.
I figured I can clean this up as I go, but this problem keeps getting in the way. Constructing geometry is a core function of the kernel, after all. I've realized that this isn't a distraction from what really matters. Right now, it is what really matters. This needs to be solved, or it will keep hanging over my head, no matter what I work on.
Starting immediately, I'm switching my focus to addressing this. I have a bunch of ideas that I can try out, and I keep getting new ones as I work on this. The goal is to create an API that supports creating geometry robustly and conveniently, whether in production code, or to set up a test scenario.
Meanwhile, @kopackiw fixed some issues in the release automation and simplified how models are passed to the Fornjot application. @MartinKavik added a feature that allows users to generate a new model using the Fornjot app, and added Windows support to an internal developer tool.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Don't require
--model
to pass a model (#1323; thank you, @kopackiw!) - Add command to create a new model (#1344; thank you, @MartinKavik!)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Complete transition to new validation infrastructure (#1326, #1328, #1330)
- Continue cleaning up partial object API (#1331, #1334, #1337, #1338, #1339, #1340, #1343)
fj-operations
- Remove use of old validation infrastructure (#1329)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.23.0
This release announcement is also available on the Fornjot website
I had hoped to get back on track with working on the union operation (#42), or rather the bug that is currently blocking that (#1162), but instead I got sucked deeper into cleanups. I was running into some trouble with the partial object API, which had turned into a bit of a mess in the wake of the recent robustness improvements (#1249), so I went off and made some improvements there.
It's probably for the better. Piling on more hacks to get the union operation done a bit quicker wouldn't make anything better. I'll still do my best to not let myself get distracted too much. Cleaning up stuff that stands in the way of what I'm working on is productive. Cleaning up stuff just because it could use some cleaning up... less so.
Meanwhile, @zthompson47 has contributed an improvement to the compatibility check that happens when loading models.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Fix panic when quitting application (#1296)
- Warn on full version mismatch of host and model (#1300; thank you, @zthompson47!)
- Improve status messages around model loading (#1302)
- Fix panic on Windows when loading model version (#1304, #1308)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Clean up partial object API (#1294, #1305, #1309, #1310, #1312)
- Move most validation code to new validation infrastructure (#1295, #1299)
- Simplify
Cycle
andFace
(#1297) - Improve
Debug
implementation ofHandle
(#1298) - Simplify
GlobalPath
transforms (#1313)
fj-viewer
- Simplify interaction with
Gui
(#1301)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.22.0
This release announcement is also available on the Fornjot website
Last week saw lots of small, user-visible improvements to the app. Anti-aliasing, various fixes to the GUI, replacing weird crashes with good error messages, and maybe most significantly, the ability to load a model from within the app, instead of having to provide it as a command-line argument (contributed by @erenoku).
Meanwhile my work on advancing the core CAD features is trucking along, although at a slower pace than hoped (isn't it always 😄). As a reminder, my main priority is the implementation of the union operation (#42), which is currently blocked by a bug (#1162). I've been making some progress on improving the validation infrastructure in the kernel, which should allow me to attack the bug itself soon.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Fix UI being blurry on some systems (#1266; thank you, @erenoku!)
- Improve error message when failing to load model (#1268)
- Enable anti-aliasing (#1274)
- Fix text of status messages looking jagged (#1275)
- Fix some crashes, turn them into actionable errors (#1276)
- Add UI to load model from within app, if no model is passed (#1286, #1288; thank you, @erenoku!)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-host
- Clean up API (#1269)
fj-kernel
- Add new validation infrastructure (#1279, #1282, #1283, #1284, #1285)
- Simplify handling of
MaybePartial
(#1287)
fj-math
- Replace
Point::distance
withdistance_to
(#1281)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.21.0
This release announcement is also available on the Fornjot website
I've been continuing my new strategy of working on both the big-picture priority (the union operation, #42) and smaller tasks with more immediate pay-off, in parallel. I'm happy with the results so far!
I finished #1021 and have started to work on #1162, which is a bug that blocks further progress on the union operation. There's hope that I can fix this bug relatively quickly, but I'm going to write new validation code to do that, and that new validation code might uncover previously unknown issues. So we'll see how all that goes.
On the "small tasks" side of things, I've made some quality of life improvements in the app. Check below for details!
And in addition, @erenoku has contributed a small but important improvement: A timestamp is now shown for each status message!
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Improve error message, if model can't be loaded (#1235)
- Make sure versions are compatible before loading model (#1237)
- Always require model when starting
fj-app
(#1242) - Fix startup delay while model is compiling (#1244)
- Print timestamp with each status update (#1256; thank you, @erenoku!)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-host
- Rename
Watcher::receive
; improve its error handling (#1234)
fj-kernel
- Fix last known object duplication issues (#1233, #1238)
- Integrate all remaining objects into centralized object storage (#1246, #1247, #1248, #1252, #1255)
- Simplify use of
MaybePartial
(#1253) - Consolidate builder API for
Face
inFaceBuilder
(#1254)
fj-viewer
- Clean up API (#1232)
fj-window
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.
v0.20.0
This release announcement is also available on the Fornjot website
My main priority was and remains the implementation of the union operations, but it should have become quite obvious to anyone following these updates, that it's taking a while. Meanwhile, other parts of the project remain in a largely immature state. I have reason to believe that this isn't making a great impression on potential contributors and sponsors, and it isn't great for my morale either.
So I've made a decision: In parallel to the ongoing work on the union operation (and boolean operations in general), I'll allocate some time to work on smaller tasks that have an immediate and visible benefit. I've started this effort by picking off some issues that had been open for a while. Check out the list of changes below!
As far as the big picture goes, I've continued the effort to expand the scope of the centralized object storage (#1021) and making use of that by enhancing the existing validation code (by using object identity instead of object equality for comparisons). This is slow and tedious work, as a lot of code that constructs objects needs to be updated to meet the stricter validation requirements.
All of this leads to more robust code though, and thus fewer bugs. The specific goal I'm working toward is to fix #1162, which is currently blocking further progress on the union operation (#42).
Meanwhile, @ArshErgon improved the error message for when a model can't be found, and @Philipp-M added a Nix flake.
Sponsors
Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!
If you want Fornjot to be sustainable long-term, please consider supporting me too.
End-user improvements
Improvements to Fornjot and its documentation that are visible to end users.
- Improve error message, if model can't be found (#1154; thank you, @ArshErgon!)
- Remove old UI (#1202)
- Invert default zoom direction; add config to override that (#1204)
- Document convenient syntax for
fj
operations (#1205) - Remove the need to specify
crate-type
inCargo.toml
(#1209) - Fix some
wgpu
/egui-winit
errors and warnings (#1216)
Ecosystem improvements
Improvements to Fornjot components that are relevant to developers building on top of those. These have an indirect effect on end users, through fixed bugs and improved robustness.
fj-kernel
- Rename
Stores
toObjects
, move it toobjects
(#1198) - Provide access to default planes through
Objects
(#1200) - Fix more object duplication issues (#1206, #1207, #1215, #1218, #1220, #1222)
- Expand partial object API(#1212, #1213)
- Integrate
SurfaceVertex
into centralized object storage (#1214) - Add methods to access single
HalfEdge
vertices (#1219)
fj-math
- Fix
Triangle::winding
(#1217)
fj-operations
- Remove redundant argument from
Shape::compute_brep
(#1201)
fj-viewer
- Remove dependency on winit (#1210)
Internal Improvements
Improvements that are relevant to developers working on Fornjot itself.