Skip to content

Commit 01cf1af

Browse files
committed
naming pattern, type hints and changelog
1 parent ef4def8 commit 01cf1af

7 files changed

Lines changed: 26 additions & 23 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
* Added `inheritance` field to `__jsondump__` of `compas.datastructures.Datastructure` to allow for deserialization to closest available superclass of custom datastructures.
1313
* Added `compas.scene.Scene.get_sceneobject_node` to get the TreeNode that corresponds to a scene object.
14-
* Added `compas.scene.SceneObjectFactory` method to create appropriate scene objects from data.
14+
* Added `compas.scene.sceneobject_factory` method to create appropriate scene objects from data.
1515

1616
### Changed
1717

@@ -20,7 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2020

2121
### Removed
2222

23-
* Removed `compas.scene.SceneObject.__new__` method, explicitly use `compas.scene.SceneObjectFactory` instead.
23+
* Removed `compas.scene.SceneObject.__new__` method, explicitly use `compas.scene.sceneobject_factory` instead.
24+
* Removed `frame` kwarg from `compas.scene.SceneObject` constructor, since it is now computed from the `worldtransformation` attribute.
2425

2526

2627
## [2.11.0] 2025-04-22

src/compas/scene/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from .exceptions import SceneObjectNotRegisteredError
1212
from .sceneobject import SceneObject
13-
from .sceneobject import SceneObjectFactory
13+
from .sceneobject import sceneobject_factory
1414
from .meshobject import MeshObject
1515
from .graphobject import GraphObject
1616
from .geometryobject import GeometryObject
@@ -44,7 +44,7 @@ def register_scene_objects_base():
4444
__all__ = [
4545
"SceneObjectNotRegisteredError",
4646
"SceneObject",
47-
"SceneObjectFactory",
47+
"sceneobject_factory",
4848
"MeshObject",
4949
"GraphObject",
5050
"GeometryObject",

src/compas/scene/scene.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from .context import clear
1111
from .context import detect_current_context
1212
from .sceneobject import SceneObject
13-
from .sceneobject import SceneObjectFactory
13+
from .sceneobject import sceneobject_factory
1414

1515

1616
class Scene(Datastructure):
@@ -88,7 +88,7 @@ def objects(self):
8888

8989
@property
9090
def context_objects(self):
91-
# type: () -> list[SceneObject]
91+
# type: () -> list
9292
guids = []
9393
for obj in self.objects:
9494
guids += obj.guids
@@ -119,7 +119,7 @@ def add(self, item, parent=None, **kwargs):
119119
del kwargs["context"] # otherwist the SceneObject receives "context" twice, which results in an error
120120

121121
# Create a corresponding new scene object
122-
sceneobject = SceneObjectFactory(item=item, context=self.context, scene=self, **kwargs)
122+
sceneobject = sceneobject_factory(item=item, context=self.context, scene=self, **kwargs)
123123

124124
# Add the scene object and item to the data store
125125
self.objectstore[str(sceneobject.guid)] = sceneobject
@@ -251,7 +251,7 @@ def redraw(self):
251251
self.draw()
252252

253253
def find_by_name(self, name):
254-
# type: (str) -> SceneObject
254+
# type: (str) -> SceneObject | None
255255
"""Find the first scene object with the given name.
256256
257257
Parameters
@@ -261,7 +261,7 @@ def find_by_name(self, name):
261261
262262
Returns
263263
-------
264-
:class:`SceneObject`
264+
:class:`SceneObject` | None
265265
266266
"""
267267
return next((obj for obj in self.objects if obj.name == name), None)
@@ -277,7 +277,7 @@ def find_by_itemtype(self, itemtype):
277277
278278
Returns
279279
-------
280-
:class:`SceneObject` or None
280+
:class:`SceneObject` | None
281281
282282
"""
283283
for obj in self.objects:

src/compas/scene/sceneobject.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from .descriptors.protocol import DescriptorProtocol
2222

2323

24-
def SceneObjectFactory(item=None, scene=None, context=None, **kwargs):
24+
def sceneobject_factory(item=None, scene=None, context=None, **kwargs):
2525
"""Create appropriate SceneObject instance based on item type.
2626
2727
Parameters
@@ -190,7 +190,9 @@ def item(self):
190190
@property
191191
def node(self):
192192
# type: () -> compas.datastructures.TreeNode
193-
return self.scene.get_sceneobject_node(self)
193+
if self._node is None:
194+
self._node = self.scene.get_sceneobject_node(self)
195+
return self._node
194196

195197
@property
196198
def is_root(self):

src/compas_ghpython/components/Compas_ToRhinoGeometry/code.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
from ghpythonlib.componentbase import executingcomponent as component
66

7-
from compas.scene import SceneObject
7+
from compas.scene import sceneobject_factory
88

99

1010
class CompasToRhinoGeometry(component):
1111
def RunScript(self, cg):
1212
if not cg:
1313
return None
1414

15-
return SceneObject(item=cg).draw()
15+
return sceneobject_factory(item=cg).draw()

src/compas_ghpython/components_cpython/Compas_ToRhinoGeometry/code.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import Grasshopper
99

10-
from compas.scene import SceneObject
10+
from compas.scene import sceneobject_factory
1111

1212

1313
class CompasToRhinoGeometry(Grasshopper.Kernel.GH_ScriptInstance):
1414
def RunScript(self, cg: Any):
1515
if not cg:
1616
return None
1717

18-
return SceneObject(item=cg).draw()
18+
return sceneobject_factory(item=cg).draw()

tests/compas/scene/test_scene.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from compas.scene import register
88
from compas.scene import Scene
99
from compas.scene import SceneObject
10-
from compas.scene import SceneObjectFactory
10+
from compas.scene import sceneobject_factory
1111
from compas.scene import SceneObjectNotRegisteredError
1212
from compas.data import Data
1313
from compas.geometry import Box
@@ -50,29 +50,29 @@ def test_get_sceneobject_cls_with_orderly_registration():
5050
register(FakeItem, FakeSceneObject, context="fake")
5151
register(FakeSubItem, FakeSubSceneObject, context="fake")
5252
item = FakeItem()
53-
sceneobject = SceneObjectFactory(item=item, context="fake")
53+
sceneobject = sceneobject_factory(item=item, context="fake")
5454
assert isinstance(sceneobject, FakeSceneObject)
5555

5656
item = FakeSubItem()
57-
sceneobject = SceneObjectFactory(item=item, context="fake")
57+
sceneobject = sceneobject_factory(item=item, context="fake")
5858
assert isinstance(sceneobject, FakeSubSceneObject)
5959

6060
def test_get_sceneobject_cls_with_out_of_order_registration():
6161
register(FakeSubItem, FakeSubSceneObject, context="fake")
6262
register(FakeItem, FakeSceneObject, context="fake")
6363
item = FakeItem()
64-
sceneobject = SceneObjectFactory(item=item, context="fake")
64+
sceneobject = sceneobject_factory(item=item, context="fake")
6565
assert isinstance(sceneobject, FakeSceneObject)
6666

6767
item = FakeSubItem()
68-
sceneobject = SceneObjectFactory(item=item, context="fake")
68+
sceneobject = sceneobject_factory(item=item, context="fake")
6969
assert isinstance(sceneobject, FakeSubSceneObject)
7070

7171
def test_sceneobject_auto_context_discovery(mocker):
7272
register_fake_context()
7373

7474
item = FakeItem()
75-
sceneobject = SceneObjectFactory(item=item)
75+
sceneobject = sceneobject_factory(item=item)
7676

7777
assert isinstance(sceneobject, FakeSceneObject)
7878

@@ -82,7 +82,7 @@ def test_sceneobject_auto_context_discovery_no_context(mocker):
8282

8383
with pytest.raises(SceneObjectNotRegisteredError):
8484
item = FakeSubItem()
85-
_ = SceneObjectFactory(item=item)
85+
_ = sceneobject_factory(item=item)
8686

8787
def test_sceneobject_transform():
8888
scene = Scene()

0 commit comments

Comments
 (0)