compas-timber 2.1.0.dev0__tar.gz → 2.1.1.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {compas_timber-2.1.0.dev0/src/compas_timber.egg-info → compas_timber-2.1.1.dev0}/PKG-INFO +2 -19
  2. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/pyproject.toml +2 -21
  3. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/__init__.py +1 -1
  4. {compas_timber-2.1.0.dev0/src/compas_timber/connections → compas_timber-2.1.1.dev0/src/compas_timber}/analyzers.py +2 -0
  5. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/__init__.py +0 -14
  6. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/joint.py +44 -5
  7. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/joint_candidate.py +2 -2
  8. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/plate_joint.py +13 -0
  9. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/free_contour.py +1 -0
  10. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0/src/compas_timber.egg-info}/PKG-INFO +2 -19
  11. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber.egg-info/SOURCES.txt +1 -1
  12. compas_timber-2.1.1.dev0/src/compas_timber.egg-info/requires.txt +24 -0
  13. compas_timber-2.1.0.dev0/src/compas_timber.egg-info/requires.txt +0 -44
  14. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/LICENSE +0 -0
  15. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/README.md +0 -0
  16. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/setup.cfg +0 -0
  17. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/base.py +0 -0
  18. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/ball_node.py +0 -0
  19. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/butt_joint.py +0 -0
  20. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/l_butt.py +0 -0
  21. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/l_french_ridge_lap.py +0 -0
  22. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/l_lap.py +0 -0
  23. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/l_miter.py +0 -0
  24. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/l_tenon_mortise.py +0 -0
  25. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/lap_joint.py +0 -0
  26. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/mortise_tenon.py +0 -0
  27. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/oligina.py +0 -0
  28. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/panel_butt_joint.py +0 -0
  29. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/panel_joint.py +0 -0
  30. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/panel_miter_joint.py +0 -0
  31. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/plate_butt_joint.py +0 -0
  32. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/plate_miter_joint.py +0 -0
  33. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/solver.py +0 -0
  34. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/t_birdsmouth.py +0 -0
  35. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/t_butt.py +0 -0
  36. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/t_dovetail.py +0 -0
  37. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/t_lap.py +0 -0
  38. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/t_step_joint.py +0 -0
  39. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/t_tenon_mortise.py +0 -0
  40. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/utilities.py +0 -0
  41. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/x_lap.py +0 -0
  42. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/x_notch.py +0 -0
  43. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/connections/y_butt.py +0 -0
  44. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/__init__.py +0 -0
  45. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/beam.py +0 -0
  46. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/fastener.py +0 -0
  47. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/fasteners/__init__.py +0 -0
  48. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/fasteners/ball_node_fastener.py +0 -0
  49. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/fasteners/plate_fastener.py +0 -0
  50. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/features.py +0 -0
  51. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/panel.py +0 -0
  52. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/plate.py +0 -0
  53. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/elements/plate_geometry.py +0 -0
  54. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/errors.py +0 -0
  55. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/__init__.py +0 -0
  56. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/btlx.py +0 -0
  57. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/double_cut.py +0 -0
  58. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/dovetail_mortise.py +0 -0
  59. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/dovetail_tenon.py +0 -0
  60. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/drilling.py +0 -0
  61. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/french_ridge_lap.py +0 -0
  62. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/jack_cut.py +0 -0
  63. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/lap.py +0 -0
  64. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/longitudinal_cut.py +0 -0
  65. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/mortise.py +0 -0
  66. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/pocket.py +0 -0
  67. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/slot.py +0 -0
  68. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/step_joint.py +0 -0
  69. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/step_joint_notch.py +0 -0
  70. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/tenon.py +0 -0
  71. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/fabrication/text.py +0 -0
  72. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/geometry.py +0 -0
  73. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/model.py +0 -0
  74. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/panel_features/__init__.py +0 -0
  75. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/panel_features/panel_connection_interface.py +0 -0
  76. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/panel_features/panel_features.py +0 -0
  77. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/planning/__init__.py +0 -0
  78. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/planning/nesting.py +0 -0
  79. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/planning/sequencer.py +0 -0
  80. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/rhino/__init__.py +0 -0
  81. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/rhino/install.py +0 -0
  82. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/structural.py +0 -0
  83. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/utils/__init__.py +0 -0
  84. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber/utils/r_tree.py +0 -0
  85. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber.egg-info/dependency_links.txt +0 -0
  86. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber.egg-info/not-zip-safe +0 -0
  87. {compas_timber-2.1.0.dev0 → compas_timber-2.1.1.dev0}/src/compas_timber.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: compas_timber
