summaryrefslogtreecommitdiff
path: root/src/graphyx/gui/WorldPanel.scala
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2009-11-28 20:25:35 +0000
committerJakob Odersky <jodersky@gmail.com>2009-11-28 20:25:35 +0000
commit5031df4b26afd515274b5ca34f0d5380a99e4223 (patch)
tree41aac12ec2c03426910de72486a2d87e58cebc44 /src/graphyx/gui/WorldPanel.scala
parentfbdf90f0deb14ddd8a457ff1f5f7715e4d3c2f2a (diff)
downloadsims-5031df4b26afd515274b5ca34f0d5380a99e4223.tar.gz
sims-5031df4b26afd515274b5ca34f0d5380a99e4223.tar.bz2
sims-5031df4b26afd515274b5ca34f0d5380a99e4223.zip
Minor graphyx modifications. Added tests. Added 'PrismaticJoint' (still incomplete). Started to transfer 'ForceJoints' to ordinary joints who use only constraints for correction. Started to add materials.
Diffstat (limited to 'src/graphyx/gui/WorldPanel.scala')
-rw-r--r--src/graphyx/gui/WorldPanel.scala30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/graphyx/gui/WorldPanel.scala b/src/graphyx/gui/WorldPanel.scala
index 13765e5..cd91f00 100644
--- a/src/graphyx/gui/WorldPanel.scala
+++ b/src/graphyx/gui/WorldPanel.scala
@@ -42,6 +42,7 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
var drawAABBs = false
var drawPairs = false
var drawCollisions = false
+ var trace = false
override def paintComponent(g: java.awt.Graphics) = {
var parts: Seq[graphyx.graphics.Drawable] = Seq()
@@ -55,6 +56,7 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
drawAxes(g)
g.translate(offset.x.toInt, -offset.y.toInt)
drawParts(parts, g)
+ if (trace) trace(scene.shapes, g)
g.translate(-offset.x.toInt, offset.y.toInt)
}
@@ -80,6 +82,30 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
}
}
+ import collection.mutable._
+ val prevPos: collection.mutable.Map[Int, collection.mutable.Queue[Vector2D]] = Map()
+ def trace(shapes: Iterable[graphics.GraphicalShape], g: java.awt.Graphics) = {
+ for (s <- shapes) {
+ s.g = g
+ s.windowHeight = super.size.height
+ s.ppm = ppm
+ s.scale = this.scale
+
+
+ if (!prevPos.contains(s.uid)) prevPos += (s.uid -> new Queue[Vector2D])
+ else {
+ prevPos(s.uid).enqueue(s.pos)
+ for(i <- 0 until prevPos(s.uid).length - 1) {
+ val sp = prevPos(s.uid)(i)
+ val ep = prevPos(s.uid)(i + 1)
+ s.g.setColor(java.awt.Color.cyan)
+ s.drawLine(sp, ep)
+ }
+ if (prevPos(s.uid).length == 50) prevPos(s.uid).dequeue
+ }
+ }
+ }
+
def getBody(p: Vector2D): Option[Body] = {
val shape = scene.shapes.find(_.contains(p))
if (shape != None) Some(shape.get.real.body)
@@ -106,8 +132,10 @@ class WorldPanel(container: Container) extends BoxPanel(Orientation.Vertical){
case MousePressed(c,p,x,y,b) => {
mousePressed = true; startPoint = p; endPoint = p
x match {
- case 1024 if (getBody(p) != None) => grab(getBody(p).get, p)
+ case 1024 if (getBody(p) != None) => grab(getBody(p).get, p)
+ case 1152 if (getBody(p) != None) => {grabbedBody = Some(new GrabbedBody(getBody(p).get, p)); popup.body = grabbedBody.get.body; popup.peer.setLocation(p); popup.visible = true}
case 4096 if (getBody(p) != None) => {grabbedBody = Some(new GrabbedBody(getBody(p).get, p)); popup.body = grabbedBody.get.body; popup.peer.setLocation(p); popup.visible = true}
+ case _ => ()
}
}