Skip to content

Commit b87cb2c

Browse files
committed
minimal changes to get geometry goind + some TODOs
1 parent 4d9f467 commit b87cb2c

4 files changed

Lines changed: 26 additions & 25 deletions

File tree

examples/model/0002_stand.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ def create_viewer():
7878

7979
# draw geometry (with features)
8080
for beam in model.beams:
81-
viewer.scene.add(beam.geometry)
81+
beam: Beam
82+
viewer.scene.add(beam.modelgeometry)
8283

8384
viewer.show()

requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ pytest-mock
1212
build
1313
pythonnet
1414
tomlkit
15+
compas_viewer

src/compas_timber/elements/beam.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,23 +134,19 @@ def blank_length(self):
134134
@property
135135
def blank_frame(self):
136136
# type: () -> Frame
137-
# TODO: could be replaced by `ref_frame`?
137+
# TODO: unlike `frame` this may me translated by the start extension.
138+
# TODO: could be replaced by `ref_frame` (which is also affected by extension)?
139+
#
138140
assert self.frame
139141
start, _ = self._resolve_blank_extensions()
140142
frame = self.frame.copy()
141143
frame.point += -frame.xaxis * start # "extension" to the start edge
142144
return frame
143145

144-
@property
145-
def ref_frame(self):
146-
# type: () -> Frame
147-
ref_point = self.blank_frame.point.copy()
148-
ref_point += self.blank_frame.yaxis * self.width * 0.5
149-
ref_point -= self.blank_frame.zaxis * self.height * 0.5
150-
return Frame(ref_point, self.blank_frame.xaxis, self.blank_frame.zaxis)
151146

152147
@property
153148
def faces(self):
149+
# TODO: this should be removed! see if used anywhere, replace with `ref_sides` and DESTROY!
154150
# type: () -> list[Frame]
155151
assert self.frame
156152
return [
@@ -182,6 +178,19 @@ def faces(self):
182178
), # small face at end point
183179
]
184180

181+
182+
########################################################################
183+
# BTLx properties
184+
# TODO: move these to TimberElement.
185+
########################################################################
186+
@property
187+
def ref_frame(self):
188+
# type: () -> Frame
189+
ref_point = self.blank_frame.point.copy()
190+
ref_point += self.blank_frame.yaxis * self.width * 0.5
191+
ref_point -= self.blank_frame.zaxis * self.height * 0.5
192+
return Frame(ref_point, self.blank_frame.xaxis, self.blank_frame.zaxis)
193+
185194
@property
186195
def ref_sides(self):
187196
# type: () -> tuple[Frame, Frame, Frame, Frame, Frame, Frame]
@@ -233,6 +242,7 @@ def centerline_end(self):
233242

234243
@property
235244
def long_edges(self):
245+
# TODO: can we replace this with `ref_edges`?
236246
# type: () -> list[Line]
237247
assert self.frame
238248
y = self.frame.yaxis
@@ -256,6 +266,7 @@ def has_features(self):
256266

257267
@property
258268
def key(self):
269+
# TODO: should be removed, this was just for compatibility with old code.
259270
# type: () -> int | None
260271
return self.graph_node
261272

@@ -420,7 +431,7 @@ def from_endpoints(cls, point_start, point_end, width, height, z_vector=None):
420431
@staticmethod
421432
def _create_shape(frame, xsize, ysize, zsize):
422433
# type: (Frame, float, float, float) -> Box
423-
boxframe = frame.copy()
434+
boxframe = Frame.worldXY()
424435
depth_offset = boxframe.xaxis * xsize * 0.5
425436
boxframe.point += depth_offset
426437
return Box(xsize, ysize, zsize, frame=boxframe)

src/compas_timber/elements/timber.py

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from compas.geometry import Transformation
12
from compas_model.elements import Element
23
from compas_model.elements import reset_computed
34

@@ -23,13 +24,11 @@ class TimberElement(Element):
2324
@property
2425
def __data__(self):
2526
data = super(TimberElement, self).__data__
26-
data["frame"] = self.frame
2727
data["features"] = [f for f in self.features if not f.is_joinery] # type: ignore
2828
return data
2929

30-
def __init__(self, features=None, **kwargs):
31-
super(TimberElement, self).__init__(**kwargs)
32-
self._frame = kwargs.get("frame", None)
30+
def __init__(self, features=None, frame=None, **kwargs):
31+
super(TimberElement, self).__init__(transformation=Transformation.from_frame(frame), **kwargs)
3332
self._features = features or []
3433
self.debug_info = []
3534

@@ -53,17 +52,6 @@ def is_group_element(self):
5352
def is_fastener(self):
5453
return False
5554

56-
@property
57-
def frame(self):
58-
# type: () -> Frame
59-
"""The local coordinate frame of the element."""
60-
return self._frame
61-
62-
@frame.setter
63-
@reset_computed
64-
def frame(self, frame):
65-
self._frame = frame
66-
6755
@property
6856
def features(self):
6957
# type: () -> list[Feature]

0 commit comments

Comments
 (0)