use of artisynth.core.materials.SimpleAxialMuscle in project artisynth_core by artisynth.
the class ForceTargetDemo method build.
public void build(String[] args) throws IOException {
// create MechModel and add to RootModel
mech = new MechModel("mech");
addModel(mech);
// create the components
p1 = new Particle("p1", /*mass=*/
2, /*x,y,z=*/
0, 0, 0.15);
p2 = new Particle("p2", 2, 10, 0, 0.15);
p3 = new Particle("p3", 2, 5, 5, 0);
p4 = new Particle("p4", 2, 5, -5, 0);
p5 = new Particle("p5", 0, 5, 0, 5);
p6 = new Particle("p6", 0, 5, 0, -5);
box = RigidBody.createBox("box", /*wx,wy,wz=*/
0.5, 0.3, 0.3, /*density=*/
1);
box.setPose(new RigidTransform3d(/*x,y,z=*/
5, 0, -0.15));
// create marker point and connect it to the box:
FrameMarker mkr = new FrameMarker(/*x,y,z=*/
0, 0, 0.15);
mkr.setFrame(box);
// create the muscle:
muscle = new Muscle("mus1", /*restLength=*/
5);
muscle.setPoints(p1, mkr);
muscle.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
0, /*damping=*/
10, /*maxf=*/
1000));
muscle2 = new Muscle("mus2", /*restLength=*/
5);
muscle2.setPoints(p2, mkr);
muscle2.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
0, /*damping=*/
10, /*maxf=*/
1000));
muscle3 = new Muscle("mus3", /*restLength=*/
5);
muscle3.setPoints(p3, mkr);
muscle3.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
0, /*damping=*/
10, /*maxf=*/
4000));
muscle4 = new Muscle("mus4", /*restLength=*/
5);
muscle4.setPoints(p4, mkr);
muscle4.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
0, /*damping=*/
10, /*maxf=*/
4000));
muscle5 = new Muscle("mus5", /*restLength=*/
5);
muscle5.setPoints(p5, mkr);
muscle5.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
0, /*damping=*/
10, /*maxf=*/
4000));
muscle6 = new Muscle("mus6", /*restLength=*/
5);
muscle6.setPoints(p6, mkr);
muscle6.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
0, /*damping=*/
10, /*maxf=*/
4000));
if (two_cons == true) {
RigidTransform3d XPW = new RigidTransform3d(5, 0, 0);
XPW.R.mulAxisAngle(1, 0, 0, Math.toRadians(90));
// Connection on the corner
// PlanarConnector connector =
// new PlanarConnector (box, new Vector3d (lenx/2, -2.5, 1.5), XPW);
// Connection in the center
con = new PlanarConnector(box, new Vector3d(0, 0, 0.15), XPW);
con.setUnilateral(false);
con.setPlaneSize(2);
RenderProps props = con.createRenderProps();
props.setPointColor(Color.blue);
props.setPointStyle(Renderer.PointStyle.SPHERE);
props.setPointRadius(0.06);
con.setRenderProps(props);
// con = new ParticlePlaneConstraint(p5, pl);
// RenderProps.setDrawEdges (con, true);
// RenderProps.setVisible (con, true);
RigidTransform3d XPW2 = new RigidTransform3d(5, 0, 0);
XPW2.R.mulAxisAngle(1, 0, 0, 0);
// Connection on the corner
// PlanarConnector connector =
// new PlanarConnector (box, new Vector3d (lenx/2, -2.5, 1.5), XPW);
// Connection in the center
con2 = new PlanarConnector(box, new Vector3d(0, 0, 0.15), XPW2);
con2.setUnilateral(false);
con2.setPlaneSize(2);
con2.setRenderProps(props);
} else {
RigidTransform3d XPW = new RigidTransform3d(5, 0, 0);
XPW.R.mulAxisAngle(1, 0, 0, Math.toRadians(45));
con = new PlanarConnector(box, new Vector3d(0, 0, 0.15), XPW);
con.setUnilateral(false);
con.setPlaneSize(2);
RenderProps props = con.createRenderProps();
props.setPointColor(Color.blue);
props.setPointStyle(Renderer.PointStyle.SPHERE);
props.setPointRadius(0.06);
con.setRenderProps(props);
}
// con.setRenderProps (myRenderProps);
// add components to the mech model
mech.addParticle(p1);
mech.addParticle(p2);
mech.addParticle(p3);
mech.addParticle(p4);
mech.addParticle(p5);
mech.addParticle(p6);
mech.addRigidBody(box);
mech.addFrameMarker(mkr);
// mech.addParticle (p5);
mech.addAxialSpring(muscle);
mech.addAxialSpring(muscle2);
mech.addAxialSpring(muscle3);
mech.addAxialSpring(muscle4);
mech.addAxialSpring(muscle5);
mech.addAxialSpring(muscle6);
con.setName("con1");
if (two_cons == true) {
con2.setName("con2");
}
if (cons == true) {
mech.addBodyConnector(con);
ConnectorForceRenderer rend = new ConnectorForceRenderer(con);
myRenderProps = rend.createRenderProps();
myRenderProps.setLineStyle(LineStyle.CYLINDER);
myRenderProps.setLineRadius(0.175);
myRenderProps.setLineColor(Color.BLUE);
rend.setRenderProps(myRenderProps);
rend.setArrowSize(0.1);
addMonitor(rend);
}
if (two_cons == true) {
mech.addBodyConnector(con2);
}
// first particle set to be fixed
p1.setDynamic(false);
p2.setDynamic(false);
p3.setDynamic(false);
p4.setDynamic(false);
p5.setDynamic(false);
p6.setDynamic(false);
// increase model bounding box for the viewer
mech.setBounds(/*min=*/
-1, 0, -1, /*max=*/
1, 0, 0);
// set render properties for the components
setPointRenderProps(p1);
setPointRenderProps(p2);
setPointRenderProps(p3);
setPointRenderProps(p4);
setPointRenderProps(p5);
setPointRenderProps(p6);
setPointRenderProps(mkr);
setLineRenderProps(muscle);
setLineRenderProps(muscle2);
setLineRenderProps(muscle3);
setLineRenderProps(muscle4);
setLineRenderProps(muscle5);
setLineRenderProps(muscle6);
addTrackingController(mkr);
if (cons = true) {
addConForceProbe(10, 0.1);
}
}
use of artisynth.core.materials.SimpleAxialMuscle in project artisynth_core by artisynth.
the class FemBeamWithMuscle method createMuscle.
// Creates a point-to-point muscle
protected Muscle createMuscle() {
Muscle mus = new Muscle(/*name=*/
null, /*restLength=*/
0);
mus.setMaterial(new SimpleAxialMuscle(/*stiffness=*/
20, /*damping=*/
10, /*maxf=*/
10));
RenderProps.setLineStyle(mus, Renderer.LineStyle.SPINDLE);
RenderProps.setLineColor(mus, Color.RED);
RenderProps.setLineRadius(mus, 0.03);
return mus;
}
Aggregations