Metadata-Version: 2.2
Name: OpenVCAD
Version: 2.3.4
Summary: Python bindings for OpenVCAD (pyvcad, pyvcad_compilers, pyvcad_rendering)
Keywords: 3D printing,CAD,multi-material,volumetric,CSG,geometry,3D,functionaly graded materials
Author-Email: Charles Wade <charles.wade@colorado.edu>, Robert MacCurdy <maccurdy@colorado.edu>
License: Copyright © 2025 The Regents of the University of Colorado, a body corporate.
         All Rights Reserved. Contact charles.wade@colorado.edu with any questions or
         comments.
         -------------------------------------------------------------------------------
         
         The Program is the property of The Regents of the University of Colorado, a
         body corporate, (CU or the University). CU hereby reserves all rights in the
         Program (defined below) not expressly granted herein. In addition to being
         subject to copyright protection, the use of this Program is covered by a
         pending patent application. Any use, copy, publication, distribution, display,
         modification, or transmission of the Program in whole or in part in any form or
         by any means outside the rights expressly granted in this Notice without the
         written permission of CU is strictly prohibited.
         
         The Program consists of the computer software code known as “Systems and
         Processes for Volumetric Multi-Material 3D Models” also known as “OpenVCAD”,
         “VCAD” or similar, and the associated documentation, for making volumetric
         multi-material 3D models.
         
         You (the user or recipient of the Program) desire to acquire a license to use
         the Program in accordance with the terms set forth in this Notice.
         
         BY DOWNLOADING AND USING THIS PROGRAM, IN WHOLE OR IN PART, YOU AGREE TO COMPLY
         WITH AND BE BOUND BY ALL TERMS IN THIS NOTICE. THE TERMS OF THIS NOTICE ALSO
         APPLY TO ALL YOUR CONTRIBUTIONS (DEFINED BELOW). IN RETURN, THE UNIVERSITY
         AGREES THAT IT SHALL NOT USE YOUR CONTRIBUTIONS IN A WAY THAT THE UNIVERSITY
         BELIEVES IS CONTRARY TO THE PUBLIC BENEFIT. IF YOU DO NOT WISH TO COMPLY WITH
         OR BE BOUND WITH THE TERMS OF THIS NOTICE YOU MUST IMMEDIATELY CEASE USE OF THE
         PROGRAM AND DELETE ALL COPIES OR MODIFICATIONS OF THE PROGRAM COMPLETELY. If
         You agree to these terms on behalf of an organization, You hereby represent to
         CU that You are authorized to accept these terms on its behalf.
         
         1.	Definitions:
             “Contributor” means the copyright owner or legal entity authorized by the
             copyright owner of any Contribution (defined below) submitted to the
             University. For legal entities, the entity making a Contribution and all
             other entities that control, are controlled by, or are under common control
             with that entity are considered to be a single Contributor. For the
             purposes of this definition, "control" means (i) the power, direct or
             indirect, to cause the direction or management of such entity, whether by
             contract or otherwise, or (ii) ownership of fifty percent (50%) or more of
             the outstanding shares, or (iii) beneficial ownership of such entity.
         
             “Contribution” means any original work of authorship, including any
             modifications or additions to the Program, that is intentionally submitted
             to the University for inclusion in, or documentation of, the Program. For
             the purposes of this definition, “submitted” means any form of electronic,
             verbal, or written communication sent to the University or its
             representatives, including but not limited to communication on electronic
             mailing lists, source code control systems, and issue tracking systems that
             are managed by, or on behalf of, the University for the purpose of
             discussing and improving the Program, but excluding communication that is
             conspicuously marked and designated in writing as “Not a Contribution”.
         
         2.	Grant of Copyright License for the Program: Subject to the terms and
             conditions of this Notice, CU hereby grants to You a non-exclusive license
             under CU’s copyright in the Program to use the Program for Your own
             noncommercial academic or personal research.
         
         3.	Grant of Patent License for the Program: Subject to the terms and
             conditions of this Notice, CU hereby grants to You a non-exclusive license
             under CU’s patent rights covering the Program to make, have made, use
             import, and otherwise transfer the Program to Your collaborators for Your
             own noncommercial academic or personal research, provided that the
             foregoing patent license is granted under only those patent claims that are
             necessarily infringed by Your Contribution(s). . If You institute patent
             litigation against any third party (including a cross-claim or counterclaim
             in a lawsuit) alleging that the Program or a Contribution incorporated
             within the Program constitutes direct or contributory patent infringement,
             then any patent licenses granted to You under this Notice for the Program
             and Your Contributions shall terminate as of the date such litigation is
             filed.
         
         4.	Terms of Use of the Program. You may only use this Program for Your
             noncommercial research and development efforts on behalf of a nonprofit
             organization, or noncommercial research within and on behalf of a nonprofit
             organization, or your own personal noncommercial activities. You may make
             derivative works or modifications to the Programs, but only for Your
             noncommercial research and development efforts within or on behalf of a
             nonprofit academic or research organization, or your own personal
             noncommercial activities. You may not remove or modify the copyright,
             trademarks, or other proprietary notices and disclaimers as they appear in
             the Program. You may distribute or publish the Program or any derivative
             works of the Program made by You, provided that You must limit any further
             use of the Program or derivative works to only noncommercial research and
             development on behalf of a nonprofit academic or research organization, or
             personal noncommercial activities. You shall not use the Program, any
             portion thereof or any derivative works of the Program for any commercial
             purposes. Commercial purposes for the purpose of this Notice include, but
             are not limited to, providing services for others, distributing larger
             programs that contain this Program and exchanging this Program or
             derivative works of the Program in any manner for any form of compensation,
             in-kind or otherwise. To the extent that You publish any results from the
             use of the Program or derivative works of the Program, You must properly
             acknowledge the Program as developed by the Matter Assembly Computation Lab
             at the University of Colorado Boulder, and cite the published reference(s).
             The recommended reference citation(s) for the Program is/are provided in
             the Program documentation. This Notice is limited to the rights of The
             Regents of the University of Colorado in the Program and does not include
             any rights to other intellectual property. Your rights under this Notice
             will terminate immediately and automatically if You fail to comply with any
             of the terms and conditions of this Notice. Immediately upon termination,
             You must cease all use of the Program and any derivative works of the
             Program, destroy all copies of the Program and any derivative works of the
             Program in Your possession or control. Termination of this Notice will not
             limit any of CU’s rights or remedies at law or in equity. You acknowledge
             that the Program is subject to U.S. export jurisdiction. You agree to
             comply with all applicable international and national laws that apply to
             the Program, including the U.S. Export Administration Regulations, as well
             as end-user, end-use, and destination restrictions issued by U.S. and other
             governments. The Program is distributed “as-is”, and CU has no obligation
             to provide any maintenance, updates, additional documentation or services.
         
         5.	Grant of Copyright License to Your Contributions. By submitting
             Contributions to CU, Contributor grants to CU a non-exclusive, royalty free
             license under Contributor’s copyright in the Contribution to use, reproduce,
             modify, distribute, transmit, create derivative works from, publicly display
             and publicly perform the Contribution for any purpose. CU may, in its sole
             discretion, include your Contribution when licensing the Program under these or
             any other license terms. To the extent that CU distributes or publishes a
             Contribution or incorporates the Contribution into the Program, CU agrees to
             give appropriate attribution to Contributor as prescribed by Contributor.
             However, nothing in this Notice obligates CU to incorporate any Contribution
             into the Program, and CU may elect not to publish or distribute a Contribution
             in its sole discretion.
         
         6.	With respect to any of Your Contributions, You represent that you are legally
             entitled to grant the above license to such Contributions. You represent that
             each of Your Contributions is Your original creation (see Section 8 for
             submissions on behalf of others). You represent that Your Contribution
             submissions include complete details of any third-party license or other
             restriction (including, but not limited to, related patents and trademarks)
             of which You are aware and which are associated with any part of Your
             Contributions. You represent and warrant that You will not submit any
             materials to University that You know or believe to have components that
             are malicious or harmful. You represent that, with regard to all
             representations in Section 6, You will perform a reasonable amount of due
             diligence in order to be properly informed of third party licenses,
             infringing materials or harmful content associated with any part of Your
             Contribution.
         
         7.	You are not expected to provide support for Your Contributions, except to
             the extent You desire to provide support. You may provide support for free,
             for a fee, or not at all.
         
         8.	Should You wish to submit work that is not Your original creation, You may
             submit it to the University separately from any Contribution, identifying
             the complete details of its source and of any license or other restriction
             (including, but not limited to, related patents, trademarks, and license
             agreements) of which You are personally aware, and conspicuously marking
             the work as "Submitted on behalf of a third-party: [named here]".
         
         9.	You agree to notify the University of any facts or circumstances of which
             You become aware that would make Your representations inaccurate in any
             respect. You agree to notify the University of any administrative or court
             proceeding that involve Your Contributions.
         
         10.	CU DISCLAIMS, ANY AND ALL OTHER WARRANTIES, CONDITIONS, OR REPRESENTATIONS
             (EXPRESS OR IMPLIED, ORAL OR WRITTEN), WITH RESPECT TO THE PROGRAM OR ANY
             PART THEREOF, INCLUDING ANY AND ALL IMPLIED WARRANTIES OR CONDITIONS OF
             TITLE, NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS OR SUITABILITY FOR ANY
             PURPOSE (WHETHER OR NOT CU KNOWS, HAS REASON TO KNOW, HAS BEEN ADVISED, OR
             IS OTHERWISE IN FACT AWARE OF ANY SUCH PURPOSE), WHETHER ALLEGED TO ARISE
             BY LAW, BY REASON OF CUSTOM OR USAGE IN THE TRADE, OR BY COURSE OF DEALING.
         
         11.	You are solely responsible for any and all losses or expenses arising from
             or otherwise in respect of Your use of the Program or derivative works of
             the Program.
         
         12.	You agree that this Notice, will be governed and construed in accordance
             with the laws of the State of Colorado.
         
         13.	You acknowledge and agree that nothing contained in this Notice shall be
             construed as an express or implied waiver of any immunity of the
             University, either sovereign or governmental under the Colorado
             Governmental Immunity Act.
         
         14.	You agree that Your Contribution shall not contain any item(s) that are
             either export-controlled under the International Traffic in Arms
             Regulations, or that appear on the Commerce Control List (except as
             EAR99) of the Export Administration Regulations.
         
         15.	The invalidity, illegality, or unenforceability of any one or more phrases,
             sentences, clauses, or sections in this Notice does not affect the remaining
             portions of this Notice.
