Search in sources :

Example 1 with PlanarConnector

use of artisynth.core.mechmodels.PlanarConnector in project artisynth_core by artisynth.

the class ForceTarget method prerender.

@Override
public void prerender(RenderList list) {
    super.prerender(list);
    if (myConnector instanceof PlanarConnector) {
        RigidTransform3d TDW = myConnector.getCurrentTDW();
        startvec = TDW.p;
        endvec.transform(TDW, Vector3d.Z_UNIT);
        endvec.scale(arrowSize / endvec.norm());
        endvec.scale(myTargetLambda.get(0));
        endvec.add(startvec);
        set(start, startvec);
        set(end, endvec);
    } else if (myConnector instanceof SphericalJointBase) {
        startvec = myConnector.getCurrentTCW().p;
        endvec.x = myTargetLambda.get(0) * arrowSize;
        endvec.y = myTargetLambda.get(1) * arrowSize;
        endvec.z = myTargetLambda.get(2) * arrowSize;
        endvec.add(startvec);
        set(start, startvec);
        set(end, endvec);
    }
}
Also used : RigidTransform3d(maspack.matrix.RigidTransform3d) SphericalJointBase(artisynth.core.mechmodels.SphericalJointBase) PlanarConnector(artisynth.core.mechmodels.PlanarConnector)

Example 2 with PlanarConnector

use of artisynth.core.mechmodels.PlanarConnector 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);
    }
}
Also used : Particle(artisynth.core.mechmodels.Particle) MechModel(artisynth.core.mechmodels.MechModel) RigidTransform3d(maspack.matrix.RigidTransform3d) ConnectorForceRenderer(artisynth.core.inverse.ConnectorForceRenderer) FrameMarker(artisynth.core.mechmodels.FrameMarker) Vector3d(maspack.matrix.Vector3d) PlanarConnector(artisynth.core.mechmodels.PlanarConnector) RenderProps(maspack.render.RenderProps) SimpleAxialMuscle(artisynth.core.materials.SimpleAxialMuscle) Muscle(artisynth.core.mechmodels.Muscle) SimpleAxialMuscle(artisynth.core.materials.SimpleAxialMuscle)

Example 3 with PlanarConnector

use of artisynth.core.mechmodels.PlanarConnector in project artisynth_core by artisynth.

the class MechModelDemo method build.

