Giter Club home page Giter Club logo

fornjot's Introduction

Fornjot

Blog | Community | Contribution Guide

About

Fornjot is an early-stage project to create a next-generation, code-first CAD application. Because the world needs another CAD program.

Screenshot of Fornjot

For an introduction of what the project aims to achieve, please check out the website.

Sponsors

Fornjot is supported by @webtrax-oz, @lthiery, @ahdinosaur, @Yatekii, @martindederer, @hobofan, @thawkins, @bollian, @rozgo, @reivilibre, @nullstyle, @sucaba, @Kethku, @jessebraham, @sanxiyn, @seigel, @seanjensengrey, @MattOslin, @benwis, @happysalada, @jminer, @jeevcat, @U007D, @tachiniererin, @guillaumechauvat, and my other awesome sponsors. Thank you!

Please consider supporting me too, to help make Fornjot sustainable long-term.

Table of Contents

Status

Fornjot is under active development, but still experimental. Efforts are currently focused on providing a stable set of basic CAD features.

If you are interested in Fornjot and are considering to use it, you should fully expect to run into limitations pretty much immediately. Unless you are willing to contribute to its development, it would be better to wait for a year or ten, to let it mature. For more information on current limitations and improvements that could be implemented in the near future, check out the open issues.

To learn about the project's longer-term direction, please refer to the roadmap.

Features

Code-first CAD in Rust

Models are defined as Rust code. To ensure fast compile times, they are compiled separately, and loaded into the Fornjot application as a plug-in.

use fj::syntax::*;

#[fj::model]
pub fn model(
    #[param(default = 1.0, min = inner * 1.01)] outer: f64,
    #[param(default = 0.5, max = outer * 0.99)] inner: f64,
    #[param(default = 1.0)] height: f64,
) -> fj::Shape {
    let outer_edge = fj::Sketch::from_circle(fj::Circle::from_radius(outer));
    let inner_edge = fj::Sketch::from_circle(fj::Circle::from_radius(inner));

    let footprint = outer_edge.difference(&inner_edge);
    let spacer = footprint.sweep([0., 0., height]);

    spacer.into()
}

This is the code for the spacer model.

Basic modeling features

At this point, Fornjot supports basic 2D shapes (sketches made from lines segments, circles, and limited combinations between them) and sweeping those 2D shapes along a straight path to create a 3D shape.

The short- to mid-term priority is to provide CSG support, more flexible sketches, and more flexible sweeps (along a circle or helix). Long-term, the plan is to keep adding more advanced CAD modeling features, to support even complex models and workflows.

Supports the major desktop platforms

As of this writing, Fornjot runs on Linux, Windows, and macOS. The project is primarily developed on Linux, so the other platforms might be subject to bugs. If you want to help out, regularly testing on Windows and macOS, and reporting bugs, is a good way to do so.

Short- to mid-term, the plan is to add support for the web platform, so Fornjot can run in browsers. Long-term, the plan is to additionally support the major mobile platforms.

Export to 3MF & STL

Exporting models to both the 3D Manufacturing Format (3MF), which is used in 3D printing, and STL is supported.

Usage

Installation

Since Fornjot uses Rust as the language for defining models, a Rust toolchain is required to use Fornjot.

To install Fornjot itself, you have the following options:

  1. Download a binary from the latest release.
  2. Compile the latest release yourself: cargo install fj-app
  3. Compile a development version from this repository: cd path/to/repo; cargo install --path crates/fj-app

While the Fornjot application is a graphical application that opens a window and displays a 3D view of your model, it can currently only be started from the command-line. The instructions below assume that you have the Fornjot application installed somewhere on your path, under the name fj-app.

Via Nix

There's a Nix flake in the subdirectory ./nix which contains a devshell environment (via nix develop or nix-shell) and the package fj-app. It can be run/tested with a flake enabled nix via nix run github:hannobraun/Fornjot?dir=nix or with legacy nix in the directory ./nix, nix-build.

Defining models

Models are Rust libraries that depend on the fj library, which they use to define the geometry. Furthermore, they need to be built as a dynamic library. Just use the examples in the models/ directory as a template to define your own.

Viewing models

To view a model, run:

fj-app my-model

This will usually compile and load the model in the my-model/ directory. If there is a configuration file (fj.toml) available, it might define a default path to load models from that is different from the current working directory. This is the case in the Fornjot repository.

Rotate the model by pressing the left mouse button while moving the mouse. Move the model by pressing the right mouse button while moving the mouse. Zoom with the mouse wheel.

Toggle model rendering by pressing 1. Toggle mesh rendering by pressing 2. Toggle rendering of debug data by pressing 3.

Exporting models

To export a model to a file, run:

fj-app my-model --export my-model.3mf

The file type is chosen based on the file extension. Both 3MF and STL are supported.

Model parameters

Models can define parameters that can be overridden. This can be done using the --parameters argument:

fj-app my-model --parameters "width=3.0,height=5.0"

Community

If you are interested in Fornjot, please consider joining the community. We'd love to have you!

Please check out the community page on the website for information on where to find us!

Get Involved

If you are interested in helping out, just fork one of the GitHub repositories and submit a pull request:

If you don't know what to work on, check out the good first issues. To get an overview over current priorities, take a look at the open milestones.

If you need some more guidance, check out the contribution guide, or just ask!

License

This project is open source, licensed under the terms of the Zero Clause BSD License (0BSD, for short). This basically means you can do anything with it, without any restrictions, but you can't hold the authors liable for problems.

See LICENSE.md for full details.

fornjot's People

Contributors

hannobraun avatar dependabot[bot] avatar hendrikmaus avatar michael-f-bryan avatar jeevcat avatar gabsi26 avatar erenoku avatar zthompson47 avatar danieleades avatar connor-lennox avatar devanlooches avatar kopackiw avatar therealprof avatar chrisprice avatar obiwanrohan avatar bandsberg avatar kamirr avatar mxdamien avatar payload avatar antonok-edm avatar philipp-m avatar tmayoff avatar martinkavik avatar t0mstone avatar hekno25 avatar a-walrus avatar ozghimire avatar gzsombor avatar follower avatar elvas avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.