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;
}
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();
}
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);
}
}
}
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);
}
}
}
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();
}
Aggregations