-
Notifications
You must be signed in to change notification settings - Fork 55
Open
Description
Hi! :)
I am trying to change the collision group of a collision model during runtime.
However, the values are not updated correctly, and the .array() method returns weird values.
Example to reproduce:
import numpy as np
import Sofa
import Sofa.Core
import Sofa.Simulation
class SimulationHandler:
def __init__(self):
self.root_node = Sofa.Core.Node("root")
self.nodes = createScene(self.root_node)
Sofa.Simulation.init(self.root_node)
def step(self):
Sofa.Simulation.animate(self.root_node, self.root_node.getDt())
def createScene(root):
plugins = [
"Sofa.Component.Collision.Detection.Algorithm",
"Sofa.Component.Collision.Detection.Intersection",
]
for plugin in plugins:
root.addObject("RequiredPlugin", pluginName=plugin, name=plugin)
root.addObject("DefaultAnimationLoop")
root.addObject("DefaultPipeline")
root.addObject("BruteForceBroadPhase")
root.addObject("BVHNarrowPhase")
root.addObject("DefaultContactManager")
root.addObject(
"LocalMinDistance",
alarmDistance=5.0,
contactDistance=0.5,
)
node_1 = root.addChild("child_1")
node_1.addObject("MechanicalObject", position=[0, 0, 0] * 5)
node_1.addObject("PointCollisionModel", group=0)
node_2 = root.addChild("child_2")
node_2.addObject("MechanicalObject", position=[1, 1, 1] * 5)
node_2.addObject("PointCollisionModel", group=1)
return node_1, node_2
if __name__ == "__main__":
simulation = SimulationHandler()
simulation.step()
print(f"First step: {simulation.nodes[0].PointCollisionModel.group.value=}")
print(f"First step: {simulation.nodes[1].PointCollisionModel.group.value=}")
print(f"Array: {simulation.nodes[0].PointCollisionModel.group.array()=}")
print(f"Array: {simulation.nodes[1].PointCollisionModel.group.array()=}")
print("-----")
simulation.nodes[0].PointCollisionModel.group.value[:] = np.array([8])
simulation.nodes[1].PointCollisionModel.group.value[:] = np.array([9])
print(f"After setting: {simulation.nodes[0].PointCollisionModel.group.value=}")
print(f"After setting: {simulation.nodes[1].PointCollisionModel.group.value=}")
print(f"Array: {simulation.nodes[0].PointCollisionModel.group.array()=}")
print(f"Array: {simulation.nodes[1].PointCollisionModel.group.array()=}")
simulation.step()
print("-----")
print(f"Second step: {simulation.nodes[0].PointCollisionModel.group.value=}")
print(f"Second step: {simulation.nodes[1].PointCollisionModel.group.value=}")
print(f"Array: {simulation.nodes[0].PointCollisionModel.group.array()=}")
print(f"Array: {simulation.nodes[1].PointCollisionModel.group.array()=}")Output:
First step: simulation.nodes[0].PointCollisionModel.group.value=[[0]]
First step: simulation.nodes[1].PointCollisionModel.group.value=[[1]]
Array: simulation.nodes[0].PointCollisionModel.group.array()=array([1073741824], dtype=int32)
Array: simulation.nodes[1].PointCollisionModel.group.array()=array([1073741824], dtype=int32)
-----
After setting: simulation.nodes[0].PointCollisionModel.group.value=[[0]]
After setting: simulation.nodes[1].PointCollisionModel.group.value=[[1]]
Array: simulation.nodes[0].PointCollisionModel.group.array()=array([1073741824], dtype=int32)
Array: simulation.nodes[1].PointCollisionModel.group.array()=array([1073741824], dtype=int32)
-----
Second step: simulation.nodes[0].PointCollisionModel.group.value=[[0]]
Second step: simulation.nodes[1].PointCollisionModel.group.value=[[1]]
Array: simulation.nodes[0].PointCollisionModel.group.array()=array([1073741824], dtype=int32)
Array: simulation.nodes[1].PointCollisionModel.group.array()=array([1073741824], dtype=int32)Any ideas what might be wrong here?
Sofa commit: sofa-framework/sofa@9a0d4b9
SP3 commit: 5a73716
Cheers,
Paul
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels