protected final void updateSkeletonGeoms(Joint joint) {
        Geometry[] geoms = jointToGeoms.get(joint);
        if (geoms != null) {
            Geometry jGeom = geoms[0];
            jGeom.setLocalTranslation(joint.getModelTransform().getTranslation());
            Geometry bGeom = geoms[1];
            if (bGeom != null) {
                Vector3f start = bGeom.getUserData("start");
                Vector3f[] ends = bGeom.getUserData("end");
                start.set(joint.getModelTransform().getTranslation());
                if (ends != null) {
                    for (int i = 0; i < joint.getChildren().size(); i++) {
                        ends[i].set(joint.getChildren().get(i).getModelTransform().getTranslation());
                    }
                    updateBoneMesh(bGeom, start, ends);
                    Geometry bGeomO = geoms[2];
                    if (bGeomO != null) {
                        updateBoneMesh(bGeomO, start, ends);
                    }
                    bGeom.setUserData("start", getWorldTransform().transformVector(start, start));
                    for (int i = 0; i < ends.length; i++) {
                        getWorldTransform().transformVector(ends[i], ends[i]);
                    }
                    bGeom.setUserData("end", ends);

                }
            }
        }

        for (Joint child : joint.getChildren()) {
            updateSkeletonGeoms(child);
        }
    }
Creates a wire with bone lengths data. If the data is supplied then the
wires will show each full bone (from head to tail).

@param armature the armature that will be shown
@param joints the Node to visualize joints
@param wires the Node to visualize wires
@param outlines the Node to visualize outlines
@param deformingJoints a list of joints
jme3-core/src/main/java/com/jme3/scene/debug/custom/ArmatureNode.java