Skip to content

Releases

v0.25.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 10 Nov 20:09
  • Parametric CadQuery, OpenSCAD, and FreeCAD export of a filleted L-bracket now also write Z-axis through-holes in the foot and the upright as editable numbers: base_hole_N_d, base_hole_N_x, and base_hole_N_y in the foot, and leg_hole_N_d, leg_hole_N_x, and leg_hole_N_y in the upright. CadQuery fillets the L and then cuts the cylinder. OpenSCAD subtracts it after the offset profile. FreeCAD cuts Part.makeCylinder after makeFillet. mesh2cad edit, mesh2cad params, and the MCP tools list_params / edit_params list and edit those numbers. A hole that leaves the foot or the upright, or that overlaps another, is refused and nothing is written. Holes along X or Y, blind holes, counterbores, and a hole that crosses from the exclusive foot into the exclusive upright are not supported.
  • On the synthetic bracket (outer 40×30 mm, legs 8 mm, height 12 mm, r=3 mm) with an Ø4 foot hole at (24, 4) and an Ø4 upright hole at (4, 19), CadQuery and OpenSCAD write the script on 3 of 3 seeds with no noise and on 2 of 3 at 0.05 mm. The gate is unchanged: max deviation at most max(4·tol, 0.1), volume error at most 1%.
  • With no noise the limit is 0.100 mm. fillet_r is 3.0 and both diameters are 4.0. CadQuery deviates by 0.0036 mm (volume error 0.001%) and OpenSCAD by 0.0032 mm (0.000%).
  • At 0.05 mm the limit is 0.200 mm. Seeds 1 and 2 are written, with fillet_r 3.0, both diameters 4.0, and base_x 39.9. The worst is seed 1: CadQuery 0.1817 mm (volume error 0.174%), OpenSCAD 0.1950 mm (0.174%). Seed 0 is refused before that gate, with "fillet is not the four vertical corners of a rectangular base".
  • The foot hole alone is written on 3 of 3 seeds with no noise. At 0.05 mm CadQuery writes 1 of 3 (seed 0, 0.1371 mm, volume error 0.040%) and OpenSCAD writes 2 of 3 (seed 0 at 0.1372 mm, seed 2 at 0.1877 mm, volume error 0.097%). CadQuery refuses seed 2 at 0.211 mm (volume error 0.10%), 0.011 mm over the limit. Both refuse seed 1 at 0.317 mm and 0.316 mm (volume error 0.32%). The upright hole alone is written on 3 of 3 with no noise and on 1 of 3 at 0.05 mm (seed 2: CadQuery 0.1446 mm, volume error 0.022%; OpenSCAD 0.1325 mm, 0.023%). Seed 0 is the same fillet refusal. Seed 1 is refused at 0.207 mm on CadQuery and 0.206 mm on OpenSCAD (volume error 0.04%).
  • At 0.2 mm the limit is 0.800 mm and none of the three layouts is six vertical fillets plus those holes, so nothing is written. The foot-and-upright part is refused with "fillet is not the four vertical corners of a rectangular base" on seeds 0 and 1, and "a rounded edge is not part of an editable outline" on seed 2.
  • FreeCAD writes the macro when the same CadQuery check passes. freecadcmd was not on PATH for this measurement, so the FreeCAD deviation is not reported; the macro text is checked on the fits that pass. Without freecadcmd, CadQuery (or OpenSCAD, when CadQuery is not installed) runs that deviation and volume check. A fit those backends refuse is not written. The foot-only seed 2 at 0.05 mm is one of those, even though OpenSCAD would pass it. The command still says the FreeCAD solid itself was unverified, because FreeCAD did not measure it.

