use of artisynth.core.mechmodels.Particle in project artisynth_core by artisynth.
the class MultiSpringTest method addMixedUpSprings.
protected void addMixedUpSprings(MechModel mech) {
Particle p = new Particle(1, new Point3d(0, 0, 0.1));
mech.addParticle(p);
Particle lastp = p;
for (int i = 0; i < 20; ++i) {
p = new Particle(1, new Point3d((i + 1) * 0.1, 2 * (i % 2 - 0.5) * 0.1, 0.1));
mech.addParticle(p);
AxialSpring ax = new AxialSpring("spring mixed " + i);
if (i % 2 == 0) {
ax.setPoints(lastp, p);
} else {
ax.setPoints(p, lastp);
}
mech.addAxialSpring(ax);
lastp = p;
}
}
use of artisynth.core.mechmodels.Particle in project artisynth_core by artisynth.
the class MultiSpringTest method addSeparatedSprings.
protected void addSeparatedSprings(MechModel mech) {
for (int i = 0; i < 10; ++i) {
Particle p1 = new Particle(1, new Point3d((2 * i) * 0.1, 2 * (i % 2 - 0.5) * 0.1, -0.1));
Particle p2 = new Particle(1, new Point3d((2 * i + 1) * 0.1, -2 * (i % 2 - 0.5) * 0.1, -0.1));
mech.addParticle(p1);
mech.addParticle(p2);
AxialSpring ax = new AxialSpring("spring detached " + i);
if (i % 2 == 0) {
ax.setPoints(p1, p2);
} else {
ax.setPoints(p2, p1);
}
mech.addAxialSpring(ax);
}
}
use of artisynth.core.mechmodels.Particle in project artisynth_core by artisynth.
the class MultiSpringTest method addSprings.
protected void addSprings(MechModel mech) {
Particle p = new Particle(1, new Point3d(0, 0, 0));
mech.addParticle(p);
Particle lastp = p;
for (int i = 0; i < 20; ++i) {
p = new Particle(1, new Point3d((i + 1) * 0.1, 2 * (i % 2 - 0.5) * 0.1, 0));
mech.addParticle(p);
AxialSpring ax = new AxialSpring("spring " + i);
ax.setPoints(lastp, p);
mech.addAxialSpring(ax);
lastp = p;
}
}
use of artisynth.core.mechmodels.Particle in project artisynth_core by artisynth.
the class MultiSpringTest method addVerticalSprings.
protected void addVerticalSprings(MechModel mech) {
for (int i = 0; i < 5; ++i) {
Particle p1 = new Particle(0.1, i * 0.1, 0, 0.1);
Particle p2 = new Particle(0.1, i * 0.1 + 0.00001 * i, 0, 0.0);
mech.addParticle(p1);
mech.addParticle(p2);
AxialSpring as = new AxialSpring("vertical " + i);
if (i % 2 == 0) {
as.setPoints(p1, p2);
} else {
as.setPoints(p2, p1);
}
mech.addAxialSpring(as);
}
}
use of artisynth.core.mechmodels.Particle in project artisynth_core by artisynth.
the class FemBeamMech method build.
public void build(String[] args) {
femPath = "models/mech/models/fem/";
modPath = "models/mech/";
int nn = 2;
myFemMod = FemFactory.createTetGrid(null, 0.6, 0.2, 0.2, nn * 3, nn * 1, nn * 1);
myFemMod.setName("fem");
myFemMod.setDensity(myDensity);
myFemMod.setBounds(new Point3d(-0.6, 0, 0), new Point3d(0.6, 0, 0));
myFemMod.setLinearMaterial(60000, 0.33, true);
myFemMod.setStiffnessDamping(0.002);
myFemMod.setImplicitIterations(100);
myFemMod.setImplicitPrecision(0.001);
myFemMod.setSurfaceRendering(SurfaceRender.Shaded);
Renderable elems = myFemMod.getElements();
RenderProps.setLineWidth(elems, 2);
RenderProps.setLineColor(elems, Color.BLUE);
Renderable nodes = myFemMod.getNodes();
RenderProps.setPointStyle(nodes, Renderer.PointStyle.SPHERE);
RenderProps.setPointRadius(nodes, 0.005);
RenderProps.setPointColor(nodes, Color.GREEN);
// fix the leftmost nodes
double EPS = 1e-9;
for (FemNode3d n : myFemMod.getNodes()) {
if (n.getPosition().x < -0.3 + EPS) {
myLeftNodes.add(n);
}
}
System.out.println("fixed nodes:");
for (FemNode3d n : myLeftNodes) {
n.setDynamic(false);
}
RenderProps.setFaceColor(myFemMod, new Color(0.4f, 0.4f, 1.0f));
myFemMod.setProfiling(true);
RigidBody anchorBox = new RigidBody("anchorBox");
PolygonalMesh mesh = MeshFactory.createBox(0.1, 0.3, 0.3);
anchorBox.setMesh(mesh, /* fileName= */
null);
RigidTransform3d X = new RigidTransform3d();
X.p.set(-0.35, 0, 0);
anchorBox.setPose(X);
anchorBox.setDynamic(false);
myMechMod = new MechModel("mech");
myMechMod.addModel(myFemMod);
myMechMod.addRigidBody(anchorBox);
System.out.println("models: " + myMechMod.findComponent("models"));
System.out.println("models/fem: " + myMechMod.findComponent("models/fem"));
myMechMod.setIntegrator(Integrator.BackwardEuler);
addModel(myMechMod);
myMechMod.setProfiling(true);
// add marker to lower right corner element
Point3d corner = new Point3d(0.3, -0.1, -0.1);
FemElement cornerElem = null;
for (FemElement e : myFemMod.getElements()) {
FemNode[] nodeList = e.getNodes();
for (int i = 0; i < nodeList.length; i++) {
if (nodeList[i].getPosition().epsilonEquals(corner, 1e-8)) {
cornerElem = e;
break;
}
}
}
if (cornerElem != null) {
FemMarker mkr = new FemMarker(0.3, -0.07, -0.03);
myFemMod.addMarker(mkr, cornerElem);
RenderProps.setPointStyle(mkr, Renderer.PointStyle.SPHERE);
RenderProps.setPointRadius(mkr, 0.01);
RenderProps.setPointColor(mkr, Color.WHITE);
Particle part = new Particle(1, 0.5, -0.07, -0.03);
RenderProps.setPointStyle(part, Renderer.PointStyle.SPHERE);
RenderProps.setPointRadius(part, 0.01);
part.setDynamic(false);
myMechMod.addParticle(part);
AxialSpring spr = new AxialSpring(1000, 0, 0);
myMechMod.attachAxialSpring(part, mkr, spr);
RenderProps.setLineStyle(spr, Renderer.LineStyle.SPINDLE);
RenderProps.setLineRadius(spr, 0.01);
RenderProps.setLineColor(spr, Color.GREEN);
}
int numWays = 0;
double res = 0.2;
for (int i = 0; i < numWays; i++) {
addWayPoint(new WayPoint((i + 1) * res, true));
}
addControlPanel(myMechMod, myFemMod);
}
Aggregations