PyQt5 embedded 3D attitude and model visualization using PyVista/VTK
Project description
qtattitude3d
qtattitude3d, PyQt5 içine gömülebilen, PyVista/VTK tabanlı bir 3B duruş ve model görüntüleme paketidir.
Temel amacı, bir OBJ + MTL modelini yükleyip bunu yer istasyonu, telemetri paneli veya benzeri masaüstü arayüzlerde yeniden kullanılabilir bir widget olarak sunmaktır.
Kurulum
PyPI üzerinden (Yayına girdikten sonra)
pip install qtattitude3d
Kaynak Koddan Kurulum
git clone https://github.com/tayfurcnr/qtattitude3d.git
cd qtattitude3d
pip install -e .
Paket Ne Sağlar?
- PyQt5 içine eklenebilen hazır bir 3B widget
OBJ + MTLmodel yükleme desteği- Roll, pitch, yaw açılarını programatik olarak uygulama
- Başlangıç kamera ayarlarını dışarıdan verme
- Modelin başlangıç ölçeğini dışarıdan ayarlama
- Hazır tema seçenekleri arasında geçiş yapma
- Render kalitesini performans ihtiyacına göre seçme
- Kamera görünümü ve yakınlaştırma düzeyini koddan yönetme
- Arka plan, grid, eksen ve zemin görünümünü kontrol etme
- Paket içinden çalışan sade bir demo pencere
- GUI olmayan ortamlarda kontrollü hata mesajı
Paket Yapısı
widgets/Ana kullanıcı bileşenleri.QtAttitude3DWidgetburada bulunur.io/OBJ + MTLyükleme ve sahne hazırlama kodları.models/Paket içinde kullanılan veri modelleri.core/Paket içi yol yardımcıları ve çalışma zamanı kontrolleri.demo/Demo penceresi ve demo giriş noktası.assets/Paketle birlikte gelen örnek model dosyaları.
Dışarı Açık API
Paket kökünden doğrudan kullanılabilen isimler:
from qtattitude3d import (
QtAttitude3DWidget,
QtAttitudeDemoWindow,
PACKAGE_ROOT,
ASSETS_DIR,
get_asset_path,
get_demo_model_path,
)
QtAttitude3DWidget
Ana 3B widget sınıfıdır. Bir PyQt5 layout içine doğrudan eklenebilir.
Kurucu parametreleri:
parentStandart PyQt ebeveyn widget referansı.backgroundArka plan rengi. Tek renk verilebilir ya da iki elemanlı tuple/list ile gradyan tanımlanabilir. Örnek:"#0f172a"veya("#08111f", "#1b2b45")grid_colorGrid çizgilerinin rengi.show_gridWidget açıldığında grid görünür mü.show_axesWidget açıldığında eksen göstergesi görünür mü.camera_positionBaşlangıç kamera konumu. Biçim:[(kamera_x, kamera_y, kamera_z), (odak_x, odak_y, odak_z), (up_x, up_y, up_z)]initial_anglesBaşlangıç roll, pitch, yaw değerleri. Biçim:(roll, pitch, yaw)model_scaleModelin başlangıç ölçek katsayısı.1.0normal ölçektir.1.25,1.5,2.0gibi değerlerle model başlangıçta daha büyük görünür.themeHazır görünüm teması. Varsayılan temamidnightdeğeridir. Mevcut temalar:midnight,dark,light,sunsetrender_qualityRender kalitesi profili. Mevcut değerler:performance,balanced,qualityVarsayılan değerbalancedtir.
Örnek kullanım:
from qtattitude3d import QtAttitude3DWidget
widget = QtAttitude3DWidget(
background=("#08111f", "#1b2b45"),
grid_color="#6b7c93",
show_grid=True,
show_axes=True,
camera_position=[(18, 12, 14), (0, 0, 0), (0, 0, 1)],
initial_angles=(0.0, 0.0, 0.0),
model_scale=1.25,
theme="midnight",
render_quality="balanced",
)
QtAttitude3DWidget Methodları
load_model(path)
Verilen OBJ modelini yükler.
Modelin yanında referans verilen MTL dosyası da kullanılır.
- Girdi:
path->strveyaPath - Dönüş:
TrueveyaFalse
Örnek:
widget.load_model("/tam/yol/model.obj")
load_scene(scene)
Önceden hazırlanmış sahne nesnesini doğrudan widget içine yükler.
Bu yöntem daha çok paket içi ya da ileri seviye kullanım içindir.
set_angles(roll, pitch, yaw, degrees=True)
Modele anlık açı uygular. Bu metod, açıları içsel olarak Quaterniona dönüştürerek "Gimbal Lock" oluşmasını engeller.
rollX ekseni etrafındaki dönüş (Yatış)pitchY ekseni etrafındaki dönüş (Yunuslama)yawZ ekseni etrafındaki dönüş (Sapma)
Not: Eksenler havacılık standartlarına (NED - North East Down) göre eşleştirilmiştir. Eğer modeliniz ters dönüyorsa açı değerlerini - ile çarpmanız gerekebilir.
Örnek:
widget.set_angles(roll=10.0, pitch=5.0, yaw=45.0)
set_camera_position(position)
Kamerayı yeni bir başlangıç/çalışma pozisyonuna alır.
Örnek:
widget.set_camera_position([(14, 10, 12), (0, 0, 0), (0, 0, 1)])
zoom_camera(factor)
Kamerayı mevcut bakış açısından yakınlaştırır veya uzaklaştırır.
1.2gibi bir değer yakınlaştırır.0.8gibi bir değer uzaklaştırır.
Örnek:
widget.zoom_camera(1.2)
widget.zoom_camera(0.8)
set_camera_view(view_name)
Hazır kamera görünümü uygular.
Kullanılabilir görünümler:
isometricfronttopright
Örnek:
widget.set_camera_view("top")
set_model_scale(scale)
Modelin ölçek katsayısını değiştirir.
Eğer model yüklenmişse yeniden yüklenerek yeni ölçek uygulanır.
Örnek:
widget.set_model_scale(1.6)
set_background(color)
Arka plan rengini değiştirir.
- Tek renk:
"#101826" - Gradyan:
("#08111f", "#1b2b45")
set_theme(theme_name)
Hazır tema uygular. Bu işlem arka plan, grid ve zemin görünümünü birlikte günceller.
Kullanılabilir temalar:
midnightdarklightsunset
Örnek:
widget.set_theme("light")
Render kalite profilleri
performanceEn akıcı profil. Görsel kalite bir miktar düşer ama etkileşim daha rahattır.balancedGünlük kullanım için önerilen dengeli profil.qualityEn yüksek kalite profili. Özellikle büyük modellerde daha fazla ekran kartı maliyeti oluşturur.
set_render_quality(render_quality)
Render kalite profilini çalışma anında değiştirir.
Örnek:
widget.set_render_quality("performance")
set_grid_visible(visible)
Grid görünürlüğünü açar veya kapatır.
Örnek:
widget.set_grid_visible(False)
set_grid_color(color)
Grid rengini değiştirir.
Örnek:
widget.set_grid_color("#475569")
set_axes_visible(visible)
Eksen göstergesini açar veya kapatır.
set_floor_visible(visible)
Arka plandaki zemin düzlemini açar veya kapatır.
reset_camera()
Kamerayı mevcut başlangıç ayarına göre sıfırlar.
get_scene_stats()
Yüklenen sahne hakkında özet bilgi döndürür.
Örnek dönüş:
{
"group_count": 40,
"face_count": 473462,
"vertex_count": 672484,
"source_path": "/tam/yol/model.obj",
}
QtAttitude3DWidget Sinyalleri
modelLoaded
Model başarıyla yüklendiğinde yayılır.
Parametre olarak yüklenen dosyanın tam yolunu taşır.
modelLoadFailed
Model yüklenemediğinde yayılır.
Parametre olarak hata mesajını taşır.
Örnek:
widget.modelLoaded.connect(print)
widget.modelLoadFailed.connect(print)
QtAttitudeDemoWindow
Paketle birlikte gelen örnek pencere sınıfıdır.
İçinde:
- sol tarafta roll / pitch / yaw kontrolleri
- tema ve render kalitesi seçim alanları
- kamera görünümü ve yakınlaştırma düğmeleri
- sağ tarafta
QtAttitude3DWidget
bulunur.
Kurucu parametreleri:
model_pathAçılışta yüklenecek model yoluwindow_titlePencere başlığıwindow_sizeBaşlangıç pencere boyutu, örnek:(1400, 900)backgroundgrid_colorshow_gridshow_axescamera_positioninitial_anglesmodel_scalethemerender_quality
Örnek:
from qtattitude3d import QtAttitudeDemoWindow
window = QtAttitudeDemoWindow(
window_title="Yer İstasyonu Demo",
window_size=(1400, 900),
show_grid=True,
show_axes=True,
camera_position=[(18, 12, 14), (0, 0, 0), (0, 0, 1)],
model_scale=1.25,
theme="sunset",
render_quality="performance",
)
Ek method:
set_window_size(width, height)
Demo penceresinin (stand-alone) boyutunu değiştirir. Ana uygulamalarda pencere yönetimi ana pencere (QMainWindow/QWidget) üzerinden yapılmalıdır.
Yardımcı Yol Fonksiyonları
PACKAGE_ROOT
Paket kök dizinini verir.
ASSETS_DIR
Paket içindeki assets/ dizinini verir.
get_asset_path(name)
Paket içindeki bir asset’in tam yolunu verir.
Örnek:
from qtattitude3d import get_asset_path
obj_path = get_asset_path("example/Drone.obj")
get_demo_model_path()
Paketle birlikte gelen demo modelinin tam yolunu verir.
Temel Kullanım Örneği
Bir PyQt5 penceresi içine widget eklemek için:
from PyQt5.QtWidgets import QVBoxLayout, QWidget
from qtattitude3d import QtAttitude3DWidget, get_demo_model_path
class AnaPencere(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout(self)
self.attitude_widget = QtAttitude3DWidget(
show_grid=True,
show_axes=True,
model_scale=1.25,
theme="midnight",
render_quality="balanced",
)
layout.addWidget(self.attitude_widget)
self.attitude_widget.load_model(get_demo_model_path())
self.attitude_widget.set_angles(roll=5.0, pitch=10.0, yaw=20.0)
Demo Çalıştırma
Paket demosunu çalıştırmak için:
python3 -m qtattitude3d
GUI olmayan ortamlarda paket çökmez; bunun yerine temiz bir açıklama mesajı vererek çıkar.
Notlar
- Mouse ile sahne üzerinde yakınlaşma, uzaklaşma ve döndürme yapılabilir.
- Demo penceresinde tema seçimi yapılabilir.
camera_position, başlangıç kadrajını belirler.model_scale, modelin sahnedeki başlangıç ölçeğini belirler.theme, arka plan ve sahne stilini hızlıca değiştirir.render_quality, görüntü kalitesi ile akıcılık arasındaki dengeyi belirler.- İkisi birbirinden farklıdır ve birlikte kullanılabilir.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qtattitude3d_kairos-0.1.0.tar.gz.
File metadata
- Download URL: qtattitude3d_kairos-0.1.0.tar.gz
- Upload date:
- Size: 10.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
714b9df79f00143775fc6ebddaec5733b293992ee285ae75615f536f7e7ba2b4
|
|
| MD5 |
76a03f1701485d7adbdad5431d22567f
|
|
| BLAKE2b-256 |
0681ea01b9659e462d7c3c15ab76b90080679e1cda874ab99710e2725089eb9a
|
File details
Details for the file qtattitude3d_kairos-0.1.0-py3-none-any.whl.
File metadata
- Download URL: qtattitude3d_kairos-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b2a9321d855be11e664486468861317363b5a046547287a4bf54d4babe16ae8
|
|
| MD5 |
8bd5c5b37ebc56b8987134708c29be7b
|
|
| BLAKE2b-256 |
860f1419e2827185efaee01064de7c975c1a392e95e524600b5159f5b0cb5678
|