v0.24.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 10 Nov 12:52
  • Parametric CadQuery, OpenSCAD, and FreeCAD export write an L-bracket extruded along Z when every vertical edge, including the inner corner, shares one radius. The parameters are fillet_r, the outer sizes base_x, base_y, and base_t, and the leg thicknesses leg_x and leg_y. CadQuery extrudes the L and calls .edges("|Z").fillet(fillet_r). OpenSCAD rounds the same profile with offset, outer corners and the inner corner. FreeCAD extrudes the polygon and calls makeFillet on the edges parallel to Z. mesh2cad edit, mesh2cad params, and the MCP tools list_params / edit_params list and edit those numbers. An edit that makes the vertical rounds meet, or a leg that is no longer thinner than the outer size, is refused and nothing is written.
  • On the synthetic bracket (outer 40×30 mm, legs 8 mm, height 12 mm, r=3 mm) CadQuery and OpenSCAD write the script on 3 of 3 seeds with no noise and on 2 of 3 at 0.05 mm. The gate is unchanged: max deviation at most max(4·tol, 0.1), volume error at most 1%.
  • With no noise the limit is 0.100 mm. fillet_r is 3.0, base_x 40, base_y 30, base_t 12, leg_x 8, and leg_y 8. CadQuery deviates by 0.0036 mm (volume error 0.007%) and OpenSCAD by 0.0032 mm (0.005%).
  • At 0.05 mm the limit is 0.200 mm. Seeds 0 and 2 are written, with fillet_r 3.0. Seed 0 fits base_x as 39.9. The worst of those is seed 0: CadQuery 0.1788 mm (volume error 0.141%), OpenSCAD 0.1787 mm (0.143%). Seed 2 is CadQuery 0.1696 mm (0.013%) and OpenSCAD 0.1701 mm (0.015%). Seed 1 is refused at 0.209 mm on CadQuery and 0.213 mm on OpenSCAD (volume error 0.07% on both).
  • At 0.2 mm the limit is 0.800 mm and the fit is not six vertical fillets, so nothing is written. Seed 0 is refused with "curved surface whose axis is not aligned with X, Y or Z", seed 1 with "boss does not start on the top face", and seed 2 with "fillet is not the four vertical corners of a rectangular base".
  • FreeCAD writes the macro when the same gate passes. freecadcmd was not on PATH for this measurement, so the FreeCAD deviation is not reported; the macro text is checked on the fits that pass. Without freecadcmd, CadQuery (or OpenSCAD, when CadQuery is not installed) runs that deviation and volume check. A fit those backends refuse is not written. Seed 1 at 0.05 mm is one of those. The command still says the FreeCAD solid itself was unverified, because FreeCAD did not measure it.
  • A sharp L with no fillets stays an outline. A rectangular plate keeps fillet_r on its four vertical corners, and a fully filleted box keeps edge_fillet_r. Prusa script deviations are unchanged. A free sphere is still refused.

v0.23.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 07 Nov 13:06
  • A rectangular box with every edge filleted (edge_fillet_r) can also carry a straight boss on its top face whose wall clears the rounds. The eight corner spheres stay part of that radius. CadQuery fillets the box and then fuses the cylinder. OpenSCAD adds the cylinder after the filleted-box union. FreeCAD calls makeFillet and then fuses the cylinder. The boss is boss_1_d, boss_1_h, boss_1_x, and boss_1_y, and mesh2cad edit, mesh2cad params, and the MCP tools list_params / edit_params list and edit them. An edit that collapses the box is refused and nothing is written.
  • On the synthetic 40×30×20 mm box with r=2.5 mm and a centered Ø10 boss 6 mm tall (refused in 0.22.0), CadQuery and OpenSCAD write the script on 3 of 3 seeds at 0, 0.05, and 0.2 mm noise. The gate is unchanged: max deviation at most max(4·tol, 0.1), volume error at most 1%.
  • With no noise the limit is 0.100 mm. edge_fillet_r fits as 2.52 and boss_1_d as 9.98. CadQuery deviates by 0.0253 mm (volume error 0.016%) and OpenSCAD by 0.0243 mm (0.014%).
  • At 0.05 mm the limit is 0.200 mm, with edge_fillet_r 2.5 and boss_1_d 10.0. The worst is seed 2: CadQuery 0.1704 mm (volume error 0.202%), OpenSCAD 0.1574 mm (0.204%).
  • At 0.2 mm the limit is 0.800 mm. boss_1_d is 10.0 and boss_1_h 6.0, but the fitted radius drifts to 2.57 to 2.65 mm, so edge_fillet_r is written as 2.6 or 2.7 instead of 2.5. The worst is seed 2: CadQuery 0.6589 mm (volume error 0.121%), OpenSCAD 0.6589 mm (0.123%).
  • FreeCAD writes the macro (fillet, then fuse). freecadcmd was not on PATH for this measurement, so the FreeCAD deviation is not reported; the macro text is checked.
  • A boss that does not clear the edge rounds is not written as this feature. A free sphere and the filleted L-bracket are still refused, and a torus fillet whose axis is not Z is still refused.

