-
Notifications
You must be signed in to change notification settings - Fork 108
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merging SceneObjectNode and SceneObject #1307
Conversation
i don't think this helps with the model problem. from an item you can access the parent node and from the parent node you can reach the tree. but you still can't reach the scene from the tree. perhaps it would make sense to make |
src/compas/scene/sceneobject.py
Outdated
else: | ||
raise ValueError("Cannot add items to a scene object without a node.") | ||
sceneobject = SceneObject(item, **kwargs) | ||
super().add(sceneobject) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
doesn't work in IronPython...
src/compas/scene/scene.py
Outdated
parent = parent or self.tree.root | ||
|
||
if isinstance(item, SceneObject): | ||
sceneobject = item | ||
else: | ||
sceneobject = SceneObject(item, context=self.context, **kwargs) | ||
self.tree.add(sceneobject, parent=parent) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
before, the problem was here. this might work now for the model...
i added a few changes that make the scene work for recursive addition of objects in, for example a model. |
i removed viewer detection and the viewer instance attribute on the scene. as explained, i think we should rather do the opposite... |
I also think making |
def __init__(kwag_x=None, kwag_y=None):
super(XXX, self).__init__(kwag_x=kwag_x, kwag_y=kwag_y) |
regarding in my opinion this should only be used when additional named arguments can be expected that are not known to the current class and need to be passed on to the class ancestors. arguments that are expected and used in the current scope should always be listed, processed, and documented explicitly... what i think we should most certainly NOT do is the following: def __init__(self, **kwargs):
super().__init__(**kwargs)
self.a = kwargs.get('a')
self.b = kwargs.get('b') i would also vote for using ONLY named arguments in |
tests/compas/scene/test_scene.py
Outdated
|
||
def test_sceneobject_auto_context_discovery_no_context(mocker): | ||
mocker.patch("compas.scene.context.is_viewer_open", return_value=False) | ||
# mocker.patch("compas.scene.context.is_viewer_open", return_value=False) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same
Sounds good, will make everything named argument in the scope of this PR and make a separate one after for rest of places. And will fix all the docs and remove the code commented out |
@tomvanmele cleaned up, shall we merge? |
@tomvanmele let's merge this? |
The relation between
SceneObjectNode
andSceneObject
was too convoluted. This PR merge them into one by havingSceneObject
inherent fromTreeNode
. This simplifies a lot on operations to access parent/ children object or a tree that an object is attachted too. While the most-outer level user APIs stays untouched. This should also make it easier from creating acompas_model
object.What type of change is this?
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.CHANGELOG.md
file in theUnreleased
section under the most fitting heading (e.g.Added
,Changed
,Removed
).invoke test
).invoke lint
).compas.datastructures.Mesh
.