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.1.tar.gz (31.8 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.1-py3-none-any.whl (29.3 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for gemmology_crystal_renderer-1.0.1.tar.gz
Algorithm Hash digest
SHA256 846ade842978c428bba8f1ff00dab58ccfc8fd9d3b6a11e5cb64aa9737ce1db5
MD5 2aa1799d9d86e04db3b66c1b321c2923
BLAKE2b-256 1781d184fea00751df0e49b569f51a940886b505848ac4791984dc1c13144efc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for gemmology_crystal_renderer-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 775248c6a740db3e8d0153faf2e1f5ded47195edfc070468cb74c02d991ebea7
MD5 99ef3f41791902ec2ca57fe63f408fc4
BLAKE2b-256 8063723731decedb9408ac8d8a6da4df043d3cb63a4d161ab2c96a716fb1474c

See more details on using hashes here.

Provenance

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