Skip to content

KButtJoint - #731

Open
ericgozzi wants to merge 8 commits into
KMiterJointfrom
KButtJoint
Open

KButtJoint#731
ericgozzi wants to merge 8 commits into
KMiterJointfrom
KButtJoint

Conversation

@ericgozzi

Copy link
Copy Markdown
Contributor

Follows #730 and #729

image

This pull request introduces the new KButtJoint class to the timber connections module, enabling support for K-Butt type joints where beams are joined along the length of a third (cross) beam. The changes include the implementation of the joint logic, integration into the package, updates to documentation, and comprehensive tests to ensure correct behavior.

Key changes:

New Feature: KButtJoint Implementation

  • Added the KButtJoint class in src/compas_timber/connections/k_butt.py, providing geometry logic, feature addition, and serialization for K-Butt joints. This includes methods for identifying coplanarity, adding fabrication features, and handling milling volumes for pockets and laps.

Integration into the Package

  • Registered KButtJoint in the connections module by updating imports and the __all__ list in src/compas_timber/connections/__init__.py, making it available for use throughout the package. [1] [2]

Documentation Updates

  • Updated the changelog in CHANGELOG.md to note the addition of KButtJoint.
  • Added KButtJoint to the class diagrams and inheritance hierarchy in docs/contribution/class_diagrams.md for improved developer documentation. [1] [2]

Testing

  • Added comprehensive tests for KButtJoint in tests/compas_timber/test_k_butt_joint.py, covering creation, joinery processing, and model serialization/deserialization.

What type of change is this?

  • Bug fix in a backwards-compatible manner.
  • New feature in a backwards-compatible manner.
  • Breaking change: bug fix or new feature that involve incompatible API changes.
  • Other (e.g. doc update, configuration, etc)

Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

  • I added a line to the CHANGELOG.md file in the Unreleased section under the most fitting heading (e.g. Added, Changed, Removed).
  • I ran all tests on my computer and it's all green (i.e. invoke test).
  • I ran lint on my computer and there are no errors (i.e. invoke lint).
  • I added new functions/classes and made them available on a second-level import, e.g. compas_timber.datastructures.Beam.
  • I have added tests that prove my fix is effective or that my feature works.
  • I have added necessary documentation, including updating class_diagrams.rst (if appropriate).

@ericgozzi
ericgozzi marked this pull request as ready for review March 31, 2026 08:30
@ericgozzi
ericgozzi requested review from chenkasirer, obucklin and papachap and removed request for papachap March 31, 2026 08:31
@ericgozzi ericgozzi mentioned this pull request Mar 31, 2026
10 tasks
@ericgozzi
ericgozzi requested a review from Copilot March 31, 2026 08:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new KButtJoint connection type to COMPAS Timber to support K-topology butt-style joints where multiple main beams connect along the length of a cross beam, and exposes it through the public connections API.

Changes:

  • Introduces KButtJoint implementation with extension + feature generation logic.
  • Registers KButtJoint in compas_timber.connections public API.
  • Updates developer docs/changelog and adds a dedicated test module.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/compas_timber/connections/k_butt.py New KButtJoint class implementation (geometry, features, serialization fields, cluster promotion).
src/compas_timber/connections/__init__.py Exposes KButtJoint via imports and __all__.
tests/compas_timber/test_k_butt_joint.py Adds basic creation, joinery processing, and serialization/deserialization tests.
docs/contribution/class_diagrams.md Documents the new joint in the class diagram/inheritance list.
CHANGELOG.md Notes the addition of KButtJoint under Unreleased.

Comment thread src/compas_timber/connections/k_butt.py Outdated
Comment thread src/compas_timber/connections/k_butt.py
Comment thread src/compas_timber/connections/k_butt.py
Comment thread docs/contribution/class_diagrams.md Outdated
Comment thread tests/compas_timber/test_k_butt_joint.py Outdated
Comment thread tests/compas_timber/test_k_butt_joint.py
@obucklin

Copy link
Copy Markdown
Contributor

@ericgozzi I know you were working on this with @papachap. Please let us know if you want some "external" review.

@ericgozzi ericgozzi linked an issue Jun 15, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Joints for standard Y and K topos.

3 participants