Skip to main content

Библиотека для создания и отображения 3D объектов с помощью Tkinter

Project description

Py3DGraphics

Библиотека для создания и отображения 3D объектов с помощью Tkinter. Версия 0.2.0.

Особенности

  • Создание 3D объектов с точками, рёбрами и гранями
  • Вращение объектов в реальном времени
  • Z-сортировка для правильного отображения глубины
  • Полигональная заливка граней
  • Управление объектами с клавиатуры
  • Оптимизация производительности с использованием NumPy для векторных операций
  • Настраиваемая толщина линий рёбер
  • Независимая скорость вращения по осям X, Y, Z

Установка

pip install treeed

Быстрый старт

Создайте вращающийся куб в пару строк:

from py3dgraphics import create_cube, quick_scene

cube = create_cube()  # Куб по умолчанию
quick_scene(cube)     # Запуск сцены

Пример использования

from py3dgraphics import create_cube, quick_scene

# Создание кубов с разными размерами и скоростями
cube1 = create_cube(size=150, speed=0.02)  # Большой, быстрый
cube2 = create_cube(size=75, speed=0.005)  # Маленький, медленный

# Запуск сцены
quick_scene(cube1, cube2)

Расширенное использование

from py3dgraphics import create_cube, Scene3D
import time

# Создание кубов
cube = create_cube(size=150, speed=0.009, position=(300, 0, 0))
cube1 = create_cube(size=120, speed=0.007)

# Создание сцены
scene = Scene3D()
scene.add_object(cube)
scene.add_object(cube1)

# Анимация движения
xp = 300
while True:
    xp += 1
    cube.set_position(xp, 0, 0)  # Изменение позиции
    scene.update_scene()  # Обновление сцены
    time.sleep(0.05)

Цвета, заливка и управление анимацией

Объекты могут иметь разные цвета. Объекты вращаются только если их speed > 0. Для статичных объектов установите speed=0.

Новые возможности кастомизации:

  • Заливка граней: Параметр fill=True включает заливку граней цветом, заданным в color.
  • Цвет контура: Параметр outline_color позволяет задать цвет контура граней (по умолчанию "white").
  • По умолчанию: Кубы отображаются только с белыми контурами без заливки, как в предыдущих версиях.
from py3dgraphics import create_cube, quick_scene

# Создание кубов с разными скоростями и цветами
cube1 = create_cube(size=150, speed=0.02, color="red")  # Вращается
cube2 = create_cube(size=75, speed=0, color="blue")     # Не вращается

# Запуск сцены
quick_scene(cube1, cube2)

Настраиваемая толщина линий и скорость вращения по осям

Новые параметры кастомизации:

  • Толщина линий: Параметр line_width задаёт толщину рёбер (по умолчанию 2).
  • Скорость вращения по осям: Параметры speed_x, speed_y, speed_z позволяют задать независимую скорость вращения по каждой оси.
from py3dgraphics import create_cube, quick_scene

# Куб с толстыми линиями и вращением только по оси Y
cube1 = create_cube(size=150, speed_y=0.02, line_width=5, color="red")

# Куб с тонкими линиями и вращением по всем осям с разной скоростью
cube2 = create_cube(size=100, speed_x=0.01, speed_y=0.02, speed_z=0.005, line_width=1, color="blue")

# Запуск сцены
quick_scene(cube1, cube2)

Управление объектом клавиатурой

Вы можете управлять одним объектом с помощью клавиатуры (WASDQE для движения по осям X, Y, Z).

from py3dgraphics import create_cube, quick_scene

cube1 = create_cube(size=150, speed=0.02, color="red")
cube2 = create_cube(size=75, speed=0, color="blue")  # Управляемый

# Запуск сцены с управлением вторым кубом
quick_scene(cube1, cube2, player=cube2)

Или ручное управление:

from py3dgraphics import create_cube, Scene3D