3
- Version: 2.1.0.dev0
3
+ Version: 2.1.1.dev0
4
4
  Summary: COMPAS package for modeling, designing and fabricating timber assemblies.
5
5
  Author-email: Aleksandra Anna Apolinarska <apolinarska@arch.ethz.ch>, Chen Kasirer <kasirer@arch.ethz.ch>, Gonzalo Casas <casas@arch.ethz.ch>, Jonas Haldemann <haldemann@arch.ethz.ch>, Oliver Appling Bucklin <bucklin@arch.ethz.ch>, "Aurèle L. Gheyselinck" <gheyselinck@arch.ethz.ch>, Panayiotis Papacharalambous <papacharalambous@arch.ethz.ch>, Anastasiia Stryzhevska <astryzhevska@arch.ethz.ch>, Jelle Feringa <jelleferinga@gmail.com>, Joseph Kenny <jk6372@princeton.edu>, Beverly Lytle <lytle@arch.ethz.ch>, Eric Gozzi <eric.gozzi@arch.ethz.ch>, Rodrigo Arca Zimmermann <rodrigo.arca@gmail.com>, Nicolas Benjamin Boscoboinik <boscoboinik@arch.ethz.ch>
6
6
  License-Expression: MIT
@@ -22,7 +22,7 @@ Requires-Dist: compas_model==0.9.1
22
22
  Requires-Dist: scipy>=1.1
23
23
  Provides-Extra: dev
24
24
  Requires-Dist: bump-my-version; extra == "dev"
25
- Requires-Dist: compas_invocations2; extra == "dev"
25
+ Requires-Dist: compas_invocations2[mkdocs]>=1.0.2; extra == "dev"
26
26
  Requires-Dist: invoke>=0.14; extra == "dev"
27
27
  Requires-Dist: ruff; extra == "dev"
28
28
  Requires-Dist: twine; extra == "dev"
@@ -38,23 +38,6 @@ Provides-Extra: gh
38
38
  Requires-Dist: compas_invocations2; extra == "gh"
39
39
  Requires-Dist: tomlkit; extra == "gh"
40
40
  Requires-Dist: pythonnet; extra == "gh"
41
- Provides-Extra: docs
42
- Requires-Dist: markdown-callouts>=0.4; extra == "docs"
43
- Requires-Dist: markdown-exec>=1.8; extra == "docs"
44
- Requires-Dist: mike; extra == "docs"
45
- Requires-Dist: mkdocs>=1.6; extra == "docs"
46
- Requires-Dist: mkdocs-autorefs>=1.4; extra == "docs"
47
- Requires-Dist: mkdocs-coverage>=1.0; extra == "docs"
48
- Requires-Dist: mkdocs-git-revision-date-localized-plugin>=1.2; extra == "docs"
49
- Requires-Dist: mkdocs-llmstxt>=0.2; extra == "docs"
50
- Requires-Dist: mkdocs-material>=9.5; extra == "docs"
51
- Requires-Dist: mkdocs-minify-plugin>=0.8; extra == "docs"
52
- Requires-Dist: mkdocs-redirects>=1.2; extra == "docs"
53
- Requires-Dist: mkdocs-section-index>=0.3; extra == "docs"
54
- Requires-Dist: mkdocs-mermaid2-plugin; extra == "docs"
55
- Requires-Dist: mkdocstrings[python]; extra == "docs"
56
- Requires-Dist: pydantic>=2.10; extra == "docs"
57
- Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "docs"
58
41
  Dynamic: license-file
59
42
 
60
43
  <h1>
