Convert Figma logo to code with AI

FreeCAD logoFreeCAD

This is the official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.

24,091
4,515
24,091
3,013

Top Related Projects

OpenSCAD - The Programmers Solid 3D CAD Modeller

This is an active mirror of the KiCad development branch, which is hosted at GitLab (updated every time something is pushed). Pull requests on GitHub are not accepted or watched.

LibreCAD is a cross-platform 2D CAD program written in C++17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline primitives. The user interface is highly customizable, and has dozens of translations.

Parametric 2d/3d CAD

1,939

This is the Official source code repository of Synfig Studio animation software

Quick Overview

FreeCAD is an open-source parametric 3D modeling software. It's designed for mechanical engineering and product design but is also used in other fields like architecture. FreeCAD allows users to create complex 3D models, generate 2D drawings, and perform various engineering tasks.

Pros

  • Free and open-source, with a large community of contributors
  • Cross-platform compatibility (Windows, macOS, Linux)
  • Highly customizable and extensible through Python scripting
  • Supports a wide range of file formats for import and export

Cons

  • Steeper learning curve compared to some commercial CAD software
  • User interface can be less intuitive for beginners
  • Performance can be slower with very complex models
  • Some advanced features found in commercial CAD software may be missing or less refined

Code Examples

# Creating a simple cube
import FreeCAD as App
import Part

doc = App.newDocument()
cube = Part.makeBox(10, 10, 10)
Part.show(cube)
# Creating a cylinder and applying a boolean operation
import FreeCAD as App
import Part

doc = App.newDocument()
cylinder1 = Part.makeCylinder(5, 10)
cylinder2 = Part.makeCylinder(3, 12)
result = cylinder1.cut(cylinder2)
Part.show(result)
# Creating a sketch and extruding it
import FreeCAD as App
import Sketcher
import Part

doc = App.newDocument()
sketch = doc.addObject('Sketcher::SketchObject', 'Sketch')
sketch.addGeometry(Part.LineSegment(App.Vector(0,0,0), App.Vector(10,0,0)))
sketch.addGeometry(Part.LineSegment(App.Vector(10,0,0), App.Vector(10,10,0)))
sketch.addGeometry(Part.LineSegment(App.Vector(10,10,0), App.Vector(0,10,0)))
sketch.addGeometry(Part.LineSegment(App.Vector(0,10,0), App.Vector(0,0,0)))

extrude = doc.addObject('Part::Extrusion', 'Extrude')
extrude.Base = sketch
extrude.Dir = (0, 0, 10)
doc.recompute()

Getting Started

  1. Download and install FreeCAD from the official website: https://www.freecadweb.org/
  2. Launch FreeCAD and create a new document
  3. Choose a workbench (e.g., Part Design, Sketcher, or Draft)
  4. Start modeling by creating basic shapes or sketches
  5. Use constraints and parameters to define relationships between objects
  6. Explore different tools and features to refine your model
  7. Export your model in the desired format (e.g., STEP, STL, or DXF)

For scripting, you can access the Python console within FreeCAD or write external scripts using the FreeCAD module.

Competitor Comparisons

OpenSCAD - The Programmers Solid 3D CAD Modeller

Pros of OpenSCAD

  • Text-based parametric modeling allows for precise control and version control
  • Lightweight and runs well on less powerful hardware
  • Excellent for creating programmatic, mathematical designs

Cons of OpenSCAD

  • Steeper learning curve for users without programming experience
  • Limited GUI and interactive modeling capabilities
  • Lacks advanced features like assembly modeling and constraints

Code Comparison

OpenSCAD:

module gear(teeth = 20, radius = 5) {
    circle(r = radius);
    for (i = [0:teeth-1]) {
        rotate(i * 360 / teeth) translate([radius, 0, 0]) square([2, 1]);
    }
}
gear();

FreeCAD (Python console):

import Part
from FreeCAD import Base

