Skip to main content

3D crystal geometry engine for crystallographic visualization

Project description

Crystal Geometry

3D crystal geometry engine for crystallographic visualization. Computes polyhedra from Crystal Description Language (CDL) strings using half-space intersection with point group symmetry.

Part of the Gemmology Project.

Installation

pip install crystal-geometry

Quick Start

from crystal_geometry import cdl_string_to_geometry, create_octahedron

# Create geometry from CDL string
geom = cdl_string_to_geometry("cubic[m3m]:{111}@1.0 + {100}@1.3")
print(f"Vertices: {len(geom.vertices)}, Faces: {len(geom.faces)}")

# Use convenience constructors
octahedron = create_octahedron()
print(f"Octahedron has {len(octahedron.faces)} faces")

Features

  • CDL Integration: Parse Crystal Description Language strings to 3D geometry
  • Point Group Symmetry: All 32 crystallographic point groups supported
  • Half-Space Intersection: Robust geometry computation using scipy
  • 7 Crystal Systems: Cubic, tetragonal, orthorhombic, hexagonal, trigonal, monoclinic, triclinic
  • Miller Indices: Full support for 3-index (hkl) and 4-index (hkil) notation

Core API

Geometry Generation

from cdl_parser import parse_cdl
from crystal_geometry import cdl_to_geometry, cdl_string_to_geometry

# From CDL string directly
geom = cdl_string_to_geometry("cubic[m3m]:{111}")

# From parsed description (more control)
desc = parse_cdl("cubic[m3m]:{111}@1.0 + {100}@1.3")
geom = cdl_to_geometry(desc, c_ratio=1.0)

Convenience Constructors

from crystal_geometry import (
    create_octahedron,
    create_cube,
    create_dodecahedron,
    create_truncated_octahedron,
)

# Regular polyhedra
octahedron = create_octahedron(scale=1.0)
cube = create_cube(scale=1.0)
dodecahedron = create_dodecahedron(scale=1.0)
truncated = create_truncated_octahedron(octahedron_scale=1.0, cube_scale=1.3)

CrystalGeometry Class

from crystal_geometry import CrystalGeometry

geom = cdl_string_to_geometry("cubic[m3m]:{111}")

# Properties
geom.vertices      # Nx3 numpy array of vertex positions
geom.faces         # List of face vertex indices
geom.face_normals  # List of unit normal vectors
geom.face_forms    # Form index for each face
geom.face_millers  # Miller indices for each face

# Methods
geom.get_edges()           # Get unique edges as vertex pairs
geom.center()              # Compute centroid
geom.scale_to_unit()       # Scale to fit unit sphere
geom.translate(offset)     # Translate by vector
geom.euler_characteristic()  # V - E + F (should be 2)
geom.is_valid()            # Verify geometry integrity
geom.to_dict()             # Export to dictionary

Symmetry Operations

from crystal_geometry import (
    get_point_group_operations,
    generate_equivalent_faces,
    miller_to_normal,
    LatticeParams,
)

# Get symmetry operations for a point group
ops = get_point_group_operations('m3m')  # 48 operations
ops = get_point_group_operations('6/mmm')  # 24 operations

# Generate equivalent faces from one Miller index
faces = generate_equivalent_faces(1, 1, 1, 'm3m')  # 8 faces for {111}
faces = generate_equivalent_faces(1, 0, 0, 'm3m')  # 6 faces for {100}

# Convert Miller indices to normal vector
lattice = LatticeParams.cubic()
normal = miller_to_normal(1, 1, 1, lattice)

# Create lattice parameters
cubic = LatticeParams.cubic()
tetragonal = LatticeParams.tetragonal(c_ratio=1.5)
hexagonal = LatticeParams.hexagonal(c_ratio=1.2)

Crystal Systems and Point Groups

System Point Groups
Cubic m3m, 432, -43m, m-3, 23
Tetragonal 4/mmm, 422, 4mm, -42m, 4/m, -4, 4
Hexagonal 6/mmm, 622, 6mm, -6m2, 6/m, -6, 6
Trigonal -3m, 32, 3m, -3, 3
Orthorhombic mmm, 222, mm2
Monoclinic 2/m, 2, m
Triclinic -1, 1

