Skip to main content

SVG and 3D visualization for crystal geometries

Project description

Crystal Renderer

SVG and 3D visualization for crystal geometries. Renders crystal structures from CDL notation with export to multiple formats including SVG, STL, and glTF.

Part of the Gemmology Project.

Installation

pip install crystal-renderer

For raster image export (PNG, JPG):

pip install crystal-renderer[raster]

Quick Start

from crystal_renderer import generate_cdl_svg

# Generate SVG from CDL notation
generate_cdl_svg("cubic[m3m]:{111}@1.0 + {100}@1.3", "crystal.svg")

# Export to 3D formats
from crystal_geometry import create_octahedron
from crystal_renderer import export_stl, export_gltf

geom = create_octahedron()
export_stl(geom.vertices, geom.faces, "octahedron.stl")
export_gltf(geom.vertices, geom.faces, "octahedron.gltf")

Features

  • CDL Visualization: Generate SVG images from Crystal Description Language notation
  • Multi-Format Export: SVG, PNG, JPG, STL, glTF
  • Customizable Rendering: Face colors, axes, grid, labels
  • Info Panels: FGA-style property panels on visualizations
  • 3D Projection: Configurable elevation and azimuth angles
  • Color Schemes: System-based and form-based coloring

API Reference

High-Level Visualization

from crystal_renderer import generate_cdl_svg, generate_geometry_svg

# From CDL string
generate_cdl_svg(
    cdl_string="cubic[m3m]:{111}@1.0",
    output_path="crystal.svg",
    show_axes=True,
    elev=30,
    azim=-45,
    color_by_form=False,
    show_grid=True,
    face_labels=False
)

# From raw geometry
generate_geometry_svg(
    vertices=geom.vertices,
    faces=geom.faces,
    output_path="geometry.svg",
    face_color='#81D4FA',
    edge_color='#0277BD'
)

3D Export

from crystal_renderer import export_stl, export_gltf

# STL for 3D printing
export_stl(vertices, faces, "model.stl", binary=True)

# glTF for web/AR
export_gltf(
    vertices, faces, "model.gltf",
    color=(0.5, 0.7, 0.9, 0.8),  # RGBA
    name="crystal"
)

Format Conversion

from crystal_renderer import convert_svg_to_raster, generate_with_format

# Convert existing SVG to PNG
convert_svg_to_raster("input.svg", "output.png", scale=2.0)

# Generate directly to raster format
generate_with_format(
    generator_func=generate_cdl_svg,
    output_path="crystal.png",
    output_format="png",
    cdl_string="cubic[m3m]:{111}"
)

Info Panels

from crystal_renderer import render_info_panel, create_fga_info_panel

# On a matplotlib axes
properties = {
    'name': 'Ruby',
    'chemistry': 'Al2O3',
    'hardness': '9',
    'ri': '1.762-1.770'
}
render_info_panel(ax, properties, position='top-right', style='compact')

# Create FGA-style panel from mineral data
fga_props = create_fga_info_panel(mineral_data)

Color Constants

from crystal_renderer import (
    AXIS_COLOURS,      # a, b, c axis colors
    ELEMENT_COLOURS,   # Per-element colors
    HABIT_COLOURS,     # Per-crystal-system colors
    FORM_COLORS,       # Colors for multi-form rendering
)

# Get element color
from crystal_renderer import get_element_colour
color = get_element_colour('Si')  # '#F0C8A0'

Projection Utilities

from crystal_renderer import (
    calculate_view_direction,
    calculate_axis_origin,
    calculate_vertex_visibility,
    is_face_visible,
)

# Calculate which vertices are front-facing
visibility = calculate_vertex_visibility(vertices, faces, elev=30, azim=-45)

Output Formats

Format Extension Description
SVG .svg Vector graphics, scalable
PNG .png Raster with transparency
JPG .jpg Compressed raster
STL .stl 3D printing format
glTF .gltf Web/AR 3D format

Requirements

  • Python >= 3.10
  • numpy >= 1.20.0
  • matplotlib >= 3.5.0
  • cdl-parser >= 1.0.0
  • crystal-geometry >= 1.0.0

Optional

  • cairosvg - SVG to raster conversion
  • Pillow - Image processing
  • ase - Atomic structure visualization

Documentation

See crystal-renderer.gemmology.dev for full documentation.

License

MIT License - see LICENSE for details.

Related Packages

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gemmology_crystal_renderer-2.0.0.tar.gz (32.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gemmology_crystal_renderer-2.0.0-py3-none-any.whl (30.0 kB view details)

Uploaded Python 3

File details

Details for the file gemmology_crystal_renderer-2.0.0.tar.gz.

File metadata

File hashes

Hashes for gemmology_crystal_renderer-2.0.0.tar.gz
Algorithm Hash digest
SHA256 e4f631e0e0a173b1ddb1ebe3f728811027bfac91ca81487f9b4cb6960517f4a7
MD5 f995874de246bf114694dbc0fa210048
BLAKE2b-256 6127f621468b4faf0e00559c0a5ed75ebcc872a35275cd4fbb2c3d00d53444cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_renderer-2.0.0.tar.gz:

Publisher: pypi-publish.yml on gemmology-dev/crystal-renderer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gemmology_crystal_renderer-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gemmology_crystal_renderer-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 329583d569b650c96fbf23968592a270218fc5577b4b9abaaa9c8a459940bc86
MD5 0df12236cc6705f0c1357a762e5ec7e2
BLAKE2b-256 68da4d2afa44c588cf35feb1399851dc482f34c96dad53e99642e9e0ad166bf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_renderer-2.0.0-py3-none-any.whl:

Publisher: pypi-publish.yml on gemmology-dev/crystal-renderer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page