Commit Graph

879 Commits

Author SHA1 Message Date
Matthijs Kooijman 8ecf04cbe8 Fix handling of space in LidSideRight/Left
Previously, the extra space was added above the first pin and below the
(optional) second pin. This would cause the lid to misalign with the
holes in the back wall, making it harder to close the lid.

With this commit, the extra space is divided evenly above and below the
nominal position of the pin.

For this to work, the startwidth (or endwidth, depending on the side) is
slightly adjusted (since the start of the first pin slot is actually
generated by the adjacent edge). This moves the starting point, so the
location of the spring hole is adjusted to compensate for that.
2019-07-27 13:30:06 +02:00
Matthijs Kooijman 3bd4dc9907 Fix spring hole offsets by burn in LidSideRight/Left 2019-07-27 13:30:06 +02:00
Matthijs Kooijman 4691a65a29 Let LidSideRight/Left respect edge_width
This allows modifying the height of the wall that extends above the lid.

The box back wall (with holes) would already support edge_width, so this
makes it supported on all three walls where needed.
2019-07-27 13:30:06 +02:00
Matthijs Kooijman db1da4ec12 Fix hole positions offset by burn in FingerHoleEdge
When rendering the FingerHoleEdge, the current position would be
corrected for burn (e.g. it would be on the center of the laser path,
rather than the actual edge of the final part). However, the FingerHoles
class (or actually the rectangularHole method called by it) that draws
the actual holes already corrects for burn, which caused the hole
position to be offset by the burn value.

This offset was particularly problematic when making a sliding lid,
since the holes would not align perfectly with the lid, making it hard
to close the lid. With this change, the sliding slots in the side walls
and the holes in the back wall align perfectly (though only when the lid
settings have zero play, which is a separate problem).

This commit fixes FingerHoleEdge (and its subclass LidHoleEdge), but
there might be other users of the FingerHole class (usually indirectly
through boxes.fingerHolesAt) that still have the same problem.
2019-07-27 13:30:06 +02:00
Matthijs Kooijman eeb2c344d5 Clarify where l and L edges should be used 2019-07-27 13:30:06 +02:00
Marko Luther ca1a3575d0 forward holesSettings to hexHolesRectangle from within rectangularWall 2019-07-21 01:21:55 +02:00
Rotzbua c06b95d2d0 link: http -> https 2019-07-20 00:23:29 +02:00
Florian Festi 0a55e9ca6b Optimize SVG paths
Resolves #63
2019-07-19 21:49:55 +02:00
Florian Festi a38254667c Remove no longer needed line in _template.py 2019-07-18 20:55:07 +02:00
Florian Festi 17d7cd80ab Don't show generators in modules starting with underscore (templates) 2019-07-12 00:47:09 +02:00
Florian Festi 11174f2ecc New generator SlatwallDrillBox 2019-07-12 00:43:06 +02:00
Florian Festi 88e99a5726 New generator: FlexBox5
Resolves #147
2019-07-12 00:24:50 +02:00
Florian Festi e6f431ab15 New generator: MakitaPowerSupply 2019-07-07 16:26:29 +02:00
Florian Festi fff74cf382 Add metadata as a xml comment
Resolves #66
2019-07-07 13:43:04 +02:00
Florian Festi a19debf1bd Rename remaining Slatwall generators from Sw* to Slatwall* 2019-07-04 22:59:32 +02:00
Florian Festi 573b630adc New generator: SlatwallPlaneHolder 2019-07-04 22:39:34 +02:00
Florian Festi 31d46088c2 Move drawing to origin for SVGs 2019-07-04 17:52:28 +02:00
Florian Festi 635a42a25e Use eTree to caclulate the eytend of the drawing
Also check symbols (text character) now
2019-07-04 17:52:28 +02:00
Florian Festi d162c769b4 Use built in eTree implementation instead of lxml 2019-07-04 17:52:08 +02:00
Florian Festi 4a9cdc8d8e Switch to eTree as a xml library (instead of minidom) 2019-07-04 17:48:53 +02:00
Stefan Grosshauser 443c8a1c38 properly rewrite svg viewPort using minidom for xml
This avoids raising the 'Not enough space for size' exception.
2019-07-04 17:48:53 +02:00
Florian Festi abdab6866a New generator: StorageRack - Box with rails to slide other boxes in 2019-06-30 20:53:42 +02:00
Florian Festi 2f7603b4b4 New generator: SlatWallWrenchHolder 2019-06-30 20:53:42 +02:00
Florian Festi 0105957c05 New generator: SlatWallChiselHolder 2019-06-30 17:19:02 +02:00
Florian Festi 138dffbf2a New generator: SlatWallCaliperHolder 2019-06-30 15:48:09 +02:00
Florian Festi be8aed394a New generator: Slatwall PlaneHolder 2019-06-30 15:18:11 +02:00
Florian Festi 09df973d69 New generator: SlatwallConsole - an outset and angled plate to mount stuff to 2019-06-22 00:07:23 +02:00
Florian Festi 810c3dbe3e New generator: SwTypeTray - a tray to hang at a slat wall 2019-06-22 00:05:57 +02:00
Florian Festi f1ce996aae New generator: SwPliersHolder - a bar to hang pliers on 2019-06-22 00:04:30 +02:00
Florian Festi 6c85ae7ea2 Add trapezoidSideWall() that supports radius param for additional strength 2019-06-21 23:16:59 +02:00
Florian Festi 6a809e17e7 Move trapezoidWall() from UnevenHeightBox to Boxes class 2019-06-21 21:37:57 +02:00
Florian Festi 01ca56fdce Support all different section syntaxes (sx, sy, ...) side by side 2019-06-21 21:37:57 +02:00
Florian Festi db706fc939 SlatWall edges: Make bottom hook selectable, various fixes 2019-06-21 21:36:28 +02:00
Florian Festi 1e35a3b9ed New generator: SwSlottedHolder
A tool holder for slat wall
2019-06-21 21:22:10 +02:00
Florian Festi 5cef906a9a Add SlatWallHoleEdge (dD) classes
Similar to FigerHolesEdge (h)
2019-06-21 18:47:29 +02:00
Florian Festi 9415a6864f Add boxes/generators/_swtemplate.py as a starting point for Slat Wall boxes 2019-06-13 19:02:02 +02:00
Florian Festi aadf5ceafc Add Edge types, example and UIGroup for slat wall compatible boxes 2019-06-13 19:00:32 +02:00
chrysn 753422fa46 New generator DiscRack
A rack for storing disk-shaped objects vertically next to each other
2019-06-01 13:09:01 +02:00
Germain Lemasson e8e248994b Add a StorageSelf generator. This is a shelf for storing TypeTray boxes.
It is based on TypeTray generator. The sh parameter replace the sx parameter.
It is not a subclasse of TypeTray in order to have the top and bottom at
the right place.
2019-06-01 12:52:34 +02:00
Florian Festi a6ca723759 Mirror holes on the other walls
to have them match up. Otherwise boxes with non symetric top edges don't fit
together.