public void build(String[] args) {
    myMech = new MechModel("mechMod");
    // mechMod.setProfiling (true);
    myMech.setGravity(0, 0, -50);
    // myMech.setRigidBodyDamper (new FrameDamper (1.0, 4.0));
    myMech.setFrameDamping(1.0);
    myMech.setRotaryDamping(4.0);
    myMech.setIntegrator(MechSystemSolver.Integrator.SymplecticEuler);
    RigidTransform3d XMB = new RigidTransform3d();
    RigidTransform3d XLW = new RigidTransform3d();
    RigidTransform3d TCA = new RigidTransform3d();
    RigidTransform3d TCB = new RigidTransform3d();
    RigidTransform3d XAB = new RigidTransform3d();
    PolygonalMesh mesh;
    // number of slices for approximating a circle
    int nslices = 16;
    // // set view so tha points upwards
    // X.R.setAxisAngle (1, 0, 0, -Math.PI/2);
    // viewer.setTransform (X);
    double lenx0 = 15;
    double leny0 = 15;
    double lenz0 = 1.5;
    RigidBody base = new RigidBody("base");
    base.setInertia(SpatialInertia.createBoxInertia(10, lenx0, leny0, lenz0));
    mesh = MeshFactory.createBox(lenx0, leny0, lenz0);
    // XMB.setIdentity();
    // XMB.R.setAxisAngle (1, 1, 1, 2*Math.PI/3);
    // mesh.transform (XMB);
    // mesh.setRenderMaterial (Material.createSpecial (Material.GRAY));
    base.setMesh(mesh, /* fileName= */
    null);
    XLW.setIdentity();
    XLW.p.set(0, 0, 22);
    base.setPose(XLW);
    base.setDynamic(false);
    myMech.addRigidBody(base);
    RenderProps props;
    FrameMarker mk0 = new FrameMarker();
    props = mk0.createRenderProps();
    // props.setColor (Color.GREEN);
    props.setPointRadius(0.5);
    props.setPointStyle(Renderer.PointStyle.SPHERE);
    mk0.setRenderProps(props);
    myMech.addFrameMarker(mk0, base, new Point3d(lenx0 / 2, leny0 / 2, 0));
    FrameMarker mk1 = new FrameMarker();
    mk1.setRenderProps(props);
    myMech.addFrameMarker(mk1, base, new Point3d(-lenx0 / 2, -leny0 / 2, 0));
    FrameMarker mk2 = new FrameMarker();
    mk2.setRenderProps(props);
    FrameMarker mk3 = new FrameMarker();
    mk3.setRenderProps(props);
    double ks = 10;
    double ds = 10;
    AxialSpring spr0 = new AxialSpring(50, 10, 0);
    AxialSpring spr1 = new AxialSpring(50, 10, 0);
    props = spr0.createRenderProps();
    props.setLineStyle(Renderer.LineStyle.CYLINDER);
    props.setLineRadius(0.2);
    props.setLineColor(Color.RED);
    spr0.setRenderProps(props);
    spr1.setRenderProps(props);
    // myMech.addRigidBody (base);
    // first link
    double lenx1 = 10;
    double leny1 = 2;
    double lenz1 = 3;
    RigidBody link1 = new RigidBody("link1");
    link1.setInertia(SpatialInertia.createBoxInertia(10, lenx1, leny1, lenz1));
    mesh = MeshFactory.createRoundedBox(lenx1, leny1, lenz1, nslices / 2);
    XMB.setIdentity();
    XMB.R.setAxisAngle(1, 1, 1, 2 * Math.PI / 3);
    mesh.transform(XMB);
    // mesh.setRenderMaterial (Material.createSpecial (Material.GRAY));
    link1.setMesh(mesh, /* fileName= */
    null);
    XLW.R.setAxisAngle(1, 0, 0, Math.PI / 2);
    // XLW.R.mulAxisAngle (0, 1, 0, Math.PI/4);
    XLW.p.set(0, 0, 1.5 * lenx1);
    link1.setPose(XLW);
    myMech.addRigidBody(link1);
    myMech.addFrameMarker(mk2, link1, new Point3d(-lenx1 / 2, 0, -lenz1 / 2));
    myMech.addFrameMarker(mk3, link1, new Point3d(-lenx1 / 2, 0, lenz1 / 2));
    // // joint 1
    // if (usePlanarJoint)
    // {
    // TCA.setIdentity();
    // TCA.p.set (-lenx1/2, 0, 0);
    // TCA.R.setAxisAngle (1, 0, 0, -Math.PI/2);
    // TCB.p.set (0, 0, lenx1);
    // // TCB.R.setAxisAngle (1, 0, 0, -Math.PI/2);
    // PlanarConnector planar =
    // new PlanarConnector (link1, TCA.p, TCB);
    // planar.setName ("plane1");
    // planar.setPlaneSize (20);
    // RenderProps.setColor (planar, Color.BLUE);
    // joint1 = planar;
    // }
    // else
    // {
    // TCA.setIdentity();
    // TCA.p.set (-lenx1/2, 0, 0);
    // // TCA.R.mulAxisAngle (0, 1, 0, Math.PI/4);
    // TCB.set (link1.myState.XFrameToWorld);
    // TCB.mul (TCA);
    // RevoluteJoint rjoint = new RevoluteJoint (link1, TCA, TCB);
    // rjoint.setName ("joint1");
    // rjoint.setAxisLength (4);
    // RenderProps.setLineRadius(rjoint, 0.2);
    // joint1 = rjoint;
    // // SphericalJoint sjoint = new SphericalJoint (
    // // link1, TCA, TCB);
    // // sjoint.setName ("joint1");
    // // sjoint.setAxisLength (5);
    // // joint1 = sjoint;
    // }
    // second link
    double lenx2 = 10;
    double leny2 = 2;
    double lenz2 = 2;
    RigidBody link2 = new RigidBody("link2");
    if (// useSphericalJoint)
    false) {
        mesh = MeshFactory.createRoundedCylinder(leny2 / 2, lenx2, nslices, /*nsegs=*/
        1, /*flatBottom=*/
        false);
        link2.setInertia(SpatialInertia.createBoxInertia(10, leny2, leny2, lenx2));
        XLW.R.setAxisAngle(1, 0, 0, Math.PI / 2);
        XLW.p.set(lenx1 / 2, lenx2 / 2, lenx1);
        link2.setPose(XLW);
    }
    mesh = MeshFactory.createRoundedCylinder(leny2 / 2, lenx2, nslices, /*nsegs=*/
    1, /*flatBottom=*/
    false);
    mesh.transform(XMB);
    link2.setInertia(SpatialInertia.createBoxInertia(10, lenx2, leny2, lenz2));
    XLW.R.setAxisAngle(1, 0, 0, Math.PI / 2);
    XLW.p.set(lenx1 / 2 + lenx2 / 2, 0, 1.5 * lenx1);
    if (useSphericalJoint) {
        // Math.PI/4;
        double ang = 0;
        XLW.R.mulAxisAngle(0, 1, 0, ang);
        XLW.p.y += Math.sin(ang) * lenx2 / 2;
        XLW.p.x -= (1 - Math.cos(ang)) * lenx2 / 2;
    }
    link2.setPose(XLW);
    link2.setMesh(mesh, /* fileName= */
    null);
    myMech.addRigidBody(link2);
    BodyConnector joint2 = null;
    // joint 2
    if (useSphericalJoint) {
        TCA.setIdentity();
        TCA.p.set(-lenx2 / 2, 0, 0);
        XAB.mulInverseLeft(link1.getPose(), link2.getPose());
        TCB.mul(XAB, TCA);
        SphericalJoint sjoint = new SphericalJoint(link2, TCA, link1, TCB);
        // RevoluteJoint joint2 = new RevoluteJoint (link2, TCA, TCB);
        sjoint.setName("joint2");
        // RenderProps.setLineRadius(sjoint, 0.2);
        sjoint.setAxisLength(4);
        joint2 = sjoint;
    } else {
        TCA.setIdentity();
        TCA.p.set(-lenx2 / 2, 0, 0);
        // TCA.R.mulAxisAngle (1, 0, 0, -Math.toRadians(90));
        XAB.mulInverseLeft(link1.getPose(), link2.getPose());
        TCB.mul(XAB, TCA);
        RevoluteJoint rjoint = new RevoluteJoint(link2, TCA, link1, TCB);
        // TCB.mul (link2.getPose(), TCA);
        // RevoluteJoint rjoint =
        // new RevoluteJoint (link2, TCA, TCB);
        // RigidTransform3d X = new RigidTransform3d();
        // X.R.setAxisAngle (1, 0, 0, -Math.toRadians(90));
        // X.mul (TCB, X);
        // X.mulInverseRight (X, TCB);
        // rjoint.transformGeometry (X);
        // rjoint.printData();
        rjoint.setName("joint2");
        rjoint.setAxisLength(4);
        RenderProps.setLineRadius(rjoint, 0.2);
        // RigidTransform3d X = new RigidTransform3d();
        // RigidTransform3d TDW = rjoint.getXDW();
        // System.out.println ("getXDW=\n" + TDW.toString("%8.3f"));
        // X.R.setAxisAngle (1, 0, 0, Math.toRadians(80));
        // X.mulInverseRight (X, TDW);
        // X.mul (TDW, X);
        // rjoint.transformGeometry (X, rjoint);
        joint2 = rjoint;
    }
    // myMech.addBodyConnector (joint1);
    if (joint2 != null) {
        myMech.addBodyConnector(joint2);
    }
    myMech.attachAxialSpring(mk0, mk2, spr0);
    myMech.attachAxialSpring(mk1, mk3, spr1);
    if (usePlanarContacts) {
        TCA.setIdentity();
        TCA.p.set(lenx2 / 2 + leny2 / 2, 0, 0);
        TCB.setIdentity();
        // TCB.p.set (0, 0, -lenx2/2);
        // TCB.p.set (0, 0, lenx2/2);
        TCB.R.setIdentity();
        TCB.R.setAxisAngle(0, 0, 1, Math.PI / 2);
        TCB.R.mulAxisAngle(1, 0, 0, Math.toRadians(20));
        PlanarConnector contact1 = new PlanarConnector(link2, TCA.p, TCB);
        contact1.setUnilateral(true);
        contact1.setName("contact1");
        contact1.setPlaneSize(20);
        RenderProps.setFaceColor(contact1, new Color(0.5f, 0.5f, 1f));
        RenderProps.setAlpha(contact1, 0.5);
        myMech.addBodyConnector(contact1);
        TCB.R.setIdentity();
        TCB.R.setAxisAngle(0, 0, 1, Math.PI / 2);
        TCB.R.mulAxisAngle(1, 0, 0, -Math.toRadians(20));
        PlanarConnector contact2 = new PlanarConnector(link2, TCA.p, TCB);
        contact2.setUnilateral(true);
        contact2.setName("contact2");
        contact2.setPlaneSize(20);
        RenderProps.setFaceColor(contact2, new Color(0.5f, 0.5f, 1f));
        RenderProps.setAlpha(contact2, 0.5);
        myMech.addBodyConnector(contact2);
    }
    myMech.setBounds(new Point3d(0, 0, -10), new Point3d(0, 0, 10));
    addModel(myMech);
    addControlPanel(myMech);
// RigidTransform3d X = new RigidTransform3d (link1.getPose());
// X.R.mulRpy (Math.toRadians(-10), 0, 0);
// link1.setPose (X);
// myMech.projectRigidBodyPositionConstraints();
// myMech.setProfiling (true);
// myMech.setIntegrator (Integrator.ForwardEuler);
// addBreakPoint (0.57);
}
Also used : SphericalJoint(artisynth.core.mechmodels.SphericalJoint) Color(java.awt.Color) RevoluteJoint(artisynth.core.mechmodels.RevoluteJoint) BodyConnector(artisynth.core.mechmodels.BodyConnector) RevoluteJoint(artisynth.core.mechmodels.RevoluteJoint) WayPoint(artisynth.core.probes.WayPoint) SphericalJoint(artisynth.core.mechmodels.SphericalJoint) AxialSpring(artisynth.core.mechmodels.AxialSpring) MechModel(artisynth.core.mechmodels.MechModel) FrameMarker(artisynth.core.mechmodels.FrameMarker) PlanarConnector(artisynth.core.mechmodels.PlanarConnector) RigidBody(artisynth.core.mechmodels.RigidBody)

