注意此页面尚未翻译,因此使用英文版本。有兴趣帮忙吗? 贡献
After more than 20 years of development, the 1.0 release marks a major milestone for the FreeCAD project.
With a strong focus on stability, usability, and long-requested core features, FreeCAD is now more powerful, flexible, extensible, and robust than ever before.
Robust Solid Modeling
注意FreeCAD now tracks how individual sub-elements (faces, edges, vertices) evolve through modeling operations by building a history map that records whether elements were modified, generated, or deleted. This allows stable references to be maintained even as the underlying topology changes.
- The mitigation algorithm to the long-standing topological naming problem has finally been merged
- Models now better survive edits without randomly breaking dependencies
- Parametric workflows and complex design iterations are far more predictable, resilient, and effective
void ShapeHistory::reset(
BRepBuilderAPI_MakeShape& mkShape,
TopAbs_ShapeEnum type,
const TopoDS_Shape& newS,
const TopoDS_Shape& oldS
)
{
shapeMap.clear();
this->type = type;
TopTools_IndexedMapOfShape newM, oldM;
TopExp::MapShapes(newS, type, newM); // map with all old objects
TopExp::MapShapes(oldS, type, oldM); // map with all new objects
// Look all objects in old shape and find modified object in new shape
for (int i = 1; i <= oldM.Extent(); i++) {
bool found = false;
TopTools_ListIteratorOfListOfShape it;
// Find all new objects modified from old object (e.g. resized face)
for (it.Initialize(mkShape.Modified(oldM(i))); it.More(); it.Next()) {
found = true;
for (int j = 1; j <= newM.Extent();
j++) { // one old object might create several new ones!
if (newM(j).IsPartner(it.Value())) {
shapeMap[i - 1].push_back(j - 1);
break;
// Find all new objects generated from old object (e.g. face generated from edge)
for (it.Initialize(mkShape.Generated(oldM(i))); it.More(); it.Next()) {
found = true;
for (int j = 1; j <= newM.Extent(); j++) {
if (newM(j).IsPartner(it.Value())) {
shapeMap[i - 1].push_back(j - 1);
break;
// Find all old objects that don't exist anymore (e.g. face completely cut away)
if (!found) {
if (mkShape.IsDeleted(oldM(i))) {
shapeMap[i - 1] = std::vector<int>();Integrated Assembly
- A brand-new built-in Assembly workbench powered by a modern solver
- Define constraints between parts with improved reliability
- Designed for real-world multi-part engineering workflows
Polished Interface
- New light and dark themes for better comfort
- Smarter selection tools (filter vertices, edges, faces)
- Rotation center indicator for precise navigation
- Reworked panels, tabs, and preferences dialog
- Faster, cleaner start page
Better Tools for Everyday
- Universal measurement tools available across workbenches
- Improved Sketcher and Part Design workflows
- More consistent behavior across tools
BIM Upgrade
- A unified Building Information Modeling workbench with Native IFC support
- Better project structure, data handling, and building workflows
- Improved interoperability with other open BIM tools
Core Engine and Scripting Power
- Expressions now support the vector API
- New App::VarSet for managing design variations
- Expanded and cleaner Python API
- Improved Python editor and scripting workflow
Materials and Simulation Improvements
- A new materials system for visual and physical properties
- Many enhancements across FEM and simulation tools
Identity Evolution
And so much more, by hundreds of contributors around the world!
What to be part of this adventure too? Join the community and support its development.
As always, have fun and keep FreeCADing!
