Search in sources :

Example 56 with XForm

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

the class FlamePanel method mouseClicked.

public XForm mouseClicked(int x, int y) {
    redrawAfterMouseClick = false;
    // select flame
    if (config.getMouseDragOperation() == MouseDragOperation.MOVE_TRIANGLE || config.getMouseDragOperation() == MouseDragOperation.ROTATE_TRIANGLE || config.getMouseDragOperation() == MouseDragOperation.SCALE_TRIANGLE) {
        Layer layer = layerHolder.getLayer();
        if (layer != null) {
            for (XForm xForm : layer.getXForms()) {
                if (getHandler(flamePanelTriangleMode).isInsideXForm(xForm, x, y)) {
                    if (config.getMouseDragOperation() == MouseDragOperation.POINTS) {
                        config.setSelectedPoint(getHandler(flamePanelTriangleMode).selectNearestPoint(xForm, x, y));
                        redrawAfterMouseClick = true;
                        reRender = true;
                    }
                    return xForm;
                }
            }
            for (XForm xForm : layer.getFinalXForms()) {
                if (getHandler(flamePanelTriangleMode).isInsideXForm(xForm, x, y)) {
                    if (config.getMouseDragOperation() == MouseDragOperation.POINTS) {
                        config.setSelectedPoint(getHandler(flamePanelTriangleMode).selectNearestPoint(xForm, x, y));
                        redrawAfterMouseClick = true;
                        reRender = true;
                    }
                    return xForm;
                }
            }
        }
    } else // select nearest point
    if (config.getMouseDragOperation() == MouseDragOperation.POINTS && selectedXForm != null) {
        config.setSelectedPoint(getHandler(flamePanelTriangleMode).selectNearestPoint(selectedXForm, x, y));
        redrawAfterMouseClick = true;
        reRender = true;
        return selectedXForm;
    } else if (config.getMouseDragOperation() == MouseDragOperation.GRADIENT && flameHolder.getFlame() != null && layerHolder != null && layerHolder.getLayer() != null) {
        if (undoManagerHolder != null) {
            undoManagerHolder.saveUndoPoint();
        }
        redrawAfterMouseClick = gradientOverlay.mouseClicked(x, y, layerHolder.getLayer().getPalette());
        reRender = false;
    }
    return null;
}
Also used : XForm(org.jwildfire.create.tina.base.XForm) Layer(org.jwildfire.create.tina.base.Layer)

Example 57 with XForm

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

the class Flam3Writer method getFlameXML.

public String getFlameXML(Flame pFlame) throws Exception {
    SimpleXMLBuilder xb = new SimpleXMLBuilder();
    // Flame
    List<SimpleXMLBuilder.Attribute<?>> attrList = createFlameAttributes(pFlame, xb);
    Layer layer = pFlame.getFirstLayer();
    writeMotionCurves(layer.getPalette(), xb, attrList, "palette_", Collections.<String>emptyList());
    xb.beginElement("flame", attrList);
    // XForm
    for (XForm xForm : layer.getXForms()) {
        xb.emptyElement("xform", createXFormAttrList(xb, layer, xForm));
    }
    // FinalXForms
    for (XForm xForm : layer.getFinalXForms()) {
        xb.emptyElement("finalxform", createXFormAttrList(xb, layer, xForm));
    }
    addPalette(xb, layer);
    xb.endElement("flame");
    return xb.buildXML();
}
Also used : XForm(org.jwildfire.create.tina.base.XForm) Layer(org.jwildfire.create.tina.base.Layer)

Example 58 with XForm

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

the class Affine3DMutation method apply.