def create_gear(teeth=20, radius=5):
    gear = Part.makeCircle(radius)
    for i in range(teeth):
        angle = i * 360 / teeth
        tooth = Part.makeBox(2, 1, 1).translate(Base.Vector(radius, 0, 0))
        tooth.rotate(Base.Vector(0,0,0), Base.Vector(0,0,1), angle)
        gear = gear.fuse(tooth)
    return gear

Part.show(create_gear())

This is an active mirror of the KiCad development branch, which is hosted at GitLab (updated every time something is pushed). Pull requests on GitHub are not accepted or watched.

Pros of KiCad

  • Specialized for electronic design automation (EDA) and PCB layout
  • Extensive library of electronic components and footprints
  • Active community with frequent updates and improvements

Cons of KiCad

  • Limited to electronic design, not suitable for general 3D modeling
  • Steeper learning curve for non-electronics professionals
  • Less flexibility in custom component creation compared to FreeCAD

Code Comparison

KiCad (C++):

void SCH_EDIT_FRAME::OnOpenPCBEditor( wxCommandEvent& event )
{
    wxFileName fn( Prj().GetProjectFullName() );
    fn.SetExt( KiCadPcbFileExtension );
    wxString fullPath = fn.GetFullPath();
    KIWAY_PLAYER* frame = Kiway().Player( FRAME_PCB, true );
    frame->Show( true );
    frame->Raise();
}

FreeCAD (Python):

def makeBox(length, width, height):
    box = Part.makeBox(length, width, height)
    doc = FreeCAD.activeDocument()
    obj = doc.addObject("Part::Feature", "Box")
    obj.Shape = box
    doc.recompute()
    return obj

LibreCAD is a cross-platform 2D CAD program written in C++17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline primitives. The user interface is highly customizable, and has dozens of translations.

Pros of LibreCAD

  • Lightweight and faster for 2D drafting tasks
  • Simpler interface, easier to learn for beginners
  • Better compatibility with older hardware

Cons of LibreCAD

  • Limited to 2D drafting, no 3D modeling capabilities
  • Fewer advanced features compared to FreeCAD
  • Smaller community and fewer extensions/plugins

Code Comparison

LibreCAD (C++):

void RS_ActionDrawLine::trigger() {
    RS_Line* line = new RS_Line(container, *data);
    line->setLayerToActive();
    line->setPenToActive();
    container->addEntity(line);
}

FreeCAD (Python):

def makeBox(length, width, height):
    box = Part.makeBox(length, width, height)
    doc = FreeCAD.activeDocument()
    obj = doc.addObject("Part::Feature", "Box")
    obj.Shape = box
    doc.recompute()

LibreCAD focuses on 2D drafting with a C++ codebase, while FreeCAD offers more comprehensive 3D modeling capabilities using Python. LibreCAD's code is more low-level and performance-oriented, whereas FreeCAD's Python code is more accessible and easier to extend. FreeCAD provides a more powerful and flexible platform for complex designs, but LibreCAD excels in simplicity and efficiency for 2D work.

Parametric 2d/3d CAD

Pros of SolveSpace

  • Lightweight and fast, with a smaller installation footprint
  • Simpler interface, potentially easier for beginners to learn
  • Focuses on constraint-based sketching and 3D modeling

Cons of SolveSpace

  • Less feature-rich compared to FreeCAD's extensive toolset
  • Smaller community and fewer extensions/plugins available
  • Limited support for complex assemblies and advanced engineering tasks

Code Comparison

Both projects are primarily written in C++, but their codebases differ in structure and organization.

SolveSpace:

void SolveSpaceUI::MenuFile(int id) {
    switch(id) {
        case GraphicsWindow::MNU_NEW:
            NewFile();
            break;
        case GraphicsWindow::MNU_OPEN:
            OpenFile();
            break;
        // ...
    }
}

FreeCAD:

void Gui::Command::doCommand(DoCmd_Type eType, const char* sCmd, ...) {
    va_list ap;
    va_start(ap, sCmd);
    QString str;
    str.vsprintf(sCmd, ap);
    va_end(ap);
    // ...
}

