Search in sources :

Example 1 with Particle

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;
    }
}
Also used : Particle(artisynth.core.mechmodels.Particle) Point3d(maspack.matrix.Point3d) AxialSpring(artisynth.core.mechmodels.AxialSpring)

Example 2 with Particle

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);
    }
}
Also used : Particle(artisynth.core.mechmodels.Particle) Point3d(maspack.matrix.Point3d) AxialSpring(artisynth.core.mechmodels.AxialSpring)

Example 3 with Particle

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;
    }
}
Also used : Particle(artisynth.core.mechmodels.Particle) Point3d(maspack.matrix.Point3d) AxialSpring(artisynth.core.mechmodels.AxialSpring)

Example 4 with Particle

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);
    }
}
Also used : Particle(artisynth.core.mechmodels.Particle) AxialSpring(artisynth.core.mechmodels.AxialSpring)

Example 5 with Particle

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);
}
Also used : RigidTransform3d(maspack.matrix.RigidTransform3d) FemNode(artisynth.core.femmodels.FemNode) Color(java.awt.Color) PolygonalMesh(maspack.geometry.PolygonalMesh) FemMarker(artisynth.core.femmodels.FemMarker) WayPoint(artisynth.core.probes.WayPoint) AxialSpring(artisynth.core.mechmodels.AxialSpring) Particle(artisynth.core.mechmodels.Particle) MechModel(artisynth.core.mechmodels.MechModel) Renderable(maspack.render.Renderable) Point3d(maspack.matrix.Point3d) FemNode3d(artisynth.core.femmodels.FemNode3d) WayPoint(artisynth.core.probes.WayPoint) RigidBody(artisynth.core.mechmodels.RigidBody) FemElement(artisynth.core.femmodels.FemElement)

Aggregations

Particle (artisynth.core.mechmodels.Particle)21 Point3d (maspack.matrix.Point3d)12 AxialSpring (artisynth.core.mechmodels.AxialSpring)10 MechModel (artisynth.core.mechmodels.MechModel)8 RigidBody (artisynth.core.mechmodels.RigidBody)5 FrameMarker (artisynth.core.mechmodels.FrameMarker)4 Muscle (artisynth.core.mechmodels.Muscle)4 Point (artisynth.core.mechmodels.Point)4 SphericalJoint (artisynth.core.mechmodels.SphericalJoint)4 RigidTransform3d (maspack.matrix.RigidTransform3d)4 MultiPointSpring (artisynth.core.mechmodels.MultiPointSpring)3 RenderProps (maspack.render.RenderProps)3 FemMarker (artisynth.core.femmodels.FemMarker)2 LinearAxialMuscle (artisynth.core.materials.LinearAxialMuscle)2 SimpleAxialMuscle (artisynth.core.materials.SimpleAxialMuscle)2 PolygonalMesh (maspack.geometry.PolygonalMesh)2 FemElement (artisynth.core.femmodels.FemElement)1 FemNode (artisynth.core.femmodels.FemNode)1 FemNode3d (artisynth.core.femmodels.FemNode3d)1 ConnectorForceRenderer (artisynth.core.inverse.ConnectorForceRenderer)1