@@ -45,7 +45,7 @@ dependencies = [
45
45
  [project.optional-dependencies]
46
46
  dev = [
47
47
  "bump-my-version",
48
- "compas_invocations2",
48
+ "compas_invocations2[mkdocs]>=1.0.2",
49
49
  "invoke >=0.14",
50
50
  "ruff",
51
51
  "twine",
@@ -65,25 +65,6 @@ gh = [
65
65
  "pythonnet",
66
66
  ]
67
67
 
68
- docs = [
69
- "markdown-callouts >=0.4",
70
- "markdown-exec >=1.8",
71
- "mike",
72
- "mkdocs >=1.6",
73
- "mkdocs-autorefs >=1.4",
74
- "mkdocs-coverage >=1.0",
75
- "mkdocs-git-revision-date-localized-plugin >=1.2",
76
- "mkdocs-llmstxt >=0.2",
77
- "mkdocs-material >=9.5",
78
- "mkdocs-minify-plugin >=0.8",
79
- "mkdocs-redirects >=1.2",
80
- "mkdocs-section-index >=0.3",
81
- "mkdocs-mermaid2-plugin",
82
- "mkdocstrings[python]",
83
- "pydantic >=2.10",
84
- "tomli >=2.0; python_version < '3.11'",
85
- ]
86
-
87
68
  [project.urls]
88
69
  Homepage = "https://gramaziokohler.github.io/compas_timber/latest/"
89
70
  Repository = "https://github.com/gramaziokohler/compas_timber"
@@ -115,7 +96,7 @@ where = ["src"]
115
96
  # ============================================================================
116
97
 
117
98
  [tool.bumpversion]
118
- current_version = "2.1.0-dev0"
99
+ current_version = "2.1.1-dev0"
119
100
  message = "Bump version to {new_version}"
120
101
  commit = true
121
102
  tag = true
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import compas
3
3
 
4
- __version__ = "2.1.0-dev0"
4
+ __version__ = "2.1.1-dev0"
5
5
 
6
6
  HERE = os.path.dirname(__file__)
7
7
  HOME = os.path.abspath(os.path.join(HERE, "..", ".."))
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import math
2
4
  from weakref import WeakKeyDictionary
3
5
 
@@ -36,13 +36,6 @@ from .plate_miter_joint import PlateMiterJoint
36
36
  from .panel_butt_joint import PanelLButtJoint
37
37
  from .panel_butt_joint import PanelTButtJoint
38
38
  from .panel_miter_joint import PanelMiterJoint
39
- from .analyzers import NBeamKDTreeAnalyzer
40
- from .analyzers import TripletAnalyzer
41
- from .analyzers import QuadAnalyzer
42
- from .analyzers import CompositeAnalyzer
43
- from .analyzers import Cluster
44
- from .analyzers import BeamGroupAnalyzer
45
- from .analyzers import MaxNCompositeAnalyzer
46
39
 
47
40
  __all__ = [
48
41
  "Joint",
@@ -84,11 +77,4 @@ __all__ = [
84
77
  "PanelLButtJoint",
85
78
  "PanelTButtJoint",
86
79
  "PanelMiterJoint",
87
- "NBeamKDTreeAnalyzer",
88
- "TripletAnalyzer",
89
- "QuadAnalyzer",
90
- "CompositeAnalyzer",
91
- "Cluster",
92
- "BeamGroupAnalyzer",
93
- "MaxNCompositeAnalyzer",
94
80
  ]
@@ -3,12 +3,43 @@ from itertools import combinations
3
3
  from compas.data import Data
4
4
  from compas.geometry import Point
5
5
  from compas.geometry import distance_point_line
6
+ from compas.tolerance import TOL
6
7
 
7
8
  from compas_timber.errors import BeamJoiningError
9
+ from compas_timber.utils import distance_segment_segment_points
8
10
 
9
11
  from .solver import JointTopology
10
12
 
11
13
 
14
+ def location_from_centerlines(beams):
15
+ """Compute the approximate joint location from two beam centerlines.
16
+
17
+ Returns the closest point between the two centerlines, or the midpoint
18
+ between them when the beams are skew (non-intersecting).
19
+
20
+ Parameters
21
+ ----------
22
+ beams : list(:class:`~compas_timber.elements.Beam`)
23
+ A list of two beams for which to calculate the joint location.
24
+
25
+ Returns
26
+ -------
27
+ :class:`~compas.geometry.Point`
28
+
29
+ """
30
+ if len(beams) != 2:
31
+ raise ValueError(
32
+ "Automatic location calculation only works for joints connecting 2 elements. "
33
+ "Please set the location manually or implement a custom location calculation for your joint type."
34
+ )
35
+ beam_a, beam_b = beams
36
+ distance, point_a, point_b = distance_segment_segment_points(beam_a.centerline, beam_b.centerline)
37
+ point_a, point_b = Point(*point_a), Point(*point_b)
38
+ if not TOL.is_zero(distance):
39
+ return (point_a + point_b) / 2.0
40
+ return point_a
41
+
42
+
12
43
  class Joint(Data):
13
44
  """Base class for a joint connecting two beams.
14
45
 
@@ -48,13 +79,16 @@ class Joint(Data):
48
79
 
49
80
  def __init__(self, topology=None, location=None, name=None, **kwargs):
50
81
  super().__init__(name=name)
51
- self._topology = topology if topology is not None else JointTopology.TOPO_UNKNOWN
52
- self._location = location or Point(0, 0, 0)
82
+ self._topology = None
83
+ self._location = None
84
+ self.topology = topology
85
+ if location:
86
+ self.location = location
53
87
 
54
88
  @property
55
89
  def __data__(self):
56
90
  # type: () -> dict
57
- return {"name": self.name}
91
+ return {"name": self.name, "topology": self.topology, "location": self._location}
58
92
 
59
93
  def __repr__(self):
60
94
  return '{}(name="{}")'.format(self.__class__.__name__, self.name)
@@ -65,11 +99,16 @@ class Joint(Data):
65
99
 
66
100
  @topology.setter
67
101
  def topology(self, value):
68
- """Set the topology of the joint."""
69
- self._topology = value
102
+ self._topology = value or JointTopology.TOPO_UNKNOWN
70
103
 
71
104
  @property
72
105
  def location(self):
106
+ if self._location is None and all(self.elements):
107
+ self._location = location_from_centerlines(self.elements)
108
+
109
+ if self._location is None:
110
+ raise ValueError("Location of the joint could not be determined. Please set it manually.")
111
+
73
112
  return self._location
74
113
 
75
114
  @location.setter
@@ -5,7 +5,7 @@ from .plate_joint import PlateJoint
5
5
  class JointCandidate(Joint):
6
6
  """A JointCandidate is an information-only joint, which does not add any features to the elements it connects.
7
7
 
8
- It is used to create a first-pass joinery information which can be later used to perform analysis using :class:`~compas_timber.connections.analyzers.BeamGroupAnalyzer`.
8
+ It is used to create a first-pass joinery information which can be later used to perform analysis using :class:`~compas_timber.analyzers.BeamGroupAnalyzer`.
9
9
 
10
10
  Please use `JointCandidate.create()` to properly create an instance of this class and associate it with an model.
11
11
 
@@ -70,7 +70,7 @@ class JointCandidate(Joint):
70
70
  class PlateJointCandidate(PlateJoint, JointCandidate):
71
71
  """A PlateJointCandidate is an information-only joint for plate connections.
72
72
 
73
- It is used to create a first-pass joinery information which can be later used to perform analysis using :class:`~compas_timber.connections.analyzers.BeamGroupAnalyzer`.
73
+ It is used to create a first-pass joinery information which can be later used to perform analysis using :class:`~compas_timber.analyzers.BeamGroupAnalyzer`.
74
74
 
75
75
  Parameters
76
76
  ----------
@@ -1,6 +1,7 @@
1
1
  from abc import ABC
2
2
  from abc import abstractmethod
3
3
 
4
+ from compas.geometry import Point
4
5
  from compas.geometry import dot_vectors
5
6
 
6
7
  from compas_timber.errors import BeamJoiningError
@@ -26,6 +27,8 @@ class PlateJoint(Joint, ABC):
26
27
  The index of the segment in plate_a's outline where the plates are connected.
27
28
  b_segment_index : int
28
29
  The index of the segment in plate_b's outline where the plates are connected.
30
+ location : :class:`compas.geometry.Point`, optional
31
+ The location of the joint. If not provided, defaults to the origin.
29
32
  **kwargs : dict, optional
30
33
  Additional keyword arguments to pass to the parent class.
31
34
 
@@ -101,6 +104,16 @@ class PlateJoint(Joint, ABC):
101
104
  return (self.plate_b.outlines[1], self.plate_b.outlines[0])
102
105
  return (self.plate_b.outlines[0], self.plate_b.outlines[1])
103
106
 
107
+ @property
108
+ def location(self):
109
+ if self._location is None:
110
+ self._location = Point(0, 0, 0)
111
+ return self._location
112
+
113
+ @location.setter
114
+ def location(self, value):
115
+ self._location = value
116
+
104
117
  def calculate_topology(self, allow_reordering=False):
105
118
  """Calculate the topology of the joint based on the plates."""
106
119
  topo_results = PlateConnectionSolver().find_topology(self.plate_a, self.plate_b)
@@ -47,6 +47,7 @@ class FreeContour(BTLxProcessing):
47
47
 
48
48
  def __init__(self, contour_param_object, tool_id=0, counter_sink=False, tool_position=AlignmentType.LEFT, depth_bounded=True, **kwargs):
49
49
  super(FreeContour, self).__init__(tool_id=tool_id, counter_sink=counter_sink, tool_position=tool_position, **kwargs)
50
+ self._process_id = 1
50
51
  self.contour_param_object = contour_param_object
51
52
  self.depth_bounded = depth_bounded
52
53
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: compas_timber
3
- Version: 2.1.0.dev0
3
+ Version: 2.1.1.dev0
4
4
  Summary: COMPAS package for modeling, designing and fabricating timber assemblies.
5
5
  Author-email: Aleksandra Anna Apolinarska <apolinarska@arch.ethz.ch>, Chen Kasirer <kasirer@arch.ethz.ch>, Gonzalo Casas <casas@arch.ethz.ch>, Jonas Haldemann <haldemann@arch.ethz.ch>, Oliver Appling Bucklin <bucklin@arch.ethz.ch>, "Aurèle L. Gheyselinck" <gheyselinck@arch.ethz.ch>, Panayiotis Papacharalambous <papacharalambous@arch.ethz.ch>, Anastasiia Stryzhevska <astryzhevska@arch.ethz.ch>, Jelle Feringa <jelleferinga@gmail.com>, Joseph Kenny <jk6372@princeton.edu>, Beverly Lytle <lytle@arch.ethz.ch>, Eric Gozzi <eric.gozzi@arch.ethz.ch>, Rodrigo Arca Zimmermann <rodrigo.arca@gmail.com>, Nicolas Benjamin Boscoboinik <boscoboinik@arch.ethz.ch>
6
6
  License-Expression: MIT
@@ -22,7 +22,7 @@ Requires-Dist: compas_model==0.9.1
22
22
  Requires-Dist: scipy>=1.1
23
23
  Provides-Extra: dev
24
24
  Requires-Dist: bump-my-version; extra == "dev"
25
- Requires-Dist: compas_invocations2; extra == "dev"
25
+ Requires-Dist: compas_invocations2[mkdocs]>=1.0.2; extra == "dev"
26
26
  Requires-Dist: invoke>=0.14; extra == "dev"
27
27
  Requires-Dist: ruff; extra == "dev"
28
28
  Requires-Dist: twine; extra == "dev"
@@ -38,23 +38,6 @@ Provides-Extra: gh
38
38
  Requires-Dist: compas_invocations2; extra == "gh"
39
39
  Requires-Dist: tomlkit; extra == "gh"
40
40
  Requires-Dist: pythonnet; extra == "gh"
41
- Provides-Extra: docs
42
- Requires-Dist: markdown-callouts>=0.4; extra == "docs"
43
- Requires-Dist: markdown-exec>=1.8; extra == "docs"
44
- Requires-Dist: mike; extra == "docs"
45
- Requires-Dist: mkdocs>=1.6; extra == "docs"
46
- Requires-Dist: mkdocs-autorefs>=1.4; extra == "docs"
47
- Requires-Dist: mkdocs-coverage>=1.0; extra == "docs"
48
- Requires-Dist: mkdocs-git-revision-date-localized-plugin>=1.2; extra == "docs"
49
- Requires-Dist: mkdocs-llmstxt>=0.2; extra == "docs"
50
- Requires-Dist: mkdocs-material>=9.5; extra == "docs"
51
- Requires-Dist: mkdocs-minify-plugin>=0.8; extra == "docs"
52
- Requires-Dist: mkdocs-redirects>=1.2; extra == "docs"
53
- Requires-Dist: mkdocs-section-index>=0.3; extra == "docs"
54
- Requires-Dist: mkdocs-mermaid2-plugin; extra == "docs"
55
- Requires-Dist: mkdocstrings[python]; extra == "docs"
56
- Requires-Dist: pydantic>=2.10; extra == "docs"
57
- Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "docs"
58
41
  Dynamic: license-file
59
42
 
60
43
  <h1>
@@ -2,6 +2,7 @@ LICENSE
2
2
  README.md
3
3
  pyproject.toml
4
4
  src/compas_timber/__init__.py
5
+ src/compas_timber/analyzers.py
5
6
  src/compas_timber/base.py
6
7
  src/compas_timber/errors.py
7
8
  src/compas_timber/geometry.py
@@ -14,7 +15,6 @@ src/compas_timber.egg-info/not-zip-safe
14
15
  src/compas_timber.egg-info/requires.txt
15
16
  src/compas_timber.egg-info/top_level.txt
16
17
  src/compas_timber/connections/__init__.py
17
- src/compas_timber/connections/analyzers.py
18
18
  src/compas_timber/connections/ball_node.py
19
19
  src/compas_timber/connections/butt_joint.py
20
20
  src/compas_timber/connections/joint.py
@@ -0,0 +1,24 @@
1
+ rtree
2
+ compas<3.0,>=2.0
3
+ compas_model==0.9.1
4
+ scipy>=1.1
5
+
6
+ [dev]
7
+ bump-my-version
8
+ compas_invocations2[mkdocs]>=1.0.2
9
+ invoke>=0.14
10
+ ruff
11
+ twine
12
+ wheel
13
+ pytest-mock
14
+ pytest>=8.0
15
+ build
16
+ tomlkit
17
+ pytest-cov
18
+ pytest-randomly
19
+ pre-commit
20
+
21
+ [gh]
22
+ compas_invocations2
23
+ tomlkit
24
+ pythonnet
@@ -1,44 +0,0 @@
1
- rtree
2
- compas<3.0,>=2.0
3
- compas_model==0.9.1
4
- scipy>=1.1
5
-
6
- [dev]
7
- bump-my-version
8
- compas_invocations2
9
- invoke>=0.14
10
- ruff
11
- twine
12
- wheel
13
- pytest-mock
14
- pytest>=8.0
15
- build
16
- tomlkit
17
- pytest-cov
18
- pytest-randomly
19
- pre-commit
20
-
21
- [docs]
22
- markdown-callouts>=0.4
23
- markdown-exec>=1.8
24
- mike
25
- mkdocs>=1.6
26
- mkdocs-autorefs>=1.4
27
- mkdocs-coverage>=1.0
28
- mkdocs-git-revision-date-localized-plugin>=1.2
29
- mkdocs-llmstxt>=0.2
30
- mkdocs-material>=9.5
31
- mkdocs-minify-plugin>=0.8
32
- mkdocs-redirects>=1.2
33
- mkdocs-section-index>=0.3
34
- mkdocs-mermaid2-plugin
35
- mkdocstrings[python]
36
- pydantic>=2.10
37
-
38
- [docs:python_version < "3.11"]
39
- tomli>=2.0
40
-
41
- [gh]
42
- compas_invocations2
43
- tomlkit
44
- pythonnet