use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.
the class FACLFlameWriter method getFlameXML.
public String getFlameXML(Flame pFlame) throws Exception {
SimpleXMLBuilder xb = new SimpleXMLBuilder();
List<SimpleXMLBuilder.Attribute<?>> flamesAttrList = new ArrayList<>();
flamesAttrList.add(new Attribute<String>("name", ""));
xb.beginElement("Flames", flamesAttrList);
// Flame
List<SimpleXMLBuilder.Attribute<?>> attrList = createFlameAttributes(pFlame, xb);
Layer layer = pFlame.getFirstLayer();
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));
}
// Gradient
addGradient(xb, layer);
xb.endElement("flame");
xb.endElement("Flames");
return xb.buildXML();
}
use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.
the class Boarders2Test method visual.
// @Ignore
@Test
public void visual() throws Exception {
Prefs.getPrefs().setTinaRandomNumberGenerator(RandomGeneratorType.JAVA_INTERNAL);
System.out.println(Prefs.getPrefs().getTinaRandomNumberGenerator().name());
int side = 600;
ResolutionProfile respro = new ResolutionProfile(true, side, side);
int quality = 80;
Flame f = new Flame();
f.setWidth(side);
f.setHeight(side);
f.setGamma(4.0);
f.setBGTransparency(false);
f.setAntialiasAmount(1.0);
f.setAntialiasRadius(.1);
Layer l = new Layer();
XForm xf = new XForm();
Boarders2Func bf = new Boarders2Func();
bf.setParameter("c", .6);
bf.setParameter("left", .65);
bf.setParameter("right", .35);
xf.addVariation(1.0, bf);
f.setCamZoom(6.461);
xf.setWeight(5.5);
l.getXForms().add(xf);
RGBPalette pal = new RGBPalette();
for (int i = 0; i < 256; i++) pal.addColor(0, i, 255);
pal.setFlam3Name("test");
l.setPalette(pal);
f.setResolutionProfile(respro);
f.getLayers().clear();
f.getLayers().add(l);
// this is "scale"
f.setPixelsPerUnit(43.75);
new FlameWriter().writeFlame(f, "/dev/shm/test.flame");
JobRenderThreadController controller = new HeadlessBatchRendererController();
List<Job> joblist = new ArrayList<>();
Job j = new Job();
j.setCustomHeight(side);
j.setCustomWidth(side);
j.setCustomQuality(quality);
j.setFlameFilename("/dev/shm/test.flame");
joblist.add(j);
QualityProfile qualpro = new QualityProfile();
qualpro.setQuality(quality);
JobRenderThread job = new JobRenderThread(controller, joblist, respro, qualpro, true);
job.run();
}
use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.
the class DancingFractalsController method validateDancingFlame.
private Flame validateDancingFlame(Flame pFlame) {
for (Layer layer : pFlame.getLayers()) {
if (layer.getFinalXForms().size() == 0) {
XForm xForm = new XForm();
xForm.addVariation(1.0, new Linear3DFunc());
layer.getFinalXForms().add(xForm);
}
}
return pFlame;
}
use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.
the class JWFFlameReader method readFlamesfromXML.
public List<Flame> readFlamesfromXML(String pXML) {
List<Flame> res = new ArrayList<Flame>();
int pFlames = 0;
while (true) {
String flameXML;
{
int ps = pXML.indexOf("<" + ATTR_JWF_FLAME + " ", pFlames);
if (ps < 0)
break;
int pe = pXML.indexOf("</" + ATTR_JWF_FLAME + ">", ps + 1);
if (pe < 0)
break;
pFlames = pe + ATTR_JWF_FLAME.length() + 3;
flameXML = pXML.substring(ps, pFlames);
}
Flame flame = new Flame();
res.add(flame);
// Flame attributes
{
int ps = flameXML.indexOf("<" + ATTR_JWF_FLAME + " ");
int pe = -1;
boolean qt = false;
for (int i = ps + 1; i < flameXML.length(); i++) {
if (flameXML.charAt(i) == '\"') {
qt = !qt;
} else if (!qt && flameXML.charAt(i) == '>') {
pe = i;
break;
}
}
String hs = flameXML.substring(ps + 11, pe);
parseFlameAttributes(flame, hs);
}
flame.getLayers().clear();
// Layers
int pLayers = 0;
while (true) {
int layerStart = flameXML.indexOf("<" + ATTR_LAYER + " ", pLayers);
if (layerStart < 0)
break;
int layerEnd = flameXML.indexOf("</" + ATTR_LAYER + ">", layerStart + 1);
if (layerEnd < 0)
break;
pLayers = layerEnd + ATTR_LAYER.length() + 3;
String layerXML = flameXML.substring(layerStart, pLayers);
Layer layer = new Layer();
flame.getLayers().add(layer);
XMLAttributes atts;
// Layer attributes
{
int ps = layerXML.indexOf("<" + ATTR_LAYER + " ");
int pe = layerXML.indexOf(">", ps);
String hs = layerXML.substring(ps + 7, pe);
atts = parseLayerAttributes(layer, hs);
}
readXForms(layerXML, flame, layer);
readFinalXForms(layerXML, flame, layer);
readColors(layerXML, layer);
readMotionCurves(layer.getPalette(), atts, "palette_");
}
}
return res;
}
use of org.jwildfire.create.tina.base.Layer in project JWildfire by thargor6.
the class DefaultMotionCreator method createMotions.
@Override
public void createMotions(DancingFlameProject pProject) {
pProject.getMotions().clear();
FFTMotion amp0 = new FFTMotion();
amp0.setFftChannel(0);
amp0.setAmplitude(-7.0);
FFTMotion amp1 = new FFTMotion();
amp1.setFftChannel(1);
amp1.setAmplitude(-0.5);
FFTMotion amp2 = new FFTMotion();
amp2.setFftChannel(2);
amp2.setAmplitude(-0.5);
FFTMotion amp3 = new FFTMotion();
amp3.setFftChannel(3);
amp3.setAmplitude(-2.0);
FFTMotion amp4 = new FFTMotion();
amp4.setFftChannel(4);
amp4.setAmplitude(0.25);
FFTMotion amp5 = new FFTMotion();
amp5.setFftChannel(5);
amp5.setAmplitude(-0.25);
FFTMotion amp7 = new FFTMotion();
amp7.setFftChannel(47);
amp7.setAmplitude(5.0);
FFTMotion amp8 = new FFTMotion();
amp8.setFftChannel(48);
amp8.setAmplitude(-0.75);
FFTMotion amp9 = new FFTMotion();
amp9.setFftChannel(49);
amp9.setAmplitude(0.5);
FFTMotion amp10 = new FFTMotion();
amp10.setFftChannel(50);
amp10.setAmplitude(3.0);
FFTMotion amp11 = new FFTMotion();
amp11.setFftChannel(51);
amp11.setAmplitude(0.25);
FFTMotion amp12 = new FFTMotion();
amp12.setFftChannel(52);
amp12.setAmplitude(0.25);
FFTMotion amp14 = new FFTMotion();
amp14.setFftChannel(2);
amp14.setAmplitude(0.25);
amp14.setOffset(1.0);
pProject.getMotions().add(amp0);
pProject.getMotions().add(amp1);
pProject.getMotions().add(amp2);
pProject.getMotions().add(amp3);
pProject.getMotions().add(amp4);
pProject.getMotions().add(amp5);
pProject.getMotions().add(amp7);
pProject.getMotions().add(amp8);
pProject.getMotions().add(amp9);
pProject.getMotions().add(amp10);
pProject.getMotions().add(amp11);
pProject.getMotions().add(amp12);
pProject.getMotions().add(amp14);
for (Flame flame : pProject.getFlames()) {
PropertyModel model = AnimationModelService.createModel(flame);
for (int layerIdx = 0; layerIdx < flame.getLayers().size(); layerIdx++) {
Layer layer = flame.getLayers().get(layerIdx);
if (layer.getXForms().size() > 0) {
addXFormLink(model, amp0, flame, layerIdx, 0, AnimationModelService.PROPNAME_ANGLE);
addXFormLink(model, amp1, flame, layerIdx, 0, AnimationModelService.PROPNAME_ORIGIN_X);
addXFormLink(model, amp2, flame, layerIdx, 0, AnimationModelService.PROPNAME_ORIGIN_Y);
}
if (layer.getXForms().size() > 1) {
addXFormLink(model, amp3, flame, layerIdx, 1, AnimationModelService.PROPNAME_ANGLE);
addXFormLink(model, amp4, flame, layerIdx, 1, AnimationModelService.PROPNAME_ORIGIN_X);
addXFormLink(model, amp5, flame, layerIdx, 1, AnimationModelService.PROPNAME_ORIGIN_Y);
}
if (layer.getXForms().size() > 2) {
addXFormLink(model, amp7, flame, layerIdx, 2, AnimationModelService.PROPNAME_ANGLE);
addXFormLink(model, amp8, flame, layerIdx, 2, AnimationModelService.PROPNAME_ORIGIN_X);
addXFormLink(model, amp9, flame, layerIdx, 2, AnimationModelService.PROPNAME_ORIGIN_Y);
}
if (layer.getXForms().size() > 3) {
addXFormLink(model, amp10, flame, layerIdx, 3, AnimationModelService.PROPNAME_ANGLE);
addXFormLink(model, amp11, flame, layerIdx, 3, AnimationModelService.PROPNAME_ORIGIN_X);
addXFormLink(model, amp12, flame, layerIdx, 3, AnimationModelService.PROPNAME_ORIGIN_Y);
}
if (layer.getFinalXForms().size() > 0) {
addFinalXFormLink(model, amp14, flame, layerIdx, 0, AnimationModelService.PROPNAME_ZOOM);
}
}
}
}
Aggregations