Project-URL: Homepage, https://matterassembly.org/openvcad
Project-URL: Documentation, https://matterassembly.org/openvcad-developer-dev/
Requires-Python: >=3.11
Requires-Dist: pyvcad-rendering>=1.0.6
Description-Content-Type: text/markdown

# OpenVCAD
![Hero Image – Replace with best printed artifact or figure from papers](https://media.githubusercontent.com/media/MacCurdyLab/OpenVCAD-Public/refs/heads/main/images/hero.png)

> Learn more about the OpenVCAD project at <https://matterassembly.org/openvcad>.

OpenVCAD is an open-source volumetric geometry compiler for the design and fabrication of **functionally graded, multi-material** objects.  
It brings advanced **implicit modeling** and **programmable parametric design** into the world of additive manufacturing, enabling designers to create objects with continuous material gradients, lattice structures, and simulation-informed material distributions.

With OpenVCAD, you can:

- Express geometry **and** multi-material composition using **implicit functions**.
- Create complex gradients and digital alloys using **functional material nodes**.
- Design **algorithmically** in Python using `pyvcad` (including in this package) — integrate with NumPy, SciPy, optimization, or simulation workflows.
- Compile directly for **inkjet, FFF, and other AM processes**, with export to slicing and simulation-ready formats.
---

## Gallery

Here are a few examples of what OpenVCAD can produce:

### Functionally graded lattice
![Example 1 – Functionally graded lattice](https://media.githubusercontent.com/media/MacCurdyLab/OpenVCAD-Public/refs/heads/main/images/lattice_example.png)  
*Multi-material graded lattice structure made with soft, rigid, and non-curing liquid.*

###  Multi-material Stanford Bunny
![Example 2 – Multi-material stanford bunny](https://media.githubusercontent.com/media/MacCurdyLab/OpenVCAD-Public/refs/heads/main/images/bunny_combined.png)  
*(a) OpenVCAD software render of the multi-material lattice-filled Stanford Bunny; (b) physical artifact printed on a Stratasys J750 printer; and (c) close-up view detailing graded internal lattice structures. Strut color is a function of strut length. The bunny is comprised of 3,289 unique struts.*

### Inkjet 3D Printed Medical Scan
![Example 3 – Inkjet 3D Printed Medical Scan](https://media.githubusercontent.com/media/MacCurdyLab/OpenVCAD-Public/refs/heads/main/images/medical.png)  
*Real world patient scan ata processed with OpenVCAD and printed on Inkjet 3D Printer*

---

## How OpenVCAD Works

1. **Modeling** – Use the `pyvcad` Python package to create a hierarchical tree of geometry + material nodes.
2. **Compilation** – Run an OpenVCAD compiler module to convert the model into volumetric data.
3. **Export** – Output formats include PNG stacks for inkjet printing, FEA meshes for simulation, and meshes for FFF printing.

Key capabilities:

- **Material transitions** – Gradual changes in material properties within one object.
- **Fully implicit representation** – Geometry *and* material are expressed implicitly, scaling to hundreds of billions of voxels.
- **Digital alloying** – Combine materials at a fine scale for intricate compositions.
- **Blending** – Convolution-based smoothing across complex material interfaces.
- **Image-based processing** – Drive material distributions from images (e.g., medical scans).

---
## Getting Started
The code below shows how you can create a basic OpenVCAD design, render it, and export a PNG stack for Inkjet 3D Printing.
```python
# pyvcad is the main library and pyvcad_rendering is the visualization library
import pyvcad as pv
import pyvcad_rendering as viz

# Load some material definitions
materials = pv.default_materials
red = materials.id("red")
blue = materials.id("blue")

# Create a simple rectangular prism as our geometry
# Don't care about material here, we will replace it with a gradient
bar = pv.RectPrism(pv.Vec3(0,0,0), pv.Vec3(100,50,10), red)

# A functional gradient that is 100% blue at x=-50 and 100% at x=50
graded_bar = pv.FGrade(["x/100 + 0.5", "-x/100 + 0.5"],
                       [red, blue], False)
graded_bar.set_child(bar) # Nest the bar inside the gradient to apply the gradient to it

# Render the object, note that this is a blocking call and
# will not continue until the window is closed
viz.Render(graded_bar, materials)

# Export the object for 3D printing or simulation.
# This brings up a wizard to guide you through the export process
viz.Export(graded_bar, materials)
```
---

## Supported Inputs

| **Category** | **Supported Inputs** |
|--------------|----------------------|
| **Geometry** | • Meshes  <br>• STEP CAD files  <br>• FEA simulation results  <br>• DICOM medical scans  <br>• Implicit surfaces  <br>• Voxels (OpenVDB, NanoVDB) |
| **Materials**| • Math expressions  <br>• Custom C++ / Python functions  <br>• Blending  <br>• DICOM medical scans  <br>• Voxels (OpenVDB, NanoVDB) |

---

## Supported Outputs

| **Category**          | **Output Types** |
|-----------------------|------------------|
| **3D Printing**       | PNG stacks (inkjet) |
| **Simulation**        | FEA input files with material assignments (ABAQUS) |
| **Voxel-based Outputs**| Voxel grids (OpenVDB, NanoVDB) |
| **Visualization**     | Surface and volumetric previews |

---
## Issues
If you run into any issues, please submit a report [here](https://github.com/MacCurdyLab/OpenVCAD-Public/issues).
> Note: We now support Windows, Mac, and Linux!

---


## Getting the Code

The OpenVCAD source code is open-source under a **non-commercial license**.  
You can request access to the private GitHub repository here:

➡ **[Request Access Form](https://forms.gle/MAjCmG66xZ6p1JcE9)**

---

## License

OpenVCAD is released under a **non-commercial open-source license**. By using any of the OpenVCAD libraries you agree to the [LICENSE](https://raw.githubusercontent.com/MacCurdyLab/OpenVCAD-Public/refs/heads/main/LICENSE). OpenVCAD is free for academic and hobbyist use.

---

## What OpenVCAD **Is Not**

OpenVCAD is **not** a voxel-by-voxel design tool. While it can emit voxel data, design is done implicitly with high-level math expressions that scale to extremely large builds (e.g. Inkjet 3D printing).

---

## Publications
OpenVCAD is an active research project developed by the [Matter Assembly Computation Lab](https://www.colorado.edu/lab/matterassembly/) at CU Boulder.
1. **OpenVCAD: An open‑source volumetric multi‑material geometry compiler** (2024)  
   <small>Core framework; implicit volumetric design; inkjet/PolyJet workflows.</small><br>
   [Read our paper here](https://matterassembly.org/publications/#wade2024openvcad) (Additive Manufacturing)

2. **Implicit Toolpath Generation for Functionally Graded Additive Manufacturing via Gradient‑Aware Slicing** (2025)  
   <small>Extends VCAD to toolpath‑based systems (e.g., FFF) with gradient‑aware slicing.</small><br>
   [Read our paper here](https://matterassembly.org/publications/#wade2025implicit) (Additive Manufacturing)

3. **Implicit Modeling for 3D‑Printed Multi‑Material Computational Object Design via Python** (2025)  
   <small>Python‑first API (`pyvcad`), enhanced lattice workflows, and simulation‑informed design/export.</small><br>
   [Read our paper here](https://matterassembly.org/publications/#wade2025pyvcad) (Proceedings of the 10th ACM Symposium on Computational Fabrication)
### Cite Us (BibTeX)
```bibtex
@article{wade2024openvcad,
  title={OpenVCAD: An open source volumetric multi-material geometry compiler},
  author={Wade, Charles and Williams, Graham and Connelly, Sean and Kopec, Braden and MacCurdy, Robert},
  journal={Additive Manufacturing},
  volume={79},
  pages={103912},
  year={2024},
  publisher={Elsevier}
}
```

```bibtex
@article{wade2025toolpaths,
  title = {Implicit Toolpath Generation for Functionally Graded Additive Manufacturing via Gradient-Aware Slicing},
  author = {Wade, Charles and Beck, Devon and MacCurdy, Robert},
  journal = {Additive Manufacturing},
  year = {2025},
  doi = {https://doi.org/10.1016/j.addma.2025.104963},
}
```

```bibtex
@article{wade2025pyvcad,
  title = {Implicit Modeling for 3D-printed Multi-material Computational Object Design via Python},
  author = {Wade, Charles and Beck, Devon and MacCurdy, Robert},
  journal = {Proceedings of the 10th ACM Symposium on Computational Fabrication},
  year = {2025},
  doi = {https://doi.org/10.48550/arXiv.2509.15562},
}
```
---