Fixes #141
2019-05-11 17:18:10 +02:00
Florian Festi 46157b2030 Add .mirrorX() and .mirrorY() wrappers
These are especially useful for warpping callbacks.
2019-05-11 17:17:11 +02:00
Florian Festi 93c2093ef3 AllEdges: Fix spacing and add edegs around the corner
to make it more clear which direction the edges are pointing.

Related #132
2019-04-14 18:17:09 +02:00
Florian Festi f22be6f6d5 Fix polygonWalls for inner corners 2019-04-14 18:17:09 +02:00
Florian Festi 0b781ce7ef Add turtle param to polygonWall
to allow using it as turtle graphic command instead of a part
2019-04-14 18:17:09 +02:00
Florian Festi dc11929258 Fix _polygonWallExtend for corners with negative angles 2019-04-14 18:17:09 +02:00
chrysn 95dba0dee7 box: raise NotImplementedError
NotImplemented is a sentinel for comparisons; encountering this as an
exception would result in a meta-error.
2019-04-10 17:56:12 +02:00
Florian Festi ce8576d39e New generator: HeartBox 2019-03-24 21:52:26 +01:00
Florian Festi 7aec26e893 New .polygonWall() part
Similar to .polyline() but with (f) edges on the outside
.polygonWalls draws the surrounding walls
2019-03-24 21:50:36 +01:00
Florian Festi 4f4d947253 .corner(): Fix tabs for small arcs 2019-03-24 21:50:11 +01:00
Florian Festi f178215f20 .corner(): Also accept (angle, radius) tuples 2019-03-24 21:50:11 +01:00
Florian Festi c09ee50fbd New generator: NotesHolder 2019-03-23 12:36:21 +01:00
Florian Festi 8bacd1f766 UniversalBox: Fix missing lids for various top_edges
Call got refactored away

Resolves: #121
2019-02-27 22:58:05 +01:00
Martin Müller fb4791f803 Fix typo in help text for tabs 2019-02-26 00:02:30 +01:00
Florian Festi cbb000f12e DoveTailJoint: remove no longer needed ctx.translate 2019-02-24 14:45:57 +01:00
Florian Festi abed8c06ac FingerHoles: use .saved_context() 2019-02-24 14:42:48 +01:00
Florian Festi 72617110cf FingerHoleEdge: Use modern code and add tab support 2019-02-24 13:14:21 +01:00
Florian Festi eb5f3008da RoundedTriangleEdge: Add tabs 2019-02-24 12:16:47 +01:00
Florian Festi 8640514daf Omit reference for svg_Ponoko format 2019-02-14 21:36:54 +01:00
Florian Festi 8db3942757 UniversalBox: Fix positioning of lid parts 2019-02-14 21:32:27 +01:00
Florian Festi 25ea02d317 Handle the drawing reaching into the negative x axis properly 2019-02-14 21:15:28 +01:00
Florian Festi c6e872a146 Add tabs to .parts 2019-02-14 17:34:22 +01:00
Florian Festi 81708bbbca .polyline: mention tabs feature in doc string 2019-02-14 17:32:59 +01:00
Florian Festi 3a0e34eed8 Fix NutHole which broke after switching over to saved_context 2019-02-14 17:31:56 +01:00
Florian Festi 679234afd3 Fix docstrings of .open() and .close() to match new use pattern 2019-02-13 09:04:57 +01:00
Florian Festi 9b1ce265bf Make docstrings ready for autodoc 2019-02-13 09:01:20 +01:00
Florian Festi e3ba617f22 Fix traceback for top_edge == "L"
No longer access the t1 edge type after changing it which may lead
to t1 being a char instead of a Edge instance