v0.22.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 06 Nov 13:17
  • A rectangular box with every edge filleted (edge_fillet_r) can also carry an axis-aligned through-hole whose wall clears the rounds. The eight corner spheres stay part of that radius. CadQuery fillets the box and then cuts the hole. OpenSCAD subtracts the cylinder from the filleted-box union. FreeCAD calls makeFillet and then cuts the cylinder. mesh2cad edit, mesh2cad params, and the MCP tools list_params / edit_params still list and edit edge_fillet_r and hole_1_d. An edit that collapses the box, or a hole larger than the wall, is refused and nothing is written.
  • On the synthetic 40×30×20 mm box with r=3 mm and an Ø8 hole through the top, CadQuery and OpenSCAD write the script on 3 of 3 seeds at 0, 0.05, and 0.2 mm noise. The gate is unchanged: max deviation at most max(4·tol, 0.1), volume error at most 1%.
  • With no noise the tolerance is 0.01 mm and the limit is 0.100 mm. CadQuery deviates by 0.0299 mm (volume error 0.023%) and OpenSCAD by 0.0293 mm (0.021%). The coarse tessellation fits edge_fillet_r as 3.02 and hole_1_d as 7.98.
  • At 0.05 mm the limit is 0.200 mm. All 3 seeds are written, with edge_fillet_r 3.0 and hole_1_d 8.0. The worst is seed 1: CadQuery 0.1792 mm (volume error 0.193%), OpenSCAD 0.1798 mm (0.195%).
  • At 0.2 mm the limit is 0.800 mm. All 3 seeds are written, again with edge_fillet_r 3.0 and hole_1_d 8.0. The worst is seed 2: CadQuery 0.6124 mm (volume error 0.005%), OpenSCAD 0.6135 mm (0.007%).
  • FreeCAD writes the macro (fillet, then cut). freecadcmd was not on PATH for this measurement, so the FreeCAD deviation is not reported; the macro text is checked.
  • A boss on the filleted box is still fitted as the plain rounded box and refused by the deviation gate (6.000 mm, limit 0.200, volume error 1.93%). A free sphere (the spherical dome) is still refused with "sphere faces are not supported yet". The filleted L-bracket stays on the STEP path.

v0.21.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 05 Nov 13:12
  • Parametric CadQuery, OpenSCAD, and FreeCAD export write a rectangular box with every edge filleted at one radius as edge_fillet_r, together with base_x, base_y, and base_t. fillet_r is still only the four vertical corners. mesh2cad edit part.py --set edge_fillet_r=4 changes that number, and so do mesh2cad params and the MCP tools list_params and edit_params. CadQuery uses .edges().fillet(edge_fillet_r). FreeCAD uses makeFillet on every edge of the box. OpenSCAD unions three boxes, twelve cylinders, and eight spheres. A hole or a boss on that box is not written.
  • On the synthetic 40×30×20 mm box with r=3 mm the script is written on 3 of 3 seeds at 0, 0.05, and 0.2 mm noise, on CadQuery, OpenSCAD, and FreeCAD. None were refused. The gate is unchanged: max deviation at most max(4·tol, 0.1), volume error at most 1%.
  • With no noise edge_fillet_r is 3.0. CadQuery deviates by 0.0088 mm (volume error 0.013%), OpenSCAD by 0.0087 mm (0.010%), FreeCAD by 0.0100 mm (0.016%). The limit is 0.100 mm.
  • At 0.05 mm the limit is 0.200 mm and edge_fillet_r is 3.0 on every seed. The worst is CadQuery 0.163 mm (volume error 0.009%), OpenSCAD 0.163 mm (0.007%), FreeCAD 0.164 mm (0.012%).
  • At 0.2 mm the limit is 0.800 mm and edge_fillet_r is 3.0 on every seed. The fitted radius is 3.09 to 3.11 mm and rounds to 3.0 within the tolerance, so the script is farther from the noisy mesh than the STEP solid (Hausdorff 0.116 mm). The worst is CadQuery 0.664 mm (volume error 0.025%), OpenSCAD 0.664 mm (0.028%), FreeCAD 0.664 mm (0.022%).
  • An Ø8 hole through the top of the filleted box is refused with "sphere faces are not supported yet". A boss on the top face is fitted as the plain rounded box and then refused by the same gate: deviation 6.000 mm (limit 0.200), volume error 1.93%. Nothing is written.

