Search in sources :

Example 31 with Layer

use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.

the class FlameMorphService method morphFlames_morph.

private static Flame morphFlames_morph(Prefs pPrefs, Flame pFlame1, Flame pFlame2, int pFrame, int pFrames) {
    if (pFrame < 1 || pFrames < 2)
        return pFlame1;
    double fScl = (double) (pFrame - 1) / (pFrames - 1);
    if (fScl <= MathLib.EPSILON) {
        return pFlame1;
    } else if (fScl >= 1.0 - MathLib.EPSILON) {
        return pFlame2;
    }
    Flame res = pFlame1.makeCopy();
    res.getLayers().clear();
    int layerSize1 = pFlame1.getLayers().size();
    int layerSize2 = pFlame2.getLayers().size();
    int maxLayerSize = layerSize1 > layerSize2 ? layerSize1 : layerSize2;
    for (int lIdx = 0; lIdx < maxLayerSize; lIdx++) {
        Layer layer = new Layer();
        res.getLayers().add(layer);
        // Morph layers
        if (lIdx < layerSize1 && lIdx < layerSize2) {
            Layer layer1 = pFlame1.getLayers().get(lIdx);
            Layer layer2 = pFlame2.getLayers().get(lIdx);
            layer.assign(layer1);
            layer.getXForms().clear();
            layer.getFinalXForms().clear();
            layer.setWeight(morphValue(layer1.getWeight(), layer2.getWeight(), fScl));
            // morph XForms
            {
                int size1 = layer1.getXForms().size();
                int size2 = layer2.getXForms().size();
                int maxSize = size1 > size2 ? size1 : size2;
                for (int i = 0; i < maxSize; i++) {
                    XForm xForm1 = i < size1 ? layer1.getXForms().get(i) : null;
                    if (xForm1 == null) {
                        xForm1 = new XForm();
                        xForm1.addVariation(0.0, VariationFuncList.getVariationFuncInstance("linear3D", true));
                        xForm1.setWeight(0.0);
                    }
                    XForm xForm2 = i < size2 ? layer2.getXForms().get(i) : null;
                    if (xForm2 == null) {
                        xForm2 = new XForm();
                        xForm2.addVariation(0.0, VariationFuncList.getVariationFuncInstance("linear3D", true));
                        xForm2.setWeight(0.0);
                    }
                    XForm morphedXForm = morphXForms(pPrefs, xForm1, xForm2, fScl, pFrame, pFrames);
                    layer.getXForms().add(morphedXForm);
                }
            }
            // morph final XForms
            {
                int size1 = layer1.getFinalXForms().size();
                int size2 = layer2.getFinalXForms().size();
                int maxSize = size1 > size2 ? size1 : size2;
                for (int i = 0; i < maxSize; i++) {
                    XForm xForm1 = i < size1 ? layer1.getFinalXForms().get(i) : null;
                    if (xForm1 == null) {
                        xForm1 = new XForm();
                        xForm1.addVariation(0.0, VariationFuncList.getVariationFuncInstance("linear3D", true));
                        xForm1.setWeight(0.0);
                    }
                    XForm xForm2 = i < size2 ? layer2.getFinalXForms().get(i) : null;
                    if (xForm2 == null) {
                        xForm2 = new XForm();
                        xForm2.addVariation(0.0, VariationFuncList.getVariationFuncInstance("linear3D", true));
                        xForm2.setWeight(0.0);
                    }
                    XForm morphedXForm = morphXForms(pPrefs, xForm1, xForm2, fScl, pFrame, pFrames);
                    layer.getFinalXForms().add(morphedXForm);
                }
            }
            // morph colors
            RGBPalette palette1 = layer1.getPalette();
            RGBPalette palette2 = layer2.getPalette();
            for (int i = 0; i < RGBPalette.PALETTE_SIZE; i++) {
                RGBColor color1 = palette1.getColor(i);
                RGBColor color2 = palette2.getColor(i);
                int red = Tools.roundColor(color1.getRed() + (color2.getRed() - color1.getRed()) * fScl);
                int green = Tools.roundColor(color1.getGreen() + (color2.getGreen() - color1.getGreen()) * fScl);
                int blue = Tools.roundColor(color1.getBlue() + (color2.getBlue() - color1.getBlue()) * fScl);
                layer.getPalette().setColor(i, red, green, blue);
            }
        } else // fade out layer1 to black
        if (lIdx < layerSize1) {
            Layer layer1 = pFlame1.getLayers().get(lIdx);
            layer.assign(layer1);
            layer.setWeight(morphValue(layer1.getWeight(), 0.0, fScl));
        } else // fade in layer2 from black
        if (lIdx < layerSize2) {
            Layer layer2 = pFlame2.getLayers().get(lIdx);
            layer.assign(layer2);
            layer.setWeight(morphValue(0.0, layer2.getWeight(), fScl));
        }
    }
    // morph camera settings etc.
    morphFlameValues(pFlame1, pFlame2, fScl, res);
    return res;
}
Also used : XForm(org.jwildfire.create.tina.base.XForm) RGBPalette(org.jwildfire.create.tina.palette.RGBPalette) RGBColor(org.jwildfire.create.tina.palette.RGBColor) Layer(org.jwildfire.create.tina.base.Layer) Flame(org.jwildfire.create.tina.base.Flame)

Example 32 with Layer

use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.

the class FlameMorphService method morphFlames_fade.

