📄 model3d.java
字号:
// FrontEnd Plus GUI for JAD
// DeCompiled : Model3D.class
import java.awt.Graphics;
import java.util.*;
class Model3D
{
Matrix3D ViewMat;
Hashtable Objects;
Vector Faces;
public Model3D()
{
ViewMat = null;
Objects = new Hashtable();
Faces = new Vector();
}
public Model3D(Vertex vertex)
{
Objects = new Hashtable();
Faces = new Vector();
SetView(vertex);
}
public Model3D(Matrix3D matrix3d)
{
Objects = new Hashtable();
Faces = new Vector();
ViewMat = matrix3d;
}
public synchronized void AddObject(String s, Object3D object3d)
{
Objects.put(s, object3d);
for(int i = 0; i < object3d.FaceNum; i++)
Faces.addElement(object3d.Faces[i]);
}
private Object3D GetObject(String s)
{
return (Object3D)Objects.get(s);
}
public synchronized void DelObject(String s)
{
Object3D object3d = (Object3D)Objects.remove(s);
for(int i = 0; i < object3d.FaceNum; i++)
Faces.removeElement(object3d.Faces[i]);
}
public synchronized void ClearObject()
{
Objects.clear();
Faces.removeAllElements();
}
public void SetView(Vertex vertex)
{
float f = vertex.x;
float f1 = vertex.y;
float f2 = vertex.z;
float f3 = (float)Math.sqrt(f * f + f1 * f1 + f2 * f2);
float f4 = (float)((double)f1 / Math.sqrt(f * f + f1 * f1));
float f5 = (float)((double)f / Math.sqrt(f * f + f1 * f1));
float f6 = (float)(Math.sqrt(f * f + f1 * f1) / (double)f3);
float f7 = f2 / f3;
float af[][] = {
{
-f4, f5, 0.0F, 0.0F
}, {
-f5 * f7, -f4 * f7, f6, 0.0F
}, {
-f5 * f6, -f4 * f6, -f7, 0.0F
}, {
0.0F, 0.0F, 0.0F, 1.0F
}
};
ViewMat = new Matrix3D(af);
}
public void SetView(Matrix3D matrix3d)
{
ViewMat = matrix3d;
}
public Matrix3D GetView()
{
return ViewMat;
}
public void XRotateView(double d)
{
ViewMat.ProXRotate(d);
}
public void YRotateView(double d)
{
ViewMat.ProYRotate(d);
}
public void ZRotateView(double d)
{
ViewMat.ProZRotate(d);
}
public void XRotate(String s, double d)
{
GetObject(s).XRotate(d);
}
public void YRotate(String s, double d)
{
GetObject(s).YRotate(d);
}
public void ZRotate(String s, double d)
{
GetObject(s).ZRotate(d);
}
public void Unify(String s)
{
GetObject(s).Unify();
}
public void Transform(String s)
{
GetObject(s).Transform();
}
public void Transform()
{
Object3D object3d;
for(Enumeration enumeration = Objects.elements(); enumeration.hasMoreElements(); object3d.Transform())
object3d = (Object3D)enumeration.nextElement();
}
protected void Sort()
{
for(int i = 0; i < Faces.size(); i++)
{
Face face = (Face)Faces.elementAt(i);
face.CalcParam(ViewMat);
}
QuickSort(0, Faces.size() - 1);
}
public synchronized void Paint(Graphics g, int i, int j)
{
if(Faces.isEmpty())
return;
Sort();
for(int k = 0; k < Faces.size(); k++)
{
Face face = (Face)Faces.elementAt(k);
face.Paint(g, i, j);
}
}
void DefineBound(int i, int j)
{
float f = 10000F;
float f1 = -10000F;
float f2 = 10000F;
float f3 = -10000F;
float f4 = 10000F;
float f5 = -10000F;
for(Enumeration enumeration = Objects.elements(); enumeration.hasMoreElements();)
{
Object3D object3d = (Object3D)enumeration.nextElement();
for(int k = 0; k < object3d.VerNum; k++)
{
f = Math.min(f, object3d.Vertices[k].x);
f2 = Math.min(f2, object3d.Vertices[k].y);
f4 = Math.min(f4, object3d.Vertices[k].z);
f1 = Math.max(f1, object3d.Vertices[k].x);
f3 = Math.max(f3, object3d.Vertices[k].y);
f5 = Math.max(f5, object3d.Vertices[k].z);
}
}
float f6 = (0.6F * (float)Math.min(i, j)) / Math.max(Math.max(f1 - f, f3 - f2), f5 - f4);
ViewMat.ProScale(f6, f6, f6);
Transform();
}
protected void QuickSort(int i, int j)
{
int k = i;
int l = j;
int i1 = (i + j) / 2;
do
{
while(((Face)Faces.elementAt(i1)).CloserThan((Face)Faces.elementAt(k)) && k < j)
k++;
for(; ((Face)Faces.elementAt(l)).CloserThan((Face)Faces.elementAt(i1)) && l > i; l--);
if(k <= l)
{
Face face = (Face)Faces.elementAt(k);
Faces.setElementAt((Face)Faces.elementAt(l), k);
Faces.setElementAt(face, l);
k++;
l--;
}
} while(k <= l);
if(i < l)
QuickSort(i, l);
if(k < j)
QuickSort(k, j);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -