class NodeDiskModel extends NodeModel {

    public int modelType;
    public int modelBorderType;

    public NodeDiskModel(Node node) {
        super(node);
    }

    @Override
    public void display(GL2 gl, GLU glu, VizModel vizModel) {<FILL_FUNCTION_BODY>}

    @Override
    public boolean selectionTest(Vecf distanceFromMouse, float selectionSize) {
        return distanceFromMouse.get(2) - selectionSize < node.size();
    }

    @Override
    public float getCollisionDistance(double angle) {
        return node.size();
    }
}

        boolean selec = selected;
        boolean neighbor = false;
        highlight = false;
        if (vizModel.isAutoSelectNeighbor() && mark && !selec) {
            selec = true;
            highlight = true;
            neighbor = true;
        }
        mark = false;
        gl.glPushMatrix();
        float size = node.size() * 2;
        gl.glTranslatef(node.x(), node.y(), node.z());
        gl.glScalef(size, size, 1f);

        if (!selec) {
            if (vizModel.getConfig().isLightenNonSelected()) {
                float[] lightColor = vizModel.getBackgroundColorComponents();
                float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor();
                float r = node.r();
                float g = node.g();
                float b = node.b();
                gl.glColor3f(r + (lightColor[0] - r) * lightColorFactor, g + (lightColor[1] - g) * lightColorFactor,
                    b + (lightColor[2] - b) * lightColorFactor);
                gl.glCallList(modelType);
                if (modelBorderType != 0) {
                    float rborder = 0.498f * r;
                    float gborder = 0.498f * g;
                    float bborder = 0.498f * b;
                    gl.glColor3f(rborder + (lightColor[0] - rborder) * lightColorFactor,
                        gborder + (lightColor[1] - gborder) * lightColorFactor,
                        bborder + (lightColor[2] - bborder) * lightColorFactor);
                    gl.glCallList(modelBorderType);
                }
            } else {
                float r = node.r();
                float g = node.g();
                float b = node.b();
                gl.glColor3f(r, g, b);
                gl.glCallList(modelType);
                if (modelBorderType != 0) {
                    float rborder = 0.498f * r;
                    float gborder = 0.498f * g;
                    float bborder = 0.498f * b;
                    gl.glColor3f(rborder, gborder, bborder);
                    gl.glCallList(modelBorderType);
                }
            }
        } else {
            float r;
            float g;
            float b;
            float rborder;
            float gborder;
            float bborder;
            if (vizModel.isUniColorSelected()) {
                if (neighbor) {
                    r = vizModel.getConfig().getUniColorSelectedNeigborColor()[0];
                    g = vizModel.getConfig().getUniColorSelectedNeigborColor()[1];
                    b = vizModel.getConfig().getUniColorSelectedNeigborColor()[2];
                } else {
                    r = vizModel.getConfig().getUniColorSelectedColor()[0];
                    g = vizModel.getConfig().getUniColorSelectedColor()[1];
                    b = vizModel.getConfig().getUniColorSelectedColor()[2];
                }
                rborder = 0.498f * r;
                gborder = 0.498f * g;
                bborder = 0.498f * b;
            } else {
                rborder = node.r();
                gborder = node.g();
                bborder = node.b();
                r = Math.min(1, 0.5f * rborder + 0.5f);
                g = Math.min(1, 0.5f * gborder + 0.5f);
                b = Math.min(1, 0.5f * bborder + 0.5f);
            }
            gl.glColor3f(r, g, b);
            gl.glCallList(modelType);
            if (modelBorderType != 0) {
                gl.glColor3f(rborder, gborder, bborder);
                gl.glCallList(modelBorderType);
            }
        }

        gl.glPopMatrix();
    
<methods>public void <init>(Node) ,public void addEdge(org.gephi.visualization.model.edge.EdgeModel) ,public float getCameraDistance() ,public abstract float getCollisionDistance(double) ,public float[] getDragDistanceFromMouse() ,public org.gephi.visualization.model.edge.EdgeModel[] getEdges() ,public ElementProperties getElementProperties() ,public Node getNode() ,public org.gephi.visualization.octree.Octant getOctant() ,public int getOctantId() ,public java.lang.String getText() ,public float getTextAlpha() ,public float getTextB() ,public float getTextG() ,public float getTextHeight() ,public float getTextR() ,public float getTextSize() ,public float getTextWidth() ,public float getX() ,public float getY() ,public boolean hasCustomTextColor() ,public boolean isHighlight() ,public boolean isInOctreeLeaf(org.gephi.visualization.octree.Octant) ,public boolean isSelected() ,public boolean isTextVisible() ,public int octreePosition(float, float, float, float) ,public void removeEdge(org.gephi.visualization.model.edge.EdgeModel) ,public abstract boolean selectionTest(org.gephi.lib.gleem.linalg.Vecf, float) ,public void setCameraDistance(float) ,public void setOctant(org.gephi.visualization.octree.Octant) ,public void setOctantId(int) ,public void setSelected(boolean) ,public void setText(java.lang.String) <variables>protected static final long ONEOVERPHI,protected float cameraDistance,protected float[] dragDistance,protected int edgeLength,protected org.gephi.visualization.model.edge.EdgeModel[] edges,protected boolean highlight,public boolean mark,public int markTime,protected final non-sealed Node node,protected org.gephi.visualization.octree.Octant octant,protected int octantId,protected boolean selected