SolveSpace's codebase is more compact and focused, while FreeCAD's is more extensive and modular, reflecting their different scopes and feature sets.

1,939

This is the Official source code repository of Synfig Studio animation software

Pros of Synfig

  • Specialized for 2D vector animation, offering a more focused toolset
  • Lighter weight and potentially easier to learn for animation-specific tasks
  • Cross-platform compatibility (Windows, macOS, Linux)

Cons of Synfig

  • Limited to 2D design and animation, lacking 3D modeling capabilities
  • Smaller community and fewer resources compared to FreeCAD
  • Less frequent updates and potentially slower development cycle

Code Comparison

FreeCAD (Python):

import FreeCAD as App
import Part

box = Part.makeBox(10, 10, 10)
doc = App.newDocument()
Part.show(box)

Synfig (XML-based format):

<canvas version="1.0" width="480" height="270" xres="2834.645752" yres="2834.645752" view-box="-4.000000 2.250000 4.000000 -2.250000">
  <layer type="group" desc="Layer 1">
    <param name="z_depth">0.0000000000</param>
    <param name="amount">1.0000000000</param>
  </layer>
</canvas>

The code examples showcase the different approaches: FreeCAD uses Python for 3D modeling, while Synfig employs an XML-based format for 2D animation projects.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Your own 3D parametric modeler

Website • Documentation • Forum • Bug tracker • Git repository • Blog

Release Crowdin Liberapay

Overview

  • Freedom to build what you want FreeCAD is an open-source parametric 3D modeler made primarily to design real-life objects of any size. Parametric modeling allows you to easily modify your design by going back into your model history to change its parameters.

  • Create 3D from 2D and back FreeCAD lets you to sketch geometry constrained 2D shapes and use them as a base to build other objects. It contains many components to adjust dimensions or extract design details from 3D models to create high quality production-ready drawings.

  • Designed for your needs FreeCAD is designed to fit a wide range of uses including product design, mechanical engineering and architecture, whether you are a hobbyist, programmer, experienced CAD user, student or teacher.

  • Cross platform FreeCAD runs on Windows, macOS and Linux operating systems.

  • Underlying technology

    • OpenCASCADE A powerful geometry kernel, the most important component of FreeCAD
    • Coin3D library Open Inventor-compliant 3D scene representation model
    • Python FreeCAD offers a broad Python API
    • Qt Graphical user interface built with Qt

Installing

Precompiled packages for stable releases are available for Windows, macOS and Linux on the Releases page.

On most Linux distributions, FreeCAD is also directly installable from the software center application.

For development releases visit the weekly-builds page.

Other options are described on the wiki Download page.

Compiling

FreeCAD requires several dependencies to correctly compile for development and production builds. The following pages contain updated build instructions for their respective platforms:

Reporting Issues

To report an issue please:

  • Consider posting to the Forum, Discord channel, or Reddit to verify the issue;
  • Search the existing issues for potential duplicates;
  • Use the most updated stable or development versions of FreeCAD;
  • Post version info from Help > About FreeCAD > Copy to clipboard;
  • Restart FreeCAD in safe mode Help > Restart in safe mode and try to reproduce the issue again. If the issue is resolved it can be fixed by deleting the FreeCAD config files.
  • Start recording a macro Macro > Macro recording... and repeat all steps. Stop recording after the issue occurs and upload the saved macro or copy the macro code in the issue;
  • Post a Step-By-Step explanation on how to recreate the issue;
  • Upload an example file (FCStd as ZIP file) to demonstrate the problem;

For more details see:

[!NOTE] The FPA offers developers the opportunity to apply for a grant to work on projects of their choosing. Check jobs and funding to know more.

Usage & Getting Help

The FreeCAD wiki contains documentation on general FreeCAD usage, Python scripting, and development. View these pages for more information:

The FreeCAD forum is a great place to find help and solve specific problems when learning to use FreeCAD.


This project receives generous infrastructure support from and KiCad Services Corp.