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-1.0.0.tar.gz (26.0 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-1.0.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for gemmology_crystal_renderer-1.0.0.tar.gz
Algorithm Hash digest
SHA256 863ba539d7789626979aa6fcd226d2ae53da2f4b6d6bb1f897fab830e97a8174
MD5 0060071a78be79e4be3049fdeb6c29d1
BLAKE2b-256 7c866463091a23968af4a8fb130db348aaed4c770cc45cc1661891e7e71343b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_renderer-1.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-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gemmology_crystal_renderer-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9a879c01268b67c1a1719712913c3d8146718ac0f4d01db749cc9627adbce367
MD5 06bfafd3fb20eb3572d45a4172181d14
BLAKE2b-256 13e943681bdb728acaa88735704cc4568459a2221b4977a8e5748ace9c801771

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_renderer-1.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