Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/view
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv9090/src/net/sourceforge/bprocessor/gl/view
Modified Files:
Display.java
Log Message:
instance transformations used on gl before instance drawing
Index: Display.java
===================================================================
RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/view/Display.java,v
retrieving revision 1.46
retrieving revision 1.47
diff -C2 -d -r1.46 -r1.47
*** Display.java 2 Nov 2007 12:51:29 -0000 1.46
--- Display.java 5 Nov 2007 18:12:12 -0000 1.47
***************
*** 40,43 ****
--- 40,44 ----
import net.sourceforge.bprocessor.model.Space;
import net.sourceforge.bprocessor.model.Surface;
+ import net.sourceforge.bprocessor.model.TransformStack;
import net.sourceforge.bprocessor.model.Vertex;
***************
*** 786,794 ****
private static void draw(Space space, boolean inside) {
! if (space.isUnion()) {
! CoordinateSystem cs = space.getCoordinateSystems().iterator().next();
! Vertex translation = cs.center();
! gl.glPushMatrix();
! gl.glTranslated(translation.getX(), translation.getY(), translation.getZ());
}
if (space.isLocked() && USEDL) {
--- 787,792 ----
private static void draw(Space space, boolean inside) {
! if (space.isInstance()) {
! translateToCoordinatesystem(space);
}
if (space.isLocked() && USEDL) {
***************
*** 1033,1040 ****
draw(current, inside || (current == active));
}
! if (space.isUnion()) {
gl.glPopMatrix();
}
}
private static void hilite(Collection<Geometric> geometrics) {
--- 1031,1060 ----
draw(current, inside || (current == active));
}
! if (space.isInstance()) {
gl.glPopMatrix();
}
}
+
+ /**
+ * @param space
+ */
+ private static void translateToCoordinatesystem(Space space) {
+ TransformStack ts = space.getTransformations();
+ Vertex center = ts.transform(new Vertex(0, 0, 0));
+ Vertex i = ts.transform(new Vertex(1, 0, 0)).minus(center);
+ Vertex j = ts.transform(new Vertex(0, 1, 0)).minus(center);
+ Vertex k = ts.transform(new Vertex(0, 0, 1)).minus(center);
+
+ //CoordinateSystem cs = space.getCoordinateSystems().iterator().next();
+ //Vertex translation = cs.center();
+ gl.glPushMatrix();
+ double[] matrix = new double[]{
+ i.getX(), i.getY(), i.getZ(), 0,
+ j.getX(), j.getY(), j.getZ(), 0,
+ k.getX(), k.getY(), k.getZ(), 0,
+ center.getX(), center.getY(), center.getZ(), 1};
+ gl.glMultMatrixd(matrix, 0);
+ //gl.glTranslated(translation.getX(), translation.getY(), translation.getZ());
+ }
private static void hilite(Collection<Geometric> geometrics) {
***************
*** 1060,1064 ****
if (current instanceof Space) {
Space space = (Space) current;
!
Collection<Surface> envelope = new LinkedList(space.getEnvelope());
if (envelope.isEmpty()) {
--- 1080,1086 ----
if (current instanceof Space) {
Space space = (Space) current;
! if (space.isInstance()) {
! translateToCoordinatesystem(space);
! }
Collection<Surface> envelope = new LinkedList(space.getEnvelope());
if (envelope.isEmpty()) {
***************
*** 1068,1071 ****
--- 1090,1096 ----
Collection<Edge> edges = Surface.edges(envelope);
paintEdges(edges, redish, 2.0f);
+ if (space.isInstance()) {
+ gl.glPopMatrix();
+ }
}
}
|