v0.20.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 04 Nov 13:02
  • A rectangular box with every edge filleted at one radius is rebuilt as one exact solid: 6 planes, 12 partial cylinders and 8 sphere octants. Each cylinder is tangent to the two walls it joins, each sphere is tangent to the three faces at that corner, and the fillet axis passes through the two corner centres. On a 40×30×20 mm box with r=3 mm this is exact on 3 of 3 seeds at 0, 0.05 and 0.2 mm noise. With no noise the radius error is 0.006 mm, the Hausdorff distance is 0.023 mm, and the volume error is 0.01%. At 0.05 mm the worst radius error is 0.007 mm and the Hausdorff is 0.035 mm (volume error 0.07%). At 0.2 mm the worst radius error is 0.112 mm and the Hausdorff is 0.116 mm (volume error 0.18%). A fillet that meets a sphere in any other layout is unchanged and still falls back to a valid solid. There is no new script parameter. fillet_r is still only the four vertical corners of a rectangular base.

v0.19.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 03 Nov 13:03
  • Parametric CadQuery, OpenSCAD, and FreeCAD export write a quarter-torus fillet on the box vocabulary as a named parameter. boss_N_fillet is the round at the base of a straight vertical boss. hole_N_rim_r and hole_N_bot_rim_r are the rounds on the top and bottom rims of a vertical hole. hole_N_floor_r is the fillet where a blind hole's floor meets the wall. mesh2cad edit script.py --set boss_1_fillet=3 (or hole_1_rim_r, or hole_1_floor_r) rebuilds the solid. A fillet whose axis is not Z is refused. fillet_r is still the four vertical corners of a rectangular base. An L-bracket fillet and a spherical corner stay on the STEP path.
  • With no noise the usual gate holds (max deviation at most max(4·tol, 0.1) = 0.1 mm, volume error at most 1%). The Ø16 boss with a 2 mm base fillet recovers boss_1_fillet = 2.0. CadQuery deviates by 0.0099 mm (volume error 0.020%), OpenSCAD by 0.0099 mm (0.015%), FreeCAD by 0.0099 mm (0.025%). The Ø12 hole with a 1.5 mm top round recovers hole_1_rim_r = 1.43. CadQuery 0.0274 mm (0.045%), OpenSCAD 0.0274 mm (0.043%), FreeCAD 0.0274 mm (0.047%). Both rims at 1.2 mm recover 1.14. CadQuery 0.0224 mm (0.027%), OpenSCAD 0.0224 mm (0.025%), FreeCAD 0.0224 mm (0.029%). The Ø10 blind hole with a 1.5 mm floor fillet recovers hole_1_floor_r = 1.46 and depth 12.0. CadQuery 0.0143 mm (0.006%), OpenSCAD 0.0138 mm (0.007%), FreeCAD 0.0141 mm (0.005%).
  • At 0.05 mm (limit 0.200 mm) the boss fillet is found on 3 of 3 seeds and the script is written on seed 0 only (boss_1_fillet = 1.7, CadQuery 0.178 mm, OpenSCAD 0.178 mm, FreeCAD 0.179 mm). Seeds 1 and 2 are refused at 0.226 mm and 0.238 mm. The single hole rim is written on 2 of 3 seeds (hole_1_rim_r = 1.3; seed 0 is 0.157 mm CadQuery, 0.158 mm OpenSCAD and FreeCAD; seed 1 is 0.144 mm). Seed 2 is refused at 0.241 mm and 1.35% volume. Both rims on seed 0 are refused at 0.201 mm on all three backends. The blind floor on seed 0 is not a torus and is refused with "sphere faces are not supported yet".
  • At 0.2 mm (limit 0.800 mm) the torus is not recovered, so the fillet parameter is absent. The boss is the sharp cylinder: CadQuery refuses seed 0 at 0.807 mm and writes seeds 1 and 2 at 0.758 mm and 0.719 mm. OpenSCAD seed 0 is refused at 0.867 mm. FreeCAD seed 0 is written at 0.745 mm. That sharp solid is 0.793 mm from the true boss. The Ø12 hole and the hole with both rims are written as sharp holes (CadQuery worst 0.625 mm and 0.705 mm). The blind hole is refused on seed 0 with "hole profile is not a plain or countersunk hole".

