kumiki.joints.workshop.basic_joints¶
Flat import path
kumiki/__init__.py re-exports everything on this page via from kumiki import *, so every name below is also available directly as kumiki.cut_basic_plain_miter_joint -- you do not need to import from the submodule path shown in the heading above.
kumiki.joints.workshop.basic_joints
¶
Kumiki - Basic joint construction functions
Convenience wrappers (cut_basic_ and cut_basic_plain_) that call the underlying joint functions with sensible default sizing. Use these for quick prototyping; for full control over dimensions and parameters, call the underlying cut_plain_, cut_mortise_and_tenon_, or cut_lapped_* functions directly.
cut_basic_kanawa_tsugi_joint_on_aligned_timbers
module-attribute
¶
cut_basic_kanawa_tsugi_joint_on_aligned_timbers = cut_basic_half_blind_tenoned_dadoed_rabbeted_scarf_joint_on_aligned_timbers
cut_basic_plain_miter_joint
¶
cut_basic_plain_miter_joint(arrangement: CornerJointTimberArrangement) -> Joint
Creates a miter joint between two timbers, cutting each end at half the angle between them.
Convenience wrapper with no additional sizing logic. See cut_plain_miter_joint for details.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
CornerJointTimberArrangement
|
Corner joint arrangement specifying the two timbers and their ends. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_plain_miter_joint_on_face_aligned_timbers
¶
cut_basic_plain_miter_joint_on_face_aligned_timbers(arrangement: CornerJointTimberArrangement) -> Joint
Creates a miter joint between two face-aligned timbers meeting at a 90-degree corner.
Timbers must be orthogonal. Convenience wrapper; see
cut_plain_miter_joint_on_face_aligned_timbers for details.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
CornerJointTimberArrangement
|
Corner joint arrangement. Timbers must be face-aligned and orthogonal. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_tongue_and_fork_corner_joint_on_plane_aligned_timbers
¶
cut_basic_tongue_and_fork_corner_joint_on_plane_aligned_timbers(arrangement: CornerJointTimberArrangement, tongue_thickness: Optional[Numeric] = None, tongue_position: Numeric = scalar(0)) -> Joint
Creates a tongue-and-fork corner joint (corner bridle style).
Convenience wrapper around cut_tongue_and_fork_corner_joint_on_plane_aligned_timbers. Timbers must be plane-aligned
and non-parallel.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
CornerJointTimberArrangement
|
Corner joint arrangement where timber1 is tongue and timber2 is fork. |
required |
tongue_thickness
|
Optional[Numeric]
|
Tongue thickness along shared plane normal. None defaults to 1/3 of tongue timber dimension in that axis. |
None
|
tongue_position
|
Numeric
|
Offset of tongue center from centerline in shared plane normal axis. |
scalar(0)
|
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing both cut timbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_tongue_and_fork_joint_on_plane_aligned_timbers
¶
cut_basic_tongue_and_fork_joint_on_plane_aligned_timbers(arrangement: CornerJointTimberArrangement, tongue_thickness: Optional[Numeric] = None, tongue_position: Numeric = scalar(0)) -> Joint
Compatibility alias for cut_basic_tongue_and_fork_corner_joint_on_plane_aligned_timbers.
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_tongue_and_fork_butt_joint_on_plane_aligned_timbers
¶
cut_basic_tongue_and_fork_butt_joint_on_plane_aligned_timbers(arrangement: ButtJointTimberArrangement, tongue_thickness: Optional[Numeric] = None, tongue_position: Numeric = scalar(0), shoulder_inset: Numeric = scalar(0)) -> Joint
Creates a tongue-and-fork butt joint.
Convenience wrapper around cut_tongue_and_fork_butt_joint_on_plane_aligned_timbers. Timbers must be
plane-aligned and non-parallel. The receiving (tongue) timber is not end-cut.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
ButtJointTimberArrangement
|
Butt arrangement where butt_timber is fork and receiving_timber is tongue. |
required |
tongue_thickness
|
Optional[Numeric]
|
Tongue thickness along shared plane normal. None defaults to 1/3 of tongue timber dimension in that axis. |
None
|
tongue_position
|
Numeric
|
Offset of tongue center from centerline in shared plane normal axis. |
scalar(0)
|
shoulder_inset
|
Numeric
|
Distance from receiving timber entry face to shoulder plane. |
scalar(0)
|
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing both cut timbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_plain_butt_joint
¶
cut_basic_plain_butt_joint(arrangement: ButtJointTimberArrangement) -> Joint
Creates a butt joint where the butt timber is cut flush with the receiving timber's face.
The butt timber's end is cut along the plane of the best-matching long face of the
receiving timber. Works at any non-parallel angle. The receiving timber is not cut.
Convenience wrapper; see cut_plain_butt_joint for details.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
ButtJointTimberArrangement
|
Butt joint arrangement with butt_timber, receiving_timber, butt_timber_end. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the cut butt timber and uncut receiving timber. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_plain_butt_joint_on_face_aligned_timbers
¶
cut_basic_plain_butt_joint_on_face_aligned_timbers(arrangement: ButtJointTimberArrangement) -> Joint
Creates a butt joint where the butt timber is cut flush with the receiving timber's face.
The receiving timber is not cut. Convenience wrapper; see
cut_plain_butt_joint_on_face_aligned_timbers for details.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
ButtJointTimberArrangement
|
Butt joint arrangement. Timbers must be face-aligned and orthogonal. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the cut butt timber and uncut receiving timber. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_plain_butt_splice_joint_on_aligned_timbers
¶
cut_basic_plain_butt_splice_joint_on_aligned_timbers(arrangement: SpliceJointTimberArrangement) -> Joint
Creates a plain butt splice joint between two parallel timbers cut at a shared plane.
Convenience wrapper with no additional sizing logic. See
cut_plain_butt_splice_joint_on_aligned_timbers for details.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
SpliceJointTimberArrangement
|
Splice joint arrangement. Timbers must be face-aligned with parallel axes. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_plain_cross_lap_joint_on_face_aligned_timbers
¶
cut_basic_plain_cross_lap_joint_on_face_aligned_timbers(arrangement: CrossJointTimberArrangement) -> Joint
Creates a cross-lap joint between two intersecting timbers with equal material removal.
Material is split equally (half from each timber). Convenience wrapper; see
cut_plain_cross_lap_joint for full control over cut faces and split ratio.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
CrossJointTimberArrangement
|
Cross joint arrangement. Timbers must be face-aligned and orthogonal. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_plain_house_joint_on_face_aligned_timbers
¶
cut_basic_plain_house_joint_on_face_aligned_timbers(arrangement: CrossJointTimberArrangement) -> Joint
Creates a house (dado/housing) joint where the housing timber is relieved to receive the housed timber.
Only the housing timber is cut; the housed timber is unaffected. Convenience wrapper; see
cut_plain_cross_lap_house_joint for details.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
CrossJointTimberArrangement
|
Cross joint arrangement where timber1 is the housing timber and timber2 is the housed timber. Timbers must be face-aligned and orthogonal. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing both timbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_splined_opposing_double_butt_joint_on_face_aligned_timbers
¶
cut_basic_splined_opposing_double_butt_joint_on_face_aligned_timbers(arrangement: DoubleButtJointTimberArrangement, slot_facing_end_on_receiving_timber: TimberEnd) -> Joint
Creates a splined opposing double butt joint with default sizing and a default peg.
This basic wrapper always enables pegs and uses a default peg recipe: - one square peg - distance from shoulder = 30 mm - lateral offset = 0 - peg size = 15 mm
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
DoubleButtJointTimberArrangement
|
Double butt joint arrangement with butt_timber_1, butt_timber_2, receiving_timber, butt_timber_1_end, butt_timber_2_end. |
required |
slot_facing_end_on_receiving_timber
|
TimberEnd
|
Receiving-timber end that the slot faces. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint containing all three cut timbers and spline/peg accessories. |
Source code in kumiki/joints/workshop/basic_joints.py
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 | |
cut_basic_plain_splice_lap_joint_on_aligned_timbers
¶
cut_basic_plain_splice_lap_joint_on_aligned_timbers(arrangement: SpliceJointTimberArrangement) -> Joint
Creates a splice lap joint between two parallel timbers with default half-lap sizing.
The lap length and shoulder position are derived from the timber face dimension indicated
by arrangement.front_face_on_timber1 (defaults to FRONT if None).
For full control over dimensions, use cut_plain_splice_lap_joint_on_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
SpliceJointTimberArrangement
|
Splice joint arrangement. Timbers must be face-aligned with parallel axes.
|
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers with lap cuts. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_half_blind_tenoned_dadoed_rabbeted_scarf_joint_on_aligned_timbers
¶
cut_basic_half_blind_tenoned_dadoed_rabbeted_scarf_joint_on_aligned_timbers(arrangement: SpliceJointTimberArrangement) -> Joint
Creates a half-blind tenoned, dadoed, rabbeted scarf joint (金輪継ぎ / Kanawa Tsugi) with default proportions.
Stepped shoulder depth is 1/5 of timber 1's dimension in front_face_on_timber1 normal axis. Scarf length is 4× stepped shoulder depth. Dado depth and height are 1/5 of stepped shoulder depth. Stub tenon width is 1/5 of stepped shoulder depth.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
SpliceJointTimberArrangement
|
Splice joint timber arrangement. Timbers must be face-aligned with parallel axes. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_mortise_and_tenon_joint_on_face_aligned_timbers
¶
cut_basic_mortise_and_tenon_joint_on_face_aligned_timbers(tenon_timber: TimberLike, mortise_timber: TimberLike, tenon_end: TimberEnd, use_peg: bool = False) -> Joint
Creates a mortise and tenon joint between two face-aligned orthogonal timbers, with automatic sizing.
Tenon dimensions are derived automatically: 3/4 of the mortise timber's relevant depth for
the height and 1/3 of its face width for the width. Tenon length equals the full width of the
mortise timber. For full control over sizing, use cut_mortise_and_tenon_joint_on_face_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tenon_timber
|
TimberLike
|
The timber that will receive the tenon cut. |
required |
mortise_timber
|
TimberLike
|
The timber that will receive the mortise hole. |
required |
tenon_end
|
TimberEnd
|
Which end of the tenon timber gets the tenon (TOP or BOTTOM). |
required |
use_peg
|
bool
|
If True, adds a square peg through the joint for draw-bore tightening. |
False
|
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers and, if use_peg=True, a Peg accessory. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_wedged_half_dovetail_mortise_and_tenon_joint_on_face_aligned_timbers
¶
cut_basic_wedged_half_dovetail_mortise_and_tenon_joint_on_face_aligned_timbers(tenon_timber: TimberLike, mortise_timber: TimberLike, tenon_end: TimberEnd, use_wedge: bool = True) -> Joint
Creates a half-dovetail mortise-and-tenon joint between two face-aligned orthogonal timbers, with automatic sizing and an optional wedge.
Tenon dimensions are derived automatically: full size of the tenon timber along the axis
parallel to the mortise timber's length (this is also the dovetail's slope axis -- the
flat dovetail "top" must run along the receiving timber's length axis for its pull-out
resistance to sit along the joint's load axis), and 1/3 of the mortise timber's size
along the perpendicular axis. The tenon is a through-tenon (tenon_depth = the mortise
timber's full size along the entry axis), and dovetail_depth is 1/4 of the tenon's size
in the dovetail (length) axis. When use_wedge is True, the wedge's taper angle matches
the dovetail's own slope and its narrow end (wedge_small_height) is 1/8 of the tenon's
size in the dovetail axis. For full control over sizing, use
cut_wedged_half_dovetail_mortise_and_tenon_joint_on_face_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tenon_timber
|
TimberLike
|
The timber that will receive the dovetail tenon cut. |
required |
mortise_timber
|
TimberLike
|
The timber that will receive the dovetail mortise. |
required |
tenon_end
|
TimberEnd
|
Which end of the tenon timber gets the tenon (TOP or BOTTOM). |
required |
use_wedge
|
bool
|
If True, adds a wedge accessory (and matching slot) on the dovetail's flat side, tapered to match the dovetail's own slope angle. |
True
|
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers and, if use_wedge=True, a "wedge" accessory. |
Source code in kumiki/joints/workshop/basic_joints.py
492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 | |
cut_basic_lapped_gooseneck_joint_on_aligned_timbers
¶
cut_basic_lapped_gooseneck_joint_on_aligned_timbers(gooseneck_timber: TimberLike, receiving_timber: TimberLike, receiving_timber_end: TimberEnd, gooseneck_timber_face: TimberLongFace) -> Joint
Creates a lapped gooseneck splice joint (腰掛鎌継ぎ / Koshikake Kama Tsugi) with default proportions.
Gooseneck dimensions scale with the timber width: length = 2×width, small_width = 1/4×width,
large_width = 1/2×width, head_length = 1/2×width. For full control, use
cut_lapped_gooseneck_joint_on_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
gooseneck_timber
|
TimberLike
|
The timber with the gooseneck feature cut into it. |
required |
receiving_timber
|
TimberLike
|
The timber that receives the gooseneck. |
required |
receiving_timber_end
|
TimberEnd
|
Which end of the receiving timber is joined. |
required |
gooseneck_timber_face
|
TimberLongFace
|
The face on the gooseneck timber where the profile is visible. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers with gooseneck cuts. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_dropin_dovetail_butt_joint_on_face_aligned_timbers
¶
cut_basic_dropin_dovetail_butt_joint_on_face_aligned_timbers(dovetail_timber: TimberLike, receiving_timber: TimberLike, dovetail_timber_end: TimberEnd, dovetail_timber_face: TimberLongFace, receiving_timber_shoulder_inset: Numeric, dovetail_length: Numeric, dovetail_small_width: Numeric, dovetail_large_width: Numeric) -> Joint
Creates a housed dovetail butt joint (蟻継ぎ / Ari Tsugi) with default proportions.
Dovetail dimensions scale with the timber width regardless of the values passed for
dovetail_length, dovetail_small_width, and dovetail_large_width — those parameters are
overridden internally (present for API compatibility). For full control, use
cut_dropin_dovetail_butt_joint_on_face_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dovetail_timber
|
TimberLike
|
The timber with the dovetail tenon. |
required |
receiving_timber
|
TimberLike
|
The timber that receives the dovetail socket. |
required |
dovetail_timber_end
|
TimberEnd
|
Which end of the dovetail timber is cut. |
required |
dovetail_timber_face
|
TimberLongFace
|
The face on the dovetail timber where the profile is visible. |
required |
receiving_timber_shoulder_inset
|
Numeric
|
Distance to inset the shoulder notch on the receiving timber. |
required |
dovetail_length
|
Numeric
|
Overridden internally by default proportions. |
required |
dovetail_small_width
|
Numeric
|
Overridden internally by default proportions. |
required |
dovetail_large_width
|
Numeric
|
Overridden internally by default proportions. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers with dovetail cuts. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_dropin_housed_butt_joint_on_face_aligned_timbers
¶
cut_basic_dropin_housed_butt_joint_on_face_aligned_timbers(housed_timber: TimberLike, receiving_timber: TimberLike, housed_timber_end: TimberEnd, housed_timber_face: TimberLongFace, receiving_timber_shoulder_inset: Numeric = scalar(0)) -> Joint
Creates a drop-in housed butt joint (大入れ仕口 / Oire Shiguchi) with default proportions.
All housing dimensions (housing_length and housing_width) are auto-calculated from the
housed timber's size. For full control, use cut_dropin_housed_butt_joint_on_face_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
housed_timber
|
TimberLike
|
The timber with the housed end. |
required |
receiving_timber
|
TimberLike
|
The timber that receives the housing pocket. |
required |
housed_timber_end
|
TimberEnd
|
Which end of the housed timber is cut. |
required |
housed_timber_face
|
TimberLongFace
|
The face on the housed timber where the pocket profile is open (top face). |
required |
receiving_timber_shoulder_inset
|
Numeric
|
Distance to inset the shoulder notch. Default 0. |
scalar(0)
|
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers with housing cuts. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_mitered_and_keyed_lap_joint_on_plane_aligned_timbers
¶
cut_basic_mitered_and_keyed_lap_joint_on_plane_aligned_timbers(arrangement: CornerJointTimberArrangement) -> Joint
Creates a mitered and keyed lap joint (箱相欠き車知栓仕口 / Hako Aikaki Shachi Sen Shikuchi) with default proportions.
Combines a miter cut with interlocking finger laps on the inside of the corner for
mechanical strength. All lap and key dimensions are auto-calculated. For full control,
use cut_mitered_and_keyed_lap_joint_on_plane_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
CornerJointTimberArrangement
|
Corner joint arrangement. Timbers must be plane-aligned and
|
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object containing the two CutTimbers with miter and finger cuts. |
Source code in kumiki/joints/workshop/basic_joints.py
cut_basic_practice_tusked_mortise_and_tenon_joint_on_plane_aligned_timbers
¶
cut_basic_practice_tusked_mortise_and_tenon_joint_on_plane_aligned_timbers(arrangement: ButtJointTimberArrangement) -> Joint
Creates a tusked through mortise-and-tenon joint with automatic sizing.
front_face_on_butt_timber/top_face_on_butt_timber are auto-derived when not already set
on the arrangement: front_face is the butt timber's long face parallel to the joint
alignment plane, and top_face is 90 degrees from it (the tusk enters from this face, since
TuskParameters.entry_face defaults to Front). Tenon dimensions are derived automatically:
1/3 of the butt timber's size along the front-face axis, and 4/5 of its size along the
top-face axis. For full control over sizing, use
cut_practice_tusked_mortise_and_tenon_joint_on_plane_aligned_timbers directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
arrangement
|
ButtJointTimberArrangement
|
Butt joint arrangement (butt_timber = tenon, receiving_timber = mortise). Must be plane-aligned. |
required |
Returns:
| Type | Description |
|---|---|
Joint
|
Joint object with cuts on both timbers and a "tusk" accessory. |