Added convert.py
This commit is contained in:
parent
14c27eb33b
commit
16e0e1ae00
|
@ -1,15 +1,15 @@
|
|||
# model-converter
|
||||
|
||||
This project aims to be a simple, lightweight, and useful 3D model editor
|
||||
This project aims to be a simple, lightweight, and useful 3D model editor.
|
||||
For the moment, only `obj` and `ply` ascii models are supported.
|
||||
|
||||
# Scripts
|
||||
|
||||
A few utilities to manage 3D models :
|
||||
- `ply2obj.py` that converts a `.ply` model to a `.obj` model
|
||||
- `obj2ply.py` that converts a `.obj` model to a `.ply` model
|
||||
- `convert.py` that converts any type of model to any other
|
||||
- `modelviewer.py` which is a simple script that renders a 3d model
|
||||
|
||||
## Formats supported
|
||||
## Supported format
|
||||
- Wavefront `.obj`
|
||||
- Stanford `.ply`
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from .obj import is_obj, OBJParser
|
||||
from .ply import is_ply, PLYParser
|
||||
from .obj import is_obj, OBJParser, OBJExporter
|
||||
from .ply import is_ply, PLYParser, PLYExporter
|
||||
|
||||
def load_model(path):
|
||||
parser = None
|
||||
|
@ -16,3 +16,21 @@ def load_model(path):
|
|||
parser.parse_file(path)
|
||||
|
||||
return parser
|
||||
|
||||
def export_model(model, path):
|
||||
exporter = None
|
||||
|
||||
if is_obj(path):
|
||||
exporter = OBJExporter(model)
|
||||
elif is_ply(path):
|
||||
exporter = PLYExporter(model)
|
||||
else:
|
||||
raise Exception("File format not supported")
|
||||
|
||||
return exporter
|
||||
|
||||
def convert(input, output):
|
||||
model = load_model(input)
|
||||
exporter = export_model(model, output)
|
||||
return str(exporter)
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import argparse
|
|||
import os
|
||||
|
||||
from conv3d.ply import PLYExporter
|
||||
from conv3d.loadmodel import load_model
|
||||
from conv3d.loadmodel import convert
|
||||
from functools import partial
|
||||
|
||||
def check_path(path, should_exist):
|
||||
|
@ -17,9 +17,8 @@ def check_path(path, should_exist):
|
|||
return path
|
||||
|
||||
def main(args):
|
||||
parser = load_model(args.input)
|
||||
exporter = PLYExporter(parser)
|
||||
result = str(exporter)
|
||||
output = args.output if args.output is not None else '.' + args.type
|
||||
result = convert(args.input, output)
|
||||
|
||||
if args.output is None:
|
||||
print(result)
|
||||
|
@ -36,6 +35,8 @@ if __name__ == '__main__':
|
|||
help='Input file (.obj)')
|
||||
parser.add_argument('-o', '--output', metavar='output',
|
||||
help='Output path')
|
||||
parser.add_argument('-t', '--type', metavar='type',
|
||||
help='Export type, useless if output is specified')
|
||||
args = parser.parse_args()
|
||||
args.func(args)
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
v 0.5 -0.5 -0.5
|
||||
v 0.5 0.5 -0.5
|
||||
v -0.5 0.5 -0.5
|
||||
v 0.5 -0.5 -0.5
|
||||
v 0.5 0.5 -0.5
|
||||
v -0.5 0.5 -0.5
|
||||
v -0.5 -0.5 -0.5
|
||||
v 0.5 -0.5 0.5
|
||||
v 0.5 0.5 0.5
|
||||
v -0.5 0.5 0.5
|
||||
v -0.5 -0.5 0.5
|
||||
v 0.5 -0.5 0.5
|
||||
v 0.5 0.5 0.5
|
||||
v -0.5 0.5 0.5
|
||||
v -0.5 -0.5 0.5
|
||||
|
||||
f 1 2 5
|
||||
f 2 6 5
|
||||
|
@ -19,4 +19,3 @@ f 3 4 8
|
|||
f 3 8 7
|
||||
f 4 1 5
|
||||
f 4 5 8
|
||||
|
||||
|
|
41
ply2obj.py
41
ply2obj.py
|
@ -1,41 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
|
||||
from conv3d.obj import OBJExporter
|
||||
from conv3d.loadmodel import load_model
|
||||
from functools import partial
|
||||
|
||||
def check_path(path, should_exist):
|
||||
""" Check that a path (file or folder) exists or not and return it.
|
||||
"""
|
||||
path = os.path.normpath(path)
|
||||
if should_exist != os.path.exists(path):
|
||||
msg = "path " + ("does not" if should_exist else "already") + " exist: " + path
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
return path
|
||||
|
||||
def main(args):
|
||||
parser = load_model(args.input)
|
||||
exporter = OBJExporter(parser)
|
||||
result = str(exporter)
|
||||
|
||||
if args.output is None:
|
||||
print(result)
|
||||
else:
|
||||
with open(args.output, 'w') as f:
|
||||
f.write(result)
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.set_defaults(func=main)
|
||||
parser.add_argument('-v', '--version', action='version', version='1.0')
|
||||
parser.add_argument('-i', '--input', metavar='input',
|
||||
type=partial(check_path, should_exist=True), default=None,
|
||||
help='Input file (.obj)')
|
||||
parser.add_argument('-o', '--output', metavar='output',
|
||||
help='Output path')
|
||||
args = parser.parse_args()
|
||||
args.func(args)
|
||||
|
Loading…
Reference in New Issue