private void apply(Layer pLayer, double pAmount) {
    XForm xForm;
    if (pLayer.getFinalXForms().size() == 0 || Math.random() < 0.5) {
        xForm = pLayer.getXForms().get(Tools.randomInt(pLayer.getXForms().size()));
    } else {
        xForm = pLayer.getFinalXForms().get(Tools.randomInt(pLayer.getFinalXForms().size()));
    }
    if (pLayer.getOwner().isPreserveZ() && Math.random() > 0.25) {
        boolean hasZScale = false;
        for (Variation var : xForm.getVariations()) {
            if (PostZScaleWFFunc.VAR_NAME.equals(var.getFunc().getName())) {
                hasZScale = true;
                break;
            }
        }
        if (!hasZScale) {
            VariationFunc fnc = VariationFuncList.getVariationFuncInstance(PostZScaleWFFunc.VAR_NAME);
            xForm.addVariation(new Variation(0.001 + Math.random() * 0.1, fnc));
        }
    }
    if (Math.random() < 0.5) {
        if (Math.random() < 0.75) {
            if (Math.random() < 0.5) {
                xForm.setXYCoeff00(xForm.getXYCoeff00() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYCoeff01(xForm.getXYCoeff01() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYCoeff10(xForm.getXYCoeff10() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYCoeff11(xForm.getXYCoeff11() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYCoeff20(xForm.getXYCoeff20() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYCoeff21(xForm.getXYCoeff21() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
        } else {
            if (Math.random() < 0.5) {
                xForm.setXYPostCoeff00(xForm.getXYPostCoeff00() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYPostCoeff01(xForm.getXYPostCoeff01() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYPostCoeff10(xForm.getXYPostCoeff10() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYPostCoeff11(xForm.getXYPostCoeff11() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYPostCoeff20(xForm.getXYPostCoeff20() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
            if (Math.random() < 0.5) {
                xForm.setXYPostCoeff21(xForm.getXYPostCoeff21() + pAmount * (-0.25 + 0.5 * Math.random()));
            }
        }
    } else {
        if (Math.random() < 0.33) {
            XFormTransformService.flipHorizontal(xForm, Math.random() < 0.5);
        }
        if (Math.random() > 0.67) {
            XFormTransformService.flipVertical(xForm, Math.random() < 0.5);
        }
        if (Math.random() < 0.75) {
            XFormTransformService.globalTranslate(xForm, -pAmount + 2 * Math.random() * pAmount, -pAmount + 2 * Math.random() * pAmount, Math.random() < 0.5);
        }
        if (Math.random() < 0.5) {
            XFormTransformService.rotate(xForm, -pAmount * 10.0 + 20.0 * Math.random() * pAmount, Math.random() < 0.5);
        }
        if (Math.random() < 0.5) {
            XFormTransformService.scale(xForm, -pAmount + 2 * Math.random() * pAmount, Math.random() < 0.75, Math.random() < 0.75);
        }
    }
}
Also used : XForm(org.jwildfire.create.tina.base.XForm) Variation(org.jwildfire.create.tina.variation.Variation) VariationFunc(org.jwildfire.create.tina.variation.VariationFunc)

Example 59 with XForm

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

the class BokehMutation method execute.

@Override
public void execute(Layer pLayer) {
    Flame flame = pLayer.getOwner();
    flame.setCamDOF(0.1 + Math.random() * 0.3);
    flame.setNewCamDOF(true);
    flame.setCamPitch(30 + Math.random() * 20.0);
    flame.setCamYaw(15 - Math.random() * 30.0);
    flame.setCamPerspective(0.05 + Math.random() * 0.2);
    flame.setCamDOFArea(0.2 + Math.random() * 0.5);
    for (Layer layer : flame.getLayers()) {
        Variation crackle = null;
        for (XForm xform : layer.getXForms()) {
            for (int i = xform.getVariationCount() - 1; i >= 0; i--) {
                Variation var = xform.getVariation(i);
                if (var.getFunc().getName().equals(CrackleFunc.VAR_NAME)) {
                    VariationFunc varFunc = var.getFunc();
                    double scale = (Double) varFunc.getParameter(CrackleFunc.PARAM_SCALE);
                    if (MathLib.fabs(scale) < MathLib.EPSILON) {
                        crackle = var;
                        xform.setColor(Math.random());
                        break;
                    }
                }
            }
        }
        if (crackle == null) {
            XForm xform = new XForm();
            xform.setWeight(0.5);
            layer.getXForms().add(xform);
            crackle = xform.addVariation(1.0, VariationFuncList.getVariationFuncInstance(CrackleFunc.VAR_NAME));
            crackle.getFunc().setParameter(CrackleFunc.PARAM_SCALE, 0.0);
        }
        crackle.setAmount(1.0 + Math.random() * 2.0);
        crackle.getFunc().setParameter(CrackleFunc.PARAM_DISTORT, 1.5 + Math.random() * 1.5);
        crackle.getFunc().setParameter(CrackleFunc.PARAM_CELLSIZE, 0.5 + Math.random() * 2.0);
        if (Math.random() < 0.33) {
            flame.setFocusX(0.33 - Math.random() * 0.66);
            flame.setFocusY(0.25 - Math.random() * 0.50);
            flame.setFocusZ(0.1 - Math.random() * 0.2);
        } else {
            flame.setFocusX(0.0);
            flame.setFocusY(0.0);
            flame.setFocusZ(0.0);
        }
        flame.setCamDOFScale(1.5 + Math.random() * 2.0);
        flame.setCamDOFAngle(20.0 * Math.random());
        flame.setCamDOFParam1(0);
        flame.setCamDOFParam2(0);
        flame.setCamDOFParam3(0);
        flame.setCamDOFParam4(0);
        flame.setCamDOFParam5(0);
        double rnd = Math.random();
        if (rnd < 0.08) {
            flame.setCamDOFShape(DOFBlurShapeType.BUBBLE);
            flame.setCamDOFFade(0.6 + Math.random() * 0.4);
        } else if (rnd < 0.16) {
            flame.setCamDOFShape(DOFBlurShapeType.HEART);
            if (Math.random() < 0.25) {
                flame.setCamDOFFade(0.2 + Math.random() * 0.8);
            } else {
                flame.setCamDOFFade(0.0);
            }
        } else if (rnd < 0.24) {
            flame.setCamDOFShape(DOFBlurShapeType.CANNABISCURVE);
            if (Math.random() < 0.25) {
                flame.setCamDOFFade(0.2 + Math.random() * 0.8);
            } else {
                flame.setCamDOFFade(0.0);
            }
        } else if (rnd < 0.32) {
            flame.setCamDOFShape(DOFBlurShapeType.NBLUR);
            flame.setCamDOFFade(0.0);
            // num edges
            flame.setCamDOFParam1(3 + Math.random() * 5);
            if (Math.random() < 0.33) {
                // num stripes
                flame.setCamDOFParam2(2 + Math.random() * 5);
                // ratio stripes
                flame.setCamDOFParam3(1);
                // ratio hole
                flame.setCamDOFParam4(0);
                // circum circle
                flame.setCamDOFParam5(Math.random() < 0.33 ? 1 : 0);
            }
        } else if (rnd < 0.40) {
            flame.setCamDOFShape(DOFBlurShapeType.FLOWER);
            flame.setCamDOFFade(0.0);
            // holes
            flame.setCamDOFParam1(0.3 + Math.random() * 0.2);
            // petals
            flame.setCamDOFParam2(5 + Math.random() * 5);
        } else if (rnd < 0.48) {
            flame.setCamDOFShape(DOFBlurShapeType.CLOVERLEAF);
            if (Math.random() < 0.25) {
                flame.setCamDOFFade(0.2 + Math.random() * 0.8);
            } else {
                flame.setCamDOFFade(0.0);
            }
        } else if (rnd < 0.56) {
            flame.setCamDOFShape(DOFBlurShapeType.SINEBLUR);
            flame.setCamDOFFade(0.0);
            flame.setCamDOFParam1(1.2 + Math.random());
        } else if (rnd < 0.64) {
            flame.setCamDOFShape(DOFBlurShapeType.PERLIN_NOISE);
            flame.setCamDOFFade(0.0);
            // shape
            flame.setCamDOFParam1(Math.random());
            // freqs
            flame.setCamDOFParam2(1.2 + Math.random() * 1.8);
            // amp
            flame.setCamDOFParam3(0.1 + Math.random() * 0.4);
        } else if (rnd < 0.72) {
            flame.setCamDOFFade(0.2 + Math.random() * 0.8);
            flame.setCamDOFShape(DOFBlurShapeType.STARBLUR);
            // power
            flame.setCamDOFParam1(4 + Math.random() * 6);
            // range
            flame.setCamDOFParam2(0.40162283177245455973959534526548);
        } else if (rnd < 0.80) {
            flame.setCamDOFAngle(0.0);
            flame.setCamDOFFade(0.);
            flame.setCamDOFShape(DOFBlurShapeType.TAURUS);
            // r
            flame.setCamDOFParam1(2.5 + Math.random());
            // n
            flame.setCamDOFParam2(4 + Math.random() * 3.0);
            // inv
            flame.setCamDOFParam3(1.25 * Math.random() * 0.5);
            // sor
            flame.setCamDOFParam4(0.9 + Math.random() * 0.2);
        } else if (rnd < 0.9) {
            flame.setCamDOFShape(DOFBlurShapeType.RECT);
            flame.setCamDOFFade(0.0);
            flame.setCamDOFParam1(0.4 + Math.random() * 0.4);
        }
    }
}
Also used : XForm(org.jwildfire.create.tina.base.XForm) Variation(org.jwildfire.create.tina.variation.Variation) Layer(org.jwildfire.create.tina.base.Layer) VariationFunc(org.jwildfire.create.tina.variation.VariationFunc) Flame(org.jwildfire.create.tina.base.Flame)

Example 60 with XForm

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

the class JWFFlameWriter method getFlameXML.

public String getFlameXML(Flame pFlame) throws Exception {
    SimpleXMLBuilder xb = new SimpleXMLBuilder();
    // Flame
    List<SimpleXMLBuilder.Attribute<?>> attrList = createFlameAttributes(pFlame, xb);
    xb.beginElement("jwf-flame", attrList);
    for (Layer layer : pFlame.getLayers()) {
        List<SimpleXMLBuilder.Attribute<?>> layerAttrList = new ArrayList<SimpleXMLBuilder.Attribute<?>>();
        layerAttrList.add(xb.createAttr("weight", layer.getWeight()));
        layerAttrList.add(xb.createAttr("visible", layer.isVisible() ? 1 : 0));
        {
            String name = layer.getName().replaceAll("\"", "");
            if (!name.equals("")) {
                layerAttrList.add(xb.createAttr("name", name));
            }
        }
        {
            String gradientMapFilename = layer.getGradientMapFilename().replaceAll("\"", "");
            if (!gradientMapFilename.equals("")) {
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP, gradientMapFilename));
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP_HOFFSET, layer.getGradientMapHorizOffset()));
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP_HSCALE, layer.getGradientMapHorizScale()));
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP_VOFFSET, layer.getGradientMapVertOffset()));
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP_VSCALE, layer.getGradientMapVertScale()));
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP_LCOLOR_ADD, layer.getGradientMapLocalColorAdd()));
                layerAttrList.add(xb.createAttr(ATTR_GRADIENT_MAP_LCOLOR_SCALE, layer.getGradientMapLocalColorScale()));
            }
        }
        layerAttrList.add(xb.createAttr(ATTR_SMOOTH_GRADIENT, layer.isSmoothGradient() ? "1" : "0"));
        List<String> blackList = Collections.emptyList();
        writeMotionCurves(layer, xb, layerAttrList, null, blackList);
        RGBPalette palette = layer.getPalette();
        writeMotionCurves(palette, xb, layerAttrList, "palette_", Collections.<String>emptyList());
        xb.beginElement("layer", layerAttrList);
        // XForm
        for (XForm xForm : layer.getXForms()) {
            xb.emptyElement("xform", createXFormAttrList(xb, layer, xForm));
        }
        // FinalXForms
        for (XForm xForm : layer.getFinalXForms()) {
            xb.emptyElement("finalxform", createXFormAttrList(xb, layer, xForm));
        }
        // Palette
        {
            xb.beginElement("palette", xb.createAttr("count", palette.getSize()), xb.createAttr("format", "RGB"));
            StringBuilder rgb = new StringBuilder();
            for (int i = 0; i < palette.getSize(); i++) {
                String hs;
                hs = Integer.toHexString(palette.getColor(i).getRed()).toUpperCase();
                rgb.append(hs.length() > 1 ? hs : "0" + hs);
                hs = Integer.toHexString(palette.getColor(i).getGreen()).toUpperCase();
                rgb.append(hs.length() > 1 ? hs : "0" + hs);
                hs = Integer.toHexString(palette.getColor(i).getBlue()).toUpperCase();
                rgb.append(hs.length() > 1 ? hs : "0" + hs);
                if ((i + 1) % 12 == 0) {
                    rgb.append("\n");
                }
            }
            xb.addContent(rgb.toString());
            xb.endElement("palette");
        }
        xb.endElement("layer");
    }
    xb.endElement("jwf-flame");
    return xb.buildXML();
}
Also used : XForm(org.jwildfire.create.tina.base.XForm) RGBPalette(org.jwildfire.create.tina.palette.RGBPalette) ArrayList(java.util.ArrayList) Layer(org.jwildfire.create.tina.base.Layer)

Aggregations

XForm (org.jwildfire.create.tina.base.XForm)121 Layer (org.jwildfire.create.tina.base.Layer)73 Flame (org.jwildfire.create.tina.base.Flame)55 VariationFunc (org.jwildfire.create.tina.variation.VariationFunc)34 XYZPoint (org.jwildfire.create.tina.base.XYZPoint)19 Variation (org.jwildfire.create.tina.variation.Variation)15 Test (org.junit.Test)8 ArrayList (java.util.ArrayList)7 RenderedFlame (org.jwildfire.create.tina.render.RenderedFlame)7 FlameWriter (org.jwildfire.create.tina.io.FlameWriter)6 Linear3DFunc (org.jwildfire.create.tina.variation.Linear3DFunc)6 RandomGradientMutation (org.jwildfire.create.tina.mutagen.RandomGradientMutation)4 RGBPalette (org.jwildfire.create.tina.palette.RGBPalette)4 ZigguratRandomGenerator (org.jwildfire.create.tina.random.ZigguratRandomGenerator)4 FlameRenderer (org.jwildfire.create.tina.render.FlameRenderer)4 Field (java.lang.reflect.Field)3 SubFlameWFFunc (org.jwildfire.create.tina.variation.SubFlameWFFunc)3 DefaultTableModel (javax.swing.table.DefaultTableModel)2 QualityProfile (org.jwildfire.base.QualityProfile)2 ResolutionProfile (org.jwildfire.base.ResolutionProfile)2