Example 4 with PlanarConnector

use of artisynth.core.mechmodels.PlanarConnector in project artisynth_core by artisynth.

the class FrameMarkerEditor method applyAction.

public void applyAction(String actionCommand, LinkedList<ModelComponent> selection, Rectangle popupBounds) {
    if (containsSingleSelection(selection, FrameMarker.class)) {
        if (actionCommand == "Add PlanarConnector") {
            FrameMarker mkr = (FrameMarker) selection.get(0);
            RigidTransform3d XPW = new RigidTransform3d();
            XPW.p.set(mkr.getPosition());
            if (mkr.getFrame() instanceof RigidBody && mkr.getGrandParent() instanceof MechModel) {
                PlanarConnector pc = new PlanarConnector();
                pc.set((RigidBody) mkr.getFrame(), mkr.getLocation(), Vector3d.Z_UNIT);
                pc.setPlaneSize(getDefaultPlaneSize());
                ((MechModel) mkr.getGrandParent()).addBodyConnector(pc);
            } else {
                System.out.println("Unable to create PlanarConnector from selected FrameMarker");
            }
        }
    }
}
Also used : RigidTransform3d(maspack.matrix.RigidTransform3d) MechModel(artisynth.core.mechmodels.MechModel) FrameMarker(artisynth.core.mechmodels.FrameMarker) PlanarConnector(artisynth.core.mechmodels.PlanarConnector) RigidBody(artisynth.core.mechmodels.RigidBody)

