Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
72423df
Add dogbone inner corner option
vinicius795 Sep 29, 2025
09c6c48
Add radius and diameter arguments for dogbone corners
vinicius795 Sep 29, 2025
3136620
Merge pull request #1 from vinicius795/codex/add-dogbone-option-for-i…
vinicius795 Sep 29, 2025
a29e921
Implement dogbone arc generation
vinicius795 Sep 29, 2025
398149d
Merge branch 'master' into codex/add-dogbone-option-for-inner_corners…
vinicius795 Sep 30, 2025
4806bc3
Merge pull request #2 from vinicius795/codex/add-dogbone-option-for-i…
vinicius795 Sep 30, 2025
1e528dd
Fix dogbone arc orientation
vinicius795 Sep 30, 2025
184ca0b
Merge branch 'master' into codex/add-dogbone-option-for-inner_corners
vinicius795 Sep 30, 2025
416a516
Merge pull request #3 from vinicius795/codex/add-dogbone-option-for-i…
vinicius795 Sep 30, 2025
78e5b5c
Revert "Fix dogbone arc orientation"
vinicius795 Sep 30, 2025
353bc8b
Merge pull request #4 from vinicius795/revert-3-codex/add-dogbone-opt…
vinicius795 Sep 30, 2025
9ba1183
a lot
vinicius795 Oct 1, 2025
7a989eb
Add kapa-gama function and refactor dogbone code
vinicius795 Oct 1, 2025
e23db3b
final dogbone corner drawing
vinicius795 Oct 2, 2025
2345ab2
Passei o pipeline a tratar arcos nativos, o que deixa o dogbone mais …
vinicius795 Oct 8, 2025
4d5aaa7
Move DXF surface implementation into new boxes/dxf.py, update existin…
vinicius795 Oct 14, 2025
70a1946
Atualizei boxes/dogbone.py para fazer um pós-processamento automático…
vinicius795 Oct 15, 2025
ba7727f
Merge branch 'florianfesti:master' into master
vinicius795 Oct 15, 2025
b3134dd
Merge pull request #5 from vinicius795/dogbone
vinicius795 Oct 15, 2025
507c88e
Merge branch 'florianfesti:master' into dogbone
vinicius795 Oct 15, 2025
c3b7e44
new generator for a toolbox
vinicius795 Oct 16, 2025
26355d4
working
vinicius795 Oct 16, 2025
8063acd
WIP
vinicius795 Oct 17, 2025
9c5b23b
add helper
vinicius795 Oct 17, 2025
f7a94a5
WIP
vinicius795 Oct 17, 2025
b9a839d
Copia CabinetHingeEdge para CustomCabinetHingeEdge, mantendo o compor…
vinicius795 Oct 17, 2025
b149596
fix fingers position on edge
vinicius795 Oct 17, 2025
70be425
add latch
vinicius795 Oct 17, 2025
2e9cec5
fix, corner ins hinges parts
vinicius795 Oct 17, 2025
9a6dcad
Melhora conversão de arcos no DXF
vinicius795 Oct 17, 2025
032749b
Merge pull request #6 from vinicius795/toolbox
vinicius795 Oct 17, 2025
a301db6
Merge pull request #7 from vinicius795/dxf
vinicius795 Oct 17, 2025
b3f9a43
Merge pull request #8 from vinicius795/master
vinicius795 Oct 17, 2025
c014505
Fix orientation for cubic arc conversion
vinicius795 Oct 18, 2025
91dce9d
Merge pull request #10 from vinicius795/codex/fix-clockwise-orientati…
vinicius795 Oct 18, 2025
717d820
Create a test_path for testing DXF generator
vinicius795 Oct 22, 2025
054996b
start new dxf generator with ezdxf
vinicius795 Oct 22, 2025
c92d7f1
all polyline now
vinicius795 Oct 22, 2025
4a3eb4d
boxes/ezdxf_generator.py:16 Added TypedDict definitions for line, arc…
vinicius795 Oct 23, 2025
2939426
Replace custom DXF exporter with ezdxf builder
vinicius795 Oct 23, 2025
b760ff7
Merge branch 'florianfesti:master' into master
vinicius795 Oct 23, 2025
2cf0bdb
Merge pull request #11 from vinicius795/dxf
vinicius795 Oct 23, 2025
c44a047
Finish dogbone corners implementation
vinicius795 Oct 24, 2025
31c62b8
now colinear lines are merged
vinicius795 Oct 24, 2025
8553184
fix arc segmentation
vinicius795 Oct 24, 2025
74038cd
Merge pull request #12 from vinicius795:dxf
vinicius795 Oct 24, 2025
74dfc08
Merge remote-tracking branch 'origin/master' into dogbone
vinicius795 Oct 24, 2025
b373dd1
Merge pull request #13 from vinicius795:dogbone
vinicius795 Oct 24, 2025
c16ecda
Merge branch 'florianfesti:master' into master
vinicius795 Oct 25, 2025
c5a5c56
Merge branch 'florianfesti:master' into master
vinicius795 Oct 29, 2025
23ac7c1
Merge branch 'florianfesti:master' into master
vinicius795 Oct 30, 2025
cb7bb34
Merge branch 'florianfesti:master' into master
vinicius795 Nov 6, 2025
a3721ed
Merge branch 'florianfesti:master' into master
vinicius795 Nov 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 35 additions & 3 deletions boxes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,8 +379,14 @@ def __init__(self) -> None:
help="print reference rectangle with given length (in mm)(zero to disable) [\U0001F6C8](https://florianfesti.github.io/boxes/html/usermanual.html#reference)")
defaultgroup.add_argument(
"--inner_corners", action="store", type=str, default="loop",
choices=["loop", "corner", "backarc"],
choices=["loop", "corner", "backarc", "dogbone"],
help="style for inner corners [\U0001F6C8](https://florianfesti.github.io/boxes/html/usermanual.html#inner-corners)")
defaultgroup.add_argument(
"--R", action="store", type=float, default=None,
help="radius for dogbone inner corners (in mm)")
defaultgroup.add_argument(
"--D", action="store", type=float, default=None,
help="diameter for dogbone inner corners (in mm)")
defaultgroup.add_argument(
"--burn", action="store", type=float, default=0.1,
help='burn correction (in mm)(bigger values for tighter fit) [\U0001F6C8](https://florianfesti.github.io/boxes/html/usermanual.html#burn)')
Expand Down Expand Up @@ -586,7 +592,31 @@ def cliQuote(s: str) -> str:
self.metadata["cli"] = "boxes " + self.__class__.__name__ + " " + " ".join(cliQuote(arg) for arg in args)
self.metadata["cli"] = self.metadata["cli"].strip()