scene = Scene3D()
scene.add_object(create_cube())
scene.add_object(create_cube(size=100, position=(200, 0, 0), speed=0, color="green"))
scene.set_player(scene.objects[1])  # Устанавливаем второго объекта как управляемого

scene.run()

Ручное создание объектов

from py3dgraphics import Point3D, Object3D, Scene3D

# Создание куба вручную
CUBE_SIZE = 150
points = [
    [-CUBE_SIZE, -CUBE_SIZE, -CUBE_SIZE],
    [ CUBE_SIZE, -CUBE_SIZE, -CUBE_SIZE],
    [ CUBE_SIZE,  CUBE_SIZE, -CUBE_SIZE],
    [-CUBE_SIZE,  CUBE_SIZE, -CUBE_SIZE],
    [-CUBE_SIZE, -CUBE_SIZE,  CUBE_SIZE],
    [ CUBE_SIZE, -CUBE_SIZE,  CUBE_SIZE],
    [ CUBE_SIZE,  CUBE_SIZE,  CUBE_SIZE],
    [-CUBE_SIZE,  CUBE_SIZE,  CUBE_SIZE]
]
edges = [
    (0, 1), (1, 2), (2, 3), (3, 0),
    (4, 5), (5, 6), (6, 7), (7, 4),
    (0, 4), (1, 5), (2, 6), (3, 7)
]
faces = [
    (0, 1, 2, 3),  # Задняя грань
    (4, 5, 6, 7),  # Передняя грань
    (0, 4, 7, 3),  # Левая грань
    (1, 5, 6, 2),  # Правая грань
    (0, 1, 5, 4),  # Нижняя грань
    (3, 2, 6, 7)   # Верхняя грань
]

# Создание объекта с гранями для заливки
cube = Object3D(points, edges, faces, speed=0.02, color="red", fill=True, line_width=3)
scene = Scene3D()
scene.add_object(cube)
scene.run()

Классы и функции

  • Point3D: Представляет 3D точку.
  • Object3D(points, edges=None, faces=None, speed=0.01, position=(0, 0, 0), color="white", fill=False, outline_color="white", line_width=2, speed_x=None, speed_y=None, speed_z=None): Представляет 3D объект с точками, рёбрами и гранями. Поддерживает вращение, позиционирование и кастомизацию внешнего вида.
  • Scene3D(width=600, height=600, title="3D Сцена", bg="black"): Управляет сценой и отображением объектов с поддержкой Z-сортировки и управления клавиатурой.
  • create_cube(size=150, speed=0.01, position=(0, 0, 0), color="white", fill=False, outline_color="white", line_width=2, speed_x=None, speed_y=None, speed_z=None): Создаёт куб с заданными параметрами размера, скорости вращения, позиции, цветов и толщины линий.
  • quick_scene(*objects, width=600, height=600, title="3D Сцена", bg="black", player=None): Быстро создаёт и запускает сцену с объектами. Параметр player позволяет назначить управляемый клавиатурой объект.

Лицензия

MIT

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

treeed-0.2.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

treeed-0.2.1-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file treeed-0.2.1.tar.gz.

File metadata

  • Download URL: treeed-0.2.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.0

File hashes

Hashes for treeed-0.2.1.tar.gz
Algorithm Hash digest
SHA256 8a305c89d45362b1f644347275e48b8cb94fb19635f50ec88101f746e754268c
MD5 3d944449e7cf6f139e8c937ffa4f6ea7
BLAKE2b-256 988e78f0276fccfe6caeabc66e889a58093523f57f5c52aad032df2b5130fad4

See more details on using hashes here.

File details

Details for the file treeed-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: treeed-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.0

File hashes

Hashes for treeed-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0721b1e63d8995e855e4e2f79baa423bef69609a4568f265f0e9f2070e248b84
MD5 7cc582f5e7823e6f2e2e3492eadc41ca
BLAKE2b-256 2bec03764a78c57a419ee4252627d5366dee341ef39d4f5264e01908f46d48f3

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