Skip to main content

Extension package for maliang to simple 3D drawings

Project description

maliang-three

https://xiaokang2022.github.io/maliang/

Extension package of maliang for simple 3D drawings

Version Downloads Total Downloads Size
Watchers Forks Stars Issues Pull Requests Discussions

Insights

Star History Chart

📦 Installation

pip install maliang-three

👀 Preview

preview

import itertools
import math
import statistics

import maliang
from maliang import theme, three

root = maliang.Tk(title="maliang-three")
space = three.Space(auto_zoom=True, free_anchor=True, keep_ratio="min")
space.light.update(bg="white")
space.dark.update(bg="black")
space.configure(bg="black" if theme.get_color_mode() == "dark" else "light")
space.place(width=1280, height=720, x=640, y=360, anchor="center")
space.update()  # NOTE: This line is very important!

### Inside ###

m = 150 * math.sqrt(50 - 10*math.sqrt(5)) / 10
n = 150 * math.sqrt(50 + 10*math.sqrt(5)) / 10
points = []
dis_side = (
    150
    * (3 * math.sqrt(3) + math.sqrt(15))
    / 12
    / ((math.sqrt(10 + 2 * math.sqrt(5))) / 4)
)
count, color_lst = 0, ["00", "77", "FF"]
colors = [f"#{r}{g}{b}" for r in color_lst for g in color_lst for b in color_lst]

for i in m, -m:
    for j in n, -n:
        points.append([0, j, i])
        points.append([i, 0, j])
        points.append([j, i, 0])

for p in itertools.combinations(points, 3):
    dis = math.hypot(*[statistics.mean(c[i] for c in p) for i in range(3)])
    if math.isclose(dis, dis_side):
        three.Plane(space, *p, fill=colors[count], outline="grey")
        count += 1

### Outside ###

r = 250

O = three.Point(space, (0, 0, 0), fill='white', size=3)
X = three.Line(space, (0, 0, 0), (1, 0, 0), fill='')
Y = three.Line(space, (0, 0, 0), (0, 1, 0), fill='')
Z = three.Line(space, (0, 0, 0), (0, 0, 1), fill='')

ring: dict[str, list[three.Text3D]] = {'x': [], 'y': [], 'z': []}
line: dict[str, list[three.Text3D]] = {'x': [], 'y': [], 'z': []}

for i in range(26):
    t = chr(65+i)
    φ = i/26 * math.tau
    c1 = r * math.sin(φ)
    c2 = r * math.cos(φ)
    ring['x'].append(three.Text3D(space, (0, c1, c2), text=t, fill='red'))
    ring['y'].append(three.Text3D(space, (c1, 0, c2), text=t, fill='forestgreen'))
    ring['z'].append(three.Text3D(space, (c1, c2, 0), text=t, fill='royalblue'))

for i in range(10):
    t = str(i)
    c = (i+1) * 500/11 - r
    line['x'].append(three.Text3D(space, (c, 0, 0), text=t, fill='#00FFFF'))
    line['y'].append(three.Text3D(space, (0, c, 0), text=t, fill='#FF00FF'))
    line['z'].append(three.Text3D(space, (0, 0, c), text=t, fill='#FFFF00'))


def text_animation() -> None:
    """Make the Text spin."""
    for obj3D in ring['x']:
        obj3D.rotate(0.05, axis=X.coordinates)
    for obj3D in ring['y']:
        obj3D.rotate(0.05, axis=Y.coordinates)
    for obj3D in ring['z']:
        obj3D.rotate(0.05, axis=Z.coordinates)
    for obj3D in line['x']:
        obj3D.rotate(-0.05, axis=Y.coordinates)
    for obj3D in line['y']:
        obj3D.rotate(-0.05, axis=Z.coordinates)
    for obj3D in line['z']:
        obj3D.rotate(-0.05, axis=X.coordinates)
    for obj3D in space.components:
        obj3D.rotate(0, -0.01, 0.01, center=O.center())
        obj3D.update()
    space.space_sort()
    root.after(10, text_animation)


text_animation()
root.mainloop()

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

maliang_three-1.0.4.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

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

maliang_three-1.0.4-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: maliang_three-1.0.4.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for maliang_three-1.0.4.tar.gz
Algorithm Hash digest
SHA256 283e5d6c2db2dfe9b78c7ede43d036eceef03961fd01ac8b97ae30f5b6d06acf
MD5 02b317a12013570bc87beb4644d0b276
BLAKE2b-256 c41c52799e554a7eedee8241c4f1b4bb89fbea014fbbe4973f7e2fd8403a5cea

See more details on using hashes here.

File details

Details for the file maliang_three-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: maliang_three-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for maliang_three-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f88ee70acc824f626b01a1a8f56a2d8e0b3829feb8e3d0a9d82c8833b45851de
MD5 e36170d138b76a899568a2316ce8a95e
BLAKE2b-256 062f52401d6264604fe3bfe688804de3d1312fddf89d078505473057afc20e85

See more details on using hashes here.

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