|
import java.awt.Rectangle;
|
import java.util.Enumeration;
|
import java.util.Vector;
|
|
|
class Composite extends Object3D implements java.io.Serializable
|
{
|
//static final long serialVersionUID = 7573824863213044426L;
|
static final long serialVersionUID = 2504838101189782470L;
|
|
Composite()
|
{
|
this("Composite");
|
}
|
|
Composite(String name)
|
{
|
super(name);
|
|
children = this; // new Vector();
|
selection = new Object3D(); // Vector(0, 0);
|
}
|
|
Composite Children()
|
{
|
return this;
|
}
|
|
// void RemoveOneTriangle()
|
// {
|
// super.RemoveOneTriangle();
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D child = (Object3D) Children().reserve(i);
|
// child.RemoveOneTriangle();
|
// Children().release(i);
|
// }
|
// }
|
|
// void ClearMaterials()
|
// {
|
// super.ClearMaterials();
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D child = (Object3D) Children().reserve(i);
|
// child.ClearMaterials();
|
// Children().release(i);
|
// }
|
// }
|
|
|
// void GenUVS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.GenUVs();
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void GenNormalsS(boolean crease)
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.GenNormals(crease);
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void ClearColorsS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.ClearColors();
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void StripifyS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.Stripify();
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void TrimS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.Trim();
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void UntrimS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.Untrim();
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void ReverseNormalsS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.ReverseNormals();
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void ParseS(iParse obj)
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.Parse(obj);
|
// }
|
//
|
// //Touch();
|
// }
|
//
|
// void ReverseTrianglesS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.ReverseTriangles();
|
// }
|
//
|
// //Touch();
|
// }
|
|
// void RemoveOneTriangleS()
|
// {
|
// for (int i=0; i<selection.size(); i++)
|
// {
|
// Object3D selectee = (Object3D) selection.elementAt(i);
|
// selectee.ReduceMesh();
|
// }
|
//
|
// //Touch();
|
// }
|
|
// JUNE 2019??? That cannot work...
|
// public void clear()
|
// {
|
// if (blockloop)
|
// {
|
// //blockloop = false;
|
// return;
|
// }
|
//
|
// blockloop = true;
|
// //Applet3D.tracein("Clear", this);
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D obj = (Object3D) Children().get(i); // reserve(i);
|
//
|
// //if (!obj.ReadOnly()) // Object3D Serial...
|
// if (!(obj instanceof Composite) || !((Composite) obj).ReadOnly())
|
// {
|
// obj.clear();
|
// //Children().release(i);
|
// Children().remove(i);
|
// --i;
|
// } else
|
// {
|
// //Children().release(i);
|
// }
|
// }
|
// //Applet3D.traceout("Clear", this);
|
//
|
// blockloop = false;
|
// }
|
|
boolean ReadOnly()
|
{
|
return false;
|
}
|
|
Object3D deepCopy()
|
{
|
Composite comp = new Composite();
|
deepCopySelf(comp);
|
return comp;
|
}
|
|
boolean HasLoops()
|
{
|
new Exception().printStackTrace();
|
System.exit(0);
|
if (blockloop)
|
{
|
//? blockloop = false;
|
return true;
|
}
|
|
blockloop = true;
|
|
for (int i = 0; i < Children().size(); i++)
|
{
|
Object3D obj = (Object3D) Children().get(i);
|
|
if (obj == null)
|
{
|
new Exception().printStackTrace();
|
return true;
|
}
|
if (obj.HasLoops())
|
{
|
blockloop = false;
|
return true;
|
}
|
}
|
|
blockloop = false;
|
return false;
|
}
|
|
Object3D copyExpand()
|
{
|
/*
|
if (!HasLoops())
|
return this;
|
*/
|
|
/** //
|
Vector<Object3D> keep = new Vector();
|
for (int i = 0; i < super.size(); i++)
|
{
|
Object3D obj = (Object3D) super.get(i);
|
keep.add(obj);
|
}
|
/**/
|
|
// super.clear();
|
|
// Composite compo = (Composite) deepCopy();
|
// //compo.clear(); // Wipe serialized version
|
|
/** //
|
for (int i = 0; i < keep.size(); i++)
|
{
|
add(keep.get(i));
|
}
|
/**/
|
|
/*
|
if (this instanceof Texture)
|
compo = new Texture();
|
else
|
if (this instanceof CSG)
|
compo = new CSG();
|
else
|
if (this instanceof cGroup)
|
compo = new cGroup();
|
else
|
compo = new Composite();
|
*/
|
|
Composite compo = new Composite();
|
|
super.deepCopyNode(compo);
|
|
compo.count = 2;
|
|
for (int i = 0; i < Children().size(); i++)
|
{
|
Object3D obj = (Object3D) Children().reserve(i);
|
if (obj == null)
|
continue;
|
compo.addChild(obj.copyExpand());
|
Children().release(i);
|
}
|
|
//super.deepCopySelf(compo);
|
|
return compo;
|
}
|
|
protected void deepCopyNode(Object3D other)
|
{
|
super.deepCopyNode(other);
|
|
if (false)
|
{
|
Composite c = (Composite) other;
|
if (selection != null)
|
{
|
// assert(false); // ?!?!?!?!?!
|
c.selection = /*(Vector)*/ (Object3D) selection.clone();
|
} else
|
{
|
c.selection = new Object3D(); // Vector(0, 0);
|
}
|
assert (c.Children() == c);
|
//?? c.clear();
|
/**/
|
c.Children().setSize(Children().size());
|
for (int i=0; i < Children().size(); i++)
|
{
|
Object3D obj = (Object3D)Children().get(i);
|
if (IsContainedIn(obj))
|
{
|
// assert(false); // ?!?!?!?!?!
|
c.Children().setElementAt(c, i);
|
}
|
else
|
{
|
obj = obj.deepCopy();
|
obj.parent = c;
|
c.Children().setElementAt(obj, i);
|
}
|
}
|
/**/
|
}
|
/**
|
Composite copy = (Composite) GraphreeD.clone(this);
|
|
copy.Reset();
|
|
assert copy != null; // .Children() = copy;
|
|
for (int i = 0; i < copy.Children().size(); i++)
|
{
|
Object3D obj = (Object3D) copy.Children().reserve(i);
|
c.addChild(obj);
|
copy.Children().release(i);
|
}
|
/**/
|
}
|
|
// transient cVector min = new cVector();
|
// transient cVector max = new cVector();
|
|
void getBounds0(cVector minima, cVector maxima, boolean xform)
|
{
|
new Exception().printStackTrace();
|
System.exit(0);
|
minima.x = minima.y = minima.z = 1E10;
|
maxima.x = maxima.y = maxima.z = -1E10;
|
|
// if (HasLoops())
|
// {
|
// return;
|
// }
|
|
cVector min = new cVector();
|
cVector max = new cVector();
|
|
if (min == null) // ???
|
{
|
min = new cVector();
|
max = new cVector();
|
}
|
|
for (int i = Children().size(); --i >= 0;)
|
{
|
Object3D child = (Object3D) Children().reserve(i);
|
child.getBounds(min, max, true); // xform);
|
Children().release(i);
|
for (int xyz = 0; xyz < 3; xyz++)
|
{
|
if (min.get(xyz) < minima.get(xyz))
|
{
|
minima.set(xyz, min.get(xyz));
|
}
|
if (max.get(xyz) > maxima.get(xyz))
|
{
|
maxima.set(xyz, max.get(xyz));
|
}
|
}
|
}
|
//System.out.println("Bounds = " + minima + " - " + maxima);
|
if (xform)
|
{
|
transformBounds(minima, maxima);
|
}
|
//System.out.println("Bounds2 = " + minima + " - " + maxima);
|
}
|
|
void generatePOV(StringBuffer buffer)
|
{
|
Object3D child;
|
for (Enumeration e = Children().elements(); e.hasMoreElements(); child.generatePOV(buffer))
|
{
|
child = (Object3D) e.nextElement();
|
}
|
}
|
|
void createEditWindow(GroupEditor callee, boolean newWindow) //, boolean root)
|
{
|
// may 2014: use Object3D...
|
if (!newWindow)
|
{
|
super.createEditWindow(callee, newWindow);
|
return;
|
}
|
|
// NEW WINDOW
|
if (root) //false) // mar 2013
|
//parent == null)
|
{
|
editWindow = new GroupEditor(this, this, callee).GetEditor();
|
} else
|
/*
|
editWindow = new GroupEditor(this, deepCopy(), callee);
|
*/
|
{
|
if (newWindow)
|
{
|
objectUI = new GroupEditor(this, deepCopy(), callee);
|
} else
|
{
|
objectUI = new GroupEditor(this, callee, true);
|
}
|
editWindow = objectUI.GetEditor();
|
}
|
}
|
|
/*
|
void addChild(Object3D child)
|
{
|
//new Exception().printStackTrace();
|
Children().addElement(child);
|
//System.out.println("Add " + child + " to " + this);
|
//System.out.println("iscontained? " + IsContainedIn(child));
|
if (child.parent == null || !IsContainedIn(child)) // criss de patch de fou...
|
{
|
child.setParent(this);
|
//System.out.println("Set parent = " + child.parent);
|
}
|
|
Touch();
|
}
|
*/
|
|
// void removeChild(Object3D child)
|
// {
|
// /*
|
// child.setParent(null);
|
// Children().removeElement(child);
|
// */
|
// //System.out.println("child = " + child);
|
// //System.out.println("child.parent = " + child.parent);
|
// //System.out.println("this = " + this);
|
//
|
// if (Children().indexOf(child) >= 0)
|
// {
|
// child.setParent(null);
|
// Children().removeElement(child);
|
// } else
|
// {
|
// // removeChild(child.parent);
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D obj = (Object3D) Children().reserve(i);
|
// obj.removeChild(child);
|
// Children().release(i);
|
// }
|
// }
|
//
|
// if (selection != null)
|
// selection.removeElement(child);
|
//
|
// Touch();
|
// }
|
//
|
// void addSelectee(Object3D child)
|
// {
|
// // We accept multiple link...
|
// if (false) // selectees.indexOf(child) != -1)
|
// {
|
// //assert (selectees.indexOf(child) == -1);
|
// System.out.println("Child = " + child + "; this = " + this);
|
// new Exception().printStackTrace();
|
// }
|
//
|
// if (selection != null)
|
// selection.addElement(child);
|
// //? child.SoftTouch();
|
// }
|
//
|
// void removeSelectee(Object3D child)
|
// {
|
// selection.removeElement(child);
|
// //? child.SoftTouch();
|
// }
|
//
|
// void deselectAll()
|
// {
|
// childToDrag = null;
|
//
|
// if (selection == null)
|
// new Exception().printStackTrace();
|
// else
|
// selection.clear();
|
// //? SoftTouch();
|
// }
|
//
|
// void ClearSelection(boolean all)
|
// {
|
// if (all || (selection.size() > 0 && selection.get(0) == this))
|
// {
|
// selection.clear();
|
// for (Object3D child : Children())
|
// {
|
// child.ClearUI();
|
// }
|
// Children().clear();
|
// } else
|
// {
|
// Object3D selectee;
|
// for (; selection.size() > 0; selectee.ClearUI(), removeChild(selectee))
|
// {
|
// selectee = (Object3D) selection.elementAt(0);
|
// }
|
// }
|
//
|
// childToDrag = null;
|
//
|
// Touch();
|
// }
|
|
void SoftTouch()
|
{
|
if (blockloop)
|
{
|
return;
|
}
|
|
blockloop = true;
|
|
super.SoftTouch();
|
|
for (int i = 0; i < Size(); i++)
|
{
|
Object3D child = (Object3D) get(i);
|
if (child == null)
|
continue;
|
if (child.material == null)
|
{
|
child.SoftTouch();
|
}
|
}
|
|
blockloop = false;
|
}
|
|
void HardTouch()
|
{
|
if (blockloop)
|
{
|
return;
|
}
|
|
blockloop = true;
|
|
super.HardTouch();
|
|
for (int i = 0; i < Size(); i++)
|
{
|
Object3D child = (Object3D) get(i);
|
if (child == null)
|
continue;
|
child.HardTouch();
|
}
|
|
blockloop = false;
|
}
|
|
// void ClearMaterial()
|
// {
|
// if (selection.size() == 0)
|
// {
|
// super.ClearMaterial();
|
// } else
|
// {
|
// for (int i = 0; i < selection.size(); i++)
|
// {
|
// Object3D o = (Object3D) selection.get(i);
|
// if (o == this)
|
// {
|
// super.ClearMaterial();
|
// continue;
|
// }
|
// o.ClearMaterial();
|
// }
|
// }
|
// }
|
|
// void CreateMaterial()
|
// {
|
// if (selection.size() == 0)
|
// {
|
// super.CreateMaterial();
|
// } else
|
// {
|
// for (int i = 0; i < selection.size(); i++)
|
// {
|
// Object3D o = (Object3D) selection.get(i);
|
// if (o != this)
|
// {
|
// o.CreateMaterial();
|
// } else
|
// {
|
// super.CreateMaterial();
|
// }
|
// }
|
// }
|
// }
|
|
// void UpdateMaterial(cMaterial anchor, cMaterial current, boolean propagate)
|
// {
|
// if (blockloop)
|
// {
|
// return;
|
// }
|
//
|
// super.UpdateMaterial(anchor, current, false);
|
//
|
// if (!propagate)
|
// {
|
// return;
|
// }
|
//
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D child = (Object3D) Children().reserve(i);
|
// blockloop = true;
|
// child.UpdateMaterial(anchor, current, propagate);
|
// blockloop = false;
|
// Children().release(i);
|
// }
|
//
|
// int temp = count;
|
//
|
// count = 0; // try leaf
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D child = (Object3D) Children().reserve(i);
|
// blockloop = true;
|
// child.UpdateMaterial(anchor, current, propagate);
|
// blockloop = false;
|
// Children().release(i);
|
// }
|
//
|
// count = temp;
|
// }
|
//
|
boolean IsSelected(Object3D child)
|
{
|
if (selection != null)
|
{
|
if (selection.indexOf(child) != -1)
|
{
|
return true;
|
}
|
}
|
if (parent == null)
|
{
|
return false;
|
}
|
|
if (parent.IsContainedIn(this))
|
{
|
return false;
|
}
|
|
return true; // parent.IsSelected(child);
|
}
|
|
/*
|
cTreePath Select(int indexcount, boolean deselect)
|
{
|
if (count <= 0)
|
{
|
return null;
|
}
|
|
if (bRep != null)
|
{
|
cTreePath tp = super.Select(indexcount, deselect);
|
|
//HANDLE
|
if (tp != null || !(this instanceof BezierPatch))
|
return tp;
|
}
|
|
for (int i = 0; i < Children().size(); i++)
|
{
|
Object3D child = (Object3D) Children().reserve(i);
|
|
if (!child.HasTransparency())
|
{
|
cTreePath leaf = child.Select(indexcount, deselect);
|
|
Children().release(i);
|
|
if (leaf != null)
|
{
|
cTreePath tp = new cTreePath(this, leaf);
|
if (editWindow != null)
|
{
|
//System.out.println("editWindow = " + editWindow + " vs " + this);
|
editWindow.Select(tp, deselect);
|
}
|
|
return tp;
|
}
|
} else
|
{
|
Children().release(i);
|
}
|
}
|
|
for (int i = 0; i < Children().size(); i++)
|
{
|
Object3D child = (Object3D) Children().reserve(i);
|
|
if (child.HasTransparency() && child.size() != 0)
|
{
|
cTreePath leaf = child.Select(indexcount, deselect);
|
|
Children().release(i);
|
|
if (leaf != null)
|
{
|
cTreePath tp = new cTreePath(this, leaf);
|
if (editWindow != null)
|
{
|
editWindow.Select(tp, deselect);
|
}
|
|
return tp;
|
}
|
} else
|
{
|
Children().release(i);
|
}
|
}
|
|
return null;
|
}
|
*/
|
|
Vector GetSelectionTreePaths()
|
{
|
Vector tps = new Vector();
|
|
for (int i = 0; i < Children().size(); i++)
|
{
|
Object3D child = (Object3D) Children().reserve(i);
|
|
boolean isSelected = IsSelected(child);
|
|
Children().release(i);
|
|
if (isSelected)
|
{
|
tps.add(child.GetTreePath());
|
} else
|
{
|
child.AppendSelectionTreePaths(tps);
|
}
|
}
|
|
return tps;
|
}
|
|
void AppendSelectionTreePaths(Vector tps)
|
{
|
for (int i = 0; i < Children().size(); i++)
|
{
|
Object3D child = (Object3D) Children().reserve(i);
|
|
boolean isSelected = IsSelected(child);
|
|
Children().release(i);
|
|
if (isSelected)
|
{
|
tps.add(child.GetTreePath());
|
} else
|
{
|
child.AppendSelectionTreePaths(tps);
|
}
|
}
|
}
|
|
void draw(ClickInfo info, int level, boolean select)
|
{
|
new Exception().printStackTrace();
|
|
ClickInfo newInfo = new ClickInfo();
|
newInfo.flags = info.flags;
|
newInfo.bounds = info.bounds;
|
newInfo.camera = info.camera;
|
newInfo.g = info.g;
|
newInfo.toScreen = info.toScreen;
|
if (newInfo.toScreen == null)
|
{
|
newInfo.toScreen = info.camera.toScreen;
|
}
|
|
if (level > 0)
|
{
|
newInfo.toScreen = new double[4][4];
|
LA.matConcat(toParent, info.toScreen, newInfo.toScreen);
|
}
|
Object3D child;
|
boolean sel;
|
//for (Enumeration e = Children().elements(); e.hasMoreElements(); child.draw(newInfo, level + 1, sel))
|
int nb = Children().size();
|
for (int i = 0; i < nb; i++)
|
{
|
//child = (Object3D)e.nextElement();
|
child = (Object3D) Children().reserve(i);
|
sel = select;
|
if (level == 0 && IsSelected(child))
|
{
|
sel = true;
|
}
|
child.draw(newInfo, level + 1, sel);
|
Children().release(i);
|
}
|
|
}
|
|
void draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)
|
{
|
if (this instanceof BezierPatch)
|
{
|
//DrawNode(display,root,selected);
|
super.draw(display, root, selected, blocked);
|
//return; // HANDLE
|
}
|
|
if (count <= 0) // || display.IsFreezed())
|
{
|
return;
|
}
|
|
if ((//display.drawMode == CameraPane.SHADOW ||
|
display.DrawMode() == CameraPane.SELECTION || display.IsDebugSelection()) &&
|
//HasTransparency())
|
// SERIAL PATCH
|
// if (viewCode == -1)
|
// {
|
// viewCode = 0; // false;
|
// if (
|
super.HasTransparency())
|
// {
|
// viewCode = 1;
|
// } // true;
|
// }
|
{
|
return;
|
}
|
|
cTexture tex = null;
|
|
boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection();
|
|
if (//display.drawMode != display.SHADOW &&
|
!selectmode // display.drawMode != display.SELECTION
|
)
|
{
|
tex = GetTextures();
|
}
|
|
boolean failedPigment = false;
|
boolean failedBump = false;
|
|
try
|
{
|
display.BindPigmentTexture(tex, texres);
|
}
|
catch (Exception e)
|
{
|
// System.err.println("FAILED: " + this);
|
failedPigment = true;
|
}
|
|
try
|
{
|
display.BindBumpTexture(tex, texres);
|
}
|
catch (Exception e)
|
{
|
//System.err.println("FAILED: " + this);
|
failedBump = true;
|
}
|
|
if (//true) // new NORMAND
|
touched || softtouched)
|
{
|
// ??????? touched = false; // ???
|
//Applet3D.tracein("DRAW : ", this);
|
if (this instanceof Texture || this instanceof TextureNode)
|
{
|
//System.out.println("Texture2 = "); LA.matPrint(toParent);
|
display.PushTextureMatrix(ToParent(), GetTransformCount());
|
} else
|
{
|
//System.out.println("Model2 = " + this);
|
Invariants(); // june 2013
|
display.PushMatrix(ToParent(), GetTransformCount());
|
if (!cLinker.stack.empty()) // cLinker.stack.peek() != null)
|
{
|
LA.xformPos(cLinker.stack.peek(), fromParent, cLinker.stack.peek());
|
}
|
}
|
|
drawSelf(display, root, selected, blocked);
|
|
if (this instanceof Texture || this instanceof TextureNode)
|
{
|
display.PopTextureMatrix(fromParent);
|
} else
|
{
|
/*
|
System.out.println("PUSH");
|
LA.matPrint(fromParent);
|
LA.matInvert(toParent, display.tmpmat);
|
System.out.println("REAL");
|
LA.matPrint(display.tmpmat);
|
System.out.println();
|
*/
|
|
display.PopMatrix(fromParent);
|
if (!cLinker.stack.empty()) // cLinker.stack.peek() != null)
|
{
|
LA.xformPos(cLinker.stack.peek(), toParent, cLinker.stack.peek());
|
}
|
}
|
|
//Applet3D.traceout("DRAW : ", this);
|
//?? softtouched = false;
|
//if(display.drawMode == display.DEFAULT)
|
// touched = softtouched = false; // ?????????
|
} else
|
{
|
if (CameraPane.HANDLES)
|
{
|
BoundaryRep brep = bRep;
|
|
bRep = null;
|
|
super.draw(display, root, selected, blocked);
|
|
bRep = brep;
|
}
|
}
|
|
if (!failedBump)
|
display.ReleaseBumpTexture(tex);
|
|
if (!failedPigment)
|
display.ReleasePigmentTexture(tex);
|
}
|
|
void Reset0()
|
{
|
/*
|
if (count <= 1)
|
{
|
return;
|
}
|
*/
|
|
super.ResetDisplayList();
|
|
// Patch...
|
if (parent != null)
|
{
|
if (selection == null)
|
selection = new Object3D();
|
selection.clear();
|
}
|
|
Object3D child;
|
int nb = Children().size();
|
for (int i = 0; i < nb; i++)
|
{
|
child = (Object3D) Children().reserve(i);
|
child.ResetDisplayList();
|
Children().release(i);
|
}
|
}
|
|
// void PreprocessOcclusion(CameraPane cp)
|
// {
|
// /*
|
// if (AOdone)
|
// return;
|
//
|
// AOdone = true;
|
// */
|
//
|
// if (blockloop)
|
// return;
|
//
|
// if (count <= 0)
|
// {
|
// return;
|
// }
|
//
|
// int nb = Children().size();
|
// for (int i = 0; i < nb; i++)
|
// {
|
// // WARNING LOOP
|
// Object3D child = (Object3D) Children().reserve(i);
|
// //Object3D child = (Object3D) Children().get(i);
|
//
|
// if (child == null)
|
// continue;
|
//
|
// blockloop = true;
|
// child.PreprocessOcclusion(cp);
|
// blockloop = false;
|
//
|
// Children().release(i);
|
// }
|
// }
|
|
void drawSelfOld(iCameraPane display, Object3D /*Composite*/ root, boolean selected)
|
{
|
// if (count <= 0) // || display.IsFreezed())
|
// {
|
// return;
|
// }
|
//
|
// //if (depth == 0)
|
// //return;
|
// //Applet3D.tracein("draw", this);
|
// cTexture tex = null;
|
//
|
// if (display.drawMode != display.SELECTION)
|
// {
|
// tex = GetTextures();
|
// }
|
//
|
// //System.out.println("Object = " + this);
|
//
|
// // if (display.BindTextures(tex))
|
// {
|
// Touch();
|
// }
|
//
|
// if (material != null)
|
// {
|
// materialstack[stackdepth] = material;
|
// selectedstack[stackdepth] = selected;
|
// cStatic.objectstack[stackdepth++] = this;
|
// //System.out.println("material " + material);
|
// //Applet3D.tracein("selected ", selected);
|
// display.vector2buffer = projectedVertices;
|
// material.Draw(display, selected);
|
// }
|
//
|
// Object3D child;
|
// boolean sel;
|
// int nb = Children().size();
|
// /*
|
// for (int i=0; i<nb; i++, child.draw(display, selected || child.IsSelected())) // , level + 1, sel))
|
// {
|
// child = (Object3D) Children().get(i);
|
// //sel = select;
|
// //if (level == 0 && IsSelected(child))
|
// sel = true;
|
// }
|
// */
|
// //depth -= 1;
|
// for (int i = 0; i < nb; i++)
|
// {
|
// child = (Object3D) Children().reserve(i);
|
//
|
// if (!child.HasTransparency())
|
// {
|
// sel = root.selection != null && root.selection.indexOf(child) != -1;
|
// //Applet3D.tracein("draw", child);
|
// child.draw(display, root, selected || sel); // || child.IsSelected());
|
// //Applet3D.traceout("draw", child);
|
// }
|
//
|
// Children().release(i);
|
// }
|
// /*
|
// for (int i = 0; i < nb; i++)
|
// {
|
// child = (Object3D) Children().reserve(i);
|
//
|
// if (child.HasTransparency())
|
// {
|
// sel = root.selectees != null && root.selectees.indexOf(child) != -1;
|
// //Applet3D.tracein("T draw", child);
|
// child.draw(display, root, selected || sel); // || child.IsSelected());
|
// //Applet3D.traceout("draw", child);
|
// }
|
//
|
// Children().release(i);
|
// }
|
// */
|
// //depth += 1;
|
//
|
// if (material != null)
|
// {
|
// stackdepth -= 1;
|
// if (stackdepth > 0)
|
// {
|
// display.vector2buffer = cStatic.objectstack[stackdepth - 1].projectedVertices;
|
// materialstack[stackdepth - 1].Draw(display, selectedstack[stackdepth - 1]);
|
// }
|
// //Applet3D.traceout("selected ", (stackdepth>0)?selectedstack[stackdepth-1]:"???");
|
// //else
|
// //material.Draw(display, false);
|
// }
|
// display.ReleaseTextures(tex);
|
// //Applet3D.traceout("draw", this);
|
}
|
|
boolean HasTransparency()
|
{
|
if (true) return false;
|
|
// SERIAL PATCH
|
if (viewCode == -1)
|
{
|
viewCode = 0; // false;
|
if (super.HasTransparency())
|
{
|
viewCode = 1;
|
} // true;
|
else
|
{
|
Object3D child;
|
int nb = Children().size();
|
for (int i = 0; i < nb; i++)
|
{
|
child = (Object3D) Children().reserve(i);
|
|
boolean has = child.HasTransparency();
|
|
Children().release(i);
|
|
if (has)
|
{
|
viewCode = 1; // true;
|
break;
|
}
|
}
|
}
|
}
|
|
return viewCode == 1;
|
}
|
|
// void drawEditHandles(ClickInfo info, int level)
|
// {
|
// if (level == 0)
|
// {
|
// if (selection == null)
|
// return;
|
//
|
// Object3D selectee;
|
// for (Enumeration e = selection.elements(); e.hasMoreElements(); selectee.drawEditHandles(info, level + 1))
|
// {
|
// selectee = (Object3D) e.nextElement();
|
// }
|
//
|
// } else
|
// {
|
// super.drawEditHandles(info, level + 1);
|
// }
|
// }
|
//
|
// boolean doEditClick(ClickInfo info, int level)
|
// {
|
// doSomething = 0;
|
// if (level == 0)
|
// {
|
// return doParentClick(info);
|
// }
|
// if (super.doEditClick(info, level))
|
// {
|
// doSomething = 1;
|
// return true;
|
// } else
|
// {
|
// return false;
|
// }
|
// }
|
//
|
// boolean doParentClick(ClickInfo info)
|
// {
|
// boolean retval = false;
|
//
|
// for (Enumeration e = selection.elements(); e.hasMoreElements();)
|
// {
|
// Object3D selectee = (Object3D) e.nextElement();
|
// if (selectee.doEditClick(info, 1))
|
// {
|
// childToDrag = selectee;
|
// doSomething = 2;
|
// //return true;
|
// retval = true;
|
// }
|
// }
|
//
|
// return retval;
|
// }
|
//
|
// void doEditDrag(ClickInfo info)
|
// {
|
// switch (doSomething)
|
// {
|
// case 1: // '\001'
|
// super.doEditDrag(info);
|
// break;
|
//
|
// case 2: // '\002'
|
// // Use childToDrag for specific selection
|
// for (int i = 0; i < selection.size(); i++)
|
// {
|
// Object3D sel = selection.get(i);
|
// //System.out.println(" sel = " + sel);
|
// if (sel != this) // childToDrag != this)
|
// {
|
// //sel.hitSomething = childToDrag.hitSomething;
|
// //childToDrag.doEditDrag(info);
|
// sel.doEditDrag(info);
|
// } else
|
// {
|
// super.doEditDrag(info);
|
// }
|
// }
|
// break;
|
// }
|
// }
|
//
|
// boolean doSelection(ClickInfo info, Rectangle r, int level)
|
// {
|
// if (level == 0)
|
// {
|
// deselectAll();
|
// }
|
// ClickInfo newInfo = new ClickInfo();
|
// newInfo.flags = info.flags;
|
// newInfo.bounds = info.bounds;
|
// newInfo.camera = info.camera;
|
// newInfo.g = info.g;
|
// newInfo.toScreen = info.toScreen;
|
//
|
// if (newInfo.toScreen == null)
|
// {
|
// newInfo.toScreen = info.camera.toScreen;
|
// }
|
// if (level > 0)
|
// {
|
// newInfo.toScreen = new double[4][4];
|
// LA.matConcat(toParent, info.toScreen, newInfo.toScreen);
|
// }
|
// boolean temp = false;
|
// Object3D child;
|
// int nb = Children().size();
|
// for (int i = 0; i < nb; i++)
|
// {
|
// child = (Object3D) Children().reserve(i);
|
// boolean doSelect = child.doSelection(newInfo, r, level + 1);
|
// Children().release(i);
|
//
|
// if (doSelect)
|
// {
|
// temp = true;
|
// if (level == 0)
|
// {
|
// addSelectee(child);
|
// }
|
// }
|
// }
|
//
|
// if (level == 0 && editWindow != null)
|
// {
|
// editWindow.refreshContents();
|
// }
|
// return temp;
|
// }
|
//
|
// void invariants()
|
// {
|
// GraphreeD.tracein(this);
|
// for (int i = 0; i < Children().size(); i++)
|
// {
|
// Object3D child = (Object3D) Children().reserve(i);
|
// if (child == null)
|
// continue;
|
//
|
// if (child.parent != null && child.parent != this)
|
// {
|
// System.out.println("INVARIANT FAIL: " + this);
|
// }
|
// child.invariants();
|
// Children().release(i);
|
// }
|
//
|
// assert selection != null;
|
// GraphreeD.traceout(this);
|
// }
|
|
Composite children; // no longer used
|
/*transient*/ Vector<Object3D> selectees; // deprecated
|
// transient private int doSomething;
|
//// transient private Object3D childToDrag;
|
// private static final int doNothing = 0;
|
// private static final int editSelf = 1;
|
// private static final int editChild = 2;
|
|
/*
|
public int Size()
|
{
|
return super.size();
|
}
|
|
public int size()
|
{
|
////GraphreeD.trace("SIZE " + this + " = ", super.size());
|
//System.out.println("SIZE = " + this + " " + super.size());
|
//assert (count >= 0);
|
if (count <= 0)
|
{
|
return 0;
|
} else
|
{
|
return super.size();
|
}
|
}
|
|
public Object3D reserve(int i)
|
{
|
////GraphreeD.tracein("RESERVE " + this + " = ", i);
|
Object3D child = super.get(i);
|
//Applet3D.tracein("RESERVE ", child);
|
|
child.count--;
|
//assert (child.count >= 0);
|
|
return child;
|
}
|
|
public void release(int i)
|
{
|
////GraphreeD.traceout("RELEASE " + this + " = ", i);
|
// Object3D child = super.get(i);
|
// //Applet3D.traceout("RELEASE ", child);
|
// child.count++;
|
|
super.get(i).count++;
|
//assert (child.count >= 0);
|
}
|
*/
|
|
//int depth = 10;
|
|
}
|