Skip to content

Commit 771fffb

Browse files
committed
Merge branch 'main' of github.com:MacCurdyLab/OpenVCAD-Public
2 parents 2aefa1d + c0bb298 commit 771fffb

1 file changed

Lines changed: 4 additions & 52 deletions

File tree

README.md

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,8 @@ DOI: [10.1016/j.addma.2023.103912](https://doi.org/10.1016/j.addma.2023.103912)
44

55
A volumetric multi-material modeling language and compiler developed by the [Matter Assembly Computation Lab](https://www.matterassembly.org/) at the University of Colorado Boulder. OpenVCAD is an automatable volumetric design framework that can fully leverage multi-material fabrication. OpenVCAD provides a scriptable suite of constructive solid geometry and functional design methods that enable the representation of complex objects with hundreds of materials. OpenVCAD allows for full spatial control over the material composition of an object. Additionally, it provides functional grading and convolutional blending techniques to generate parts with dynamic mechanical characteristics. This research tool is intended to be used for the design and development of new meta-materials, digital allows, and compliant mechanisms.
66

7-
# A multi-material geometry compiler
8-
The OpenVCAD project defines a parametric scripting language and compiler that can be used to express and export volumetric designs. The image below shows the volumetric design workflow that is provided by OpenVCAD. Designers express their objects using the [OpenVCAD modeling language](https://github.com/MacCurdyLab/OpenVCAD#language-overview-usage). These designs are compiled into an OpenVCAD tree that can be exported to various volumetric formats, such as PNG stacks for inkjet 3D-printing. The power of OpenVCAD is the [material nodes](https://github.com/MacCurdyLab/OpenVCAD/wiki/Material-Nodes) that allow complex material transitioning, digital alloying, and image processing techniques to be applied to child geometry. This replaces the traditional 3D-printing workflow of repressing multiple materials using a composite of single material surface meshes. Similarly, using OpenVCAD designers can express objects that vary their composition internally such as lattice structures and meta-materials.
9-
![OpenVCAD Compiler Diagram](documentation/openvcad_diagram.png)
10-
11-
## Language Overview/ Usage
12-
OpenVCAD employees a node-based modeling language that is similar to the [OpenSCAD](http://www.openscad.org/) language. The key difference is that OpenVCAD was designed to support multi-material designs. OpenVCAD files, or simply `.VCAD` files are simple text files that express a hierarchical tree of nodes similar to [abstract syntax trees (ASTs)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) or [constructive solid geometry (CSG)](https://en.wikipedia.org/wiki/Constructive_solid_geometry). The OpenVCAD modeling language has three categories of nodes: geometric primitives, composition, and material. The figure below shows how OpenVCAD nodes can be used to generate multi-material designs.
13-
![OpenVCAD Tree Example](documentation/tree_ex.png)
14-
15-
OpenVCAD designs are expressed using a scripting language. The language is a simple text file that contains a `root()` with any number of child nodes. The following example shows an OpenVCAD script that generates a simple one material object using two geometric primitive nodes and a composition node.
16-
17-
```
18-
root((-5, -5, -5), (5, 5, 5), (0.05, 0.05, 0.05))
19-
{
20-
difference()
21-
{
22-
sphere(1.0, "red");
23-
cube(1.0, "red");
24-
}
25-
}
26-
```
27-
![Simple VCAD Object Example](documentation/simple_example.png)
28-
29-
### Coordinate Systems
30-
OpenVCAD supports cartesian, cylindrical, and spherical coordinates systems in all expressions. See [Coordinate Systems](https://github.com/MacCurdyLab/OpenVCAD/wiki/Coordinate-Systems) for more information.
31-
32-
### Nodes
33-
OpenVCAD's three node types are documented in the following pages:
34-
35-
1. [Geometric Primitive Nodes](https://github.com/MacCurdyLab/OpenVCAD/wiki/Geometric-Primitive-Nodes): provides an overview of the geometric primitives (leaf nodes) that can be used in OpenVCAD
36-
2. [Composition Nodes](https://github.com/MacCurdyLab/OpenVCAD/wiki/Composition-Nodes): provides an overview of the composition nodes (transforms & boolean operations) that can be used in OpenVCAD
37-
3. [Material Nodes](https://github.com/MacCurdyLab/OpenVCAD/wiki/Material-Nodes): provides an overview of the material nodes (convolution & functional grading) that can be used in OpenVCAD
7+
# Documention
8+
Please see the [wiki](https://github.com/MacCurdyLab/OpenVCAD-Public/wiki) for full documentation on how to use OpenVCAD.
389

3910
## Gallery & Benchmarking
4011
![Render of benchmarking objects (a though d)](documentation/benchmarking_composite.png)
@@ -47,27 +18,8 @@ c. shows a soft actuator that consists of a functional geometry node and graded
4718

4819
d. shows a mug that is designed using multiple functional geometry nodes and boolean operations
4920

50-
### Timing Results
51-
| **Example** | **Object Size (mm)** | **Voxels** | **Evaluation Time (s)** | **Slicing Time (s)** | **Voxels per second** |
52-
|:--------------------:|:---------------------: |:-------------------: |:-----------------------: |:--------------------: |:---------------------: |
53-
| OpenVCAD Text (a) | 140 x 7 x 28 | $2.8 \times 10^{8}$ | 21 | 7 | $1.0 \times 10^{7}$ |
54-
| Screwdriver (b) | 22 x 144 x 22 | $6.7 \times 10^{8}$ | 97 | 15 | $5.9 \times 10^{6}$ |
55-
| Soft Actuator (c) | 48 x 48 x 75 | $1.8 \times 10^{9}$ | 251 | 41 | $6.3 \times 10^{6}$ |
56-
| Mug (d) | 96 x 63 x 90 | $5.6 \times 10^{9}$ | 836 | 120 | $5.9 \times 10^{6}$ |
21+
> See [Gallery and Results page](https://github.com/MacCurdyLab/OpenVCAD-Public/wiki/Gallery) for more info.
5722
58-
### Functionally Graded Gyroidal Wing
59-
OpenVCAD's functional geometry node is well suited to express triply periodic geometry like the gyroid pattern in the figure below. Functional patterns can be clipper with a boundary mesh to form infill patterns. Additionally, geometric features can be parameterized on spatial location. In the below example, the unit cell size is linearly decreased along the x-axis. The example was generated using 8 line OpenVCAD script.
60-
![Network and render of gyroidal wing](documentation/wing_network.png)
61-
```
62-
root((-23, -5, -1), (23, 5, 3), (0.05, 0.05, 0.05)){
63-
fgrade(["0.021739 * x + 0.5", "-0.021739 * x + 0.5"], ["red", "blue"], "prob"){
64-
intersection(){
65-
mesh("OpenVCAD-Examples/multi-material/wing/wing.stl", "red");
66-
function("sin(((2 * pi) / (-0.06304347 * x + 1.55)) * x) * cos(((2 * pi) / (-0.06304347 * x + 1.55)) * y) +
67-
sin(((2 * pi) / (-0.06304347 * x + 1.55)) * y) * cos(((2 * pi) / (-0.06304347 * x + 1.55)) * z) +
68-
sin(((2 * pi) / (-0.06304347 * x + 1.55)) * z) * cos(((2 * pi) / (-0.06304347 * x + 1.55)) * x)", "red");
69-
}}}
70-
```
7123
# Download
7224
## Pre-compiled OpenVCAD binaries
7325
Pre-compiled binaries of the OpenVCAD compiler can be found in [releases](https://github.com/MacCurdyLab/OpenVCAD/releases). These include two versions:
@@ -78,7 +30,7 @@ Pre-compiled binaries of the OpenVCAD compiler can be found in [releases](https:
7830
We welcome contributions to OpenVCAD from the community! Below outlines the process for contributing to the project.
7931

8032
### Getting the Code/ Open Source Contributions
81-
The OpenVCAD code is open-source under a non-comercial license. As such, we encourage contributions from the community.
33+
The OpenVCAD code is open-source under a [non-comercial license](https://github.com/MacCurdyLab/OpenVCAD-Public/blob/main/LICENSE). As such, we encourage contributions from the community.
8234

8335
The code is hosted on a private GitHub repository that you can request access to by using this form: [https://forms.gle/MAjCmG66xZ6p1JcE9](https://forms.gle/MAjCmG66xZ6p1JcE9)
8436

0 commit comments

Comments
 (0)