Example 5 with PlanarConnector

use of artisynth.core.mechmodels.PlanarConnector in project artisynth_core by artisynth.

the class ForceTarget method addForceJacobian.

public int addForceJacobian(SparseBlockMatrix J, int bi, int solve_index) {
    MatrixBlock blk = null;
    if (myConnector instanceof PlanarConnector) {
        blk = new Matrix1x1Block();
        blk.set(0, 0, 1d);
        J.addBlock(bi, solve_index, blk);
    } else if (myConnector instanceof SphericalJointBase) {
        blk = new Matrix3x3DiagBlock(1d, 1d, 1d);
        J.addBlock(bi, solve_index, blk);
    } else {
        System.err.println("ForceTarget.addForceJacobian: unsupported connector type: " + myConnector.getClass());
    }
    return bi++;
}
Also used : Matrix3x3DiagBlock(maspack.matrix.Matrix3x3DiagBlock) MatrixBlock(maspack.matrix.MatrixBlock) SphericalJointBase(artisynth.core.mechmodels.SphericalJointBase) PlanarConnector(artisynth.core.mechmodels.PlanarConnector) Matrix1x1Block(maspack.matrix.Matrix1x1Block)

Aggregations

PlanarConnector (artisynth.core.mechmodels.PlanarConnector)6 FrameMarker (artisynth.core.mechmodels.FrameMarker)3 MechModel (artisynth.core.mechmodels.MechModel)3 RigidBody (artisynth.core.mechmodels.RigidBody)3 RigidTransform3d (maspack.matrix.RigidTransform3d)3 SphericalJoint (artisynth.core.mechmodels.SphericalJoint)2 SphericalJointBase (artisynth.core.mechmodels.SphericalJointBase)2 ConnectorForceRenderer (artisynth.core.inverse.ConnectorForceRenderer)1 SimpleAxialMuscle (artisynth.core.materials.SimpleAxialMuscle)1 AxialSpring (artisynth.core.mechmodels.AxialSpring)1 BodyConnector (artisynth.core.mechmodels.BodyConnector)1 Muscle (artisynth.core.mechmodels.Muscle)1 Particle (artisynth.core.mechmodels.Particle)1 RevoluteJoint (artisynth.core.mechmodels.RevoluteJoint)1 WayPoint (artisynth.core.probes.WayPoint)1 Color (java.awt.Color)1 Matrix1x1Block (maspack.matrix.Matrix1x1Block)1 Matrix3x3DiagBlock (maspack.matrix.Matrix3x3DiagBlock)1 MatrixBlock (maspack.matrix.MatrixBlock)1 Vector3d (maspack.matrix.Vector3d)1