본문 바로가기

Code/cinema4d & 3dsmax

[3dsMax python] GUI with pymxs

파일탐색기

Pyside2를 사용하지 않고 파일을 불러와봤습니다. 

 

from pymxs import runtime as rt

path = os.path.dirname(os.path.abspath(__file__))
path_to_file = rt.getOpenFileName(caption="Open A Test Excel:", filename=path+'\\')

 

폴더경로를 가져올려면 아래처럼 하시면 됩니다.

 

from pymxs import runtime as rt

rtrt = rt.getSavepath()
print rtrt

Dialog Example

wikidocs.net/35742\

max gui는 pyside2 를 사용하는데, 아주 좋은 문서가 나왔습니다. 

저걸 보고 Dialog 창을 만들어봤습니다.

 

from PySide2.QtWidgets import QDialog, QPushButton, QVBoxLayout, QLabel, QLineEdit


class MyDialog(QDialog):
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)
        self.setWindowTitle('Hello, Velbie!')
        self.setupUi()

    def setupUi(self):
        verticalLayout = QVBoxLayout()
        self.resize(273, 100)
        label = QLabel('hello')
        verticalLayout.addWidget(label)

        lineEdit = QLineEdit()
        lineEdit.setReadOnly(True)
        lineEdit.setText("Heelo")
        verticalLayout.addWidget(lineEdit)

        ok_button = QPushButton("Ok")
        ok_button.clicked.connect(self.accept)
        verticalLayout.addWidget(ok_button)
        self.setLayout(verticalLayout)


if __name__ == '__main__':
    dialog = MyDialog()
    dialog.show()

    if dialog.exec_():
        print 'helo'

 

항상 위에 띄우기

3ds max 에서 GUI 플러그인을 만들다면 반드시 이 속성을 활용해야 합니다.

 

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
class helloWindow(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent, Qt.WindowStaysOnTopHint)        
        label = QLabel("Hello World",self)
        
dialog = helloWindow()
dialog.show()

 

 

외부파일 reload

3ds max 에서 import 된 파일을 수정하면, 3ds max를 껐다 켜야 수정된 내용이 스크립트에 적용됩니다. 

이런 현상은 runtime이여서 발생하는 것 같습니다.

그래서 imp 모둘을 이용해서 reload 해주면 됩니다. 

import imp
from mypackage import mymodule
imp.reload(mymodule)

관련자료

맥스스크립트 File Dialogs:

help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__files_GUID_D4B43A33_8342_4BC9_80AB_91460861D37C_htm

 

Pyside2: 

wikidocs.net/35742\

 

메뉴만들기:

github.com/ADN-DevTech/3dsMax-Python-HowTos/tree/master/src/packages/menuhook