convert step to OBJ for web output
This commit is contained in:
42
step_to_obj_headless.py
Normal file
42
step_to_obj_headless.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import os, sys
|
||||||
|
import FreeCAD as App
|
||||||
|
import Part
|
||||||
|
import Import
|
||||||
|
import MeshPart
|
||||||
|
|
||||||
|
def convert(step_path, out_path, lin=0.1, ang=0.35):
|
||||||
|
doc = App.newDocument("conv")
|
||||||
|
Import.insert(os.path.abspath(step_path), doc.Name)
|
||||||
|
doc.recompute()
|
||||||
|
|
||||||
|
shapes = []
|
||||||
|
for o in doc.Objects:
|
||||||
|
if hasattr(o, "Shape") and o.Shape and not o.Shape.isNull():
|
||||||
|
shapes.append(o.Shape)
|
||||||
|
|
||||||
|
if not shapes:
|
||||||
|
raise RuntimeError("Keine Shapes gefunden.")
|
||||||
|
|
||||||
|
compound = Part.makeCompound(shapes) if len(shapes) > 1 else shapes[0]
|
||||||
|
mesh = MeshPart.meshFromShape(
|
||||||
|
Shape=compound, LinearDeflection=lin, AngularDeflection=ang, Relative=False
|
||||||
|
)
|
||||||
|
mesh.write(os.path.abspath(out_path))
|
||||||
|
App.closeDocument(doc.Name)
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
#print(argv, len(argv))
|
||||||
|
if len(argv) < 3:
|
||||||
|
print("Usage: FreeCADCmd script.py -- input.step output.stl [lin_defl] [ang_defl]")
|
||||||
|
return 1
|
||||||
|
inp = argv[2]
|
||||||
|
out = argv[3]
|
||||||
|
lin = float(argv[4]) if len(argv) > 4 else 0.1
|
||||||
|
ang = float(argv[5]) if len(argv) > 5 else 0.35
|
||||||
|
convert(inp, out, lin, ang)
|
||||||
|
print(f"OK: {inp} -> {out}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# WICHTIG: immer ausführen (FreeCAD setzt __name__ nicht zuverlässig auf "__main__")
|
||||||
|
raise SystemExit(main(sys.argv))
|
||||||
|
|
||||||
Reference in New Issue
Block a user