for key, value in vars(self.argparser.parse_args(args=args)).items():
parsed_args = self.argparser.parse_args(args=args)

dogbone_radius = None
if getattr(parsed_args, "inner_corners", "loop") == "dogbone":
R = getattr(parsed_args, "R", None)
D = getattr(parsed_args, "D", None)

if R is None and D is None:
self.argparser.error("dogbone inner corners require --R or --D")

if R is not None:
if R <= 0:
self.argparser.error("--R must be greater than zero")
dogbone_radius = R

if D is not None:
if D <= 0:
self.argparser.error("--D must be greater than zero")
inferred_radius = D / 2.0
if dogbone_radius is None:
dogbone_radius = inferred_radius
elif abs(dogbone_radius - inferred_radius) > 1e-9:
self.argparser.error("--R and --D specify different radii")

for key, value in vars(parsed_args).items():
default = self.argparser.get_default(key)

# treat edge settings separately
Expand All @@ -598,6 +628,8 @@ def cliQuote(s: str) -> str:
if value != default:
self.non_default_args[key] = value

self.dogbone_radius = dogbone_radius

# Change file ending to format if not given explicitly
fileFormat = getattr(self, "format", "svg")
if getattr(self, 'output', None) == 'box.svg':
Expand Down Expand Up @@ -790,7 +822,7 @@ def close(self):
self.surface.set_metadata(self.metadata)

self.surface.flush()
data = self.surface.finish(self.inner_corners)
data = self.surface.finish(self.inner_corners, getattr(self, "dogbone_radius", None))

data = self.formats.convert(data, self.format)
return data
Expand Down
Loading