// класс содержащий модель - массив групп и источников света import java.util.Vector; import javax.microedition.lcdui.Graphics; public class Model { Vector g; Vector l; // освещение public Model() { g = new Vector(); l=new Vector(); } public void draw(Graphics gr, Matrix3D m) { if(l!=null&&!l.isEmpty()){for(int i=0;ix){ int tmp=sx; sx=x; x=tmp; } if(sy>y){ int tmp=sy; sy=y; y=tmp; } Vector p=new Vector(); if(l!=null)for(int i=0;i=sx&&z.sx-10<=x)||(z.sx+10>=sx&&z.sx+10<=x)||(z.sx-10<=sx&&z.sx+10>=x))&&((z.sy-10>=sy&&z.sy-10<=y)||(z.sy+10>=sy&&z.sy+10<=y)||(z.sy-10<=sy&&z.sy+10>=y)))p.addElement(z); } int[] b; if(g!=null)for (int i=0;i=sx&&b[0]<=x)||(b[2]>=sx&&b[2]<=x)||(b[0]<=sx&&b[2]>=x))&&((b[1]>=sy&&b[1]<=y)||(b[3]>=sy&&b[3]<=y)||(b[1]<=sy&&b[3]>=y)))p.addElement(gr); } return p; } public Vector selectTr(int sx,int sy,int x,int y){ // треугольники if(sx>x){ int tmp=sx; sx=x; x=tmp; } if(sy>y){ int tmp=sy; sy=y; y=tmp; } Vector p=new Vector(); for(int i=0;i=sx&&tr.a.sy<=y&&tr.a.sy>=sy)||(tr.b.sx<=x&&tr.b.sx>=sx&&tr.b.sy<=y&&tr.b.sy>=sy)||(tr.c.sx<=x&&tr.c.sx>=sx&&tr.c.sy<=y&&tr.c.sy>=sy)) p.addElement(tr); } } return p; } public Vector selectVer(int sx,int sy,int x,int y){ // вершины if(sx>x){ int tmp=sx; sx=x; x=tmp; } if(sy>y){ int tmp=sy; sy=y; y=tmp; } Vector p=new Vector(); for(int i=0;i=sx&&ver.sx<=x&&ver.sy>=sy&&ver.sy<=y)p.addElement(ver); } } return p; } public Vector select3d(int[] s,Matrix3D m){ // объекты, попавшие в трехмерное выделение if(s[0]>s[3]){ int tmp=s[0]; s[0]=s[3]; s[3]=tmp; } if(s[1]>s[4]){ int tmp=s[1]; s[1]=s[4]; s[4]=tmp; } if(s[2]>s[5]){ int tmp=s[2]; s[2]=s[5]; s[5]=tmp; } Vector p=new Vector(); if(l!=null)for (int i=0;i=s[0]&&z.x<=s[3]&&z.y>=s[1]&&z.y<=s[4]&&z.z>=s[2]&&z.z<=s[5])p.addElement(z); } int[] b; if(g!=null)for(int i=0;i=s[0]&&b[0]<=s[3])||(b[3]>=s[0]&&b[3]<=s[3])||(b[0]<=s[0]&&b[3]>=s[3]))&&((b[1]>=s[1]&&b[1]<=s[4])||(b[4]>=s[1]&&b[4]<=s[4])||(b[1]<=s[1]&&b[4]>=s[4]))&&((b[2]>=s[2]&&b[2]<=s[5])||(b[5]>=s[2]&&b[5]<=s[5])||(b[2]<=s[2]&&b[5]>=s[5]))) p.addElement(gr); } return p; } public Vector select3dTr(int[] s){ if(s[0]>s[3]){ int tmp=s[0]; s[0]=s[3]; s[3]=tmp; } if(s[1]>s[4]){ int tmp=s[1]; s[1]=s[4]; s[4]=tmp; } if(s[2]>s[5]){ int tmp=s[2]; s[2]=s[5]; s[5]=tmp; } Vector p=new Vector(); for(int i=0;i=s[0]&&tr.a.y<=s[4]&&tr.a.y>=s[1]&&tr.a.z<=s[5]&&tr.a.z>=s[2])||(tr.b.x<=s[3]&&tr.b.x>=s[0]&&tr.b.y<=s[4]&&tr.b.y>=s[1]&&tr.b.z<=s[5]&&tr.b.z>=s[2])||(tr.c.x<=s[3]&&tr.c.x>=s[0]&&tr.c.y<=s[4]&&tr.c.y>=s[1]&&tr.c.z<=s[5]&&tr.c.z>=s[2])) p.addElement(tr); } } return p; } public Vector select3dVer(int[] s){ if(s[0]>s[3]){ int tmp=s[0]; s[0]=s[3]; s[3]=tmp; } if(s[1]>s[4]){ int tmp=s[1]; s[1]=s[4]; s[4]=tmp; } if(s[2]>s[5]){ int tmp=s[2]; s[2]=s[5]; s[5]=tmp; } Vector p=new Vector(); for(int i=0;i=s[0]&&ver.x<=s[3]&&ver.y>=s[1]&&ver.y<=s[4]&&ver.z>=s[2]&&ver.z<=s[5])p.addElement(ver); } } return p; } public Object pick(int x,int y,Matrix3D m){ // ближайший объект на месте щелчка курсором int[] b; int max=Integer.MAX_VALUE; Object ret=null; if(l!=null)for(int i=0;i=li.sx-10&&x<=li.sx+10&&y>=li.sy-10&&y<=li.sy+10&&li.zc>=(-Vertex.dist+1)){max=li.zc;ret=li;} } if(g!=null)for(int i=0;i=b[0]&&x<=b[2]&&y>=b[1]&&y<=b[3]&&b[4]>=(-Vertex.dist+1)){max=b[4];ret=gr;} } return ret; } public Triangle pickTr(int x,int y,Matrix3D m){ int minz=Integer.MAX_VALUE; Triangle ret=null; for (int i=0;i=0&&bi>=0&&ci>=0)||(ai<=0&&bi<=0&&ci<=0))&&tr.getS()