From a3d2b211545388f945a2573b5c89383d538a60fb Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Wed, 24 Jul 2024 14:29:01 +0100 Subject: [PATCH] Make DXF construction work --- .github/workflows/release_bundle.yml | 3 ++- case/export_hardware.py | 21 +++++++++++++++------ case/generate_dxf.py | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100755 case/generate_dxf.py diff --git a/.github/workflows/release_bundle.yml b/.github/workflows/release_bundle.yml index 6e350bd..5311a04 100644 --- a/.github/workflows/release_bundle.yml +++ b/.github/workflows/release_bundle.yml @@ -11,7 +11,7 @@ jobs: run: | sudo add-apt-repository ppa:kicad/kicad-8.0-releases sudo apt update - sudo apt install -y wget libgl1 texlive-latex-base texlive-latex-extra latexmk kicad + sudo apt install -y wget libgl1 texlive-latex-base texlive-latex-extra latexmk kicad openscad sudo pip install sphinx==6.1.3 sphinx-rtd-theme==1.2.0 - name: Get freecad from cache @@ -44,6 +44,7 @@ jobs: ls cd case ~/bin/freecad --appimage-extract-and-run -c export_hardware.py + python3 generate_dxf.py cd build zip -r ../../hardware.zip * - name: export PCB files diff --git a/case/export_hardware.py b/case/export_hardware.py index 9427ce4..43da960 100644 --- a/case/export_hardware.py +++ b/case/export_hardware.py @@ -1,22 +1,31 @@ import os import TechDraw import Mesh +import time +import subprocess + FreeCAD.openDocument("bigboy.FCStd") doc = App.getDocument("bigboy") +time.sleep(3) stl_parts = ("shim", "cap", "cap with vanes", "mount", "shell", "bezel") os.makedirs("build/abs/",exist_ok=True) -for part_name in stl_parts: - print(f"Exporting {part_name}") - part = doc.findObjects(Label=f"^{part_name}$")[0] - Mesh.export([part],f"build/abs/{part_name}.stl") +#for part_name in stl_parts: +# print(f"Exporting {part_name}") +# part = doc.findObjects(Label=f"^{part_name}$")[0] +# Mesh.export([part],f"build/abs/{part_name}.stl") drawings = doc.findObjects("TechDraw::DrawPage") +drawing_stls = [] for drawing in drawings: os.makedirs(f"build/{drawing.Label}/", exist_ok=True) for view in drawing.OutList: if view.TypeId == 'TechDraw::DrawViewPart': - print(f"Exporting {view.Source[0].Label}") - TechDraw.writeDXFView(view,f"build/{drawing.Label}/{view.Source[0].Label}.dxf") + print(f"Exporting {view.Source[0].Label}") + # tech draw does not export DXFs properly from command line - so export as stl and we will post-process with openscad + #TechDraw.writeDXFView(view,f"build/{drawing.Label}/{view.Source[0].Label}.dxf") + fname = f"build/{drawing.Label}/{view.Source[0].Label}.stl" + Mesh.export(view.Source,fname) + drawing_stls.append(fname) FreeCAD.openDocument("button_mould.FCStd") doc = App.getDocument("button_mould") diff --git a/case/generate_dxf.py b/case/generate_dxf.py new file mode 100755 index 0000000..435bdcd --- /dev/null +++ b/case/generate_dxf.py @@ -0,0 +1,19 @@ +#!/bin/env python3 +import subprocess +import glob +import os + +print("Creating DXFs") +dirs = "[acrylic|Rubber]" +cwd = os.path.dirname(os.path.abspath(__file__)) +drawing_stls = glob.glob(f"{cwd}/build/{dirs}*/*.stl") +print("fnames: ", drawing_stls) +for fname in drawing_stls: + if "Window" in fname: + rotation = "" + else: + rotation = "rotate(a=[90,0,0])" + command = f'projection() {rotation} import("{fname}");' + output = fname.replace("stl","dxf") + subprocess.run(["openscad","/dev/null","-D",command,"-o",output]) +