COMPAS VIEWER
A standalone, high-performance 3D viewer for COMPAS 2.0, built with PySide6 and OpenGL.
More information is available in the docs: https://compas.dev/compas_viewer/
Features
Core Functionality
- High-Performance Rendering: Modern OpenGL 3.3 Core Profile with optimized buffer management and instanced rendering
- Complete COMPAS Integration: Full support for all COMPAS objects based on the compas.scene architecture
- Multiple Rendering Modes: Shaded, ghosted, lighted, and wireframe rendering with configurable opacity
- Interactive Navigation: Smooth camera controls with perspective, orthographic, and preset views (top, front, right)
- Advanced Selection: Object selection with window/box selection, multi-selection, and selection highlighting
User Interface
- Customizable UI: Fully configurable interface with dockable panels, toolbars, and sidebars
- Scene Management: Hierarchical scene tree with show/hide controls and object settings
- Real-time Controls: Dynamic sliders, buttons, and form controls for interactive parameter adjustment
- Property Editing: Built-in object property dialogs for colors, line widths, point sizes, and transformations
Supported Geometry Types
- Primitives: Point, Line, Vector, Plane, Frame
- Curves: Polyline, Circle, Ellipse, NurbsCurve
- Surfaces: Polygon, NurbsSurface, BRep (via compas_occ)
- Solids: Box, Sphere, Cylinder, Cone, Torus, Capsule, Polyhedron
- Data Structures: Mesh, Graph, Pointcloud, Collection
- Special: Text tags, Grid, Custom buffer objects
Advanced Features
- Dynamic Animations: Built-in animation system with
@viewer.on()decorator for time-based updates - Multi-Unit Support: Automatic scaling for meters, centimeters, and millimeters
- Command System: Extensive keyboard and mouse shortcuts with customizable bindings
- File I/O: Load/save scenes in JSON format, drag and drop COMPAS scene, geometries and data structures
- Command Line Interface: Direct launching with
python -m compas_viewer -f filename.json - Extensible Architecture: Plugin system for custom scene objects and UI components
Installation
Requirements
- Python >= 3.9
- COMPAS >= 2.2.0
Quick Install
pip install compas_viewer
Development Install
git clone https://github.com/compas-dev/compas_viewer.git
cd compas_viewer
pip install -e .
See the Getting Started instructions in the docs for detailed installation guidelines.
Quick Start
Basic Usage
from compas_viewer import Viewer
from compas.geometry import Box, Sphere
# Create viewer
viewer = Viewer()
# Add geometry
box = Box(1, 2, 3)
sphere = Sphere(0.5)
viewer.scene.add(box, name="My Box")
viewer.scene.add(sphere, name="My Sphere")
# Show viewer
viewer.show()
Command Line Usage
# Launch with a empty scene
python -m compas_viewer
# Launch with a specific file
python -m compas_viewer -f path/to/geometry.json
# Launch with multiple files from a directory
python -m compas_viewer --files path/to/directory/
Dynamic Animations
from compas_viewer import Viewer
from compas.geometry import Box, Translation
viewer = Viewer()
box = viewer.scene.add(Box(1, 1, 1))
@viewer.on(interval=50) # Update every 50ms
def animate(frame):
T = Translation.from_vector([0.01 * frame, 0, 0])
box.transformation = T
viewer.show()
Key Controls
| Action | Shortcut |
|---|---|
| Rotate | Right-click + drag |
| Pan | Right-click + shift + drag |
| Zoom | Mouse wheel |
| Select object | Left-click |
| Select multiple | Left-click + shift + drag |
| Delete selected | Delete key |
| Zoom to selected | F key (with selection) |
| Zoom to All | F key (without selection) |
Documentation
- Tutorial: Basic concepts, configuration, and software architecture
- Examples: Comprehensive examples covering all features
- API Reference: Complete API documentation
Contributing
We welcome contributions! Please see our Contributing Guidelines for:
- Bug reports and feature requests
- Code contributions and pull requests
- Documentation improvements
- Community guidelines
Dependencies
- PySide6: Qt6 bindings for Python
- PyOpenGL: OpenGL bindings for Python
- freetype-py: Font rendering
- COMPAS: COMPAS framework (>= 2.2.0)
License
The code in this repo is licensed under the MIT License.
Known Issues
Please check the Issue Tracker for known issues and their solutions.
Changelog
See CHANGELOG.md for version history and release notes.
Metadata
Release files for compas-viewer 2.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| compas_viewer-2.0.2.tar.gz | 444.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| compas_viewer-2.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 913.8 kB
Release files / compas_viewer-2.0.2.tar.gz
| Download URL | compas_viewer-2.0.2.tar.gz |
|---|---|
| Size | 444.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
555161293ddc760a8abe0aff505d55b55d4a94261013f957277fccb6acdf22b7
|
|
BLAKE2b-256 checksum How to use checksums |
7ba6417bb8e954b0c96dc1325f3573aefac41bec1d14e5438ebe988bc26f7343
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Release files / compas_viewer-2.0.2-py3-none-any.whl
| Download URL | compas_viewer-2.0.2-py3-none-any.whl |
|---|---|
| Size | 469.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e2b52f68f6cb314a493f4b0b19a89097f44aa86c31b386b9565647e3afd8ca7c
|
|
BLAKE2b-256 checksum How to use checksums |
b3fd3699712139ab4788821c1995c8dafd3987d62282f5c7adad31c34cf1c15f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|