#-*-coding:utf-8 -*-
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4 import *
import sys
import unreal
import glob
actor_list = []
actor_count=[]
classtype = [unreal.StaticMeshActor, unreal.SkeletalMeshActor, unreal.PostProcessVolume,
unreal.SphereReflectionCapture, unreal.DirectionalLight, unreal.LightmassImportanceVolume
, unreal.PlayerStart]
class Test2(QtGui.QMainWindow):
def __init__(self): #Method #self는 객체의 인스턴스 그자체.
#3.0이상 버전에서 super().__init__()
# 다른 메소스에서 변수 사용할려면 self붙임.
super(QtGui.QMainWindow, self).__init__()#3.0이상 버전에서 super().__init__()
#self.setupUi()
self.tableUi()
self.resize(1000,500)
self.move(150,150)
btn1 = QtGui.QPushButton("getLevelActor", self)
btn1.move(250, 0)
# btn1.clicked.connect(self.)
def tableUi(self):
self.boxLayout = QtGui.QVBoxLayout()
self.boxLayout2 = QtGui.QVBoxLayout()
self.treeWidget = QtGui.QTreeWidget(self)
self.label = QtGui.QLabel("Label")
self.boxLayout.addWidget(self.treeWidget)
self.boxLayout.addWidget(self.label)
self.treeWidget.resize(1000,500)
self.treeWidget.setHeaderLabel("HeaderLabel")
self.toplevelList = []
self.toplevelitem =[]
actor_count = self.get_actors_count_level()
self.actors = unreal.EditorLevelLibrary.get_all_level_actors()
childitem = [] #--- 액터를 담을 아이템
childlevelList =[] #-- 버튼으로 보여줄 각각의 액터.
# 아래 넣어줄 toplevelList[] 의 값
for z in range(len(classtype) - 1):
self.toplevelList.append(QtGui.QLabel()) # --- 리스트에 라벨 추가할떄마다 아래 값을 대입.
self.toplevelList[z] = QtGui.QLabel(str(classtype[z]) + str(actor_count[z].values()))
for s in range(len(classtype)-1):
actor_by_class = unreal.EditorFilterLibrary.by_class(self.actors, classtype[s])
self.toplevelitem.append(QtGui.QTreeWidgetItem()) # -- QTreeWidgetItem 리스트에 추가.
self.treeWidget.addTopLevelItem(self.toplevelitem[s]) # -- QTreeWidgetItem 비어있는 아이템을 Toplevel에 추가.
self.treeWidget.setItemWidget(self.toplevelitem[s], 0, self.toplevelList[s]) # -- QTreeWidgetItem[]에 toplevelList[]의 값을 넣어줌.
for i in range(len(actor_by_class)):
childitem.append(QtGui.QTreeWidgetItem()) # -- childitem용 QTreeWidgetItem 리스트에 추가.
self.toplevelitem[s].addChild(childitem[i]) # -- 각각의 Toplevel item에 비어있는 아이템을 액터수만큼 생성.
childlevelList.append(QtGui.QPushButton()) # -- QPushButton 리스트에 추가.
childlevelList[i] = QtGui.QPushButton(str(actor_by_class[i])) # -- 각각의 액터클래스이름을 받아서 버튼을 리스트로
self.treeWidget.setItemWidget(childitem[i], 0, childlevelList[i]) # -- childitem에다가 위 버튼 값을 넣어줌
# init list -- 이 코드 없어서 리스트 제대로 안나오는걸 하루넘게 못 잡음.ㅠㅠ
del childitem[:]
def chilsDes(self):
print"clicked"
#테이블 에디터 금지.
# self.table.setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
# self.table.setHorizontalHeaderLabels([U"코드", U"설정"])
# self.table.cellDoubleClicked.connect(self.cell_was_clicked)
def table2Ui(self):
self.table1 = QtGui.QTableWidget(self)
self.table1.move(0, 0)
self.table1.resize(200, 200)
print"xxxxxxxxxxxxxxxxxxxxxxxx"
# self.table.cellDoubleClicked.connect(self.cell_was_clicked)
def setupUi(self):
self.setWindowTitle( "title")
self.resize(500, 880)
self.move(400,0)
btn1 = QtGui.QPushButton("getLevelActor", self)
btn2 = QtGui.QPushButton(U"임포트", self)
btn3 = QtGui.QPushButton(U"LOD갯수", self)
btn4 = QtGui.QPushButton("ClickMe", self)
btn5 = QtGui.QPushButton(U"레벨 정보 얻기", self)
btn1.move(50,50)
btn2.move(150, 50)
btn3.move(150, 100)
btn4.move(150, 150)
btn5.move(250, 50)
btn1.clicked.connect(self.table_set_item)
# --- 클래스 이름과 클래스를 사용하고 있는 액터 갯수.
def get_class_count(self, class_name):
actors = unreal.EditorLevelLibrary.get_all_level_actors()
# --- 클래스로 리스트안에서 선택.
actor_by_class = unreal.EditorFilterLibrary.by_class(actors, class_name)
# --- 이름과 수를 딕셔너리로 저장.
class_count = {class_name:len(actor_by_class)}
actor_count.append(class_count)
return actor_by_class
# --- 지정한 클래스 타입에 따라 실행하고 난뒤 최종 리스트값(actor_count)을 반환.
def get_actors_count_level(self):
for i in classtype:
self.get_class_count(i)
return actor_count
def get_class(self, actor, class_name):
if actor.static_class() == class_name.static_class():
actor_array = {actor.get_actor_label(): str(actor.static_class())}
actor_list.append(actor_array)
def get_all_actors_Level(self):
# --- 리스트안의 데이타만 삭제.(초기화)
del actor_list [:]
actors = unreal.EditorLevelLibrary.get_all_level_actors()
classtypecount = len(classtype)
for i in actors:
for s in range(0, classtypecount):
self.get_class(i, classtype[s] )
return actor_list
# --- 테이블 아이템 세팅.
def table_set_item(self):
# --- 레벨상 액터들 정보값을 리턴 받는다
actor_list = self.get_all_actors_Level()
actor_count = self.get_actors_count_level()
print actor_count
# actor_list.sort()
actor_list_lens = len(actor_list)
# --- 액터들 갯수에 따라 행렬 갯수 구분(데이타 정보에 따라 수정)
self.table.setRowCount(len(classtype))
#self.table.setRowCount(actor_list_lens)
self.table.setColumnCount(len(actor_list[0]) + 2)
# --- 정해진 액터 리스트별 값들을 테이블에 넣어준다.
for i in range(0, len(classtype)):
# for i in range(0, actor_list_lens):
# --- actor_list[] #액터 리스트안 i번째 딕셔너리의 키값 가져오기
actor_list_key = str(actor_list[i].keys())
actor_list_count = str(actor_count[i].values())
actor_list_name = str(actor_count[i].keys())
# --- 액터리스트중 키값을 데이타로 받는 아이템 생성.
items = QtGui.QTableWidgetItem(actor_list_key)
items_count = QtGui.QTableWidgetItem(actor_list_count)
items_list = QtGui.QTableWidgetItem(actor_list_name)
# --- 생성된 아이템을 테이블에 set
self.table.setItem(i, 0, items_list)
self.table.setItem(i, 1, items_count)
self.table.itemDoubleClicked.connect(self.cell_was_clicked)
def cell_was_clicked(self):
tree_item = QtGui.QTreeWidgetItem("aaaaaa")
tree_widget = QtGui.QTreeWidget(self)
tree_widget.addTopLevelItem(tree_item)
layout = QtGui.QStringListModel()
self.setLayout(layout)
# actor_list_key = str(actor_list[i].keys())
# items = QtGui.QTableWidgetItem(actor_list_key)
row = self.table.currentRow()
col = self.table.currentColumn()
print("Row %d and Col %d was Clicked" %(row, col))
# self.table.setItem(i, 2, items)
def testme(self):
print"aaaaaaaaaaaaaaaaaa"
# layout = QtGui.QGridLayout()
# layout.addWidget(self.table,0,0)
# self.setLayout(layout)
def get_Num_Verts(Mesh, lod_index=0):
if Mesh == unreal.SkeletalMesh:
verts = unreal.EditorSkeletalMeshLibrary.get_num_verts(Mesh, lod_index)
if Mesh == unreal.StaticMesh:
verts = unreal.EditorStaticMeshLibrary.get_num_verts(Mesh, lod_index)
print verts
def success_Message(self):
Qbox = QtGui.QMessageBox
# Qbox.setGeometry(self, 30, 300, 2000, 10)
Qbox.about(self, "message", U"완료하였습니다.")
app= None
if not QtGui.QApplication.instance():
app=QtGui.QApplication(sys.argv)
dialog = Test2() # dialog = 객체를 생성할땐 생성자를 사용., 인스턴스(해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체)
dialog.show()
#app.exec_() -- 이벤트 루프 생성.