Examples

Diamond-like Crystal

# Octahedron truncated by cube
geom = cdl_string_to_geometry("cubic[m3m]:{111}@1.0 + {100}@1.3")
assert len(geom.faces) == 14  # 8 octahedron + 6 cube

Garnet-like Crystal

# Dodecahedron with trapezohedron
geom = cdl_string_to_geometry("cubic[m3m]:{110}@1.0 + {211}@0.6")

Hexagonal Prism

# Prism with pinacoid termination
geom = cdl_string_to_geometry("hexagonal[6/mmm]:{10-10}@1.0 + {0001}@0.5")

Quartz-like Crystal

# Prism with rhombohedron
geom = cdl_string_to_geometry("trigonal[-3m]:{10-10}@1.0 + {10-11}@0.8")

Requirements

  • Python >= 3.10
  • numpy >= 1.20.0
  • scipy >= 1.7.0
  • cdl-parser >= 1.0.0

Documentation

See crystal-geometry.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_geometry-1.0.4.tar.gz (79.0 kB view details)

Uploaded Source

Built Distributions

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

gemmology_crystal_geometry-1.0.4-cp313-cp313-macosx_11_0_arm64.whl (132.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

gemmology_crystal_geometry-1.0.4-cp312-cp312-macosx_11_0_arm64.whl (131.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

gemmology_crystal_geometry-1.0.4-cp311-cp311-macosx_11_0_arm64.whl (131.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

gemmology_crystal_geometry-1.0.4-cp310-cp310-macosx_11_0_arm64.whl (130.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file gemmology_crystal_geometry-1.0.4.tar.gz.

File metadata

File hashes

Hashes for gemmology_crystal_geometry-1.0.4.tar.gz
Algorithm Hash digest
SHA256 6b0bb5cd8b3394d22a16e6f98ffc6713a38a4a88945e7599fc78ad6be68b7a40
MD5 569740d9f5d3deb268eb064c7606040d
BLAKE2b-256 ccbe680ad355eca5883d07b83a0f167872d954ff26c091f2ca2f0a5d45e6f0c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_geometry-1.0.4.tar.gz:

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

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_geometry-1.0.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gemmology_crystal_geometry-1.0.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 484029106aee0fddf2af7a8f3049c1306e9b042de147583726cb613dc004abc9
MD5 6a708e4fcf0d09c05b8f288ceb0ff926
BLAKE2b-256 031165708803218395fb9a864ac3d956cfc7a88e2734ef78931deb45b81f0e1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_geometry-1.0.4-cp313-cp313-macosx_11_0_arm64.whl:

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

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_geometry-1.0.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gemmology_crystal_geometry-1.0.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc41ff9966e667535cfcce2652457ce86d448ca7e0cf7723c8ba420b4ea26e70
MD5 68964eea6893c91e30719416fa9eb168
BLAKE2b-256 414b1a54ddc93332d2aab0e4b8153cee6412f59147804ada88fc0b6115f39d44

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_geometry-1.0.4-cp312-cp312-macosx_11_0_arm64.whl:

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

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_geometry-1.0.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gemmology_crystal_geometry-1.0.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 20b37de184d46a360e37d93982ce30c1a70de01c01ca6b528bfcff278b71f767
MD5 04daee617cc87b76aba427317194a3ef
BLAKE2b-256 97968124e4c46fc8a7ebac844c5461996a6e93171676ddb3e9881687e68feb70

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_geometry-1.0.4-cp311-cp311-macosx_11_0_arm64.whl:

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

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_geometry-1.0.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gemmology_crystal_geometry-1.0.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 73ac0d75562329a420edf16639dd31a51ca750262b471308f4bcae2c528334f8
MD5 07c3eeb280684a7a0e322a9dbaeb7c3b
BLAKE2b-256 e70815b40a2e7639a1fb7f734c994996ae7d5f850607b78a0b530a68ac7d9355

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_crystal_geometry-1.0.4-cp310-cp310-macosx_11_0_arm64.whl:

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

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