package org.jzy3d.plot3d.primitives;

import java.util.ArrayList;
import java.util.List;

import org.jzy3d.maths.Coord3d;

import com.jogamp.opengl.GL;

public class ConcurrentLineStripSplitted extends ConcurrentLineStrip {
    // List idOn = new ArrayList();
    List idOff = new ArrayList();

    public ConcurrentLineStripSplitted() {
        super(100);
    }

    public ConcurrentLineStripSplitted(int n) {
        super(n);
    }

    public ConcurrentLineStripSplitted(List coords) {
        super(coords);
    }

    public ConcurrentLineStripSplitted(Point c1, Point c2) {
        super(c1, c2);
    }

    @Override
    public void drawLineGL2(GL gl) {
        gl.getGL2().glLineWidth(wfwidth);

        if (wfcolor == null) {
            drawLineSegmentsGL2ByPointColor(gl);
        } else {
            drawLineSegmentsGL2ByWireColor(gl);
        }
    }

    public void drawLineSegmentsGL2ByPointColor(GL gl) {
        int nPt = 0;
        int nOff = 0;
        int nextOff = idOff.size() != 0 ? idOff.get(nOff) : 0;

        begin(gl);

        while (nPt <= points.size() - 1) {
            // point
            Point p = points.get(nPt);
            pointColorSelf(gl, p);

            // consume off
            if (nextOff == nPt) {
                end(gl);
                begin(gl);

                nOff++;
                if (nOff <= idOff.size() - 1)
                    nextOff = idOff.get(nOff);
            }
            nPt++;
        }

        end(gl);
    }

    public void drawLineSegmentsGL2ByWireColor(GL gl) {
        int nPt = 0;
        int nOff = 0;
        int nextOff = -1;
        if (idOff.size() > 0)
            nextOff = idOff.get(nOff);

        begin(gl);

        while (nPt <= points.size() - 1) {
            // point
            Point p = points.get(nPt);
            pointColorWire(gl, p);

            // consume off
            if (nextOff == nPt) {
                end(gl);
                begin(gl);

                nOff++;
                if (nOff != -1 && nOff <= idOff.size() - 1)
                    nextOff = idOff.get(nOff);
            }
            nPt++;
        }

        end(gl);
    }

    public void pointColorWire(GL gl, Point p) {
        gl.getGL2().glColor4f(wfcolor.r, wfcolor.g, wfcolor.b, wfcolor.a);
        gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
    }

    public void pointColorSelf(GL gl, Point p) {
        gl.getGL2().glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a);
        gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
    }

    public void begin(GL gl) {
        gl.getGL2().glBegin(GL.GL_LINE_STRIP);
    }

    public void end(GL gl) {
        gl.getGL2().glEnd();
    }

    /* */

    public void addAndSplit(Point point) {
        synchronized (points) {
            idOff.add(points.size());
            points.add(point);

        }
        bbox.add(point);
    }

    @Override
    public void add(Point point) {
        synchronized (points) {
            points.add(point);
        }
        bbox.add(point);
    }
}

 

Ads help maintain this website.