v0.18.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 02 Nov 13:06
  • A fillet between a plane and a coaxial cylinder is rebuilt as one torus face in the STEP solid, tangent to both neighbours. A boss base and a rounded hole rim use the inner equator (major radius = cylinder radius + minor radius). The floor of a blind hole uses the outer equator (major radius = cylinder radius minus the minor radius). The fidelity report counts torus faces and lists each major and minor radius.
  • On a plate with an Ø16 boss and a 2 mm base fillet this is exact on 3 of 3 seeds at 0 and at 0.05 mm noise. With no noise the minor radius error is 0.008 mm (major 10.012 mm, Hausdorff 0.026 mm). At 0.05 mm the worst minor error is 0.279 mm and the Hausdorff is 0.150 mm. An Ø12 hole with a 1.5 mm top round is exact with no noise (minor error 0.068 mm, major 7.451 mm, Hausdorff 0.026 mm) and on 2 of 3 seeds at 0.05 mm (worst minor error 0.247 mm). The third seed is a valid faceted solid, Hausdorff 0.633 mm. Both rims at 1.2 mm are exact with no noise (minor error 0.061 mm). An Ø10 blind hole with a 1.5 mm floor fillet is exact with no noise (minor 1.463 mm, major 3.529 mm, Hausdorff 0.021 mm).
  • At 0.2 mm the boss fillet and the single hole rim are not recovered. The STEP is the sharp cylinder and its planes, Hausdorff 0.864 mm on the boss and 0.681 mm on the hole, and it is still one valid solid. At 0.05 mm the blind floor falls back (Hausdorff up to 0.992 mm) and a hole with both rims rounded falls back (Hausdorff up to 1.835 mm). A torus that does not sew does the same. CadQuery, OpenSCAD, and FreeCAD export still refuse a torus; fillet_r remains the four vertical corners of a rectangular base.

v0.17.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 01 Nov 13:17
  • mesh2cad params script.py lists the named parameters of a CadQuery, OpenSCAD, or FreeCAD script mesh2cad generated: name, value, kind, and unit when one is known (base_x, hole_1_d, hole_1_depth, fillet_r, extrude_len, outline, and the rest). mesh2cad edit script.py --set hole_1_d=8 --set base_x=+2 rewrites those numbers and leaves every other byte unchanged. A leading + or - is a delta. It re-renders with CadQuery in-process, or with openscad / freecadcmd when that program is on PATH, and prints volume and bounding box before and after, and whether the solid is valid. --in-place or --output-script writes the script. -o writes STEP or STL. OpenSCAD writes STL. If the program is missing, the script can still be rewritten and the command says it did not render. -o in that case writes nothing.
  • An unknown parameter is refused and the message lists the valid names. An edit that is not one valid solid, or a hole larger than the wall it sits in, is refused and no file is written. Outline point lists are listed and are not edited as a single number.
  • MCP tools list_params(script_path) and edit_params(script_path, changes, output_path?). edit_params updates the script in place and returns the old and new values, the rendered path, validity, the volume and bounding-box delta, and warnings.

0.16.0

Choose a tag to compare

@emirmrkaljevic emirmrkaljevic released this 31 Oct 13:37
  • Parametric FreeCAD export: mesh2cad convert in.stl --freecad out.FCMacro writes a macro for the same parts as --cadquery and --openscad. Parameter names match (base_t, hole_1_d, hole_1_cbore_d, fillet_r, extrude_len, outline, cut_1, clip_1_d, and the rest). The macro uses FreeCAD's Part API: makeBox, makeCylinder, makeCone, a polygon extruded along X, Y, or Z, fuse / cut / common, and makeFillet on the four vertical corners of a rectangular base.
  • freecadcmd runs the macro and the solid is compared with the mesh before the file is written. The gate is unchanged: max deviation at most max(4·tol, 0.1), volume error at most 1%. If freecadcmd is not on PATH the file is still written and the command reports it unverified. FreeCAD is not a Python dependency. Parts outside the vocabulary exit with code 2 and a reason. STEP output is unchanged.
  • The macro is a Part script. Changing a dimension means editing the named number and running the macro again. It does not build a PartDesign body or a constrained sketch.
  • MCP tool to_freecad(input_path, output_path?, tol?).
  • All six Prusa parts export the macro. plug-aligner deviates by 0.0000 mm. endstop-block by 0.0421 mm (limit 0.1 mm). y-belt-idler by 0.1693 mm (limit 0.192 mm). y-belt-holder by 0.0896 mm (limit 0.154 mm). y-motor-holder by 0.1843 mm (limit 0.266 mm). y-rod-holder by 0.1300 mm (limit 0.138 mm). Volume error stays under 1% on each, which is the same gate as CadQuery and OpenSCAD. CadQuery and OpenSCAD deviations are unchanged. Exact STEP is unchanged on all six parts.