diff --git a/examples/python3/NeedleInsertion-predefinedPath.py b/examples/python3/NeedleInsertion-predefinedPath.py index aa81171d..cd94ba2e 100644 --- a/examples/python3/NeedleInsertion-predefinedPath.py +++ b/examples/python3/NeedleInsertion-predefinedPath.py @@ -118,8 +118,8 @@ def createScene(rootNode): rigidBaseNode = cableNode.addChild('rigidBase') RigidBaseMO = rigidBaseNode.addObject('MechanicalObject', template='Rigid3d', name="RigidBaseMO", position="0 0 0 0 0 0 1", showObject='1', showObjectScale='5.') - rigidBaseNode.addObject('RestShapeSpringsForceField', name='spring', stiffness="50000", - angularStiffness="50000", external_points="0", mstate="@RigidBaseMO", points="0", + rigidBaseNode.addObject('FixedWeakConstraint', name='spring', stiffness="50000", + angularStiffness="50000", mstate="@RigidBaseMO", indices="0", template="Rigid3d") ############### diff --git a/examples/python3/PNLS_Example3.py b/examples/python3/PNLS_Example3.py index 2aab3f4d..784bbd5f 100644 --- a/examples/python3/PNLS_Example3.py +++ b/examples/python3/PNLS_Example3.py @@ -118,8 +118,8 @@ def createScene(rootNode): showObjectScale=0.3, position=[length, 0, 0, 0, 0, 0, 1], showObject=True) beamFrame.addObject('RestShapeSpringsForceField', name='spring', - stiffness=1e8, angularStiffness=1e8, external_points=0, - external_rest_shape=controlMo.getLinkPath(), points=nbFrames, template="Rigid3d") + stiffness=1e8, angularStiffness=1e8, externalIndices=0, + external_rest_shape=controlMo.getLinkPath(), indices=nbFrames, template="Rigid3d") cosseratNode = nonLinearCosserat.legendreControlPointsNode diff --git a/examples/python3/cosserat/CosseratBase.py b/examples/python3/cosserat/CosseratBase.py index 1b27c9b7..a1b1121d 100644 --- a/examples/python3/cosserat/CosseratBase.py +++ b/examples/python3/cosserat/CosseratBase.py @@ -110,8 +110,10 @@ def _addSlidingPointsWithContainer(self): return slidingPoint def _addRigidBaseNode(self): + rigidBaseNode = create_rigid_node(self, "RigidBase", self.translation, self.rotation) + return rigidBaseNode def _add_cosserat_coordinate(self, initial_curvature: List[float], section_lengths: List[float]): @@ -244,13 +246,12 @@ def createScene(rootNode): # Create a cosserat = solverNode.addChild(CosseratBase(parent=solverNode, beam_params=Params)) cosserat.rigidBaseNode.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=1e8, angularStiffness=1.0e8, - external_points=0, # mstate="@RigidBaseMO", - points=0, + indices=0, template="Rigid3d" ) diff --git a/examples/python3/cosserat/cosseratObject.py b/examples/python3/cosserat/cosseratObject.py index 619e82c1..f14ff35f 100644 --- a/examples/python3/cosserat/cosseratObject.py +++ b/examples/python3/cosserat/cosseratObject.py @@ -250,13 +250,12 @@ def addRigidBaseNode(self): if int(self.attachingToLink.value): print("Adding the rest shape to the base") rigidBaseNode.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=1e8, angularStiffness=1.0e8, - external_points=0, mstate="@RigidBaseMO", - points=0, + indices=0, template="Rigid3d", ) return rigidBaseNode diff --git a/examples/python3/cosserat/createFemRegularGrid.py b/examples/python3/cosserat/createFemRegularGrid.py index a8d15e5d..03f860f5 100644 --- a/examples/python3/cosserat/createFemRegularGrid.py +++ b/examples/python3/cosserat/createFemRegularGrid.py @@ -33,7 +33,7 @@ def createFemCube(parentNode): gelNode.addObject('TetrahedronFEMForceField', template='Vec3d', name='FEM', method='large', poissonRatio='0.45', youngModulus='100') gelNode.addObject('BoxROI', name='ROI1', box='40 -17 -10 100 -14 10', drawBoxes='true') - gelNode.addObject('RestShapeSpringsForceField', points='@ROI1.indices', stiffness='1e12') + gelNode.addObject('FixedWeakConstraint', indices='@ROI1.indices', stiffness='1e12') surfaceNode = gelNode.addChild("surfaceNode") surfaceNode.addObject('TriangleSetTopologyContainer', name="surfContainer", src="@../../GelSurface/Container") @@ -72,7 +72,7 @@ def createFemCubeWithParams(parentNode, geometry): gelNode.addObject('TetrahedronFEMForceField', template='Vec3d', name='FEM', method='large', poissonRatio=geometry.poissonRatio, youngModulus=geometry.youngModulus) gelNode.addObject('BoxROI', name='ROI1', box=geometry.box, drawBoxes='true') - gelNode.addObject('RestShapeSpringsForceField', points='@ROI1.indices', stiffness='1e12') + gelNode.addObject('FixedWeakConstraint', indices='@ROI1.indices', stiffness='1e12') surfaceNode = gelNode.addChild("surfaceNode") surfaceNode.addObject('TriangleSetTopologyContainer', name="surfContainer", diff --git a/examples/python3/cosserat/nonLinearCosserat.py b/examples/python3/cosserat/nonLinearCosserat.py index 90e3022e..74304db0 100644 --- a/examples/python3/cosserat/nonLinearCosserat.py +++ b/examples/python3/cosserat/nonLinearCosserat.py @@ -125,9 +125,9 @@ def addRigidBaseNode(self): # one can choose to set this to false and directly attach the beam base # to a control object in order to be able to drive it. if int(self.attachingToLink.value): - rigidBaseNode.addObject('RestShapeSpringsForceField', name='spring', - stiffness=1e14, angularStiffness=1.e14, external_points=0, - mstate="@RigidBaseMO", points=0, template="Rigid3d") + rigidBaseNode.addObject('FixedWeakConstraint', name='spring', + stiffness=1e14, angularStiffness=1.e14, + mstate="@RigidBaseMO", indices=0, template="Rigid3d") return rigidBaseNode def addLegendrePolynomialsNode(self): diff --git a/examples/python3/tutorial/formation/chiba/Actuator.py b/examples/python3/tutorial/formation/chiba/Actuator.py index b1a52af5..41fe18a7 100644 --- a/examples/python3/tutorial/formation/chiba/Actuator.py +++ b/examples/python3/tutorial/formation/chiba/Actuator.py @@ -32,7 +32,7 @@ def createScene(rootNode): finger.addObject('BoxROI', name='boxROISubTopo', box=[23, -10, -8, 26, 10, 8], strict=False, drawBoxes=True) finger.addObject('BoxROI', name='boxROISubTopo2', box=[0, -10, -4, 28, 10, -2], strict=False, drawBoxes=True) finger.addObject('BoxROI', name='boxROI', box=[-2, -10, -20, 2, 10, 20], drawBoxes=True) - finger.addObject('RestShapeSpringsForceField', points='@boxROI.indices', stiffness=1e12, angularStiffness=1e12) + finger.addObject('FixedWeakConstraint', indices='@boxROI.indices', stiffness=1e12, angularStiffness=1e12) finger.addObject('LinearSolverConstraintCorrection') #Plastic Part modelSubTopo = finger.addChild('modelSubTopo') diff --git a/examples/python3/tutorial/formation/chiba/actuator_v1.py b/examples/python3/tutorial/formation/chiba/actuator_v1.py index 22ddca89..ca6b01fa 100644 --- a/examples/python3/tutorial/formation/chiba/actuator_v1.py +++ b/examples/python3/tutorial/formation/chiba/actuator_v1.py @@ -31,7 +31,7 @@ def createScene(root_node): finger.addObject('BoxROI', name='boxROISubTopo', box=[23, -10, -8, 26, 10, 8], strict=False, drawBoxes=True) finger.addObject('BoxROI', name='boxROISubTopo2', box=[0, -10, -4, 28, 10, -2], strict=False, drawBoxes=True) finger.addObject('BoxROI', name='boxROI', box=[-2, -10, -20, 2, 10, 20], drawBoxes=True) - finger.addObject('RestShapeSpringsForceField', points='@boxROI.indices', stiffness=1e12, angularStiffness=1e12) + finger.addObject('FixedWeakConstraint', indices='@boxROI.indices', stiffness=1e12, angularStiffness=1e12) finger.addObject('LinearSolverConstraintCorrection') # Plastic Part modelSubTopo = finger.addChild('modelSubTopo') diff --git a/examples/python3/tutorial/scene_w9991.py b/examples/python3/tutorial/scene_w9991.py index 0a81c81e..115399c4 100644 --- a/examples/python3/tutorial/scene_w9991.py +++ b/examples/python3/tutorial/scene_w9991.py @@ -14,9 +14,9 @@ def _add_rigid_base(p_node): rigid_base_node = p_node.addChild('rigid_base') rigid_base_node.addObject('MechanicalObject', template="Rigid3d", name="cosserat_base_mo", position="0 0 0 0 0 0. 1", showObject=1, showObjectScale="0.1") - rigid_base_node.addObject('RestShapeSpringsForceField', template="Rigid3d", name="spring", + rigid_base_node.addObject('FixedWeakConstraint', template="Rigid3d", name="spring", stiffness=stiffness_param, angularStiffness=stiffness_param, - mstate="@cosserat_base_mo", external_points="0", points="0") + mstate="@cosserat_base_mo", externalIndices="0", indices="0") return rigid_base_node diff --git a/examples/python3/useful/header.py b/examples/python3/useful/header.py index cdd2cb70..6f55fc83 100644 --- a/examples/python3/useful/header.py +++ b/examples/python3/useful/header.py @@ -156,8 +156,8 @@ def addSolverNode(parent_node, name='solverNode', template='CompressedRowSparseM def attach_mesh_with_springs(mesh_node, _box='-18 -15 -8 2 -3 8'): mesh_node.addObject('BoxROI', name='ROI1', box=_box, drawBoxes='true') - mesh_node.addObject('RestShapeSpringsForceField', - points='@ROI1.indices', stiffness='1e12') + mesh_node.addObject('FixedWeakConstraint', + indices='@ROI1.indices', stiffness='1e12') def attach_3d_points_to_meca_with_barycentric_mapping(parent_node, name='node_name', list_of_points=[" 0.0 0 0 15 0 0 30 0 0 45 0 0 60 0 0 66 0 0 81 0.0 0.0"]): @@ -188,6 +188,7 @@ def add_finger_mesh_force_field_Object(parent_node, path): poissonRatio='0.45', youngModulus='500') attach_mesh_with_springs(parent_node) + # Mapped points inside the finger volume, these points attached to the FE model # are constrained to slide on the cable. points_node = attach_3d_points_to_meca_with_barycentric_mapping(parent_node) diff --git a/examples/python3/wip/completDirectNeedleInsertion.py b/examples/python3/wip/completDirectNeedleInsertion.py index 48a0fabd..5fde7353 100644 --- a/examples/python3/wip/completDirectNeedleInsertion.py +++ b/examples/python3/wip/completDirectNeedleInsertion.py @@ -108,8 +108,8 @@ def createScene(rootNode): RigidBaseMO = rigidBaseNode.addObject('MechanicalObject', template='Rigid3d', name="RigidBaseMO", position="0 0 0 0 0 0 1", translation="-40. 0. 0.", showObject='1', showObjectScale='5.') - rigidBaseNode.addObject('RestShapeSpringsForceField', name='spring', stiffness="50000", - angularStiffness="50000", external_points="0", mstate="@RigidBaseMO", points="0", + rigidBaseNode.addObject('FixedWeakConstraint', name='spring', stiffness="50000", + angularStiffness="50000", mstate="@RigidBaseMO", indices="0", template="Rigid3d") ############################################# diff --git a/tutorial/text/cosserat_tutorial.md b/tutorial/text/cosserat_tutorial.md index ccfc1c66..cc272c6c 100644 --- a/tutorial/text/cosserat_tutorial.md +++ b/tutorial/text/cosserat_tutorial.md @@ -86,7 +86,7 @@ Now, we'll dive into the essential part – configuring the Cosserat plugin with def _add_rigid_base(p_node): rigid_base_node = p_node.addChild('rigid_base') rigid_base_node.addObject('MechanicalObject', template='Rigid3d', name="cosserat_base_mo", position="0 0 0 0 0 0. 1", showObject=1, showObjectScale='0.1') - rigid_base_node.addObject('RestShapeSpringsForceField', name='spring', stiffness=stiffness_param, angularStiffness=stiffness_param, external_points="0", mstate="@cosserat_base_mo", points="0", template="Rigid3d") + rigid_base_node.addObject('FixedWeakConstraint', name='spring', stiffness=stiffness_param, angularStiffness=stiffness_param, mstate="@cosserat_base_mo", indices="0", template="Rigid3d") return rigid_base_node ``` diff --git a/tutorial/tuto_scenes/geo_cable_driven_cosserat_beam.py b/tutorial/tuto_scenes/geo_cable_driven_cosserat_beam.py index d4bebc90..303c0601 100644 --- a/tutorial/tuto_scenes/geo_cable_driven_cosserat_beam.py +++ b/tutorial/tuto_scenes/geo_cable_driven_cosserat_beam.py @@ -65,12 +65,11 @@ def createScene(root_node): beam = solver_node.addChild(CosseratBase(parent=solver_node, beam_params=Params)) # Attach beam base using a spring force field beam.rigidBaseNode.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=1e8, angularStiffness=1.0e8, - external_points=0, - points=0, + indices=0, template="Rigid3d" ) diff --git a/tutorial/tuto_scenes/geo_cosserat_cable_driven_cosserat_beam.py b/tutorial/tuto_scenes/geo_cosserat_cable_driven_cosserat_beam.py index a7e28c81..83897bfd 100644 --- a/tutorial/tuto_scenes/geo_cosserat_cable_driven_cosserat_beam.py +++ b/tutorial/tuto_scenes/geo_cosserat_cable_driven_cosserat_beam.py @@ -76,12 +76,11 @@ def createScene(root_node): beam = solver_node.addChild(CosseratBase(parent=solver_node, beam_params=Params)) # Attach beam base using a spring force field beam.rigidBaseNode.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=1e8, angularStiffness=1.0e8, - external_points=0, - points=0, + indices=0, template="Rigid3d" ) diff --git a/tutorial/tuto_scenes/step1.py b/tutorial/tuto_scenes/step1.py index 1f09985b..427db907 100644 --- a/tutorial/tuto_scenes/step1.py +++ b/tutorial/tuto_scenes/step1.py @@ -30,9 +30,9 @@ def _add_rigid_base(p_node): rigid_base_node.addObject('MechanicalObject', template='Rigid3d', name="cosserat_base_mo", position="0 0 0 0 0 0. 1", showObject=1, showObjectScale='0.1') - rigid_base_node.addObject('RestShapeSpringsForceField', name='spring', stiffness=stiffness_param, - angularStiffness=stiffness_param, external_points="0", mstate="@cosserat_base_mo", - points="0", template="Rigid3d") + rigid_base_node.addObject('FixedWeakConstraint', name='spring', stiffness=stiffness_param, + angularStiffness=stiffness_param, mstate="@cosserat_base_mo", + indices="0", template="Rigid3d") return rigid_base_node diff --git a/tutorial/tuto_scenes/tuto_1.py b/tutorial/tuto_scenes/tuto_1.py index 320caab1..589f5b16 100644 --- a/tutorial/tuto_scenes/tuto_1.py +++ b/tutorial/tuto_scenes/tuto_1.py @@ -18,13 +18,12 @@ def _add_rigid_base(p_node, positions=None): showObjectScale="0.1", ) rigid_base_node.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=stiffness_param, angularStiffness=stiffness_param, - external_points="0", mstate="@cosserat_base_mo", - points="0", + indices="0", template="Rigid3d", ) return rigid_base_node diff --git a/tutorial/tuto_scenes/tuto_1_6dofs.py b/tutorial/tuto_scenes/tuto_1_6dofs.py index af723fb0..98124642 100644 --- a/tutorial/tuto_scenes/tuto_1_6dofs.py +++ b/tutorial/tuto_scenes/tuto_1_6dofs.py @@ -11,9 +11,9 @@ def _add_rigid_base(p_node): rigid_base_node.addObject('MechanicalObject', template='Rigid3d', name="cosserat_base_mo", position="0 0 0 0 0 0. 1", showObject=1, showObjectScale='0.1') - rigid_base_node.addObject('RestShapeSpringsForceField', name='spring', stiffness=stiffness_param, - angularStiffness=stiffness_param, external_points="0", mstate="@cosserat_base_mo", - points="0", template="Rigid3d") + rigid_base_node.addObject('FixedWeakConstraint', name='spring', stiffness=stiffness_param, + angularStiffness=stiffness_param, mstate="@cosserat_base_mo", + indices="0", template="Rigid3d") return rigid_base_node diff --git a/tutorial/tuto_scenes/tuto_2.py b/tutorial/tuto_scenes/tuto_2.py index 381c3c26..55b5c9ba 100644 --- a/tutorial/tuto_scenes/tuto_2.py +++ b/tutorial/tuto_scenes/tuto_2.py @@ -2,6 +2,7 @@ from tuto_1 import _add_rigid_base, _add_cosserat_state, _add_cosserat_frame + stiffness_param: float = 1.e10 beam_radius: float = 1. diff --git a/tutorial/tuto_scenes/tuto_2_6dofs.py b/tutorial/tuto_scenes/tuto_2_6dofs.py index 3cf3c975..20dcac3f 100644 --- a/tutorial/tuto_scenes/tuto_2_6dofs.py +++ b/tutorial/tuto_scenes/tuto_2_6dofs.py @@ -14,9 +14,9 @@ def _add_rigid_base(p_node): rigid_base_node.addObject('MechanicalObject', template='Rigid3d', name="cosserat_base_mo", position="0 0 0 0 0 0. 1", showObject=1, showObjectScale='0.1') - rigid_base_node.addObject('RestShapeSpringsForceField', name='spring', stiffness=stiffness_param, - angularStiffness=stiffness_param, external_points="0", mstate="@cosserat_base_mo", - points="0", template="Rigid3d", activeDirections=[0,1,1,1,1,1,1]) + rigid_base_node.addObject('FixedWeakConstraint', name='spring', stiffness=stiffness_param, + angularStiffness=stiffness_param, mstate="@cosserat_base_mo", + indices="0", template="Rigid3d", activeDirections=[0,1,1,1,1,1,1]) return rigid_base_node diff --git a/tutorial/tuto_scenes/tuto_3.py b/tutorial/tuto_scenes/tuto_3.py index 7630e0ba..f5b94398 100644 --- a/tutorial/tuto_scenes/tuto_3.py +++ b/tutorial/tuto_scenes/tuto_3.py @@ -28,12 +28,11 @@ def createScene(root_node): beam = solver_node.addChild(CosseratBase(parent=solver_node, params=Params)) # Attach beam base using a spring force field beam.rigidBaseNode.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=1e8, angularStiffness=1.0e8, - external_points=0, - points=0, + indices=0, template="Rigid3d" ) diff --git a/tutorial/tuto_scenes/tuto_4.py b/tutorial/tuto_scenes/tuto_4.py index ca9ef599..cea645f6 100644 --- a/tutorial/tuto_scenes/tuto_4.py +++ b/tutorial/tuto_scenes/tuto_4.py @@ -110,12 +110,11 @@ def createScene(root_node): # create cosserat Beam cosserat_beam = solver_node.addChild(CosseratBase(parent=solver_node, params=Params)) cosserat_beam.rigidBaseNode.addObject( - "RestShapeSpringsForceField", + "FixedWeakConstraint", name="spring", stiffness=1e8, angularStiffness=1.0e8, - external_points=0, - points=0, + indices=0, template="Rigid3d" ) cosserat_frames = cosserat_beam.cosseratFrame @@ -132,8 +131,9 @@ def createScene(root_node): showObject=True) if controller_type == 3: cosserat_frames.addObject('RestShapeSpringsForceField', name='spring', stiffness=0., angularStiffness=1.e8, - external_points=0, external_rest_shape=controller_state.getLinkPath(), - points=geoParams.nb_frames, template="Rigid3d") + externalIndices=0, external_rest_shape=controller_state.getLinkPath(), + indices=geoParams.nbFrames, template="Rigid3d") + solver_node.addObject(ForceController(forceNode=const_force_node, frame_node=cosserat_frames, force_type=controller_type, tip_controller=controller_state)) diff --git a/tutorial/tuto_scenes/tuto_5.py b/tutorial/tuto_scenes/tuto_5.py index fcb92a8c..3303bad5 100644 --- a/tutorial/tuto_scenes/tuto_5.py +++ b/tutorial/tuto_scenes/tuto_5.py @@ -168,8 +168,8 @@ def createScene(root_node): # showObject=True) # # cosserat_frames.addObject('RestShapeSpringsForceField', name='spring', stiffness=1e8, angularStiffness=1e8, - # external_points=0, external_rest_shape=controller_state.getLinkPath(), - # points=geoParams.nbFrames, template="Rigid3d") + # externalIndices=0, external_rest_shape=controller_state.getLinkPath(), + # indices=geoParams.nbFrames, template="Rigid3d") # # solver_node.addObject(ForceController(forceNode=const_force_node, frame_node=cosserat_frames, force_type=3, # tip_controller=controller_state)) diff --git a/tutorial/tuto_scenes/tuto_compare_2.py b/tutorial/tuto_scenes/tuto_compare_2.py index faf12613..1a50e04f 100644 --- a/tutorial/tuto_scenes/tuto_compare_2.py +++ b/tutorial/tuto_scenes/tuto_compare_2.py @@ -22,9 +22,9 @@ def _add_rigid_base(p_node, _name='rigid_base'): rigid_base_node.addObject('MechanicalObject', template='Rigid3d', name="cosserat_base_mo", position="0 0 0 0 0 0. 1", showObject=0, showObjectScale='0.') - rigid_base_node.addObject('RestShapeSpringsForceField', name='spring', stiffness=stiffness_param, - angularStiffness=stiffness_param, external_points="0", mstate="@cosserat_base_mo", - points="0", template="Rigid3d", activeDirections=[1,1,1,1,1,1,1]) + rigid_base_node.addObject('FixedWeakConstraint', name='spring', stiffness=stiffness_param, + angularStiffness=stiffness_param, mstate="@cosserat_base_mo", + indices="0", template="Rigid3d", activeDirections=[1,1,1,1,1,1,1]) return rigid_base_node