class NodeModeler extends Modeler {

    public int SHAPE_DIAMOND;
    public int SHAPE_DISK16;
    public int SHAPE_DISK32;
    public int SHAPE_DISK64;
    public int BORDER16;
    public int BORDER32;
    public int BORDER64;

    public NodeModeler(CompatibilityEngine engine) {
        super(engine);
    }

    public NodeModel initModel(Node n) {
        NodeDiskModel obj = new NodeDiskModel((Node) n);
        obj.modelType = SHAPE_DISK64;
        obj.modelBorderType = BORDER64;

        chooseModel(obj);
        return obj;
    }

    @Override
    public void chooseModel(Model object3d) {<FILL_FUNCTION_BODY>}

    @Override
    public int initDisplayLists(GL2 gl, GLU glu, GLUquadric quadric, int ptr) {
        // Diamond display list
        SHAPE_DIAMOND = ptr + 1;
        gl.glNewList(SHAPE_DIAMOND, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0, 0.5, 4, 1);
        gl.glEndList();
        //End

        //Disk16
        SHAPE_DISK16 = SHAPE_DIAMOND + 1;
        gl.glNewList(SHAPE_DISK16, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0, 0.5, 6, 1);
        gl.glEndList();
        //Fin

        //Disk32
        SHAPE_DISK32 = SHAPE_DISK16 + 1;
        gl.glNewList(SHAPE_DISK32, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0, 0.5, 12, 2);
        gl.glEndList();

        //Disk64
        SHAPE_DISK64 = SHAPE_DISK32 + 1;
        gl.glNewList(SHAPE_DISK64, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0, 0.5, 32, 4);
        gl.glEndList();

        //Border16
        BORDER16 = SHAPE_DISK64 + 1;
        gl.glNewList(BORDER16, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0.42, 0.50, 24, 2);
        gl.glEndList();

        //Border32
        BORDER32 = BORDER16 + 1;
        gl.glNewList(BORDER32, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0.42, 0.50, 48, 2);
        gl.glEndList();

        //Border32
        BORDER64 = BORDER32 + 1;
        gl.glNewList(BORDER64, GL2.GL_COMPILE);
        glu.gluDisk(quadric, 0.42, 0.50, 96, 4);
        gl.glEndList();

        return BORDER64;
    }

    @Override
    public void beforeDisplay(GL2 gl, GLU glu) {
    }

    @Override
    public void afterDisplay(GL2 gl, GLU glu) {
    }

    protected float cameraDistance(NodeModel object) {
        float[] cameraLocation = drawable.getCameraLocation();
        double distance = Math.sqrt(Math.pow((double) object.getNode().x() - cameraLocation[0], 2d)
            + Math.pow((double) object.getNode().y() - cameraLocation[1], 2d)
            + Math.pow((double) object.getNode().z() - cameraLocation[2], 2d));
        object.setCameraDistance((float) distance);

        return (float) distance;
    }

    public boolean isLod() {
        return true;
    }

    public boolean isSelectable() {
        return true;
    }

    public boolean isClickable() {
        return true;
    }

    public boolean isOnlyAutoSelect() {
        return false;
    }
}

        NodeDiskModel obj = (NodeDiskModel) object3d;
        if (config.isDisableLOD()) {
            obj.modelType = SHAPE_DISK64;
            obj.modelBorderType = BORDER64;
            return;
        }

        float distance = cameraDistance(obj) / (obj.getNode().size() * drawable.getGlobalScale());
        if (distance > 600) {
            obj.modelType = SHAPE_DIAMOND;
            obj.modelBorderType = -1;
        } else if (distance > 50) {
            obj.modelType = SHAPE_DISK16;
            obj.modelBorderType = BORDER16;
        } else {
            obj.modelType = SHAPE_DISK32;
            obj.modelBorderType = BORDER32;
        }
    
<methods>public void <init>(org.gephi.visualization.opengl.CompatibilityEngine) ,public abstract void afterDisplay(GL2, GLU) ,public abstract void beforeDisplay(GL2, GLU) ,public abstract void chooseModel(org.gephi.visualization.model.Model) ,public abstract int initDisplayLists(GL2, GLU, GLUquadric, int) ,public boolean isEnabled() ,public void setEnabled(boolean) <variables>protected final non-sealed org.gephi.visualization.apiimpl.VizConfig config,protected final non-sealed org.gephi.visualization.VizController controller,protected final non-sealed org.gephi.visualization.apiimpl.GraphDrawable drawable,protected boolean enabled,protected final non-sealed org.gephi.visualization.opengl.CompatibilityEngine engine