The script uses Python 3 modules, syntax and objects so can only be used as is with Metasequoia 4.
There are two Python scripts.
The first script which must be named “ms3dreader.py” is the script that has the function to read the *.ms3d file and return the data.
“ms3dreader.py” is imported into the main script so must be copied to the same folder as the main script.
The script to open and run in Metasequoia’s Script Editor is listed below.
# Metasequoia 4 Python script # ReadMS3D.py ''' Imports a model from a MilkShape3D *.ms3d file No scaling –> model may be small ''' # import Python's os.path module so can extract filename # and file extension from full path import os.path # import module that has function to read *.ms3d # ms3dreader.py must be in same folder as this script import ms3dreader # global variables doc = MQSystem.getDocument() # function definitions def mqprint(message): try: print(message) except: MQSystem.println(repr(message)) return # main script function def main(): # create the OpenFile dialog as a child control of Metasequoia od = MQWidget.OpenFileDialog(MQWidget.getMainWindow()) # add filter for MilkShape3D files od.addFilter("MilkShape3D files (*.ms3d)|*.ms3d") # good practise to always have All Files option od.addFilter("All Files (*.*)|*.*") # show the dialog if od.execute(): # user selected a file and clicked ok # store path string in variable named f f = od.filename # extract file's extension using an os.path function path,ext = os.path.splitext(f) if ext.lower() in [".ms3d"]: # correct extension so extract filename and store in name path,name = os.path.split(f) # unused # print path to file mqprint(f) # read the file data = ms3dreader.readMS3D(f,True) if not data: return obj = MQSystem.newObject() for v in data["vertices"]: obj.addVertex(*v) # need to reverse winding of faces otherwise all inverted faces = [[t[0],t[2],t[1]] for t in data["faces"]] uvs = [[t[0],t[2],t[1]] for t in data["uvs"]] for t in faces: obj.addFace(t) for index in range(obj.numFace): if index < len(uvs)-1: uv = MQSystem.newCoordinate(uvs[index][0][0],uvs[index][0][1]) obj.face[index].setCoord(0, uv) uv = MQSystem.newCoordinate(uvs[index][1][0],uvs[index][1][1]) obj.face[index].setCoord(1, uv) uv = MQSystem.newCoordinate(uvs[index][2][0],uvs[index][2][1]) obj.face[index].setCoord(2, uv) else: pass # hide objects in document for ob in doc.object: ob.visible = 0 idx = doc.addObject(obj) # make imported model current object doc.currentObjectIndex = idx else: # user selected incorrect file type mqprint("Not an *.ms3d file") else: # user clicked "Cancel" mqprint("No file selected") return if __name__ == "__main__": # clear output window MQSystem.clearLog() # run main function main() # let user know script finished mqprint("Script finished")
This post discusses some of the basics of using the Script Editor in Metasequoia. [link]
No comments:
Post a Comment