Thanks to michael (https://hackaday.io/hacker/381347-michael) for
pointing this out!
2019-02-10 19:49:51 +01:00
Florian Festi 0d07f48b7f Remove .open() call from the .render() method
Having this call there was necessary in the past as the open() method would
need the canvas size as a parameter. This is now determined automatically
after rendering.

Still calling open() is deprecated but won't result in an error.
2019-02-08 17:43:15 +01:00
Florian Festi 861c8451e2 Remove call to .close() from .render() method
There is really no need for all the generator to care
Still calling it is deprecated but won't result in an error
2019-02-08 17:32:04 +01:00
Florian Festi 2ba6fa1bf3 Use .saved_context() instead of .ctx.save() and .restore() 2019-02-07 22:43:04 +01:00
Florian Festi 1724f67bdf Delete never to be finished printer generator
This should have become a 3D printer using strings in a delta configuration.
2019-02-07 22:43:04 +01:00
Florian Festi ded5addbe9 Remove no longer needed calls to ctx.stroke()
Boxes.move() take care of that nowadays
2019-02-07 22:43:04 +01:00
Florian Festi 80ab24dceb Fix format of doc strings 2019-02-07 17:42:41 +01:00
Wayne Wylupski c5d434105b Add svg_Ponoko output format
This is just regular SVG with Ponoko-specific line properties
Yes, the lines are too thin to be seen in a regular web browser.

Resolves: #112
2019-02-03 16:30:28 +01:00
Wayne Wylupski abacdd486e Implement proper color handling
Avoid accessing Boxes.ctx (the cairo context) all over the code.
Have named colors
2019-02-03 16:28:02 +01:00
Wayne Wylupski c573914bcd Add Boxes.saved_context() context manager
Avoid directly accessing Boxes.ctx (the cairo context) all over the place.
Also have a more modern API for returning to a previous spot.
2019-02-03 16:25:31 +01:00
Wayne Wylupski acb457be2a Add GPL copy right header 2019-02-02 18:05:04 +01:00
Florian Festi 2e5a19a40f Python 2 compat fix 2019-01-12 18:42:44 +01:00
Florian Festi 6f4e94577b New generator: RectangularWall 2019-01-12 15:28:17 +01:00
Florian Festi dac6b3ac3d Fix Edge descriptions
Add descriptions for edges that don't have their own class

Make ChestHingeFront sub class of Edge as BaseEdge no longer draws anything
2019-01-12 15:28:17 +01:00
Florian Festi 1739d11af5 Doc string for GearSettings 2019-01-12 15:28:17 +01:00
Florian Festi d0356a12a3 Add parameters to addTopEdgeSettings() for changed defaults 2019-01-12 00:07:37 +01:00
Florian Festi ba3cacbf93 RoundedTriangleEdge: Add outset setting 2019-01-12 00:07:22 +01:00
Florian Festi 2747d9719a Add RoundedTriangleEdge to top_edges 2019-01-12 00:00:55 +01:00
Florian Festi 31fd0024ee Add RoundedTriangleEdge t
Based on the Caddy generator by bobm123 in the PR #14
(https://github.com/florianfesti/boxes/pull/14)

Edge will be added to the TypeTray generator to achieve similar results as Caddy

Co-authored-by: bobm123 <bobm123@gmail.com>
2019-01-11 23:56:28 +01:00
Florian Festi 64fb498e6e UniversalBox: Use a more robust way of placing the pieces
No longer rely on all side walls having the same height
2019-01-11 19:41:02 +01:00
Florian Festi 97e7e3b68f TypeTray: Swap vertical edge types to match the layout of the UniversalBox 2019-01-11 19:41:02 +01:00
Florian Festi 5c70515f01 TypeTray: Add lids matching top_edge 2019-01-10 22:27:36 +01:00
Florian Festi 371097aa89 PaintStorage: Make grip hole smaller and more rounded
Fixes #108
2019-01-10 22:09:45 +01:00
Florian Festi c0a782b745 TypeTray: Add support for all top_edges 2019-01-03 11:13:27 +01:00
Florian Festi c2615d4b38 TypeTray: rearrange parts 2018-12-27 17:19:10 +01:00
Florian Festi 73050d4969 Make .continueDirection() more private 2018-12-22 17:23:33 +01:00
Florian Festi 2df63b6ec8 ShutterBox: Add style with two rounded corners
Move generator to FlexBox category
2018-12-19 18:04:34 +01:00
Florian Festi 879b3149bb New generator: ShutterBox
A box with a rolling shutter made out of flex
2018-12-13 18:39:01 +01:00
Florian Festi 4a79c37e71 CardBox: Add gripping ledge to the lid 2018-12-11 19:33:52 +01:00
Florian Festi 4d2592fecf Add e edge to bottom_edge selection 2018-12-08 18:22:13 +01:00
Florian Festi fd956d1f08 rectangularHole(): clamp corner radius to available space 2018-12-08 12:42:36 +01:00
Florian Festi 8f03030c53 PaintStorage: Add carrying hole 2018-12-08 12:37:20 +01:00
Florian Festi 925c6ce6dc PaintStand: Fix previous change 2018-11-24 22:47:35 +01:00
Florian Festi 17e4eb8563 PaintStorage: Fix heights 2018-11-15 22:10:19 +01:00
Florian Festi ed6855d79c RoundedPlate: Call first callback only once
Remove left over call to .cc()
2018-11-09 21:01:00 +01:00
Florian Festi d85fa4e849 LaserClamp: Improve design
Extend bottom bracket and add hook
Use only one bottom bracket
Add finger ring to allow easier placement
Improve top hook
2018-11-05 22:08:23 +01:00
Florian Festi 0f999a89ad New generator: AllEdges showing all the standard edge types 2018-11-05 21:38:49 +01:00
Florian Festi b7bd6306d1 Fix division by zero in FlexEdge 2018-11-05 21:38:49 +01:00
Florian Festi fe89528e05 PaintStorage: Add support for hexagonal hole patterns 2018-10-29 18:16:16 +01:00
Florian Festi 36077e6cb0 PaintStorage: Optimize part placement 2018-10-29 15:44:18 +01:00
jens persson c28541a977 Add a generator for paintstand
A simple stackable paintstand, very much inspired by:
https://www.youtube.com/watch?v=6HJarJg1npk
2018-10-29 15:11:35 +01:00
jens persson e95f36a18a Parameterize Silverwarebox
Make the messurements selectable
2018-10-28 13:19:37 +01:00
Florian Festi 80288079af New generator: TwoPiece
Based on a generator with the same name by bobm123<bobm123@gmail.com>
2018-10-25 22:35:20 +02:00
Florian Festi 5b93c1228d CardBox: Add num param for the number of decks 2018-10-25 17:36:46 +02:00
Alexander Bulimov 5a13fbea8b Add DisplayCase generator 2018-10-24 21:28:54 +02:00
Florian Festi 2060293cf3 New generator: RoyalGame of Ur 2018-10-24 21:23:57 +02:00
Florian Festi 397cc81690 FlexBox3: Use .move()
Use .edgeCorner() instead of own implementation
2018-10-19 22:12:13 +02:00
Florian Festi f7c2d91e42 FlexBox2: Make latchsize configurable 2018-10-19 21:46:30 +02:00
Florian Festi 417a053ad3 FlexBox2: Use .move() 2018-10-19 21:45:26 +02:00
Florian Festi 4d76457d3a FlexBox: Make latchsize configurable 2018-10-19 21:35:11 +02:00
Florian Festi 791ef0fdca FlexBox: Use .move() 2018-10-19 21:33:52 +02:00
Florian Festi a9009732ac FlexBox4: Make latchsize configurable 2018-10-19 19:20:23 +02:00
Florian Festi 4ba18d87b7 FlexBox4: Modernize a bit and use .move() 2018-10-19 19:15:55 +02:00
Florian Festi a4b5af98e2 Add new "mirror" key word to the where parameter of Boxes.move() 2018-10-19 19:05:07 +02:00
Florian Festi c45b5cd30b Add debug rectangle for move commands 2018-10-19 18:58:29 +02:00
Florian Festi 1cf671ddd2 FlexBox4: Calculate length of flex after adjusting the radius 2018-10-19 10:02:16 +02:00
jens persson 716fd389e3 Add a box for storage of playingcards
The box have place for two stacks of cards with a divider between.
It have a slide in lid.
2018-10-09 16:55:34 +02:00
Florian Festi 14c6338713 New generator: LaserClamp 2018-10-06 22:55:46 +02:00
Florian Festi 60cb0eed87 CabinetHinge: Add style param with new value outside 2018-10-04 22:18:07 +02:00
Florian Festi b07983582e HingeBox: Add support for split lids 2018-09-30 15:31:16 +02:00
Florian Festi db16b16533 .rectangularWall(): Fix placement for hex holes enabled by holesMargin param 2018-09-13 09:23:56 +02:00
Florian Festi 9ad64a1764 Boxes.buildArgParser: Update doc string 2018-09-10 10:00:02 +02:00
Florian Festi 259834a983 ArgparseEdgeType: Add doc string 2018-09-10 10:00:02 +02:00
Florian Festi 84df48ba1d Add units (mm) to the tabs param description 2018-09-10 10:00:02 +02:00
Rotzbua 84ce484f93 [doc] add hint to disable reference 2018-09-08 15:33:09 +02:00
Florian Festi b8ff1b8cf6 TrayLayout: Make parsing a bit more robust
Ignore white space at the end of lines with horizontal walls
2018-08-27 16:55:00 +02:00
Florian Festi b4a95aca15 TrayLayout: Fix burn correction for bottom plate
All edges were missing the burn correction outset (aka kerf).
2018-08-27 15:13:31 +02:00
Florian Festi fc127237fd Fix placement of fingerHoles in CrossingFingerHoleEdge
which were too low by one burn
2018-08-27 15:12:17 +02:00
Florian Festi 0e8a718a1b Fix placement of debugging rectangel for FingerHoles
Not the outer border of the lines are exactly at the border of the matching
part
2018-08-27 15:10:50 +02:00
Florian Festi 3767598d5d Fix placement of rectangularHole() which was off by one burn 2018-08-27 15:09:17 +02:00
Florian Festi ec77d6aa22 Doc strings for Parts methods 2018-08-23 23:28:24 +02:00
Florian Festi 897fc23029 Doc string for Boxes.flex2D() 2018-08-23 23:28:24 +02:00
Florian Festi 6c43f4a382 Doc string for Boxes.TX() 2018-08-23 23:28:20 +02:00
Florian Festi a99094b8d7 Doc string for Boxes.partsMatrix() 2018-08-23 23:27:35 +02:00
Florian Festi d360703cba TypeTray: Make bottom_edge parametric
This does not affect the inside walls
2018-08-16 20:49:12 +02:00
Florian Festi 46175dde11 Fix url params for checkboxes when re-opening an input form
Thanks to Rotzbua for pointing the issue out!
2018-08-16 08:54:52 +02:00
Florian Festi 8563818925 Hook: Boxify and parametrize generator 2018-08-14 14:01:59 +02:00
Marius Bergmann 2831b41d21 Add wall hook generator 2018-08-14 11:55:31 +02:00
Florian Festi f83ca31a0a RoundedBox: Add wallpieces param 2018-08-06 19:46:48 +02:00
Florian Festi af7f29c51f Add (wall)pieces param to roundedPlate() and surroundingWall() 2018-08-06 19:46:23 +02:00
Florian Festi 7c8ae621f7 CloseBox: Put bed blots at the right places
Keep them still disabled, though.
2018-07-25 16:34:58 +02:00
Florian Festi 05c41be4d1 Remove or comment debugging outputs 2018-07-24 20:36:13 +02:00
Florian Festi cd0fcdcb96 Set a char for CrossingFingerHoleEdge tp avoid collision with the "e" edge. 2018-07-02 19:13:52 +02:00
Florian Festi 44bce898e0 UniversalBox: Add alternative "lid" for f and F top_edges:
A rim leaving the box open
2018-07-02 19:07:26 +02:00
Florian Festi 2c7f9f4dc0 UniversalBox: Add f and F as possible top_edge types 2018-07-02 19:07:26 +02:00
Florian Festi 37a798e91e Add top "lid" for F edge 2018-07-02 19:07:25 +02:00
Sebastian Reichel 8b172cbddd Add 10" rack box derived from 19" rack box 2018-06-27 21:48:35 +02:00
Sebastian Reichel d75ea78196 Add support for specifying font color/size 2018-06-27 21:48:35 +02:00
Florian Festi 6538c92910 OrganPipe: Offer multiple units for the pressure given 2018-05-18 14:12:30 +02:00
Florian Festi 924372f79d Use a minimal line width (0.05mm) even for very small burn values
to keep the lines visible in these cases.
2018-05-17 11:27:58 +02:00
Florian Festi 1d0aa05e9a OrganPipe: Use unicode for Py 2 compat 2018-05-12 17:14:02 +02:00
Florian Festi d9e8930e31 OrganPipe: Add encoding 2018-05-12 17:11:26 +02:00
Florian Festi 4798c24815 New generator: Organ pipe
Still untested
2018-05-12 17:06:10 +02:00
Florian Festi f99bf32c85 Add hinges and spacing params to CabinetHingeEdge 2018-05-08 23:55:09 +02:00
Florian Festi 2828a85725 Add flatHole() for shafts that are flattened on both sides. 2018-05-05 19:08:37 +02:00
Florian Festi 50b9bc9ffb TypeTray: Fix finger holes in bottom which had been mirrored in x direction 2018-04-25 23:36:32 +02:00
Florian Festi 616bf42239 RegularBox: Fix top edge for "angled hole" top 2018-04-25 22:02:52 +02:00
Florian Festi d3c922d289 RegularBox: Use FingerJointSettings for vertical edges, too
Fixes #65
2018-04-25 22:02:24 +02:00
Florian Festi 73438fb614 Fix .__getattr__ of Settings class so it can be passed to copy.copy() 2018-04-25 21:52:51 +02:00
Florian Festi 879ae1af68 DisplayShelf: Do not render front wall if set to zero 2018-04-15 19:43:31 +02:00
Florian Festi ebe02e2be5 DisplayShelf: Use better defaults 2018-04-15 19:43:31 +02:00
Florian Festi 65358c9fad Add hint to outside param to nominally inner sizes 2018-04-05 22:55:23 +02:00
Florian Festi b2c54310b6 UnevenHeightBox: Fix lid
Looks like it is difficult to come up with a really non symmectrical test case.
Thanks to Mekol for pointing this out!

Related #60
2018-03-17 21:04:24 +01:00
Florian Festi fa44eb27cf UneveHeigthBox: Minor tweaks 2018-03-17 17:32:21 +01:00
Florian Festi 58cb06ec94 UnevenHeightBox: Add lid 2018-03-17 17:19:47 +01:00
Florian Festi 7c716a9e5f UnevenHeightBox: Make bottom edge parametric 2018-03-15 20:46:00 +01:00
Florian Festi 786ff222c2 New generator: UnevenHeightBox
Box with different height in each corner
2018-03-15 19:08:47 +01:00
Florian Festi 0604744284 OttoSoles: Add dove tail joints to the connecting edges 2018-03-11 17:43:55 +01:00
Florian Festi f2106a2c8c OttoSoles: Add support for tabs 2018-03-11 09:13:40 +01:00
Florian Festi 49ce2ed412 New generator: Ottosoles
Foam soles for the OttO Bot
2018-03-10 19:28:30 +01:00
Florian Festi 90ba9f8ee9 LidEdge: Fix duplicated option for spring 2018-03-05 20:10:55 +01:00
Florian Festi dd7d282c65 Rack19Box: Fix width and placement of holes 2018-02-27 18:41:39 +01:00
Florian Festi 66c419ab7f New generator: Rack19Box
Closed box with screw on top for mounting in a 19" rack.
2018-02-27 18:04:26 +01:00
Florian Festi c3917d3292 IntegratedHingeBox: switch x and y measurements
So the hinge is at the backside along the x axis
2018-02-20 08:23:07 +01:00
Florian Festi 8cb9919968 FlexBox2: Rename params to reflect the actual axis of measurement
h -> x
y -> h
x -> y
2018-02-19 16:49:04 +01:00
Florian Festi 78d35a92e0 Fix CrossingFingerHoleEdge
which relies on __call__() of the super class drawing a line
2018-02-12 22:04:20 +01:00
Florian Festi 211e302b41 Fix devision by zero for zero lengths 2018-02-10 21:00:08 +01:00
Florian Festi 039fe5f2ee ElectronicsBox: Fix holes in the lid 2018-02-03 22:33:27 +01:00
Florian Festi a70222d646 New generator: RackBox 2018-02-03 22:31:53 +01:00
Florian Festi 6ef43a8f48 Add flangedWall() and use it in the ElectronicsBox 2018-02-03 21:52:12 +01:00
Florian Festi b0bef745b2 ElectronicsBox: Fix top edge and height 2018-02-02 14:06:18 +01:00
Florian Festi a53c5857c2 New generator: AngledCutJig
For making angled cuts in a laser cutter
2018-01-21 22:05:48 +01:00
Florian Festi 8314a413fd Fix placement of rectangularTriangles 2018-01-21 16:48:43 +01:00
Florian Festi 4e034949d3 Fix tabs for straight edges (eE) with bed bolts
Add tabs param to bedBoltHole
2018-01-19 23:48:27 +01:00
Stefan Grosshauser 73e1821e71 enable bedbolts for Straight 'e' and OutSet edges 'E'
note that this mostly ignores that positioning bedbolts is done
in the BedBolt class for finger joints.
Coding style could be much improved.
2018-01-18 15:07:33 +01:00
Stefan Grosshauser 07f88cd8e5 make __call__() abstract for BaseEdge; and inherit OutSetEdge from Edge 2018-01-18 15:07:24 +01:00
Florian Festi 62b6016448 OttoLegs: Increase number of tabs for feet and ankles 2018-01-13 21:11:33 +01:00
Florian Festi 68f1c375f7 OttoLegs: Move tabs to outer ring 2017-12-20 18:25:55 +01:00
Florian Festi 7bd2b9e452 HingeEdge: Add tabs to hinge disk 2017-12-20 18:25:55 +01:00
Florian Festi ce240105a8 Add tabs param to hole() 2017-12-20 18:25:55 +01:00
Florian Festi c02cc1e95c Add tabs to corner 2017-12-20 18:25:55 +01:00
Florian Festi d2496df3bb Boxes.moveArc() 2017-12-20 18:25:44 +01:00
Florian Festi 703d0e49db OttoBody: Add tabs to the PCB clamps 2017-12-19 20:10:08 +01:00
Florian Festi f44f87a25c Remove print for Python 2 compat 2017-12-19 19:36:37 +01:00
Florian Festi 946d040bac OttoBot: Move to Misc UI Group
Set default leg legth to 34mm
2017-12-18 23:49:18 +01:00
Florian Festi e26991695a Mark top side of servo mount.
Move servo mounts up as they need to be cut separately (in 5mm)
2017-12-17 15:30:32 +01:00
Florian Festi e5bb6a5d7a Add tabs to Boxes.edge() and most Edge classes
and Boxes.polyline()

Add to some parts of the Otto Bot
2017-12-15 16:45:32 +01:00
Florian Festi e0caa3aad8 OttoBody: Add fix for changed ChestHinge 2017-12-09 16:54:20 +01:00
Florian Festi f0dc89c617 Make play of ChestHinge a regular param 2017-12-09 16:54:10 +01:00
Florian Festi 9dfa95f45b Fix ChestHinge
Add the play of the hinge to the width of the edge
Adjust IntegratedHingeBox
Fixes #45
2017-12-07 22:29:09 +01:00
Florian Festi 319b1f869f Use unicode for Python 2 compat 2017-11-30 23:32:30 +01:00
Florian Festi d52b561a2f Use explicit encoding 2017-11-30 23:30:50 +01:00
Florian Festi 1b2f5791bd Use Boxes.description in the cli help and the web interface 2017-11-30 22:48:02 +01:00
Florian Festi 3dfd99c68a Rename method to not collide with new description property 2017-11-30 22:46:35 +01:00
Daniela Festi 72e6dd2213 Added a description to TrafficLight generator 2017-11-30 22:46:35 +01:00
Daniela Festi fa9ac678c0 Added variables for description of generators to main class 2017-11-30 22:46:35 +01:00
Florian Festi 0d9885ad4c Stachel: Fix length of pin clamp for middle layer 2017-11-23 21:04:54 +01:00
Florian Festi 2772eba87c Gears: holes for the shafts 2017-11-22 21:32:25 +01:00
Florian Festi a7f6ef1b62 Gears: Print sizes 2017-11-22 21:32:04 +01:00
Florian Festi afbb8d11fd Gear generator 2017-11-22 21:32:04 +01:00
Florian Festi eb07c927c4 Support multi line .text() 2017-11-22 21:32:04 +01:00
Florian Festi f77c19d839 Stachel: Clean up and move generator to Misc 2017-11-21 23:08:39 +01:00
Florian Festi 5a6bc71a7c Stachel: replace absolute sizes with (internal) parameters 2017-11-21 22:39:57 +01:00
Florian Festi 941676d2b7 New generator: Stachel - an end pin for bass recorders 2017-11-21 22:39:57 +01:00
Florian Festi 08d7a026b1 NemaMount: Add finger holes to copy on another part
instead of using the base plate
2017-11-19 19:30:06 +01:00
Florian Festi 642212d2ce New generator: NemaMount 2017-11-19 18:10:59 +01:00
Florian Festi 46c4960edc New generator: Display 2017-11-18 18:28:13 +01:00
Florian Festi 45c73e57fb New generator: EletronicsBox
Closed box with screw on top and mounting holes
2017-11-15 17:19:41 +01:00
Florian Festi 90078049f8 Also support d (diameter) param for Boxes.hole() 2017-11-15 17:19:41 +01:00
Florian Festi 36c0ec48fe TypeTray: Add closedtop parameter
Add a top wall turning the type tray into a closed box with multiple
compartments
2017-11-14 20:21:01 +01:00
Florian Festi 7793729688 New generator:LBeam
Simple Lbeam made of two wall joint with a right angle
2017-11-14 20:20:08 +01:00
Florian Festi 8d846df9d1 Add D holes to knobs 2017-11-07 23:39:50 +01:00
Marius Bergmann c0325b52ac template: Remove invalid parameter and whitespace 2017-11-03 22:54:06 +01:00
Florian Festi dd2cedeb57 Knobs: Improve param descriptions 2017-10-01 21:13:29 +02:00
Florian Festi 696307397d Refuse knobs with less than 2 serrations 2017-10-01 21:01:18 +02:00
Florian Festi 98e9f827ec waivyKnob: Fix number of serrations
Used to print only have the number of serrations and didn't close
on uneven numbers
2017-10-01 20:54:04 +02:00
Florian Festi dfcf3d65c8 New generator: ConcaveKnob in Parts 2017-10-01 20:34:19 +02:00
Florian Festi 647c5302b6 New generator: WaivyKnob 2017-10-01 20:20:36 +02:00
Florian Festi 241c65b244 .waivyKnob(): Fix start position for angles != 45 degees 2017-10-01 20:18:42 +02:00
Florian Festi 64c980817b Manully select font face 2017-09-19 22:53:27 +02:00
Florian Festi 9dbc8fd98b Modernize _template.py 2017-09-16 21:30:41 +02:00
Florian Festi f829ff2a82 PoleHook: Use screwhead param for knob 2017-09-16 21:30:41 +02:00
Florian Festi b7f877eacd Fix bedbolts
BedBoltSettings need to become a subclass of Settings instead of a list
of values at some point.
2017-09-13 11:39:03 +02:00
Florian Festi b623008ea3 ClosedBox: fix (commented out) BedBolt support 2017-09-13 11:39:03 +02:00
Florian Festi 23a1da105e WineRack: Remove debug code for checking number of walls needed. 2017-09-05 23:05:11 +02:00
Florian Festi 7453455512 WineRack: Make unnecessary walls optional 2017-09-05 23:00:54 +02:00
Florian Festi 0e7827f9a9 WineRack: Add front cover 2017-09-05 21:04:20 +02:00
Florian Festi fbfb851474 New generator: WineRack
A honey comb like wine rack
2017-09-05 21:04:20 +02:00
Florian Festi ab750077fa .partsMatrix(): Do not error out for zero or negative parts count 2017-08-28 23:10:56 +02:00
Florian Festi ddcf13bf6c svgutil: Make detection of view port a bit more robust 2017-08-20 19:56:33 +02:00
Florian Festi 592fbe95c4 OttoLegs: Change ankles. Fix servo horn with a C-ring
Fixes issue with servo horns only being adjustable in steps of 18 degrees
This led to missaligned feet which resulted in loss of freedom of movement.
2017-08-19 22:14:30 +02:00
Florian Festi 6fecb9aa29 OttoBody: Move main switch to outer wall
Shorten servo holder so it no longer needs a hole for the switch
2017-08-19 19:31:54 +02:00
Florian Festi 398851255d OttoLegs: Use servo horn for actuating the ankles 2017-08-12 00:07:34 +02:00
Florian Festi 4dd271df74 OttoLegs: Make ankle screw screwed into leg
to give more stability to the joint
2017-08-11 18:44:34 +02:00
Florian Festi bb76a8bd7b OttoLeg: Use partsMatrix to get multiple part 2017-08-11 17:46:50 +02:00
Florian Festi 93b94d6e70 Fix move="right" for partsMatrix 2017-08-07 17:08:16 +02:00
Florian Festi 09dd779cbd OttLegs: Make hole for servo cable over whole width of the leg 2017-08-07 17:03:57 +02:00
Florian Festi fafc1c01ef OttoLegs: break ankles into separate paths 2017-08-03 23:19:32 +02:00
Florian Festi e91f53b0fa OttoLegs: Change design of ankles 2017-08-03 23:00:20 +02:00
Florian Festi b4b6799721 OttoBody: Add hook to PCB Clip 2017-08-03 22:32:33 +02:00
Florian Festi e3035da713 OttoBody: Move hole for push button 2017-08-01 21:19:01 +02:00
Florian Festi 2e9ac29d01 OttoLegs: Make length of legs configurable 2017-08-01 21:17:35 +02:00
Florian Festi 979b6ae936 OttoBody: Add push button 2017-07-31 21:18:06 +02:00
Florian Festi a639c04de2 OttoBody: Clips for keeping the mouth shut 2017-07-31 21:08:26 +02:00
Florian Festi 31e3817f32 OttoBody: New PCB Clamps 2017-07-31 20:46:41 +02:00
Florian Festi fd23c74e07 Otto Body: parts for mounting the PCB 2017-07-30 21:23:00 +02:00
Florian Festi e26d17c840 AngledBox: Don't overwrite h param
Using h as temporary variable was overwriting the variable containing the
height of the box.

Fixes #41
2017-07-28 23:33:36 +02:00
Florian Festi 83a72552e2 Ottobot: Make hole for USB plug a bit smaller again 2017-07-25 22:43:11 +02:00
Florian Festi c823cb78d6 OttoBot: Add Hole for on/off switch 2017-07-25 21:57:58 +02:00
Florian Festi 3876ea5ddd Ottobot: Increase hole for USB plug 2017-07-23 21:29:14 +02:00
Florian Festi 074646fdec _template.py tweaks 2017-05-20 20:41:51 +02:00
Florian Festi 82463317bb Edges generator for printing the registerd Edge types
Not really a generator...
2017-05-20 20:41:51 +02:00
Florian Festi abb7706b6d Python2 compat for Inkscape 2017-05-14 21:47:49 +02:00
Florian Festi 770b3dc02f Add .dHole() 2017-05-05 16:52:42 +02:00
Florian Festi d7aadc9b72 Add callback param to gears.gearCarrier() 2017-05-04 21:41:18 +02:00
Florian Festi 07ede0a5c5 Add support for "only" in the move param of .partsMatrix() 2017-05-04 21:41:18 +02:00
Florian Festi 9bf9922d28 Stroke in move after part is completed 2017-05-04 21:41:18 +02:00
Florian Festi 3822cc4882 Add TX holes 2017-05-04 21:41:18 +02:00
Florian Festi ae619aabea Flexbox4: Fix length of lid
to overlap the side wall
2017-04-11 21:09:41 +02:00
Florian Festi 7bbf82c958 UBox: Fix size of lid 2017-04-11 20:55:21 +02:00
Florian Festi b63dcfeee6 Make Traylayout work without main function 2017-04-05 04:33:42 +02:00
Florian Festi 5b9c8e4d71 Remove main function from generators
Generators are no longer executable on their own. Use scripts/boxes
instead.
2017-04-05 04:33:42 +02:00
Florian Festi bffd732c3f scripts/boxes: Use generator classes instead of main functions
Make Boxes.parseArgs more robust
--list generators by UI group.
Pass arguments explicitly instead of fiddling with sys.argv
2017-04-05 04:33:28 +02:00
Florian Festi f9c0cb8cab Support putting class and instances into UI Groups 2017-04-02 02:31:37 +02:00
Florian Festi 8e65298c6b Planetary2: Print gearing ratio and change default for sun gear 2017-04-01 23:54:44 +02:00
Florian Festi 12f2cbc1e2 Planetary2: Add allignment pins to sun gear 2017-04-01 21:18:48 +02:00
Florian Festi 273190932f Planetary2: Order part the way they need to go together 2017-04-01 21:06:57 +02:00
Florian Festi 4c17d6a4a1 Planetary2: Put planet gears in the order they need to go together 2017-04-01 20:59:19 +02:00
Florian Festi 7f1e54be15 Planetary2: Add pin holes for ring gear and add second ring 2017-03-30 20:59:13 +02:00
Florian Festi 8487d5c379 Planetary2: New generator for a ~100 reduction to belt pulley 2017-03-29 07:44:48 +02:00
Florian Festi 93480e082d gears: Add teeth_only param to allow using gears as lines and not only as parts 2017-03-29 07:42:57 +02:00
Florian Festi 427a6fc54b Change default of mount_hole to 0 2017-03-29 07:42:15 +02:00
Florian Festi bad114400f Use better default for height of pulley (using the new keyword style) 2017-03-29 07:41:05 +02:00
Florian Festi ff6da9eb80 Fix pulley size calculation for r_axle being None 2017-03-29 07:40:17 +02:00
Florian Festi c7490155f7 Add nema_mount default parameter
Make nema_sizes available outside of NEMA() function.
This whole stuff should probably move into it's own file/class at some point
2017-03-29 07:38:10 +02:00
Florian Festi 53cbed768b Allow using keyword args for buildArgParser for setting the defaults 2017-03-29 07:36:50 +02:00
Florian Festi c2fa8c85cf Pulley: Add insideout param
This allows using timing belts as strainwaves in harmonic drives.
2017-03-22 22:03:09 +01:00
Florian Festi c2ab70eefe Add Boxes.circle() primitive 2017-03-22 22:03:09 +01:00
Florian Festi 71bd013f3f RegularBox: Better description 2017-03-13 11:41:12 +01:00
Florian Festi cd0d49bf6f OttoLegs: Use two different hole sizes for the ankle
to allow screwing it into one side while moving freely on the other
2017-03-12 14:47:21 +01:00
Florian Festi cd3fee5e76 OttoLegs: More tweaks
Lengthen front by 1mm to close gap to servo
Lower ankle hole at leg by 0.5mm
Shorten internal wall holding the servo at top
2017-03-11 20:14:29 +01:00
Florian Festi 672295310b OttoBody: Body for Otto LC 2017-03-11 18:22:41 +01:00
Florian Festi c6c2e203f2 OttoLegs: Make ankle bolt diameter configurable 2017-03-11 18:22:41 +01:00
Florian Festi 271bed0308 OttoLegs: wall for better fixating the servos 2017-03-11 18:22:41 +01:00
Florian Festi 6bc695a418 OttoLegs: Add second leg 2017-03-11 18:22:41 +01:00
Florian Festi e316877d06 OttoLegs: Make room for cables 2017-03-11 18:22:41 +01:00
Florian Festi db4e878bb4 OttoLegs: Legs for Otto LC 2017-03-11 18:22:41 +01:00
Florian Festi 121e2107fb Import lxml locally to avoid hard dependency
The code is used in the Inkscape plugin only.
2017-03-10 23:00:41 +01:00
Florian Festi 4ab1dcc323 RoundedBox: Fix description 2017-03-06 22:24:05 +01:00
Florian Festi eecbceda11 Rename Box2 -> UniversalBox 2017-03-06 22:24:05 +01:00
Florian Festi 47f3037e23 rename Box3 -> OpenBox 2017-03-06 22:24:05 +01:00
Florian Festi 5026c2bc03 Rename Box5 -> HingeBox 2017-03-06 22:24:05 +01:00
Florian Festi e5b19978dd Rename Box4 -> IntegratedHingeBox 2017-03-06 22:24:05 +01:00
Florian Festi 75b7724255 Rename Box -> ClosedBox 2017-03-06 22:24:05 +01:00
Florian Festi 5956182328 Parts.ringSegment() 2017-03-05 12:52:44 +01:00
Florian Festi 5e33d057fc UBox: Limit radius to possible values and merge flex if radii touch 2017-03-04 15:29:28 +01:00
Florian Festi a0d992f43a Stop printing random stuff on stdout 2017-02-26 17:02:16 +01:00
Florian Festi 41bc4d028f Use sys.stdout.buffer to be able to write bytes (for Python 3 compat) 2017-02-25 19:59:53 +01:00
Florian Festi cb8ebefeb1 Fix Servo.choices() and use it in robotarm 2017-02-25 19:59:16 +01:00
Florian Festi 174b20fc11 Fix main 2017-02-25 19:40:24 +01:00
Florian Festi a81ba48d45 Take viewBox and size of SVG documents into account when merging them 2017-02-25 16:10:28 +01:00
Florian Festi ce87babfdd RoundedBox: Fix hole size
Size calculation was wrong but compensated the broken size adjustment with
"outside" set.
2017-02-25 15:52:51 +01:00
Florian Festi 490d089a83 Planetary: Python2 fix. // doesn't allow floats in Python 2 2017-02-25 11:24:58 +01:00
Florian Festi d4edafe2d9 Fix ChestHingeSetting
Got broken by 6756d16b67
2017-02-23 20:57:01 +01:00
Florian Festi e0a4d06c43 Hackish way to make scriptsboxes to work with Inkscape. 2017-02-23 17:38:26 +01:00
Florian Festi ff7ee22885 Add svgutil.svgMerge() allwing to add generated box into anoterh svg
Implemetation has still many short comings. E.g. assumes units and layout of
document passed in. Also assumes to be merged document to be generated by
boxes.py.
2017-02-23 17:38:26 +01:00
Florian Festi 39e74e67ba Add scripts/boxes2inkscape for generating inx files from box generators
Code for handling traylayout still missing.
2017-02-23 17:38:26 +01:00
Florian Festi a93e280477 Make reference a separate path object
Avoid it being merged with teh first par tof the drawing
2017-02-23 17:38:26 +01:00
Florian Festi e23d8034c5 Make BoolArg accept upper and lower case values 2017-02-23 17:38:26 +01:00
Florian Festi b440d1c767 Use BoolArg when creating arg parser for edges.Settings 2017-02-23 17:38:26 +01:00
Florian Festi 1b3f9dbc3a Robotarm: Generator for servo powered robot arm segments 2017-02-22 22:33:22 +01:00
Florian Festi 40d53ac1ba Robot parts: Initial commit 2017-02-22 22:33:22 +01:00
Florian Festi 1bed3f2a39 rectangularWall() fix positioning with ignore_widths
containing parts of the lower left corner.
2017-02-22 20:01:29 +01:00
Florian Festi 3cad4f27af Add tangent() function 2017-02-22 20:01:28 +01:00
Florian Festi d2774f151d Lamp: fix no longer valid default in setting 2017-02-18 19:13:57 +01:00
Florian Festi cc577956a4 Flexbox3: Fix radius of lid
May still be off a bit. But I can't see why...
2017-02-18 19:06:10 +01:00
Florian Festi 117ace3233 FlexBox3: Fix finger joints of lid 2017-02-18 19:06:10 +01:00
Florian Festi 1f9342b678 Castle: Make available in UI and adjust to current code base 2017-02-18 19:06:10 +01:00
Florian Festi 6756d16b67 Use .settings.thickness in edges instead of global value 2017-02-18 19:05:21 +01:00
Florian Festi 561eb0034c Add "Unstable" UIGroup 2017-02-15 15:55:01 +01:00
Florian Festi d3c76f2b9e Put box generator into groups and adjust the menu web page accordingly 2017-02-13 17:31:58 +01:00
Florian Festi 5a0f3d42ea Add UIGroup class and instances for structuring the box generators 2017-02-13 17:31:02 +01:00
Florian Festi c820c1b77d Move lid code from boxes/generators/box2.py to boxes/lids.py
Rename the classes to no longer show up in the list of generators
2017-02-12 23:18:37 +01:00
Florian Festi 0739fd0b94 Exclude Boxes classes starting with _ in getAllBoxGenerators()
Exclude mix-in classes that are not supposed to be used on their own
2017-02-12 22:20:32 +01:00
Florian Festi 399e5b468f New generator: UBox - a box with rounded corner at the bottom 2017-02-12 15:00:17 +01:00
Florian Festi b59de950c0 Box2: Refactor lid generation out of the Box2 class 2017-02-12 15:00:17 +01:00
Florian Festi dd6c5560f9 Support chars es edge parameters in Boxes.edgeCorner() 2017-02-12 15:00:17 +01:00
Florian Festi a7d0dda9f8 New generator: Box5 box with lid attached with cabinet hinges 2017-02-11 18:15:44 +01:00
Florian Festi 305986dad8 Add cabinet hinge to top_edge and support it in Box2 2017-02-11 18:15:44 +01:00
Florian Festi 94c727cc30 Add CabinetHingeEdge 2017-02-11 18:15:44 +01:00
Florian Festi fb5398b30d PoleHook: Initial commit 2017-02-11 18:15:34 +01:00
Florian Festi f1b8d68d65 Fix bedbolts for finger holes 2017-02-11 18:15:34 +01:00
Florian Festi 250131e152 Fix previous fix *sigh* 2017-02-09 18:47:20 +01:00
Florian Festi 3e3ed3b0dd Add finger joint settings again
Got removed accidentially in 8d754c
2017-02-09 00:02:41 +01:00
Florian Festi da6dcb4c68 Box4: Use ignore_widths to get finger joints on the whole length of all edges 2017-02-07 20:18:48 +01:00