Coder Social home page Coder Social logo

Ara 3D

A collection of open-source libraries for rapid application development in C#. This is the main development repository for work done by Ara3D.com.

Documentation

The code is written in a simple and straightforward manner, and should serve mostly as its own documentation. Most functions are implemented as extension methods to improve discoverability.

Using

Some of the code in this repository is available as NuGet packages.

To clone this repository the following command can be used:

git clone --recursive git://github.com/ara3d/ara3d.git

Note: there are a couple of libraries that will be missing. This is normal, because those libraries are in a private repository only available for Ara 3D employees. The solution should still build and work fine.

Submodules

There are several submodules included with this repository.

  • Domo - A state management library.
  • Parakeet - A text parsing library.
  • Bowerbird - A C# scripting library.
  • Plato - A simple and efficient cross-platform programming language.
  • Ara3D.Mathematics - A mathematical library.
  • Ara3D.Geometry - A library of geometric algorithms and data structures.
  • Ara3D.Collections - A library of LINQ inspired immutable containers.
  • Ara3D.Utils - A library of miscellaneous utility algorithms and data structures.

Organization

Code hosted in this repsitory (excluding code in submodules) is divided into the following main sections:

  1. src - projects intended for use in production environments
  2. labs - projects for experiments and investigation
  3. tests - NUnit-based test projects
  4. unity-projects - Unity projects
  5. devops - scripts and tools to simplify develolpment

Design Goals

The primary Ara 3D library design goals are roughly ordered as:

  • Correctness
  • Robustness
  • Simplicity
  • Portability
  • Flexibility
  • Discoverability
  • Performance

This is not to say that performance is not important, but the other requirements must be addressed before performance can be considered. Performance is irrelevant if code is not correct, and well-written code is much easier to validate and optimize.

You will notice that a lot of care is placed into managing dependencies between the different libraries, and that 3rd party dependencies are very sparse. A perfect library

Most libraries are .NET Standard 2.0, so that they can be used in a wide range of scenarios such as for plug-ins.

Coding Style and Programming Principles

There is no formal written-down coding style guidelines. Upon reading the code the established style should become apparent quickly.

In general we follow the Microsoft coding conventions for C#. We also use the JetBrains ReSharper plug-in and follow many of the default coding recommendations it makes.

Some rules of thumb:

  • Prefer immutable data structures
  • Prefer explicit APIs to implicit (e.g., minimize annotations)
  • Keep interfaces small and single purpose
  • Prefer easy to read code to micro-optimizations
  • Default to making things public
  • Don't repeat yourself
  • Interfaces are a good thing, use them frequently
  • Keep functions small, simple, and without side-effects
  • When it makes sense use extension methods, they make code more generic, readable, and discoverable
  • Support as many platforms as you can (e.g., default to using .NET Standard 2.0)

Contributing

We welcome contributions. We expect the following:

  1. You have familiarized yourself with the structure and contents of existing libraries.
  2. You have validated that a contribution does not exist already.
  3. You follow the coding, naming, and documentation styles and conventions established in existing code.
  4. Code works well and is robust.
  5. You follow the design goals and programming principles.

Everything will be code-reviewed with rigour and kindness.

License

All code is licensed under the commercially friendly MIT License

F.A.Q.

Q: Some projects can't be found.

A : It is normal that projects in "private" can't be found. You also might not have recursively all submodules. See the top of the README.md.

Q: Why so many projects?

A : Small projects that do one thing and do it well (and are reliable, tested, and simple), are easier to understand, test, and reuse, making us more productive.

Q: Why use submodules?

A : Some of the work is of interest to the community as a standalone. This is the best way to help everyone get the code, and consume it independently.

Q: Where are the build tasks and properties?

Many of the build tasks and properties are controlled within the Directory.Build.props file whic is automatically included by all projects.

Ara 3D's Projects

ara3d icon ara3d

A set of open-source libraries for rapid application development in C#.

ara3d-dev icon ara3d-dev

Main development repository for all public Ara 3D projects.

collections icon collections

Ara3D.Collections is a C# library of containers and algorithms.

connect icon connect

Tracking, reviewing, and versioning tools for BIM built on Git 🌿

domo icon domo

A C# state management library inspired by domain driven design.

extra-awesome-dotnet icon extra-awesome-dotnet

😎 An awesome collection of .NET related repositories. Like awesome-dotnet but extra!

geometry icon geometry

Ara3D.Geometry is a C# library of 2D and 3D geometric data structures and algorithms.

geometry-toolkit icon geometry-toolkit

📐 A library for procedural geometry creation and manipulation in Unity

mathematics icon mathematics

Ara3D.Mathematics is a C# library of mathematical data structures and algorithms.

speckle-desktop icon speckle-desktop

A PoC for a Windows Desktop application for the Speckle 3D platform and entry in Speckle Hackathon June 2024

utils icon utils

Ara3D.Utils is a C# library of miscellaneous data structures and algorithms.

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.