private static Flame morphFlames_fade(Prefs pPrefs, Flame pFlame1, Flame pFlame2, int pFrame, int pFrames) {
    if (pFrame < 1 || pFrames < 2)
        return pFlame1;
    double fScl = (double) (pFrame - 1) / (pFrames - 1);
    if (fScl <= MathLib.EPSILON) {
        return pFlame1;
    } else if (fScl >= 1.0 - MathLib.EPSILON) {
        return pFlame2;
    }
    // fade out layerz of the source flame
    Flame res = pFlame1.makeCopy();
    morphFlameValues(pFlame1, pFlame2, fScl, res);
    for (Layer layer : res.getLayers()) {
        layer.setWeight(layer.getWeight() * (1.0 - fScl));
    }
    // add and fade in layerz of the dest flame
    for (Layer layer : pFlame2.getLayers()) {
        Layer copy = layer.makeCopy();
        copy.setWeight(copy.getWeight() * fScl);
        res.getLayers().add(copy);
    }
    return res;
}
Also used : Layer(org.jwildfire.create.tina.base.Layer) Flame(org.jwildfire.create.tina.base.Flame)

Example 33 with Layer

use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.

the class AnimationModelService method visitModel.

@SuppressWarnings("unchecked")
public static void visitModel(PropertyModel res, Flame pFlame, PropertyVisitor pVisitor) {
    VisitState state = new VisitState(pVisitor);
    Class<?> cls = pFlame.getClass();
    for (Field field : cls.getDeclaredFields()) {
        if (state.isCancelSignalled()) {
            return;
        }
        field.setAccessible(true);
        if (field.getAnnotation(AnimAware.class) != null) {
            Class<?> fCls = field.getType();
            if (isPrimitiveProperty(fCls)) {
                PlainProperty property = new PlainProperty(res, field.getName(), cls);
                res.getProperties().add(property);
                if (pVisitor != null) {
                    state.updateState(pVisitor.accept(pFlame, field, property));
                }
            } else if (fCls == RGBPalette.class) {
                try {
                    RGBPalette palette = (RGBPalette) field.get(pFlame);
                    addGradientToModel(res, palette, pVisitor, state);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (fCls == List.class) {
                ParameterizedType listType = (ParameterizedType) field.getGenericType();
                Class<?> listSubClass = (Class<?>) listType.getActualTypeArguments()[0];
                if (listSubClass.isAssignableFrom(Layer.class)) {
                    List<Layer> layers;
                    try {
                        layers = (List<Layer>) field.get(pFlame);
                    } catch (Exception e) {
                        layers = null;
                        e.printStackTrace();
                    }
                    if (layers != null) {
                        int idx = 0;
                        for (Layer layer : layers) {
                            addLayerToModel(res, idx++, layer, pVisitor, state);
                        }
                    }
                }
            }
        }
    }
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) Field(java.lang.reflect.Field) AnimAware(org.jwildfire.create.tina.animate.AnimAware) RGBPalette(org.jwildfire.create.tina.palette.RGBPalette) Layer(org.jwildfire.create.tina.base.Layer)

Example 34 with Layer

use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.

the class BalancingPreprocessor method preprocessFlame.

@Override
public Flame preprocessFlame(DancingFlameProject pProject, Flame pFlame) {
    for (Layer layer : pFlame.getLayers()) {
        layer.getPalette().setModRed(red);
        layer.getPalette().setModGreen(green);
        layer.getPalette().setModBlue(blue);
    }
    return pFlame;
}
Also used : Layer(org.jwildfire.create.tina.base.Layer)

Example 35 with Layer

use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.

the class SubFlameWFFunc method prefuseIter.

private void prefuseIter(FlameTransformationContext pContext) {
    if (flame != null) {
        Layer layer = flame.getFirstLayer();
        layer.refreshModWeightTables(pContext);
        xf = layer.getXForms().get(0);
        p = new XYZPoint();
        p.x = pContext.random() - 0.5;
        p.y = pContext.random() - 0.5;
        p.z = 0.0;
        p.color = pContext.random();
        for (int i = 0; i < 42; i++) {
            xf = xf.getNextAppliedXFormTable()[pContext.random(Constants.NEXT_APPLIED_XFORM_TABLE_SIZE)];
            if (xf == null) {
                return;
            }
            a.clear();
            v.clear();
            xf.transformPoint(pContext, a, v, p, p);
        }
    }
}
Also used : XYZPoint(org.jwildfire.create.tina.base.XYZPoint) Layer(org.jwildfire.create.tina.base.Layer) XYZPoint(org.jwildfire.create.tina.base.XYZPoint)

Aggregations

Layer (org.jwildfire.create.tina.base.Layer)105 XForm (org.jwildfire.create.tina.base.XForm)73 Flame (org.jwildfire.create.tina.base.Flame)63 VariationFunc (org.jwildfire.create.tina.variation.VariationFunc)31 XYZPoint (org.jwildfire.create.tina.base.XYZPoint)16 RenderedFlame (org.jwildfire.create.tina.render.RenderedFlame)13 RGBPalette (org.jwildfire.create.tina.palette.RGBPalette)9 ArrayList (java.util.ArrayList)8 FlameWriter (org.jwildfire.create.tina.io.FlameWriter)5 RandomGradientMutation (org.jwildfire.create.tina.mutagen.RandomGradientMutation)4 Linear3DFunc (org.jwildfire.create.tina.variation.Linear3DFunc)4 DefaultTableModel (javax.swing.table.DefaultTableModel)2 Test (org.junit.Test)2 QualityProfile (org.jwildfire.base.QualityProfile)2 ResolutionProfile (org.jwildfire.base.ResolutionProfile)2 XMLAttributes (org.jwildfire.base.Tools.XMLAttributes)2 HeadlessBatchRendererController (org.jwildfire.create.tina.batch.HeadlessBatchRendererController)2 Job (org.jwildfire.create.tina.batch.Job)2 JobRenderThread (org.jwildfire.create.tina.batch.JobRenderThread)2 JobRenderThreadController (org.jwildfire.create.tina.batch.JobRenderThreadController)2