2024-06-28 09:18:26 +00:00
|
|
|
{ mkDerivation, pkgs, mayo, wrapQtAppsHook, lib, rbs-workbench, cad-gen, cg-gen }:
|
2023-02-22 13:19:58 +03:00
|
|
|
let
|
|
|
|
step2stl =
|
|
|
|
name: file:
|
|
|
|
let
|
|
|
|
pname = "${name}.stl";
|
|
|
|
extension = lib.last (lib.strings.splitString "." file);
|
|
|
|
in
|
|
|
|
lib.throwIfNot
|
|
|
|
(lib.elem extension ["step" "STEP" "stp"])
|
|
|
|
''Input file have a "${extension}" extension, but valid STEP-file should have one of the following extentions: "step" "STEP" "stp"''
|
|
|
|
mkDerivation {
|
|
|
|
inherit pname;
|
|
|
|
version = "v0";
|
|
|
|
src = ./.;
|
|
|
|
nativeBuildInputs = [ mayo wrapQtAppsHook ];
|
|
|
|
buildPhase = ''${lib.getExe mayo} ${file} -e ${pname}'';
|
|
|
|
installPhase = ''
|
|
|
|
cp ${pname} $out
|
|
|
|
rm ${pname}
|
|
|
|
'';
|
|
|
|
};
|
2024-06-28 09:18:26 +00:00
|
|
|
|
|
|
|
freecad2parts =
|
|
|
|
file:
|
|
|
|
let
|
|
|
|
pname = "${file}-parts";
|
|
|
|
extension = lib.last (lib.strings.splitString "." file);
|
|
|
|
cad_export_script = pkgs.writers.writePython3 "cad_export_script.py"
|
|
|
|
{ libraries = [ rbs-workbench ]; }
|
|
|
|
''
|
|
|
|
import FreeCAD as App
|
|
|
|
import freecad.robossembler.utils.freecad_exporters as rbs
|
|
|
|
import sys
|
|
|
|
|
|
|
|
path = sys.argv[4]
|
|
|
|
print(path)
|
|
|
|
doc = App.openDocument(path)
|
|
|
|
rbs.publish_project_database(doc)
|
|
|
|
App.closeDocument(doc.Name)
|
|
|
|
'';
|
|
|
|
in
|
|
|
|
lib.throwIfNot
|
|
|
|
(lib.elem extension ["FCStd"])
|
|
|
|
''Input file have a "${extension}" extension, but valid FreeCAD file should have "FCStd" extention''
|
|
|
|
mkDerivation rec {
|
|
|
|
inherit pname;
|
|
|
|
version = "unstable";
|
|
|
|
src = ./.;
|
|
|
|
nativeBuildInputs = [ cad-gen pkgs.freecad ] ++ pkgs.freecad.buildInputs;
|
|
|
|
buildInputs = [ ];
|
|
|
|
dontWrapQtApps = true;
|
|
|
|
buildPhase = ''
|
|
|
|
export PYTHONPATH="${rbs-workbench}/${pkgs.python3.sitePackages}"
|
|
|
|
${pkgs.freecad}/bin/freecadcmd ${cad_export_script} -- --pass $1
|
|
|
|
#${pkgs.freecad}/bin/freecadcmd -h
|
|
|
|
#${cad-gen}/bin/cad-gen ${file}
|
|
|
|
mv parts* trees* $out
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
parts-packages =
|
|
|
|
parts-package:
|
|
|
|
let
|
|
|
|
parts = lib.trivial.importJSON "${parts-package.src}/parts.json";
|
|
|
|
pkgSet = builtins.listToAttrs (map ({ material_path, name, part_path }: { inherit name; value = part_path; }) parts );
|
|
|
|
mkPkg =
|
|
|
|
{ name, value }:
|
|
|
|
mkDerivation {
|
|
|
|
src = "${parts-package}";
|
|
|
|
pname = name;
|
|
|
|
installPhase = ''
|
|
|
|
outputs = [ "stl" ];
|
|
|
|
ln ${parts-package}/${value} $stl
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
in
|
|
|
|
lib.lists.forEach mkPkg pkgSet;
|
|
|
|
|
|
|
|
rlib = { inherit step2stl freecad2parts parts-packages; };
|
2023-02-22 13:19:58 +03:00
|
|
|
in
|
2024-06-28 09:18:26 +00:00
|
|
|
rlib
|