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!)
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.
- Complete transition to new validation infrastructure (#1326, #1328, #1330)
- Continue cleaning up partial object API (#1331, #1334, #1337, #1338, #1339, #1340, #1343)
- Remove use of old validation infrastructure (#1329)
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#1321)
- Make some minor code cleanups (#1322, #1332, #1336)
- Fix some release automation issues (#1324, #1325, #1333, #1335; thank you, @kopackiw!)
- Add Windows support to
export-validator
(#1342; thank you, @MartinKavik!)
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)
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.
- 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)
- Simplify interaction with
Gui
(#1301)
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#1290, #1291, #1292, #1293, #1314, #1315, #1316, #1318, #1319)
- Upgrade to Rust 1.65.0 (#1306)
- Make some clean-ups in internal
fj
code (#1311)
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!)
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.
- Clean up API (#1269)
- Add new validation infrastructure (#1279, #1282, #1283, #1284, #1285)
- Simplify handling of
MaybePartial
(#1287)
- Replace
Point::distance
withdistance_to
(#1281)
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1258)
- Clean up CI build (#1259, #1260)
- Update dependencies (#1261, #1262, #1263, #1264, #1265, #1267)
- Lower limits requested of the graphics backend (#1273)
- Make sure
fj
'sbuild.rs
doesn't run too often (#1277)
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!)
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.
- Rename
Watcher::receive
; improve its error handling (#1234)
- 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)
- Clean up API (#1232)
Improvements that are relevant to developers working on Fornjot itself.
- Compile Fornjot to WebAssembly (#1221)
- Update release procedure (#1225)
- Run export validation on macOS (#1226)
- Update dependencies (#1227, #1228, #1229)
- Clean up some code (#1241, #1251)
- Update
README.md
(#1250)
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)
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.
- 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)
- Fix
Triangle::winding
(#1217)
- Remove redundant argument from
Shape::compute_brep
(#1201)
- Remove dependency on winit (#1210)
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1195, #1208)
- Update dependencies (#1196, #1197)
- Add Nix build and dev-shell support via Nix flakes (#1199, #1203; thank you, @Philipp-M!)
- Clean up egui-related code (#1211)
Improvements to Fornjot and its documentation that are visible to end users.
None this week. Still busy improving the kernel!
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.
- Make minor cleanups in sweep code (#1167)
- Fix various instances of duplicate objects being created (#1168, #1170, #1172, #1174)
- Expand and improve partial object API (#1169, #1171)
- Improve
Debug
implementation ofObjectId
(#1173) - Simplify
HalfEdge
andVertex
(#1175, #1178) - Expand scope of centralized object storage (#1176, #1179, #1180)
- Clean up handling of vertices in normalized order (#1181)
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1165, #1177)
- Update dependencies (#1166, #1182, #1183, #1184, #1185, #1186, #1187, #1188, #1189, #1192)
Improvements to Fornjot and its documentation that are visible to end-users.
None this week. Busy improving the kernel!
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Improve some panic messages (#1139, #1149)
- Improve partial object API (#1140, #1144, #1148, #1150)
- Fix some code that creates duplicate global curves (#1145, #1151, #1152)
- Remove redundant geometry from
GlobalCurve
(#1146, #1153) - Make
GlobalEdge
undirected (#1155) - Validate winding of interior cycles of
Face
(#1158) - Add
HorizontalRayToTheRight::direction
(#1159) - Integrate
Surface
into centralized object storage (#1163)
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1138)
- Expand release automation (#1141)
- Update dependencies (#1142)
- Update screenshot of test model (#1156)
Improvements to Fornjot and its documentation that are visible to end-users.
None this week. Busy improving the kernel!
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Implement centralized object storage (#1108, #1116, #1121)
- Prepare for removing geometry from
GlobalCurve
(#1111, #1114) - Start converting builder API into partial object API (#1113, #1117, #1118, #1119, #1120, #1123, #1124, #1126, #1128, #1130, #1131, #1133, #1134, #1135)
- Simplify
Triangulate
trait (#1122) - Clean up
Face
constructor (#1125) - Remove
HalfEdge::from_curve_and_vertices
(#1127)
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#1101, #1103, #1104, #1105, #1106, #1107, #1109)
- Remove unused dependencies (#1110)
- Expand release automation (#1115)
- Upgrade to Rust 1.64.0 (#1132)
- Update list of sponsors in README (#1136)
Improvements to Fornjot and its documentation that are visible to end-users.
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Improve validation of
HalfEdge
andVertex
(#1075) - Expand builder API (#1076, #1083)
- Expand sweep test suite (#1077)
- Perform various cleanups (#1080, #1084)
- Replace
CurveKind
withSurfacePath
/GlobalPath
(#1081) - Make path approximation deterministic (#1089, #1090, #1094)
- Future-proof curve approximation code (#1082, #1091, #1092, #1096)
- Un-derive
Copy
from various object types (#1097)
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#1071, #1072, #1074)
- Update release procedure (#1073)
- Expand release automation (#1078)
- Update list of sponsors in README (#1098)
Improvements to Fornjot and its documentation that are visible to end-users.
None this week; busy improving the kernel!
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Improve sweep algorithm (#1038, #1054, #1061, #1063, #1068)
- Add
SurfaceVertex
(#1048) - Produce better approximations, validate their correctness (#1049, #1053, #1056, #1058)
- Make triangulation more flexible (#1050)
- Add
Faces
(#1051) - Simplify
Edge
; perform cleanups this enables (#1055, #1057, #1059, #1062) - Rename
Edge
toHalfEdge
(#1064) - Define face orientation by the winding of its exterior cycle (#1066)
- Add API for finding faces (#1067)
- Add
Vector<2>::cross
(#1065)
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1037)
- Update dependencies (#1039, #1040, #1041, #1042, #1043, #1044, #1045, #1047)
- Expand release automation (#1046)
Improvements to Fornjot and its documentation that are visible to end-users.
- Fix crash on some graphics hardware (#1035)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Clean up approximation code (#1011, #1012, #1013, #1028)
- Clean up and expand
algorithms::reverse
(#1017) - Fix edge cases in object equality comparisons (#1018, #1022)
- Improve and expand object validation (#1023, #1024, #1030, #1031)
- Make small improvements in kernel (#1025)
- Clean up sweep algorithm (#1026, #1033)
- Add some validation code to
PolyChain
(#1027) - Derive
Default
for all math types (#1029) - Add
Line::from_points_with_line_coords
(#1032)
Improvements that are relevant to developers working on Fornjot itself.
- Update release procedure (#1008, #1009)
- Update dependencies (#1010)
- Expand release automation (#1016)
Improvements to Fornjot and its documentation that are visible to end-users.
- Update usage documentation in README (#994)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Improve comments and documentation (#988)
- Expand intersection tests (#977, #978)
- Extract
Shell
fromSolid
(#983) - Clean up sweep API (#984, #989, #991)
- Add builder API for
Sketch
(#992) - Add
GlobalEdge
(#998, #999) - Make some minor cleanups (#1000, #1001, #1005)
- Clean up
approx
module (#1003, #1006)
- Make minor API additions (#1004)
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#964, #965, #966, #968, #969, #970, #974)
- Update release procedure (#972)
- Upgrade to Rust 1.63.0 (#973)
- Expand release automation (#981, #982)
- Add usage documentation to
CONTRIBUTING.md
(#995)
Improvements to Fornjot and its documentation that are visible to end-users.
- Display the last few status updates (#919, #945, #952; thank you, @devanlooches!)
- Add table of contents to README (#942)
- Display model compile times in status updates (#960; thank you, @connor-lennox!)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Add
Surface
toCycle
(#939) - Clean up and expand intersection testing code (#940, #941, #946, #947, #948, #949, #950, #951)
Improvements that are relevant to developers working on Fornjot itself.
- Switch to model-driven host API (#885, #934; thank you, @Michael-F-Bryan!)
- Update list of sponsors in README (#921, #961)
- Update dependencies (#922, #923, #924, #925, #926, #928, #929, #930, #931, #933, #953, #954, #956, #957, #958, #959)
- Update release procedure (#932)
Improvements to Fornjot and its documentation that are visible to end-users.
- Prevent crashes due to unavailable features in graphics backend (#902, #909, #914; special thanks go to first-time contributor @hekno25!)
- Add UI element that display current model status (#911; special thanks go to first-time contributor @devanlooches!)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Clean up handling of curves (#900, #901, #904)
- Clean up intersection code (#905, #906)
- Implement face/face intersection (#915)
- Make ray casting code public, clean it up (#918)
- Validate
Line
andCircle
on construction (#910, #913) - Extend and clean up
AbsDiffEq
implementations (#912)
Improvements that are relevant to developers working on Fornjot itself.
- Update dependencies (#892, #894, #895, #896, #899)
- Update release procedure (#898)
- Speed up release automation (#903)
- Update description of Cargo packages (#916)
- Update list of sponsors in README (#921)
Improvements to Fornjot and its documentation that are visible to end-users.
- Add
--version
argument (#868; thank you, @Michael-F-Bryan!) - Improve README (#877, #882)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Re-use
fj_math::Triangle
infj_interop::mesh
(#886)
- Improve wording in doc comment (#880)
- Clean up API of object types (#881, #891)
- Implement curve/edge intersection (#884, #888, #889)
- Clean up surface/surface intersection (#890)
- Make
Triangle::from_points
fallible; addLine::is_coincident_with
(#887)
Improvements that are relevant to developers working on Fornjot itself.
Improvements to Fornjot and its documentation that are visible to end-users.
- Determine model's
target/
directory from Cargo metadata (#828, #841, #853; special thanks go to first-time contributor @Michael-F-Bryan!) - Derive
PartialEq
for types infj
crate (#832; thank you, @Michael-F-Bryan!) - Type-check model functions (#867; thank you, @Michael-F-Bryan!)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Convert
Color
into a struct (#862)
- Clean up and expand APIs of
Edge
,Face
, andCycle
(#854, #855, #863, #865) - Return references to objects, where appropriate (#858)
- Make names of
Local
methods more explicit (#860) - Revamp builder API (#864, #866)
Improvements that are relevant to developers working on Fornjot itself.
- Fix release automation issues (#814, #843; thank you, @hendrikmaus!)
- Update dependencies (#836, #840)
- Update release procedure (#838, #839, #857)
- Add unit test for triangulation bug (#842; special thanks go to first-time contributor @willhansen!)
- Upgrade to Rust 1.62.1 (#852)
- Clean up
fj-kernel
'siter
module (#859) - Expand implementation note (#861)
Improvements to Fornjot and its documentation that are visible to end-users.
- Make moving the model work, even if mouse is not hovering over it (#806)
- Make group and transform operations work on all shapes (#825)
Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.
- Implement curve/face intersection algorithm (#802, #812, #813, #817, #826)
- Return local curves from surface/surface intersection (#811)
- Derive
Copy
forVerticesOfEdge
(#818) - Add
Sketch
/Solid
to distinguish between 2D/3D shapes (#819, #823, #827) - Provide more complete and convenient transform API (#822)
- Fix edge case in
Vector::scalar_projection_onto
(#810)
Improvements that are relevant to developers working on Fornjot itself.
The following changelog is a summary of user-visible changes made since the previous release. User-visible changes are changes visible to end users (who define CAD models using fj
and fj-app
), and changes to the API of Fornjot ecosystem crates.
For a full summary of all pull requests, feel free to check out the Weekly Dev Logs that cover the time period since the previous release:
The API that Fornjot models are written against.
- Support serialization using Serde (#610, #682, #685, #688)
- Add
Angle
(#619, #621, #641) - Add
#[fj::model]
macro (#643, #652, #655, #659) - Fix memory leak in
Sketch
(#646)
The Fornjot application.
- Fix usability of
--parameters
(#692)
In addition to the changes listed here, many of the changes to other crates, listed below, have a direct impact on the user experience of fj-app
.
Library for exporting Fornjot models to external file formats.
Library for loading and running Fornjot models in a host application.
No changes in this release.
Library that defines types to enable interoperation between Fornjot components.
No changes in this release.
Fornjot's CAD kernel library.
- Expand and update constructors of
Curve
/Surface
(#542, #611, #690, #721) - Implement some intersection tests (#543, #560, #562)
- Replace
Line
withfj_math::Line
(#558) - Update
Surface
API for point/vector conversion (#561) - Update conversion API of geometry types (#564)
- Store local representation of vertices (#574, #625, #627, #751, #752)
- Generate approximations in native coordinates (#575, #762)
- Replace
Circle
withfj_math::Circle
(#578) - Store local representation of curves (#579, #591, #750)
- Make
Face
easier to use, less redundant (#593, #597) - Fix face orientation (#628)
- Require surface coordinates when building faces or cycles (#665)
- Add custom data type to represent edge vertices (#667)
- Remove
Edge::new
(#693) - Move all objects to new
objects
module (#694) - Implement new validation infrastructure (#705, #706, #707, #709, #710, #718)
- Remove
Shape
API (#715, #716, #730, #732, #733, #735, #736, #737, #738, #743, #747) - Add
Local
to manage local forms; use it to replacegeometry::Point
(#761)
Library that provides math primitives for the Fornjot ecosystem.
- Rename
Transform::project_to_slice
toproject_to_array
(#545) - Add support for
Point
/Vector
subtraction (#547) - Add
Vector::scalar_projection_onto
(#553) - Add
Line
(#557, #563) - Improve
Aabb
API (#559) - Add
Circle
(#577) - Add
Triangle::normal
(#600)
Library that defines CAD operations, serving as a link between fj
and fj-kernel
.
- Make 2D difference operation more flexible (#598)
- Fix bounding volume of swept shapes (#623)
- Improve error handling (#629, #632)
- Reduce reliance on
Shape
(#734)
Procedural macros for the fj
crate.
Initial release.
Library that provides a model viewer.
- Fix field of view (#614)
- Improve error handling (#633, #635)
- Extract
fj-window
(#640) - Fix camera rotation (#644, #669)
- Fix performance issue related to mouse movement (#758)
- Simplify zoom, fix it for larger models (#764, #781)
Library to embed fj-viewer
in a winit-based window.
Initial release.
The following changelog is a summary of user-visible changes, meaning changes visible to end users (who define CAD models using fj
and fj-app
), or changes visible to users of the API.
For a full summary of all pull requests, feel free to check out all Weekly Dev Logs that cover the time period since the previous release:
- 2022-W04
- 2022-W05
- 2022-W06
- 2022-W07
- 2022-W08
- 2022-W09
- 2022-W10
- 2022-W11
- 2022-W12
- 2022-W13
- 2022-W14
- 2022-W15
- 2022-W16/W17
The API that Fornjot models are written against.
- Improve documentation (#106, #411)
- Remove
fj::Difference
(#265) - Add support for coloring models (#343)
- Rename
fj::Union
tofj::Group
(#366) - Add convenient syntax for
fj::Difference2d
(#372) - Clean up API (#412)
- Support sweeping in arbitrary directions (#505)
The main Fornjot application.
- Fix model loading error, if name contains '-' (#107)
- Fix circle approximation being able to freeze application (#111)
- Prevent potential floating-point accuracy issues in triangulation (#133)
- Add missing space to error message (#144)
- Enable console output (#148, #297)
- Fix various triangulation bugs (#158, #448, #453)
- Display size of model bounding box (#217)
- Ensure that vertices are unique (#278)
- Fix sweeping of non-symmetrical sketches (#284)
- Fix bugs that affect shading faces and exporting 3MF files (#289, #484)
- Fix crash on some graphics hardware (#323)
- Fix warning about glyph cache size (#337)
- Add support for specifying tolerance as command-line argument (#352, #359)
- Rename application to
fj-app
(#356) - Add configuration file (#362)
- Enable
fj-app
to run outside of Fornjot repository (#364) - Fix tolerance value not being updated on model reload (#379)
- Fix race condition when loading model initially (#380)
- Fix warning about buffer having a pending mapping (#397)
- Fix crash with AMD GPUs (#437)
- Make rotation work, even when not clicking on model (#503)
Library for exporting Fornjot models to external file formats.
Initial release.
Library for hosting Fornjot models.
Initial release.
Library that defines types to allow interoperation between other Fornjot components.
Initial release.
Fornjot's CAD kernel library.
Initial release.
Library that provides math primitives for the Fornjot ecosystem.
Initial release.
Library that defines CAD operations, as a link between fj
and fj-kernel
.
Initial release.
Library that provides a model viewer.
Initial release.
- Replace
fj::Rectangle
with the more powerfulfj::Sketch
. - Add
fj::Union
to express unions. This is subject to limitations (see API Reference). - Add
fj::Transform
to support transforming shapes. - Add traits to provide simplified syntax for various operations. These traits can be accessed through a
use fj::prelude::*;
. - Rename
fj::Difference
tofj::Difference2d
to make room for a 3D difference operation. - Add
fj::Difference
to express difference operation in 3D. This is not supported by the host application yet. - Improve documentation (#86)
-
Fix shapes that are very near or very far not being shown on camera.
-
Add support for Windows and macOS (#22, #23, #28; special thanks to Fornjot's first contributor, @Bandsberg!).
-
Add support for concave 2D sketches.
-
Add debug info visualization mechanism to help debug internal algorithms. So far, it just outputs lines to visualize the triangulation algorithm.
-
Fix bug in 2D difference operation, that would create an internal pseudo-face within the model, if the 2D difference was swept into a 3D model.
-
Add blacklist to avoid multiple rebuilds on model changes (#39; special thanks to first-time contributor, @mxdamien)
-
Fix triangulation bugs that would cause errors in some models (#61, #74, #81)
-
Add star model to repository (#50)
-
Lots of internal clean-ups, to enable more features in the future.
- Tweak zooming behavior: Zoom speed is dependent on the frequency of input signals (either the movement of the mouse wheel, or of the fingers on the track pad). Speed zooming in is limited depending on the distance to the model.
- Improve rotation behavior: Always rotate the model around the point on the model that the mouse cursor points at, not the origin of the model coordinate system. This allows for much more precise control when inspecting details of the model.
- Improve movement behavior: When moving the model, keep the same point on the model under the cursor for the whole movement. This doesn't work great yet (see #18).
- Rename
--arguments
argument of host application to--parameters
.
- Replace
fj::Square
withfj::Rectangle
.
- Reload current model, whenever its source code is modified.
- Function representation (F-rep) has been phased out in favor of a more traditional approach inspired by boundary representation (B-rep). This has resulted in much higher-quality triangulation of the geometry in significantly less time (spacer previously took around 1 second, now there is no perceivable delay).
- Most of the system is no longer a library; it now consists of a host application, and a very light library used to define geometry. Models are compiled as dynamic libraries and loaded at runtime. This has resulted in much shorter compile times when changing a model (previously many seconds, now way below 0.5s for the spacer model).
- Due to a rewrite of all CAD-specific code, the way models are defined is completely different.
- Add support for exporting models to the 3MF format. This makes it possible to 3D-print Fornjot models.
- Also return surface normal (in addition to distance from surface) when sampling geometry.
- Greatly improve accuracy of the triangle mesh that is generated from models. More room for improvement remains, as sharp edges aren't reproduced faithfully.
- Link
README.md
inCargo.toml
Initial release.