sizedapparel/Tools/SizedApparelTool/main.py

128 lines
4.2 KiB
Python

import sys
import math
from PyQt5.QtCore import QPoint
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QToolTip , QMainWindow, QAction, qApp , QHBoxLayout, QVBoxLayout, QFrame
from PyQt5.QtWidgets import QRadioButton, QCheckBox, QGroupBox, QGridLayout, QMenu, QTabWidget, QDesktopWidget, QLabel, QStatusBar
from PyQt5.QtGui import QPixmap
from PyQt5.QtGui import QFont
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
class MyApp(QWidget):
graphic_image = QPixmap
lbl_img = QLabel
def __init__(self):
super().__init__()
self.setWindowTitle('ImagePointFinder')
self.statusbar = QStatusBar()
self.statusbar.showMessage("Click Image to Get Position")
self.initUI()
self.setAcceptDrops(True)
self.posX = 0.0
self.posY = 0.0
self.Rot = 0.0
self.Len = 0
#self.setStatusBar(self.statusbar)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
files = [u.toLocalFile() for u in event.mimeData().urls()]
for f in files:
print(f)
self.graphic_image = QPixmap(files[0])
self.lbl_img.setPixmap(self.graphic_image.scaled(512,512))
#self.lbl_img.frame = QFrame(self.lbl_img.frame)
self.lbl_img.setFrameShape(QFrame.Box)
def mousePressEvent(self, event):
#event.x()
#print()
self.posX = event.globalX() - self.lbl_img.mapToGlobal(QPoint(0,0)).x()
self.posY = event.globalY() - self.lbl_img.mapToGlobal(QPoint(0,0)).y()
self.Rot = 0.0
self.Len = 0.0
U = 0
V = 0
if(self.lbl_img.pixmap()):
U = (self.posX / self.lbl_img.pixmap().height())-0.5
V = (self.posY / self.lbl_img.pixmap().width())*-1 + 0.5
txt = "Clicked Position ; Position(x,y) =({0:.3f}, {1:.3f}) , Rotation = {2:.1f}, Length = {3:.3f} ".format(U, V, self.Rot, self.Len)
self.statusbar.showMessage(txt)
#print(event.globalX())
def mouseMoveEvent(self, event):
target_posX = event.globalX() - self.lbl_img.mapToGlobal(QPoint(0,0)).x()
target_posY = event.globalY() - self.lbl_img.mapToGlobal(QPoint(0,0)).y()
self.Rot = math.degrees( math.atan2(target_posY - self.posY, target_posX - self.posX)) + 90
if(self.Rot < 0):
self.Rot = self.Rot + 360
if(self.lbl_img.pixmap()):
U = (self.posX / self.lbl_img.pixmap().height())-0.5
V = (self.posY / self.lbl_img.pixmap().width())*-1 + 0.5
tU = target_posX / self.lbl_img.pixmap().height()
tV = target_posY / self.lbl_img.pixmap().width()
self.Len = math.fabs(math.dist((U,V),( tU, tV)))
txt = "Clicked Position ; Position(x,y) =({0:.3f}, {1:.3f}) , Rotation = {2:.1f}, Length = {3:.3f} ".format(U, V, self.Rot, self.Len)
self.statusbar.showMessage(txt)
def initUI(self):
tab1 = QWidget()
tab2 = QWidget()
tabs = QTabWidget()
tabs.addTab(tab1, 'Texture Pivot and Point Editor')
#tabs.addTab(tab2, 'Sized Texture List Editor')
vbox = QVBoxLayout()
vbox.addWidget(tabs)
self.graphic_image = QPixmap()
self.lbl_img = QLabel()
#self.lbl_img.setPixmap(self.graphic_image)
self.lbl_img.setText("Drag and Drop Image Here")
vbox2 = QVBoxLayout()
vbox2.addWidget(self.lbl_img)
vbox2.addWidget(self.statusbar)
tab1.setLayout(vbox2)
self.setLayout(vbox)
#print(self.hasMouseTracking())
self.setMouseTracking(True)
#print(self.hasMouseTracking())
self.setGeometry(500, 500, 500, 400)
self.center()
self.show()
#self.statusbar.show()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())