package org.jzy3d.plot3d.rendering.scene;

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

import org.jzy3d.plot3d.primitives.AbstractComposite;
import org.jzy3d.plot3d.primitives.AbstractDrawable;

public class Decomposition {
    public static ArrayList getDecomposition(List drawables) {
        ArrayList monotypes = new ArrayList();

        for (AbstractDrawable c : drawables) {
            if (c != null && c.isDisplayed()) {
                if (c instanceof AbstractComposite)
                    monotypes.addAll(getDecomposition((AbstractComposite) c));
                else if (c instanceof AbstractDrawable)
                    monotypes.add(c);
            }
        }
        return monotypes;
    }

    /** Recursively expand all monotype Drawables from the given Composite. */
    public static ArrayList getDecomposition(AbstractComposite input) {
        ArrayList selection = new ArrayList();

        // composite internally make use of synchronisation on its list of child, so we do so
        synchronized (input.getDrawables()) {
            for (AbstractDrawable c : input.getDrawables()) {
                if (c != null && c.isDisplayed()) {
                    if (c instanceof AbstractComposite)
                        selection.addAll(getDecomposition((AbstractComposite) c));
                    else if (c instanceof AbstractDrawable)
                        selection.add(c);
                }
            }
        }
        return selection;
    }
}

 

Ads help maintain this website.